Rosette

Contents

Rosette#

class pypulseqpp.sequences.Rosette[source]#

Bases: NonCartesianGradient

Multi-petal rosette base interleaf, starting and ending at k = 0.

The readout needs neither a prewinder nor a rewinder. trajectory is the k-space at the ADC samples and design_trajectory the polyline the gradient was solved from; echo_spacing_s is the realised mean petal duration and requested_echo_spacing_s the request. The ADC takes the same number of samples in every petal, the total rounded down to system.adc_samples_divisor.

Parameters:
  • system (pypulseqpp.Opts) – System limits. Tighter limits lengthen the petals but not their reach.

  • fov (float or array-like) – Isotropic field of view (m). With matrix it sets kmax = matrix / (2 * fov), and it bounds the k-space step between adjacent ADC samples to 1 / (oversamp * fov).

  • matrix (int or array-like) – Isotropic matrix size.

  • petals (int, default=5) – Centre-to-centre lobes within this one interleaf, not rotated shots.

  • angular_frequency_ratio (float, default=3.0 / 5.0) – Angular over radial frequency: below one the petals are open, one is the circular limit, above one they wind more tightly.

  • echo_spacing_s (float, default=None) – Mean centre-to-centre petal duration (s); None is the minimum the limits allow, and a longer value stretches the waveform uniformly. The ramps at each end can make the first and last crossing intervals differ slightly from the mean.

  • bandwidth_hz_px (float, default=250000.0) – Requested 1 / dwell (Hz). The dwell is also bounded by the step limit and floored to the ADC raster, so the realised bandwidth can be higher.

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

  • 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 echo_spacing_s is below the minimum the limits allow, or a parameter is out of range.

Examples

>>> import pypulseqpp.sequences as design
>>> import pypulseqpp as pp
>>> rosette = design.Rosette(pp.Opts(), 0.22, 64)
>>> rosette.has_prewinder or rosette.has_rewinder
False

One interleaf and the waveform that traverses it. The path passes through the centre of k-space once per petal:

(svg)

../_images/pypulseqpp-sequences-Rosette-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.