@@ -913,19 +913,68 @@ def verify_configuration(manager, configuration):
913913
914914 Supports old version of configurations.
915915 """
916+ device_config = configuration ["configuration" ]["microscopes" ]
917+
918+ # get microscope inheritance sequence
919+ microscope_name_seq = []
920+ inherited_microscope_dict = {}
921+ microscope_names_list = list (device_config .keys ())
922+ for microscope_name in microscope_names_list :
923+ try :
924+ parenthesis_l = microscope_name .index ("(" )
925+ except ValueError :
926+ if microscope_name .strip () not in microscope_name_seq :
927+ microscope_name_seq .append (microscope_name .strip ())
928+ continue
929+
930+ if ")" not in microscope_name [parenthesis_l + 1 :]:
931+ microscope_name_seq .append (microscope_name .strip ())
932+ continue
933+
934+ parenthesis_r = microscope_name [parenthesis_l + 1 :].index (")" )
935+ parent_microscope_name = microscope_name [parenthesis_l + 1 : parenthesis_l + parenthesis_r + 1 ].strip ()
936+
937+ if parent_microscope_name not in microscope_name_seq :
938+ microscope_name_seq .append (parent_microscope_name )
939+
940+ idx = microscope_name_seq .index (parent_microscope_name )
941+ child_microscope_name = microscope_name [:parenthesis_l ].strip ()
942+ microscope_name_seq .insert (idx + 1 , child_microscope_name )
943+ inherited_microscope_dict [child_microscope_name ] = parent_microscope_name
944+ device_config [child_microscope_name ] = device_config .pop (microscope_name )
945+
946+ # update microscope devices from parent microscope
947+ for microscope_name in microscope_name_seq :
948+ if microscope_name not in inherited_microscope_dict :
949+ continue
950+ parent_microscope_name = inherited_microscope_dict [microscope_name ]
951+ if parent_microscope_name not in device_config .keys ():
952+ raise Exception (f"Microscope { parent_microscope_name } is not defined in configuration.yaml" )
953+
954+ for device_name in device_config [parent_microscope_name ].keys ():
955+ if device_name not in device_config [microscope_name ].keys ():
956+ device_config [microscope_name ][device_name ] = device_config [parent_microscope_name ][device_name ]
957+
916958 channel_count = 5
917959 # generate hardware header section
918- device_config = configuration ["configuration" ]["microscopes" ]
919960 hardware_dict = {}
920961 ref_list = {
921962 "camera" : [],
922963 "stage" : [],
923964 "zoom" : None ,
924965 "mirror" : None ,
925966 }
967+ required_devices = ["camera" , "daq" , "filter_wheel" , "shutter" , "remote_focus_device" , "galvo" , "stage" , "lasers" ]
926968 for microscope_name in device_config .keys ():
927969 # camera
928970 # delay_percent -> delay
971+ for device_name in required_devices :
972+ if device_name not in device_config [microscope_name ]:
973+ print ("**************************************************************************" )
974+ print (f"*** Please make sure you have { device_name } in the configuration for microscope { microscope_name } ." )
975+ print (f"*** Or please makesure { microscope_name } is inherited from another valid microscope!" )
976+ print ("**************************************************************************" )
977+ raise Exception ()
929978 camera_config = device_config [microscope_name ]["camera" ]
930979 if "delay" not in camera_config .keys ():
931980 camera_config ["delay" ] = camera_config .get ("delay_percent" , 2 )
0 commit comments