Preprocessing and SIFT2 questions

Hi MRtrix experts!

I have ~150 subjects. Single shell (b=1000) data with 120 directions.
Subjects are in puberty and differ in age (span of few years) and some of them were imaged more than once, so it is hard to do sensible average_response.
I am planning to study different connectome properties between subjects.

In preprocessing steps I did:
denoise, degibbs and dwibiascorrect -ants

I did response estimation with msmt_5tt and then csd (dwi2fod) with only providing wm and csf according to this and this threads.
Then I did mtnormalise followed with act tckgen, sift and sift2.

My questions are:

  1. Did I do everything right regarding the normalization between the subjects?
  2. How confident can I be that SIFT2 is giving me the right weights between the nodes considering my preprocessing and MRI data setup - I have noticed that in original paper also single-shell acqusition (although with much higher b-value) was used?



My understanding is that to do the normalization between subjects, you need to use the same response function for all the subjects (the average for example). Also maybe you want to try the dhollander algorithm, it has shown some benefits over the msmt_5tt. I hope this helps.

Best regards,


1 Like

Yep, I can quickly confirm: @mblesac has correctly summarised the essential bits here. As he hinted at subtly, it doesn’t have to per se be the average response, but just a unique one (per tissue) that is then used consistently for all subjects that are to be compared/combined/… among each other. In practice, the average response is just the most convenient solution for that for now, and is generally also quite a “decent” choice actually. I can also confirm that the dhollander algorithm will avoid a lot of worries, and as far as my experience goes, it always does at least as well as msmt_5tt, and most of the time better (in a more convenient way). There’s an improvement on the way that sits ready for the next release candidate of MRtrix3 as well.

That said, I think maybe @david142’s concerns also seems to lie with the “low” b-value of 1000. There’s no crucial problem with that actually, but it just means you have to be a very slight bit more conservative with strongly worded statements (e.g. in your discussion/conclusion type of sections on your work) on interpretation in terms of intra-axonal volume or your results being directly proportional to that, or similar statements. Don’t overdo it on the biophysical statement front there, and you should be fine. At b=1000 you’re definitely still very much sensitive to the properties that matter, but others (e.g. extra-axonal ones) start to contribute more (and more, as b-value decreases) too. It’s more subtle than that, but that’s the gist of it. Definitely have a search in the forum on this topic, there’s several other posts that touch upon this, where others of our team have responded to different aspects of this kind of question.

Hi @david142, also if you want to do some SIFT2-weighted connectomic analysis you should multiply each connectome by his own mu coefficient, please see here.

Thank you Manuel and Thijs!

I will give it a try with dhollander, as well as multiplying sift2 by mu coefficient.

Since my dataset consists of lots of subjects over particular time span. Grouped by age/time, there are 25 time points. Is it a good thing to randomly select a subject from each time point and do the average_response?

I assume after correcting for these 3 things everything else should be fine?


Hi @david142,

I don’t see any reason of why this should be wrong, as far as you use the same response function then to calculate the FODs of all the subjects.

Yes I believe that’s it, once you’ve done that you can compare your SIFT2-weighted connectomes.

Best regards,


Yep, I can’t stress enough that this is the most important aspect wrt response function use. In the absence of a “more clever” way to select the unique response function (per tissue), simply go for the average of all of them; no need to select a subject per time point.