Skip to content

Commit fcd493e

Browse files
committed
Merge pull request #1212 from chrisfilo/enh/fsl_outliers
fsl_motion_outliers
2 parents 0c9d4ee + d65318a commit fcd493e

File tree

3 files changed

+108
-1
lines changed

3 files changed

+108
-1
lines changed

nipype/interfaces/fsl/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
PlotTimeSeries, PlotMotionParams, ConvertXFM,
1818
SwapDimensions, PowerSpectrum, Reorient2Std,
1919
Complex, InvWarp, WarpUtils, ConvertWarp, WarpPoints,
20-
WarpPointsToStd, RobustFOV, CopyGeom)
20+
WarpPointsToStd, RobustFOV, CopyGeom, MotionOutliers)
2121

2222
from .epi import (PrepareFieldmap, TOPUP, ApplyTOPUP, Eddy, EPIDeWarp,
2323
SigLoss, EddyCorrect, EpiReg)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT
2+
from nipype.testing import assert_equal
3+
from nipype.interfaces.fsl.utils import MotionOutliers
4+
5+
def test_MotionOutliers_inputs():
6+
input_map = dict(args=dict(argstr='%s',
7+
),
8+
dummy=dict(argstr='--dummy=%d',
9+
),
10+
environ=dict(nohash=True,
11+
usedefault=True,
12+
),
13+
ignore_exception=dict(nohash=True,
14+
usedefault=True,
15+
),
16+
in_file=dict(argstr='-i %s',
17+
mandatory=True,
18+
),
19+
mask=dict(argstr='-m %s',
20+
),
21+
metric=dict(argstr='--%s',
22+
),
23+
no_motion_correction=dict(argstr='--nomoco',
24+
),
25+
out_file=dict(argstr='-o %s',
26+
hash_files=False,
27+
keep_extension=True,
28+
name_source='in_file',
29+
name_template='%s_outliers.txt',
30+
),
31+
out_metric_plot=dict(argstr='-p %s',
32+
hash_files=False,
33+
keep_extension=True,
34+
name_source='in_file',
35+
name_template='%s_metrics.png',
36+
),
37+
out_metric_values=dict(argstr='-s %s',
38+
hash_files=False,
39+
keep_extension=True,
40+
name_source='in_file',
41+
name_template='%s_metrics.txt',
42+
),
43+
output_type=dict(),
44+
terminal_output=dict(nohash=True,
45+
),
46+
threshold=dict(argstr='--thresh=%g',
47+
),
48+
)
49+
inputs = MotionOutliers.input_spec()
50+
51+
for key, metadata in input_map.items():
52+
for metakey, value in metadata.items():
53+
yield assert_equal, getattr(inputs.traits()[key], metakey), value
54+
55+
def test_MotionOutliers_outputs():
56+
output_map = dict(out_file=dict(),
57+
out_metric_plot=dict(),
58+
out_metric_values=dict(),
59+
)
60+
outputs = MotionOutliers.output_spec()
61+
62+
for key, metadata in output_map.items():
63+
for metakey, value in metadata.items():
64+
yield assert_equal, getattr(outputs.traits()[key], metakey), value
65+

nipype/interfaces/fsl/utils.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,3 +1980,45 @@ class WarpPointsToStd(WarpPoints):
19801980
input_spec = WarpPointsToStdInputSpec
19811981
output_spec = WarpPointsOutputSpec
19821982
_cmd = 'img2stdcoord'
1983+
1984+
1985+
class MotionOutliersInputSpec(FSLCommandInputSpec):
1986+
in_file = File(exists=True, mandatory=True, desc="unfiltered 4D image", argstr="-i %s")
1987+
out_file = File(argstr="-o %s", name_source='in_file', name_template='%s_outliers.txt',
1988+
keep_extension=True, desc='output outlier file name', hash_files=False)
1989+
mask = File(exists=True, argstr="-m %s", desc="mask image for calculating metric")
1990+
metric = traits.Enum('refrms', ['refrms', 'dvars', 'refmse', 'fd', 'fdrms'], argstr="--%s", desc="metrics: refrms - RMS intensity difference to reference volume as metric [default metric],\
1991+
refmse - Mean Square Error version of refrms (used in original version of fsl_motion_outliers) \
1992+
dvars - DVARS \
1993+
fd - frame displacement \
1994+
fdrms - FD with RMS matrix calculation")
1995+
threshold = traits.Float(argstr="--thresh=%g", desc="specify absolute threshold value (otherwise use box-plot cutoff = P75 + 1.5*IQR)")
1996+
no_motion_correction = traits.Bool(argstr="--nomoco", desc="do not run motion correction (assumed already done)")
1997+
dummy = traits.Int(argstr="--dummy=%d", desc='number of dummy scans to delete (before running anything and creating EVs)')
1998+
out_metric_values = File(argstr="-s %s", name_source='in_file', name_template='%s_metrics.txt',
1999+
keep_extension=True, desc='output metric values (DVARS etc.) file name', hash_files=False)
2000+
out_metric_plot = File(argstr="-p %s", name_source='in_file', name_template='%s_metrics.png',
2001+
keep_extension=True, desc='output metric values plot (DVARS etc.) file name', hash_files=False)
2002+
2003+
class MotionOutliersOutputSpec(TraitedSpec):
2004+
out_file = File(exists=True)
2005+
out_metric_values = File(exists=True)
2006+
out_metric_plot = File(exists=True)
2007+
2008+
2009+
class MotionOutliers(FSLCommand):
2010+
"""
2011+
Use FSL fsl_motion_outliers`http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FSLMotionOutliers`_ to find outliers in timeseries (4d) data.
2012+
Examples
2013+
--------
2014+
>>> from nipype.interfaces.fsl import MotionOutliers
2015+
>>> mo = MotionOutliers()
2016+
>>> mo.inputs.in_file = "epi.nii"
2017+
>>> mo.cmdline # doctest: +ELLIPSIS
2018+
'fsl_motion_outliers -i epi.nii -o epi_outliers.txt -p epi_metrics.png -s epi_metrics.txt'
2019+
>>> res = mo.run() # doctest: +SKIP
2020+
"""
2021+
2022+
input_spec = MotionOutliersInputSpec
2023+
output_spec = MotionOutliersOutputSpec
2024+
_cmd = 'fsl_motion_outliers'

0 commit comments

Comments
 (0)