Tractography group averaging - theoretical question

Dear MRtrix community,

I would like to compare some patients’ structural connectivity against an average of HCP subjects’ connectivity. In particular, I am performing whole brain connectivity and then selecting only streamlines crossing a ROI.
I see two ways of going about it:

  1. perform all the diffusion pipeline for each HCP subject individually and then compute a mean fiber distribution as done in

  2. first creating an average template out of the HCP subjects and then creating the whole-brain tractogram only once in this template, following (maybe?) the steps described here:
    Fibre density and cross-section - Multi-tissue CSD — MRtrix 3.0 documentation

For sure the first approach is more time consuming, but could it add some value? Do you think it could be more reliable? Why do you think the authors of the mentioned work choose this method?

Regarding the second approach, would it make a difference to create a template myself, or could I use the publicly available atlas described in


I am sure I would benefit from your insights! Fell free to indicate me tutorials, posts or material that could be useful and I might have missed!
Thank you very much in advance!

Simona Leserri

Hi Simona,

so the paper you attached here from Zhu et al. is about having some seeds, performing whole-brain seed-based tractography from those seeds, getting fibre distribution maps as an output for each subject and each seed, coregister all the outputs together and get two outputs:

  1. Using “segmentation” by overlap with JHU atlas regions you can get streamline count for each white matter tract using different seeds.
  2. You get averaged fibre distribution map.

You have mentioned, your goal is to get streamlines crossing specific ROIs, that suggests tractography.

So, in general, you can analyze DWI data in a 2 different ways:

  1. voxel-level (and fixel-level) modeling and subsequent analyses give you some value for each element in a volume and you compare them (e.g. DTI model and fractional anisotropy in each voxel as a parameter)
  2. tractography approach (first step is always voxel-level modeling) gives you streamlines in your volume, those are usually not evaluated for each voxel but rather in a bigger scale, e.g. some anatomical structures or specific ROIs.

So, speaking of a template:
The link you have attached from MRtrix3 is about the first approach - calculating parameter per each fixel and comparing those parameters. I don’t know how familiar you are with fixels but they are pretty cool and you can learn more about them here. For two different subjects measured by same sequence, they can look like this:

One subject is hot color-scheme, Second one is cool, the third image is overlap.
You can see that in some voxels you have only one stick (a.k.a. fixel), somewhere multiple of them and they are rotated differently. If you calculate fixels on 10 subjects, you will get 10 different images. That is a problem cause here you don’t get 1 parameter per 1 voxel, but 1 parameter per 1 fixel :smiley: And if you have different amount of fixels and they are rotated differently for each subject, nonlinear transformation of all of your voxels into MNI152 standard will not solve that those parameters are non comparable.That is why we have template. It is our standard space, a scheme. It could be build from all of your subjects but it is not a necessity. Subjects FODs are repeatedly nonlinearly registered to the previous group mean sufficient convergence of the group mean. Then, we can register FODs from all our subjects to the subject-specific template and use a one and only common space with one common distribution of fixels. So we are able to statistically compare different subjects by comparing parameters of those cute little elements called fixels and we are sure we are comparing same fixels in the same voxels between all subjects. That means, template is primarily our standard space for fixel-based analysis, not a one picture that can replace one of your study groups.

To the actual template creation:

Just a little note but it is a general rule to use both groups to build a template (to reflect FOD distribution in your study) unless there are some unusual circumstances such as huge structural abnormalities in your patient group or something similar that would shift template estimation enormously.

Also, be always careful to compare two datasets that were acquired differently and on a different machines using different sequences, since part of the effect you see, could be potentialy a reflection of this difference as well. So make sure you regress it in your GLM.

All that being said, and sorry for a long answer, what you have attached as a second approach is linked to the one kind of an approach for processing of your data you can use in MRtrix3, called Fixel-based analysis. In this case we use study-specific template. You can definitely go this way by providing whole FBA analysis available on a link you have attached, including whole-brain tractogram generation. Then you can use tckedit to select tracts based on inclusion/exclusion criteria using either binary masks or spehere around some coordinates. Then, you can use this edited tractograms, convert them to fixels using tck2fixel and use them as a mask for any calculation between your subjects you wish using your FD, FC and FDC parameters from Fixel-based analysis. If you would like to do any tract segmentation as mentioned in an attached paper, you can always coregister and convert any atlas from e.g. FSL or elsewhere into fixels using voxel2fixel command. Moreover, you can use pretty easy and quick segmentation of this template whole-brain tractogram via tractseg to get even fancier masks of tracts - you can find more information here. You have many options here to look at this, you can for example calculate the weighted mean of FD/FC/FDC for each segmented tract and compare this means from both groups between subjects for each tract…

