mrpro.operators.models.NeuroMRF

class mrpro.operators.models.NeuroMRF[source]

Bases: SignalModel[Tensor, Tensor, Tensor, Tensor | None]

A fingerprinting signal model with inversion preparation.

An extended phase graph (EPG) simulation of a single inversion preperared Fisp block with varying flip angles. Matches the signal model used in [DeliCS] (raw k-space data available at [zenodo]).

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

[DeliCS]

Schauman, S.S., Iyer, S.S., Sandino, C.M. et al. Deep learning initialized compressed sensing (Deli-CS) in volumetric spatio-temporal subspace reconstruction. Magn Reson Mater Phy 38 (2025). https://doi.org/10.1007/s10334-024-01222-w

__init__(flip_angles: Tensor = DELICS_FLIP_ANGLES, echo_time: float = 0.0007, repetition_time: float = 0.012, inversion_time: float = 0.020, n_states: int = 64) None[source]

Initialize the NeuroMRF signal model.

Parameters:
  • flip_angles (Tensor, default: DELICS_FLIP_ANGLES) – Flip angles of the RF pulses in rad. Length determines the number of acquisitions

  • echo_time (float, default: 0.0007) – Echo time in seconds.

  • repetition_time (float, default: 0.012) – Repetition time in seconds.

  • inversion_time (float, default: 0.020) – Inversion time in seconds.

  • n_states (int, default: 64) – Number of EPG states to simulate. Truncating the number of states speeds up simulation at the cost of accuracy.

__call__(m0: Tensor, t1: Tensor, t2: Tensor, relative_b1: Tensor | None = None) tuple[Tensor][source]

Simulate the NeuroMRF signal.

Parameters:
  • m0 (Tensor) – Equilibrium signal / proton density. (complex). Shape (...), for example (*other, coils, z, y, x) or (samples).

  • t1 (Tensor) – Longitudinal (T1) relaxation time in seconds. Shape (...), for example (*other, coils, z, y, x) or (samples).

  • t2 (Tensor) – Transversal (T2) relaxation time in seconds. Shape (...), for example (*other, coils, z, y, x) or (samples).

  • relative_b1 (Tensor | None, default: None) – Relative B1 amplitude scaling factor. If None, no B1 inhomogeneity is applied. Shape (...), for example (*other, coils, z, y, x) or (samples).

Returns:

Simulated MR Fingerprinting signal. Shape (acquisitions ...), for example (acquisitions, *other, coils, z, y, x) or (acquisitions, samples) where acquisitions corresponds to the different acquisitions in the sequence.

forward(m0: Tensor, t1: Tensor, t2: Tensor, relative_b1: Tensor | None = None) tuple[Tensor][source]

Simulate the NeuroMRF signal.

Note

Prefer calling the instance of the NeuroMRF as operator(x) over directly calling this method. See this PyTorch discussion.

__add__(other: Operator[Unpack[Tin], Tout]) Operator[Unpack[Tin], Tout][source]
__add__(other: Tensor | complex) 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], tuple[Tensor, ...]]) 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 | complex) 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)