3D echo-planar imaging

3D echo-planar imaging#

Family:

Echo-planar imaging

Dimensionality:

3D, slab-selective

Sampling:

Cartesian, skipped-CAIPI when undersampled

Readout:

One blipped echo train per (shot, shell)

3D gradient-echo EPI: one train per (shot, shell), skipped-CAIPI sampled.

Prescription#

pypulseqpp.sequences.epi3D_sequence()#

3D gradient-echo EPI: one train per (shot, shell), skipped-CAIPI sampled.

The views sampled form a CAIPIRINHA lattice holding the centre of k-space: line y is read when (y - n_y // 2) % ry == 0, at the partitions z with (z - n_z // 2 - d * j) % rz == 0, j being the line’s lattice index and d the shift caipi_shift() picks. A shell is rz consecutive partitions, and each of its lines holds one lattice partition. Shot s of a shell reads every n_shots-th lattice line from the s-th, blipping to that line’s partition (skipped-CAIPI, Stirnberg and Stöcker, Magn Reson Med 2021, doi:10.1002/mrm.28486); one shot per shell is blipped-CAIPI. A volume is every shot of every shell, shots outer and shells centre-out inner.

Every shot reads NAVIGATOR_LINES centre lines without blips (NAV) before its train, every line carries REV for its read polarity, and shots are delayed by successive fractions of the echo spacing so the echo time grows smoothly across the lines; te is the echo time of the centre line. Acquisitions carry LIN, PAR, SEG (the shot) and REP.

Two prescans are linked ahead of the imaging (prescans()): the calibration, when undersampled, a Cartesian gradient echo over the central n_acs_y x n_acs_z rectangle (REF); and the reference, one volume with the phase encode reversed (SET = 1), for distortion correction.

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.22) – Field of view along the readout, the phase encode and the partition encode (m). The slab excited is fov_z thick.

  • fov_y (float, default=0.22) – Field of view along the readout, the phase encode and the partition encode (m). The slab excited is fov_z thick.

  • fov_z (float, default=0.096) – Field of view along the readout, the phase encode and the partition encode (m). The slab excited is fov_z thick.

  • n_x (int, default=128) – Matrix size along the readout, the phase encode and the partition encode.

  • n_y (int, default=128) – Matrix size along the readout, the phase encode and the partition encode.

  • n_z (int, default=32) – Matrix size along the readout, the phase encode and the partition encode.

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

  • te (float | None, default=None) – Echo time of the centre line (s). None is as short as the navigator and the train admit.

  • tr (float | None, default=None) – Volume repetition time (s): every shot of every shell. None is as short as possible.

  • n_frames (int, default=1) – Volumes in the time series, each carrying its REP counter.

  • readout_bandwidth_hz (float, default=500000.0) – Requested receiver bandwidth (Hz).

  • ry (int, default=1) – Undersampling along the phase and the partition encode; rz is also the shell height.

  • rz (int, default=1) – Undersampling along the phase and the partition encode; rz is also the shell height.

  • partial_fourier_y (float, default=1.0) – Fraction of the phase- and partition-encode extent read, in [0.5, 1]. Truncates the lines and the shells before the centre.

  • partial_fourier_z (float, default=1.0) – Fraction of the phase- and partition-encode extent read, in [0.5, 1]. Truncates the lines and the shells before the centre.

  • n_shots (int, default=1) – Interleaved shots each shell’s lines are split into.

  • n_dummy (int, default=2) – Non-acquiring volumes before a time series; with one frame, non-acquiring shots.

  • excitation ({'slab', 'nonselective', 'spsp'}, default='slab') – A slab-selective SLR pulse, a hard pulse, or a slab- and water-selective spectral-spatial pulse.

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

  • n_acs_y (int, default=24) – Extent of the gradient-echo calibration rectangle along the phase and the partition encode.

  • n_acs_z (int, default=16) – Extent of the gradient-echo calibration rectangle along the phase and the partition encode.

  • volume_output (bool, default=False) – Play a digital output on OUTPUT_CHANNEL at the first excitation of every volume, dummy volumes included.

Returns:

The designed sequence.

Return type:

pypulseqpp.Sequence

Raises:

ValueError – If excitation is unknown, a partial Fourier fraction is outside [0.5, 1], a count is below one, the shots cannot share the lines or the partitions hold no shell, or the TE or TR is shorter than the shots take.

Examples

>>> from pypulseqpp import sequences
>>> seq = sequences.epi3D_sequence(n_x=32, n_y=16, n_z=4, n_dummy=0)
>>> seq.check_timing()[0]
True
>>> seq.definitions["Matrix"], seq.definitions["Name"]
([32.0, 16.0, 4.0], 'epi_3d')

Designed and drawn#

3D echo-planar imaging

3D echo-planar imaging

See also#

Other echo-planar imaging sequences: epi2D_sequence.

Every shipped sequence is listed in the catalogue.