aind-data-schema 2.6.0__tar.gz → 2.8.0__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.
Files changed (210) hide show
  1. aind_data_schema-2.8.0/.github/workflows/link-issues-by-milestone.yml +56 -0
  2. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.github/workflows/run_dev_tests.yml +0 -1
  3. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.github/workflows/run_main_tests.yml +0 -1
  4. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.github/workflows/tag_and_publish_main.yml +1 -0
  5. aind_data_schema-2.8.0/.github/workflows/update_dev_docs.yml +34 -0
  6. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.github/workflows/update_docs.yml +0 -1
  7. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.gitignore +1 -0
  8. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/CONTRIBUTING.md +3 -1
  9. {aind_data_schema-2.6.0/src/aind_data_schema.egg-info → aind_data_schema-2.8.0}/PKG-INFO +3 -2
  10. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/acquisition.md +2 -2
  11. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/quality_control.md +1 -1
  12. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/acquisition.md +21 -8
  13. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/harp_types.md +5 -1
  14. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/organizations.md +7 -0
  15. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/process_names.md +3 -0
  16. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/specimen_procedure_types.md +0 -1
  17. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/configs.md +0 -1
  18. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/devices.md +12 -12
  19. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/identifiers.md +3 -1
  20. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/measurements.md +4 -4
  21. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/reagent.md +10 -0
  22. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/specimen_procedures.md +4 -4
  23. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/subject_procedures.md +16 -2
  24. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/surgery_procedures.md +6 -6
  25. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/index.rst +0 -1
  26. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/procedures.md +1 -1
  27. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/quality_control.md +1 -1
  28. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/subject.md +1 -1
  29. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/validation.md +1 -1
  30. aind_data_schema-2.8.0/examples/barseq_acquisition.py +40 -0
  31. aind_data_schema-2.8.0/examples/barseq_instrument.py +250 -0
  32. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/ephys_instrument.py +20 -23
  33. aind_data_schema-2.8.0/examples/isi_instrument.py +248 -0
  34. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/processing.py +11 -7
  35. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/pyproject.toml +2 -1
  36. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/schemas/acquisition_schema.json +677 -111
  37. aind_data_schema-2.6.0/schemas/subject_schema.json → aind_data_schema-2.8.0/schemas/data_description_schema.json +1818 -1479
  38. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/schemas/instrument_schema.json +9670 -2637
  39. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/schemas/metadata_schema.json +17201 -6758
  40. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/schemas/model_schema.json +40 -5
  41. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/schemas/procedures_schema.json +1369 -184
  42. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/schemas/processing_schema.json +42 -7
  43. aind_data_schema-2.8.0/schemas/subject_schema.json +8477 -0
  44. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/__init__.py +1 -1
  45. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/base.py +10 -4
  46. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/devices.py +17 -17
  47. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/identifiers.py +53 -2
  48. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/injection_procedures.py +2 -2
  49. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/measurements.py +5 -6
  50. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/reagent.py +8 -1
  51. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/specimen_procedures.py +11 -11
  52. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/stimulus.py +1 -1
  53. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/subject_procedures.py +15 -5
  54. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/subjects.py +4 -4
  55. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/surgery_procedures.py +12 -15
  56. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/acquisition.py +83 -33
  57. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/data_description.py +7 -7
  58. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/instrument.py +20 -4
  59. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/metadata.py +21 -9
  60. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/procedures.py +30 -6
  61. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/processing.py +9 -9
  62. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/quality_control.py +3 -3
  63. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/subject.py +3 -3
  64. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/compatibility_check.py +3 -1
  65. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/docs/model_generator.py +1 -1
  66. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/docs/registries_generator.py +2 -2
  67. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/examples_generator.py +4 -2
  68. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/merge.py +3 -1
  69. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/validators.py +6 -3
  70. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0/src/aind_data_schema.egg-info}/PKG-INFO +3 -2
  71. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema.egg-info/SOURCES.txt +5 -1
  72. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema.egg-info/requires.txt +2 -1
  73. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_acquisition.py +49 -1
  74. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_base.py +6 -6
  75. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_composability_merge.py +14 -16
  76. aind_data_schema-2.8.0/tests/test_identifiers.py +92 -0
  77. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_imaging.py +1 -1
  78. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_instrument.py +42 -9
  79. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_metadata.py +20 -3
  80. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_procedures.py +56 -0
  81. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_processing.py +73 -16
  82. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_quality_control.py +12 -0
  83. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_utils_validators.py +16 -16
  84. aind_data_schema-2.6.0/CHANGELOG.md +0 -186
  85. aind_data_schema-2.6.0/schemas/data_description_schema.json +0 -1878
  86. aind_data_schema-2.6.0/tests/test_identifiers.py +0 -27
  87. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.flake8 +0 -0
  88. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  89. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  90. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.github/ISSUE_TEMPLATE/user-story.md +0 -0
  91. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.github/workflows/publish_dev.yml +0 -0
  92. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/.readthedocs.yaml +0 -0
  93. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/CODE_OF_CONDUCT.md +0 -0
  94. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/LICENSE +0 -0
  95. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/README.md +0 -0
  96. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/Makefile +0 -0
  97. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/data_description.md +0 -0
  98. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/instrument.md +0 -0
  99. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/metadata.md +0 -0
  100. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/model.md +0 -0
  101. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/procedures.md +0 -0
  102. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/processing.md +0 -0
  103. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/base/core/subject.md +0 -0
  104. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/make.bat +0 -0
  105. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/bregma_and_lambda2.png +0 -0
  106. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/coordinates2.png +0 -0
  107. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/coordinates2_original.png +0 -0
  108. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/custom.css +0 -0
  109. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/dark-logo.svg +0 -0
  110. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/favicon.ico +0 -0
  111. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/light-logo.svg +0 -0
  112. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/session_image_1.png +0 -0
  113. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/session_image_2.png +0 -0
  114. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/_static/session_image_3.png +0 -0
  115. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/atlas.md +0 -0
  116. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/brain_atlas.md +0 -0
  117. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/coordinates.md +0 -0
  118. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/data_name_patterns.md +0 -0
  119. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/devices.md +0 -0
  120. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/external.md +0 -0
  121. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/licenses.md +0 -0
  122. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/modalities.md +0 -0
  123. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/pid_names.md +0 -0
  124. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/reagent.md +0 -0
  125. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/registries.md +0 -0
  126. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/species.md +0 -0
  127. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/stimulus_modality.md +0 -0
  128. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/system_architecture.md +0 -0
  129. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/aind_data_schema_models/units.md +0 -0
  130. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/connections.md +0 -0
  131. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/coordinates.md +0 -0
  132. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/injection_procedures.md +0 -0
  133. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/stimulus.md +0 -0
  134. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components/subjects.md +0 -0
  135. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/components.rst +0 -0
  136. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/conf.py +0 -0
  137. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/coordinate_systems.md +0 -0
  138. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/data_description.md +0 -0
  139. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/example_workflow/example_workflow.md +0 -0
  140. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/example_workflow/example_workflow.py +0 -0
  141. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/example_workflow/example_workflow.xlsx +0 -0
  142. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/general.md +0 -0
  143. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/instrument.md +0 -0
  144. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/metadata.md +0 -0
  145. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/model.md +0 -0
  146. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/processing.md +0 -0
  147. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/registries.rst +0 -0
  148. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/docs/source/related_standards.md +0 -0
  149. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/__init__.py +0 -0
  150. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/aibs_smartspim_instrument.py +0 -0
  151. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/aibs_smartspim_procedures.py +0 -0
  152. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/aind_smartspim_instrument.py +0 -0
  153. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/bergamo_ophys_acquisition.py +0 -0
  154. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/data_description.py +0 -0
  155. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/ephys_acquisition.py +0 -0
  156. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/exaspim_acquisition.py +0 -0
  157. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/exaspim_instrument.py +0 -0
  158. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/exaspim_quality_control.py +0 -0
  159. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/fip_behavior_instrument.py +0 -0
  160. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/fip_ophys_acquisition.py +0 -0
  161. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/fip_ophys_instrument.py +0 -0
  162. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/model.py +0 -0
  163. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/mri_acquisition.py +0 -0
  164. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/multiplane_ophys_acquisition.py +0 -0
  165. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/multiplane_ophys_instrument.py +0 -0
  166. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/ophys_acquisition.py +0 -0
  167. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/ophys_procedures.py +0 -0
  168. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/procedures.py +0 -0
  169. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/quality_control.py +0 -0
  170. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/slap2_acquisition.py +0 -0
  171. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/slap2_instrument.py +0 -0
  172. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/slap2_structure_acquisition.py +0 -0
  173. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/examples/subject.py +0 -0
  174. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/schemas/quality_control_schema.json +0 -0
  175. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/setup.cfg +0 -0
  176. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/setup.py +0 -0
  177. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/__init__.py +0 -0
  178. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/configs.py +3 -3
  179. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/connections.py +0 -0
  180. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/coordinates.py +0 -0
  181. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/components/wrappers.py +0 -0
  182. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/__init__.py +0 -0
  183. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/core/model.py +0 -0
  184. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/__init__.py +0 -0
  185. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/docs/doc_generator.py +0 -0
  186. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/docs/utils.py +0 -0
  187. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/exceptions.py +0 -0
  188. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/json_writer.py +0 -0
  189. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema/utils/schema_version_bump.py +0 -0
  190. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema.egg-info/dependency_links.txt +0 -0
  191. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/src/aind_data_schema.egg-info/top_level.txt +0 -0
  192. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/__init__.py +0 -0
  193. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_acquisition_configs.py +0 -0
  194. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_aind_generic.py +0 -0
  195. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_bump_schema_versions.py +0 -0
  196. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_compatibility_check.py +0 -0
  197. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_configs.py +0 -0
  198. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_coordinates.py +0 -0
  199. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_data_description.py +0 -0
  200. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_device.py +0 -0
  201. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_examples.py +0 -0
  202. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_inst_acq_compatibility.py +0 -0
  203. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_json_writer.py +0 -0
  204. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_measurements.py +0 -0
  205. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_model.py +0 -0
  206. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_stimulus.py +0 -0
  207. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_subject.py +0 -0
  208. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_subjects.py +0 -0
  209. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/tests/test_utils_merge.py +0 -0
  210. {aind_data_schema-2.6.0 → aind_data_schema-2.8.0}/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
