Skip to content

Commit 2e8b3e4

Browse files
committed
adding validator to instrument
1 parent ba433e6 commit 2e8b3e4

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

src/aind_data_schema/imaging/instrument.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,45 @@ class Instrument(AindCoreModel):
150150
com_ports: Optional[List[Com]] = Field(None, title="COM ports", unique_items=True)
151151
notes: Optional[str] = None
152152

153+
@root_validator
154+
def validate_device_names(cls, values): # noqa: C901
155+
"""validate that all DAQ channels are connected to devices that
156+
actually exist
157+
"""
158+
159+
device_names = []
160+
161+
optical_tables = values.get("optical_tables")
162+
enclosure = values.get("enclosure")
163+
lenses = values.get("lenses")
164+
fluorescence_filters = values.get("fluorescence_filters")
165+
motorized_stages = values.get("motorized_stages")
166+
scanning_stages = values.get("scanning_stages")
167+
light_sources = values.get("light_sources")
168+
detectors = values.get("detectors")
169+
additional_devices = values.get("additional_devices")
170+
daqs = values.get("daqs")
171+
172+
if daqs is None:
173+
return values
174+
175+
for device_type in [daqs, light_sources, detectors, additional_devices, optical_tables, enclosure, lenses, fluorescence_filters, motorized_stages, scanning_stages]:
176+
if device_type is not None:
177+
device_names += [device.name for device in device_type]
178+
179+
180+
for daq in daqs:
181+
if daq.channels is not None:
182+
for channel in daq.channels:
183+
if channel.device_name not in device_names:
184+
raise ValueError(
185+
f"Device name validation error: '{channel.device_name}' "
186+
+ f"is connected to '{channel.channel_name}' on '{daq.name}', but "
187+
+ "this device is not part of the rig."
188+
)
189+
190+
return values
191+
153192
@root_validator
154193
def validate_other(cls, v):
155194
"""Validator for other/notes"""

src/aind_data_schema/rig.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,7 @@ def validate_device_names(cls, values): # noqa: C901
110110
stick_microscopes = values.get("stick_microscopes")
111111
light_sources = values.get("light_sources")
112112
patch_coords = values.get("patch_cords")
113-
detectors = values.get("detectors")
114-
objectives = values.get("objectives")
115-
filters = values.get("filters")
116-
lenses = values.get("lenses")
113+
detectors = values.get("detectors")
117114
digital_micromirror_devices = values.get("digital_micromirror_devices")
118115
polygonal_scanners = values.get("polygonal_scanners")
119116
pockels_cells = values.get("pockels_cells")
@@ -123,7 +120,7 @@ def validate_device_names(cls, values): # noqa: C901
123120
if daqs is None:
124121
return values
125122

126-
for device_type in [daqs, stimulus_devices, light_sources, patch_coords,detectors, objectives, filters, lenses, digital_micromirror_devices, polygonal_scanners, pockels_cells, additional_devices]:
123+
for device_type in [daqs, stimulus_devices, light_sources, patch_coords,detectors, digital_micromirror_devices, polygonal_scanners, pockels_cells, additional_devices]:
127124
if device_type is not None:
128125
device_names += [device.name for device in device_type]
129126

0 commit comments

Comments
 (0)