Thanks for the more detailed snapshot - much easier to see how bad things are. It seems to be noisier on the left of the image (subjectâs right), is this a consistent observationâŚ?
Regardless, the output of dirstat
confirms what I suspected: your DW gradient directions are badly distributed. You can ignore the b=0 output section, it is meaningless for HARDI. For the b=1500 section, this is the interesting section:
Bipolar electrostatic repulsion model:
nearest-neighbour angles: mean = 5.75748, range [ 0.500071 - 11.816 ]
This states that your directions are on average 5.7° away from their nearest neighbour, and in the worst case, 0.5° apart (!) - this is a very poorly designed gradient schemeâŚ
The reason for the scheme being so poor is probably due to the procedure used to generate it being based on a unipolar electrostatic repulsion model, rather than the required bipolar model (see e.g. Jones 1999 for details). This seems to be what happened here, since the numbers look close to optimal for the unipolar repulsion model:
Unipolar electrostatic repulsion model:
nearest-neighbour angles: mean = 26.5455, range [ 25.4903 - 27.6894 ]
Unfortunately, thatâs not what you want for optimal HARDI⌠The last line shows that your scheme supports a lmax=6 fit (condition number = 1.2), but completely collapses for lmax = 8 (condition number = 28.8).
For reference, this is what you should get with a properly distributed 60-direction scheme (generated using dirgen
):
$ dirgen 60 dir60.txt
dirgen: [done] Optimising directions (power 2, energy: 4001.0599, gradient: 0.00011143311, iteration 361)
$ dirstat dir60.txt
dir60.txt [ 60 directions ]
Bipolar electrostatic repulsion model:
nearest-neighbour angles: mean = 18.8232, range [ 18.302 - 19.5847 ]
energy: total = 8002.12, mean = 133.369, range [ 132.208 - 135.388 ]
Unipolar electrostatic repulsion model:
nearest-neighbour angles: mean = 19.4942, range [ 18.302 - 30.4278 ]
energy: total = 3794.16, mean = 63.236, range [ 46.0022 - 84.591 ]
Spherical Harmonic fit:
condition numbers for lmax = 2 -> 8: 1.00612 1.01637 1.03319 1.15016
Note that the average nearest-neighbour angle in the bipolar section (the important one here) is ~18°, with a tight range around that value. And the condition numbers stay close to one for all lmax values, which indicates that the fits will be stable up to those values.
As to what you can do about this⌠Not a great deal unfortunately. The obvious thing to try is to restrict the processing to lmax = 6 - or at the very least, restrict the response function estimation to lmax 6 (which I think it should do by default? How many values do you end up with in your response file? It should be 4 for lmax=6, 5 for lmax=8). I think youâd be safe to run dwi2fod
at lmax 8 as long as your response function is estimated up to lmax 6 only - but your best bet is to try it and seeâŚ
You will also want to double-check where your data came from, and make sure you fix the acquisition going forwards. In the old days, the MGH works-in-progress package installed on many Siemens scanners suffered from this problem. GE scanners also had such schemes installed on their systems for some time. Philips scanners had other issues if you used their âoverplusâ option - but I donât think this is the problem here. And of course, if youâre running a custom sequence or scheme, this could also have introduced the issueâŚ