mrpro.operators.models.CardiacFingerprinting

class mrpro.operators.models.CardiacFingerprinting[source]

Bases: SignalModel[Tensor, Tensor, Tensor]

Cardiac MR Fingerprinting signal model.

This model simulates a cardiac MR fingerprinting sequence as described in [HAMI2017] and [HAMI2020] using the extended phase graph (EPG) formalism.

It is a three-fold repetition of

Block 0          Block 1          Block 2          Block 3          Block 4
R-peak           R-peak           R-peak           R-peak           R-peak
|----------------|----------------|----------------|----------------|----------------
 [INV 30ms][ACQ]           [ACQ]   [T2-prep][ACQ]   [T2-prep][ACQ]  [T2-prep][ACQ]

Note

This model is on purpose not flexible in all design choices. Instead, consider writing a custom SignalModel based on this implementation if you need to simulate a different sequence.

References

[HAMI2017]

Hamilton, J. I. et al. (2017) MR fingerprinting for rapid quantification of myocardial T1, T2, and proton spin density. Magn. Reson. Med. 77 http://doi.wiley.com/10.1002/mrm.26216

[HAMI2020]

Hamilton, J.I. et al. (2020) Simultaneous Mapping of T1 and T2 Using Cardiac Magnetic Resonance Fingerprinting in a Cohort of Healthy Subjects at 1.5T. J Magn Reson Imaging, 52: 1044-1052. https://doi.org/10.1002/jmri.27155

__init__(acquisition_times: Tensor | Sequence[int] = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), echo_time: float = 0.0015, repetition_time: float = 0.005, t2_prep_echo_times: tuple[float, float, float] = (0.03, 0.05, 0.08)) None[source]

Initialize the Cardiac MR Fingerprinting signal model.

Parameters:
  • acquisition_times (Tensor | Sequence[int], default: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)) – Times of the acquisistions in s. Either 15 values (the first acquisition of each block) or 705 values for all acquisitions. In both cases only the time of the first acquisition of each block will be used to calculate the delays.

  • echo_time (float, default: 0.0015) – TE in s

  • repetition_time (float, default: 0.005) – TR in s

  • t2_prep_echo_times (tuple[float, float, float], default: (0.03, 0.05, 0.08)) – Echo times of the three T2 preparation blocks in s

__call__(*args: Unpack[Tin]) Tout[source]

Apply the forward operator.

For more information, see forward.

Note

Prefer using operator_instance(*parameters), i.e. using __call__ over using forward.

forward(m0: Tensor, t1: Tensor, t2: Tensor) tuple[Tensor][source]

Simulate the Cardiac MR Fingerprinting signal.

Parameters:
  • m0 (Tensor) – steady state magnetization (complex)

  • t1 (Tensor) – longitudinal relaxation time T1 in s

  • t2 (Tensor) – transversal relaxation time T2 in s

Returns:

Simulated Cardiac MR Fingerprinting signal with the different acquisitions in the first dimension.

__add__(other: Operator[Unpack[Tin], Tout]) Operator[Unpack[Tin], Tout][source]
__add__(other: Tensor) Operator[Unpack[Tin], tuple[Unpack[Tin]]]

Operator addition.

Returns lambda x: self(x) + other(x) if other is a operator, lambda x: self(x) + other*x if other is a tensor

__matmul__(other: Operator[Unpack[Tin2], tuple[Unpack[Tin]]]) Operator[Unpack[Tin2], Tout][source]

Operator composition.

Returns lambda x: self(other(x))

__mul__(other: Tensor | complex) Operator[Unpack[Tin], Tout][source]

Operator multiplication with tensor.

Returns lambda x: self(x*other)

__radd__(other: Tensor) Operator[Unpack[Tin], tuple[Unpack[Tin]]][source]

Operator right addition.

Returns lambda x: other*x + self(x)

__rmul__(other: Tensor | complex) Operator[Unpack[Tin], Tout][source]

Operator multiplication with tensor.

Returns lambda x: other*self(x)