Dwipreproc (topup) with many b0 up/down (reverse phase) pairs

Hi mrtrix experts,

I posted the question below to the fsl forum, but I’d like your opinion as well…

I asked:

My question relates to the optimal number of b0 up/down pairs for topup.
I have a rather large dMRI dataset, with 11 b0 up/down pairs.

The b0s are interspersed in the > 200 directions dMRI acquisition to correct for scanner drifts (acquisition takes > 20 minutes).

topup --imain=all_my_b0_images.nii --datain=acquisition_parameters.txt --config=b02b0.cnf --out=my_output
works fine on the data (as does eddy_cuda), but topup takes a huge amount of time to complete (several hours).

On a single pair of up/down b0s it takes about 10 minutes to compute.
Having 11 pairs is probably overkill, and doesn’t reach a significantly better estimation of the field.

What can I safely do to speed up topup?

1/ Reduce the number of pairs, e.g. only use each third acquired pair. This will not significantly impact the estimation of the field, right?

2/ Use all b0 pairs, but come up with a faster topup version. Topup seems to be a single core process (not openmp designed, at least not on osx). What loop in the source code can benefit from openmp?

3/ Come up with a non-standard config file, for faster computation? How?

I run into the use of all b0 up/down pairs because I call dwipreproc with the -rpe_header option.

I think solution 1/ reduce the number of b0 pairs used, is the best option.
Do you agree?
If so, I would propose adding an option to dwipreproc, something like -rpe_reduce_pairs to select a subset of b0s.
Would this be useful?

Best regards,


Started reading the python code of dwipreproc and now realise that the -rpe_header is not mutually exclusive with -se_epi.
I can therefore extract a subset of b0 pairs from the dataset and give it to dwipreproc with the -se_epi in combination with the -rpe_header.
Problem solved…



Only thing I would add is to ensure that the first b=0 volume in the input DWIs is also present in the SE-EPI input. This will ensure spatial alignment of the field estimated by topup when it is applied within eddy.

Started reading the python code of dwipreproc

My condolences.