bids-standard / bids-specification

Brain Imaging Data Structure (BIDS) Specification
https://bids-specification.readthedocs.io/
Creative Commons Attribution 4.0 International
264 stars 154 forks source link

AcquisitionDuration definition does not match usage or paired DICOM definition, constraints are invalid #1855

Open effigies opened 3 weeks ago

effigies commented 3 weeks ago

Grepping for AcquisitionDuration on OpenNeuro we see:

❯ for DS in ds00*; do grep AcquisitionDuration $DS/**/*bold.json; done 2>/dev/null |  awk -F/ '{ if ($1 != prev) { print; prev = $1 }}' 
ds000113/sub-01/ses-localizer/func/sub-01_ses-localizer_task-movielocalizer_run-1_bold.json:            "AcquisitionDuration": 109.91799926757812, 
ds000201/derivatives/mriqc/derivatives/sub-9001_ses-1_task-hands_bold.json:    "AcquisitionDuration": 723.000256,
ds001107/eyetracking while movie watching, plus visual localizers/sub-01/ses-localizer/func/sub-01_ses-localizer_task-movielocalizer_run-1_bold.json:            "AcquisitionDuration": 109.91799926757812, 
ds002813/task-fintest_bold.json:    "AcquisitionDuration": [],
ds003764/sub-01/ses-01/func/sub-01_ses-01_task-categorization_run-01_bold.json: "AcquisitionDuration": 362.5
ds004693/sub-01/func/sub-01_task-localizer_run-001_bold.json:  "AcquisitionDuration": 450.905,
ds004718/derivatives/sub-HK044/func/sub-HK044_task-lppHK_run-1_bold.json:    "AcquisitionDuration": 370.882,

That's only seven datasets, but that indicates to me that dcm2niix has been generating AcquisitionDuration metadata for years, and in no cases is it used in the sense that it's defined in BIDS for BOLD data:

Duration (in seconds) of volume acquisition. Corresponds to DICOM Tag 0018, 9073 Acquisition Duration. This field is mutually exclusive with "RepetitionTime".

Must be a number greater than 0.

The goal of AcquisitionDuration was to have a way to encode triggered fMRI, where the TR is non-constant but the TA (time from start to end of volume acquisition) is constant. Instead, it is used as an measure of the time the entire BOLD series took to collect, which matches the DICOM tag (0018,9073) "The time in seconds needed to run the prescribed pulse sequence. [...]".

The intent was something more along the lines of "Frame Acquisition Duration" (0018,9220) "The actual amount of time [in milliseconds] that was used to acquire data for this frame." I'm not sure if we ever actually see that.

Given that the field is not used in this way, I would suggest that we move it to a generic MRI field so that at least cross-referencing a dataset with BIDS will not be wrong.

Then it would be nice to have some way of capturing TA if SliceTiming is undefined. Perhaps VolumeAcquisitionDuration? And if we can find example data where (0018, 9220) is actually used for that case, we could even ask dcm2niix to populate the field.