@@ -67,6 +67,27 @@ def _is_clem_atlas(result: CLEMPreprocessingResult):
6767 )
6868
6969
70+ COLOR_FLAGS_MURFEY = {
71+ "gray" : "has_grey" ,
72+ "red" : "has_red" ,
73+ "green" : "has_green" ,
74+ "blue" : "has_blue" ,
75+ "cyan" : "has_cyan" ,
76+ "magenta" : "has_magenta" ,
77+ "yellow" : "has_yellow" ,
78+ }
79+
80+
81+ def _get_color_flags (
82+ colors : Collection [str ] | None = None ,
83+ ):
84+ colors = colors or []
85+ color_flags = dict .fromkeys (COLOR_FLAGS_MURFEY .values (), False )
86+ for color in colors :
87+ color_flags [COLOR_FLAGS_MURFEY [color ]] = True
88+ return color_flags
89+
90+
7091def _register_clem_image_series (
7192 session_id : int ,
7293 result : CLEMPreprocessingResult ,
@@ -160,6 +181,11 @@ def _register_clem_image_series(
160181 clem_img_series .image_search_string = str (output_file .parent / "*tiff" )
161182 clem_img_series .data_type = "atlas" if _is_clem_atlas (result ) else "grid_square"
162183 clem_img_series .number_of_members = result .number_of_members
184+ for col_name , value in _get_color_flags (result .output_files .keys ()):
185+ setattr (clem_img_series , col_name , value )
186+ clem_img_series .collection_mode = _determine_collection_mode (
187+ result .output_files .keys ()
188+ )
163189 clem_img_series .image_pixels_x = result .pixels_x
164190 clem_img_series .image_pixels_y = result .pixels_y
165191 clem_img_series .image_pixel_size = result .pixel_size
@@ -187,27 +213,6 @@ def _register_clem_image_series(
187213 logger .info (f"CLEM preprocessing results registered for { result .series_name !r} " )
188214
189215
190- color_columns = {
191- "gray" : "hasGrey" ,
192- "red" : "hasRed" ,
193- "green" : "hasGreen" ,
194- "blue" : "hasBlue" ,
195- "cyan" : "hasCyan" ,
196- "magenta" : "hasMagenta" ,
197- "yellow" : "hasYellow" ,
198- }
199-
200-
201- def _get_color_flags (
202- colors : Collection [str ] | None = None ,
203- ):
204- colors = colors or []
205- color_flags = dict .fromkeys (color_columns .values (), 0 )
206- for color in colors :
207- color_flags [color_columns [color ]] = 1
208- return color_flags
209-
210-
211216def _determine_collection_mode (
212217 colors : Collection [str ] | None = None ,
213218):
@@ -223,6 +228,16 @@ def _determine_collection_mode(
223228 return "Fluorescent"
224229
225230
231+ def _snake_to_camel_case (string : str ):
232+ parts = string .split ("_" )
233+ return parts [0 ] + "" .join (part .capitalize () for part in parts [1 :])
234+
235+
236+ COLOR_FLAGS_MURFEY_TO_ISPYB = {
237+ value : _snake_to_camel_case (value ) for value in COLOR_FLAGS_MURFEY .values ()
238+ }
239+
240+
226241def _register_dcg_and_atlas (
227242 session_id : int ,
228243 instrument_name : str ,
@@ -262,7 +277,11 @@ def _register_dcg_and_atlas(
262277 else :
263278 atlas_name = str (output_file .parent / "*.tiff" )
264279 atlas_pixel_size = result .pixel_size
265- color_flags = _get_color_flags (result .output_files .keys ())
280+ # Translate colour flags into ISPyB convention
281+ color_flags = {
282+ COLOR_FLAGS_MURFEY_TO_ISPYB [key ]: int (value )
283+ for key , value in _get_color_flags (result .output_files .keys ()).items ()
284+ }
266285 collection_mode = _determine_collection_mode (result .output_files .keys ())
267286 else :
268287 atlas_name = ""
@@ -455,8 +474,13 @@ def _register_grid_square(
455474 y_stage_position = 0.5 * (clem_img_series .y0 + clem_img_series .y1 ),
456475 pixel_size = clem_img_series .image_pixel_size ,
457476 image = clem_img_series .thumbnail_search_string ,
458- collection_mode = _determine_collection_mode ( result . output_files . keys ()) ,
477+ collection_mode = clem_img_series . collection_mode ,
459478 )
479+ # Construct colour flags for ISPyB
480+ color_flags = {
481+ ispyb_color_flags : int (getattr (clem_img_series , murfey_color_flags , 0 ))
482+ for murfey_color_flags , ispyb_color_flags in COLOR_FLAGS_MURFEY_TO_ISPYB .items ()
483+ }
460484 # Register or update the grid square entry as required
461485 if grid_square_result := murfey_db .exec (
462486 select (MurfeyDB .GridSquare )
@@ -481,7 +505,7 @@ def _register_grid_square(
481505 _transport_object .do_update_grid_square (
482506 grid_square_id = grid_square_entry .id ,
483507 grid_square_parameters = grid_square_params ,
484- color_flags = _get_color_flags ( result . output_files . keys ()) ,
508+ color_flags = color_flags ,
485509 )
486510 else :
487511 # Look up data collection group for current series
@@ -495,7 +519,7 @@ def _register_grid_square(
495519 atlas_id = dcg_entry .atlas_id ,
496520 grid_square_id = clem_img_series .id ,
497521 grid_square_parameters = grid_square_params ,
498- color_flags = _get_color_flags ( result . output_files . keys ()) ,
522+ color_flags = color_flags ,
499523 )
500524 # Register to Murfey
501525 grid_square_entry = MurfeyDB .GridSquare (
0 commit comments