diff --git a/src/modality-specific-files/magnetic-resonance-imaging-data.md b/src/modality-specific-files/magnetic-resonance-imaging-data.md index 2b2078fe04..c667c8346f 100644 --- a/src/modality-specific-files/magnetic-resonance-imaging-data.md +++ b/src/modality-specific-files/magnetic-resonance-imaging-data.md @@ -600,13 +600,13 @@ to be populated for functional sequences. Note that all these options can be used for non sparse sequences but that only options B, D and E are valid for sparse sequences. -| | **`RepetitionTime`** | **`SliceTiming`** | **`AcquisitionDuration`** | **`DelayTime`** | **`VolumeTiming`** | -| -------- | -------------------- | ----------------- | ------------------------- | --------------- | ------------------ | -| option A | \[ X ] | | \[ ] | | \[ ] | -| option B | \[ ] | \[ X ] | | \[ ] | \[ X ] | -| option C | \[ ] | | \[ X ] | \[ ] | \[ X ] | -| option D | \[ X ] | \[ X ] | \[ ] | | \[ ] | -| option E | \[ X ] | | \[ ] | \[ X ] | \[ ] | +| | **`RepetitionTime`** | **`SliceTiming`** | **`FrameAcquisitionDuration`** | **`DelayTime`** | **`VolumeTiming`** | +| -------- | -------------------- | ----------------- | ------------------------------ | --------------- | ------------------ | +| option A | \[ X ] | | \[ ] | | \[ ] | +| option B | \[ ] | \[ X ] | | \[ ] | \[ X ] | +| option C | \[ ] | | \[ X ] | \[ ] | \[ X ] | +| option D | \[ X ] | \[ X ] | \[ ] | | \[ ] | +| option E | \[ X ] | | \[ ] | \[ X ] | \[ ] | **Legend** diff --git a/src/schema/objects/metadata.yaml b/src/schema/objects/metadata.yaml index f97f629589..4adc24ab74 100644 --- a/src/schema/objects/metadata.yaml +++ b/src/schema/objects/metadata.yaml @@ -20,9 +20,8 @@ AcquisitionDuration: name: AcquisitionDuration display_name: Acquisition Duration description: | - Duration (in seconds) of volume acquisition. + Duration (in seconds) of scan acquisition, including all volumes for multi-volume scans. Corresponds to DICOM Tag 0018, 9073 `Acquisition Duration`. - This field is mutually exclusive with `"RepetitionTime"`. type: number exclusiveMinimum: 0 unit: s @@ -1198,6 +1197,15 @@ FlipAngle: unit: degree exclusiveMinimum: 0 maximum: 360 +FrameAcquisitionDuration: + name: AcquisitionDuration + display_name: Acquisition Duration + description: | + Duration (in seconds) of volume acquisition. + Corresponds to DICOM Tag 0018, 9220 `Frame Acquisition Duration`. + type: number + exclusiveMinimum: 0 + unit: s FrameDuration: name: FrameDuration display_name: Frame Duration diff --git a/src/schema/rules/checks/func.yaml b/src/schema/rules/checks/func.yaml index 7966a6bf3a..3f7f526a35 100644 --- a/src/schema/rules/checks/func.yaml +++ b/src/schema/rules/checks/func.yaml @@ -94,18 +94,18 @@ VolumeTimingRepetitionTimeMutex: checks: - type(sidecar.RepetitionTime) == "null" -RepetitionTimeAcquisitionDurationMutex: +RepetitionTimeFrameAcquisitionDurationMutex: issue: code: REPETITION_TIME_AND_ACQUISITION_DURATION_MUTUALLY_EXCLUSIVE message: | - The fields 'RepetitionTime' and 'AcquisitionDuration' for this file are mutually exclusive. + The fields 'RepetitionTime' and 'FrameAcquisitionDuration' for this file are mutually exclusive. To specify acquisition duration, use 'SliceTiming' or 'DelayTime' - (RepetitionTime - AcquisitionDuration). + (RepetitionTime - FrameAcquisitionDuration). level: error selectors: - type(nifti_header) != "null" - intersects([suffix], ["asl", "bold"]) - - type(sidecar.AcquisitionDuration) != "null" + - type(sidecar.FrameAcquisitionDuration) != "null" checks: - type(sidecar.RepetitionTime) == "null" @@ -114,7 +114,7 @@ VolumeTimingDelayTimeMutex: code: VOLUME_TIMING_AND_DELAY_TIME_MUTUALLY_EXCLUSIVE message: | The fields 'VolumeTiming' and 'DelayTime' for this file are mutually exclusive. - To specify acquisition duration, use 'AcquisitionDuration' or 'SliceTiming'. + To specify acquisition duration, use 'FrameAcquisitionDuration' or 'SliceTiming'. level: error selectors: - type(nifti_header) != "null" @@ -123,15 +123,15 @@ VolumeTimingDelayTimeMutex: checks: - type(sidecar.DelayTime) == "null" -VolumeTimingMissingAcquisitionDuration: +VolumeTimingMissingFrameAcquisitionDuration: issue: code: VOLUME_TIMING_MISSING_ACQUISITION_DURATION message: | - The field 'VolumeTiming' requires 'AcquisitionDuration' or 'SliceTiming' to be defined. + The field 'VolumeTiming' requires 'FrameAcquisitionDuration' or 'SliceTiming' to be defined. level: error selectors: - type(nifti_header) != "null" - intersects([suffix], ["asl", "bold"]) - type(sidecar.VolumeTiming) != "null" checks: - - '"SliceTiming" in sidecar || "AcquisitionDuration" in sidecar' + - '"SliceTiming" in sidecar || "FrameAcquisitionDuration" in sidecar' diff --git a/src/schema/rules/sidecars/func.yaml b/src/schema/rules/sidecars/func.yaml index 67ec04e84f..5ab45ca7f8 100644 --- a/src/schema/rules/sidecars/func.yaml +++ b/src/schema/rules/sidecars/func.yaml @@ -44,7 +44,7 @@ MRIFuncVolumeTiming: description_addendum: | This field is mutually exclusive with `"DelayTime"`. If defined, this requires acquisition time (TA) be defined via either - `"SliceTiming"` or `"AcquisitionDuration"`. + `"SliceTiming"` or `"FrameAcquisitionDuration"`. # Timing Parameters MRIFuncTimingParameters: @@ -56,7 +56,7 @@ MRIFuncTimingParameters: NumberOfVolumesDiscardedByScanner: recommended NumberOfVolumesDiscardedByUser: recommended DelayTime: recommended - AcquisitionDuration: + FrameAcquisitionDuration: level: recommended level_addendum: | required for sequences that are described with the `VolumeTiming` diff --git a/src/schema/rules/sidecars/mri.yaml b/src/schema/rules/sidecars/mri.yaml index ba1d43fda2..3ad7236fa4 100644 --- a/src/schema/rules/sidecars/mri.yaml +++ b/src/schema/rules/sidecars/mri.yaml @@ -232,6 +232,7 @@ MRITimingParameters: or variable echo time fMRI sequences. InversionTime: recommended DwellTime: recommended + AcquisitionDuration: optional EchoTimeRequiredASL: selectors: