Home · Quickstart · Documentation · About · Nipy

# 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.