Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GE shims #608

Closed
mharms opened this issue Jun 2, 2022 · 15 comments
Closed

GE shims #608

mharms opened this issue Jun 2, 2022 · 15 comments

Comments

@mharms
Copy link
Collaborator

mharms commented Jun 2, 2022

What do you think about adding the following fields from GE DICOMs to ShimSettings:

Example shim values:
# gradient offset in X
(0x0043,0x1002) SS 2 [123]
# gradient offset in Y
(0x0043,0x1003) SS 2 [-21]
# gradient offset in Z
(0x0043,0x1004) SS 2 [457]

Another potentially very useful field that someone at GE clued me in to is (0043,1095):

Another bit of information perhaps relevant to this line of questioning, the “prescan use string” indicates what series the shim values were copied from (in case Auto or No is specified), in this example, series 3:
# Prescan Reuse String
(0x0043,0x1095) LO 36 [TG/s2,CF/s3,AS/s3,RN/s1,MD/s1,Cal/s3]

@neurolabusc
Copy link
Collaborator

@mr-jaemin do you have any thoughts on storing these private tags in the BIDS JSON. Is the definition of these private tags stable across GE software versions?

@mr-jaemin
Copy link
Collaborator

mr-jaemin commented Jun 3, 2022

I confirmed that these tags are captured in DCM, for example SIGNA Premier RX29.1

Attribute Name Tag VR VM
Gradient offset in X (0043,1002) SS 1
Gradient offset in Y (0043,1003) SS 1
Gradient offset in Z (0043,1004) SS 1
Prescan Reuse String (0043,1095) LO 1

I believe that these tags are stable across GE software versions. At least, I confirmed the code unchanged between DV25 and MR30.

@mr-jaemin
Copy link
Collaborator

I was wondering how this information will be utilized.

@mharms
Copy link
Collaborator Author

mharms commented Jun 3, 2022

To check whether the shims are changing between scans, and to understand the "Prescan" better.

@captainnova
Copy link
Collaborator

captainnova commented Jun 3, 2022 via email

neurolabusc added a commit that referenced this issue Jun 6, 2022
@neurolabusc
Copy link
Collaborator

@captainnova and @mharms can you confirm you are happy with the latest addition to the development branch (v1.0.20220606). For GE MRI, the BIDS json file will be populated with the following tags:

	"ShimGradientX": 3,
	"ShimGradientY": 5,
	"ShimGradientZ": 65524,
	"PrescanReuseString": "TG/s3,RN/s1",

Alternatively, we could provide this as an array, to match the output from Siemens scanners:

	"ShimSetting": [
		3,
		5,
		65524	],
	"PrescanReuseString": "TG/s3,RN/s1",

However, the GE DICOMs have three unique DICOM tags, so listing three values in the BIDS keeps the correspondence between the DICOM and BIDS tags. I could go either way on these representations, so tell me if you have a strong opinion on this. I would also appreciate thoughts from @effigies as he is the final dcm2niix arbitrator for all things BIDS.

@mharms
Copy link
Collaborator Author

mharms commented Jun 6, 2022

@neurolabusc: I don't feel the need to explicitly run this, unless you really want me to. Personally, I think it makes sense to include the GE shims values as part of the already existing ShimSetting field/array for Siemens, since they are capturing the same conceptual thing. Plus, easy to add higher-order shims to the ShimSetting array if GE populates those values into the DICOMs at some point. I'm not finding the word shim anywhere in the current BIDS specification.

@pvelasco
Copy link

pvelasco commented Jun 6, 2022

heudiconv uses the ShimSetting when trying to automatically populate the IntendedFor field, so it would work on GE files without any changes if you wrote the GE shims to the ShimSetting array. But if keeping the correspondence with the DICOM header is preferred, heudiconv can be easily modified, so it is fine either way...

@captainnova
Copy link
Collaborator

captainnova commented Jun 6, 2022 via email

@effigies
Copy link

effigies commented Jun 6, 2022

BIDS currently has nothing to say about shims so I would follow what people who use these metadata would find more useful. I don't really have a use case in mind, but my instinct is that an array of numbers is simpler than separate keys.

Looking through existing fields in MR, I see only one thing that has a value per axis:

Key name Requirement level Data type Description
AcquisitionVoxelSize RECOMMENDED array of numbers An array of numbers with a length of 3, in millimeters. ...

And none with a field per axis.

If someone has a compelling reason to split, that seems okay to me, and if not my slight preference is towards one field.

@captainnova
Copy link
Collaborator

I will try to run the development branch with my collection of test data tomorrow

I guess it's been a while since I've compiled dcm2niix - unfortunately libstdc++-static has evaporated from our CentOS build environment. I asked our sysadmins about it and hopefully they can get to it tomorrow. But I'm going to bail on running a test today, sorry.

@captainnova
Copy link
Collaborator

v1.0.20220606 (git pulled yesterday) worked well with my test suite.

I happened to prefer the array form of ShimSettings instead of _x, _y, _z, but now that I see GE and Siemens .jsons side by side it's obvious that it's an absolute necessity. (Siemens has 8, and as @mharms noted there's nothing to stop any manufacturer from adding higher order terms later.)

@mharms
Copy link
Collaborator Author

mharms commented Jun 15, 2022

I just discovered that there appears to be a data type issue (signed vs. unsigned) on the newly reported GE linear shims.
e.g.,
Here are the values from a scan as reported by dcmdump:

(0043,1002) SS -1 
(0043,1003) SS 5 
(0043,1004) SS -6

And here is what dcm2niix returned for that same scan:

	"ShimSetting": [
		65535,
		5,
		65530	],

Per a GE DICOM conformance document that I found, the (0043,1002-1004) fields have a VR of SS, so the signed values returned by dcmdump seem more likely to be the correct interpretation.

@mr-jaemin
Copy link
Collaborator

I confirmed the SS from the DCS SIGNA Premier RX29.1

Attribute Name Tag VR VM
Gradient offset in X (0043,1002) SS 1
Gradient offset in Y (0043,1003) SS 1
Gradient offset in Z (0043,1004) SS 1
Prescan Reuse String (0043,1095) LO 1

neurolabusc added a commit that referenced this issue Jun 15, 2022
@neurolabusc
Copy link
Collaborator

@mharms well spotted - latest commit supports signed values.

yarikoptic added a commit to neurodebian/dcm2niix that referenced this issue Apr 29, 2024
* tag 'v1.0.20220720': (65 commits)
  GE Direct field mapping (TE1/TE2) (rordenlab#617)
  GE Direct field mapping (TE1/TE2) (rordenlab#617)
  Issue 618 (rordenlab#618)
  Update notes
  Siemens XA30 ASL parameters and ImageTypeText 0021,1175
  Reset PET values for classic DICOMs (rordenlab#616)
  PostLabelDelay for XA30, FrameDuration is only for 4D datasets (rordenlab#616)
  shims are signed (rordenlab#608)
  AcquisitionVoxelSize before any interpolation or resampling within reconstruction or image processing
  Add AcquisitionVoxelSize tag for Siemens ASL (rordenlab#608)
  Store GE ShimSetting as array (rordenlab#608)
  GE sequence details (rordenlab#608)
  Philips slice timing notes
  Verbose scan options (issue 606)
  Change scanOptions
  scan options is long string, fix bvec rejection (rordenlab#606)
  Ignore non-spatial physio data (rordenlab#606)
  Flipping Y also flips sign of determinant
  Better Siemens XA support (rordenlab#606)
  Report DwellTime for Siemens XA (rordenlab#240)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants