mrpro.operators.models.MultiEchoSpinEcho
- class mrpro.operators.models.MultiEchoSpinEcho[source]
Bases:
SignalModel[Tensor,Tensor,Tensor,Tensor|None]Multi-echo spin echo (MESE) signal model.
This model simulates a multi-echo spin echo sequence using the extended phase graph (
EPG) formalism.The sequence consists of an excitation pulse followed by a train of refocusing pulses, each producing a spin echo [Meiboom]:
Excitation α₁ α₂ | --TE/2-- | --TE/2-- | --TE/2-- | --TE/2-- | ... Echo 1 Echo 2When all refocusing flip angles are 180° and
relative_b1 = 1, the echo amplitudes follow a pure T2 decay. If the effective flip angles deviate from 180° (reduced flip angles or B1 inhomogeneity), stimulated-echo pathways arise and the signal becomes dependent on both T1 and T2.References
[Meiboom]Meiboom S, Gill D. Modified spin-echo method for measuring nuclear relaxation times. Rev Sci Instrum. 1958
- __init__(flip_angles: Tensor, rf_phases: Tensor, echo_time: float = 0.02, n_states: int = 32) None[source]
Initialize the multi-echo spin echo signal model.
- Parameters:
flip_angles (
Tensor) – Flip angles of the refocusing pulses in rad. Shape(n_echoes,).rf_phases (
Tensor) – RF phases of the refocusing pulses in rad. Shape(n_echoes,).echo_time (
float, default:0.02) – Echo time in seconds.n_states (
int, default:32) – 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 multi-echo spin echo signal.
All input tensors are broadcast together to determine the output shape.
- Parameters:
m0 (
Tensor) – Equilibrium magnetization / proton density. 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 multi-echo spin echo signal. Shape
(echoes, ...), for example(echoes, *other, coils, z, y, x)or(echoes, samples), whereechoescorresponds to the number of refocusing pulses in the echo train.
- forward(m0: Tensor, t1: Tensor, t2: Tensor, relative_b1: Tensor | None = None) tuple[Tensor][source]
Apply forward of MESE.
Note
Prefer calling the instance of the MESE 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)