Source code for neural.freesurfer

import os,subprocess
import neural as nl

freesurfer_home = None
if 'FREESURFER_HOME' in os.environ:
    freesurfer_home = os.environ['FREESURFER_HOME']

subjects_dir = '.'

#: parent of parent directory of file: e.g., this_dir/other_dir/filename
parpar_dir = lambda d: os.path.abspath(os.path.join(os.path.dirname(d),os.pardir))

guess_locations = [
    '/Applications/freesurfer',
    '/usr/local/freesurfer',
    '/opt/freesurfer'
]

if_exists = lambda f: f if os.path.exists(f) else None

[docs]class FreesurferDir(object): '''Class to interact with a freesurfer-organized directory''' def __init__(self,subj_dir,subj_id): #: The parent subjects directory (the ``SUBJECTS_DIR`` environment variable) self.subj_dir = subj_dir #: The individual subject id self.subj_id = subj_id #: The individual subject's directory (i.e., "[subj_dir]/[subj_id]") self.dir_name = os.path.join(subj_dir,subj_id) #: Path to the skull-stripped anatomy self.skull_strip = if_exists(os.path.join(self.dir_name,'mri','brainmask.auto.mgz'))
[docs]def mgz_to_nifti(filename,prefix=None,gzip=True): '''Convert ``filename`` to a NIFTI file using ``mri_convert``''' setup_freesurfer() if prefix==None: prefix = nl.prefix(filename) + '.nii' if gzip and not prefix.endswith('.gz'): prefix += '.gz' nl.run([os.path.join(freesurfer_home,'bin','mri_convert'),filename,prefix],products=prefix)
[docs]def guess_home(): '''If ``freesurfer_home`` is not set, try to make an intelligent guess at it''' global freesurfer_home if freesurfer_home != None: return True # if we already have it in the path, use that fv = nl.which('freeview') if fv: freesurfer_home = parpar_dir(os.path.realpath(fv)) return True for guess_dir in guess_locations: if os.path.exists(guess_dir): freesurfer_home = guess_dir return True return False
environ_setup = False
[docs]def setup_freesurfer(): '''Setup the freesurfer environment variables''' guess_home() os.environ['FREESURFER_HOME'] = freesurfer_home os.environ['SUBJECTS_DIR'] = subjects_dir # Run the setup script and collect the output: o = subprocess.check_output(['bash','-c','source %s/SetUpFreeSurfer.sh && env' % freesurfer_home]) env = [(a.partition('=')[0],a.partition('=')[2]) for a in o.split('\n') if len(a.strip())>0] for e in env: os.environ[e[0]] = e[1] environ_setup = True
[docs]def recon_all(subj_id,anatomies): '''Run the ``recon_all`` script''' if not environ_setup: setup_freesurfer() if isinstance(anatomies,basestring): anatomies = [anatomies] nl.run([os.path.join(freesurfer_home,'bin','recon-all'),'-all','-subjid',subj_id] + [['-i',anat] for anat in anatomies])