What we will cover today

  • Overview of Nipype
  • Semantics of Nipype
  • Playing with interfaces
  • Creating workflows
  • Advanced features
  • Future directions

Presenter Notes

Why Nipype?

Presenter Notes

... one ring to bind them ...

Presenter Notes

Brain imaging: the process

From design to databases [1]

images/EDC.png

Presenter Notes

Brainimaging software

a plethora of evolving options

images/brainimagingsoftware.png

Presenter Notes

Brainimaging software: issues

  • different algorithms
  • different assumptions
  • different platforms
  • different interfaces
  • different file formats

Presenter Notes

Leads to many questions?

neuroscientist:

  • which packages should I use?
  • why should I use these packages?
  • how do they differ?
  • how should I use these packages?

developer:

  • which package(s) should I develop for?
  • how do I disseminate my software?

Presenter Notes

... and more questions

How do we:

  • Install, use, maintain and test multiple packages
  • Reduce manual intervention
  • Train people
  • Tailor to specific projects
  • Develop new tools
  • Perform reproducible research
images/fmri.png

Presenter Notes

Presenter Notes

Solution requirements

Coming at it from a developer's perspective, we needed something

  • lightweight
  • scriptable
  • provided formal, common semantics
  • allowed interactive exploration
  • supported efficient batch processing
  • enabled rapid algorithm prototyping
  • was flexible and adaptive

Presenter Notes

Existing technologies

shell scripting:

Can be quick to do, and powerful, but application specific scalability, and not easy to port across different architectures.

make/CMake:

Similar in concept to workflow execution in Nipype, but again limited by the need for command line tools and flexibility in terms of scaling across hardware architectures (although see makeflow).

Octave/MATLAB:

Integration with other tools is ad hoc (i.e., system call) and dataflow is managed at a programmatic level. However, see PSOM which offers a very nice alternative to some aspects of Nipype for Octave/Matlab users.

Graphical options: (e.g., LONI pipeline)

Adding or reusing components across different projects require XML manipulation or subscribing to some specific databases.

Presenter Notes

We built Nipype in Python

Presenter Notes

Why Python?

  • easy to learn
  • coding style makes for easy readability
  • cross-platform
  • extensive infrastructure for
  • development and distribution
  • scientific computing
  • brain imaging
  • several institutions are adopting it in computer science classes

Presenter Notes

What can we use Python for?

  • scripting (like shell scripts e.g. bash, csh)
  • make web sites (like these slides)
  • science (like R, Matlab, IDL, Octave, Scilab)
  • etc.

You just need to know 1 language to do almost everything !

Presenter Notes

Scientific Python building blocks

Presenter Notes

Brain Imaging in Python

  • NiPy, an umbrella project for Neuroimaging in Python: http://nipy.org
    • DiPy, diffusion imaging
    • Nibabel, file reading and writing
    • NiPy, preprocessing and statistical routines
    • Nipype, interfaces and workflows
    • Nitime, time series analysis
    • PySurfer, Surface visualization
  • PyMVPA, machine learning for neuroimaging: http://pymvpa.org
  • PsychoPy, stimulus presentation: http://psychopy.org

Presenter Notes

What is Nipype?

Presenter Notes

Nipype architecture [2]

  • Interface
  • Engine
  • Executable Plugins