HCP SD_STREAM parameters

Dear MRtrix experts,
I am processing some HCP data and I am interested in the differences between probabilistic and deterministic whole brain tractograms generated using 3M streamlines.
As probabilistic algorithm I used the iFOD2 and I mainly followed the pipeline available here. Everything looks fine and I am happy with that. Also when I filter the “non-connecting” streamlines (i.e. those that are not connecting 2 valid grey matter regions according to the standard Desikan-Killiany parcellation in 84 parcels plus the brainstem) I do not loose many streamlines: I go from 3M to 2749855 which is reasonable and all the white matter is covered (see picture).

Something different happens when I use SD_stream… I tried both with and without ACT, seeding in the white matter mask or only at the grey-white matter boundary, changing angles, step size and cutoff values, but the best I was able to obtain starting from the same FOD used for iFOD2 is this

Which when I filter the non-connecting streamlines reduces to this

I do not loose a lot of streamlines because I end up with 2814529, but as you can see a large portion of the splenium of the corpus callous is not covered as well as many voxels in the brainstem and in areas where we have a lot of crossing.

I am aware of the limitations of deterministic tracking, but is there a way to obtain something better? Are there any parameters values that you know of that can help me improve my results? I suppose there is a way but I might not understand the algorithm enough to find the best choice. :slight_smile:

As reference here are the command lines I’ve used to generate the tractograms in the images and filter out the non connecting streamlines based on the parcellation.

tckgen FOD/WM_FODs_norm.nii.gz iFOD2_ACT_3M_hcp.tck -act 5TT/5TT.nii.gz -backtrack -crop_at_gmwmi -seed_gmwmi 5TT/5TT_mask.nii.gz -select 3M -maxlength 250 -minlength 5 -cutoff 0.06
tck2connectome Tractography/iFOD2_ACT_3M_hcp.tck -out_assignments Connectome/3M_iFOD2_ACT_assignment.txt Connectome/nodes_fixSGM.nii.gz Connectome/iFOD2_ACT_3M_connectome.csv -symmetric
connectome2tck -force Tractography/iFOD2_ACT_3M_hcp.tck Connectome/3M_iFOD2_ACT_assignment.txt Tractography/iFOD2_ACT_3M_hcp_connecting.tck -files single -keep_self -nodes 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85 -exclusive
tckgen -algorithm SD_Stream FOD/WM_FODs_norm.nii.gz SD_STREAM_ACT_3M.tck -act 5TT/5TT.nii.gz -crop_at_gmwmi -seed_gmwmi 5TT/5TT_mask.nii.gz -select 3M -maxlength 250 -minlength 5 -cutoff 0.06 -angle 60 -step 0.25 
tck2connectome Tractography/SD_STREAM_ACT_3M.tck -out_assignments Connectome/3M_SD_STREAM_ACT_assignment.txt Connectome/nodes_fixSGM.nii.gz Connectome/SD_STREAM_ACT_3M_connectome.csv -symmetric
connectome2tck -force Tractography/SD_STREAM_ACT_3M.tck Connectome/3M_SD_STREAM_ACT_assignment.txt Tractography/SD_STREAM_ACT_3M_connecting.tck -files single -keep_self -nodes 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85 -exclusive

Thank you,

1 Like

@team any advice on this? :slight_smile:

The deterministic algorithm is rather simple: it simply follows the FOD peak that is closest to the previous stepping direction.

This makes it quick and dirty, but it means the approach discards much of the information in the FOD. Depending on the tract of interest it can provide reasonable qualitative results, but I would argue that it is ill-equipped for any form of quantitative tracking.

Hi Simona!

The main reason for what you’re observing is that the algorithm truly sticks to the a-priori maxima of the FOD. Apart from the obvious differences with probabilistic tractography, this has a hidden consequence: not all angles within a “cone” (lobe) around the peak are even “allowed” to be tracked, even if they’re above the FOD amplitude threshold (“cutoff”) and within the allowable angle compared to the rest of the trajectory before. This could even be improved and still be a deterministic algorithm, but the implementation in MRtrix is not that. It’s 100% the peaks and the peaks alone.

