SmsExcitation

Contents

SmsExcitation#

class pypulseqpp.sequences.SmsExcitation[source]#

Bases: RfModule

SLR slice excitation modulated into simultaneous spectral bands.

Slice centre spacing is converted to frequency using the selection gradient. Band phases control the combined peak B1.

Parameters:
  • system (pypulseqpp.Opts) – System limits.

  • flip_angle_deg (float) – Nominal flip angle (degrees), per band.

  • thickness_m (float) – Slice thickness (m).

  • slice_gap_m (float) – Centre-to-centre spacing between excited slices (m).

  • n_bands (int, default=2) – Slices excited at once.

  • duration_s (float, default=0.003) – Pulse duration (s).

  • phases ({'quadratic'} or sequence of float, default='quadratic') – Per-band phase (rad). 'quadratic' spreads the peak; None leaves every band in phase, which is the worst case for peak B1.

  • rephase (bool, default=True) – Include a slice rephaser.

  • time_bw_product (float, default=4.0) – Time-bandwidth product of the underlying slice profile.

  • axis ({'z', 'x', 'y'}, default='z') – Selection axis.

  • use (str, default='excitation') – Pulseq RF-use tag, used by trajectory integration.

Attributes:
  • rf (RfEvent) – The modulated pulse.

  • gz (TrapEvent) – The selection gradient.

  • gz_reph (TrapEvent) – Its rephaser, only when rephase=True.

  • band_offsets_hz (numpy.ndarray) – Band frequency offsets (Hz), symmetric about zero.

  • band_positions_m (numpy.ndarray) – Slice centre positions (m).

  • peak_ratio (float) – Peak B1 relative to the single-band pulse the bands were made from.

Raises:

ValueError – If a size is not positive, n_bands is below one, or axis is not a gradient channel.

Examples

>>> import pypulseqpp.sequences as design
>>> import pypulseqpp as pp
>>> system = pp.Opts(max_grad=40, grad_unit="mT/m", max_slew=180, slew_unit="T/m/s")
>>> sms = design.SmsExcitation(
...     system, 60.0, thickness_m=3e-3, slice_gap_m=24e-3, n_bands=3
... )
>>> sms.band_positions_m.round(6).tolist()
[-0.024, 0.0, 0.024]
>>> stacked = design.SmsExcitation(
...     system, 60.0, thickness_m=3e-3, slice_gap_m=24e-3, n_bands=3, phases=None
... )
>>> round(stacked.peak_ratio, 1), bool(sms.peak_ratio < stacked.peak_ratio)
(3.0, True)

Three slices from one pulse, at the gap they were designed for:

../_images/pypulseqpp-sequences-SmsExcitation-1_00.svg

(svg)#

../_images/pypulseqpp-sequences-SmsExcitation-1_01.svg

(svg)#

Methods

init_module

Build the module's block layout; implemented by the subclass.

publish

Publish events from the caller's locals and register keyword aliases.

register

Publish named events without requiring prior block registration.

sim_rf

Simulate this module's pulse across off-resonance.

Attributes

blocks

Return block tuples in play order, retaining the original event objects.

duration

Duration of the module in seconds.

seq

Sequence holding the module's construction-time block layout.