Minimum number of volumes per shell using multi-shell data

Hi All,

I have a multi-shell data with 11 volumes (b=0 s/mm²), 8 volumes (b=300 s/mm²), 32 volumes (b=700 s/mm²), and 64 volumes (b=2500 s/mm²). I trying to subsample my data into smaller sets to evaluate the minimum number of samples I need to have a reasonable tractography for some bundles. I am using this web tool http://www.emmanuelcaruyer.com/q-space-sampling.php proposed by Emmanuel Caruyer at al. “Design of multishell sampling schemes with uniform coverage in diffusion MRI”, Magnetic Resonance in Medicine (2013) for multi-shell protocol directions design. I keep the 11 volumes (b=0 s/mm²) and subsamples the 3 other shells based on the closest directions per shell that are close to the generated ones.

My goal is to subsample the total number of volumes from shells b=300,700, and 2500 s/mm² to a total of 7, 15, 28, 46 which are the minimum number of volumes based on the lmax order https://mrtrix.readthedocs.io/en/3.0_rc2/constrained_spherical_deconvolution/lmax.html (7 and 46 are the closest ones allowed from the web tool to 6 and 45). However, I’ve got two problems on these analyses.

First, for a total of 18 volumes (11 for b=0 s/mm², 3 for b=300 s/mm², 2 for 700 s/mm², and 2 b= 2500 s/mm²), when I ran the command “dwi2response dhollander dwi.mif wm.txt gm.txt csf.txt -lmax ‘0,2,2,2’”, I got the following error:

[WARNING] The following image volumes were not successfully assigned to a b-value shell: 
[WARNING] 3 (700.00411186999997), 4 (699.99773942000002), 5 (2500.0148205), 6 (2499.9798067500001)

the code crashes afterward and no response is output. The same warning is found every time that I had only 2 volumes in a shell, the code crashed on the same error (I tried different order for lmax too). Also, it seems that the minimum number of volumes per shell is 3. For a total of 21 volumes (11 for b=0 s/mm², 3 for b=300 s/mm², 3 for 700 s/mm², and 3 b= 2500 s/mm²), the code does not show that error, however, it outputs the following one:

dwi2response: 
dwi2response: [ERROR] Command failed: dwi2response tournier dwi.mif _respsfwmss.txt -sf_voxels 559 -iter_voxels 5590 -mask refined_wm.mif -voxels voxels_sfwm.mif -tempdir /home/ol18/Datasets/Subjects/all_subjects/heam/subsample_ms1_15/dwi2response-tmp-TW4UOP/ (dhollander.py:138)
dwi2response: Output of failed command:
              dwi2response: 
              dwi2response: Note that this script makes use of commands / algorithms that have relevant articles for citation. Please consult the help page (-help option) for more information.
              dwi2response: 
              dwi2response: Generated temporary directory: /home/ol18/Datasets/Subjects/all_subjects/heam/subsample_ms1_15/dwi2response-tmp-TW4UOP/dwi2response-tmp-KDPBEL/
              Command:  mrconvert /home/ol18/Datasets/Subjects/all_subjects/heam/subsample_ms1_15/dwi2response-tmp-TW4UOP/dwi.mif - -strides 0,0,0,1 | dwiextract - /home/ol18/Datasets/Subjects/all_subjects/heam/subsample_ms1_15/dwi2response-tmp-TW4UOP/dwi2response-tmp-KDPBEL/dwi.mif -singleshell -no_bzero
              Command:  mrconvert /home/ol18/Datasets/Subjects/all_subjects/heam/subsample_ms1_15/dwi2response-tmp-TW4UOP/refined_wm.mif /home/ol18/Datasets/Subjects/all_subjects/heam/subsample_ms1_15/dwi2response-tmp-TW4UOP/dwi2response-tmp-KDPBEL/mask.mif -datatype bit
              dwi2response: Changing to temporary directory (/home/ol18/Datasets/Subjects/all_subjects/heam/subsample_ms1_15/dwi2response-tmp-TW4UOP/dwi2response-tmp-KDPBEL/)
              Command:  dwi2fod csd dwi.mif init_RF.txt iter0_FOD.mif -mask mask.mif -lmax 4
              dwi2response: 
              dwi2response: [ERROR] Command failed: dwi2fod csd dwi.mif init_RF.txt iter0_FOD.mif -mask mask.mif -lmax 4 (tournier.py:57)
              dwi2response: Output of failed command:
                            dwi2fod: [ERROR] data contain too few directions even for lmax = 2

I thought I met the minimum requirements by using 18 or 21 volumes in total for a multi-shell data. Nonetheless, it seems that the optimization is done per shell and it is confusing me a bit. Can anyone help me out on this?

Hi @Oeslle,

The requirements for minimum number of volumes for a particular maximum spherical harmonic degree applies independently for each shell, as a spherical harmonic representation of the data is calculated for each shell independently. If all DWI volumes were used concurrently, regardless of b-value, then it would no longer be a “multi-shell” approach, but some form of generic q-space approach. You will see this e.g. in the output of response function estimation, where response function coefficients are defined independently for each b-value shell.

Rejecting shells with too few directions is entirely deliberate. If you have just 2 volumes for a given (nonzero) b-value, you have fundamentally not adequately sampled the information within that shell; your measurement and subsequent characterisation will depend very strongly on the directions of diffusion sensitisation of those volumes. Even if you were to choose to ignore cross-terms, we live in a three-dimensional world, and therefore, for an anisotropic signal, you would need to measure diffusion in at the very least three directions in order to obtain something vaguely meaningful. 6 volumes is the better lower limit, since this enables capturing anisotropy that is not aligned with your diffusion directions; this happens to also be the limit both for the tensor model and for an lmax=2 SH fit.

