Spiral

Contents

Spiral#

class pypulseqpp.sequences.Spiral[source]#

Bases: NonCartesianGradient

Constant-, variable- or dual-density spiral base interleaf.

design_interleaves and the density parameters set the pitch as in pypulseqpp.calc_spiral_trajectory(); the caller may acquire any number of rotated copies. direction is "outward" (centre to edge, with rewinders), "inward" (edge to centre, with prewinders) or "in_out" (edge through centre to edge, with both). Each half of an "in_out" arm is designed for twice the interleaf counts, so one arm samples like two outward ones.

The dwell is 1 / bandwidth_hz_px (Hz) floored to the ADC raster. Where the time-optimal arm would put adjacent samples more than 1 / (oversamp * fov) apart at that dwell, the arm is slowed rather than the bandwidth raised. The ADC fills the arm with whole samples.

Parameters:
  • system (Opts) – System limits.

  • fov (float) – Isotropic field of view (m).

  • matrix (int) – Isotropic matrix size.

  • design_interleaves (int) – Interleaf count the pitch is designed for, not the number of arms acquired.

  • direction ({'outward', 'inward', 'in_out'}, default='outward') – Traversal, as above.

  • density ({'constant', 'variable', 'dual'}, default='constant') – Constant pitch, a radial power-law transition, or a logistic transition.

  • inner_design_interleaves (float, default=None) – Local pitch at the centre and at the edge.

  • outer_design_interleaves (float, default=None) – Local pitch at the centre and at the edge.

  • variable_density_power (float, default=2.0) – Exponent of the normalised radius, for variable density.

  • transition_radius (float, default=0.5) – Normalised radius and logistic steepness of the dual-density transition.

  • transition_speed (float, default=12.0) – Normalised radius and logistic steepness of the dual-density transition.

  • num_points (int, default=1024) – Path samples given to the solver, not ADC samples.

  • bandwidth_hz_px (float, default=250000.0) – Requested 1 / dwell (Hz).

  • oversamp (float, default=1.0) – ADC oversampling; tightens the step limit.

  • axes (tuple[str, str], default=('x', 'y')) – Channels for the path’s two components.

  • solver_oversampling (int, default=8) – Path-resampling factor of the time-optimal solver.

  • derate (bool, default=True) – Apply pypulseqpp.apply_system_derates() first.

Raises:

ValueError – If direction is unknown, axes does not name two distinct channels, or a size is out of range.

Examples

>>> import pypulseqpp.sequences as design
>>> import pypulseqpp as pp
>>> arm = design.Spiral(pp.Opts(), 0.22, 64, 8)
>>> arm.axes, arm.has_prewinder, arm.has_rewinder
(('x', 'y'), False, True)

One arm and the waveform that traverses it. The amplitude climbs at the slew limit over the first turns and settles once a ceiling is reached:

(svg)

../_images/pypulseqpp-sequences-Spiral-1.svg

Methods

rotated

Return this interleaf rotated in its own plane, with unchanged timing.

Attributes

axes

The gradient channels this interleaf drives, in waveform order.

gx

Gradient on channel x, or None when this interleaf does not drive it.

gy

Gradient on channel y, or None when this interleaf does not drive it.

gz

Gradient on channel z, or None when this interleaf does not drive it.

has_prewinder

Whether a prewinder leads from k = 0 to the start of the path.

has_rewinder

Whether a rewinder leads from the end of the path back to k = 0.