GRAPPA kernel size

Almost every modern fMRI protocol (at SIEMENS scanners) uses GRAPPA. However, only very few people pay a lot of attention on optimal usage of the GRAPPA auto-callibration data. I realized the importance of optimizing GRAPPA parameters when doing high-resolution EPI. At high resolutions, GRAPPA-related noise can become an increasingly important limitation.  This is especially true with the low bandwidth that the body gradient coils force us to use.

In this blog-post I will explain how the GRAPPA kernel-size affects the fMRI data quality, how you can change it, how you can find out which kernel-size was used, and I will descrive simple software tools to identify regions that might benefit from adaptations of the GRAPPA-kernel size.

Effect of GRAPPA kernel-size

The GRAPPA kernel is used to synthesize missing k-space lines in accelerated acquisitions.  Its exact working principles are a bit technical. If you are interested in the full mathematical model, I found the original GRAPPA paper quite comprehensive and understandable.

In my simplified understanding of the working principle of GRAPPA, the GRAPPA kernel defines the size of the spacial smoothness of the coil-sensitivity maps. This comes from the k-space feature that small objects in k-space (small kernels) are associated with smooth objects in image space.  Larger objects in k-space (larger kernels), on the other hand, are associated with sharper objects in image space.

Keeping this in mind, the GRAPPA-kernel size must have some effect on the spacial distribution of the g-factor penalty.

Namely, smaller GRAPPA kernels will have smoother defined regions of the high g-factor penalty

Small kernel example:

 

Large kernel example :

The corresponding temporal stability is apparent in tSNR maps.

flipping.gif
tSNR maps of to the same data reconstructed with two different GRAPPA kernel sizes. Gray-vlaue scaling is identical for both images.

improvement.png
The corresponding tSNR change [+/-30%].
The GRAPPA parameter of the data shown are: 7T, resol. = 0.75mm, phase-encoding direction = A>>P, GRAPPA-factor = 3, ACS-scheme = FLASH (30 dummies, FA 5deg, BWDTH = 100 Hz/px), #ref lines = 48,  FOV = 130 mm, Coil = 32ch Nova.

As you can see, in my data, the GRAPPA-kernel size has an effect of about 20-30% improvement/reduction in the final tSNR.

When the area of interest is suffering from large g-factor penalties (usually close to the center of the FOV), I would recommend a small GRAPPA kernel. When the area of interest is just outside the area of large g-factor penalties, I would use larger kernels.

This, of course is highly dependent on the FOV, the GRAPPA factor, the CAIPI FOV-shift, and the size of the RF coils. As such, for smaller RF-coil elements (e.g. in surface arrays, high-channel count arrays) or very large FOV, larger GRAPPA-kernal sized would be recommended.

It is also worth pointing out that the GRAPPA-kernel-size also affects the reconstruction speed. Larger kernels result in longer reconstruction durations. In my, experiments however, I am not really limited by reconstruction speed. So, I done mind. practiCal compared the reconstruction durations more rigorously in his blog.

How to change the kernel-size on a VB17 SIEMENS system

There are multiple ways how you can change the GRAPPA-kernel size on a SIEMENS VB17 scanner. Below, I describe the most common approaches.

Adjustment by changing Ice-Configurations (recommended)

  1. Start “xbuilder” (Ctrl+Esc and run xbuilder)
    screenshot-2018-01-08-17-08-38.png
  2. Open the file c:/MedCom/config/Ice/IceConfig.evp
  3. Find parameter ICE/CONFIG/iPAT/ImprovedGrappa and set it to “1” Screenshot 2018-01-08 17.09.59.png
  4. Find ICE/CONFIG/iPAT/GrappaPSize or ICE/CONFIG/iPAT/GrappaSegements just below and change them as you wish. E.g. change GrappaPSize from 4 to 2.

Note: The file IceConfig.evp is overwritten every time a new ‘patient’ is registered. Hence, if you mess around in IceConfig.evp, there is no danger that you affect other people scanning after you. However, it also means that you should always apply your changes after your patient is registered.

Note: The GRAPPA-kernel size in the current IceConfig.evp file is also used for Retro-Recon. This means that when you want to RetroRecon an old dataset while a different patient is currently registered. The setup of the current patient will be used. This feature also allows you to reconstruct the same date with multiple GRAPPA-kernel sizes.  Just change IceConfig.evp in the current patient and any data will be reconstructed with the current set of parameters during RetroRecon in Twix.

Adjustment by setting it in the Ice-Program

The values within the IceConfig.evp can be overruled in the IceProgram. I.e. if you use your own IceProgram, you can include additional changes as follows:

Screenshot 2018-01-08 17.31.47.png

I do not really have good experiences with this way of doing it. I found that it sometimes fails (in RetroRecon only) when there are conflicting parameters in IceConfig.evp and the IceProgram*.evp.

Adjustment within the sequence special card

Some WIP sequences allow you to adjust the kernel-size via the sequence special card. E.g. the CMRR MutliBand sequence allows you to choose 3×3, 5×3 and 5×5 (slice-size x read-size).

How to find out which kernel-size was eventually used

Very often you would like to find out which GRAPPA-Kernel size was used. And/or you want to double check whether your manually changed kernel-size was properly applied. You can check the used GRAPPA-kernel size in the Twix data as follows:

 

  1. Start Twix (Ctrl+Esc and run twix)Screenshot 2018-01-08 17.20.40.png
  2. Select the dataset in the left panel (red), open RetroRecon (blue), and click on edit (green).Screenshot 2018-01-08 17.22.57.png
  3. The used GRAPPA-kernel size can be seen in -> XProtocol-> IRIS -> PIPI -> GrappaFindWs -> Functor  (black arrow).Screenshot 2018-01-08 17.26.27.png

Simple software to explore optimal GRAPPA-kernel sizes for a given ROI

The program LN_GFACTOR is part of the standalone C++ software suite LAYNII. Its whole purpose is to find regions of particularly high g-factor penalty for a given dataset, GRAPPA-factor, phase-encoding direction.

It can be called with the following command:

LN_GFACTOR -input input.nii -output GFACTOR.nii -variance 1 -direction 1 -grappa 2 -cutoff 150

It will provide outputs as shown above. G-factor maps and simulated noise distribution.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s