Speaking of a tractography:
One general rule is that it is always better to be in a subject space as long as possible and avoid any unnecessary registration steps. Ideally, do it as a last step in your analysis. Using only one tractogram per HCP group provided by template and compare your patients to this, sounds like you can lose a distribution (of for example streamlines count per seed) within HCP group by using only one representant. I would suggest that the best tractography approach would be, for each one of your patient and HCP group, combo of commands: tckgen, tcksif2 and tck2connectome, where your nodes will be your ROIs. Read more about it here. Than you can then play with it as you want. can use tckstats to calculate statistics on streamline lengths, connectomestats if you will use connectome-like approach… etc.

Hello @Bartonova ,

Thank you for your detailed answer, it was very useful! I have followed your advises and I was able to create a study template and run the FBA. However, now I have even more doubts :sweat_smile: that I am sure you can help me clarify.

When I compare the subject-specific metric (aka in the subject/fixel_in_template_space folder), as you said and show in yuor plots, I see different number of fixels and directions… When I repeat the analysis in the template directory the number of fixels is the same for each subject, as expected. However if I try to ‘overlay’ the three Patients using the fixel plot tool, the fixels directions are the same, and I can just color code the fixel plot based on Patient. Visually, there is no change. I’ve tried to used mrdump and indeed for each fixel, the value of the metric is different in every patient. What am I missing? Can I still retrieve patient-specific fixels out of the template?

Also, with the same aim of getting information relative only to the streamlines crossing a ROI, I did the following:

  1. I followed the FBA tutorial till the point 20, and obtained the whole-brain tractography on the template.
  2. Used tckedit with the weight_in, weight_out option and select the streamlines crossing the ROI
  3. Using only the selected fibers, I run tck2fixel. I was happy to find out that the fixel_data_out had the same number of fixel as those in the template folder described above.
  4. I mrdump the fixel_data_out , and it was mostly full of zero that should make sense based on the filtering we did.

So if I now get the ‘index’ of these non zero fixels, and I see the metric value for the subject fixels having the same index, will I have finally found the subject specific fixel that make up the stramlines included in my ROI? Does this index exist indeed? Does the process make sense?

I hope it was clear enough,
Thank you very much in advance!


Hi Simona,

Even you can be surprised with this, it is OK. I expect that you used mrtransform to warp your subjects FODs to template. This is only spatial warp. I assume you also applied fixelreorient step and output of it was your fixel_in_template_space. This steps should be followed by fixelcorrespondence - this makes the magic of matching fixels of your subject to your template. New results are all in a one folder with a one directions.mif and index.mif files - the ones that hold the info about the number of fixels per voxel and their orientation. Otherwise, your parameter file is just a long vector. Therefore, when your fixels will be matched, your parameters will be displayed using those files, everythime the same ones, since there is just one pair of them in your new (I assume “fd”) folder.

ok, so, what I have mentioned before, here it should be step 16. Assign subject fixels to template fixels :slight_smile: Don’t panic, you just displayed one step before (output of fixelreorient)

:upside_down_face: This is given by the directions.mif and orientation.mif files, stored in a fixel_folder_in. So, if you have correctly pointed tck2fixel to folder where you have store this files for template, there should be match! :slight_smile:

My favourite control is always a visual one. So open wmfod_template.mif and using Tractography open your tckedit output and using Fixelplot open your fixel_data_out and look at it if it corresponds. You can also load your ROI as an Overlay to see to more in context.

Well, I am not sure If I’ve got the message. You can binarize your fixel_data_out and the result will be fixel-mask of tracks specific for ROIs. You can use this fixel-mask in unlimited ways. Here comes the scientific fantasy :smiley:
One of them is to use them as a -mask option in fixelcfestats.
Another one is to use tckstats and for each of your “sets of tracks connected to ROI” calculate weighted mean insert your parameter here (it should be something like summing along each streamline, dividing by streamline length and averaging over all streamlines) - tckstats output will come handy in here.

You can take a look on the papers published before - what they have looked at and start with that.

Best Wishes,

Michaela. :slight_smile:

Hi Simona,

Jumping back to the original question:

I see two ways of going about it:

The fundamental question here is whether the outcomes of tractography on a group average template image are equivalent to the average outcome of subject-specific tractography across a group. If the latter introduces a bias, that bias will be present in any individual subject compared against the template, even if that subject was involved in generation of the template.

It’s a tough question, but my personal instinct is that you want to generate everything in subject space, and then accumulate either streamlines data or higher-order connectivity information across the group.

One of the other problems with generating everything once only in the template image is that you have no sense of variance.