rordenlab / dcm2niix

dcm2nii DICOM to NIfTI converter: compiled versions available from NITRC
https://www.nitrc.org/plugins/mwiki/index.php/dcm2nii:MainPage
Other
879 stars 228 forks source link

GE UHP/7T Diffusion SliceTiming #796

Closed mr-jaemin closed 7 months ago

mr-jaemin commented 7 months ago

As described #635, if GE Premier/UHP/7T use diffusion gradient cycling, theSliceTiming can't be described/generated.

Diffusion gradient cycling mode (d.diffCyclingModeGE) can be determined based on UserData12 (0019,10B3) and/or UserData15 (0019,10B6).

While curent dcm2niix reliably detects the cycling mode, ABCD patch on UHP/7T uses a different value 0.53 for UserData15 (0019,10B6), compared to Premier 0.72, reporting the following warning despite of data collected with cycling off:

Warning: Unable to compute slice times for GE Diffusion:Cycling

User may use the (undocumented) program option(--diffCyclingModeGE 0) to override the cycling mode from DICOM if data is collected with cycling OFF for sure.

mr-jaemin commented 7 months ago

Thanks @psadil for reporting this issue.

mr-jaemin commented 7 months ago

On GE Premier XT, diffusion data with HCP lifespan, ABCD, ADNI3-Adv, UK BioBank protocol is collected with cycling off. With this dataset, DICOM UserData15 (0019,10B6) will be set to 0.72

On GE UHP, ABCD data(with ABCD patch) is collected with cycling off & DICOM UserData15 (0019,10B6) = 0.53

In addition, on UHP and 7T, if 0.5 < UserData15 (0019,10B6) < 1, diffusion cycling is OFF.

In short, here is the pseudo-code to generate SliceTiming on Premier/UHP/7T:

Updated code on March 14, 2024 (#804)

If (Premier) && (UserData15 = 0.72)
    diffCyclingModeGE = 0 (off)
- If (UHP or 7T) && (0.5 < UserData15 <1)
+ If (UHP or 7T) && (0.5 <= UserData15 <=1.0)
    diffCyclingModeGE = 0 (off)
mr-jaemin commented 7 months ago

The development branch (v1.0.20240222) addressed the issue.

@psadil please test your dataset.

psadil commented 7 months ago

This seems to work for my dataset. I don't have another DWI that was collected on this scanner with an older SoftwareVersion and the same TR, so I can't check for differences in the generated SliceTiming. But the development version of dcm2niix (v1.0.20240222) produces SliceTiming without use of the hidden option on the DWI scan collected with "SoftwareVersions": "30\LX\SIGNA_LX1.MR30.1_R01_2322.c". Thanks!

mr-jaemin commented 7 months ago

After reviewing the GE PSD epi2.e (diffusion) code, updated dcm2niix

from

If (UHP or 7T) && (0.5 < UserData15 <1)
    diffCyclingModeGE = 0 (off)

To

If (UHP or 7T) && (0.5 <= UserData15 <= 1.0)
    diffCyclingModeGE = 0 (off)