Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
3e86325
Add ndtypes from ndx-pose, ndx-photometry, ndx-fiber-photometry
rly Jul 23, 2025
da8c29b
Merge branch 'master' into add_ndtypes
CodyCBakerPhD Aug 14, 2025
3d7baea
Update dandi/metadata/util.py
CodyCBakerPhD Aug 26, 2025
00a60ad
Merge branch 'master' into add_ndtypes
CodyCBakerPhD Aug 26, 2025
1b99658
Update dandi/metadata/util.py
rly Aug 27, 2025
d360e2d
Update dandi/metadata/util.py
rly Aug 27, 2025
5e48759
Update dandi/metadata/util.py
rly Aug 27, 2025
21b1d99
Update dandi/metadata/util.py
rly Aug 27, 2025
20394ff
Update metadata for various neurodata types
rly Aug 27, 2025
6ad64c1
Update test_metadata.py
rly Aug 27, 2025
0648a40
Fix whitespace lint error
rly Aug 27, 2025
7dddd60
Update technique description for PoseTraining
rly Aug 27, 2025
7fcddb8
Update test_metadata.py
rly Aug 27, 2025
c268842
Update test_metadata.py
rly Aug 28, 2025
9571b6b
Merge branch 'master' into add_ndtypes
rly Aug 28, 2025
bfc4553
Merge branch 'master' into add_ndtypes
yarikoptic Sep 16, 2025
60c21ab
Merge branch 'master' into add_ndtypes
rly Sep 17, 2025
f8490a9
Change Units module from 'misc' to 'sortedunits'
rly Sep 17, 2025
4269177
Add draft more complete neurodata type map
rly Sep 17, 2025
c25e3d2
Apply my first edits to neurodata_typemap.py
rly Sep 17, 2025
a6d1cb2
Apply edits from review
rly Sep 17, 2025
b784ba3
Sort neurodata_typemap.py
rly Sep 17, 2025
dee23b9
Merge branch 'master' into add_ndtypes
bendichter Aug 27, 2026
88adc13
Use clean fiber photometry terms; add photometry table and device types
bendichter Aug 27, 2026
0e5c21c
Merge branch 'master' into add_ndtypes
rly Sep 2, 2026
a6b868f
Merge pull request #1 from bendichter/add-ndtypes-fixes
rly Sep 2, 2026
9427a7e
Restrict photometry types to names unique to the photometry extensions
rly Sep 2, 2026
bfbe6eb
Assign techniques to implant and commanded voltage types
rly Sep 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 103 additions & 4 deletions dandi/metadata/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -963,18 +963,117 @@ class Neurodatum(TypedDict):
"technique": "fourier analysis technique",
"approach": None,
},
"OptogeneticStimulusSIte": {
"OptogeneticStimulusSite": {
"module": "ogen",
"neurodata_type": "OptogeneticStimulusSIte",
"technique": None,
"neurodata_type": "OptogeneticStimulusSite",
"technique": "surgical technique",
"approach": "optogenetic approach",
},
"OptogeneticSeries": {
"module": "ogen",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are iterating on a better structure for standardizing optogenetic implant/site details, including all those mentioned by @TheChymera in https://github.com/rly/ndx-optogenetics

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's great. Attn @CodyCBakerPhD , ideally we should follow up on that issue in bids-standard and align to the efforts in ndx-optogenetics, so we have metadata appropriately exposed at BIDS level too.

"neurodata_type": "OptogeneticSeries",
"technique": None,
"technique": "optogenetic stimulation technique",
"approach": "optogenetic approach",
},
"PoseEstimationSeries": {
"module": "motion",
"neurodata_type": "PoseEstimationSeries",
"technique": "pose estimation technique",
"approach": "behavioral approach",
},
"PoseEstimation": {
"module": "motion",
"neurodata_type": "PoseEstimation",
"technique": "pose estimation technique",
"approach": "behavioral approach",
},
"PoseTraining": {
"module": "motion",
"neurodata_type": "PoseTraining",
"technique": "pose estimation training technique",
"approach": "behavioral approach",
},
# defined by both the deprecated ndx-photometry and ndx-fiber-photometry
"FiberPhotometryResponseSeries": {
"module": "fiberphotometry",
"neurodata_type": "FiberPhotometryResponseSeries",
"technique": "fiber photometry technique",
"approach": "fiber photometry approach",
},
"FiberPhotometry": {
"module": "fiberphotometry",
"neurodata_type": "FiberPhotometry",
"technique": None,
"approach": "fiber photometry approach",
},
"CommandedVoltageSeries": {
"module": "fiberphotometry",
"neurodata_type": "CommandedVoltageSeries",
"technique": "fiber photometry technique",
"approach": "fiber photometry approach",
},
# defined by the deprecated ndx-photometry
"FibersTable": {
"module": "fiberphotometry",
"neurodata_type": "FibersTable",
"technique": "surgical technique",
"approach": "fiber photometry approach",
},
"ExcitationSourcesTable": {
"module": "fiberphotometry",
"neurodata_type": "ExcitationSourcesTable",
"technique": None,
"approach": "fiber photometry approach",
},
"PhotodetectorsTable": {
"module": "fiberphotometry",
"neurodata_type": "PhotodetectorsTable",
"technique": None,
"approach": "fiber photometry approach",
},
"FluorophoresTable": {
"module": "fiberphotometry",
"neurodata_type": "FluorophoresTable",
"technique": None,
"approach": "fiber photometry approach",
},
"DeconvolvedFiberPhotometryResponseSeries": {
"module": "fiberphotometry",
"neurodata_type": "DeconvolvedFiberPhotometryResponseSeries",
"technique": "fiber photometry technique",
"approach": "fiber photometry approach",
},
"MultiCommandedVoltage": {
"module": "fiberphotometry",
"neurodata_type": "MultiCommandedVoltage",
"technique": "fiber photometry technique",
"approach": "fiber photometry approach",
},
# defined by ndx-fiber-photometry
"FiberPhotometryTable": {
"module": "fiberphotometry",
"neurodata_type": "FiberPhotometryTable",
"technique": "surgical technique",
"approach": "fiber photometry approach",
},
"FiberPhotometryIndicators": {
"module": "fiberphotometry",
"neurodata_type": "FiberPhotometryIndicators",
"technique": None,
"approach": "fiber photometry approach",
},
"FiberPhotometryViruses": {
"module": "fiberphotometry",
"neurodata_type": "FiberPhotometryViruses",
"technique": None,
"approach": "fiber photometry approach",
},
"FiberPhotometryVirusInjections": {
"module": "fiberphotometry",
"neurodata_type": "FiberPhotometryVirusInjections",
"technique": None,
"approach": "fiber photometry approach",
},
}


