This repository contains an implementation of the partially-matrix free, inexact Gauss-Newton algorithm that can be used for MR-STAT. It use a 2D numerical brain phantom to generate synthetic data from which it then estimates
- This codebase uses an older version of BlochSimulators (v0.2.7), make sure to
instantiate
the environment as defined in the manifest. - This codebase assumes a CUDA device is available.
- Only the
main.jl
needs be run. It loads external packages and several functions, assembles a FISP sequence, a Cartesian trajectory and a numerical phantom (including spatial coordinates and coil sensitivity profiles). It generates (noiseless) data. An MR-STAT reconstruction is then performed on the generated data. - The objective function is defined in
utils/objective.jl
. This function is also used by the non-linear solver to calculate the gradient of the objective and the (Gauss-Newton approximation to) the Hessian. - Bloch simulations (in case of FISP: EPG simulations) are performed using the
BlochSimulators.jl
package. - Partial derivatives are calculated using a finite difference approach, see
DerivativeOperations/simulate_derivatives.jl
. - The matrix-vector products with the Jacobian matrix and its adjoint are implemented in a partially matrix-free method, see
DerivativeOperations/Jv.jl
andDerivativeOperations/Jᴴv.jl
. - The non-linear solver (Trust Region Reflective with Gauss-Newton approximation to the Hessian) is contained in the
TrustRegionReflective
submodule.