diff --git a/BIDS/README.md b/BIDS/README.md index e2b5e6c2..132f478e 100644 --- a/BIDS/README.md +++ b/BIDS/README.md @@ -245,7 +245,7 @@ Data unique to [GE](https://github.com/rordenlab/dcm2niix/tree/master/GE). Deter | LabelingDuration | s | DICOM tag 0043,10A5 | B | | SliceTiming | s | [see notes](https://github.com/rordenlab/dcm2niix/tree/master/GE#slice-timing) | B | | CompressedSensingFactor | | DICOM tag 0043,10B7 | D | -| TablePosition | mm | DICOM tag 0043,10B2 | B | +| TablePosition | mm | The 3rd value of DICOM tag 0043,10B2 - the value of DICOM tag 0019,107F | B | | DeepLearningFactor | | DICOM tag 0043,10CA | D | ### Manufacturer Philips diff --git a/console/nii_dicom.cpp b/console/nii_dicom.cpp index 440e568e..0be768d7 100644 --- a/console/nii_dicom.cpp +++ b/console/nii_dicom.cpp @@ -4483,6 +4483,7 @@ const uint32_t kEffectiveTE = 0x0018 + uint32_t(0x9082 << 16); //FD #define kBandwidthPerPixelPhaseEncode 0x0019 + (0x1028 << 16) //FD #define kSliceTimeSiemens 0x0019 + (0x1029 << 16) ///FD #define kAcquisitionDurationGE 0x0019 + (0x105a << 16) //FL Acquisition Duration in microsecond, Duration of Scan (series) +#define kTableDeltaGE 0x0019 + (0x107f << 16) //DS Table delta #define kPulseSequenceNameGE 0x0019 + (0x109C << 16) //LO 'epiRT' or 'epi' #define kInternalPulseSequenceNameGE 0x0019 + (0x109E << 16) //LO 'EPI' or 'EPI2' #define kRawDataRunNumberGE 0x0019 + (0x10A2 << 16)//SL @@ -4692,6 +4693,7 @@ const uint32_t kEffectiveTE = 0x0018 + uint32_t(0x9082 << 16); //FD int userData12GE = 0; float userData15GE = 0; float accelFactPE = 0.0; + float tableDeltaGE = 0.0; int overlayRows = 0; int overlayCols = 0; bool isNeologica = false; @@ -7387,7 +7389,12 @@ const uint32_t kEffectiveTE = 0x0018 + uint32_t(0x9082 << 16); //FD d.durationLabelPulseGE = dcmStrInt(lLength, &buffer[lPos]); break; } - case kMRTablePositionInformation: { //LO issue427GE + case kTableDeltaGE: { //DS issue726 + if (d.manufacturer != kMANUFACTURER_GE) + break; + tableDeltaGE = dcmStrFloat(lLength, &buffer[lPos]); + } + case kMRTablePositionInformation: { //LO issue726 if (d.manufacturer != kMANUFACTURER_GE) break; //LO array of floats stored in LONG STRING! @@ -7395,7 +7402,7 @@ const uint32_t kEffectiveTE = 0x0018 + uint32_t(0x9082 << 16); //FD //we want 3rd value, e.g. 17.9: float v[5]; dcmMultiFloat(lLength, (char *)&buffer[lPos], 5, v); - d.CSA.tablePos[3] = v[3]; + d.CSA.tablePos[3] = v[3] - tableDeltaGE; d.CSA.tablePos[0] = 1.0; break; } diff --git a/console/nii_dicom.h b/console/nii_dicom.h index cfc8450a..d54908b8 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.20240731" +#define kDCMdate "v1.0.20240812" #define kDCMvers kDCMdate " " kJP2suf kLSsuf kCCsuf kCPUsuf static const int kMaxEPI3D = 1024; //maximum number of EPI images in Siemens Mosaic