2525logger = logging .getLogger ("blpro" )
2626
2727
28+ _MF_WELL_NUMC_TO_ID = {
29+ (colnumber + rownumber * 8 ): f"{ row } { column :02d} "
30+ for colnumber , column in enumerate (range (1 , 9 ))
31+ for rownumber , row in enumerate ("CDEF" )
32+ }
33+ """Maps 0-based well numbers in MF mode by **C-style** counting order (→ then ↓) to alphanumeric well IDs."""
34+
35+ _MF_WELL_NUMF_TO_ID = {
36+ (rownumber + colnumber * 4 ): f"{ row } { column :02d} "
37+ for rownumber , row in enumerate ("CDEF" )
38+ for colnumber , column in enumerate (range (1 , 9 ))
39+ }
40+ """Maps 0-based well numbers in MF mode by **Fortran-style** counting order (↓ then →) to alphanumeric well IDs."""
41+
42+ _MF_WELL_NUMM_TO_ID = {
43+ 1 + (colnumber + rownumber * 8 ): f"{ row } { column :02d} "
44+ for rownumber , row in enumerate ("CDEF" )
45+ for colnumber , column in enumerate (reversed (range (1 , 9 )) if rownumber % 2 else range (1 , 9 ))
46+ }
47+ """Maps 1-based well numbers in MF mode by **measurement counting order** (→→→ ↓ ←←← ↓ →→→ ...) to alphanumeric well IDs."""
48+
49+
2850class BioLectorProParser (BLDParser ):
2951 def parse (
3052 self ,
@@ -329,6 +351,7 @@ def extract_fluidics(dfraw):
329351 ("Temp_Ch4" , "volume" , float ),
330352 ]
331353 df = utils .__to_typed_cols__ (dfraw [dfraw ["Type" ] == "F" ], ocol_ncol_type )
354+ df ["well" ] = [_MF_WELL_NUMM_TO_ID [w ] for w in df ["well" ]]
332355 df = df .sort_values (["well" , "cycle" ]).set_index (["well" ])
333356 return standardize (df )
334357
@@ -348,6 +371,7 @@ def extract_valves_module(dfraw):
348371 df_valves .columns = ["cycle" , "valve" , "well" , "acid" , "base" ]
349372 df_valves ["valve" ] = df_valves ["valve" ].str .replace ("Valve " , "" ).astype (int )
350373 df_valves ["well" ] = df_valves ["well" ].str .replace ("Well" , "" ).astype (int )
374+ # TODO: Which numbering style is this?
351375 df_valves ["acid" ] = df_valves ["acid" ].str .replace ("Sollvolumen (Acid) " , "" , regex = False ).astype (float )
352376 df_valves ["base" ] = df_valves ["base" ].str .replace ("Sollvolumen (Base) " , "" , regex = False ).astype (float )
353377 df_valves = standardize (df_valves ).set_index (["well" , "valve" , "cycle" ])
@@ -357,6 +381,7 @@ def extract_valves_module(dfraw):
357381 df_module .columns = ["cycle" , "module" , "valve" , "well" , "volume" ]
358382 df_module ["valve" ] = df_module ["valve" ].str .replace ("Valve " , "" ).astype (int )
359383 df_module ["well" ] = df_module ["well" ].str .replace ("Well " , "" ).astype (int )
384+ # TODO: Which numbering style is this?
360385 df_module ["volume" ] = df_module ["volume" ].str .replace ("Volume " , "" ).astype (float )
361386 df_module = standardize (df_module ).set_index (["well" , "valve" , "cycle" ])
362387
0 commit comments