Skip to content

fsl_motion_outliers #1212

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 12, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion nipype/interfaces/fsl/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
PlotTimeSeries, PlotMotionParams, ConvertXFM,
SwapDimensions, PowerSpectrum, Reorient2Std,
Complex, InvWarp, WarpUtils, ConvertWarp, WarpPoints,
WarpPointsToStd, RobustFOV, CopyGeom)
WarpPointsToStd, RobustFOV, CopyGeom, MotionOutliers)

from .epi import (PrepareFieldmap, TOPUP, ApplyTOPUP, Eddy, EPIDeWarp,
SigLoss, EddyCorrect, EpiReg)
Expand Down
65 changes: 65 additions & 0 deletions nipype/interfaces/fsl/tests/test_auto_MotionOutliers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT
from nipype.testing import assert_equal
from nipype.interfaces.fsl.utils import MotionOutliers

def test_MotionOutliers_inputs():
input_map = dict(args=dict(argstr='%s',
),
dummy=dict(argstr='--dummy=%d',
),
environ=dict(nohash=True,
usedefault=True,
),
ignore_exception=dict(nohash=True,
usedefault=True,
),
in_file=dict(argstr='-i %s',
mandatory=True,
),
mask=dict(argstr='-m %s',
),
metric=dict(argstr='--%s',
),
no_motion_correction=dict(argstr='--nomoco',
),
out_file=dict(argstr='-o %s',
hash_files=False,
keep_extension=True,
name_source='in_file',
name_template='%s_outliers.txt',
),
out_metric_plot=dict(argstr='-p %s',
hash_files=False,
keep_extension=True,
name_source='in_file',
name_template='%s_metrics.png',
),
out_metric_values=dict(argstr='-s %s',
hash_files=False,
keep_extension=True,
name_source='in_file',
name_template='%s_metrics.txt',
),
output_type=dict(),
terminal_output=dict(nohash=True,
),
threshold=dict(argstr='--thresh=%g',
),
)
inputs = MotionOutliers.input_spec()

for key, metadata in input_map.items():
for metakey, value in metadata.items():
yield assert_equal, getattr(inputs.traits()[key], metakey), value

def test_MotionOutliers_outputs():
output_map = dict(out_file=dict(),
out_metric_plot=dict(),
out_metric_values=dict(),
)
outputs = MotionOutliers.output_spec()

for key, metadata in output_map.items():
for metakey, value in metadata.items():
yield assert_equal, getattr(outputs.traits()[key], metakey), value

42 changes: 42 additions & 0 deletions nipype/interfaces/fsl/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1980,3 +1980,45 @@ class WarpPointsToStd(WarpPoints):
input_spec = WarpPointsToStdInputSpec
output_spec = WarpPointsOutputSpec
_cmd = 'img2stdcoord'


class MotionOutliersInputSpec(FSLCommandInputSpec):
in_file = File(exists=True, mandatory=True, desc="unfiltered 4D image", argstr="-i %s")
out_file = File(argstr="-o %s", name_source='in_file', name_template='%s_outliers.txt',
keep_extension=True, desc='output outlier file name', hash_files=False)
mask = File(exists=True, argstr="-m %s", desc="mask image for calculating metric")
metric = traits.Enum('refrms', ['refrms', 'dvars', 'refmse', 'fd', 'fdrms'], argstr="--%s", desc="metrics: refrms - RMS intensity difference to reference volume as metric [default metric],\
refmse - Mean Square Error version of refrms (used in original version of fsl_motion_outliers) \
dvars - DVARS \
fd - frame displacement \
fdrms - FD with RMS matrix calculation")
threshold = traits.Float(argstr="--thresh=%g", desc="specify absolute threshold value (otherwise use box-plot cutoff = P75 + 1.5*IQR)")
no_motion_correction = traits.Bool(argstr="--nomoco", desc="do not run motion correction (assumed already done)")
dummy = traits.Int(argstr="--dummy=%d", desc='number of dummy scans to delete (before running anything and creating EVs)')
out_metric_values = File(argstr="-s %s", name_source='in_file', name_template='%s_metrics.txt',
keep_extension=True, desc='output metric values (DVARS etc.) file name', hash_files=False)
out_metric_plot = File(argstr="-p %s", name_source='in_file', name_template='%s_metrics.png',
keep_extension=True, desc='output metric values plot (DVARS etc.) file name', hash_files=False)

class MotionOutliersOutputSpec(TraitedSpec):
out_file = File(exists=True)
out_metric_values = File(exists=True)
out_metric_plot = File(exists=True)


class MotionOutliers(FSLCommand):
"""
Use FSL fsl_motion_outliers`http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FSLMotionOutliers`_ to find outliers in timeseries (4d) data.
Examples
--------
>>> from nipype.interfaces.fsl import MotionOutliers
>>> mo = MotionOutliers()
>>> mo.inputs.in_file = "epi.nii"
>>> mo.cmdline # doctest: +ELLIPSIS
'fsl_motion_outliers -i epi.nii -o epi_outliers.txt -p epi_metrics.png -s epi_metrics.txt'
>>> res = mo.run() # doctest: +SKIP
"""

input_spec = MotionOutliersInputSpec
output_spec = MotionOutliersOutputSpec
_cmd = 'fsl_motion_outliers'