Excitation#

This module contains functions defining compositions of building blocks commonly used for excitation in MRI

Functions:

optimize_slice_selection(system_specs, ...)

Computes the shortest possible combination of RF-pulse and trapezoidal slice-selection gradient for the given time-bandwidth-product, flip angle and slice thickness.

slice_selective_se_pulses(system_specs, ...)

Define a pair of 90, 180 rf sinc pulses with slice selective gradients

slice_selective_sinc_pulse(system_specs, ...)

Defines slice selective excitation using a Sinc-RF pulse and a slice selection gradient.

sms_pulse(system_specs, single_pulse, ...[, ...])

Modulates the waveform of a given slice selective excitation pulse using the sigpy.mri.rf.dzrf_mb implementation.

spectral_spatial_excitation(system_specs, ...)

Constructs a sequence for spectral-spatial excitation containing binomial sinc sub-pulses and trapezoidal slice-selection gradients.

optimize_slice_selection(system_specs, slice_thickness, time_bandwidth_product, min_duration=None)#

Computes the shortest possible combination of RF-pulse and trapezoidal slice-selection gradient for the given time-bandwidth-product, flip angle and slice thickness.

Parameters:
  • system_specs (SystemSpec) – SystemSpecifications

  • slice_thickness (Quantity) – Defines the necessary gradient amplitude

  • time_bandwidth_product (float) – Used to calculate the RF bandwidth from duration

  • min_duration (Optional[Quantity]) – Manually set minimal duration (e.g. shortest pulse duration according to peak RF power)

Return type:

(Quantity, Quantity)

Returns:

pulse_duration, gradient amplitude

slice_selective_se_pulses(system_specs, echo_time, slice_thickness, pulse_duration, slice_orientation, time_bandwidth_product=4.0)#

Define a pair of 90, 180 rf sinc pulses with slice selective gradients

                 |-----------echo_time/2---------|

.                90°                            180°              .
.                                                                 .
.               /\                              /\                .
.    _______/\ /  \ /\______________________/\ /  \ /\            .
.            \/   \/                         \/   \/              .
.                                                                 .
.          ___________                      ___________           .
.    ____ /           \       _____________/           \          .
.                      \_____/                                    .
.          |pulse-dur|                      |pulse-dur|           .
Parameters:
  • system_specs (SystemSpec) – SystemSpecifications

  • echo_time (Quantity) – Quantity[Time] containing the required echo-time

  • slice_thickness (Quantity) – Quantity[Length] containing the required slice-thickness

  • pulse_duration (Quantity) – Quantity[Time] Total pulse duration (corresponds to flat_duration of the slice selection gradient)

  • slice_orientation (ndarray) – np.ndarray of shape (3, ) denoting the direction of the slice-normal.

  • time_bandwidth_product (float) – float - used to calculate the rf bandwidth from duration

Return type:

Sequence

Returns:

slice_selective_sinc_pulse(system_specs, slice_thickness, flip_angle, time_bandwidth_product=4, pulse_duration=None, delay=<Quantity(0.0, 'millisecond')>, slice_position_offset=<Quantity(0.0, 'meter')>, slice_normal=array([0., 0., 1.]))#

Defines slice selective excitation using a Sinc-RF pulse and a slice selection gradient.

.                     /\                           .
.           ______/\ /  \ /\______                 .
.                  \/   \/                         .
.                                                  .
.                __________                        .
.           ____/          \       ___             .
.                           \_____/                .
.               |pulse-dur| |     |                .
.                       shortest possible          .
Parameters:
  • system_specs (SystemSpec) – SystemSpecifications

  • slice_thickness (Quantity) – Quantity[Length] containing the required slice-thickness

  • flip_angle (Quantity) – Quantity[Angle] containing the required flip_angle

  • time_bandwidth_product (float) – float - used to calculate the rf bandwidth from duration

  • pulse_duration (Optional[Quantity]) – Quantity[Time] Optional - Total pulse duration (corresponds to flat_duration of the slice selection gradient). If not specified, the shortest possible pulse-duration within system limits is calculated.

  • delay (Quantity) – Quantity[Time] added time-offset

  • slice_position_offset (Quantity) – Quantity[Length] positional offset in slice normal direction defining the frequency offset of the RF pulse

  • slice_normal (ndarray) – np.ndarray of shape (3, ) denoting the direction of the slice-normal.

Return type:

Sequence

Returns:

cmrseq.Sequence

sms_pulse(system_specs, single_pulse, n_slices, band_gap, slice_thickness, modulation_type='quadrature')#

Modulates the waveform of a given slice selective excitation pulse using the sigpy.mri.rf.dzrf_mb implementation.

Parameters:
  • system_specs (SystemSpec) –

  • single_pulse (RFPulse) – Instance of a cmrseq RFPulse or subclass

  • n_slices (int) – Number of slices to simultaneously excite

  • band_gap (Quantity) – Distance between the excited slices

  • slice_thickness (Quantity) – Thickness of the exited slices

  • modulation_type (str) – from [amplitude, phase, quadrature]

Return type:

RFPulse

Returns:

New pulse object with multi-banded waveform

spectral_spatial_excitation(system_specs, binomial_degree, total_flip_angle, slice_thickness, chemical_shift=3.4, time_bandwidth_product=4.5)#

Constructs a sequence for spectral-spatial excitation containing binomial sinc sub-pulses and trapezoidal slice-selection gradients. The suppressed frequency is defined as chemical shift (with B0 from the system-specification), which determines the temporal gap between the sub-pulses. Feasibility of the pulse composition is checked based on gradient limits and peak rf power.

Note

The effective rf center can be obtained as the mean of all sub-pulse rf centers

The sub-pulse duration is calculated under the assumption of max slew gradient as follows:

\[\begin{split}& \tau = 1/(2CS * B_0 \gamma *1e-6) \\ & \tau / 2 = 2 \delta + T \\ & T = tbw / (\gamma \delta s_{max} \Delta z) \\ & \rightarrow 0 =& 4 \delta^2 - \tau \delta + 2 tbw /(\gamma \Delta z s_{max}) \\ & \rightarrow \delta = \tau \pm \sqrt{\tau ^2 - 32 tbw / \gamma \Delta z s_{max}} ) / 8 \\\end{split}\]

where :math:` au` is gap between sub-pulses, \(CS\) is the chemical shift in ppm, \(delta\) is the rise time of the trapezoidal gradient, \(\Delta\) is the pulse/flat top duration and \(s_{max}\) is the system limit for gradient slew-rate.

Example Plots
../_images/seqdefs_excitation_spectral_spatial.png
Raises:
  • ValueError: if the pulse is infeasible for system-constrains / slice-thickness /

time-bandwidth-product because the minimal pulse duration + gradient ramp-times is shorter than half of the pulse gap

Parameters:
  • system_specs (SystemSpec) –

  • binomial_degree (int) – Determines the number of sub-pulses. Degree 1 corresponds to 1-1, degree 2 -> 1-2-1 and so on.

  • total_flip_angle (Quantity) – Total effective flip angle for on-resonant spins for all sub-pulses combined

  • slice_thickness (Quantity) – Thickness of spatial excitation slab. For very thin slices, the targeted pulse might become infeasible

  • chemical_shift (float) – in parts per milion

  • time_bandwidth_product – Time bandwidth product used for all sinc sub-pulses

Return type:

Sequence

Returns: