2D balanced SSFP#

Family:

Balanced SSFP

Dimensionality:

2D, multi-slice

Sampling:

Cartesian

Readout:

One phase-encode line per repetition, every gradient axis balanced

Balanced SSFP 2D Cartesian: one complete train per slice, optionally cardiac-gated.

Prescription#

pypulseqpp.sequences.bssfp2D_sequence()#

Balanced SSFP 2D Cartesian: one complete train per slice, optionally cardiac-gated.

Every axis returns to k = 0 between pulse centres and TE is TR/2 (BssfpReadout2D). Each slice’s train is entered through a half-flip pulse half a TR ahead of the first excitation and opposite in phase to it; excitations then alternate between phase pi and 0, the ADC following. ONCE marks the half flip (1), the train (0) and the closing rewind (2), so the whole slice is one repetition of the scan. Slices play one after another, since a steady state does not survive interleaving, and a slice longer than MAX_SLICE_DURATION is refused.

The phase-encode lines are played views_per_segment at a time. Under retrospective gating each segment is cycled for one heartbeat, the interpreter’s ECG log binning it into cardiac phases; under prospective gating every heartbeat opens with a trigger event on TRIGGER_CHANNEL, then plays the segment once per cardiac phase; the first heartbeat’s trigger precedes the half flip, so the whole train is timed from the R wave, and a slice held in one heartbeat is a triggered single shot. Acquisitions carry LIN, SLC, the segment as SEG and the cardiac phase, or the cycle within the heartbeat, as PHS; calibration lines are marked IMA.

Parameters:
  • plot (bool, default=False) – Draw the finished sequence in SeqEyes.

  • test_report (bool, default=False) – Print a report on the finished sequence.

  • write_seq (bool, default=False) – Write the sequence to a .seq file.

  • seq_filename (str, default=None) – Where to write it; <NAME>.seq when omitted.

  • system (pypulseqpp.Opts, default=None) – System limits, held under the application’s MAX_GRAD and MAX_SLEW.

  • fov_x (float, default=0.3) – Field of view along the readout and the phase encode (m).

  • fov_y (float, default=0.3) – Field of view along the readout and the phase encode (m).

  • n_x (int, default=192) – Readout matrix size.

  • n_y (int, default=192) – Phase-encode matrix size.

  • n_slices (int, default=1) – Number of slices, each acquired as its own complete train.

  • slice_thickness (float, default=0.006) – Slice thickness (m).

  • slice_spacing (float, default=0.0) – Gap between adjacent slices (m); zero is contiguous.

  • flip_angle_deg (float, default=45.0) – Excitation flip angle (degrees).

  • tr (float | None, default=None) – Repetition time (s); TE is TR/2. None is as short as possible.

  • readout_bandwidth_hz (float, default=125000.0) – Requested receiver bandwidth (Hz). The half flip needs an acquisition block at least as long as the excitation’s tail, which a lower bandwidth provides.

  • ry (int, default=1) – Phase-encode undersampling: one line in every ry is acquired, the centre line among them.

  • partial_fourier_y (float, default=1.0) – Fraction of the phase-encode extent acquired, in [0.75, 1].

  • n_phases (int, default=25) – Cardiac phases a prospective heartbeat acquires.

  • n_dummy (int, default=10) – Repetitions played without acquiring after the half flip, while the oscillating transient settles.

  • readout_oversampling (float, default=1.0) – Readout oversampling factor, at least one.

  • n_acs_y (int, default=24) – Fully sampled calibration lines at the centre of k-space, acquired ahead of the rest when ry > 1.

  • gating ({'none', 'retrospective', 'prospective'}, default='none') – No gating; each segment cycled over one heartbeat; or each heartbeat triggered and acquired once per cardiac phase.

  • heart_rate_bpm (float, default=60.0) – Nominal heart rate (beats per minute) the segments are timed to.

  • views_per_segment (int, default=12) – Phase-encode lines per segment, one segment per heartbeat. Unused without gating.

  • trigger_delay (float, default=0.0) – Wait after a prospective trigger before the first cardiac phase (s).

Returns:

The designed sequence.

Return type:

pypulseqpp.Sequence

Raises:

ValueError – If gating is unknown, partial_fourier_y is outside [0.75, 1], a count is below one, a prospective heartbeat cannot hold its phases, a slice outlasts MAX_SLICE_DURATION, or the TR is shorter than the balanced repetition, or too short beside the pulse for the half flip.

Examples

>>> from pypulseqpp import sequences
>>> seq = sequences.bssfp2D_sequence(
...     n_x=64, n_y=16, readout_bandwidth_hz=50e3, n_dummy=0
... )
>>> seq.check_timing()[0]
True

Designed and drawn#

2D balanced SSFP

2D balanced SSFP

See also#

Other balanced ssfp sequences: bssfp3D_sequence.

The same sampling in another family: gre2D_sequence, gre3D_sequence, gre_multiecho2D_sequence, gre_multiecho3D_sequence, se2D_sequence, se3D_sequence, fse3D_sequence, mprage3D_sequence, epi2D_sequence.

Every shipped sequence is listed in the catalogue.