make_2d_selective_pulse#
- pypulseqpp.make_2d_selective_pulse()[source]#
Design a small-tip 2D-selective pulse on a spiral excitation trajectory.
Each centre-out interleaf is followed by an RF-off retrace to the origin. The envelope uses arc-length weighting, without an additional radial density factor. The closed trajectory requires no separate rephaser.
- Parameters:
flip_angle (float) – Nominal flip angle (rad), reached at the centre of the excited region.
fov (float) – Excitation field of view (m), square; the profile repeats with period
fov.matrix (int) – Excitation grid size, square; sets the trajectory’s k-space extent.
selective_size (float or sequence of float, default=None) – Diameter (m) of the excited disc, one value or one per axis. Half the field of view by default.
target (numpy.ndarray, default=None) – Complex desired profile on the
(matrix, matrix)grid, instead of a disc.n_interleaves (int, default=None) – Spiral arms to play. The default covers excitation k-space at the Nyquist spacing. Fewer arms shorten the pulse and reduce the alias-free excitation FOV.
axes (sequence of str, default=('x', 'y')) – The two gradient channels the trajectory runs on.
b1_maps (array_like, default=None) – Complex B1+ per transmit channel,
(num_channels, matrix, matrix), relative to nominal. When given, the pulse is designed in the spatial domain against them (Grissom et al., Magn Reson Med 56:620, 2006) and returned as a pTx pulse, one waveform per channel, whose small-tip flip isflip_angletimes the target; a single channel is a pulse tailored to that channel’s B1.off_resonance (array_like, default=None) – Off-resonance map,
(matrix, matrix), in Hz, for the spatial-domain design.magnitude_only (bool, default=False) – Fit only the target’s magnitude in the spatial-domain design, leaving its phase free (magnitude least squares).
regularization (float, default=0.0) – Tikhonov weight on the waveforms’ power in the spatial-domain design.
system (pypulseqpp.Opts, default=None) – System limits.
use (str, default='excitation') – Pulseq
usetag.freq_offset (float, default=0.0) – Event offsets in Hz and radians, respectively.
phase_offset (float, default=0.0) – Event offsets in Hz and radians, respectively.
- Returns:
rf (RfEvent) – The pulse, sampled on the gradient raster; a pTx pulse when
b1_mapsis given.gradients (tuple of GradEvent) – One arbitrary gradient per axis with a nonzero waveform, delayed with
rf, to be played in the pulse’s block.rephasers (tuple of TrapEvent) – A trapezoid for each axis left with net area; empty for the closed spiral trajectory.
- Raises:
ValueError – If a size is out of range,
targetdoes not matchmatrix, or the requested profile has no response on the trajectory.
Examples
>>> import numpy as np >>> import pypulseqpp as pp >>> system = pp.Opts(max_grad=40, grad_unit="mT/m", max_slew=150, slew_unit="T/m/s") >>> rf, gradients, rephasers = pp.make_2d_selective_pulse( ... np.deg2rad(30), fov=0.256, matrix=32, selective_size=0.04, system=system ... ) >>> [gradient.channel for gradient in gradients], len(rephasers) (['x', 'y'], 0)
Half the arms is half the pulse:
>>> short, _, _ = pp.make_2d_selective_pulse( ... np.deg2rad(30), fov=0.256, matrix=32, selective_size=0.04, ... n_interleaves=8, system=system, ... ) >>> round(float(short.shape_dur) / float(rf.shape_dur), 3) 0.5
See also
make_spsp_pulseselective in one dimension and in frequency.
sim_rfcheck the profile a pulse actually produces.