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
SignalModelbased 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 acquisitionsecho_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)whereacquisitionscorresponds 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*xif 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)