-
Notifications
You must be signed in to change notification settings - Fork 256
Description
Hi Chris - thanks for this awesome tool!
issue modified from this issue at PET2BIDS
Describe the bug
dcm2niix uses AcquisitionTime in cases where SeriesTime should be used. I believe this is a bug, or perhaps this is just unique to Siemens Scanners. In Siemens PET scanners SeriesTime describes the start time of the PET acquisition - not AcquisitionTime. AcquisitionTime describes the timepoint in the acquisition, where data was used to reconstruct the DICOM-file. So if we do a 20minute PET acquisition, but reconstruct the image based only on the last 15 minutes, then the AcqusionTime will be 5 minutes bigger than SeriesTime. Also note that DecayCorrection is performed by Siemens to SeriesTime. Often AcquisitionTime==SeriesTime, but not in the following cases:
- Dynamic acquisition: the AcquisitionTime changes for each time frame.
- Multiple bed positions: the AcquisitionTime changes for each bed frame.
- Static images reconstructed from a time-subset of a longer acquisition: For instance, a static reconstruction based on a 50-70min window of a 70minute PET acquisition. Here AcquistionTime will be 50min larger than SeriesTime.
Here is the example output for case 3 (FDG tracer injection and PET acquisition start at 16:20, and a static image is reconstructed from the 50-70min window):
{
"SeriesTime": "16:20:16.000000",
"AcquisitionTime": "17:10:15.000000",
"DecayCorrection": "START",
"DecayFactor": [
1.45951
],
"FrameTimesStart": [
0 ##Should be 3000 (50min*60)
],
"FrameDuration": [
1200
],
"TimeZero": "17:10:15", ## Should be 16:20:16
"DecayCorrectionFactor": [
1.45951
],
"ScanStart": 0,
"InjectionStart": 0
}
We can also see from the DecayCorrectionFactor, that everything is decayed back to the SeriesTime.
log2(1.45951)*110=60min (the frame reference 50min + 20min/2)
Expected behaviour
FrameTimesStart should be 3000. From what I can see, pypet2bids extracts FrameTimesStart and TimeZero from the dcm2niix sidecar if they exists. Otherwise it sets it equal to AcquisitionTime.
To Reproduce
I used pypet2bids, to perform the conversion, but this grabs the values directly from dcm2niix sidecar. I reproduced with dcm2niix as well.
Version
Chris Rorden's dcm2niiX version v1.0.20241211 (JP2:OpenJPEG) (JP-LS:CharLS) GCC8.4.0 x86-64 (64-bit Linux)