Dwidenoise with dwipreproc


#1

Dear MrTrix experts,
I have encountered a problem while i was using eddy (inside dwipreproc scrip) and dwidenoise. I am using mrtrix3 on centos 7.

I have done

  1. dwidenoise --> dwidenoise dti.mif dti_deno.mif
  2. dwipreproc --> dwipreproc dti.mif dti_deno_eddy.mif -rpe_none -pe_dir AP -readout_time 0.1 --eddy_option " --slm=linear"

but it returned to me this error:

Segmentation violation, Address not mapped, Offending address = (nil)
/lib64/libc.so.6 [0x7f41255b1f8f]
eddy_openmp ) [0x6075c6] [���
eddy_openmp ) [0x60245b] [���

I tried again without using dwidenoise and everything went fine.
Any advices will be very helpfulness
Thanks in advance!
All the best,
Matteo


#2

Hi Matteo,

You might find answers to your question here Denoising and unringing before eddy and here https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind1901&L=FSL&P=R48437&1=FSL&9=A&J=on&d=No+Match%3BMatch%3BMatches&z=4

Basically, there are differing opinions on whether one should apply denoising (and Gibbs ringing correction, which I also recommend -> mrdegibbs) prior to running eddy. I have yet to see eddy fail on denoised and/or de-Gibbs-ed DWI data (the problem described in my post to the FSL forum was a field map issue).

Best,
Matthias


#3

While it looks like there’s going to be some contention about the use of denoising before running eddy, that discussion should be about the scientific merit of the methods themselves and their interaction, and not the experience of a segmentation fault.

It would certainly be interesting to know exactly what the mechanism is that’s causing eddy to fail, and whether or not there is either any blame to be placed on MRtrix3 commands, or any capacity to check the nature of the data input to dwipreproc to either predict eddy failure or modify the data to prevent it. If you have data that consistently causes the crash I’d be curious to take a quick look.


#4

Dear all,

I certainly did not mean to re-open the debate about the use of denoising and/or Gibbs ringing before running eddy, I was rather trying to make the point that the segmentation fault is likely NOT due to running dwidenoise. eddy seems to be pretty sensitive to minimal discrepancies in voxel size etc. so maybe something like that might be happening during denoising.
I also forgot to include the following reference to a recent paper describing the merits of running denoising and Gibbs ringing correction prior to using eddy:
Ades-Aron, B., Veraart, J., Kochunov, P., McGuire, S., Sherman, P., Kellner, E., … Fieremans, E. (2018). Evaluation of the accuracy and precision of the diffusion parameter EStImation with Gibbs and NoisE removal pipeline. NeuroImage , 183 , 532–543. [https://www.sciencedirect.com/science/article/pii/S1053811918306827?via%3Dihub]

Best,
Matthias


#5

Dear all,

@mheyne thank you Matthias for your suggestions and papers about using denoise and gibbs correction before running eddy. For my experience, applying this kind of pre-eddy processes seems to improve the final results and so i would apply also to my data.

@rsmith I could sent you the data. I just need to know which methods you prefer to share data. Thanks!

All the best,
Matteo


#6

eddy seems to be pretty sensitive to minimal discrepancies in voxel size

That’s an interesting thing to keep an eye out for. Because MRtrix3 performs all critical floating-point calculations using double precision, but data must sometimes be imported from / exported to single-precision (eg. NIfTI headers), or indeed maybe just due to some of MRtrix3’s internal header information handling in general, it’s possible that some combination of internal numerical operations may result in a single bit difference between values that some other process may expect to be identical.

I’m also curious as to whether negative / non-finite values in the input image may have an effect…