Processing multi-shell DWI intersected with 2 b0s and 6 b100

Dear MRtrix team,

Apologies in advance for the basic question! I’m planning to do FBA analyses on a set of multi-shell dMRI data (b = 1000, 32 directions; b = 2500, 64 directions). The data is intersected by 2 b0 and 6 b100 volumes. While preprocessing the data, Eddy threw the error “Global index not DWI”. Following reading this thread Dwipreproc - Eddy error: global index not dwi
I resolved the issue by replacing b of 100 in the gradient table with 0s (as the two images are very similar) and proceeded with bias field correction and estimation of the response function using dhollander algorithm. So far, the outputs look alright. My questions are:
Does replacing b100 with 0 in the gradient table make sense?
Can this affect the output of CSD and subsequent FBA results or cause an error?
A colleague suggested discarding the actual b0 volumes from the preprocessed data, modifying the gradient table (replacing 0s with 100 as it was in the first place), and move on with the FBA analyses. What do you think of this approach? Would greatly appreciate hearing your thoughts.

Thanks a lot for your help,

Hi Khazar,

I have similar data as yours, what I do is to add the option --data_is_shelled to eddy (or dwifslperproc) and it works. I hope this helps.

Best regards,


Hi Khazar,

I would split this into two separate issues:

  1. How to successfully perform requisite DWI pre-processing (i.e. motion correction etc.);
  2. How to subsequently analyse the data.

For point 1, there’s some chance that specifying --data_is_shelled to eddy may indeed work. The internal operation of that command is outside of my control, so if that were to not work, you might need to get a bit creative with your pre-processing.

For point 2, you don’t want to be just combining b=0 and b=100 data into a single “shell” for analysis. That will look to the fitting algorithm like there’s huge variance in image intensity between volumes within that “shell”, which isn’t faithful to the data.

The question is whether your analysis would benefit from having both b=0 and b=100 data present, or whether you should use just one. This is something that’s intrigued me for a while but I’ve never explored fully. There should be some difference in image intensity between those volumes, which might be of use in tissue separation; then again, you have two shells over and above that, meaning that you’re not relying on using both b=0 and b=100 to do a conventional 3-tissue fit. It’s also true that you have more b=100 data than b=0 data, and the effects of Gibbs ringing are probably reduced in the latter, so if you were to choose one shell of the two, b=100 might actually be the preferable choice. Note that if you went that route, you wouldn’t actually need to set the b-values to 0 in the gradient table: dwi2fod would happily fit spherical harmonic coefficients with lmax=2 to your b=100 data and make use of that during the optimisation.

You can of course simply try all possible options and see for yourself whether you think one produces preferable results with the tools available. Unless anybody else here has done the experiment, in the absence of any evidence I would personally advocate retaining all data; you still need to address point 1 regarding pre-processing, but you can return the data to their true form after that point.



Thanks for your reply. Regarding point 1, I had tried adding --data_is_shelled flag with no luck, having the same error. When I changed b100s with 0s in the gradient table file, Eddy worked fine. Visual assessment of its output and checking the results of eddy_quad didn’t show any problems. So, I assume the preprocessing went well.

Regarding point 2, after discussing the issue with our MR physicist, we opted to discard the 2 b0 volumes and keep the actual b100s in the gradient table. The only issue is that the average response function in WM at b=100 is not isotropic and has an ellipsoid-like shape, which I think makes sense given that there is no b0. Correct?
As I have > 500 subjects, trying all possible options doesn’t seem practical, but I can try the option of retaining all data in a subsample of subjects. Thanks a lot again for the help!


The only issue is that the average response function in WM at b=100 is not isotropic and has an ellipsoid-like shape, which I think makes sense given that there is no b0. Correct?

Correct: for any shell that is not b=0, an anisotropic response will be estimated. Indeed that estimate will go all the way to lmax=10, even for b=100. I would expect that l=2 would be quite low power, and terms above that will be very small, but likely non-zero given the constraints imposed on the response function shape.

Alternatively, if you want the b=100 response to be isotropic, you can control this using the -lmax command-line option during response function estimation.