ZteReadout#
- class pypulseqpp.sequences.ZteReadout[source]#
Bases:
SequenceModuleContinuous-gradient ZTE shell, including its initial and final ramps.
Each view excites on a held gradient, then acquires while slewing toward the next direction. The final view ramps to zero. Generated shells are replayed under shot_rotations; do not rotate individual views again.
Transmit ringdown and receiver dead time leave n_missing central samples. The module reports this gap but does not fill it. Longer TR extends the inter-view slew rather than adding an idle delay.
- Parameters:
system (pypulseqpp.Opts) – System limits.
rf (RfEvent) – A non-selective pulse, short enough that its bandwidth spans the spoke.
fov (float) – Isotropic field of view (m).
matrix (int) – Isotropic matrix size.
directions (array_like, default=None) –
(n_views, 3)unit spoke directions, in the order the shell visits them. When supplied, the four generator arguments below are ignored; by default the shell is generated bycalc_projection_shell. An ordering whose steps vary is accepted, but every turn is allotted the duration of the widest step, so the repetition is timed for the largest step throughout.n_views (int, default=None) – Spokes in one shell. Defaults to a Nyquist-matched sphere,
ceil(pi * matrix ** 2), split evenly between the shots – so raisingn_shotsshortens the shell rather than adding spokes.n_shots (int, default=None) – Shells the sphere is split into, each the same one turned about
zby2 * pi / n_shots. It sets the segment length, and playing only some of the shots is angular undersampling. The default balances the two spacings against each other; seestep_rad.scheme ({'spiral', 'meridian'}, default='spiral') – Shape of the shell. See
calc_projection_shell.oversampling (float, default=2.0) – Radial oversampling: a finer
delta_kalong the same spoke.readout_bandwidth_hz (float, default=62500.0) – Requested ADC sampling rate (Hz).
bandwidth_hzreports the achieved raster-compatible rate. It sets the gradient amplitude too, the spoke being traversed at one sample perdelta_k.tr (float, default=None) – Pulse centre to pulse centre (s).
Noneis as short as the widest turn allows. A longer one is spent slewing more gently, not waiting.dead_time_s (float, default=None) – Receiver dead time after the pulse. Defaults to
system.adc_dead_time; transmit ringdown is added on top either way.labels (sequence of str, default=None) – Counters emitted on the acquisition block.
- Attributes:
rf (RfEvent) – The pulse, delayed by the transmit dead time. Non-selective, and short: it plays on a gradient, so its bandwidth has to cover the whole spoke.
g_ramp (list of GradEvent) – Zero to the first view’s direction, played once at the head of a shell. One event per axis.
g_hold (list of list of GradEvent) – Per view, the plateau the pulse runs on, held through the dead-time gap.
g_read (list of list of GradEvent) – Per view, the plateau under the acquisition and then the turn onto the next view. The last entry slews to zero instead, ending the shell.
adc (AdcEvent) – The acquisition, delayed past the gap.
adc_labels (LabelSetEvent or list of LabelSetEvent) – One per name in
labels; a bare event when there is one.shot_rotations (numpy.ndarray) –
(n_shots, 3, 3), the rotation aboutzthat maps the shell onto each shot’s spoke directions. Published only when the module generated the shell, not whendirectionsis supplied.directions (numpy.ndarray) –
(n_views, 3), the spoke directions of one shell, in play order.step_rad (float) – The widest angle between consecutive views. Every turn between views is allotted the duration of this step, so a shell with equal steps has no unused turn time.
tr (float) – Pulse centre to pulse centre (s).
view_duration (float) – Plateau held for one view, before the turn (s).
n_samples, n_missing, n_nominal (int) – Samples acquired, lost to the gap, and the full half-spoke.
gap (float) – Pulse centre to the first sample (s).
bandwidth_hz (float) – Achieved ADC sampling rate (Hz).
delta_k (float) – Radial k-space step (1/m).
kmax (float) – Half-spoke extent (1/m).
- Raises:
ValueError – If a count is out of range, the pulse is too long for the dwell, the dead-time gap covers the whole spoke, two consecutive views coincide, or the requested TR is shorter than the turn needs.
Examples
>>> import pypulseqpp.sequences as design >>> import pypulseqpp as pp >>> system = pp.Opts() >>> hard = design.NonSelectiveExcitation(system, 4.0, duration_s=10e-6) >>> zte = design.ZteReadout( ... system, hard.rf, fov=0.24, matrix=96, n_views=64, n_shots=256 ... ) >>> len(zte.g_read), zte.shot_rotations.shape (64, (256, 3, 3))
>>> zte.n_samples + zte.n_missing == zte.n_nominal True
Methods
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