Thursday, 7 January 2016

New Gannet website (and blog move)

I have decided that a website for Gannet would be useful and have incorporated a blog element into that new page:

So, from now on, blog posts will be going up there.  I am undecided yet whether to cross-post here, or whether to stop ...

Monday, 7 December 2015

Tissue-Corrected GABA values and Gannet

We have recently published a paper proposing a tissue correction that accounts for voxel segmentation, both in terms of water relaxation/visibility, and the different GABA concentration in gray matter and white matter.
This paper can be found here.

The different corrections proposed are now implemented in Gannet, with output names that are not entirely clear... so for the record, here are the equivalencies.

This is the uncorrected GABA concentration (relative to water).

This is the CSF-corrected GABA concentration (relative to water).  (We should probably change the naming !).  It is MRS_struct.out.GABAconciu divided by (f_GM+f_WM), and is filled by GannetSegment.

This is the GABA concentration (relative to water), corrected for the visibility and relaxation of the water signals in GM/WM/CSF and for the GABA concentration differential between GM and WM (alpha in the paper).  It corresponds to Equation 5 in the paper. It is filled by GannetQuantify.

This is the most fully corrected GABA concentration (relative to water), corresponding to Equation 6 in the paper. It is filled by GannetQuantify.  This is what we recommend as the measure to be used. (Note that Equation 6 in the paper contains an error - there shouldn't be an alpha in the mu term of the denominator.)

Monday, 14 September 2015

Frequency Stabilization II

We have written a couple of papers on subtraction artefacts (Evans et al. JMRI 2013) and field drift (Harris et al. MRM 2014).  Obviously as a subtraction technique, stability is important for MEGA-PRESS.  However, one aspect that we have not emphasized is the impact of drift on editing efficiency. As the field drifts, the offset of editing pulses moves from their intended target and the editing efficiency of GABA (and MM) changes.  This is especially important for MM-suppressed editing, where small drifts can rapidly lead to positive or negative MM signals bleeding back in.  MM suppression relies upon editing pulses that are symmetrically disposed about the MM signal to properly null MM.  This symmetry is destroyed by the field drift that occurs due to scanner heating/cooling and subject movement.

The Philips scanner has a Frequency Stabilization (FS) function programmed in. Basically, it performs a whole-slice gradient echo measurement to determine changes in the offset. This quick, small-flip-angle water measurement, which is interleaved within the TR, is strongly recommended not to be used for proton spectroscopy, largely because it is inaccurate.  We tried modifying this approach to buffer and average, but this was unsuccessful.

The basic problem with a proton-based frequency stabilization is that is relatively difficult to localize a signal from just the voxel, using small flip angle excitation.  Therefore, any within-TR approach has to either include signal from outside the voxel (which does not work well), impact the acquired signal due to non-negligible saturation, or use a heteronuclear approach.  We have therefore sought to acquire localized signal (for frequency determination) from the PRESS volume without increasing scan time or saturating the acquired signals. The solution we have come up with is to reorder the acquisition.

We typically acquire 16 TRs of water reference data - 16 scans not because it is needed for SNR, but so as to acquire a full phase cycle and therefore have the same quality of localization on the reference and water-suppressed data.  In the new FS implementation, we now acquire these scans distribute through the acquisition time (every 1/16th of the total time), FFT them on the fly and determine the water frequency to feed back any changes to the RF F0.  This seems to work well, and reduces the effect of linear drift by a factor of 16 and of movement potentially more.  Importantly, by juggling the order of acquisition of the data, we get this benefit without increasing scan time or reducing SNR.


  • If you are using any form of frequency stabilization, we recommend you check over some GannetLoad outputs for erratic behavior, and stop using it.
  • If you have started a study without FS, continue and adopt the new FS when you start the next study (especially if you plan an MM-suppressed measurement).
  • If you plan an MM-suppressed study, contact us for a new patch with the distributed reference feature.

Wednesday, 12 August 2015

Gannet fitting of edited Glx

Glx Fitting in Gannet

At different times, several people have implemented Gannet mods to fit the 3.75 ppm edited Glx peak.  For some reason this never got incorporated into Gannet – an omission we have now addressed.  Thanks to Mark Mikkelsen of Cardiff, whose code we subsumed.

Run GannetLoad as before:

Run GannetFit for GABA, either:

Then run GannetFit for Glx, being sure to specify a different output structure:

The output should look somewhat like this…

Tuesday, 3 March 2015

Setting up a MEGA-PRESS scan from PRESS

These instructions are intended to help anyone with our patch get things set up for GABA editing. They are Philips- and patch-specific.

  1. Start with a short-TE PRESS scan
  2. In Initial, increase the TE to 68 ms.
  3. In Geometry, change the voxel size to ~3x3x3 cm^3.
  4. In Contrast:
    • Change Gradient mode to Maximum and PNS mode to high.
    • Select MEGA basic in BASING pulse options.
    • Pulse duration 14ms, freq1 7.46 ppm, freq2 1.9 ppm. [OFF first, edit 8/19/12]
  5. In Motion, set phase cycles to 16, averages to 2, startup acquisitions 0.
    • -------------------------------------------------------------
    • EDIT 5/5/2015 Even the window-averaged frequency correction is not consistent. Current best advice is to turn it off.
    • Turn on frequency correction, and set freq stab window to 8. 
    • Set+freq stab odd dyn: yes (in the dyn/ang tab). This makes sure the frequency only updates on the first TR of an odd dynamic scan, helping minimize subtraction artefacts.
    • ----------------------------------------------------------------------
  6. In Dyn/ang, Dynamic study individual, 160 dynamic scans.
  7. In Postproc, turn on spectral correction. Set Apply Spectral Correction to no. Acquire 16 averages. 
Make sure you read this post as well:

Friday, 20 February 2015

3rd International Symposium on MRS of GABA

Registration and abstract submission are now open for the 3rd International Symposium on MRS of GABA, to be held on the 14th and 15th of October 2015 at the Hilton Buena Vista Orlando, Florida, USA.

See you there!

Wednesday, 4 February 2015

When Gannet goes wrong

There are two extremely common ways the analysis can fall over.  And by 'extremely common', I just mean that I write more emails than I want to explaining the fixes. So here they are for posterity.

Both problems can be nicely summarized as "My spectra are negative".   

If your GannetLoad output spectra look like this, the experiment is working fine, and one of two things have happened with the processing: either the data are phased negatively, or the ON and OFF spectra have been incorrectly identified.

Solution 1: spectra are phased negatively.
If the bottom-left panel from GannetLoad looks like this:

i.e. a cold (blue) stripe on a hot (red/yellow) background, then the spectra are phased negatively.  This happens when the residual water signal is negative with respect to the rest of the spectrum (common using Philips-MOIST). The simple solution is to change the MRS_struct.p.WaterPositive parameter in GannetPreInitialise.m. 
If you successfully do that and rerun the data, then they should look more like this:
i.e. a hot (red/yellow) stripe on a cold (blue) background. Your GABA difference spectra should now be positive.

Solution 2: ON and OFF are incorrectly identified.
If the creatine stripe is correct (red on blue; spectra phased positively) and the difference spectra are still negative, then the issue is the ordering of ON and OFF spectra.  The simple solution is to change the MRS_struct.p.onofforder parameter in GannetPreInitialise.m. It is either 'onfirst' or 'offfirst' depending on the acquisition order.

So here's the summary:

"Gannet makes my GABA difference spectra negative".

"Are your creatine signals phased positively?".

If yes, change MRS_struct.p.onofforder; if no, change MRS_struct.p.WaterPositive.

There is a third scenario, which is probably not that bad, but is worth fixing anyway - that is, when both these parameters are set wrong.  In that case, the GABA spectrum will be positive, but the Creatine stripes will appear negative.  So flip 'onfirst'/'offfirst' and the WaterPositive setting.