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.ONCEmarks 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 thanMAX_SLICE_DURATIONis refused.The phase-encode lines are played
views_per_segmentat a time. Underretrospectivegating each segment is cycled for one heartbeat, the interpreter’s ECG log binning it into cardiac phases; underprospectivegating every heartbeat opens with a trigger event onTRIGGER_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 carryLIN,SLC, the segment asSEGand the cardiac phase, or the cycle within the heartbeat, asPHS; calibration lines are markedIMA.- 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>.seqwhen omitted.system (pypulseqpp.Opts, default=None) – System limits, held under the application’s
MAX_GRADandMAX_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.
Noneis 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
ryis 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:
- Raises:
ValueError – If
gatingis unknown,partial_fourier_yis outside[0.75, 1], a count is below one, a prospective heartbeat cannot hold its phases, a slice outlastsMAX_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#
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.