GE fieldmap correction with real/imaginary files

Hi all!
I got an old dataset for resting state analysis from the archives of my lab. It was made around 10 years ago with GE Signa HDxt scanner (3T according to json). There are fieldmap files but they are different I saw before (I had experience with Siemens (mostly) and Phillips). Each subject has two pairs of real and imaginary files. dcm2niix converts them as “real”, “imaginary” and “reala”, “imaginarya”. The difference is in TE, the first pair has 5.3ms both, and the second has 7.6ms. I’m not sure if these files in Hz, as there is no mention of units in json files. I tried to find something, but the majority of the material explains what to do with one pair real/imaginary files, referencing to Phillips. But I have 2 pair with different TE. Unfortunately, I have nobody to ask, the people who worked at this set left academia already. And everybody works with Siemens scanners now.
Can please somebody explain what procedures and steps should I take to convert these files into something I can use for fieldmap correction in FSL? Or maybe what can I do in general?

From what I can understand, your problem is that you have real and imaginary instead of magnitude and phase, as is typical for field maps. Is that correct?

If so, you should be able to convert them to magnitude and phase images. One tool that can do that is mrcalc: see mrcalc — MRtrix 3.0 documentation.

Something like the following might work:

# Convert the real and imaginary values to complex values
mrcalc -complex real_img.nii.gz imag_img.nii.gz out_complex.nii.gz
# Split up the complex values into magnitude and phase
mrcalc -phase out_complex.nii.gz out_phase.nii.gz
mrcalc -abs out_complex.nii.gz out_mag.nii.gz
# out_phase.nii.gz and out_mag.nii.gz will be the phase and magnitude, respectively

Hi! Thank you for your reply!
Yes, in general. But here are two different TE for each pair real/imaginary. In Siemens, the phase image usually contains two TE. According to your guidance, I will get two phase images at the end, each with own TE.
In this case, which one should I use?
Or do I need to calculate something else, to combine these two phase images? I guess, I may miss info if I will use only one.

It probably depends on what your preprocessing pipeline is, but you should be fine keeping the two phase images (and two magnitude images, if you want) separate. That is equivalent to Case 2 in the BIDS field map documentation: Magnetic Resonance Imaging - Brain Imaging Data Structure v1.9.0.

Pipelines like fMRIPrep should handle separate phase images just fine. It won’t use just one- it will use both and calculate the phase-different map internally.

1 Like

The pipeline I am required to use is standard FSL FEAT way. So, you are also have no information on what to do with two phase images, except to apply fMRIPrep? Maybe is there any other way? The data is old and not in bids. And I am afraid if I apply so different pipelines on these GE data, they will distinct from others made on Siemens.

You will want to refer to the FSL FUGUE manual. If you have issues, search the fsl jiscmail for prior solutions and if you can not find any, post a message there.

Hi @Alina_Tetereva

This reminds me old memories. I believe on HDxt system the B0Map pulse sequence (giving directly the fielmap in Hertz and a magnitude image) was not available so, at that time, people were using either a 2-echo pulse sequence or 2 acquisitions with two different TEs. And you seems to be in this last case.

You need to make some basic calculation to get the basic fieldmap and magnitude to input into fsl_prepare_fieldmap. This can be done with FSL tools or others (like mrcalc).

  1. Convert the real+imag data of the shortest TE (=TE1) into a complex volume (e.g. using fslcomplex). Let’s call that complex image I1.
  2. Convert the real+imag data of the longest TE (=TE2) into a complex volume (e.g. using fslcomplex). This second image will be called I2.
  3. Get the magnitude image of I1 (or if you wish also the magnitude of I2)
  4. Compute deltaTE (TE2-TE1) in milliseconds.
  5. Compute the phase difference as phase_diff=phase(I2./I1). This can be done with fslmaths and fslcomplex.
  6. With that you can input that in fsl_prepare_fieldmap using SIEMENS mode
    fsl_prepare_fieldmap SIEMENS phase_diff magnitude_of_I1 your_output deltaTE

A possible alternative is to do the following for point 5 and point 6.

  1. Compute the Fieldmap in Hertz as fieldmap_hertz = phase(I2./I1)/(2piDeltaTE). Not that DeltaTE should be in seconds here. This can be done with fslmaths and fslcomplex.
  2. Run fsl_prepare_fieldmap using GEHC_FIELDMAPHZ mode
    fsl_prepare_fieldmap GEHC_FIELDMAPHZ fieldmap_hertz magnitude_of_I1 your_output deltaTE

Then you should be good to go.