@@ -3,6 +3,7 @@ on:
3
3
  push:
4
4
  branches:
5
5
  - main
6
+ workflow_dispatch:
6
7
 
7
8
  jobs:
8
9
  tag_and_publish:
@@ -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"]'
@@ -60,7 +60,6 @@ jobs:
60
60
  python-version: '3.10'
61
61
  - name: Install dependencies
62
62
  run: |
63
- sudo apt install graphviz libgraphviz-dev -y
64
63
  python -m pip install -e .[dev] -e .[docs] --no-cache-dir
65
64
  - name: Commit changes
66
65
  uses: EndBug/add-and-commit@v9
@@ -146,3 +146,4 @@ examples/*.json
146
146
  *.json
147
147
  docs/base/models/*
148
148
  .github/copilot-instructions.md
149
+ uv.lock
@@ -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
- **Note**: The core files (`docs/source/acquisition.md`, etc) are auto-generated from the base files in the folder `docs/base/core` with the model definitions appended. You must modify the **base** file or your changes will be overwritten when you run the documentation generators.
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,15 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aind-data-schema
3
- Version: 2.6.0
3
+ Version: 2.8.0
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
7
7
  Requires-Python: >=3.10
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
10
- Requires-Dist: aind-data-schema-models<6,>=5.4.1
10
+ Requires-Dist: aind-data-schema-models<6,>=5.7.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.acquisition_end_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.
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: `"BCI: Single neuron stim"` and `"BCI: 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.
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
- ```{python}
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.acquisition_end_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.
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: `"BCI: Single neuron stim"` and `"BCI: 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.
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` | `Optional[str]` | Specimen ID (Specimen ID is required for in vitro imaging modalities) |
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
- | `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
87
86
  | `ethics_review_id` | `Optional[List[str]]` | Ethics review ID |
88
- | `instrument_id` | `str` | Instrument ID (Should match the Instrument.instrument_id) |
87
+ | `instrument_id` | `Optional[str]` | Instrument ID (Should match the Instrument.instrument_id. Required when instrument metadata is available.) |
89
88
  | `acquisition_type` | `str` | Acquisition type (Descriptive string detailing the type of acquisition, should be consistent across similar acquisitions for the same experiment.) |
90
89
  | `notes` | `Optional[str]` | Notes |
91
90
  | `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
91
  | `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
92
  | `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.) |
93
+ | `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
94
  | `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
95
  | `manipulations` | List[[Manipulation](acquisition.md#manipulation)] | Manipulations (Procedures performed during the acquisition.) |
97
- | `subject_details` | Optional[[AcquisitionSubjectDetails](acquisition.md#acquisitionsubjectdetails)] | Subject details |
96
+ | `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) |
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.
@@ -139,9 +151,10 @@ Description of procedures performed during an acquisition.
139
151
  |-------|------|-------------|
140
152
  | `start_time` | `datetime (timezone-aware)` | Manipulation start time (Must be between the acquisition start and end times) |
141
153
  | `end_time` | `datetime (timezone-aware)` | Manipulation end time (Must be between the acquisition start and end times) |
142
- | `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) |
143
155
  | `anaesthesia` | Optional[[Anaesthetic](components/surgery_procedures.md#anaesthetic)] | Anaesthesia |
144
156
  | `notes` | `Optional[str]` | Notes |
157
+ | `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
145
158
 
146
159
 
147
160
  ### PerformanceMetrics
@@ -10,18 +10,22 @@ 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` |
21
+ | `DELUXDRIVER` | `deLuxDriver` | `1410` |
19
22
  | `DRIVER12VOLTS` | `Driver12Volts` | `1072` |
20
23
  | `ENVIRONMENTSENSOR` | `EnvironmentSensor` | `1405` |
21
24
  | `FLYPAD` | `FlyPad` | `1200` |
22
25
  | `HOBGOBLIN` | `Hobgoblin` | `123` |
23
26
  | `IBL_BEHAVIOR_CONTROL` | `Ibl_behavior_control` | `2080` |
24
27
  | `INPUTEXPANDER` | `InputExpander` | `1106` |
28
+ | `LASERDRIVERCONTROLLER` | `LaserDriverController` | `1298` |
25
29
  | `LEDCONTROLLER` | `LedController` | `1088` |
26
30
  | `LICKETYSPLIT` | `LicketySplit` | `1400` |
27
31
  | `LOADCELLS` | `LoadCells` | `1232` |
@@ -33,7 +37,7 @@ Harp device types
33
37
  | `POKE` | `Poke` | `1024` |
34
38
  | `PYCONTROLADAPTER` | `PyControlAdapter` | `1184` |
35
39
  | `RFIDREADER` | `RfidReader` | `2094` |
36
- | `RGBARRAY` | `RgbArray` | `1248` |
40
+ | `RGBARRAY` | `RgbArray` | `1264` |
37
41
  | `SIMPLEANALOGGENERATOR` | `SimpleAnalogGenerator` | `1121` |
38
42
  | `SNIFFDETECTOR` | `SniffDetector` | `1401` |
39
43
  | `SOUNDCARD` | `SoundCard` | `1280` |
@@ -22,6 +22,7 @@ Organization
22
22
  | `ASUS` | `None` | `ASUS` | `Research Organization Registry (ROR)` | `00bxkz165` |
23
23
  | `BASLER` | `None` | `Basler` | `None` | `None` |
24
24
  | `BCM` | `BCM` | `Baylor College of Medicine` | `Research Organization Registry (ROR)` | `02pttbw34` |
25
+ | `BROADCOM` | `None` | `Broadcom` | `Research Organization Registry (ROR)` | `035gt5s03` |
25
26
  | `BRUKER` | `None` | `Bruker` | `Research Organization Registry (ROR)` | `04r739x86` |
26
27
  | `BU` | `BU` | `Boston University` | `Research Organization Registry (ROR)` | `05qwgg493` |
27
28
  | `CAJAL` | `Cajal` | `Cajal Neuroscience` | `Research Organization Registry (ROR)` | `05pdc0q70` |
@@ -47,6 +48,7 @@ Organization
47
48
  | `EDMUND_OPTICS` | `None` | `Edmund Optics` | `Research Organization Registry (ROR)` | `01j1gwp17` |
48
49
  | `EMORY` | `Emory` | `Emory University` | `Research Organization Registry (ROR)` | `03czfpz43` |
49
50
  | `EURESYS` | `None` | `Euresys` | `None` | `None` |
51
+ | `EXCELITAS_TECHNOLOGIES` | `None` | `Excelitas Technologies` | `Research Organization Registry (ROR)` | `01tpbbf75` |
50
52
  | `FILTER_MANUFACTURERS` | `N/A` | `N/A` | `N/A` | `N/A` |
51
53
  | `FLIR` | `FLIR` | `Teledyne FLIR` | `Research Organization Registry (ROR)` | `01j1gwp17` |
52
54
  | `FUJINON` | `None` | `Fujinon` | `None` | `None` |
@@ -66,6 +68,7 @@ Organization
66
68
  | `JENOPTIK` | `None` | `Jenoptik` | `Research Organization Registry (ROR)` | `05g7t5c49` |
67
69
  | `JHU` | `JHU` | `Johns Hopkins University` | `Research Organization Registry (ROR)` | `00za53h95` |
68
70
  | `JULABO` | `None` | `Julabo` | `None` | `None` |
71
+ | `KENT_SCIENTIFIC_CORPORATION` | `None` | `Kent Scientific Corporation` | `Research Organization Registry (ROR)` | `03xkj6a08` |
69
72
  | `KOWA` | `None` | `Kowa` | `Research Organization Registry (ROR)` | `03zbwg482` |
70
73
  | `LASER_MANUFACTURERS` | `N/A` | `N/A` | `N/A` | `N/A` |
71
74
  | `LASOS` | `LASOS` | `LASOS Lasertechnik` | `None` | `None` |
@@ -86,6 +89,7 @@ Organization
86
89
  | `MIT_BCS` | `MIT-BCS` | `MIT Department of Brain and Cognitive Sciences` | `None` | `None` |
87
90
  | `MJFF` | `MJFF` | `Michael J. Fox Foundation for Parkinson's Research` | `Research Organization Registry (ROR)` | `03arq3225` |
88
91
  | `MKS_NEWPORT` | `None` | `MKS Newport` | `Research Organization Registry (ROR)` | `00k17f049` |
92
+ | `MOLECULAR_INSTRUMENTS` | `None` | `Molecular Instruments` | `None` | `None` |
89
93
  | `MONITOR_MANUFACTURERS` | `N/A` | `N/A` | `N/A` | `N/A` |
90
94
  | `MPI` | `MPI` | `MPI` | `None` | `None` |
91
95
  | `NATIONAL_INSTRUMENTS` | `None` | `National Instruments` | `Research Organization Registry (ROR)` | `026exqw73` |
@@ -103,6 +107,7 @@ Organization
103
107
  | `OLYMPUS` | `None` | `Olympus` | `Research Organization Registry (ROR)` | `02vcdte90` |
104
108
  | `OPTOTUNE` | `None` | `Optotune` | `None` | `None` |
105
109
  | `OTHER` | `None` | `Other` | `None` | `None` |
110
+ | `OXFORD_INSTRUMENTS` | `None` | `Oxford Instruments` | `Research Organization Registry (ROR)` | `01age2z78` |
106
111
  | `OXXIUS` | `None` | `Oxxius` | `None` | `None` |
107
112
  | `PLACID_INDUSTRIES` | `None` | `Placid Industries` | `None` | `None` |
108
113
  | `PRIZMATIX` | `None` | `Prizmatix` | `None` | `None` |
@@ -111,6 +116,7 @@ Organization
111
116
  | `RESEARCH_INSTITUTIONS` | `N/A` | `N/A` | `N/A` | `N/A` |
112
117
  | `SAME_SKY` | `None` | `Same Sky` | `None` | `None` |
113
118
  | `SCHNEIDER_KREUZNACH` | `None` | `Schneider-Kreuznach` | `None` | `None` |
119
+ | `SCIENTIFICA` | `None` | `Scientifica` | `Research Organization Registry (ROR)` | `00z72df47` |
114
120
  | `SECOND_ORDER_EFFECTS` | `None` | `Second Order Effects` | `None` | `None` |
115
121
  | `SEMROCK` | `None` | `Semrock` | `None` | `None` |
116
122
  | `SICGEN` | `None` | `SICGEN` | `None` | `None` |
@@ -136,5 +142,6 @@ Organization
136
142
  | `UPENN` | `UPENN` | `University of Pennsylvania` | `Research Organization Registry (ROR)` | `00b30xv10` |
137
143
  | `VIEWORKS` | `None` | `Vieworks` | `None` | `None` |
138
144
  | `VORTRAN` | `None` | `Vortran` | `None` | `None` |
145
+ | `WPI` | `WPI` | `World Precision Intstruments` | `Research Organization Registry (ROR)` | `03st5df34` |
139
146
 
140
147
 
@@ -17,6 +17,7 @@ Process names
17
17
  | `EPHYS_VISUALIZATION` | `Ephys visualization` |
18
18
  | `FIDUCIAL_SEGMENTATION` | `Fiducial segmentation` |
19
19
  | `FILE_FORMAT_CONVERSION` | `File format conversion` |
20
+ | `FIX_COLOR_RANGE` | `Fix color range` |
20
21
  | `FLUORESCENCE_EVENT_DETECTION` | `Fluorescence event detection` |
21
22
  | `IMAGE_ATLAS_ALIGNMENT` | `Image atlas alignment` |
22
23
  | `IMAGE_BACKGROUND_SUBTRACTION` | `Image background subtraction` |
@@ -28,6 +29,7 @@ Process names
28
29
  | `IMAGE_FLAT_FIELD_CORRECTION` | `Image flat-field correction` |
29
30
  | `IMAGE_IMPORTING` | `Image importing` |
30
31
  | `IMAGE_MIP_VISUALIZATION` | `Image mip visualization` |
32
+ | `IMAGE_MULTISCALING` | `Image multiscaling` |
31
33
  | `IMAGE_RADIAL_CORRECTION` | `Image radial correction` |
32
34
  | `IMAGE_SPOT_DETECTION` | `Image spot detection` |
33
35
  | `IMAGE_SPOT_SPECTRAL_UNMIXING` | `Image spot spectral unmixing` |
@@ -35,6 +37,7 @@ Process names
35
37
  | `IMAGE_TILE_ALIGNMENT` | `Image tile alignment` |
36
38
  | `IMAGE_TILE_FUSING` | `Image tile fusing` |
37
39
  | `IMAGE_TILE_PROJECTION` | `Image tile projection` |
40
+ | `MANUAL_CURATION` | `Manual curation` |
38
41
  | `MODEL_EVALUATION` | `Model evaluation` |
39
42
  | `MODEL_TRAINING` | `Model training` |
40
43
  | `NEURON_SKELETON_PROCESSING` | `Neuron skeleton processing` |
@@ -25,6 +25,5 @@ Specimen procedures
25
25
  | `SOAK` | `Soak` |
26
26
  | `STORAGE` | `Storage` |
27
27
  | `STRIPPING` | `Stripping` |
28
- | `TAMOXIFEN_INDUCTION` | `Tamoxifen induction` |
29
28
 
30
29
 
@@ -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 |
@@ -57,7 +57,7 @@ Camera Detector
57
57
  | Field | Type | Title (Description) |
58
58
  |-------|------|-------------|
59
59
  | `detector_type` | [DetectorType](../aind_data_schema_models/devices.md#detectortype) | |
60
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
60
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
61
61
  | `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | Data interface |
62
62
  | `cooling` | [Cooling](../aind_data_schema_models/devices.md#cooling) | Cooling |
63
63
  | `frame_rate` | `Optional[decimal.Decimal]` | Frame rate (Hz) (Frame rate being used) |
@@ -192,7 +192,7 @@ Data acquisition device containing multiple I/O channels
192
192
  | Field | Type | Title (Description) |
193
193
  |-------|------|-------------|
194
194
  | `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | Type of connection to PC |
195
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
195
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
196
196
  | `channels` | List[[DAQChannel](#daqchannel)] | DAQ channels |
197
197
  | `firmware_version` | `Optional[str]` | Firmware version |
198
198
  | `hardware_version` | `Optional[str]` | Hardware version |
@@ -210,7 +210,7 @@ Description of a generic detector
210
210
  | Field | Type | Title (Description) |
211
211
  |-------|------|-------------|
212
212
  | `detector_type` | [DetectorType](../aind_data_schema_models/devices.md#detectortype) | Detector Type |
213
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
213
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
214
214
  | `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | Data interface |
215
215
  | `cooling` | [Cooling](../aind_data_schema_models/devices.md#cooling) | Cooling |
216
216
  | `frame_rate` | `Optional[decimal.Decimal]` | Frame rate (Hz) (Frame rate being used) |
@@ -417,7 +417,7 @@ Filter used in a light path
417
417
  | Field | Type | Title (Description) |
418
418
  |-------|------|-------------|
419
419
  | `filter_type` | [FilterType](../aind_data_schema_models/devices.md#filtertype) | Type of filter |
420
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
420
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
421
421
  | `cut_off_wavelength` | `Optional[int]` | Cut-off wavelength (nm) |
422
422
  | `cut_on_wavelength` | `Optional[int]` | Cut-on wavelength (nm) |
423
423
  | `center_wavelength` | `int or List[int] or NoneType` | Center wavelength (nm) (Single wavelength or list of wavelengths for MULTIBAND or MULTI_NOTCH filters) |
@@ -435,7 +435,7 @@ DAQ that uses the Harp protocol for synchronization and data transmission
435
435
 
436
436
  | Field | Type | Title (Description) |
437
437
  |-------|------|-------------|
438
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
438
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
439
439
  | `harp_device_type` | [HarpDeviceType](../aind_data_schema_models/harp_types.md#harpdevicetype) | Type of Harp device |
440
440
  | `core_version` | `Optional[str]` | Core version |
441
441
  | `tag_version` | `Optional[str]` | Tag version |
@@ -476,7 +476,7 @@ Laser module with a specific wavelength (may be a sub-component of a larger asse
476
476
 
477
477
  | Field | Type | Title (Description) |
478
478
  |-------|------|-------------|
479
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
479
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
480
480
  | `wavelength` | `int` | Wavelength (nm) |
481
481
  | `wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Wavelength unit |
482
482
  | `coupling` | Optional[[Coupling](../aind_data_schema_models/devices.md#coupling)] | Coupling |
@@ -508,7 +508,7 @@ Lens
508
508
 
509
509
  | Field | Type | Title (Description) |
510
510
  |-------|------|-------------|
511
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
511
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
512
512
  | `name` | `str` | Device name |
513
513
  | `serial_number` | `Optional[str]` | Serial number |
514
514
  | `model` | `Optional[str]` | Model |
@@ -564,7 +564,7 @@ Description of a Light Emitting Diode (LED) device
564
564
 
565
565
  | Field | Type | Title (Description) |
566
566
  |-------|------|-------------|
567
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
567
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
568
568
  | `wavelength` | `int` | Wavelength (nm) |
569
569
  | `wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Wavelength unit |
570
570
  | `bandwidth` | `Optional[int]` | Bandwidth (FWHM) |
@@ -582,7 +582,7 @@ Manipulator used on a dome module
582
582
 
583
583
  | Field | Type | Title (Description) |
584
584
  |-------|------|-------------|
585
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
585
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
586
586
  | `name` | `str` | Device name |
587
587
  | `serial_number` | `Optional[str]` | Serial number |
588
588
  | `model` | `Optional[str]` | Model |
@@ -610,7 +610,7 @@ Description of visual display for visual stimuli
610
610
 
611
611
  | Field | Type | Title (Description) |
612
612
  |-------|------|-------------|
613
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
613
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
614
614
  | `refresh_rate` | `int` | Refresh rate (Hz) |
615
615
  | `width` | `int` | Width (pixels) |
616
616
  | `height` | `int` | Height (pixels) |
@@ -732,7 +732,7 @@ Description of an olfactometer for odor stimuli
732
732
 
733
733
  | Field | Type | Title (Description) |
734
734
  |-------|------|-------------|
735
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
735
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
736
736
  | `harp_device_type` | [HarpDeviceType](../aind_data_schema_models/harp_types.md#harpdevicetype) | Type of Harp device |
737
737
  | `channels` | List[[OlfactometerChannel](#olfactometerchannel)] | |
738
738
  | `core_version` | `Optional[str]` | Core version |
@@ -888,7 +888,7 @@ Description of a speaker for auditory stimuli
888
888
 
889
889
  | Field | Type | Title (Description) |
890
890
  |-------|------|-------------|
891
- | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | |
891
+ | `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer |
892
892
  | `name` | `str` | Device name |
893
893
  | `serial_number` | `Optional[str]` | Serial number |
894
894
  | `model` | `Optional[str]` | Model |
@@ -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) |
@@ -49,7 +50,8 @@ Description of a single data asset
49
50
 
50
51
  | Field | Type | Title (Description) |
51
52
  |-------|------|-------------|
52
- | `url` | `str` | Asset location (URL pointing to the data asset) |
53
+ | `name` | `Optional[str]` | Asset name (Name of the data asset) |
54
+ | `url` | `Optional[str]` | Asset location (URL pointing to the data asset) |
53
55
 
54
56
 
55
57
  ### Database
@@ -10,7 +10,6 @@ Generic calibration class
10
10
  |-------|------|-------------|
11
11
  | `calibration_date` | `datetime (timezone-aware)` | Date and time of calibration |
12
12
  | `description` | `str` | Description (Brief description of what is being calibrated) |
13
- | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
14
13
  | `measured_at` | `Optional[str]` | Measurement location |
15
14
  | `input` | `List[float or str]` | Inputs (Calibration input) |
16
15
  | `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
19
18
  | `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 |
20
19
  | `fit` | Optional[[CalibrationFit](#calibrationfit)] | Fit (Fit equation for the calibration data used during data acquisition) |
21
20
  | `notes` | `Optional[str]` | Notes |
21
+ | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
22
22
  | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) |
23
23
 
24
24
 
@@ -51,9 +51,9 @@ Generic maintenance class
51
51
  |-------|------|-------------|
52
52
  | `maintenance_date` | `datetime (timezone-aware)` | Date and time of maintenance |
53
53
  | `description` | `str` | Description (Description on maintenance procedure) |
54
- | `protocol_id` | `Optional[str]` | Protocol ID |
55
54
  | `reagents` | Optional[List[[Reagent](reagent.md#reagent)]] | Reagents |
56
55
  | `notes` | `Optional[str]` | Notes |
56
+ | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
57
57
  | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) |
58
58
 
59
59
 
@@ -69,11 +69,11 @@ Calibration of a device that outputs power based on input strength
69
69
  | `output_unit` | [PowerUnit](../aind_data_schema_models/units.md#powerunit) | Output unit |
70
70
  | `description` | `"Power measured for various power or percentage input strengths"` | |
71
71
  | `calibration_date` | `datetime (timezone-aware)` | Date and time of calibration |
72
- | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
73
72
  | `measured_at` | `Optional[str]` | Measurement location |
74
73
  | `repeats` | `Optional[int]` | Number of repeats (If each input was repeated multiple times, provide the number of repeats) |
75
74
  | `fit` | Optional[[CalibrationFit](#calibrationfit)] | Fit (Fit equation for the calibration data used during data acquisition) |
76
75
  | `notes` | `Optional[str]` | Notes |
76
+ | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
77
77
  | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) |
78
78
 
79
79
 
@@ -90,10 +90,10 @@ Calibration of a liquid delivery device based on solenoid/valve opening times
90
90
  | `output_unit` | [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) | Output unit |
91
91
  | `description` | `"Volume measured for various solenoid opening times"` | |
92
92
  | `calibration_date` | `datetime (timezone-aware)` | Date and time of calibration |
93
- | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
94
93
  | `measured_at` | `Optional[str]` | Measurement location |
95
94
  | `fit` | Optional[[CalibrationFit](#calibrationfit)] | Fit (Fit equation for the calibration data used during data acquisition) |
96
95
  | `notes` | `Optional[str]` | Notes |
96
+ | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) |
97
97
  | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) |
98
98
 
99
99
 
@@ -115,3 +115,13 @@ Description of a small molecule probe
115
115
  | `mass_unit` | [MassUnit](../aind_data_schema_models/units.md#massunit) | Mass unit |
116
116
 
117
117
 
118
+ ### Solution
119
+
120
+ Description of a solution made in house. Should match a solution named in protocol.
121
+
122
+ | Field | Type | Title (Description) |
123
+ |-------|------|-------------|
124
+ | `name` | `str` | Name |
125
+ | `lot_number` | `Optional[str]` | Lot number |
126
+
127
+
@@ -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 |
@@ -106,9 +106,9 @@ Description of surgical or other procedure performed on a specimen
106
106
  | `start_date` | `datetime.date` | Start date |
107
107
  | `end_date` | `datetime.date` | End date |
108
108
  | `experimenters` | `List[str]` | experimenter(s) |
109
- | `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
110
109
  | `protocol_parameters` | `Optional[Dict[str, str]]` | Protocol parameters (Parameters defined in the protocol and their value during this procedure) |
111
- | `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)] | Procedure details (Details of the procedures, including reagents and sectioning information.) |
110
+ | `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.) |
112
111
  | `notes` | `Optional[str]` | Notes |
112
+ | `protocol_id` | `Optional[List[str]]` | Protocol ID (DOI for protocols.io) |
113
113
 
114
114