GABA phantom recipe

This is an edited repost from 2012 on the old blog.

It seems that there is some value a standardized GABA phantom for cross-platform testing etc... This recipe is also a reasonable place to start if you want a 'will-work-without-much-thought' option.  Everything is available form Sigma Aldrich.

  • Container: 1 liter Nalgene bottle style 2125
  • Buffer: One PBS sachet P5368
  • GABA: 1.03 g (RMM 103.1) A2129 

Edits from the original, also add:

  • Sodium Azide NaN3: 1g  (to prevent bug growth) S2002
  • Glycine: 0.751g (internal reference) 50046

Make up to 1 liter with deionized water.  pH can be adjusted to 7.3 using NaOH/HCl (but to a first approximation does not need to be).

ISMRM MRS Workshop, Konstanz, Germany

It was a great pleasure to attend the ISMRM MRS Workshop last week, and an even greater one to give the talk on Edited MRS.  I reviewed editing approaches (J-difference and MQF), landmark papers in editing (Rothman, Rothmans, Mescher, Star-Lack, Henry, Terpstra) and then presented our new work on accelerated editing, with HERMES, MEGA-PRIAM and HERMES-PRIAM.  

NEW Philips Patch Dissemination for HERMES

We encourage collaborators, currently using our MEGA-PRESS patch to measure GABA, to upgrade to the HERMES patch for future studies.  This patch allows you to measure Glutathione (the most abundant antioxidant in the brain) 'for free', as described in the post below, but also has some useful upgrades to the GABA-only editing. 

We are extremely excited about the HERMES experiment, and expect it to overtake MEGA-PRESS as the most widely used edited experiment.  Drop us an email to request the new patch.

Simultaneous Editing of GABA and GSH with HERMES

The two most widely edited metabolites are GABA, the main inhibitory neurotransmitter, and Glutathione (GSH), the most abundant redox compound in the brain.  They give edited signals at 3 ppm and 2.95 ppm respectively, making them ideal candidates for simultaneous HERMES editing.

Building on Kim Chan's work, Muhammad Saleh has implemented a HERMES experiment that simultaneously and separably edits GABA and GSH.  HERMES uses a Hadamard editing scheme to encode the ON/OFF of J-difference orthogonally for GABA (at 1.9 ppm) and GSH (at 4.56 ppm). The inversion profiles of the four Experiments A-D look like:

Applying these pulses, evolution of couplings in the GABA molecule is refocused in the GABA-ON scans, and evolution of couplings in the GSH molecule is refocused in the GSH-ON scans, so that the combination A-B+C-D will give the GSH-edited spectrum, and A+B-C+D will give the GABA-edited spectrum.

Figure 3-01.png

In vivo, this allows single experiment to acquire data equivalent to two consecutive MEGA-PRESS acquisitions.

GannetCoRegister for Siemens

We receive a number of support requests on GannetCoRegister for Siemens. We hope that Gannet’s co-registration for Siemens data does the correct job in most cases. However, on occasion, there can be hiccups. This post attempts to explain their origin, how to avoid them, and how to fix them.


At first glance, it seems trivial to correctly draw a box on a brain. Unfortunately, it is not, and the process has pitfalls. One reason is a lack of standardization and documentation. Unlike imaging metadata (at least some of which are agreed upon in DICOM fields), there is no universal vendor-independent data structure that carries the parameters of an MRS voxel, that is, dimension, position and rotation. Siemens, Philips and GE all have their own conventions and formats of defining and storing the voxel parameters, and they may even vary between sequence and/or software versions.

On top of that, the rotated-and-offset voxel is usually planned in the context of an oblique-and-offset anatomical image. Sometimes, the image on which the voxel is planned is not the one it is intended to be coregistered to. That makes three frames of reference, which may not even share the same coordinate system, e.g. when the table moves during scans. 


Despite a few caveats, GannetCoRegister will very likely work smoothly for you, if you adhere to a few Golden Rules.

  • Place your voxel in the image that you want to use for coregistration. This is usually an axial 3D MPRAGE. It is common to acquire three separate orthogonal 2D scans for voxel planning, because the Siemens software does not automatically provide sagittal and coronal reconstructions of the MPRAGE. We would encourage users not to do this - reconstruct the T1 manually, or ask your tech for help!
  • If the above is not possible, make sure that all your images are acquired in REF or FIXED mode. Running a sequence in ISO mode will reset the isocenter, move the table, and create a new frame of reference.
  • Take screenshots of each planned voxel.
  • Double check the reconstructed voxel for each dataset. Thoroughly compare it to the screenshot taken while planning the voxel on the scanner. See the Troubleshooting section below if you believe the reconstruction is not correct.

If you follow these, and still meet with issues, please let us know, so we can revise or further clarify them.