While using the bare minimum number of volumes for a given lmax is possible, we’ve found that there tends to be a large jump in SH fit stability by including even just one extra volume. It’s also worth noting that since introduction of the amp2response command, satisfying this constraint is not as critical as it used to be.

1 Like

Hi @rsmith

I am new to MRtrix.

Sorry for texting my question in this reply format, because I don’t know where I can start a new post.

The MRtrix offers me a great result on single-shell DWI. But now I am trying to deal with multi-shell multi b-values data.

I followed the previous posts regarding this issue, and try to use dwipreproc to preprocess the data via commend

dwipreproc ${subj}_denoised.mif ${subj}_preproc.mif -rpe_none -pe_dir AP -nocleanup -force

But it reports an error: [ERROR] DWI volumes could not be classified into b-value shells; gradient encoding may not represent a HARDI sequence

So I tried to add an eddy_option --data_is_shelled. However, I still get this error.

So I simply used fsl to preprocess this data, and it works.

Then when I went back to MRtrix for tractograph starting from dwi2response, using dhollander, it gives me the same error again.

So I used the mrinfo to see the b-values and vecs, it give me this data

mrinfo Subject_01_post_eddy.mif -dwgrad
          -0                   0            0                         0
-4.26098e-12     -0.99996   -0.0089275          350
   0.0030393   -0.0060786    -0.999977          350
   -0.999917  -0.00908866  -0.00908866          350
    0.704449    -0.709726  -0.00634599      649.999
    0.708171  -0.00535836    -0.706021          650
  0.00105847    -0.710823    -0.703371          650
  0.00105844     0.711352    -0.702835          650
   -0.704449    -0.709726  -0.00634598          650
   -0.708171  -0.00535837     -0.70602          650
    0.576961    -0.581011    -0.574057         1000
    0.576961     0.581011    -0.574058         1000
   -0.576961    -0.581011    -0.574057         1000
   -0.577151     0.581204    -0.573671         1000
 1.82515e-11     -0.99999  -0.00448417         1350
 0.000756418  -0.00302564    -0.999995         1300
   -0.999983  -0.00377111  -0.00452408         1350
    0.893182    -0.449678  -0.00402929         1650
    0.895124  -0.00324063    -0.445806         1650
    0.445818    -0.895115  -0.00401629         1650
    0.447646  -0.00297537    -0.894206         1650
 0.000266472    -0.895978    -0.444098         1650
 0.000538382    -0.450338    -0.892858         1650
 0.000538381     0.450338    -0.892858         1650
 0.000266364     0.896085    -0.443883         1650
   -0.445818    -0.895115  -0.00401629         1650
   -0.447646  -0.00297537    -0.894206         1650
   -0.893073    -0.449894  -0.00403122         1650
   -0.895231  -0.00323914     -0.44559         1650
    0.408213    -0.411287    -0.814988         2000
    0.408213     0.411288    -0.814987         2000
   -0.408213    -0.411288    -0.814988         2000
   -0.408213     0.411288    -0.814987         2000
    0.816151    -0.410943     -0.40623         2000
    0.816219      0.41108    -0.405956         2000
    0.407498    -0.818262    -0.405454         2000
    0.407498     0.818262    -0.405454         2000
   -0.407498    -0.818262    -0.405454         2000
   -0.407531     0.818329    -0.405285         2000
   -0.816288    -0.410806    -0.406094         2000
   -0.816423     0.410976     -0.40565         2000
    0.705776    -0.708428  -0.00318152         2650
    0.707772   -0.0024023    -0.706437         2650
 0.000265033     -0.70923    -0.704977         2650
 0.000265029      0.70923    -0.704977         2650
   -0.705644     -0.70856  -0.00318211         2650
   -0.707905  -0.00240191    -0.706303         2650
    0.665836    -0.668506    -0.331304         3000
    0.666726    -0.335762    -0.665387         3000
    0.666727     0.335762    -0.665387         3000
    0.665824     0.668605     -0.33113         3000
    0.333011    -0.668805    -0.664683         3000
    0.333011     0.668804    -0.664683         3000
-0.000332771    -0.999995  -0.00299496         3000
  0.00067091  -0.00201278    -0.999998         3000
   -0.333011    -0.668805    -0.664683         3000
   -0.333011     0.668805    -0.664684         3000
    -0.66596    -0.668407    -0.331254         3000
   -0.666851    -0.335712    -0.665287         3000
   -0.666851     0.335713    -0.665287         3000
   -0.665971      0.66853    -0.330982         3000
   -0.999993  -0.00234288  -0.00301176         3000

And I tried mrinfo -shell_sizes option, it reports the same error: DWI volumes could not be classified into b-value shells; gradient encoding may not represent a HARDI sequence

I don’t know if this is HARDI scheme or what kind of acquision.

I am really struggling with processing this data. Any help would really appreciate.

Thank you very much
Leo

Hi Leo,

Here’s visualisation of your DWI diffusion sensitisation directions, with distance from the origin corresponding to b-value:

The data clearly do not constitute a HARDI sequence, which specifically requires that the data be arranged into a relatively small number of “shells”, where volumes have the same diffusion sensitisation strength but different directions, and would therefore look like hollow “shells” in a visualisation such as this.

In its current form, spherical deconvolution and surrounding methods are simply not applicable to your data.

Rob

Thank you very much for the very nice explanation @rsmith! Sorry for taking a while to answer.

Kind regards,
Oeslle