Skip to content

Commit 2d1edf8

Browse files
fix: add Reagent as an option for Acquisition.manipulations (#1797)
* fix: add SpecimenProcedure as an option for Acquisition.manipulations * update docs [skip actions] * chore: delete unmaintained CHANGELOG.md * update docs [skip actions] * Revert "chore: delete unmaintained CHANGELOG.md" This reverts commit 28d430e. * refactor: turn protocol_id fields into a Mixin class * feat: add Reagent as an option for Manipulation * update docs * update docs * chore: lint --------- Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
1 parent ce3cfc2 commit 2d1edf8

16 files changed

Lines changed: 64 additions & 56 deletions

docs/source/acquisition.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ while the StimulusEpoch represents all stimuli being presented.
8383
| `acquisition_start_tz` | `int or pydantic_extra_types.timezone_name.TimeZoneName or NoneType` | Acquisition start timezone (Automatically populated by a validator based on acquisition_start_time. Will be a TimeZoneName (IANA name) when the datetime uses a ZoneInfo timezone, or an integer UTC offset in hours for fixed-offset timezones. Use ZoneInfo (from the zoneinfo standard library) to preserve the named timezone.) |
8484
| `acquisition_end_time` | `datetime (timezone-aware)` | Acquisition end time |
8585
| `experimenters` | `List[str]` | experimenter(s) |
86-
| `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
8786
| `ethics_review_id` | `Optional[List[str]]` | Ethics review ID |
8887
| `instrument_id` | `Optional[str]` | Instrument ID (Should match the Instrument.instrument_id. Required when instrument metadata is available.) |
8988
| `acquisition_type` | `str` | Acquisition type (Descriptive string detailing the type of acquisition, should be consistent across similar acquisitions for the same experiment.) |
@@ -95,6 +94,7 @@ while the StimulusEpoch represents all stimuli being presented.
9594
| `stimulus_epochs` | List[[StimulusEpoch](acquisition.md#stimulusepoch)] | Stimulus (A stimulus epoch captures all stimuli being presented during an acquisition. Epochs should be split when the purpose of the stimulus changes.) |
9695
| `manipulations` | List[[Manipulation](acquisition.md#manipulation)] | Manipulations (Procedures performed during the acquisition.) |
9796
| `subject_details` | Optional[[AcquisitionSubjectDetails](acquisition.md#acquisitionsubjectdetails)] | Subject details (Required for in vivo acquisitions.) |
97+
| `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
9898

9999

100100
## Model definitions
@@ -151,9 +151,10 @@ Description of procedures performed during an acquisition.
151151
|-------|------|-------------|
152152
| `start_time` | `datetime (timezone-aware)` | Manipulation start time (Must be between the acquisition start and end times) |
153153
| `end_time` | `datetime (timezone-aware)` | Manipulation end time (Must be between the acquisition start and end times) |
154-
| `procedures` | Optional[List[[Injection](components/injection_procedures.md#injection) or [BrainInjection](components/surgery_procedures.md#braininjection)]] | Procedures (Procedures performed during the manipulation) |
154+
| `procedures` | Optional[List[[Injection](components/injection_procedures.md#injection) or [BrainInjection](components/surgery_procedures.md#braininjection) or [Reagent](components/reagent.md#reagent)]] | Procedures (Procedures performed during the manipulation) |
155155
| `anaesthesia` | Optional[[Anaesthetic](components/surgery_procedures.md#anaesthetic)] | Anaesthesia |
156156
| `notes` | `Optional[str]` | Notes |
157+
| `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
157158

158159

159160
### PerformanceMetrics

docs/source/aind_data_schema_models/organizations.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Organization
2222
| `ASUS` | `None` | `ASUS` | `Research Organization Registry (ROR)` | `00bxkz165` |
2323
| `BASLER` | `None` | `Basler` | `None` | `None` |
2424
| `BCM` | `BCM` | `Baylor College of Medicine` | `Research Organization Registry (ROR)` | `02pttbw34` |
25+
| `BROADCOM` | `None` | `Broadcom` | `Research Organization Registry (ROR)` | `035gt5s03` |
2526
| `BRUKER` | `None` | `Bruker` | `Research Organization Registry (ROR)` | `04r739x86` |
2627
| `BU` | `BU` | `Boston University` | `Research Organization Registry (ROR)` | `05qwgg493` |
2728
| `CAJAL` | `Cajal` | `Cajal Neuroscience` | `Research Organization Registry (ROR)` | `05pdc0q70` |
@@ -67,6 +68,7 @@ Organization
6768
| `JENOPTIK` | `None` | `Jenoptik` | `Research Organization Registry (ROR)` | `05g7t5c49` |
6869
| `JHU` | `JHU` | `Johns Hopkins University` | `Research Organization Registry (ROR)` | `00za53h95` |
6970
| `JULABO` | `None` | `Julabo` | `None` | `None` |
71+
| `KENT_SCIENTIFIC_CORPORATION` | `None` | `Kent Scientific Corporation` | `Research Organization Registry (ROR)` | `03xkj6a08` |
7072
| `KOWA` | `None` | `Kowa` | `Research Organization Registry (ROR)` | `03zbwg482` |
7173
| `LASER_MANUFACTURERS` | `N/A` | `N/A` | `N/A` | `N/A` |
7274
| `LASOS` | `LASOS` | `LASOS Lasertechnik` | `None` | `None` |
@@ -105,6 +107,7 @@ Organization
105107
| `OLYMPUS` | `None` | `Olympus` | `Research Organization Registry (ROR)` | `02vcdte90` |
106108
| `OPTOTUNE` | `None` | `Optotune` | `None` | `None` |
107109
| `OTHER` | `None` | `Other` | `None` | `None` |
110+
| `OXFORD_INSTRUMENTS` | `None` | `Oxford Instruments` | `Research Organization Registry (ROR)` | `01age2z78` |
108111
| `OXXIUS` | `None` | `Oxxius` | `None` | `None` |
109112
| `PLACID_INDUSTRIES` | `None` | `Placid Industries` | `None` | `None` |
110113
| `PRIZMATIX` | `None` | `Prizmatix` | `None` | `None` |
@@ -113,6 +116,7 @@ Organization
113116
| `RESEARCH_INSTITUTIONS` | `N/A` | `N/A` | `N/A` | `N/A` |
114117
| `SAME_SKY` | `None` | `Same Sky` | `None` | `None` |
115118
| `SCHNEIDER_KREUZNACH` | `None` | `Schneider-Kreuznach` | `None` | `None` |
119+
| `SCIENTIFICA` | `None` | `Scientifica` | `Research Organization Registry (ROR)` | `00z72df47` |
116120
| `SECOND_ORDER_EFFECTS` | `None` | `Second Order Effects` | `None` | `None` |
117121
| `SEMROCK` | `None` | `Semrock` | `None` | `None` |
118122
| `SICGEN` | `None` | `SICGEN` | `None` | `None` |
@@ -138,5 +142,6 @@ Organization
138142
| `UPENN` | `UPENN` | `University of Pennsylvania` | `Research Organization Registry (ROR)` | `00b30xv10` |
139143
| `VIEWORKS` | `None` | `Vieworks` | `None` | `None` |
140144
| `VORTRAN` | `None` | `Vortran` | `None` | `None` |
145+
| `WPI` | `WPI` | `World Precision Intstruments` | `Research Organization Registry (ROR)` | `03st5df34` |
141146

142147

docs/source/components/injection_procedures.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Description of an injection procedure
1212
| `targeted_structure` | Optional[[MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel)] | Injection target (Use InjectionTargets) |
1313
| `relative_position` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | Relative position |
1414
| `dynamics` | List[[InjectionDynamics](#injectiondynamics)] | Injection dynamics (List of injection events, one per location/depth) |
15-
| <del>`protocol_id`</del> | `Optional[str]` | **[DEPRECATED]** Use protocol_id in Surgery or NonSurgicalInjection instead. Protocol ID (DOI for protocols.io) |
15+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
1616

1717

1818
### InjectionDynamics

docs/source/components/measurements.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ Generic calibration class
1010
|-------|------|-------------|
1111
| `calibration_date` | `datetime (timezone-aware)` | Date and time of calibration |
1212
| `description` | `str` | Description (Brief description of what is being calibrated) |
13-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
1413
| `measured_at` | `Optional[str]` | Measurement location |
1514
| `input` | `List[float or str]` | Inputs (Calibration input) |
1615
| `input_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) or [MassUnit](../aind_data_schema_models/units.md#massunit) or [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) or [SpeedUnit](../aind_data_schema_models/units.md#speedunit) or [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) or [AngleUnit](../aind_data_schema_models/units.md#angleunit) or [TimeUnit](../aind_data_schema_models/units.md#timeunit) or [PowerUnit](../aind_data_schema_models/units.md#powerunit) or [CurrentUnit](../aind_data_schema_models/units.md#currentunit) or [ConcentrationUnit](../aind_data_schema_models/units.md#concentrationunit) or [TemperatureUnit](../aind_data_schema_models/units.md#temperatureunit) or [SoundIntensityUnit](../aind_data_schema_models/units.md#soundintensityunit) or [VoltageUnit](../aind_data_schema_models/units.md#voltageunit) or [MemoryUnit](../aind_data_schema_models/units.md#memoryunit) or [UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit) or [MagneticFieldUnit](../aind_data_schema_models/units.md#magneticfieldunit) or [PressureUnit](../aind_data_schema_models/units.md#pressureunit) or {TorqueUnit} | Input unit |
@@ -19,6 +18,7 @@ Generic calibration class
1918
| `output_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) or [MassUnit](../aind_data_schema_models/units.md#massunit) or [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) or [SpeedUnit](../aind_data_schema_models/units.md#speedunit) or [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) or [AngleUnit](../aind_data_schema_models/units.md#angleunit) or [TimeUnit](../aind_data_schema_models/units.md#timeunit) or [PowerUnit](../aind_data_schema_models/units.md#powerunit) or [CurrentUnit](../aind_data_schema_models/units.md#currentunit) or [ConcentrationUnit](../aind_data_schema_models/units.md#concentrationunit) or [TemperatureUnit](../aind_data_schema_models/units.md#temperatureunit) or [SoundIntensityUnit](../aind_data_schema_models/units.md#soundintensityunit) or [VoltageUnit](../aind_data_schema_models/units.md#voltageunit) or [MemoryUnit](../aind_data_schema_models/units.md#memoryunit) or [UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit) or [MagneticFieldUnit](../aind_data_schema_models/units.md#magneticfieldunit) or [PressureUnit](../aind_data_schema_models/units.md#pressureunit) or {TorqueUnit} | Output unit |
2019
| `fit` | Optional[[CalibrationFit](#calibrationfit)] | Fit (Fit equation for the calibration data used during data acquisition) |
2120
| `notes` | `Optional[str]` | Notes |
21+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
2222
| `device_name` | `str` | Device name (Must match a device defined in the instrument.json) |
2323

2424

@@ -51,9 +51,9 @@ Generic maintenance class
5151
|-------|------|-------------|
5252
| `maintenance_date` | `datetime (timezone-aware)` | Date and time of maintenance |
5353
| `description` | `str` | Description (Description on maintenance procedure) |
54-
| `protocol_id` | `Optional[str]` | Protocol ID |
5554
| `reagents` | Optional[List[[Reagent](reagent.md#reagent)]] | Reagents |
5655
| `notes` | `Optional[str]` | Notes |
56+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
5757
| `device_name` | `str` | Device name (Must match a device defined in the instrument.json) |
5858

5959

@@ -69,11 +69,11 @@ Calibration of a device that outputs power based on input strength
6969
| `output_unit` | [PowerUnit](../aind_data_schema_models/units.md#powerunit) | Output unit |
7070
| `description` | `"Power measured for various power or percentage input strengths"` | |
7171
| `calibration_date` | `datetime (timezone-aware)` | Date and time of calibration |
72-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
7372
| `measured_at` | `Optional[str]` | Measurement location |
7473
| `repeats` | `Optional[int]` | Number of repeats (If each input was repeated multiple times, provide the number of repeats) |
7574
| `fit` | Optional[[CalibrationFit](#calibrationfit)] | Fit (Fit equation for the calibration data used during data acquisition) |
7675
| `notes` | `Optional[str]` | Notes |
76+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
7777
| `device_name` | `str` | Device name (Must match a device defined in the instrument.json) |
7878

7979

@@ -90,10 +90,10 @@ Calibration of a liquid delivery device based on solenoid/valve opening times
9090
| `output_unit` | [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) | Output unit |
9191
| `description` | `"Volume measured for various solenoid opening times"` | |
9292
| `calibration_date` | `datetime (timezone-aware)` | Date and time of calibration |
93-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
9493
| `measured_at` | `Optional[str]` | Measurement location |
9594
| `fit` | Optional[[CalibrationFit](#calibrationfit)] | Fit (Fit equation for the calibration data used during data acquisition) |
9695
| `notes` | `Optional[str]` | Notes |
96+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
9797
| `device_name` | `str` | Device name (Must match a device defined in the instrument.json) |
9898

9999

docs/source/components/specimen_procedures.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@ Description of surgical or other procedure performed on a specimen
106106
| `start_date` | `datetime.date` | Start date |
107107
| `end_date` | `datetime.date` | End date |
108108
| `experimenters` | `List[str]` | experimenter(s) |
109-
| `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
110109
| `protocol_parameters` | `Optional[Dict[str, str]]` | Protocol parameters (Parameters defined in the protocol and their value during this procedure) |
111110
| `procedure_details` | List[[HCRSeries](#hcrseries) or [FluorescentStain](reagent.md#fluorescentstain) or [Sectioning](#sectioning) or [PlanarSectioning](#planarsectioning) or [ProbeReagent](reagent.md#probereagent) or [Reagent](reagent.md#reagent) or [GeneProbeSet](reagent.md#geneprobeset) or [Solution](reagent.md#solution)] | Procedure details (Details of the procedures, including reagents and sectioning information.) |
112111
| `notes` | `Optional[str]` | Notes |
112+
| `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
113113

114114

docs/source/components/subject_procedures.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ Description of a non-surgical procedure performed on a subject
1111
| `start_date` | `datetime.date` | Start date |
1212
| `experimenters` | `Optional[List[str]]` | experimenter(s) |
1313
| `ethics_review_id` | `str` | Ethics review ID |
14-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
1514
| `description` | `str` | Description |
1615
| `notes` | `Optional[str]` | Notes |
16+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
1717

1818

1919
### NonSurgicalInjection
@@ -36,7 +36,6 @@ Description of subject procedures performed at one time
3636

3737
| Field | Type | Title (Description) |
3838
|-------|------|-------------|
39-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
4039
| `start_date` | `datetime.date` | Start date |
4140
| `experimenters` | `Optional[List[str]]` | experimenter(s) |
4241
| `ethics_review_id` | `Optional[str]` | Ethics review ID |
@@ -49,6 +48,7 @@ Description of subject procedures performed at one time
4948
| `measured_coordinates` | Optional[Dict[[Origin](../aind_data_schema_models/coordinates.md#origin), [Translation](coordinates.md#translation)]] | Measured coordinates (Coordinates measured during the procedure, for example Bregma and Lambda) |
5049
| `procedures` | List[[CatheterImplant](surgery_procedures.md#catheterimplant) or [Craniotomy](surgery_procedures.md#craniotomy) or [ProbeImplant](surgery_procedures.md#probeimplant) or [Headframe](surgery_procedures.md#headframe) or [BrainInjection](surgery_procedures.md#braininjection) or [Injection](injection_procedures.md#injection) or [MyomatrixInsertion](surgery_procedures.md#myomatrixinsertion) or [GenericSurgeryProcedure](surgery_procedures.md#genericsurgeryprocedure) or [Perfusion](surgery_procedures.md#perfusion) or [SampleCollection](surgery_procedures.md#samplecollection)] | Procedures |
5150
| `notes` | `Optional[str]` | Notes |
51+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
5252

5353

5454
### TrainingProtocol

docs/source/components/surgery_procedures.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Description of an injection procedure into a brain
2626
| `injection_materials` | List[[ViralMaterial](injection_procedures.md#viralmaterial) or [NonViralMaterial](injection_procedures.md#nonviralmaterial)] | Injection material |
2727
| `relative_position` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | Relative position |
2828
| `dynamics` | List[[InjectionDynamics](injection_procedures.md#injectiondynamics)] | Injection dynamics (List of injection events, one per location/depth) |
29-
| <del>`protocol_id`</del> | `Optional[str]` | **[DEPRECATED]** Use protocol_id in Surgery or NonSurgicalInjection instead. Protocol ID (DOI for protocols.io) |
29+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
3030

3131

3232
### CatheterImplant
@@ -46,7 +46,6 @@ Description of craniotomy procedure
4646

4747
| Field | Type | Title (Description) |
4848
|-------|------|-------------|
49-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
5049
| `craniotomy_type` | [CraniotomyType](#craniotomytype) | Craniotomy type |
5150
| `coordinate_system_name` | `Optional[str]` | Coordinate system name |
5251
| `position` | [Translation](coordinates.md#translation) or List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] or NoneType | Craniotomy position |
@@ -55,6 +54,7 @@ Description of craniotomy procedure
5554
| `protective_material` | Optional[[ProtectiveMaterial](#protectivematerial)] | Protective material |
5655
| `implant_part_number` | `Optional[str]` | Implant part number |
5756
| `dura_removed` | `Optional[bool]` | Dura removed |
57+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
5858

5959

6060
### CraniotomyType
@@ -76,9 +76,9 @@ Description of a surgery procedure performed on a subject
7676

7777
| Field | Type | Title (Description) |
7878
|-------|------|-------------|
79-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
8079
| `description` | `str` | Description |
8180
| `notes` | `Optional[str]` | Notes |
81+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
8282

8383

8484
### GroundWireImplant
@@ -110,12 +110,12 @@ Description of headframe procedure
110110

111111
| Field | Type | Title (Description) |
112112
|-------|------|-------------|
113-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
114113
| `headframe_type` | `str` | Headframe type |
115114
| `headframe_part_number` | `Optional[str]` | Headframe part number |
116115
| `headframe_material` | Optional[[HeadframeMaterial](#headframematerial)] | Headframe material |
117116
| `well_part_number` | `Optional[str]` | Well part number |
118117
| `well_type` | `Optional[str]` | Well type |
118+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
119119

120120

121121
### HeadframeMaterial
@@ -135,9 +135,9 @@ Description of a Myomatrix array insertion for EMG
135135

136136
| Field | Type | Title (Description) |
137137
|-------|------|-------------|
138-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
139138
| `ground_electrode` | [GroundWireImplant](#groundwireimplant) | Ground electrode |
140139
| `implanted_device` | [MyomatrixArray](devices.md#myomatrixarray) | Implanted device |
140+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
141141

142142

143143
### Perfusion
@@ -146,8 +146,8 @@ Description of a perfusion procedure that creates a specimen
146146

147147
| Field | Type | Title (Description) |
148148
|-------|------|-------------|
149-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
150149
| `output_specimen_ids` | `List[str]` | Specimen ID (IDs of specimens resulting from this procedure. Whole brains can use the {subject_id}, partial sections should always include a suffix {subject_id}_###) |
150+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
151151

152152

153153
### ProbeImplant
@@ -156,9 +156,9 @@ Description of a probe (fiber, ephys) implant procedure
156156

157157
| Field | Type | Title (Description) |
158158
|-------|------|-------------|
159-
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
160159
| `implanted_device` | [EphysProbe](devices.md#ephysprobe) or [FiberProbe](devices.md#fiberprobe) | Implanted device |
161160
| `device_config` | [ProbeConfig](configs.md#probeconfig) | Device configuration |
161+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
162162

163163

164164
### ProtectiveMaterial

src/aind_data_schema/base.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,11 @@ def default_filename(cls):
201201
"""
202202
Returns standard filename in snakecase
203203
"""
204-
parent_classes = [base_class for base_class in cls.__bases__ if base_class.__name__ != DataCoreModel.__name__]
204+
parent_classes = [
205+
base_class
206+
for base_class in cls.__bases__
207+
if base_class.__name__ != DataCoreModel.__name__ and issubclass(base_class, DataModel)
208+
]
205209

206210
name = cls.__name__
207211

0 commit comments

Comments
 (0)