FreeSurfer: Difference between revisions
No edit summary |
|||
Line 46: | Line 46: | ||
The computationally-intensive surface mapping is carried out by a Freesurfer program called recon-all. This program is extensively spaghetti-documented on the Freesurfer wiki [https://surfer.nmr.mgh.harvard.edu/fswiki/recon-all here]. Though the Freesurfer documentation goes into much detail, it is also a little hard to follow at times and sometimes does some odd things. Notably, it assumes you're going to just try to jam your data into the program and hope for the best. This might work well for data that you already know is going to be problem-free, but we seldom have that guarantee. Instead, this guide will split the recon-all processing into sub-stages where you can do quality-control inspection at each step. | The computationally-intensive surface mapping is carried out by a Freesurfer program called recon-all. This program is extensively spaghetti-documented on the Freesurfer wiki [https://surfer.nmr.mgh.harvard.edu/fswiki/recon-all here]. Though the Freesurfer documentation goes into much detail, it is also a little hard to follow at times and sometimes does some odd things. Notably, it assumes you're going to just try to jam your data into the program and hope for the best. This might work well for data that you already know is going to be problem-free, but we seldom have that guarantee. Instead, this guide will split the recon-all processing into sub-stages where you can do quality-control inspection at each step. | ||
==== Stage | ==== Stage 1a: Skull Stripping ==== | ||
Calling <code>recon-all</code> with the -autorecon1 flag performs a number of steps related to segmenting the anatomical MRI image into brain/non-brain voxels. A shell script called <code>autorecon1.sh</code> can be found on the ubfs Scripts/Shell folder. This script simply acts as a wrapper (i.e., a convenient shortcut for executing computer code that might have a bunch of parameters that are error-prone or annoying to have to specify). You can copy this script to your ~/bin directory to be able to run it yourself: | Calling <code>recon-all</code> with the -autorecon1 flag performs a number of steps related to segmenting the anatomical MRI image into brain/non-brain voxels. A shell script called <code>autorecon1.sh</code> can be found on the ubfs Scripts/Shell folder. This script simply acts as a wrapper (i.e., a convenient shortcut for executing computer code that might have a bunch of parameters that are error-prone or annoying to have to specify). You can copy this script to your ~/bin directory to be able to run it yourself: | ||
cp ~/ubfs/cpmcnorg/Scripts/Shell/autorecon1.sh ~/bin/ | cp ~/ubfs/cpmcnorg/Scripts/Shell/autorecon1.sh ~/bin/ | ||
Line 59: | Line 59: | ||
nohup autorecon1.sh 501 & | nohup autorecon1.sh 501 & | ||
The <code>nohup</code> directive tells linux to keep the program going, even if you log off. That way your computer isn't held hostage over the internet while you wait for the skull stripping step to finish. Be sure to add the ampersand character to the end of your command. | The <code>nohup</code> directive tells linux to keep the program going, even if you log off. That way your computer isn't held hostage over the internet while you wait for the skull stripping step to finish. Be sure to add the ampersand character to the end of your command. | ||
==== Stage 1b. Brain Mask Editing ==== | |||
The skull stripping stage creates a binary mask that identifies which voxels correspond to the brain and which do not. By binary, I mean to say that it is a 3D block of 1's and 0's: Every location in this block that the previous step has determined contains brain matter gets a 1, and everywhere else gets a 0. | |||
Unfortunately, because voxel identity is determined algorithmically, sometimes the process breaks down. For example, there is generally a gap surrounding the brain (the cerebrospinal fluid in which the brain floats) which can be used to help identify where to make the partition. However in some regions, this gap may be smaller than the width of a single voxel, and in these cases the gap might not be detectable, and the algorithm might decide that a brain region continues into voxels that are actually part of the skull. For this reason we manually inspect the anatomical image with the brain mask overlaid. We can use Freesurfer tools to tweak the mask to exclude these errors. | |||
== Trouble Shooting == | == Trouble Shooting == |
Revision as of 16:08, 6 April 2016
Freesurfer is a surface-based fMRI processing and analysis package written for the Unix environment (including Mac OS X, which is based on Unix). The neuroanatomical organization of the brain has the grey matter on the outside surface of the cortex. Aside from the ventral/medial subcortical structures, the interior volume of the brain is predominately white matter axonal tracts. Because neurons metabolize in the cell body, rather than along the axons, we can focus on the grey matter found in the cortical surface because any fMRI signal changes detected in the white matter should theoretically be noise. This is the motivation for surface-based analyses of fMRI.
Freesurfer has a rigid set of assumptions concerning how the input data is organized and labeled. The following instructions will help avoid any violations of these assumptions that might derail your Freesurfer fMRI processing pipeline.
These instructions assume that Freesurfer has already been installed and configured on your workstation.
Organization
Freesurfer data for a collection of subjects is organized into a single project directory, called $SUBJECTS_DIR. Try this in the Linux terminal:
echo $SUBJECTS_DIR
It is likely that you will see something like the following, which is the sample 'bert' dataset that comes with a Freesurfer installation:
/usr/local/freesurfer/subjects
Let us assume that you have been collecting data for some lexical decision task experiment. All the data for all subjects should be stored in a single directory, which you will set as your $SUBJECTS_DIR variable. For example, if we keep all our data in ~/ubfs/cpmcnorg/openfmri/LDT, then we would type the following:
SUBJECTS_DIR=~/~/ubfs/cpmcnorg/openfmri/LDT
Subject directory organization
Data for each subject should be kept in their own directory. Moreover, different types of data (i.e., anatomical/structural or bold/functional) are kept in separate subdirectories. Assuming your raw data are in the .nii format, the basic directory structure for each participant ('session' in Freesurfer terminology) looks like this:
- SUBJECTS_DIR
- Subject_001
- mri
- orig.nii
- bold
- 001/f.nii
- 002/f.nii
- 003/f.nii
- etc.
- mri
- Subject_002
- mri
- orig.nii
- bold
- 001/f.nii
- 002/f.nii
- 003/f.nii
- etc.
- mri
- Subject_001
Note that all the functional data (in the 'bold' subdirectory) are stored in sequentially numbered folders (3-digits), and all are called 'f.nii'. This seems to be a requirement. It may be possible to circumvent this requirement, but this is a relatively minor concern at this time.
Structural Preprocessing
The structural mri file (orig.nii) is transformed over a series of computationally-intensive steps invoked by the recon-all Freesurfer program. Recon-all is designed to execute all the steps in series without intervention, however in practice it seems preferable to execute the process in a series of smaller groups of steps and check the output in between. This is because the process is automated using computational algorithms, but if one step doesn't execute correctly, everything that follows will be compromised. The steps take many hours to complete, so by inspecting the progress along the way can save many hours of processing time redoing steps that had been done incorrectly.
Image Format: Slicer
The first thing that you will need to do is convert the orig.nii file to .mgz format using Slicer. Though Freesurfer is capable of reading .nii files, it natively uses .mgz files, and so this conversion step will ensure that the structural data file has all the information that Freesurfer expects.
Recon-All
The computationally-intensive surface mapping is carried out by a Freesurfer program called recon-all. This program is extensively spaghetti-documented on the Freesurfer wiki here. Though the Freesurfer documentation goes into much detail, it is also a little hard to follow at times and sometimes does some odd things. Notably, it assumes you're going to just try to jam your data into the program and hope for the best. This might work well for data that you already know is going to be problem-free, but we seldom have that guarantee. Instead, this guide will split the recon-all processing into sub-stages where you can do quality-control inspection at each step.
Stage 1a: Skull Stripping
Calling recon-all
with the -autorecon1 flag performs a number of steps related to segmenting the anatomical MRI image into brain/non-brain voxels. A shell script called autorecon1.sh
can be found on the ubfs Scripts/Shell folder. This script simply acts as a wrapper (i.e., a convenient shortcut for executing computer code that might have a bunch of parameters that are error-prone or annoying to have to specify). You can copy this script to your ~/bin directory to be able to run it yourself:
cp ~/ubfs/cpmcnorg/Scripts/Shell/autorecon1.sh ~/bin/
Before you run the script, be sure to first open it up in a text editor so that you can: 1) see what it's actually doing, and 2) modify it so that it matches your particular requirements:
nano ~/autorecon1.sh
If you do so, you will find that it sets some environment variables that you will want to change, such as your $PROJECTROOT
After you have modified your copy of the script, you can run it thus:
autorecon1.sh 501
Where you would replace 501
with the appropriate subject number in your project directory. For example, if I want to execute autorecon1 on subject 501 found in ~/ubfs/cpmcnorg/openfmri/booth/ then my script would have the following line:
PROJECTROOT=/home/chris/ubfs/cpmcnorg/openfmri/booth/
When operating on data stored locally on either wernickesarea or brocasarea, this step takes between 20 and 30 minutes to complete. At the other extreme, operating on data stored on the ubfs network drive using the accumbens micro-computer took 2:18 hours to complete. However, note that this step can be run remotely via ssh, even from the comfort of your own home. If you are not physically seated at either of the main workstations, it is recommended that you use an ssh terminal connection into one of those two computers and run this step that way:
nohup autorecon1.sh 501 &
The nohup
directive tells linux to keep the program going, even if you log off. That way your computer isn't held hostage over the internet while you wait for the skull stripping step to finish. Be sure to add the ampersand character to the end of your command.
Stage 1b. Brain Mask Editing
The skull stripping stage creates a binary mask that identifies which voxels correspond to the brain and which do not. By binary, I mean to say that it is a 3D block of 1's and 0's: Every location in this block that the previous step has determined contains brain matter gets a 1, and everywhere else gets a 0.
Unfortunately, because voxel identity is determined algorithmically, sometimes the process breaks down. For example, there is generally a gap surrounding the brain (the cerebrospinal fluid in which the brain floats) which can be used to help identify where to make the partition. However in some regions, this gap may be smaller than the width of a single voxel, and in these cases the gap might not be detectable, and the algorithm might decide that a brain region continues into voxels that are actually part of the skull. For this reason we manually inspect the anatomical image with the brain mask overlaid. We can use Freesurfer tools to tweak the mask to exclude these errors.
Trouble Shooting
Is Freesurfer in your path?
This is an unlikely issue, but it is possible that your ~/.bashrc file doesn't add Freesurfer to your path. To check, launch a new terminal window. You should see something like the following:
-------- freesurfer-Linux-centos6_x86_64-stable-pub-v5.3.0 -------- Setting up environment for FreeSurfer/FS-FAST (and FSL) FREESURFER_HOME /usr/local/freesurfer FSFAST_HOME /usr/local/freesurfer/fsfast FSF_OUTPUT_FORMAT nii.gz SUBJECTS_DIR /usr/local/freesurfer/subjects MNI_DIR /usr/local/freesurfer/mni
If you don't, then open up your .bashrc file with a text editor:
gedit ~/.bashrc
Then add the following lines to the bottom of the file:
#FREESURFER export FREESURFER_HOME=/usr/local/freesurfer source ${FREESURFER_HOME}/SetUpFreeSurfer.sh #FSL export FSLDIR=/usr/share/fsl/5.0 source ${FSLDIR}/etc/fslconf/fsl.sh
Save your changes, log out of Linux and log back in.
ERROR: Flag unrecognized.
Most Linux programs take parameters, or flags that modify or specify how they are run. For example, you can't just call the recon-all
command; you have to tell the progam what data you want to work on, and so this information is provided using the -i
flag. Other flags might tell the program how aggressive to be when deciding to remove potential skull voxels, for example.
There are no hard-and-fast rules, but to find the set of flags that you can use for a particular Linux program, there are a few options you can try:
man program_name
program_name -help
program_name -?
Though often the program_name -some_flag
option causes the usage information to be displayed if some_flag is not a valid flag.
When you see an error message concerning an unrecognized flag, it is most likely because there is a typo in your command. For example:
recon-all -autorecon1 watershed 15
Each of the flags is supposed to be prefixed with a '-' character, but in the example above, -watershed
was instead typed as watershed
without the '-' character. These little typos can be hard to spot. So if you are completely perplexed why something doesn't work out when you followed the directions to the letter, the first thing you should do is throw out your assumption that you typed in the command correctly.