Dear Annchen,
>
> I'm working on setting up a DTI pipeline using FSL tools and have happened to notice that eddy_openmp produces slightly different results if I run the exact same script twice (on the same data). In my pipeline, I'm running eddy after topup and bet, and I've confirmed that the input files to eddy are consistent across runs.
>
> This is the full command I'm using:
>
> eddy_openmp --imain=AP_MDDW/AP_MDDW --mask=topup_corrected_brain_mask.nii.gz --acqp=$CONFIGDIR/DTI_params.txt --index=$CONFIGDIR/DTI_index.txt --bvecs=AP_MDDW/AP_MDDW.bvec --bvals=AP_MDDW/AP_MDDW.bval --topup=topup_b0_ALL --out=eddy_corrected_data
>
> I first noticed the difference in the output eddy_movement_rms values (they are similar across runs, r~0.96, but I was surprised to find that they weren't identical), and confirmed that the image series is also slightly different.
>
> Am I doing something wrong, or is this to be expected? Happy to provide further info as needed.
this is to be expected (by me at least). As part of eddy’s innards there is a Gaussian Process that is used to make predictions about the data. This GP is retrained (i.e. a handful of hyperparameters are re-estimated) for each iteration. A large number of pixels (the default is 1000 if I remember correctly, but can be changed with the --nvoxhp parameter) is used for this training, but since it is a non-linear procedure it would be quite slow to use all pixels. Hence, the pixels (1000) are selected at random from within the --mask mask. Each time you run eddy a different 1000 random voxels will be chosen, so a slightly different set of hyperparameters will be estimated and this goes all the way through to the end results.
I deliberately chose this way of doing it (it is easy to make sure the same voxels are chosen each time) as a form of sanity check. You want the method to be robust to what exact pixels are chosen, and you want the differences between runs to be sufficiently small that they are of no consequence. If you do find large differences between runs it is an indication that there is some problem with your data and you would want to check that carefully.
If one, for some reason, wants to ensure identical results between consecutive runs one can ensure that with the --initrand flag.
Jesper
|