I am trying to better understand the differences between the deterministic algorithms and don’t think I completely grasp the difference between MRtrix’s FACT and Tensor_Det. Are they both based on the tensor model? If so, why do they require a different input image?
Thanks!

I’ve been having this conversation with a couple of people recently…

Straight out of the gate, let me say that “FACT” is a problematic term. People will use it as a precise descriptor, not realising that what they refer to as FACT and what somebody else refers to as FACT are “in fact” () two different things. This is borne out in the literature also, not just in conversation.

tckgen -algorithm fact:

Operates on pre-calculated fixels, but does not use the fixel directory format: fixels are stored as N sets of XYZ triplets in each voxel, where N is the maximum number of fixels in any voxel in the image (the number of volumes in the input 4D image is therefore 3N).

Does not perform sub-voxel interpolation. How do you interpolate in between voxels when different voxels may have different numbers of fixels?
(Admittedly, in the specific use case where N=1, it is then technically possible to perform sub-voxel interpolation using the directions stored in the surrounding voxels, as long as antipodal symmetry is accounted for; this just isn’t currently implemented)

tckgen -algorithm tensor_det:

Operates on raw DWI data.

Performs sub-voxel interpolation on the DWI data; the tensor model is then fit to the interpolated DWI data at each streamline vertex in order to calculate the first eigenvector (for direction) and FA (for termination).

I have a question about the FACT algorithm and the ‘angle’ parameter. I was trying to go crazy and generate perfectly straight lines/fibers by using a super small-angle, e.g., 0.1 degrees for the FACT algorithm. However, by restricting angle, there is not any streamline formed. I was guessing the reason would be if no angle is allowed, the determinist method can not work as it should be. However, I’m wondering if there is another way to get straight lines (e.g., only at the first step: find the line/fiber orientation, but don’t change the direction in all the following steps at all).

Yes, as you guessed, if you set the angle to zero, that will terminate any streamline as soon as it starts to turn even a tiny bit, which basically happens every time. So it’ll terminate all streamlines immediately, and none of them will have met the minimum length criterion, so they will end up getting rejected.

I’m not sure what you’re trying to achieve with your second point though. Why would you want streamlines that just continue along a straight line, ignoring the data altogether…?