KomaMRI.jl icon indicating copy to clipboard operation
KomaMRI.jl copied to clipboard

created BlochVoxelDictSimulation simulation method

Open depedraza opened this issue 3 months ago • 5 comments

Implementation of a dictionary simulation method for MRF applications. The implementation in BlochVoxelDictSimulation.jl relies on the usage of the phantom defined in T1T2_voxel_phantom.jl in order to perform the simulations. Both files will be described as follows:

  1. BlochVoxelDictSimulation.jl: simulation method that performs the simulation of a sequence assuming an input that corresponds to an array of phantom objects. In particular, it uses a concatenation (by summing over a list of phantoms) of several T1T2_voxel_phantom.jl instances in order to simulate the MR signal for each of the instances (i.e. voxels). It assumes that each voxel has a unique ID value, that allows the method to perform the assignment of the signal per voxel, so when the contribution from each thread is summed in order to retrieve the signal, there is no "cross-talking" between different voxels, as it may happen that spins from different voxels are assigned to a same particular thread. The method returns a dictionary with size $N_{combinations} \times N_{timepoints}$, where each combination corresponds to a voxel phantom object with a particular $T_{1}-T_{2}$ combination (and a unique ID) and the timepoints correspond to the number of readouts performed per TR, that is, the amount of shots acquired through all the simulated sequence, considering an MRF framework. It only works on CPU for now as some issues need to be solved so the method is also GPU compatible.

  2. T1T2_voxel_phantom.jl: defines a phantom object that can receive 3 input parameters, a $T_{1}$ and a $T_{2}$ value (Float, in ms) and a unique ID (Int) that is assigned to each of the spins of the voxel, under the Dλ1 parameter (will change in the future). This ID is used by the simulation method described above in order to properly identify and assign the signals from the spins to its corresponding phantom object. By the moment, the voxel dimensions are set for a particular MRF application context ($2 \times 2 \times10$ $mm^{3}$) and the number of spins per voxel is currently defined as $1\times 1 \times 101$, which will be probably modified so that these parameter can be user defined.

depedraza avatar Mar 29 '24 02:03 depedraza