make_recursive_slr_pulses

make_recursive_slr_pulses#

pypulseqpp.make_recursive_slr_pulses()[source]#

Design SLR pulses that each excite the same transverse magnetisation.

For non-recovering (e.g. hyperpolarised) magnetisation: flips grow along the train to 90 degrees at the last pulse. With use_mz each pulse is designed against the longitudinal profile the earlier ones left, so the slice profile also holds across segments (SigPy’s dz_recursive_rf). The pulses are large-tip designs, played at their designed amplitude.

Parameters not listed below are as in make_slr_pulse().

Parameters:
  • n_segments (int) – Pulses in the train.

  • duration (float, default=DEFAULT_DURATION) – Of each pulse, in s. The SLR core, to which time_bw_product and refocusing_tbw refer, spans about duration / 1.75; a Blackman taper fills the rest.

  • spin_echo (bool, default=False) – Design for a spin-echo segment, whose refocusing pulse is returned too.

  • refocusing_tbw (float, default=8.0) – Time-bandwidth product of that refocusing pulse.

  • t1 (float, default=math.inf) – Longitudinal relaxation time and the time between pulses, in s; t1=inf is no recovery.

  • segment_tr (float, default=0.06) – Longitudinal relaxation time and the time between pulses, in s; t1=inf is no recovery.

  • use_mz (bool, default=True) – Design each pulse against the profile the earlier ones left.

  • return_gz (bool, default=False) – Return each pulse with its selection gradient and rephaser, as make_slr_pulse() does.

Returns:

  • pulses (tuple) – One RF event per segment, or (rf, gz, gzr) per segment under return_gz.

  • refocusing (SimpleNamespace or tuple) – Only with spin_echo: the refocusing pulse, in the same form.

Raises:

ValueError – If n_segments is below one, or return_gz is asked for without a positive slice_thickness.