Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 50 additions & 23 deletions src/navigate/config/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,9 +318,9 @@ def verify_experiment_config(manager, configuration):
device_ref
].keys()
):
autofocus_setting_dict[microscope_name][device][
device_ref
][k] = autofocus_sample_setting[k]
autofocus_setting_dict[microscope_name][device][device_ref][
k
] = autofocus_sample_setting[k]

# remove non-consistent autofocus parameter
for microscope_name in autofocus_setting_dict.keys():
Expand Down Expand Up @@ -611,13 +611,13 @@ def verify_experiment_config(manager, configuration):
]
]
number_of_filter_wheels = len(
configuration["configuration"]["microscopes"][microscope_name]["filter_wheel"]
configuration["configuration"]["microscopes"][microscope_name].get("filter_wheel", [])
)
filterwheel_list = [
list(filter_wheel_config["available_filters"].keys())
for filter_wheel_config in configuration["configuration"]["microscopes"][
microscope_name
]["filter_wheel"]
].get("filter_wheel", [])
]
prefix = "channel_"
channel_nums = configuration["configuration"]["gui"]["channels"]["count"]
Expand All @@ -639,19 +639,16 @@ def verify_experiment_config(manager, configuration):
channel_value["laser_index"] = laser_list.index(channel_value["laser"])
# filter wheel
for i in range(number_of_filter_wheels):
ref_name = f"filter_wheel_{i}"
ref_name = configuration["configuration"]["microscopes"][microscope_name][
"filter_wheel"
][i].get("name", f"FilterWheel-{i}")
if (
ref_name not in channel_value
or channel_value[ref_name] not in filterwheel_list[i]
):
channel_value[ref_name] = filterwheel_list[i][0]
channel_value[f"filter_position_{i}"] = filterwheel_list[i].index(
channel_value[ref_name]
)
if "filter" in channel_value:
channel_value.pop("filter")
if "filter_position" in channel_value:
channel_value.pop("filter_position")
# is_selected
if (
"is_selected" not in channel_value.keys()
Expand Down Expand Up @@ -965,13 +962,11 @@ def verify_configuration(manager, configuration):

channel_count = 5
# generate hardware header section
hardware_dict = {}
ref_list = {
"filter_wheel": [],
}
required_devices = [
"camera",
"filter_wheel",
"shutter",
"remote_focus",
"galvo",
Expand Down Expand Up @@ -1028,7 +1023,10 @@ def verify_configuration(manager, configuration):
elif "type" not in zoom_config["hardware"]:
zoom_config["hardware"]["type"] = "Synthetic"

filter_wheel_config = device_config[microscope_name]["filter_wheel"]
filter_wheel_config = device_config[microscope_name].get("filter_wheel", None)
if filter_wheel_config is None:
continue

if type(filter_wheel_config) == DictProxy:
# support older version of configuration.yaml
# filter_wheel_delay and available filters
Expand All @@ -1040,6 +1038,7 @@ def verify_configuration(manager, configuration):
)

temp_config = device_config[microscope_name]["filter_wheel"]
filter_wheel_names = set()
for _, filter_wheel_config in enumerate(temp_config):
filter_wheel_idx = build_ref_name(
"-",
Expand All @@ -1049,23 +1048,51 @@ def verify_configuration(manager, configuration):
if filter_wheel_idx not in ref_list["filter_wheel"]:
ref_list["filter_wheel"].append(filter_wheel_idx)
filter_wheel_seq.append(filter_wheel_config)
if (
filter_wheel_config.get("name", None) is None
and filter_wheel_config.get("hardware", {}).get("name", None)
is not None
):
filter_wheel_config["name"] = filter_wheel_config["hardware"][
"name"
]
idx = ref_list["filter_wheel"].index(filter_wheel_idx)
if filter_wheel_seq[idx].get("name", None):
filter_wheel_config["name"] = filter_wheel_seq[idx]["name"]
elif filter_wheel_config.get("name", None):
filter_wheel_seq[idx]["name"] = filter_wheel_config["name"]
elif filter_wheel_config.get("hardware", {}).get("name", None):
filter_wheel_seq[idx]["name"] = filter_wheel_config["hardware"]["name"]
if filter_wheel_seq[idx].get("name", None):
if filter_wheel_seq[idx]["name"] not in filter_wheel_names:
filter_wheel_names.add(filter_wheel_seq[idx]["name"])
else:
filter_wheel_seq[idx]["name"] = None

# make sure all filter wheel entries have hardware name
for i, filter_wheel_config in enumerate(filter_wheel_seq):
if filter_wheel_config.get("name", None) is None:
for j in range(len(filter_wheel_seq)):
temp_name = f"FilterWheel-{j}"
if temp_name not in filter_wheel_names:
filter_wheel_seq[i]["name"] = temp_name
filter_wheel_names.add(temp_name)
break

# make sure all microscopes have the same filter wheel sequence
if len(device_config.keys()) > 1:
if len(filter_wheel_seq) > 0:
for microscope_name in device_config.keys():
temp_config = device_config[microscope_name]["filter_wheel"]
filter_wheel_ids = list(range(len(ref_list["filter_wheel"])))
for _, filter_wheel_config in enumerate(temp_config):
temp_config = device_config[microscope_name].get("filter_wheel", None)
if temp_config is None:
continue
for i, filter_wheel_config in enumerate(temp_config):
filter_wheel_idx = build_ref_name(
"-",
filter_wheel_config["hardware"]["type"],
filter_wheel_config["hardware"]["wheel_number"],
)
filter_wheel_ids.remove(
ref_list["filter_wheel"].index(filter_wheel_idx)
)
for i in filter_wheel_ids:
temp_config.insert(i, filter_wheel_seq[i])
idx = ref_list["filter_wheel"].index(filter_wheel_idx)
temp_config[i]["name"] = filter_wheel_seq[idx]["name"]

update_config_dict(
manager,
Expand Down
51 changes: 47 additions & 4 deletions src/navigate/controller/configuration_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,9 @@ def channels_info(self) -> dict:
setting = {
"laser": self.lasers_info,
}
for i, filter_wheel_config in enumerate(self.microscope_config["filter_wheel"]):
setting[f"filter_wheel_{i}"] = list(
for i, filter_wheel_config in enumerate(self.microscope_config.get("filter_wheel", [])):
filter_wheel_name = filter_wheel_config.get("name", f"FilterWheel-{i}")
setting[filter_wheel_name] = list(
filter_wheel_config["available_filters"].keys()
)
return setting
Expand Down Expand Up @@ -532,9 +533,51 @@ def number_of_filter_wheels(self) -> int:
"""

if self.microscope_config is not None:
return len(self.microscope_config["filter_wheel"])
return len(self.microscope_config.get("filter_wheel", []))
return 1

@property
def filter_wheel_types(self) -> list[str]:
"""Return a list of filter wheel hardware types.

Returns
-------
filter_wheel_types : list
List of filter wheel hardware types.
"""
filter_wheel_types = []
if self.microscope_config is not None:
for i in range(self.number_of_filter_wheels):
hardware_config = self.microscope_config["filter_wheel"][i].get(
"hardware", {}
)
filter_wheel_types.append(hardware_config.get("type", ""))
return filter_wheel_types

@property
def filter_wheel_visibility(self) -> list[bool]:
"""Return a list indicating which filter wheels are native to microscope.

Returns
-------
filter_wheel_visibility : list
``True`` for wheels that are defined for this microscope.
"""
if self.microscope_config is None:
return []

visibility = self.microscope_config.get("filter_wheel_visibility")
if isinstance(visibility, ListProxy):
visibility = list(visibility)

if not isinstance(visibility, list):
return [True] * self.number_of_filter_wheels

if len(visibility) != self.number_of_filter_wheels:
return [True] * self.number_of_filter_wheels

return [bool(value) for value in visibility]

@property
def filter_wheel_names(self) -> list[str]:
"""Return a list of filter wheel names
Expand All @@ -547,7 +590,7 @@ def filter_wheel_names(self) -> list[str]:
filter_wheel_names = []
if self.microscope_config is not None:
for i in range(self.number_of_filter_wheels):
name = self.microscope_config["filter_wheel"][i]["hardware"].get(
name = self.microscope_config["filter_wheel"][i].get(
"name", f"Filter Wheel {i}"
)
filter_wheel_names.append(name)
Expand Down
Loading
Loading