B0 & B1 mitigation using time-shifted spokes
Bastien Guérin, Jason P. Stockmann, Mehran Baboli, Angel Torrado-Carvajal, Andrew V. Stenger and Lawrence L. Wald (2015). "Robust time-shifted spoke pulse design in the presence of large B0 variations with simultaneous reduction of through-plane dephasing, B1+ effects, and the specific absorption rate using parallel transmission." Magnetic resonance imaging, DOI: 10.1002/mrm.25902.
What this code does
This code computes spoke pulses in which the sub-pulse sinc profiles played on the different transmit channels are shifted with respect to the center of the gradient slice-selection lobe (kz = 0). The sinc sub-pulse profiles are shifted in time by different amounts for different transmit channels and different spokes. By jointly optimizing these time-shifts and the complex amplitude of the spokes, the code is able to (i) recover through-slice dephasing signal in regions with high B0 and (ii) correct for non-uniform in-plane signal weighting due to B1+ effects.
The key ingredients of this technique are (i) a set of B1+ maps corresponding to the excited slice; (ii) an in-plane B0 map (in Hz) and (iii) a map of the through-slice B0 gradient (in Hz/m). Estimation of the B1+ and B0 maps is "standard" and can be performed as for other pTx pulse design methods. Estimation of the through-slice B0 gradient can be performed in two ways. The first consists in acquiring two 3D GRE volumes with slightly different TEs and with a slab thickness corresponding to the thickness of the excited slice (for example, if the slice thickness is 5 mm, the slab thickness of the 3D GRE acquisitions needs to be greater than 5 mm. The number of 3D slices within this slab determines the number of z-points available for fitting of the B0 distribution in the z direction). I use this first technique in the following examples. The second method consists of assuming a linear relationship between the in-plane B0 map and the through-slice B0 gradient. This technique is less accurate than the first technique mentioned above but has the advantage of not requiring additional data acquisition.
This technique has two major limitations. First, it only works for small tip-angles, i.e. < 40 degrees. In particular, unlike the regular small tip-angle approximation this time-shifted spoke design does not scale well with the target flip-angle (see the paper in the Citation section for a detailed discussion of this effect). Second, it creates a uniform in-plane magnetization distribution but a non-uniform flip-angle weighting (again, see paper above for more details).
Click here to download the Matlab code and here for the test dataset. You'll also need to download this zip file which contains a few utilities necessary to run the code (don't forget to add the un-zipped folder to your Matlab path). If you are wondering how exactly I obtained the B0 and through-slice B0 gradient maps, download this zip file.
Fitting the through-slice B0 gradient map / preparing the B1+ maps
To perform this step, download and un-zip the file processPrescanData.zip. First, run the Matlab routine dump_g.m and then the routine dump_b1maps.m. These tools prepare the B1+ maps in a format adequate for pulse design and estimate the B0 through-slice gradient by linear fit (in the slice direction) of two 3D GRE acquisitions with slightly different TEs. For a detailed description of these steps, please refer to the paper in the Citation section.
NOTE #1: These tools will only work for data acquired on Siemens scanners equipped with the "step 2" pTx system. For other systems you may have to adapt the code yourself.
NOTE #2: These tools assume that there are two meas*.dat files in the working folder containing the raw data of two GRE acquisitions with TE # 1 = 6 ms and TE # 2 = 8 ms. I did not include my own files because they are too big for this Wiki. These meas*.dat files can be saved after you have acquired the GRE data using the Twix scanner utility. The file fieldMaps.fld is the standard file generated when clicking "save dataset" in the B1+ application of the Siemens "step 2" pTx system.
Time-shifted spoke pulse design
Un-zip the archives TimShiftedSpokes_test_dataset.zip (contains the data) and Spokes_SARPowerConst_deltatOpt_fmincon_v14.zip (contains the code). Change directory to TimShiftedSpokes_test_dataset. The file spokes_def.txt contains the main parameters of the spoke design problem -- all fields in this file should be self-explanatory. To run the pulse design, simply run the script RUN_SPOKES.m (you may have to change some of the code path in this file).
Design a 1-spoke pulse, then a 2-spoke pulse. Make sure that the SAR constraints are satisfied (local and global SAR of the final pulse are printed on screen at the end of the optimization). You can also play with the duty-cycle, the maximum allowed time-shift, maximum RF voltage and other parameters to get a feel of how the code works. Please refer to the paper in the Citation section for a more detailed explanation of the results.