Full unmyelinated new-born brain - 3 shells 46 directions each. [ERROR] number of rows in response function must match number of b-value shells

Hi there,
Thanks for the software!

Here I am exploring some new-born brain with multiple shells.
As far as I can understand there are three options available:

  • csd: standard single-shell single-tissue CSD (SSST-CSD);
  • msmt_csd: multi-shell multi-tissue CSD (MSMT-CSD)
  • ss3t_csd: single-shell 3-tissue CSD

As the tissue is not myelinated, this case seems to fall in the missing one: multi-shell single tissue.
Do you have any suggestion for this?

What I tried so far was:

dwi2response fa <dwi.nii.gz>  <output_average_response.txt> -grad  <bvals_bvects.txt> -shell  844,1048,1570 

Where dwi is a 199 timepoints with 7 b=0 and 64 for each shell.

The <output_average_response.txt> is a single row with 6 floats.

Therefore when running

dwi2fod msmt_csd  <dwi.nii.gz> <output_average_response.txt> -grad  <bvals_bvects.txt> -mask <mask.nii.gz> -shell  844,1048,1570 

What I got is:

[ERROR] number of rows in response function must match number of b-value shells

Have not tried dwi2response msmt_5tt as there is no clear distinction between WM and GM, moreover they are ex vivo data, so no CSF…


So the issue here is that the csd algorithm in dwi2fod is expressly single-shell, so will use only the highest b-value shell in your data set, and expects the response function to also provide the diffusion profile for a single shell (i.e. a single row).

In contrast, the msmt_CSD algorithm in dwi2fod is expressly multi-shell, and will use all b-values in your dataset, and expects the response function file to provide the diffusion profile for each shell (i.e. one row per b-value). Note that in this context, the b=0 volumes constitute their own shell (they have their own distinct b-value).

The fa algorithm in dwi2response provides a single-shell response (as will the tournier algorithm), so can’t be used as-is with the msmt_csd algorithm in dwi2fod, if the data are multi-shell (and even single-shell data are considered multi-shell is the b=0 volumes are included – confused yet?).

To get full multi-shell responses, you’ll need to use a dwi2response algorithm like msmt_5tt or dhollander that does that, and then you’ll be able to use those responses with dwi2fod msmt_csd. Otherwise, you’re stuck with dwi2fod csd.

Unless, if you really want to use the msmt_csd algorithm with a single-shell response, you use dwiextract to pull out just the highest shell from your dataset, and feed that to dwi2fod msmt_csd – this is fact what is done in the current single-shell FBA instructions.

So there’s lots of ways of operating here… In general, I would say that your best bet currently would be to use dwi2response dhollander followed by dwi2fod msmt_csd, even for single-shell data (in this case, use the WM and CSF responses only). I’d only consider other approaches if that doesn’t work well for some reason.