How does iFOD1/2 internally handle input step size and curvature constraints?

Dear developers,

I would be glad if you can clarify a question about iFOD1/2 algorithms’ handling input step size and curvature constraints. Based on your tests/experiments, do the streamlines become increasingly random with smaller step size? If so, is there a rescaling of the curvature constraint done with the step size in order to avoid this? Or, is the curvature constraint constant throughout tracking and it is computed directly as a function of the input step size and angle threshold without any internal adjustments?

Thank you for your help,


Welcome Baran!

(If you ever want to help put PTT into MRtrix3 let me know :stuck_out_tongue:)

@jdtournier did a basic report on the influence of streamlines tractography step size on the magnitude of probabilistic streamlines dispersion as a function of length back at ISMRM in 2011: “Effect of Step Size on Probabilistic Streamlines: Implications for the Interpretation of Connectivity Analyses”. Modifying the curvature constraint isn’t the ideal way to address this, as for smaller values you end up only sampling from a very narrow window of the FOD lobe and it can look almost flat, and for larger values there can be no influence beyond a certain point (in single-fibre regions at least) because the FOD amplitude is sub-threshold outside a certain angle anyway. We actually went the other way as of version 3.0.0 whereby the maximum angle per step is now a fixed value selected for each algorithm, and thus is independent of step size, meaning that we’re not actually enforcing a fixed minimal radius of curvature any more (central discussion on GitHub).

There’s an extra parameter here not reported in the iFOD2 ISMRM abstract from 2010. The FOD power directly influences the magnitude of probabilistic streamline dispersion. @jdtournier and I have had plenty of discussions about how a reasonable default value might be set, but there are multiple avenues for derivation that produce different solutions, so we keep putting it off…


Hi Rob,

(Sounds great! I would be very happy if we can put PTT into MRtrix3! More below…)

Thank you very much for the detailed answer.

Judging from the code, I was suspecting that this was the case. The link for your previous discussions on default values is very informative. Also @jdtournier’s paper is a great reference for iFOD1 - I will certainly use it.

About the power parameter - @jdtournier also suggested (during my ISMRM talk, the previous year) to modify power instead of step size or sample in order to modify streamline dispersion. Basically the “sharpness” of FOD lobes determines the dispersion and similar effect could be achieved outside the tracking algorithm by modifying the FOD image (maybe you already thought about this to further speed up iFOD2). Nevertheless, my point is I think the default power value should also depend on the SH order in addition to nsamples.

I read that this was mentioned by you before also, but it would indeed be great if there is a more comprehensive paper about iFOD2. Especially it is hard to follow the calibration part from the code.


For PTT (actually starting from its prefecessor in Aydogan, MICCAI, 2016), we started coding everything from the beginning in order to have an algorithm development platform. So I implemented SH expansions, interpolations and etc. in MATLAB. Computing one streamline was taking tens of seconds :slight_smile: I then had to gradually convert modules to mex codes which really sped things up. At that point, we had a fast and flexible platform and we decided to share our code. So I thought, “let me spend the next month or two to write everything in C/C++, I already have most of the stuff in mex anyways”, then after 2 years, Trekker was ready :slight_smile: Well, we are extremely happy and proud that we could put it together at the end. We are now able to write real-time tractography applications with PTT. As you would also agree, without your own code, it would have been difficult to implement algorithms/applications. However, for implementation and sharing sake, it would have been much easier for us to use an existing platform like MRtrix, Dipy, etc. It is never too late though, I would be very happy if we can put PTT into MRtrix3!

1 Like

Maybe: while it’s true that streamline dispersion will vary as a function of lmax, one could alternatively argue that the precision of fibre orientation dispersion estimation is itself a function of lmax, and therefore probabilistic streamlines should disperse more at lower lmax in order to reflect the increased uncertainty. That’s the trouble with this topic: one can argue strongly for contrary cases…

Yes it would; but I think @jdtournier would confirm that it’s primarily been the ambiguity about the FOD power parameter and how it should be defined that has precluded such a publication. Having said that, your enquiry inspired me to do a little experimentation to see if we can finally come up with a definitive answer for what to do about it, so watch this space. :smiling_imp:

You and me both. Maybe I still have somewhere that photo of a piece of paper with @jdtournier’s mathematical derivation on it… :rofl:

Excellent! I’ve thought about this since seeing your talk at ISMRM last year, but it’s probably a bit more work than an evening’s coding. I’ve listed on GitHub where we can potentially have more technical discussions.


Agreed. All sounds good!


Sorry about the radio silence on this issue – I’ve been away lately. Also, there’s the general shame of not having published or done anything about the issues @rsmith has outlined… :pleading_face:

I’ll try to make time to investigate properly. But right now, focus is on recording myself while explaining statistics to my computer (for online delivery of my course module).

No worries. I actually got a very good answer to my original question from @rsmith quite timely.

Good luck with your course!