That then has other surprising consequences: in certain areas of strong curvature, depending on the CSD algorithm used, the FOD lobe might “split” into 2 separate maxima, even though the “reality” is more akin to a single population with broad dispersion. I can’t be sure for your exact dataset here, but I’ve seen this happening quite often e.g. along the most curving edge of the splenium. If those lobes “split” there, suddenly the change in angle you’d need to track this, is much larger. Also, depending which side the streamline comes from, it’d follow a different curve, but both also take it away from that outer edge. So all effects combine to result in not seeing streamlines along that sharper outer edge there. I’ve that that aspect myself before frequently too. The other missing areas are quite complex areas, with both multiple populations but also dispersion. They’re more complicated to explain the consequences of, but they’ll be roughly similar, I reckon.

So technically, I think the only way to overcome this if you could already track those areas probabilistically (that would mean the -cutoff is fine), is to increase the angle of allowed curvature. BUt I reckon you’d have to increase it so much potentially, that other areas will suddenly be filled with lots of false positive turns. (though COMMIT2 might fix that? :wink: ) Regardless, I’ve noticed this and similar problems with SD_STREAM too; it’s not suitable for most tractography jobs I’m afraid. If you’re looking for something “in between”, you can play around with the -power parameter for iFOD2. In principle, if you increase it a lot, the behaviour goes more and more “towards” deterministic tractography. So it can be used if you’re not a big fan for the large amounts of dispersion of streamlines via the “default” iFOD2 settings.

Hope that helps!

Cheers & take care,

Just to echo what’s already been said: deterministic tracking on FODs is in my opinion prone to all sorts of problems of this nature – see for example figure 2 in the first MRtrix paper, which shows similar types of problems. As suggested by @ThijsDhollander, the implementation in MRtrix is pretty simple and does exactly what is says it does (follow the peak); there may be ways of devising deterministic algorithms that are less prone to these issues, but I must admit I’ve not really given them much thought, mostly because I think probabilistic algorithms are superior: they provide information that you just can’t get with deterministic algorithms. I appreciate this is not always a popular opinion though…

In your case, I suspect the issue is that the streamlines that exit the splenium enter regions full of crossing fibres (e.g with optic radiations and posterior SLF / arcuate fasciculus), which can cause sudden changes in the FOD peak directions as shown in that aforementioned figure 2. From there, the streamlines could terminate or go any number of places. However, given your use of ACT, these streamlines must all end up terminating somewhere sensible, so it’s not due to premature termination. I think it would be informative to look at the set of excluded streamlines, see if you can get a clearer idea of what is driving this issue (I think you may be able to use a combination of tck2connectome -keep_unassigned -out_assignments and connectome2tck to do this…).

First I’d note that your manual setting of -cutoff 0.06 is actually now more stringent than the default, which will be 0.05 for both iFOD2 and SD_STREAM algorithms due to the use of ACT as of 3.0.0. So omitting that command-line option may reduce the null regions slightly.

Otherwise, rather than hypothesizing, you can actually find out for certain why the whole-brain tractogram doesn’t have any streamlines in those regions. I think we can get more specific than @jdtournier’s suggestion.

  1. Take the high-resolution TDI, and generate a mask of voxels within a specific region, where you think those voxels are white matter and should contain streamlines, but the value of the TDI is 0.

  2. Using that ROI as the seed, perform deterministic tractography, using an explcitly specified FOD amplitude cutoff, but without ACT, and with no minimum length.

  3. Do the same as step 2, but use ACT, and additionally specify the -info option. Limit the number of streamline seeds using the -seeds option (since if set up correctly, you won’t generate a single accepted streamline, but you don’t want the command to run for too long).

The output of step 2 will show you where streamlines passing though those voxels would go if you were not using ACT, while the output of step 3 will tell you why those streamlines terminated & why they were rejected.