Discontinuous Streamlines from iFOD1 and iFOD2




I am mathematically generating DWI images and their associated FODs using CSD. Deterministic tracking produces continuous streamlines whereas the probabilistic tracking (iFOD1 and iFOD2) produces discontinuous streamlines, there are breaks in the streamlines. I am unable to find the root cause as I have used the same DWI images for probabilistic tracking on Dipy and it is resulting in continuous streamlines. I have tried multiple options to obtain continuous streamlines that includes using -include and -exclude options as well but still I am unable to obtain continuous streamlines. For simulating the DWI images I have used constrained model given in “A Bayesian approach for stochastic white matter tractography” (http://ieeexplore.ieee.org/document/1661693/) and have tried different values of the parameters but the streamlines from iFOD1 and iFOD2 are always discontinuous. I am confused as probabilistic from Dipy is producing continous streamlines (ignoring the deterministic tractography as it always produces smooth coherent streamlines) but probabilistic tractography offered by Mrtrix is producing discontinuous streamlines though as a whole the streamline bundle produced is correct.

Can you guide me what am I doing wrong while using iFOD1 and iFOD2 for tracking?



It looks to me like the streamlines are terminating at the edges of the bundle, when they encounter regions with no FOD amplitude to support propagation. The probabilistic nature of iFOD1/2 means that each streamline is very likely to hit the edges of such a narrow bundle at some point, so that would lead to a high likelihood of premature streamline termination for any given streamline.

Another observation is that the streamlines seem to terminate with a ‘staircase’ effect at the edge of the bundle, which would indicate that the edges are not being smoothed through interpolation (which should be happening by default here). So this may mean that the non-bundle regions contain not just zeros, but NaNs (not-a-number) - is this the case…? In which case, any contribution from a non-bundle voxel would result in a NaN FOD amplitude, and an immediate streamline termination (certainly for iFOD1 - might not be so severe with iFOD2, but still an issue).

The fact that the Dipy implementation works on these data may indicate that they are using ‘backtracking’ - i.e. stepping back to the previous point on the streamline if they can’t propagate successfully from the current one, in a recursive fashion. I’m not familiar enough with Dipy’s implementation to verify this though - hopefully others can confirm. Note that tckgen also includes such an option, but only in conjunction with the ACT framework.

As to what you can do about this, well this very much depends on what the question is that you’re trying to address with this…


I have cross-checked the FODs and the values are zeros in non-bundle region. The “staircase” effect could be the result of a very stringent mask that I have applied in this case in an attempt to obtain continuous streamlines.

Another thing I observed is that when a short length fiber (regardless of the curvature/shape) is tracked using iFOD1 then there exists streamlines that are continuous (without breaks) along with discontinuous streamlines (I have cross-checked by providing seeding region and -include region options). Is the output of iFOD1 effected by length of fiber?


I was about to mention this as the cause. GIven that this is the case, I’m pretty sure it’ll be the cause as well. If the background of your FOD image is in fact zeros (not NaNs), you’re better off not providing the -mask option, and allow interpolation (with the zero background) to essentially define the smooth edges of the bundle. The FOD amplitude threshold will still prevent streamlines from going all the way into the background. There’s a subtle effect at play that naturally helps here too: as interpolation will naturally provide FODs with smoothly diminishing amplitudes, the closer the tracking algorithm gets to the edge, the FOD threshold on such shrinking FODs (yet with a similar shape) will naturally result in a more narrow “cone” of angles making the (FOD) cut. So naturally, streamlines will be allowed to disperse less. While this is in a way artificially caused by a discrete FOD threshold, its nonetheless a useful effect in practice!

So long story short: try to go without the -mask option for this particular setting, and see if that makes a significant difference. If that doesn’t help, you can always just increase the FOD threshold, or play around with the -power parameter if you’re feeling adventurous. (higher power will result in less dispersion)

Note that a lot of these choices are quite arbitrary. But that is just the nature of tractography, I’m afraid. :man_shrugging: It’s easy for a software package to provide defaults that automatically result in less dispersion, but whether that’s appropriate for real anatomy (rather than a synthetic phantom) is another matter. As people tend to evaluate tractography on synthetic phantoms, I note there may be a bias to tune parameters to perform better on synthetic phantoms. All fun in theory, but of limited relevance for the real applications of tractography. :wink:


In simple cases a high FOD threshold works (e.g. a single fiber) but for complex configurations (crossing fibers) again I am facing the same issue. I can play around with -power to see its impact. Thanks a lot J-Donald Tournier and Thijs Dhollander for helpful comments



I can’t comment on the DiPy tracking algorithm as I don’t know the details, but I’ll raise a couple of possibilities:

  • A parameter that may be influencing the behaviour here is the minimum streamline length. Many softwares have a longer default minimum length compared to MRtrix3 (20-30mm v.s. ~10mm). This will increase the relative visual density between (locally) continuous streamlines and streamline terminations.

  • If the DiPy method you are using is related at all to this paper, the algorithm may be including a step analogous to back-tracking in ACT, that is explicitly forbidding streamlines from terminating partway along the path due to exiting the bundle. Tracking in MRtrix3 without ACT, on the other hand, has no information by which to suspect that streamlines terminating due to leaving this bundle are in any way erroneous, and so they appear in the output track file.
    If this is indeed the case, then the fair comparison would require for MRtrix3 construction of a 5TT image for your phantom, containing CSF surrounding the bundle and GM at the bundle endpoints, and running tckgen using the -act option.


Increasing streamline length and FOD threshold along with back-tracking in ACT improved the continuity of streamlines. Thanks for the help