Skip to content

Commit d4329e9

Browse files
Merge pull request #917 from annie-xd-wang/inherited-configuration
inherited microscope in configuration
2 parents 963fae0 + 113c6e4 commit d4329e9

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

src/navigate/config/config.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)