Expand Down
50 changes: 46 additions & 4 deletions dandi/tests/test_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -1215,21 +1215,63 @@ def test_species_record_matching_methods() -> None:
},
),
(
["OptogeneticStimulusSIte"],
["OptogeneticStimulusSite"],
{
"approach": ["optogenetic approach"],
"measurementTechnique": None,
"variableMeasured": ["OptogeneticStimulusSIte"],
"measurementTechnique": ["surgical technique"],
"variableMeasured": ["OptogeneticStimulusSite"],
},
),
(
["OptogeneticSeries"],
{
"approach": ["optogenetic approach"],
"measurementTechnique": None,
"measurementTechnique": ["optogenetic stimulation technique"],
"variableMeasured": ["OptogeneticSeries"],
},
),
(
["PoseEstimationSeries"],
{
"approach": ["behavioral approach"],
"measurementTechnique": ["pose estimation technique"],
"variableMeasured": ["PoseEstimationSeries"],
},
),
(
["PoseEstimation"],
{
"approach": ["behavioral approach"],
"measurementTechnique": ["pose estimation technique"],
"variableMeasured": ["PoseEstimation"],
},
),
(
["PoseTraining"],
{
"approach": ["behavioral approach"],
"measurementTechnique": ["pose estimation training technique"],
"variableMeasured": ["PoseTraining"],
},
),
(
["FiberPhotometryResponseSeries"],
{
"approach": ["fiber photometry approach"],
"measurementTechnique": ["fiber photometry technique"],
"variableMeasured": ["FiberPhotometryResponseSeries"],
},
),
pytest.param(
# ndx-photometry metadata tables alone should mark the asset
["FibersTable"],
{
"approach": ["fiber photometry approach"],
"measurementTechnique": ["surgical technique"],
"variableMeasured": ["FibersTable"],
},
marks=pytest.mark.ai_generated,
),
(
# the tricky case of having number of instances of the data type
# https://github.com/dandi/dandi-cli/issues/890
Expand Down
Loading