Skip to content

Commit 7495cc5

Browse files
feat: Qiacuity dPCR - add handle for first column containing the well (#1129)
## Key Differences Between Current and New File Format | Field | Current Format | New Format (example04) | |-------|----------------|------------------------| | Well column | Unnamed first column | Explicit `Well` column | | Target | `Target` | `Target (Name)` | | Concentration | `Concentration (copies/µL)` or `Conc. [copies/µL]` | `Conc. [cp/µL] (dPCR reaction)` | | Partitions valid | `Partitions (valid)` | `Partitions (Valid)` (capitalized) | | Partitions positive | `Partitions (positive)` | `Partitions (Positive)` (capitalized) | | Partitions negative | `Partitions (negative)` | `Partitions (Negative)` (capitalized) | | IC field | `IC` | `Target (IC)` | | Control type | `Control type` | `Target (Control)` | **Added column name aliases to handle both current and new formats**
1 parent ac4f860 commit 7495cc5

4 files changed

Lines changed: 1981 additions & 8 deletions

File tree

src/allotropy/parsers/qiacuity_dpcr/qiacuity_dpcr_reader.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,14 @@ def __init__(self, named_file_contents: NamedFileContents):
1919
qiacuity_dpcr_data.columns = qiacuity_dpcr_data.columns.str.replace("�", "μ")
2020
qiacuity_dpcr_data.columns = qiacuity_dpcr_data.columns.str.replace("Âμ", "μ")
2121
column_names = qiacuity_dpcr_data.columns.tolist()
22-
# Rename the blank column to specify that it's the Well Name column
23-
column_names[0] = "Well Name"
22+
if "Well" in column_names:
23+
# Rename "Well" to "Well Name" for consistency
24+
column_names = [
25+
"Well Name" if col == "Well" else col for col in column_names
26+
]
27+
else:
28+
# Rename the blank first column to specify that it's the Well Name column
29+
column_names[0] = "Well Name"
2430
column_index = pd.Index(column_names)
2531
qiacuity_dpcr_data.columns = column_index
2632
self.well_data = qiacuity_dpcr_data

src/allotropy/parsers/qiacuity_dpcr/qiacuity_dpcr_structure.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ def create_measurements(data: SeriesData) -> Measurement:
3131

3232
identifier = data.get(str, "_measurement_identifier") or random_uuid_str()
3333

34-
sample_custom_info = data.get_custom_keys({"IC", "Control type"})
34+
sample_custom_info = data.get_custom_keys(
35+
{"IC", "Control type", "Target (IC)", "Target (Control)"}
36+
)
3537
for key in sample_custom_info:
3638
if sample_custom_info[key] in ("", "-", "-", "--"):
3739
sample_custom_info[key] = None
@@ -43,11 +45,22 @@ def create_measurements(data: SeriesData) -> Measurement:
4345
sample_role_type=sample_role_type,
4446
location_identifier=data[str, "Well Name"],
4547
plate_identifier=data.get(str, "Plate ID"),
46-
target_identifier=data[str, "Target"],
47-
total_partition_count=data[int, "Partitions (valid)"],
48-
concentration=data[float, ["Concentration (copies/μL)", "Conc. [copies/μL]"]],
49-
positive_partition_count=data[int, "Partitions (positive)"],
50-
negative_partition_count=data.get(int, "Partitions (negative)"),
48+
target_identifier=data[str, ["Target", "Target (Name)"]],
49+
total_partition_count=data[int, ["Partitions (valid)", "Partitions (Valid)"]],
50+
concentration=data[
51+
float,
52+
[
53+
"Concentration (copies/μL)",
54+
"Conc. [copies/μL]",
55+
"Conc. [cp/μL] (dPCR reaction)",
56+
],
57+
],
58+
positive_partition_count=data[
59+
int, ["Partitions (positive)", "Partitions (Positive)"]
60+
],
61+
negative_partition_count=data.get(
62+
int, ["Partitions (negative)", "Partitions (Negative)"]
63+
),
5164
fluorescence_intensity_threshold_setting=data.get(float, "Threshold"),
5265
sample_custom_info=sample_custom_info,
5366
custom_info=data.get_unread(),
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
sep=,
2+
"Plate name","Plate ID","Plate type","Well","Sample/NTC/Control","Type","Reaction Mix","Target (Name)","Target (IC)","Target (Control)","Conc. [cp/µL] (dPCR reaction)","Conc. [cp/mL] (dPCR reaction)","CI (95%) (dPCR reaction)","Conc. [cp/µL] (undiluted sample)","Conc. [cp/mL] (undiluted sample)","Partitions (Valid)","Partitions (Positive)","Partitions (Negative)","Threshold","Volume per well [µl]","Concentration factor","Template volume [µl]","Total volume [µl]","Conversion factor","Conversion unit"
3+
"250227 AAV MA 6","2186f026-541d-438c-8195-2a1da8a81e56","Nanoplate 8.5K 96-well","A1","1_5000","Sample","eGFP","eGFP","-","-","7782.4","7782381.203592551","2.9%","1686182594.1","1686182594111.7194","8261","7644","617","19.45","2.837","50000","3.6","15.6","1000","cp/mL"
4+
"","","","A2","1_5000","Sample","eGFP","eGFP","-","-","8243.3","8243312.142179277","3.0%","1786050964.1","1786050964138.843","8220","7693","527","19.45","2.836","50000","3.6","15.6","1000","cp/mL"
5+
"","","","A3","1_10000","Sample","eGFP","eGFP","-","-","4331.8","4331802.288772191","2.7%","1877114325.1","1877114325134.616","8251","6314","1937","19.45","2.847","100000","3.6","15.6","1000","cp/mL"
6+
"","","","A4","1_10000","Sample","eGFP","eGFP","-","-","4131.6","4131574.801895133","2.7%","1790349080.8","1790349080821.2242","8258","6179","2079","19.45","2.841","100000","3.6","15.6","1000","cp/mL"
7+
"","","","A5","GFP+_10000","Sample","eGFP","eGFP","-","-","4273.2","4273167.253847267","2.7%","185170581.0","185170581000.04822","8258","6262","1996","19.45","2.828","10000","3.6","15.6","1000","cp/mL"
8+
"","","","B1","2_5000","Sample","eGFP","eGFP","-","-","7293.9","7293931.173215276","2.9%","1580351754.2","1580351754196.643","8268","7545","723","19.45","2.843","50000","3.6","15.6","1000","cp/mL"
9+
"","","","B2","2_5000","Sample","eGFP","eGFP","-","-","7501.9","7501877.055196923","2.9%","1625406695.3","1625406695292.6664","8256","7539","717","19.45","2.772","50000","3.6","15.6","1000","cp/mL"
10+
"","","","B3","2_10000","Sample","eGFP","eGFP","-","-","3881.2","3881217.559902232","2.7%","1681860942.6","1681860942624.3005","8265","5922","2343","19.45","2.764","100000","3.6","15.6","1000","cp/mL"
11+
"","","","B4","2_10000","Sample","eGFP","eGFP","-","-","3841.0","3841025.99623931","2.7%","1664444598.4","1664444598370.3673","8263","5840","2423","19.45","2.718","100000","3.6","15.6","1000","cp/mL"
12+
"","","","B5","GFP+_10000","Sample","eGFP","eGFP","-","-","4308.0","4307999.978497452","2.7%","186679999.1","186679999068.2229","8263","6181","2082","19.45","2.723","10000","3.6","15.6","1000","cp/mL"
13+
"","","","C1","3_5000","Sample","eGFP","eGFP","-","-","8421.5","8421468.976341419","3.0%","1824651611.5","1824651611540.6408","8257","7738","519","19.45","2.796","50000","3.6","15.6","1000","cp/mL"
14+
"","","","C2","3_5000","Sample","eGFP","eGFP","-","-","8345.5","8345452.807031626","3.0%","1808181441.5","1808181441523.5188","8268","7686","582","19.45","2.706","50000","3.6","15.6","1000","cp/mL"
15+
"","","","C3","3_10000","Sample","eGFP","eGFP","-","-","4496.9","4496934.671644322","2.7%","1948671691.0","1948671691045.873","8281","6296","1985","19.45","2.703","100000","3.6","15.6","1000","cp/mL"
16+
"","","","C4","3_10000","Sample","eGFP","eGFP","-","-","4286.8","4286843.191831076","2.7%","1857632049.8","1857632049793.4663","8280","6114","2166","19.45","2.662","100000","3.6","15.6","1000","cp/mL"
17+
"","","","C5","GFP+_10000","Sample","eGFP","eGFP","-","-","4460.6","4460641.102538355","2.7%","193294447.8","193294447776.66205","8257","6193","2064","19.45","2.645","10000","3.6","15.6","1000","cp/mL"
18+
"","","","D1","4_5000","Sample","eGFP","eGFP","-","-","7045.4","7045441.152649994","2.8%","1526512249.7","1526512249740.832","8285","7476","809","19.45","2.81","50000","3.6","15.6","1000","cp/mL"
19+
"","","","D2","4_5000","Sample","eGFP","eGFP","-","-","7069.1","7069057.464728602","2.8%","1531629117.4","1531629117357.8637","8278","7418","860","19.45","2.726","50000","3.6","15.6","1000","cp/mL"
20+
"","","","D3","4_10000","Sample","eGFP","eGFP","-","-","3853.2","3853186.510478793","2.7%","1669714154.5","1669714154540.8099","8257","5821","2436","19.45","2.696","100000","3.6","15.6","1000","cp/mL"
21+
"","","","D4","4_10000","Sample","eGFP","eGFP","-","-","3657.5","3657500.634484687","2.8%","1584916941.6","1584916941610.0307","8276","5640","2636","19.45","2.662","100000","3.6","15.6","1000","cp/mL"
22+
"","","","D5","GFP+_10000","Sample","eGFP","eGFP","-","-","4623.5","4623482.543713903","2.7%","200350910.2","200350910227.60248","8269","6251","2018","19.45","2.596","10000","3.6","15.6","1000","cp/mL"
23+
"","","","E1","5_5000","Sample","eGFP","eGFP","-","-","6629.6","6629628.363322401","2.8%","1436419478.7","1436419478719.8536","8274","7345","929","19.45","2.807","50000","3.6","15.6","1000","cp/mL"
24+
"","","","E2","5_5000","Sample","eGFP","eGFP","-","-","6718.0","6718029.225576681","2.8%","1455572998.9","1455572998874.9473","8275","7313","962","19.45","2.726","50000","3.6","15.6","1000","cp/mL"
25+
"","","","E3","5_10000","Sample","eGFP","eGFP","-","-","3537.6","3537560.946733544","2.8%","1532943076.9","1532943076917.8689","8263","5510","2753","19.45","2.644","100000","3.6","15.6","1000","cp/mL"
26+
"","","","E4","5_10000","Sample","eGFP","eGFP","-","-","3386.7","3386703.056941245","2.8%","1467571324.7","1467571324674.5393","8264","5398","2866","19.45","2.661","100000","3.6","15.6","1000","cp/mL"
27+
"","","","E5","NTC_1","Sample","eGFP","eGFP","-","-","0.000","0.000","-","0.000","0.000","8263","0","8263","19.45","2.621","1","3.6","15.6","1000","cp/mL"
28+
"","","","F1","6_5000","Sample","eGFP","eGFP","-","-","6685.3","6685344.814481614","2.8%","1448491376.5","1448491376471.0164","8259","7350","909","19.45","2.809","50000","3.6","15.6","1000","cp/mL"
29+
"","","","F2","6_5000","Sample","eGFP","eGFP","-","-","6638.5","6638452.811055944","2.8%","1438331442.4","1438331442395.4546","8247","7287","960","19.45","2.757","50000","3.6","15.6","1000","cp/mL"
30+
"","","","F3","6_10000","Sample","eGFP","eGFP","-","-","3545.9","3545949.866982259","2.8%","1536578275.7","1536578275692.3122","8249","5601","2648","19.45","2.727","100000","3.6","15.6","1000","cp/mL"
31+
"","","","F4","6_10000","Sample","eGFP","eGFP","-","-","3456.3","3456298.662462109","2.8%","1497729420.4","1497729420400.2473","8212","5382","2830","19.45","2.623","100000","3.6","15.6","1000","cp/mL"
32+
"","","","F5","NTC_1","Sample","eGFP","eGFP","-","-","0.000","0.000","-","0.000","0.000","6287","0","6287","19.45","2.639","1","3.6","15.6","1000","cp/mL"
33+
"","","","G5","NTC_1","Sample","eGFP","eGFP","-","-","0.386","385.539138675","147.5%","1.671","1670.669600924","8249","1","8248","19.45","2.676","1","3.6","15.6","1000","cp/mL"
34+
"","","","H5","NTC_1","Sample","eGFP","eGFP","-","-","0.000","0.000","-","0.000","0.000","8211","0","8211","19.45","2.734","1","3.6","15.6","1000","cp/mL"

0 commit comments

Comments
 (0)