# Imaging.m

The Fokker-Planck imaging simulation context that generates the Hamiltonian, the relaxation superoperator, the kinetics superoperator, the Fokker-Planck spatial dynamics generator (including diffusion and flow), gradient operators, and passes all of that to the pulse sequence, which should be supplied as a handle. Syntax:

           answer=imaging(spin_system,pulse_sequence,parameters)


where pulse sequence is a function handle to one of the pulse sequences located in the experiments directory, and parameters is a structure with the following subfields:

  parameters.spins   - a cell array giving the spins that
the pulse sequence involves, e.g.
{'1H','13C'}

parameters.offset  - a cell array giving transmitter off-
sets in Hz on each of the spins listed
in parameters.spins array

parameters.u       - X components of the velocity vectors
for each point in the sample, m/s

parameters.v       - Y components of the velocity vectors
for each point in the sample, m/s

parameters.w       - Z components of the velocity vectors
for each point in the sample, m/s

parameters.diff    - diffusion coefficient or 3x3 tensor, m^2/s
for situations when this parameter is the
same in every voxel

parameters.dxx     - Cartesian components of the diffusion
parameters.dxy       tensor for each voxel of the sample
...
parameters.dzz

parameters.dims    - dimensions of the 3D box, meters

parameters.npts    - number of points in each dimension
of the 3D box

parameters.deriv   - {'fourier'} uses Fourier diffe-
rentiation matrices; {'period',n}
requests n-point central finite-
difference matrices with periodic
boundary conditions


Three types of phantoms must be specified. The relaxation theory phantom contains relaxation superoperators and their coefficients in each voxel, specified in the following way:

                parameters.rlx_ph={Ph1,Ph2,...,PhN}
parameters.rlx_op={R1,R2,...,RN}


where PhN have the same dimension as the sample voxel grid and RN are relaxation superoperators. The initial condition phantom reflects the fact that different voxels might start off in a different spin state. It must be specified in the following way:

                parameters.rho0_ph={Ph1,Ph2,...,PhN}
parameters.rho0_op={rho1,rho2,...,rhoN}


where PhN have the same dimension as the sample voxel grid and rhoN are spin states obtained from state() function. The detection state phantom reflects the fact that different voxels might be detected at different angles and with different sensitivity. It must be specified in the follo wing way:

                parameters.coil_ph={Ph1,Ph2,...,PhN}
parameters.coil_op={rho1,rho2,...,rhoN}


where PhN have the same dimension as the sample voxel grid and rhoN are spin states obtained from state() function.

The pulse sequence must use the following syntax:

    answer=pulse_sequence(spin_system,parameters,H,R,K,G,F);


where H is the Hamiltonian commutation superoperator, R is the relaxation superoperator, K is the kinetics superoperator, G is a cell array of three gradient operators normalized to 1 Tesla/m, and F is the diffusion and flow superoperator.

The context function sets the following fields inside the parameters structure that is passed to the pulse sequence:

    parameters.rho0 - the initial condition in the Fokker-Planck space

parameters.coil - the detection state in the Fokker-Planck space.


Note: the direct product order is Z(x)Y(x)X(x)Spin, this corresponds to a column-wise vectorization of a 3D array with dimensions ordered as [X Y Z].

Version 2.1, authors: Ahmed Allami, Ilya Kuprov