aind-data-schema 2.6.0__tar.gz → 2.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aind_data_schema-2.7.1/.github/workflows/link-issues-by-milestone.yml +56 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.github/workflows/run_dev_tests.yml +0 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.github/workflows/run_main_tests.yml +0 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.github/workflows/tag_and_publish_main.yml +1 -0
- aind_data_schema-2.7.1/.github/workflows/update_dev_docs.yml +34 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.github/workflows/update_docs.yml +0 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/CONTRIBUTING.md +3 -1
- {aind_data_schema-2.6.0/src/aind_data_schema.egg-info → aind_data_schema-2.7.1}/PKG-INFO +2 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/acquisition.md +2 -2
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/quality_control.md +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/acquisition.md +18 -6
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/harp_types.md +4 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/organizations.md +1 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/configs.md +0 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/identifiers.md +1 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/injection_procedures.md +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/specimen_procedures.md +2 -2
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/subject_procedures.md +14 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/surgery_procedures.md +2 -2
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/index.rst +0 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/procedures.md +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/quality_control.md +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/subject.md +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/validation.md +1 -1
- aind_data_schema-2.7.1/examples/barseq_acquisition.py +40 -0
- aind_data_schema-2.7.1/examples/barseq_instrument.py +250 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/ephys_instrument.py +20 -23
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/processing.py +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/pyproject.toml +1 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/acquisition_schema.json +238 -9
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/instrument_schema.json +223 -4
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/metadata_schema.json +684 -23
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/model_schema.json +14 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/procedures_schema.json +168 -3
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/processing_schema.json +16 -2
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/subject_schema.json +217 -3
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/__init__.py +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/base.py +5 -3
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/devices.py +4 -2
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/identifiers.py +25 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/injection_procedures.py +6 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/measurements.py +2 -2
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/reagent.py +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/specimen_procedures.py +8 -8
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/stimulus.py +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/subject_procedures.py +12 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/surgery_procedures.py +4 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/acquisition.py +78 -28
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/instrument.py +20 -4
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/metadata.py +21 -9
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/procedures.py +30 -6
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/processing.py +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/quality_control.py +3 -3
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/subject.py +3 -3
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/compatibility_check.py +3 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/docs/model_generator.py +1 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/docs/registries_generator.py +2 -2
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/examples_generator.py +4 -2
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/merge.py +3 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/validators.py +6 -3
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1/src/aind_data_schema.egg-info}/PKG-INFO +2 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema.egg-info/SOURCES.txt +4 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema.egg-info/requires.txt +1 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_acquisition.py +49 -1
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_base.py +6 -6
- aind_data_schema-2.7.1/tests/test_identifiers.py +58 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_instrument.py +42 -9
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_metadata.py +14 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_procedures.py +56 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_quality_control.py +12 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_utils_validators.py +16 -16
- aind_data_schema-2.6.0/CHANGELOG.md +0 -186
- aind_data_schema-2.6.0/tests/test_identifiers.py +0 -27
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.flake8 +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.github/ISSUE_TEMPLATE/user-story.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.github/workflows/publish_dev.yml +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.gitignore +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/.readthedocs.yaml +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/CODE_OF_CONDUCT.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/LICENSE +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/README.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/Makefile +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/data_description.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/instrument.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/metadata.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/model.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/procedures.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/processing.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/base/core/subject.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/make.bat +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/bregma_and_lambda2.png +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/coordinates2.png +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/coordinates2_original.png +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/custom.css +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/dark-logo.svg +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/favicon.ico +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/light-logo.svg +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/session_image_1.png +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/session_image_2.png +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/_static/session_image_3.png +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/atlas.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/brain_atlas.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/coordinates.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/data_name_patterns.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/devices.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/external.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/licenses.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/modalities.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/pid_names.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/process_names.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/reagent.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/registries.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/species.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/specimen_procedure_types.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/stimulus_modality.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/system_architecture.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/units.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/connections.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/coordinates.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/devices.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/measurements.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/reagent.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/stimulus.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/subjects.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components.rst +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/conf.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/coordinate_systems.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/data_description.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/example_workflow/example_workflow.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/example_workflow/example_workflow.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/example_workflow/example_workflow.xlsx +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/general.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/instrument.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/metadata.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/model.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/processing.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/registries.rst +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/related_standards.md +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/__init__.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/aibs_smartspim_instrument.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/aibs_smartspim_procedures.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/aind_smartspim_instrument.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/bergamo_ophys_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/data_description.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/ephys_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/exaspim_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/exaspim_instrument.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/exaspim_quality_control.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/fip_behavior_instrument.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/fip_ophys_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/fip_ophys_instrument.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/model.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/mri_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/multiplane_ophys_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/multiplane_ophys_instrument.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/ophys_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/ophys_procedures.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/procedures.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/quality_control.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/slap2_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/slap2_instrument.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/slap2_structure_acquisition.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/examples/subject.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/data_description_schema.json +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/schemas/quality_control_schema.json +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/setup.cfg +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/setup.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/__init__.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/configs.py +3 -3
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/connections.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/coordinates.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/subjects.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/components/wrappers.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/__init__.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/data_description.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/core/model.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/__init__.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/docs/doc_generator.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/docs/utils.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/exceptions.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/json_writer.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema/utils/schema_version_bump.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema.egg-info/dependency_links.txt +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/src/aind_data_schema.egg-info/top_level.txt +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/__init__.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_acquisition_configs.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_aind_generic.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_bump_schema_versions.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_compatibility_check.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_composability_merge.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_configs.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_coordinates.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_data_description.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_device.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_examples.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_imaging.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_inst_acq_compatibility.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_json_writer.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_measurements.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_model.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_processing.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_stimulus.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_subject.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_subjects.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_utils_merge.py +0 -0
- {aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/tests/test_wrappers.py +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Link issue to cross-repo milestone parent
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issues:
|
|
5
|
+
types: [milestoned]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
link:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
|
|
11
|
+
steps:
|
|
12
|
+
- name: Link to parent issue in aind-scientific-computing
|
|
13
|
+
uses: actions/github-script@v7
|
|
14
|
+
with:
|
|
15
|
+
github-token: ${{ secrets.SERVICE_TOKEN }}
|
|
16
|
+
script: |
|
|
17
|
+
const issue = context.payload.issue;
|
|
18
|
+
const milestone = issue.milestone;
|
|
19
|
+
|
|
20
|
+
if (!milestone) return;
|
|
21
|
+
|
|
22
|
+
const targetOwner = "AllenNeuralDynamics";
|
|
23
|
+
const targetRepo = "aind-scientific-computing";
|
|
24
|
+
|
|
25
|
+
const url = milestone.description;
|
|
26
|
+
const match = url?.match(/\/issues\/(\d+)$/);
|
|
27
|
+
|
|
28
|
+
if (!match) {
|
|
29
|
+
console.log(`Milestone description is not a roadmap URL: ${url}`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const parentNumber = parseInt(match[1]);
|
|
34
|
+
|
|
35
|
+
const { data: parent } = await github.rest.issues.get({
|
|
36
|
+
owner: targetOwner,
|
|
37
|
+
repo: targetRepo,
|
|
38
|
+
issue_number: parentNumber
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
if (!parent) {
|
|
42
|
+
console.log(`No issue found at ${url}`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
await github.request("POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues", {
|
|
47
|
+
owner: targetOwner,
|
|
48
|
+
repo: targetRepo,
|
|
49
|
+
issue_number: parentNumber,
|
|
50
|
+
sub_issue_id: issue.id,
|
|
51
|
+
headers: {
|
|
52
|
+
"X-GitHub-Api-Version": "2022-11-28"
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
console.log(`Linked issue #${issue.number} as sub-issue of ${targetRepo}#${parentNumber}`);
|
|
@@ -38,7 +38,6 @@ jobs:
|
|
|
38
38
|
python-version: ${{ matrix.python-version }}
|
|
39
39
|
- name: Install dependencies
|
|
40
40
|
run: |
|
|
41
|
-
sudo apt install graphviz libgraphviz-dev -y
|
|
42
41
|
python -m pip install -e .[dev] -e .[docs] --no-cache-dir
|
|
43
42
|
- name: Run tests and coverage
|
|
44
43
|
run: coverage run -m unittest discover && coverage report
|
|
@@ -40,7 +40,6 @@ jobs:
|
|
|
40
40
|
python-version: ${{ matrix.python-version }}
|
|
41
41
|
- name: Install dependencies
|
|
42
42
|
run: |
|
|
43
|
-
sudo apt install graphviz libgraphviz-dev -y
|
|
44
43
|
python -m pip install -e .[dev] -e .[docs] --no-cache-dir
|
|
45
44
|
- name: Run tests and coverage
|
|
46
45
|
run: coverage run -m unittest discover && coverage report
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Update docs for dev PR
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches:
|
|
6
|
+
- dev
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
update_docs:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v3
|
|
13
|
+
with:
|
|
14
|
+
token: ${{ secrets.SERVICE_TOKEN }}
|
|
15
|
+
ref: ${{ github.head_ref }}
|
|
16
|
+
- name: Set up Python 3.10
|
|
17
|
+
uses: actions/setup-python@v3
|
|
18
|
+
with:
|
|
19
|
+
python-version: '3.10'
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: |
|
|
22
|
+
python -m pip install -e .[dev] -e .[docs] --no-cache-dir
|
|
23
|
+
- name: Generate docs
|
|
24
|
+
run: |
|
|
25
|
+
python src/aind_data_schema/utils/docs/model_generator.py
|
|
26
|
+
python src/aind_data_schema/utils/docs/registries_generator.py
|
|
27
|
+
python src/aind_data_schema/utils/docs/doc_generator.py
|
|
28
|
+
sphinx-build -b html docs/source/ docs/build/html
|
|
29
|
+
- name: Commit changes
|
|
30
|
+
uses: EndBug/add-and-commit@v9
|
|
31
|
+
with:
|
|
32
|
+
default_author: github_actions
|
|
33
|
+
message: "update docs"
|
|
34
|
+
add: '["docs"]'
|
|
@@ -39,7 +39,9 @@ Starting with the v2.0 release all changes must be accompanied by an [upgrader](
|
|
|
39
39
|
|
|
40
40
|
### Documentation
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
Documentation is automatically built when you open a PR into the aind-data-schema repository. For **core files, please make sure that you modify the base file**, these are used to construct the source files: i.e. `docs/base/core/acquisition.md` will over-write any changes made to `docs/source/acquisition.md`.
|
|
43
|
+
|
|
44
|
+
#### Manually build documentation
|
|
43
45
|
|
|
44
46
|
To generate the source files for the documentation and model class links, run:
|
|
45
47
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aind-data-schema
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: A library that defines AIND data schema and validates JSON files.
|
|
5
5
|
License: MIT
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -10,6 +10,7 @@ License-File: LICENSE
|
|
|
10
10
|
Requires-Dist: aind-data-schema-models<6,>=5.4.1
|
|
11
11
|
Requires-Dist: pydantic<2.12,>=2.7
|
|
12
12
|
Requires-Dist: pydantic-extra-types
|
|
13
|
+
Requires-Dist: tzdata
|
|
13
14
|
Provides-Extra: dev
|
|
14
15
|
Requires-Dist: aind_data_schema[linters]; extra == "dev"
|
|
15
16
|
Requires-Dist: pydantic!=2.9.0,!=2.9.1,>=2.7; extra == "dev"
|
|
@@ -19,9 +19,9 @@ Because the start and stop times are independent for data streams and stimulus e
|
|
|
19
19
|
|
|
20
20
|
## Uniqueness
|
|
21
21
|
|
|
22
|
-
You can uniquely identify acquisition sessions (and therefore a specific data asset) by their acquisition datetime (`Acquisition.
|
|
22
|
+
You can uniquely identify acquisition sessions (and therefore a specific data asset) by their acquisition datetime (`Acquisition.acquisition_start_time`). In addition, the `Acquisition.acquisition_type` is an open `str` field where you can put conceptual information that groups similar acquisitions together. This should not be completely redundant with project names, modalities, stimulus names, or any other fields in the metadata.
|
|
23
23
|
|
|
24
|
-
For example, in the `"Brain Computer Interface"` project name, good acquisition types would be strings like: `"
|
|
24
|
+
For example, in the `"Brain Computer Interface"` project name, good acquisition types would be strings like: `"Single neuron stim"` and `"Group neuron stim"`. These phrases clearly identify what part of a project these acquisitions belong to, without being overly redundant with controlled fields in the metadata.
|
|
25
25
|
|
|
26
26
|
## Stimulus parameters
|
|
27
27
|
|
|
@@ -26,7 +26,7 @@ If you find yourself computing a value for something smaller than an entire moda
|
|
|
26
26
|
|
|
27
27
|
`tags` are groups of descriptors that define how metrics are organized hierarchically, making it easier to visualize metrics. Good tag keys (groups) are things like "probe" and good tag values are things like "Probe A" or just "A".
|
|
28
28
|
|
|
29
|
-
```
|
|
29
|
+
```python
|
|
30
30
|
# For an electrophysiology metric
|
|
31
31
|
tags = {
|
|
32
32
|
"probe": "A",
|
|
@@ -19,9 +19,9 @@ Because the start and stop times are independent for data streams and stimulus e
|
|
|
19
19
|
|
|
20
20
|
## Uniqueness
|
|
21
21
|
|
|
22
|
-
You can uniquely identify acquisition sessions (and therefore a specific data asset) by their acquisition datetime (`Acquisition.
|
|
22
|
+
You can uniquely identify acquisition sessions (and therefore a specific data asset) by their acquisition datetime (`Acquisition.acquisition_start_time`). In addition, the `Acquisition.acquisition_type` is an open `str` field where you can put conceptual information that groups similar acquisitions together. This should not be completely redundant with project names, modalities, stimulus names, or any other fields in the metadata.
|
|
23
23
|
|
|
24
|
-
For example, in the `"Brain Computer Interface"` project name, good acquisition types would be strings like: `"
|
|
24
|
+
For example, in the `"Brain Computer Interface"` project name, good acquisition types would be strings like: `"Single neuron stim"` and `"Group neuron stim"`. These phrases clearly identify what part of a project these acquisitions belong to, without being overly redundant with controlled fields in the metadata.
|
|
25
25
|
|
|
26
26
|
## Stimulus parameters
|
|
27
27
|
|
|
@@ -78,23 +78,23 @@ while the StimulusEpoch represents all stimuli being presented.
|
|
|
78
78
|
| Field | Type | Title (Description) |
|
|
79
79
|
|-------|------|-------------|
|
|
80
80
|
| `subject_id` | `str` | Subject ID (Unique identifier for the subject) |
|
|
81
|
-
| `specimen_id` | `
|
|
81
|
+
| `specimen_id` | `str or List[str] or NoneType` | Specimen ID (Required for in vitro modalities. Standard format is {subject_id} with a _### suffix, as needed) |
|
|
82
82
|
| `acquisition_start_time` | `datetime (timezone-aware)` | Acquisition start time (During validation, timezone information will be moved into the acquisition_start_tz field.) |
|
|
83
83
|
| `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.) |
|
|
84
84
|
| `acquisition_end_time` | `datetime (timezone-aware)` | Acquisition end time |
|
|
85
85
|
| `experimenters` | `List[str]` | experimenter(s) |
|
|
86
86
|
| `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
|
|
87
87
|
| `ethics_review_id` | `Optional[List[str]]` | Ethics review ID |
|
|
88
|
-
| `instrument_id` | `str` | Instrument ID (Should match the Instrument.instrument_id) |
|
|
88
|
+
| `instrument_id` | `Optional[str]` | Instrument ID (Should match the Instrument.instrument_id. Required when instrument metadata is available.) |
|
|
89
89
|
| `acquisition_type` | `str` | Acquisition type (Descriptive string detailing the type of acquisition, should be consistent across similar acquisitions for the same experiment.) |
|
|
90
90
|
| `notes` | `Optional[str]` | Notes |
|
|
91
91
|
| `coordinate_system` | Optional[[CoordinateSystem](components/coordinates.md#coordinatesystem)] | Coordinate system (Origin and axis definitions for determining the configured position of devices during acquisition. Required when coordinates are provided within the Acquisition) |
|
|
92
92
|
| `calibrations` | List[[Calibration](components/measurements.md#calibration) or [VolumeCalibration](components/measurements.md#volumecalibration) or [PowerCalibration](components/measurements.md#powercalibration)] | Calibrations (List of calibration measurements taken prior to acquisition.) |
|
|
93
93
|
| `maintenance` | List[[Maintenance](components/measurements.md#maintenance)] | Maintenance (List of maintenance on instrument prior to acquisition.) |
|
|
94
|
-
| `data_streams` | List[[DataStream](acquisition.md#datastream)] | Data streams (A data stream is a collection of devices that are acquiring data simultaneously. Each acquisition can include multiple streams. Streams should be split when configurations are changed.) |
|
|
94
|
+
| `data_streams` | List[[DataStream](acquisition.md#datastream) or [ExternalDataStream](acquisition.md#externaldatastream)] | Data streams (A data stream is a collection of devices that are acquiring data simultaneously. Each acquisition can include multiple streams. Streams should be split when configurations are changed. Use ExternalDataStream for acquisitions where instrument metadata is unavailable.) |
|
|
95
95
|
| `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.) |
|
|
96
96
|
| `manipulations` | List[[Manipulation](acquisition.md#manipulation)] | Manipulations (Procedures performed during the acquisition.) |
|
|
97
|
-
| `subject_details` | Optional[[AcquisitionSubjectDetails](acquisition.md#acquisitionsubjectdetails)] | Subject details
|
|
97
|
+
| `subject_details` | Optional[[AcquisitionSubjectDetails](acquisition.md#acquisitionsubjectdetails)] | Subject details (Required for in vivo acquisitions.) |
|
|
98
98
|
|
|
99
99
|
|
|
100
100
|
## Model definitions
|
|
@@ -131,6 +131,18 @@ same time.
|
|
|
131
131
|
| `connections` | List[[Connection](components/connections.md#connection)] | Connections (Connections are links between devices that are specific to this acquisition (i.e. not already defined in the Instrument)) |
|
|
132
132
|
|
|
133
133
|
|
|
134
|
+
### ExternalDataStream
|
|
135
|
+
|
|
136
|
+
A simplified data stream for acquisitions where instrument metadata is unavailable.
|
|
137
|
+
|
|
138
|
+
| Field | Type | Title (Description) |
|
|
139
|
+
|-------|------|-------------|
|
|
140
|
+
| `stream_start_time` | `datetime (timezone-aware)` | Stream start time |
|
|
141
|
+
| `stream_end_time` | `datetime (timezone-aware)` | Stream stop time |
|
|
142
|
+
| `modalities` | List[[Modality](aind_data_schema_models/modalities.md#modality)] | Modalities (Modalities that are acquired in this stream) |
|
|
143
|
+
| `notes` | `Optional[str]` | Notes |
|
|
144
|
+
|
|
145
|
+
|
|
134
146
|
### Manipulation
|
|
135
147
|
|
|
136
148
|
Description of procedures performed during an acquisition.
|
{aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/aind_data_schema_models/harp_types.md
RENAMED
|
@@ -10,10 +10,12 @@ Harp device types
|
|
|
10
10
|
|------|------|------|
|
|
11
11
|
| `ANALOGINPUT` | `AnalogInput` | `1236` |
|
|
12
12
|
| `ARCHIMEDES` | `Archimedes` | `1136` |
|
|
13
|
+
| `AUDIOSWITCH` | `AudioSwitch` | `1248` |
|
|
13
14
|
| `BEHAVIOR` | `Behavior` | `1216` |
|
|
14
15
|
| `CAMERACONTROLLER` | `CameraController` | `1168` |
|
|
15
16
|
| `CAMERACONTROLLERGEN2` | `CameraControllerGen2` | `1170` |
|
|
16
17
|
| `CLOCKSYNCHRONIZER` | `ClockSynchronizer` | `1152` |
|
|
18
|
+
| `CURRENTDRIVER` | `CurrentDriver` | `1282` |
|
|
17
19
|
| `CUTTLEFISH` | `cuTTLefish` | `1403` |
|
|
18
20
|
| `CUTTLEFISHFIP` | `cuTTLefishFip` | `1407` |
|
|
19
21
|
| `DRIVER12VOLTS` | `Driver12Volts` | `1072` |
|
|
@@ -22,6 +24,7 @@ Harp device types
|
|
|
22
24
|
| `HOBGOBLIN` | `Hobgoblin` | `123` |
|
|
23
25
|
| `IBL_BEHAVIOR_CONTROL` | `Ibl_behavior_control` | `2080` |
|
|
24
26
|
| `INPUTEXPANDER` | `InputExpander` | `1106` |
|
|
27
|
+
| `LASERDRIVERCONTROLLER` | `LaserDriverController` | `1298` |
|
|
25
28
|
| `LEDCONTROLLER` | `LedController` | `1088` |
|
|
26
29
|
| `LICKETYSPLIT` | `LicketySplit` | `1400` |
|
|
27
30
|
| `LOADCELLS` | `LoadCells` | `1232` |
|
|
@@ -33,7 +36,7 @@ Harp device types
|
|
|
33
36
|
| `POKE` | `Poke` | `1024` |
|
|
34
37
|
| `PYCONTROLADAPTER` | `PyControlAdapter` | `1184` |
|
|
35
38
|
| `RFIDREADER` | `RfidReader` | `2094` |
|
|
36
|
-
| `RGBARRAY` | `RgbArray` | `
|
|
39
|
+
| `RGBARRAY` | `RgbArray` | `1264` |
|
|
37
40
|
| `SIMPLEANALOGGENERATOR` | `SimpleAnalogGenerator` | `1121` |
|
|
38
41
|
| `SNIFFDETECTOR` | `SniffDetector` | `1401` |
|
|
39
42
|
| `SOUNDCARD` | `SoundCard` | `1280` |
|
|
@@ -86,6 +86,7 @@ Organization
|
|
|
86
86
|
| `MIT_BCS` | `MIT-BCS` | `MIT Department of Brain and Cognitive Sciences` | `None` | `None` |
|
|
87
87
|
| `MJFF` | `MJFF` | `Michael J. Fox Foundation for Parkinson's Research` | `Research Organization Registry (ROR)` | `03arq3225` |
|
|
88
88
|
| `MKS_NEWPORT` | `None` | `MKS Newport` | `Research Organization Registry (ROR)` | `00k17f049` |
|
|
89
|
+
| `MOLECULAR_INSTRUMENTS` | `None` | `Molecular Instruments` | `None` | `None` |
|
|
89
90
|
| `MONITOR_MANUFACTURERS` | `N/A` | `N/A` | `N/A` | `N/A` |
|
|
90
91
|
| `MPI` | `MPI` | `MPI` | `None` | `None` |
|
|
91
92
|
| `NATIONAL_INSTRUMENTS` | `None` | `National Instruments` | `Research Organization Registry (ROR)` | `026exqw73` |
|
|
@@ -476,7 +476,6 @@ Configuration of a SLAP2 imaging plane (all imaging ROIs of a specific acquisiti
|
|
|
476
476
|
| `specimen_id` | `Optional[str]` | Specimen ID (Unique index identifying the cell being imaged: <subject_id>_###) |
|
|
477
477
|
| `fov_index` | `Optional[int]` | Field of view index (For FOVs that are imaged multiple times, assign a shared index to each instance of the FOV) |
|
|
478
478
|
| `structure_types` | Optional[List[[NeuronStructure](#neuronstructure)]] | Structure type |
|
|
479
|
-
| `target_name` | `Optional[str]` | Name of imaged target |
|
|
480
479
|
| `y_dilations` | `List[int]` | Unique Y dilations |
|
|
481
480
|
| `y_dilations_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Dilation unit |
|
|
482
481
|
| `frame_rates` | `List[float]` | Unique frame rates |
|
|
@@ -11,6 +11,7 @@ Code or script identifier
|
|
|
11
11
|
| `url` | `str` | Code URL (URL to code repository) |
|
|
12
12
|
| `name` | `Optional[str]` | Name |
|
|
13
13
|
| `version` | `Optional[str]` | Code version |
|
|
14
|
+
| `commit_hash` | `Optional[str]` | Commit hash (Commit hash of the code.) |
|
|
14
15
|
| `container` | Optional[[Container](#container)] | Container |
|
|
15
16
|
| `run_script` | `Optional[pathlib.Path]` | Run script (Path to run script) |
|
|
16
17
|
| `language` | `Optional[str]` | Programming language (Programming language used) |
|
{aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/injection_procedures.md
RENAMED
|
@@ -12,7 +12,7 @@ Description of an injection procedure
|
|
|
12
12
|
| `targeted_structure` | Optional[[MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel)] | Injection target (Use InjectionTargets) |
|
|
13
13
|
| `relative_position` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | Relative position |
|
|
14
14
|
| `dynamics` | List[[InjectionDynamics](#injectiondynamics)] | Injection dynamics (List of injection events, one per location/depth) |
|
|
15
|
-
|
|
|
15
|
+
| <del>`protocol_id`</del> | `Optional[str]` | **[DEPRECATED]** Use protocol_id in Surgery or NonSurgicalInjection instead. Protocol ID (DOI for protocols.io) |
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
### InjectionDynamics
|
{aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/specimen_procedures.md
RENAMED
|
@@ -41,7 +41,7 @@ Description of a single planar section of brain tissue
|
|
|
41
41
|
| `thickness` | `Optional[float]` | Slice thickness |
|
|
42
42
|
| `thickness_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | Slice thickness unit |
|
|
43
43
|
| `partial_slice` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | Partial slice (If sectioning does not include the entire slice, indicate which part of the slice is retained.) |
|
|
44
|
-
| `output_specimen_id` | `str` | Specimen ID
|
|
44
|
+
| `output_specimen_id` | `str` | Specimen ID (Output IDs should generally follow the format {input_specimen_id}_###) |
|
|
45
45
|
| `targeted_structure` | Optional[[BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3)] | Targeted structure |
|
|
46
46
|
| `includes_surrounding_tissue` | `Optional[bool]` | Includes surrounding tissue (Whether the section includes additional tissue surrounding the targeted structure.) |
|
|
47
47
|
|
|
@@ -63,7 +63,7 @@ Description of a single section of brain tissue. Slices should use PlanarSection
|
|
|
63
63
|
|
|
64
64
|
| Field | Type | Title (Description) |
|
|
65
65
|
|-------|------|-------------|
|
|
66
|
-
| `output_specimen_id` | `str` | Specimen ID
|
|
66
|
+
| `output_specimen_id` | `str` | Specimen ID (Output IDs should generally follow the format {input_specimen_id}_###) |
|
|
67
67
|
| `targeted_structure` | Optional[[BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3)] | Targeted structure |
|
|
68
68
|
| `includes_surrounding_tissue` | `Optional[bool]` | Includes surrounding tissue (Whether the section includes additional tissue surrounding the targeted structure.) |
|
|
69
69
|
| <del>`coordinate_system_name`</del> | `Optional[str]` | **[DEPRECATED]** Use PlanarSection instead. Coordinate system name |
|
{aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/subject_procedures.md
RENAMED
|
@@ -16,6 +16,20 @@ Description of a non-surgical procedure performed on a subject
|
|
|
16
16
|
| `notes` | `Optional[str]` | Notes |
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
### NonSurgicalInjection
|
|
20
|
+
|
|
21
|
+
Injection procedure performed outside of surgery,
|
|
22
|
+
which may include one or more injections at different locations/depths
|
|
23
|
+
|
|
24
|
+
| Field | Type | Title (Description) |
|
|
25
|
+
|-------|------|-------------|
|
|
26
|
+
| `start_date` | `datetime.date` | Start date |
|
|
27
|
+
| `ethics_review_id` | `str` | Ethics review ID |
|
|
28
|
+
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
|
|
29
|
+
| `injections` | List[[Injection](injection_procedures.md#injection)] | Injections |
|
|
30
|
+
| `notes` | `Optional[str]` | Notes |
|
|
31
|
+
|
|
32
|
+
|
|
19
33
|
### Surgery
|
|
20
34
|
|
|
21
35
|
Description of subject procedures performed at one time
|
{aind_data_schema-2.6.0 → aind_data_schema-2.7.1}/docs/source/components/surgery_procedures.md
RENAMED
|
@@ -26,7 +26,7 @@ Description of an injection procedure into a brain
|
|
|
26
26
|
| `injection_materials` | List[[ViralMaterial](injection_procedures.md#viralmaterial) or [NonViralMaterial](injection_procedures.md#nonviralmaterial)] | Injection material |
|
|
27
27
|
| `relative_position` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | Relative position |
|
|
28
28
|
| `dynamics` | List[[InjectionDynamics](injection_procedures.md#injectiondynamics)] | Injection dynamics (List of injection events, one per location/depth) |
|
|
29
|
-
|
|
|
29
|
+
| <del>`protocol_id`</del> | `Optional[str]` | **[DEPRECATED]** Use protocol_id in Surgery or NonSurgicalInjection instead. Protocol ID (DOI for protocols.io) |
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
### CatheterImplant
|
|
@@ -147,7 +147,7 @@ Description of a perfusion procedure that creates a specimen
|
|
|
147
147
|
| Field | Type | Title (Description) |
|
|
148
148
|
|-------|------|-------------|
|
|
149
149
|
| `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
|
|
150
|
-
| `output_specimen_ids` | `List[str]` | Specimen ID (IDs of specimens resulting from this procedure.) |
|
|
150
|
+
| `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}_###) |
|
|
151
151
|
|
|
152
152
|
|
|
153
153
|
### ProbeImplant
|
|
@@ -33,7 +33,6 @@ I want to...
|
|
|
33
33
|
------------
|
|
34
34
|
|
|
35
35
|
- :doc:`Create metadata for my data assets <example_workflow/example_workflow>`.
|
|
36
|
-
- :doc:`Create metadata using the AIND metadata-mapper <todo>`.
|
|
37
36
|
- :doc:`Learn about the philosophy behind aind-data-schema<general>`.
|
|
38
37
|
- :doc:`Learn about how coordinate systems work<coordinate_systems>`.
|
|
39
38
|
- `Report an issue or request an addition to the metadata schema <https://github.com/AllenNeuralDynamics/aind-data-schema/issues>`_.
|
|
@@ -27,7 +27,7 @@ Description of all procedures performed on a subject, including surgeries, injec
|
|
|
27
27
|
| Field | Type | Title (Description) |
|
|
28
28
|
|-------|------|-------------|
|
|
29
29
|
| `subject_id` | `str` | Subject ID (Unique identifier for the subject of data acquisition) |
|
|
30
|
-
| `subject_procedures` | List[[Surgery](components/subject_procedures.md#surgery) or [Injection](components/injection_procedures.md#injection) or [TrainingProtocol](components/subject_procedures.md#trainingprotocol) or [WaterRestriction](components/subject_procedures.md#waterrestriction) or [GenericSubjectProcedure](components/subject_procedures.md#genericsubjectprocedure)] | Subject Procedures (Procedures performed on a live subject) |
|
|
30
|
+
| `subject_procedures` | List[[Surgery](components/subject_procedures.md#surgery) or [Injection](components/injection_procedures.md#injection) or [NonSurgicalInjection](components/subject_procedures.md#nonsurgicalinjection) or [TrainingProtocol](components/subject_procedures.md#trainingprotocol) or [WaterRestriction](components/subject_procedures.md#waterrestriction) or [GenericSubjectProcedure](components/subject_procedures.md#genericsubjectprocedure)] | Subject Procedures (Procedures performed on a live subject) |
|
|
31
31
|
| `specimen_procedures` | List[[SpecimenProcedure](components/specimen_procedures.md#specimenprocedure)] | Specimen Procedures (Procedures performed on tissue extracted after perfusion) |
|
|
32
32
|
| `coordinate_system` | Optional[[CoordinateSystem](components/coordinates.md#coordinatesystem)] | Coordinate System (Origin and axis definitions for determining the configured position of devices implanted during procedures. Required when coordinates are provided within the Procedures) |
|
|
33
33
|
| `notes` | `Optional[str]` | Notes |
|
|
@@ -26,7 +26,7 @@ If you find yourself computing a value for something smaller than an entire moda
|
|
|
26
26
|
|
|
27
27
|
`tags` are groups of descriptors that define how metrics are organized hierarchically, making it easier to visualize metrics. Good tag keys (groups) are things like "probe" and good tag values are things like "Probe A" or just "A".
|
|
28
28
|
|
|
29
|
-
```
|
|
29
|
+
```python
|
|
30
30
|
# For an electrophysiology metric
|
|
31
31
|
tags = {
|
|
32
32
|
"probe": "A",
|
|
@@ -21,5 +21,5 @@ Description of a subject of data collection
|
|
|
21
21
|
| Field | Type | Title (Description) |
|
|
22
22
|
|-------|------|-------------|
|
|
23
23
|
| `subject_id` | `str` | Subject ID (Unique identifier for the subject of data acquisition) |
|
|
24
|
-
| `subject_details` | [MouseSubject](components/subjects.md#mousesubject) or [HumanSubject](components/subjects.md#humansubject) or [CalibrationObject](components/subjects.md#calibrationobject) | Subject Details |
|
|
24
|
+
| `subject_details` | [MouseSubject](components/subjects.md#mousesubject) or [HumanSubject](components/subjects.md#humansubject) or [NonHumanPrimateSubject](components/subjects.md#nonhumanprimatesubject) or [CalibrationObject](components/subjects.md#calibrationobject) | Subject Details |
|
|
25
25
|
| `notes` | `Optional[str]` | Notes |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Example of a BARseq acquisition using ExternalDataStream.
|
|
2
|
+
|
|
3
|
+
BARseq is acquired by the AIBS Molecular Anatomy team using an instrument
|
|
4
|
+
and workflows not yet fully documented in the AIND schema. ExternalDataStream
|
|
5
|
+
is used here to record acquisition metadata without requiring full instrument
|
|
6
|
+
configuration details, treating the data as if it were acquired externally.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import argparse
|
|
10
|
+
from datetime import datetime
|
|
11
|
+
from zoneinfo import ZoneInfo
|
|
12
|
+
|
|
13
|
+
from aind_data_schema_models.modalities import Modality
|
|
14
|
+
|
|
15
|
+
from aind_data_schema.core.acquisition import Acquisition, ExternalDataStream
|
|
16
|
+
|
|
17
|
+
acquisition = Acquisition(
|
|
18
|
+
subject_id="123456",
|
|
19
|
+
specimen_id=["123456_bar001", "123456_bar002"],
|
|
20
|
+
acquisition_start_time=datetime(2025, 1, 1, 9, 0, 0, tzinfo=ZoneInfo("America/Los_Angeles")),
|
|
21
|
+
acquisition_end_time=datetime(2025, 1, 31, 17, 0, 0, tzinfo=ZoneInfo("America/Los_Angeles")),
|
|
22
|
+
acquisition_type="BarcodeSequencing",
|
|
23
|
+
data_streams=[
|
|
24
|
+
ExternalDataStream(
|
|
25
|
+
stream_start_time=datetime(2025, 1, 1, 9, 0, 0, tzinfo=ZoneInfo("America/Los_Angeles")),
|
|
26
|
+
stream_end_time=datetime(2025, 1, 31, 17, 0, 0, tzinfo=ZoneInfo("America/Los_Angeles")),
|
|
27
|
+
modalities=[Modality.BARSEQ],
|
|
28
|
+
notes="Acquired externally.",
|
|
29
|
+
)
|
|
30
|
+
],
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
parser = argparse.ArgumentParser()
|
|
35
|
+
parser.add_argument("--output-dir", default=None, help="Output directory for generated JSON file")
|
|
36
|
+
args = parser.parse_args()
|
|
37
|
+
|
|
38
|
+
serialized = acquisition.model_dump_json()
|
|
39
|
+
deserialized = Acquisition.model_validate_json(serialized)
|
|
40
|
+
deserialized.write_standard_file(prefix="barseq", output_directory=args.output_dir)
|