RadialProjectionReadout#
- class pypulseqpp.sequences.RadialProjectionReadout[source]#
Bases:
SequenceModuleRadial spokes for a spherical projection acquisition.
The loop supplies 3D rotations. Partition encoding is not supported.
The ADC samples the plateau. A slice rephaser may share an axis left invariant by the shot rotation. With explicit=True, angles selects materialised spokes; otherwise the loop supplies rotation extensions.
A compact layout reuses one base arm for any arm index; the acquisition loop supplies its rotation. An explicit layout stores each arm separately.
- Parameters:
system (pypulseqpp.Opts) – System limits.
rf (RfEvent) – The pulse that opens the repetition.
gz (GradEvent, default=None) – A selection gradient played in the same block as
rf.gz_reph (GradEvent, default=None) – The rephaser that unwinds
gz. Played left-aligned in the first block after the pulse – the TE wait when there is one, otherwise alongside the prephaser at the head of the spoke, where it adds no echo time. It is accepted only on an axis that the loop’s rotation leaves unchanged, so an in-plane acquisition takes a rephaser on z and a projection takes none.fov (float) – Isotropic in-plane field of view (m).
matrix (int) – In-plane matrix size. Sets
kmax = matrix / (2 * fov).fov_z (float, int, default=None) – Partition field of view (m) and count. Stacks only.
matrix_z (float, int, default=None) – Partition field of view (m) and count. Stacks only.
te (float, default=None) – Echo time (s) from the RF isodelay to the centre crossing, and repetition time (s).
Noneis as short as possible.tr (float, default=None) – Echo time (s) from the RF isodelay to the centre crossing, and repetition time (s).
Noneis as short as possible.oversampling (float, default=1.0) – Readout oversampling: more samples along the same spoke.
readout_bandwidth_hz (float, default=250000.0) – Requested ADC sampling rate (Hz).
bandwidth_hzreports the achieved raster-compatible rate.spoiling_cycles (float, default=0.0) – Dephasing left at the end of the TR, in cycles across
voxel_size_m. Zero leaves the spoke rewound.voxel_size_m (float, default=None) – Length the spoiling is counted over (m); the resolution by default.
spoiling_axis ({'z', 'x', 'y'}, default='z') – Axis the spoiler is played on.
n_echoes (int, default=1) – Path traversals per repetition, separated by
echo_spacing. Each retraces the same k-space coordinates and carries its ownECOlabel. Non-Cartesian arms use rewinders/prewinders between echoes.explicit (bool, default=False) – Write out one spoke per entry of
anglesinstead of one base spoke.angles (array-like, default=None) – In-plane rotations (rad). Required when
explicitand rejected otherwise; withoutexplicit, the acquisition loop applies the per-shot rotation.labels (sequence of str, default=None) – Counters emitted on the acquisition block.
trigger (event, default=None) – A trigger or digital output armed on the block that opens the readout.
- Attributes:
rf (RfEvent) – The pulse the module was given.
gz (GradEvent) – Its selection gradient, if one was given.
gz_reph (GradEvent) – Its rephaser, if one was given, left-aligned in whichever block follows the pulse.
gx, gy (GradEvent) – The spoke, prephaser through rewinder.
gyis the same waveform at zero amplitude, so a block always has a y slot for a rotation to fill. Lists of one entry per angle whenexplicit.gz_pre, gz_rew (TrapEvent) – Partition encode and its rewinder. Stacks only.
gz_spoil (GradEvent) – End-of-TR spoiler, when
spoiling_cyclesis nonzero.adc (AdcEvent) – The acquisition window, delayed onto the readout plateau.
adc_labels (LabelSetEvent or list of LabelSetEvent) – One per name in
labels; a bare event when there is one.wait_te, wait_tr (DelayEvent) – Present only when a TE or TR longer than the minimum was asked for.
echo_spacing (float) – Time between consecutive echoes (s), zero for a single-echo readout.
- Raises:
ValueError – If a count is out of range,
anglesandexplicitdisagree, or the requested TE or TR is shorter than the module can achieve.
Examples
>>> import pypulseqpp.sequences as design >>> import pypulseqpp as pp >>> system = pp.Opts(max_grad=40, grad_unit="mT/m", ... max_slew=150, slew_unit="T/m/s") >>> hard = design.NonSelectiveExcitation(system, 10.0, 0.5e-3) >>> readout = design.RadialProjectionReadout( ... system, hard.rf, fov=0.24, matrix=64 ... ) >>> int(readout.adc.num_samples) > 0 True
One half-spoke of a spherical projection acquisition, before the loop turns it:
Methods
Block layout of one arm, as the module built it. |
|
Build the module's block layout; implemented by the subclass. |
|
Publish events from the caller's locals and register keyword aliases. |
|
Publish named events without requiring prior block registration. |
Attributes