Pydra tasks for FreeSurfer.
Pydra is a dataflow engine which provides a set of lightweight abstractions for DAG construction, manipulation, and distributed execution.
FreeSurfer is a neuroimaging toolkit for processing, analyzing, and visualizing human brain MR images.
This project exposes some of FreeSurfer's utilities as Pydra tasks to facilitate their integration into more advanced processing workflows.
Table of contents
Module | Interfaces |
---|---|
gtmseg | GTMSeg |
mri | Aparc2Aseg, Binarize, Convert, Coreg, Label2Vol, RobustRegister, RobustTemplate, Surf2Surf, Vol2Vol |
mris | AnatomicalStats, CALabel, CATrain, Expand, Preproc |
recon_all | ReconAll, BaseReconAll, LongReconAll |
pip install pydra-freesurfer
A separate installation of FreeSurfer is required to use this package. Please review the following instructions and licensing details.
Automatically generated tasks can be found in the pydra.tasks.freesurfer.auto
sub-package.
These interfaces should be treated with caution as they likely do not pass testing.
Generated tasks that have been edited and pass testing will be imported into one or more of the
pydra.tasks.freesurfer.v*
sub-packages (e.g. pydra.tasks.freesurfer.v7_4
) corresponding
to the version of the freesurfer toolkit they are designed for.
This template uses GitHub Actions to run tests and
deploy packages to PYPI. New packages are built and uploaded when releases are created on
GitHub, or new releases of Nipype or the Nipype2Pydra conversion tool are released.
Releases triggered by updates to Nipype or Nipype2Pydra are signified by the postN
suffix where N = <nipype-version><nipype2pydra-version>
with the '.'s stripped, e.g.
v0.2.3post185010
corresponds to the v0.2.3 tag of this repository with auto-generated
packages from Nipype 1.8.5 using Nipype2Pydra 0.1.0.
The development of this package is expected to have two phases
- Where the corresponding Nipype interfaces are considered to be the ground truth, and the Pydra tasks are generated from them
- When the Pydra tasks are considered be mature and they are edited by hand
Different tasks will probably mature at different times so there will probably be an intermediate phase between 1 and 2.
Before the pydra task interfaces can be generated and installed, the file-format classes fileformats packages corresponding to Freesurfer specific file formats will need to be installed
pip install -e ./related-packages/fileformats[dev]
pip install -e ./related-packages/fileformats-extras[dev]
Next install the requirements for running the auto-conversion script and generate the Pydra task interfaces from their Nipype counterparts
pip install -r nipype-auto-conv/requirements.txt
The run the conversion script to convert Nipype interfaces to Pydra
nipype-auto-conv/generate
Install repo in developer mode from the source directory and install pre-commit to ensure consistent code-style and quality.
pip install -e .[test,dev]
pre-commit install
The auto-converted Pydra tasks are generated from their corresponding Nipype interface
in combination with "conversion hints" contained in YAML specs
located in nipype-auto-conv/specs/
. The self-documented conversion specs are
to be edited by hand in order to assist the auto-converter produce valid pydra tasks.
After editing one or more conversion specs the pydra.tasks.freesurfer.auto
package should
be regenerated by running
nipype-auto-conv/generate
The tests should be run on the auto-generated tasks to see if they are valid
pytest pydra/tasks/freesurfer/auto/tests/test_<the-name-of-the-task-you-edited>.py
If the test passes you should then edit the pydra/tasks/freesurfer/v*/__init__.py
file
to import the auto-generated task interface to signify that it has been validated and is
ready for use, where v* corresponds to the version of Freesurfer that you have tested
it against e.g.
from pydra.tasks.freesurfer.auto import <the-task-you-have-validated>
and copy the test file pydra/tasks/freesurfer/auto/tests/test_<validated-task>.py
into pydra/tasks/freesurfer/v*/tests
.
The automatically generated tests will attempt to provided the task instance to be tested with sensible default values based on the type of the field and any constraints it has on it. However, these will often need to be manually overridden after consulting the underlying tool's documentation.
For file-based data, automatically generated file-system objects will be created for
selected format types, e.g. Nifti, Dicom. Therefore, it is important to specify the
format of the file using the "mime-like" string corresponding to a
fileformats class
in the inputs > types
and outputs > types
dicts of the YAML spec.
If the required file-type is not found implemented within fileformats, please see the fileformats
docs [https://arcanaframework.github.io/fileformats/developer.html] for instructions on how to define
new fileformat types, and see
fileformats-medimage-extras
for an example on how to implement methods to generate sample data for them. Implementations of
new fileformats that are specific to Freesurfer, and functions to
generate sample data for them, should be defined in related-packages/fileformats
and related-packages/fileformats-extras
, respectively.
This project is distributed under the terms of the Apache License, Version 2.0.