Week 12 - Aug 15th, 2023

Published: 08/15/2023

What I did this week

According to last week's situation, I was trying to make the ``test_cti_fits`` function work as well as the ``test_split_cti_params`` function. This week I figured out the problem with these functions and was able to fix it. The major problem was occurring while I was trying to compare the parameters. Firstly, I started by removing all the extra fit methods in common_fit_method list such as NLS, CLS and CWLS as I realized that we won't immediately be needing an extra multi_tensor_fit function in CTI.
I also realized that our fit method needs to accommodate multiple voxels, so I had to add "@multi_voxel_fit" at the top of that function. 
Major fact that I realized was that the already implemented ``ls_fit_cti`` function was not implemented incorrectly. The cti_return (obtained directly from ``ls_fit_cti``) was not matching cti_params because of the eigen value decomposition. Since the total diffusion tensor in my test was isotropic, when the tensor was decomposed inside the function ``ls_fit_cti``, it created a different eigenvector due to floating point precision. So, I instead tried to compare the more broken down variables, hence I compared the evals from cti_params to evals of cti_return, and the same for covariance tensor elements and kurtosis tensor elements. And on doing this the variables matched perfectly.
Also, last time I had the tests and functions for axial, radial, mean and apparent kurtosis which are basically different measures derived from the diffusion kurtosis tensor, and they help in providing different perspectives on the microstructural complexity of the tissue. So, since last time the fit function itself could not be tested, consequently I couldn't run tests for these functions as well. So, after the tests for the fit function were working, I ran tests for these functions and realized some errors. I fixed the errors by having to take care of the implementation part of these functions as well as changing direction assertion to np.allclose as we also need to take care of the floating point precision detail. 
However, for implementing tests for the sources of kurtosis, we'd previously decided that we'd take QTI tests into consideration as k_bulk appeared similar to k_iso and k_shear seemed similar to k_aniso, but upon careful examination we realized that this was not actually the case. This is because in case of QTI, when they're calculating D from self.params, they already have the top 6 elements in voigt notation. We can also observe that when they convert ``from_3x3_to_6x1``, they're multiplying some factors. So, the end point being that "D" in our case and the diffusion tensor "D" in their case is different. And this matters because they're using D to calculate k_bulk (line 1059 in QTI.py) and we're using it to calculate K_iso. Therefore I couldn't use their tests anymore. So, the only solution now in order to be able to implement tests for the sources of kurtosis is to look at the actual paper and implement their ground truth values. 
This week I also spent time creating a basic draft of the CTI simulation. 

What is coming up Next Week

This week I intend on making sure that the tests for the sources of kurtosis are implemented properly and they're working as expected. 
Also, the real life data when run on our model at the moment is giving some overflow errors. I intend on working towards this as well. 
I'm also going to make sure that at the end of this week, I'm able to create a good near finish draft of the CTI simulation.