sMRI: FSReconAll¶
This script, smri_fsreconall.py, demonstrates the ability to use the create_reconall_workflow function to create a workflow and then run it on a set of subjects and then make an average subject:
python smri_fsreconall.py
For an example on how to call FreeSurfer’s reconall script in Nipype see smri_freesurfer.py.
Import necessary modules from nipype.
import os
import nipype.pipeline.engine as pe
import nipype.interfaces.io as nio
from nipype.workflows.smri.freesurfer import create_reconall_workflow
from nipype.interfaces.freesurfer.utils import MakeAverageSubject
from nipype.interfaces.utility import IdentityInterface
Assign the tutorial directory
tutorial_dir = os.path.abspath('smri_fsreconall_tutorial')
if not os.path.isdir(tutorial_dir):
os.mkdir(tutorial_dir)
Define the workflow directories
subject_list = ['s1', 's3']
data_dir = os.path.abspath('data')
subjects_dir = os.path.join(tutorial_dir, 'subjects_dir')
if not os.path.exists(subjects_dir):
os.mkdir(subjects_dir)
wf = pe.Workflow(name="l1workflow")
wf.base_dir = os.path.join(tutorial_dir, 'workdir')
Create inputspec
inputspec = pe.Node(interface=IdentityInterface(['subject_id']),
name="inputspec")
inputspec.iterables = ("subject_id", subject_list)
Grab data
datasource = pe.Node(interface=nio.DataGrabber(infields=['subject_id'],
outfields=['struct']),
name='datasource')
datasource.inputs.base_directory = data_dir
datasource.inputs.template = '%s/%s.nii'
datasource.inputs.template_args = dict(struct=[['subject_id', 'struct']])
datasource.inputs.subject_id = subject_list
datasource.inputs.sort_filelist = True
wf.connect(inputspec, 'subject_id', datasource, 'subject_id')
Run recon-all
recon_all = create_reconall_workflow()
recon_all.inputs.inputspec.subjects_dir = subjects_dir
wf.connect(datasource, 'struct', recon_all, 'inputspec.T1_files')
wf.connect(inputspec, 'subject_id', recon_all, 'inputspec.subject_id')
Make average subject
average = pe.JoinNode(interface=MakeAverageSubject(),
joinsource="inputspec",
joinfield="subjects_ids",
name="average")
average.inputs.subjects_dir = subjects_dir
wf.connect(recon_all, 'postdatasink_outputspec.subject_id', average, 'subjects_ids')
wf.run("MultiProc", plugin_args={'n_procs': 4})
Example source code
You can download the full source code of this example
.
This same script is also included in the Nipype source distribution under the
examples
directory.