If your reconstructed voxel does not appear correct, you may try the following fixes:

  • If the voxel appears to be in the correct position, but the dimensions (or rotations) look swapped, you can edit GannetMask_Siemens.m (lines 80-83 as of today).
MRS_struct.p.voxoff = [rda.VOIPositionSag rda.VOIPositionCor rda.VOIPositionTra];
MRS_struct.p.voxsize = [rda.VOIThickness rda.VOIReadoutFOV rda.VOIPhaseFOV];
MRS_Rot(:,1) = rda.row.'.* [-1 -1 1]';
MRS_Rot(:,2) = rda.column.';

The first line determines the voxel offset (and should be fine in all cases). The second line determines the voxel dimensions, while the third and fourth rotate the voxel in space. You may try to swap the dimension variables, or modify the -1 and 1 values in the multiplication array.

  • If you have planned your voxel in an image other than your MPRAGE and get wrong results, you can try fixing this with SPM. Coregister (estimate & reslice) your MPRAGE to the image you used for planning, and feed the new image to GannetCoRegister. This will reconcile the coordinate systems defined in the nifti headers, but the coregistration of the two images might be suboptimal (depending on the quality of the planning image).

Please let us know when you encounter difficulties using GannetCoRegister or GannetSegment, along with the specific sequence and Siemens software version you are using. Your feedback will help improve future versions of Gannet!

HERMES: Hadamard Encoded Editing

ISMRM 2016 was an exciting one for our group, as student Kimberly Chan presented HERMES: Hadamard-Encoding and Reconstruction of MEGA-Edited Spectroscopy.

HERMES: Coming to a journal near you in the very near future.

HERMES: Coming to a journal near you in the very near future.

In principle, HERMES allows the orthogonal encoding of an arbitrary number of edited metabolites in a single acquisition.  Rather than jettisoning all the 'other' signals as with MEGA editing, HERMES can put them into a second difference spectrum, or a third, or...


Tissue-Corrected GABA Values in 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, 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.

GABA phantom recipe

I am going to port some of the key posts off the old blog, starting with this...

It seems that there is some value in a standardized 10 mM GABA phantom for cross-platform testing etc... This recipe is also a reasonable place to start if you want a 'will-work-without-much-thought' option.  Everything is available form Sigma Aldrich.

  • Container: 1 liter Nalgene bottle style 2125
  • Buffer: One PBS sachet P5368
  • GABA: 1.03 g (RMM 103.1) A2129 

Make up to 1 liter with deionized water.  pH can be adjusted using NaOH/HCl (but to a first approximation does not need to be).

It might also be worth adding 0.75g of Glycine, which gives a singlet that doesn't overlap with any GABA signals. That would give an internal 10 mM standard that is useful in some situations for referencing. 

Can we make the voxel smaller?

A common question that comes up with new collaborators (or old ones!) is "Can we make the voxel smaller?" or "Can we make the measurement shorter?", or sometimes, for the most ambitious, both.

My usual reply is "Yes, you can. But you should be aware of the consequences".

MRS in general, and edited MRS particularly, works at low levels of signal-to-noise.  MR is an inherently insensitive technique and we are detecting signals from millimolar metabolites within the head using an array of coils outside the head.  

SNR is determined by several factors, most of which are unchangeable: coil size; coil geometry; field strength; etc.  The main variables that are, well, variable are the number of averages (i.e. scan time) and the voxel size.  

SNR is directly proportional to voxel size, so the SNR of a 3x3x3 cm^3 voxel is over three times that of a 2x2x2 cm^3 voxel.  Even reducing voxel size by 10% linearly (which has an almost negligible impact on its apparent size) will reduce SNR by 30%. So my feeling is that you lose SNR far more quickly than you feel like you are gaining resolution.

SNR is also proportional to the square-root of the number of averages. This means that 'buying back' SNR losses from reducing voxel size with increased scan time is very expensive.  To regain that 30% signal, you would have to scan for twice as long... not a good trade.  The flip side of this is that reducing scan time hurts you relatively slowly.  Decreasing the scan time by 20% only impacts SNR by 10%.

The reason that this question often comes up it that people want spatial specificity to be as high as possible, and either want good temporal resolution or rapid scan times.  This is almost universally true, so experiments are already defaulted to the lowest SNR that I feel comfortable with.  For GABA, the 3x3x3 voxel scanned for 10 minutes also coincides with the mean SNR-factor from a literature review of GABA-edited  MRS.

But the quick answer is, "yes, you can reduce voxel size or scan time, but they will impact SNR".  If you want to do both, reducing scan time will hurt you less.  

Gannet, a website

Website screenshot

Website screenshot

It is clearly past the time when Gannet should have a website.

There is also a lot to be said for moving the blog off blogspot, which is blocked in China, so useless to some collaborators.  

So, here we go.