Shift in PE direction after processing with dwifslpreproc

Summary of what happened:

Hi everyone,

I’m trying to preprocess DWI phantom data for a test acquired at fairly high b-values (bmax=8000) using mrtrix dwifslpreproc tools for Topup/Eddy correction tool. The data is has a total of 6,6,15,15 shells for b=500, 1500, 4000 and 8000 with additional 6 b-zeros spaced across the acquisition.

A large shift in the PE direction appears for the higher b-shells that is not visible in the unprocessed images.

Command used (and if a helper script was used, a link to the helper script or the command generated):

The dwifslpreproc is ran after a basic denoising using dwidenoise with MP-PCA default settings. Mask fed to eddy is obtained using median-otsu from dipy before all preprocessing.

dwifslpreproc "${denoise_mif}" "${preproc_mif}" \
              -rpe_pair \
              -pe_dir "${PE_DIR}"\
              -se_epi "${se_epi_pair_mif}" \
              -eddy_option "${eddy_opts}" \ # --data_is_shelled --flm=quadratic --slm=linear --repol --dont_peas --json=${dwi_json}"
              "${readout_opt[@]}" \
              -eddy_mask "${mask}"\
              -nthreads "${NTHREADS}"\
              -nocleanup

Version:

MRtrix 3.0.8
FSL 6.0.7.19

Environment (Docker, Singularity / Apptainer, custom installation):

Installed through anaconda package manager

Screenshots / relevant information:

The same problem happens on another test that I performed, where the b=8000 was not acquired, leaving only b0,b500,b1500 and b4000. Another thing to note is that I’ve acquired the data across 5 days, and only on one of the days I get this problem.

I can send/share the data if possible, has it might be more easy to spot the shift on the data instead of including screenshots.


Could you check if the “PhaseEncodingDirection” specified in the json files are correct?

Hi, thanks for the suggestion. Yes, I did check if the “PhaseEncodingDirection” is correct in the json files.

The data was converted from dcm to *.nii.gz with dcm2bids. For the dwi data, the phase encoding direction is AP: “PhaseEncodingDirection”: “j-” and for the fmap (reversed PE b0): “PhaseEncodingDirection”: “j”

I’ve also included a GIF of the shift. We can see the displacement between the b1500 and b4000 shell here.

shift_pe_phantom

Do you mean that the shift appears between different shells?
This reminds me about the --dont_peas argument that can be used in FSL’s eddy. The default of eddy is “peas” (“Post Eddy Alignment of Shells”).

Yes exactly, the shift appears between the b4000 and b1500 in this exemple. I also tried with the --dont_peas argument but no luck.

I’ve augmented the number of iterations to --niter=8 and --fwhm=10,8,4,2,0,0as recommended for agitated “subjects”, it worked for some of the runs but not all of them…

I’ll try combining the --dont_peas option to the higher number of iterations to see if that can work.

Looking at your data, I wonder if FSL eddy is well suited for correcting this kind of data.You may want to ask the developers directly on the FSL forum.