.. AUTO-GENERATED FILE -- DO NOT EDIT!

.. _example_fmri_slicer_coregistration:


=====================================
fMRI: Coregistration - Slicer, BRAINS
=====================================

This is currently not working and will raise an exception in release 0.3. It
will be fixed in a later release.

    python fmri_slicer_coregistration.py


::
  #raise RuntimeWarning, 'Slicer not fully implmented'
  from nipype.interfaces.slicer import BRAINSFit, BRAINSResample
  
  
  

Import necessary modules from nipype.

::
  
  import nipype.interfaces.io as nio           # Data i/o
  import nipype.interfaces.utility as util     # utility
  import nipype.pipeline.engine as pe          # pypeline engine
  import os                                    # system functions
  


Preliminaries
-------------

Confirm package dependencies are installed.  (This is only for the
tutorial, rarely would you put this in your own code.)

::
  
  from nipype.utils.misc import package_check
  
  package_check('numpy', '1.3', 'tutorial1')
  package_check('scipy', '0.7', 'tutorial1')
  package_check('networkx', '1.0', 'tutorial1')
  package_check('IPython', '0.10', 'tutorial1')
  

The nipype tutorial contains data for two subjects.  Subject data
is in two subdirectories, ``s1`` and ``s2``.  Each subject directory
contains four functional volumes: f3.nii, f5.nii, f7.nii, f10.nii. And
one anatomical volume named struct.nii.

Below we set some variables to inform the ``datasource`` about the
layout of our data.  We specify the location of the data, the subject
sub-directories and a dictionary that maps each run to a mnemonic (or
field) for the run type (``struct`` or ``func``).  These fields become
the output fields of the ``datasource`` node in the pipeline.

In the example below, run 'f3' is of type 'func' and gets mapped to a
nifti filename through a template '%s.nii'. So 'f3' would become
'f3.nii'.


::
  
  # Specify the location of the data.
  data_dir = os.path.abspath('data')
  # Specify the subject directories
  subject_list = ['s1', 's3']
  # Map field names to individual subject runs.
  info = dict(func=[['subject_id', 'f3']],
              struct=[['subject_id','struct']])
  
  infosource = pe.Node(interface=util.IdentityInterface(fields=['subject_id']),
                       name="infosource")
  

Here we set up iteration over all the subjects. The following line
is a particular example of the flexibility of the system.  The
``datasource`` attribute ``iterables`` tells the pipeline engine that
it should repeat the analysis on each of the items in the
``subject_list``. In the current example, the entire first level
preprocessing and estimation will be repeated for each subject
contained in subject_list.

::
  
  infosource.iterables = ('subject_id', subject_list)
  

Preprocessing pipeline nodes
----------------------------

Now we create a :class:`nipype.interfaces.io.DataSource` object and
fill in the information from above about the layout of our data.  The
:class:`nipype.pipeline.NodeWrapper` module wraps the interface object
and provides additional housekeeping and pipeline specific
functionality.

::
  
  datasource = pe.Node(interface=nio.DataGrabber(infields=['subject_id'],
                                                 outfields=['func', 'struct']),
                       name = 'datasource')
  datasource.inputs.base_directory = data_dir
  datasource.inputs.template = '%s/%s.nii'
  datasource.inputs.template_args = info
  datasource.inputs.sort_filelist = True
  
  coregister = pe.Node(interface=BRAINSFit(), name="coregister")
  coregister.inputs.outputTransform = True
  coregister.inputs.outputVolume = True
  coregister.inputs.transformType = ["Affine"]
  
  reslice = pe.Node(interface=BRAINSResample(), name="reslice")
  reslice.inputs.outputVolume = True
  
  pipeline = pe.Workflow(name="pipeline")
  pipeline.base_dir = os.path.abspath('slicer_tutorial/workingdir')
  
  pipeline.connect([(infosource, datasource, [('subject_id', 'subject_id')]),
                    (datasource,coregister,[('func','movingVolume')]),
                    (datasource,coregister,[('struct','fixedVolume')]),
                    (coregister,reslice,[('outputTransform', 'warpTransform')]),
                    (datasource,reslice,[('func','inputVolume')]),
                    (datasource,reslice,[('struct','referenceVolume')])
                    ])
  
  if __name__ == '__main__':
      pipeline.run()
      pipeline.write_graph()


.. include:: ../../links_names.txt


        
.. admonition:: Example source code

   You can download :download:`the full source code of this example <../../../examples/fmri_slicer_coregistration.py>`.
   This same script is also included in the Nipype source distribution under the
   :file:`examples` directory.

