Specific absorption rate#
TL;DR
check_sar()computes time-averaged local and global SAR in W/kg from a virtual-observation-point model and compares them withlocal_limitandglobal_limit, by default 10 W/kg and 3.2 W/kg, the IEC 60601-2-33 normal-mode head values. The check does not use the gradient system limits.Channel \(c\) is driven with \(v_c(t) = d_c\,s_c\,b_c(t)\), the RF waveform in Hz scaled by
drive_per_hzand the block’s RF shim. Local SAR in a window \(W\) is the largest time-averaged quadratic form over the VOPs times the model’s safety factor, \(M \max_k \mathrm{SAR}_k(W)\).The averaging windows are the repetitions detected from the block definitions, reported as
tr_sizeblocks, or the whole sequence when its blocks do not divide into repetitions. The check does not aggregate the per-window values over a regulatory averaging interval such as the 6-minute interval of IEC 60601-2-33.With
reference, the report addslocal_to_head, the sequence’s local SAR over the reference’s global SAR, andglobal_sar_ratio, global SAR over the reference’s body model by body model, each with an energy form. At the drive scale where the reference meets the global limit, the two ratios give the sequence’s local and global SAR in units of that limit. The scale ofdrive_per_hzand of the matrices cancels; relative channel gains and the safety factor do not.A
Trueresult states only that the computed window-averaged SAR values do not exceed the supplied limits under the stated VOP model and drive calibration.example_vops()is a synthetic model for demonstration only.
RF transmission deposits energy in tissue. The specific absorption rate (SAR,
W/kg) is regulated as a global value over the exposed mass and a local
value over 10 g of tissue, each averaged over a stated time and bounded by
IEC 60601-2-33 according to the operating mode.
check_sar() computes time-averaged local and global
SAR from a virtual-observation-point model and compares them with the
local_limit and global_limit arguments. The check does not use the
gradient system limits.
Virtual observation points#
For a transmit array with \(N_c\) channels driven by a phasor vector \(\mathbf{v}\), local SAR at position \(\mathbf{r}\) is a Hermitian quadratic form,
with one matrix \(Q\) per position from an electromagnetic simulation on a body model. Virtual observation points (VOPs) compress these matrices into a small set \(\{Q_k\}\) whose largest value bounds the largest value over the body model:[1] each \(Q_k\) dominates a cluster of the averaged matrices, so for every drive
VopModel holds the \((N, N_c, N_c)\) VOP stack, in
W/kg per unit channel drive squared, optional global matrices, one or one per
body model, and the file’s metadata, whose
safety_factor \(M \ge 1\) multiplies every local SAR for what the model does
not carry, such as positioning, anatomy outside its population and the coil
model’s error against measurement. read_vops() reads
them from a .mat or .npz file, MARIE’s point-first stack and MATLAB’s
channel-first one alike, including the population file that mariepy’s
vop.write stores.
example_vops() returns a synthetic eight-channel model
of a loop array around a uniform cylinder, with no tissue, coil coupling or
conservative field, for demonstration only.
Channel drive and time average#
An RF event states its amplitude in Hz of \(B_1^+\). The conversion to channel
drive is a property of the transmit chain and loading, and is supplied as
drive_per_hz, one value or one per channel, in the drive unit of the VOPs.
Channel \(c\) is driven with
where \(d_c\) is drive_per_hz, \(b_c\) the RF waveform in Hz resampled every
microsecond as calc_rf_power() does, and \(s_c\) the block’s
RF shim, or default_shim for a single-channel pulse without one. A
single-channel pulse is played as the same waveform on every channel. For each
averaging window \(W\) of duration \(T_W\),
and global SAR is the same integral with the global matrix, or the largest over the body models where the file carries one matrix per model.
Averaging windows#
check_sar evaluates RF energy over the repetitions
repetition() detects from the sequence’s block
definitions, reported as tr_size blocks: consecutive windows of tr_size
blocks from the first block, or the whole sequence as one window when its
blocks do not divide into repetitions. A TRSize definition the sequence
records is used when the blocks repeat with it.
The result is True when every window’s local SAR is at most local_limit
and, with a global matrix, every window’s global SAR is at most global_limit.
The defaults, 10 W/kg and 3.2 W/kg, are the IEC 60601-2-33 normal-mode head
values.
The report states every window’s first and last block, duration, local SAR, VOP index, global SAR and the body model that global SAR belongs to. These per-window quantities may subsequently be aggregated over a regulatory averaging interval, such as the 6-minute interval of IEC 60601-2-33; the check itself does not perform that aggregation.
Comparison with a reference sequence#
A scanner controls the SAR of a pulse it knows, such as a hard pulse in the
coil’s circularly polarised mode, by its own prediction of that pulse’s global
SAR: at its shortest repetition time, the reference deposits at most the
global limit \(L_G\). That fixes the drive scale of the model without a power
calibration, and reference compares a sequence with such a pulse at that
scale. Played under the same model, drive and default shim, the reference
gives its global SAR \(\mathrm{SAR}^{\mathrm{ref}}_{G_b}\) in each body model,
in its window of largest global SAR, of duration \(T^{\mathrm{ref}}\). The report
adds
as local_to_head and global_sar_ratio, and the same with each window’s term
times \(T_W / T^{\mathrm{ref}}\) as local_to_head_energy and
global_energy_ratio; windows.local_to_head and windows.global_ratio hold
each window’s term. The reference reaches the global limit at the largest drive
in the body model where it deposits least, so the smallest reference SAR over
the models sets the local term. The global matrices are not compressed, and a
subject’s global SAR is that of one body, which the largest over all bodies on
each side does not bound, so the global term is taken body model by body model.
At the drive scale that holds the reference at \(L_G\), a window’s peak local SAR is at most \(r_{\mathrm{local}} L_G\), safety factor included. For a reference lasting its shortest repetition time, the sequence meets both limits when each of its repetitions lasts at least
with \(L_L\) the local limit and \(r^{E}\) the energy forms. The bound rests on the
scanner’s prediction for the reference not falling below the reference’s true
global SAR, and on the VOPs and the safety factor bounding local SAR; it uses
no local SAR of the reference. The scale of drive_per_hz and of the matrices
cancels in every ratio; relative channel gains do not, and neither does the
safety factor, which multiplies the sequence’s side only. The report of an
earlier call on the reference can stand for it.
Limitations#
The estimate covers the RF energy of the sequence’s own waveforms in a stated
VOP model and drive calibration. It does not cover RF coil heating, gradient
heating, the scanner’s own assessment before a scan or transmit monitoring, and it
makes no statement about a particular subject. A True result states only that
the computed window-averaged SAR values do not exceed the supplied limits under
that model and calibration.
See also#
check_sar(),read_vops()andexample_vops()— the calls.calc_rf_power()andcalc_rf_power()— RF power in Pulseq’s Hz units.Constraint checks — running the check over a sequence and reading its report.