Spiral#
- class pypulseqpp.sequences.Spiral[source]#
Bases:
NonCartesianGradientConstant-, variable- or dual-density spiral base interleaf.
design_interleavesand the density parameters set the pitch as inpypulseqpp.calc_spiral_trajectory(); the caller may acquire any number of rotated copies.directionis"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 than1 / (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
directionis unknown,axesdoes 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)
Methods
Return this interleaf rotated in its own plane, with unchanged timing. |
Attributes
The gradient channels this interleaf drives, in waveform order. |
|
Gradient on channel x, or None when this interleaf does not drive it. |
|
Gradient on channel y, or None when this interleaf does not drive it. |
|
Gradient on channel z, or None when this interleaf does not drive it. |
|
Whether a prewinder leads from k = 0 to the start of the path. |
|
Whether a rewinder leads from the end of the path back to k = 0. |