EPG Operators#

Defined in sycomore/epg/operators.h

std::array<Complex, 9> pulse_single_pool(Real angle, Real phase)#

Return the row-wise matrix corresponding to the single-pool EPG pulse operator.

std::array<Complex, 18> pulse_exchange(Real angle_a, Real phase_a, Real angle_b, Real phase_b)#

Return the row-wise matrix corresponding to the two-pools exchange EPG pulse operator.

std::array<Complex, 10> pulse_magnetization_transfer(Real angle_a, Real phase_a, Real saturation)#

Return the row-wise matrix corresponding to the two-pools magnetization transfer EPG pulse operator.

std::pair<Real, Real> relaxation_single_pool(Real R1, Real R2, Real duration)#

Return the scalars associated respectively with relaxation of the \(\tilde{F}\) states and \(\tilde{Z}\) states.

std::tuple<std::array<Complex, 8>, std::array<Real, 4>, std::array<Real, 2>> relaxation_exchange(Real R1_a, Real R2_a, Real R1_b, Real R2_b, Real k_a, Real k_b, Real delta_b, Real M0_a, Real M0_b, Real duration)#

Return the exchange-relaxation matrices: non-zero terms of \(\Xi_T\) (row-major), row-major \(\Xi_L\), and \((\Xi_L - I) \Lambda_L^{-1} C\).

std::tuple<Real, std::array<Real, 4>, std::array<Real, 2>> relaxation_magnetization_transfer(Real R1_a, Real R2_a, Real R1_b, Real k_a, Real k_b, Real M0_a, Real M0_b, Real duration)#

Return the magnetization transfer relaxation matrices: \(\Xi_T = e^{-R_{2a} \tau}\), row-major \(\Xi_L\) and \((\Xi_L - I) \Lambda_L^{-1} C\).

std::array<Complex, 8> relaxation_and_exchange_T(Real R2_a, Real R2_b, Real k_a, Real k_b, Real delta_b, Real duration)#

Return the non-zero terms of \(\Xi_T\) (row-major)

std::array<Real, 4> relaxation_and_exchange_L(Real R1_a, Real R1_b, Real k_a, Real k_b, Real duration)#

Return \(\Xi_L\) (row-major)

std::array<Real, 2> relaxation_and_exchange_recovery(Real R1_a, Real R1_b, Real k_a, Real k_b, Real M0_a, Real M0_b, std::array<Real, 4> const &Xi_L)#

Return \((\Xi_L - I) \Lambda_L^{-1} C\).

std::array<Real, 4> expm(std::array<Real, 4> const &A)#

Closed-form 2x2 matrix exponential.

template<typename T>
std::tuple<T, T, T> diffusion(Real D, Real duration, T const &k, Real delta_k)#

Return the scalars associated respectively with diffusion of respectively the \(\tilde{F}(k)\), \(\tilde{F}^*(-k)\), and \(\tilde{Z}(k)\) states.

std::pair<Complex, Complex> phase_accumulation(Real angle)#

Return the rotation expressed as a complex exponential associated with phase accumulation of respectively the \(\tilde{F}(k)\) and \(\tilde{F}^*(-k)\) states.

template<typename TReal, typename TComplex>
std::tuple<TComplex, TComplex, TComplex> bulk_motion(Real v, Real duration, TReal const &k, Real delta_k)#

Return the phase accumulation expressed as a complex exponential associated with bulk motion of respectively the \(\tilde{F}(k)\), \(\tilde{F}^*(-k)\), and \(\tilde{Z}(k)\) states.

Parameters:

v – projection of the velocity vector on the axis associated with k.