mrpro.operators.models.WASABITI
- class mrpro.operators.models.WASABITI[source]
Bases:
SignalModel
[Tensor
,Tensor
,Tensor
]WASABITI signal model.
- __init__(offsets: Tensor | float | Sequence[float], recovery_time: Tensor | float | Sequence[float], rf_duration: float | Tensor = 0.005, b1_nominal: float | Tensor = 3.75e-6, gamma: float = GYROMAGNETIC_RATIO_PROTON) None [source]
Initialize WASABITI signal model for mapping of B0, B1 and T1 [SCH2023].
- Parameters:
offsets (
Tensor
|float
|Sequence
[float
]) – frequency offsets [Hz] with shape(offsets, ...)
recovery_time (
Tensor
|float
|Sequence
[float
]) – recovery time between offsets [s] with shape(offsets, ...)
rf_duration (
float
|Tensor
, default:0.005
) – RF pulse duration [s]b1_nominal (
float
|Tensor
, default:3.75e-6
) – nominal B1 amplitude [T]gamma (
float
, default:GYROMAGNETIC_RATIO_PROTON
) – gyromagnetic ratio [Hz/T]
References
[SCH2023]Schuenke P, Zimmermann F, Kaspar K, Zaiss M, Kolbitsch C (2023) An Analytic Solution for the Modified WASABI Method: Application to Simultaneous B0, B1 and T1 Mapping and Correction of CEST MRI, Proceedings of the Annual Meeting of ISMRM
- __call__(b0_shift: Tensor, relative_b1: Tensor, t1: Tensor) tuple[Tensor] [source]
Apply the WASABITI (Water Shift and B1 and T1) signal model.
- Parameters:
b0_shift (
Tensor
) – B0 field inhomogeneity or off-resonance shift in Hz. Shape(...)
, for example(*other, coils, z, y, x)
or(samples)
.relative_b1 (
Tensor
) – Relative B1 amplitude scaling factor (actual B1 / nominal B1). 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)
.
- Returns:
Signal calculated for each frequency offset and recovery time. Shape
(offsets ...)
, for example(offsets, *other, coils, z, y, x)
, or(offsets, samples)
whereoffsets
is the number of frequency offsets.
- forward(b0_shift: Tensor, relative_b1: Tensor, t1: Tensor) tuple[Tensor] [source]
Apply forward of WASABITI.
Note
Prefer calling the instance of the WASABITI 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)