From c2a4b28e7ae7d4761a959b44dda5c6c34986b300 Mon Sep 17 00:00:00 2001 From: neurolabusc Date: Wed, 15 Mar 2023 13:52:43 -0400 Subject: [PATCH] Improve detection of GE isotropic diffusion (https://github.com/rordenlab/dcm2niix/issues/690) --- console/nii_dicom.cpp | 11 +++++++++-- console/nii_dicom.h | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/console/nii_dicom.cpp b/console/nii_dicom.cpp index 0706689a..4a54d618 100644 --- a/console/nii_dicom.cpp +++ b/console/nii_dicom.cpp @@ -4447,7 +4447,7 @@ const uint32_t kEffectiveTE = 0x0018 + uint32_t(0x9082 << 16); #define kTemporalPositionIndex 0x0020 + uint32_t(0x9128 << 16) // UL #define kDimensionIndexPointer 0x0020 + uint32_t(0x9165 << 16) //Private Group 21 as Used by Siemens: -#define kScanningSequenceSiemens 0x0021 + (0x105A << 16) //CS +#define kScanningSequenceSiemens 0x0021 + (0x105A << 16) //CS n.b. for GE this is Diffusion direction of SL! #define kSequenceVariant21 0x0021 + (0x105B << 16) //CS Siemens ONLY: For GE this is TaggingFlipAngle #define kScanOptionsSiemens 0x0021 + (0x105C << 16) //CS Siemens ONLY #define kPATModeText 0x0021 + (0x1009 << 16) //LO, see kImaPATModeText @@ -4683,6 +4683,7 @@ const uint32_t kEffectiveTE = 0x0018 + uint32_t(0x9082 << 16); char scanningSequenceSiemens[kDICOMStr] = ""; char imageType1st[kDICOMStr] = ""; bool isEncapsulatedData = false; + int diffusionDirectionTypeGE = 0; //issue690 int multiBandFactor = 0; int frequencyRows = 0; int numberOfImagesInMosaic = 0; @@ -6540,7 +6541,10 @@ const uint32_t kEffectiveTE = 0x0018 + uint32_t(0x9082 << 16); break; //warp } case kScanningSequenceSiemens: - dcmStr(lLength, &buffer[lPos], scanningSequenceSiemens); + if (d.manufacturer == kMANUFACTURER_SIEMENS) + dcmStr(lLength, &buffer[lPos], scanningSequenceSiemens); + if (d.manufacturer == kMANUFACTURER_GE) //issue690 + diffusionDirectionTypeGE = dcmInt(lLength, &buffer[lPos], d.isLittleEndian); break; case kSequenceVariant21: if (d.manufacturer != kMANUFACTURER_SIEMENS) @@ -7942,6 +7946,9 @@ const uint32_t kEffectiveTE = 0x0018 + uint32_t(0x9082 << 16); //in practice 0020,0110 not used //https://github.com/bids-standard/bep001/blob/repetitiontime/Proposal_RepetitionTime.md } + //issue690 + if ((d.manufacturer == kMANUFACTURER_GE) && (diffusionDirectionTypeGE > 0) && (diffusionDirectionTypeGE != 16)) + d.numberOfDiffusionDirectionGE = 0; //issue 542 if ((d.manufacturer == kMANUFACTURER_GE) && (isNeologica) && (!isSameFloat(d.CSA.dtiV[0], 0.0f)) && ((isSameFloat(d.CSA.dtiV[1], 0.0f)) && (isSameFloat(d.CSA.dtiV[2], 0.0f)) && (isSameFloat(d.CSA.dtiV[3], 0.0f)) ) ) printWarning("GE DWI vectors may have been removed by Neologica DICOM Anonymizer Pro (Issue 542)\n"); diff --git a/console/nii_dicom.h b/console/nii_dicom.h index c9c5609c..c83e7a54 100644 --- a/console/nii_dicom.h +++ b/console/nii_dicom.h @@ -50,7 +50,7 @@ extern "C" { #define kCPUsuf " " //unknown CPU #endif -#define kDCMdate "v1.0.20230313" +#define kDCMdate "v1.0.20230315" #define kDCMvers kDCMdate " " kJP2suf kLSsuf kCCsuf kCPUsuf static const int kMaxEPI3D = 1024; //maximum number of EPI images in Siemens Mosaic