diff --git a/nipype/interfaces/dtitk/__init__.py b/nipype/interfaces/dtitk/__init__.py new file mode 100644 index 0000000000..e3f3cb7aab --- /dev/null +++ b/nipype/interfaces/dtitk/__init__.py @@ -0,0 +1,15 @@ +"""The dtitk module provides classes for interfacing with the `Diffusion +Tensor Imaging Toolkit (DTI-TK) +`_ command line tools. + +Top-level namespace for dti-tk. +""" + +# from .base import () +from .registration import (RigidTask, AffineTask, DiffeoTask, + ComposeXfmTask, diffeoSymTensor3DVolTask, + affSymTensor3DVolTask, affScalarVolTask, + diffeoScalarVolTask) +from .utils import (TVAdjustOriginTask, TVAdjustVoxSpTask, + SVAdjustVoxSpTask, TVResampleTask, SVResampleTask, + TVtoolTask, BinThreshTask) diff --git a/nipype/interfaces/dtitk/base.py b/nipype/interfaces/dtitk/base.py new file mode 100644 index 0000000000..b14ad5ed23 --- /dev/null +++ b/nipype/interfaces/dtitk/base.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- +# vi: set ft=python sts=4 ts=4 sw=4 et: +"""The dtitk module provides classes for interfacing with the `DTITK +`_ command line tools. + +These are the base tools for working with DTITK. +Preprocessing tools are found in dtitk/preprocess.py +Registration tools are found in dtitk/registration.py + +Currently these tools are supported: + +* Rigid Tensor Registration +* Affine Tensor Registration +* Diffeomorphic Tensor Registration + +Examples +-------- +See the docstrings of the individual classes for examples. + +""" +from __future__ import print_function, division, unicode_literals, \ + absolute_import + +import os + +from ... import logging +from ...utils.filemanip import fname_presuffix +from ..base import CommandLine +from nipype.interfaces.fsl.base import Info + +LOGGER = logging.getLogger('interface') + + +class CommandLineDtitk(CommandLine): + + def _gen_fname(self, basename, cwd=None, suffix=None, change_ext=True, + ext=None): + """Generate a filename based on the given parameters. + + The filename will take the form: cwd/basename. + If change_ext is True, it will use the extentions specified in + intputs.output_type. + + Parameters + ---------- + basename : str + Filename to base the new filename on. + cwd : str + Path to prefix to the new filename. (default is os.getcwd()) + suffix : str + Suffix to add to the `basename`. (defaults is '' ) + change_ext : bool + Flag to change the filename extension to the FSL output type. + (default True) + + Returns + ------- + fname : str + New filename based on given parameters. + + """ + + if basename == '': + msg = 'Unable to generate filename for command %s. ' % self.cmd + msg += 'basename is not set!' + raise ValueError(msg) + if cwd is None: + cwd = os.getcwd() + if ext is None: + ext = Info.output_type_to_ext(self.inputs.output_type) + if change_ext: + if suffix: + suffix = ''.join((suffix, ext)) + else: + suffix = ext + if suffix is None: + suffix = '' + fname = fname_presuffix(basename, suffix=suffix, + use_ext=False, newpath=cwd) + return fname diff --git a/nipype/interfaces/dtitk/registration.py b/nipype/interfaces/dtitk/registration.py new file mode 100644 index 0000000000..3dd1c068c8 --- /dev/null +++ b/nipype/interfaces/dtitk/registration.py @@ -0,0 +1,394 @@ +from ..base import TraitedSpec, CommandLineInputSpec, traits, isdefined +from ...utils.filemanip import fname_presuffix +import os +from .base import CommandLineDtitk + + +class RigidInputSpec(CommandLineInputSpec): + fixed_file = traits.Str(desc="fixed diffusion tensor image", + exists=True, mandatory=True, + position=0, argstr="%s") + moving_file = traits.Str(desc="diffusion tensor image path", exists=True, + mandatory=True, position=1, argstr="%s") + similarity_metric = traits.Enum('EDS', 'GDS', 'DDS', 'NMI', exists=True, + mandatory=True, position=2, argstr="%s", + desc="similarity metric") + samplingX = traits.Float(mandatory=True, position=3, argstr="%s", + desc="dist between samp points (mm)", + default_value=4) + samplingY = traits.Float(mandatory=True, position=4, argstr="%s", + desc="dist between samp points (mm)", + default_value=4) + samplingZ = traits.Float(mandatory=True, position=5, argstr="%s", + desc="dist between samp points (mm)", + default_value=4) + ftol = traits.Float(mandatory=True, position=6, argstr="%s", + desc="cost function tolerance", default_value=0.01) + useInTrans = traits.Float(mandatory=False, position=7, argstr="%s", + desc="to initialize with existing xfm set as 1", + default_value=1) + + +class RigidOutputSpec(TraitedSpec): + out_file = traits.File(exists=True) + out_file_xfm = traits.File(exists=True) + + +class RigidTask(CommandLineDtitk): + """ + Performs rigid registration between two tensor volumes + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.RigidTask() + >>> node.inputs.fixed_file = 'diffusion.nii.gz' + >>> node.inputs.moving_file = 'diffusion2.nii.gz' + >>> node.inputs.similarity_metric = 'EDS' + >>> node.inputs.samplingX = 4 + >>> node.inputs.samplingY = 4 + >>> node.inputs.samplingZ = 4 + >>> node.inputs.ftol = 0.01 + >>> node.inputs.useInTrans = 1 + >>> node.run() # doctest: +SKIP + """ + input_spec = RigidInputSpec + output_spec = RigidOutputSpec + _cmd = 'dti_rigid_reg' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file_xfm'] = self.inputs.moving_file.replace('.nii.gz', + '.aff') + outputs['out_file'] = self.inputs.moving_file.replace('.nii.gz', + '_aff.nii.gz') + return outputs + + +class AffineInputSpec(CommandLineInputSpec): + fixed_file = traits.Str(desc="fixed diffusion tensor image", + exists=True, mandatory=True, + position=0, argstr="%s") + moving_file = traits.Str(desc="diffusion tensor image path", exists=True, + mandatory=True, position=1, argstr="%s") + similarity_metric = traits.Enum('EDS', 'GDS', 'DDS', 'NMI', exists=True, + mandatory=True, position=2, argstr="%s", + desc="similarity metric") + samplingX = traits.Float(mandatory=True, position=3, argstr="%s", + desc="dist between samp points (mm)", + default_value=4) + samplingY = traits.Float(mandatory=True, position=4, argstr="%s", + desc="dist between samp points (mm)", + default_value=4) + samplingZ = traits.Float(mandatory=True, position=5, argstr="%s", + desc="dist between samp points (mm)", + default_value=4) + ftol = traits.Float(mandatory=True, position=6, argstr="%s", + desc="cost function tolerance", default_value=0.01) + useInTrans = traits.Float(mandatory=False, position=7, argstr="%s", + desc="to initialize with existing xfm set as 1", + default_value=1) + + +class AffineOutputSpec(TraitedSpec): + out_file = traits.File(exists=True) + out_file_xfm = traits.File(exists=True) + + +class AffineTask(CommandLineDtitk): + """ + Performs affine registration between two tensor volumes + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.AffineTask() + >>> node.inputs.fixed_file = 'diffusion.nii.gz' + >>> node.inputs.moving_file = 'diffusion2.nii.gz' + >>> node.inputs.similarity_metric = 'EDS' + >>> node.inputs.samplingX = 4 + >>> node.inputs.samplingY = 4 + >>> node.inputs.samplingZ = 4 + >>> node.inputs.ftol = 0.01 + >>> node.inputs.useInTrans = 1 + >>> node.run() # doctest: +SKIP + """ + input_spec = AffineInputSpec + output_spec = AffineOutputSpec + _cmd = 'dti_affine_reg' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file_xfm'] = self.inputs.moving_file.replace('.nii.gz', + '.aff') + outputs['out_file'] = self.inputs.moving_file.replace('.nii.gz', + '_aff.nii.gz') + return outputs + + +class DiffeoInputSpec(CommandLineInputSpec): + fixed_file = traits.Str(desc="fixed diffusion tensor image", + exists=True, mandatory=False, position=0, + argstr="%s") + moving_file = traits.Str(desc="moving diffusion tensor image", + exists=True, mandatory=False, + position=1, argstr="%s") + mask = traits.Str(desc="mask", exists=True, mandatory=False, position=2, + argstr="%s") + legacy = traits.Float(desc="legacy parameter; always set to 1", + exists=True, mandatory=True, + position=3, default_value=1, argstr="%s") + n_iters = traits.Float(desc="number of iterations", + exists=True, mandatory=True, + position=4, default_value=6, argstr="%s") + ftol = traits.Float(desc="iteration for the optimization to stop", + exists=True, mandatory=True, + position=5, default_value=0.002, argstr="%s") + + +class DiffeoOutputSpec(TraitedSpec): + out_file = traits.File(exists=True) + out_file_xfm = traits.File(exists=True) + + +class DiffeoTask(CommandLineDtitk): + """ + Performs diffeomorphic registration between two tensor volumes + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.DiffeoTask() + >>> node.inputs.fixed_file = 'diffusion.nii.gz' + >>> node.inputs.moving_file = 'diffusion2.nii.gz' + >>> node.inputs.mask = 'mask.nii.gz' + >>> node.inputs.legacy = 1 + >>> node.inputs.n_iters = 6 + >>> node.inputs.ftol = 0.002 + >>> node.run() # doctest: +SKIP + """ + input_spec = DiffeoInputSpec + output_spec = DiffeoOutputSpec + _cmd = 'dti_diffeomorphic_reg' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file_xfm'] = self.inputs.moving_file.replace( + '.nii.gz', '_diffeo.df.nii.gz') + outputs['out_file'] = self.inputs.moving_file.replace( + '.nii.gz', '_diffeo.nii.gz') + return outputs + + +class ComposeXfmInputSpec(CommandLineInputSpec): + in_df = traits.Str(desc='diffeomorphic file.df.nii.gz', exists=True, + mandatory=False, position=1, argstr="-df %s") + in_aff = traits.Str(desc='affine file.aff', exists=True, mandatory=False, + position=0, argstr="-aff %s") + out_file = traits.Str(desc='output_path', exists=True, mandatory=False, + position=2, argstr="-out %s", name_source="in_df", + name_template="%s_comboaff.nii.gz") + + +class ComposeXfmOutputSpec(TraitedSpec): + out_file = traits.File(desc='cheese', exists=True) + + +class ComposeXfmTask(CommandLineDtitk): + """ + Combines diffeomorphic and affine transforms + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.ComposeXfmTask() + >>> node.inputs.in_df = 'ants_Warp.nii.gz' + >>> node.inputs.in_aff= 'ants_Affine.txt' + >>> node.run() # doctest: +SKIP + """ + input_spec = ComposeXfmInputSpec + output_spec = ComposeXfmOutputSpec + _cmd = 'dfRightComposeAffine' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.in_df.replace('.df.nii.gz', + '_combo.df.nii.gz') + return outputs + + +class diffeoSymTensor3DVolInputSpec(CommandLineInputSpec): + in_tensor = traits.Str(desc='moving tensor', exists=True, mandatory=False, + position=0, argstr="-in %s") + in_xfm = traits.Str(desc='transform to apply', exists=True, + mandatory=False, + position=1, argstr="-trans %s") + in_target = traits.Str(desc='', exists=True, mandatory=False, position=2, + argstr="-target %s") + out_file = traits.Str(desc='', exists=True, mandatory=False, position=3, + argstr="-out %s", name_source="in_tensor", + name_template="%s_diffeoxfmd.nii.gz") + + +class diffeoSymTensor3DVolOutputSpec(TraitedSpec): + out_file = traits.File(desc='cheese', exists=True) + + +class diffeoSymTensor3DVolTask(CommandLineDtitk): + """ + Applies diffeomorphic transform to a tensor volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.diffeoSymTensor3DVolTask() + >>> node.inputs.in_tensor = 'diffusion.nii' + >>> node.inputs.in_xfm = 'ants_Warp.nii.gz' + >>> node.run() # doctest: +SKIP + """ + + input_spec = diffeoSymTensor3DVolInputSpec + output_spec = diffeoSymTensor3DVolOutputSpec + _cmd = 'deformationSymTensor3DVolume' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.out_file + return outputs + + +class affSymTensor3DVolInputSpec(CommandLineInputSpec): + in_tensor = traits.Str(desc='moving tensor', exists=True, mandatory=False, + position=0, argstr="-in %s") + in_xfm = traits.Str(desc='transform to apply', exists=True, + mandatory=False, position=1, argstr="-trans %s") + in_target = traits.Str(desc='', exists=True, mandatory=False, position=2, + argstr="-target %s") + out_file = traits.Str(desc='', exists=True, mandatory=False, position=3, + argstr="-out %s", name_source="in_tensor", + name_template="%s_affxfmd.nii.gz") + + +class affSymTensor3DVolOutputSpec(TraitedSpec): + out_file = traits.File(desc='cheese', exists=True) + + +class affSymTensor3DVolTask(CommandLineDtitk): + """ + Applies affine transform to a tensor volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.affSymTensor3DVolTask() + >>> node.inputs.in_tensor = 'diffusion.nii' + >>> node.inputs.in_xfm = 'ants_Affine.txt' + >>> node.run() # doctest: +SKIP + """ + input_spec = affSymTensor3DVolInputSpec + output_spec = affSymTensor3DVolOutputSpec + _cmd = 'affineSymTensor3DVolume' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = os.path.abspath(self.inputs.out_file) + return outputs + + +class affScalarVolInputSpec(CommandLineInputSpec): + in_volume = traits.Str(desc='moving volume', exists=True, mandatory=False, + position=0, argstr="-in %s") + in_xfm = traits.Str(desc='transform to apply', exists=True, + mandatory=False, + position=1, argstr="-trans %s") + in_target = traits.Str(desc='', position=2, argstr="-target %s") + out_file = traits.Str(desc='', mandatory=False, position=3, + argstr="-out %s", name_source="in_volume", + name_template="%s_affxfmd.nii.gz") + + +class affScalarVolOutputSpec(TraitedSpec): + out_file = traits.File(desc='moved volume', exists=True) + + +class affScalarVolTask(CommandLineDtitk): + """ + Applies affine transform to a scalar volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.affScalarVolTask() + >>> node.inputs.in_volume = 'fa.nii.gz' + >>> node.inputs.in_xfm = 'ants_Affine.txt' + >>> node.run() # doctest: +SKIP + """ + input_spec = affScalarVolInputSpec + output_spec = affScalarVolOutputSpec + _cmd = 'affineScalarVolume' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = os.path.abspath(self.inputs.out_file) + return outputs + + +class diffeoScalarVolInputSpec(CommandLineInputSpec): + in_volume = traits.Str(desc='moving volume', exists=True, mandatory=False, + position=0, argstr="-in %s") + in_xfm = traits.Str(desc='transform to apply', exists=True, + mandatory=False, + position=2, argstr="-trans %s") + in_target = traits.Str(desc='', exists=True, mandatory=False, position=3, + argstr="-target %s") + out_file = traits.Str(desc='', position=1, argstr="-out %s", + name_source="in_volume", + name_template="%s_diffeoxfmd.nii.gz") + in_vsize = traits.Str(desc='', exists=True, mandatory=False, position=4, + argstr="-vsize %s") + in_flip = traits.Str(desc='', exists=True, mandatory=False, position=5, + argstr="-flip %s") + in_type = traits.Str(desc='', exists=True, mandatory=False, position=6, + argstr="-type %s") + in_interp = traits.Str(desc='0 trilin, 1 NN', exists=True, mandatory=False, + position=7, argstr="-interp %s") + + +class diffeoScalarVolOutputSpec(TraitedSpec): + out_file = traits.File(desc='moved volume', exists=True) + + +class diffeoScalarVolTask(CommandLineDtitk): + """ + Applies diffeomorphic transform to a scalar volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.diffeoScalarVolTask() + >>> node.inputs.in_volume = 'fa.nii.gz' + >>> node.inputs.in_xfm = 'ants_Warp.nii.gz' + >>> node.run() # doctest: +SKIP + """ + + input_spec = diffeoScalarVolInputSpec + output_spec = diffeoScalarVolOutputSpec + _cmd = 'deformationScalarVolume' + + def _list_outputs(self): + outputs = self.output_spec().get() + if not isdefined(self.inputs.out_file): + self.inputs.out_file = fname_presuffix(self.inputs.in_volume, + suffix="_diffeoxfmd", + newpath=os.path.abspath( + ".")) + outputs['out_file'] = os.path.abspath(self.inputs.out_file) + return outputs diff --git a/nipype/interfaces/dtitk/tests/__init__.py b/nipype/interfaces/dtitk/tests/__init__.py new file mode 100644 index 0000000000..99fb243f19 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- +# vi: set ft=python sts=4 ts=4 sw=4 et: diff --git a/nipype/interfaces/dtitk/tests/test_auto_AffineTask.py b/nipype/interfaces/dtitk/tests/test_auto_AffineTask.py new file mode 100644 index 0000000000..cff7d1c0d1 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_AffineTask.py @@ -0,0 +1,80 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..registration import AffineTask + + +def test_AffineTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + fixed_file=dict( + argstr='%s', + exists=True, + mandatory=True, + position=0, + ), + ftol=dict( + argstr='%s', + mandatory=True, + position=6, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + moving_file=dict( + argstr='%s', + exists=True, + mandatory=True, + position=1, + ), + samplingX=dict( + argstr='%s', + mandatory=True, + position=3, + ), + samplingY=dict( + argstr='%s', + mandatory=True, + position=4, + ), + samplingZ=dict( + argstr='%s', + mandatory=True, + position=5, + ), + similarity_metric=dict( + argstr='%s', + exists=True, + mandatory=True, + position=2, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + useInTrans=dict( + argstr='%s', + mandatory=False, + position=7, + ), + ) + inputs = AffineTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_AffineTask_outputs(): + output_map = dict( + out_file=dict(), + out_file_xfm=dict(), + ) + outputs = AffineTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_BinThreshTask.py b/nipype/interfaces/dtitk/tests/test_auto_BinThreshTask.py new file mode 100644 index 0000000000..028a820bae --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_BinThreshTask.py @@ -0,0 +1,52 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import BinThreshTask + + +def test_BinThreshTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_file=dict( + argstr='%s', + exists=True, + mandatory=False, + position=0, + ), + in_numbers=dict( + argstr='%s', + exists=True, + mandatory=False, + position=2, + ), + out_file=dict( + argstr='%s', + exists=True, + mandatory=False, + position=1, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = BinThreshTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_BinThreshTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = BinThreshTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_CommandLineDtitk.py b/nipype/interfaces/dtitk/tests/test_auto_CommandLineDtitk.py new file mode 100644 index 0000000000..fbd1fcb4ac --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_CommandLineDtitk.py @@ -0,0 +1,27 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..base import CommandLineDtitk + + +def test_CommandLineDtitk_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = CommandLineDtitk.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_ComposeXfmTask.py b/nipype/interfaces/dtitk/tests/test_auto_ComposeXfmTask.py new file mode 100644 index 0000000000..ec5d2153ea --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_ComposeXfmTask.py @@ -0,0 +1,54 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..registration import ComposeXfmTask + + +def test_ComposeXfmTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_aff=dict( + argstr='-aff %s', + exists=True, + mandatory=False, + position=0, + ), + in_df=dict( + argstr='-df %s', + exists=True, + mandatory=False, + position=1, + ), + out_file=dict( + argstr='-out %s', + exists=True, + mandatory=False, + name_source='in_df', + name_template='%s_comboaff.nii.gz', + position=2, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = ComposeXfmTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_ComposeXfmTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = ComposeXfmTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_DiffeoTask.py b/nipype/interfaces/dtitk/tests/test_auto_DiffeoTask.py new file mode 100644 index 0000000000..a0bc0a580b --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_DiffeoTask.py @@ -0,0 +1,73 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..registration import DiffeoTask + + +def test_DiffeoTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + fixed_file=dict( + argstr='%s', + exists=True, + mandatory=False, + position=0, + ), + ftol=dict( + argstr='%s', + exists=True, + mandatory=True, + position=5, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + legacy=dict( + argstr='%s', + exists=True, + mandatory=True, + position=3, + ), + mask=dict( + argstr='%s', + exists=True, + mandatory=False, + position=2, + ), + moving_file=dict( + argstr='%s', + exists=True, + mandatory=False, + position=1, + ), + n_iters=dict( + argstr='%s', + exists=True, + mandatory=True, + position=4, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = DiffeoTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_DiffeoTask_outputs(): + output_map = dict( + out_file=dict(), + out_file_xfm=dict(), + ) + outputs = DiffeoTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_RigidTask.py b/nipype/interfaces/dtitk/tests/test_auto_RigidTask.py new file mode 100644 index 0000000000..fbe65d92f2 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_RigidTask.py @@ -0,0 +1,80 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..registration import RigidTask + + +def test_RigidTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + fixed_file=dict( + argstr='%s', + exists=True, + mandatory=True, + position=0, + ), + ftol=dict( + argstr='%s', + mandatory=True, + position=6, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + moving_file=dict( + argstr='%s', + exists=True, + mandatory=True, + position=1, + ), + samplingX=dict( + argstr='%s', + mandatory=True, + position=3, + ), + samplingY=dict( + argstr='%s', + mandatory=True, + position=4, + ), + samplingZ=dict( + argstr='%s', + mandatory=True, + position=5, + ), + similarity_metric=dict( + argstr='%s', + exists=True, + mandatory=True, + position=2, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + useInTrans=dict( + argstr='%s', + mandatory=False, + position=7, + ), + ) + inputs = RigidTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_RigidTask_outputs(): + output_map = dict( + out_file=dict(), + out_file_xfm=dict(), + ) + outputs = RigidTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_SVAdjustVoxSpTask.py b/nipype/interfaces/dtitk/tests/test_auto_SVAdjustVoxSpTask.py new file mode 100644 index 0000000000..d60b203ffa --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_SVAdjustVoxSpTask.py @@ -0,0 +1,66 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import SVAdjustVoxSpTask + + +def test_SVAdjustVoxSpTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_file=dict( + argstr='-in %s', + exists=True, + mandatory=True, + position=0, + ), + in_target=dict( + argstr='-target %s', + exists=True, + mandatory=False, + position=2, + ), + in_voxsz=dict( + argstr='-vsize %s', + exists=True, + mandatory=False, + position=3, + ), + origin=dict( + argstr='-origin %s', + exists=True, + mandatory=False, + position=4, + ), + out_file=dict( + argstr='-out %s', + exists=True, + mandatory=False, + name_source='in_file', + name_template='%s_origmvd.nii.gz', + position=1, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = SVAdjustVoxSpTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_SVAdjustVoxSpTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = SVAdjustVoxSpTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_SVResampleTask.py b/nipype/interfaces/dtitk/tests/test_auto_SVResampleTask.py new file mode 100644 index 0000000000..64f4cadb60 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_SVResampleTask.py @@ -0,0 +1,60 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import SVResampleTask + + +def test_SVResampleTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_arraysz=dict( + argstr='-size %s', + exists=True, + mandatory=False, + position=1, + ), + in_file=dict( + argstr='-in %s', + exists=True, + mandatory=True, + position=0, + ), + in_voxsz=dict( + argstr='-vsize %s', + exists=True, + mandatory=False, + position=2, + ), + out_file=dict( + argstr='-out %s', + exists=True, + mandatory=False, + name_source='in_file', + name_template='%s_resampled.nii.gz', + position=3, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = SVResampleTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_SVResampleTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = SVResampleTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_TVAdjustOriginTask.py b/nipype/interfaces/dtitk/tests/test_auto_TVAdjustOriginTask.py new file mode 100644 index 0000000000..bad6039007 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_TVAdjustOriginTask.py @@ -0,0 +1,50 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import TVAdjustOriginTask + + +def test_TVAdjustOriginTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_file=dict( + argstr='-in %s', + mandatory=True, + position=0, + ), + origin=dict( + argstr='-origin %s', + exists=True, + mandatory=False, + position=4, + ), + out_file=dict( + argstr='-out %s', + genfile=True, + position=1, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = TVAdjustOriginTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_TVAdjustOriginTask_outputs(): + output_map = dict(out_file=dict(exists=True, ), ) + outputs = TVAdjustOriginTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_TVAdjustVoxSpTask.py b/nipype/interfaces/dtitk/tests/test_auto_TVAdjustVoxSpTask.py new file mode 100644 index 0000000000..2da57d8862 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_TVAdjustVoxSpTask.py @@ -0,0 +1,62 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import TVAdjustVoxSpTask + + +def test_TVAdjustVoxSpTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_file=dict( + argstr='-in %s', + mandatory=True, + position=0, + ), + origin=dict( + argstr='-origin %s', + exists=True, + mandatory=False, + position=4, + ), + out_file=dict( + argstr='-out %s', + genfile=True, + position=1, + ), + target=dict( + argstr='-target %s', + exists=True, + mandatory=False, + position=2, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + vsize=dict( + argstr='-vsize %s', + exists=True, + mandatory=False, + position=3, + ), + ) + inputs = TVAdjustVoxSpTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_TVAdjustVoxSpTask_outputs(): + output_map = dict(out_file=dict(exists=True, ), ) + outputs = TVAdjustVoxSpTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_TVResampleTask.py b/nipype/interfaces/dtitk/tests/test_auto_TVResampleTask.py new file mode 100644 index 0000000000..044e8f67d2 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_TVResampleTask.py @@ -0,0 +1,60 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import TVResampleTask + + +def test_TVResampleTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_arraysz=dict( + argstr='-size %s', + exists=True, + mandatory=False, + position=1, + ), + in_file=dict( + argstr='-in %s', + exists=True, + mandatory=True, + position=0, + ), + in_voxsz=dict( + argstr='-vsize %s', + exists=True, + mandatory=False, + position=2, + ), + out_file=dict( + argstr='-out %s', + exists=True, + mandatory=False, + name_source='in_file', + name_template='%s_resampled.nii.gz', + position=3, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = TVResampleTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_TVResampleTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = TVResampleTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_TVtoolTask.py b/nipype/interfaces/dtitk/tests/test_auto_TVtoolTask.py new file mode 100644 index 0000000000..8fb0ce055a --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_TVtoolTask.py @@ -0,0 +1,46 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import TVtoolTask + + +def test_TVtoolTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_file=dict( + argstr='-in %s', + exists=True, + mandatory=False, + position=0, + ), + in_flag=dict( + argstr='-%s', + exists=True, + mandatory=False, + position=1, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = TVtoolTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_TVtoolTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = TVtoolTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_affScalarVolTask.py b/nipype/interfaces/dtitk/tests/test_auto_affScalarVolTask.py new file mode 100644 index 0000000000..02d22b1820 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_affScalarVolTask.py @@ -0,0 +1,57 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..registration import affScalarVolTask + + +def test_affScalarVolTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_target=dict( + argstr='-target %s', + position=2, + ), + in_volume=dict( + argstr='-in %s', + exists=True, + mandatory=False, + position=0, + ), + in_xfm=dict( + argstr='-trans %s', + exists=True, + mandatory=False, + position=1, + ), + out_file=dict( + argstr='-out %s', + mandatory=False, + name_source='in_volume', + name_template='%s_affxfmd.nii.gz', + position=3, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = affScalarVolTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_affScalarVolTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = affScalarVolTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_affSymTensor3DVolTask.py b/nipype/interfaces/dtitk/tests/test_auto_affSymTensor3DVolTask.py new file mode 100644 index 0000000000..40198fa9e7 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_affSymTensor3DVolTask.py @@ -0,0 +1,60 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..registration import affSymTensor3DVolTask + + +def test_affSymTensor3DVolTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_target=dict( + argstr='-target %s', + exists=True, + mandatory=False, + position=2, + ), + in_tensor=dict( + argstr='-in %s', + exists=True, + mandatory=False, + position=0, + ), + in_xfm=dict( + argstr='-trans %s', + exists=True, + mandatory=False, + position=1, + ), + out_file=dict( + argstr='-out %s', + exists=True, + mandatory=False, + name_source='in_tensor', + name_template='%s_affxfmd.nii.gz', + position=3, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = affSymTensor3DVolTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_affSymTensor3DVolTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = affSymTensor3DVolTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_diffeoScalarVolTask.py b/nipype/interfaces/dtitk/tests/test_auto_diffeoScalarVolTask.py new file mode 100644 index 0000000000..5b02f34984 --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_diffeoScalarVolTask.py @@ -0,0 +1,82 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..registration import diffeoScalarVolTask + + +def test_diffeoScalarVolTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_flip=dict( + argstr='-flip %s', + exists=True, + mandatory=False, + position=5, + ), + in_interp=dict( + argstr='-interp %s', + exists=True, + mandatory=False, + position=7, + ), + in_target=dict( + argstr='-target %s', + exists=True, + mandatory=False, + position=3, + ), + in_type=dict( + argstr='-type %s', + exists=True, + mandatory=False, + position=6, + ), + in_volume=dict( + argstr='-in %s', + exists=True, + mandatory=False, + position=0, + ), + in_vsize=dict( + argstr='-vsize %s', + exists=True, + mandatory=False, + position=4, + ), + in_xfm=dict( + argstr='-trans %s', + exists=True, + mandatory=False, + position=2, + ), + out_file=dict( + argstr='-out %s', + name_source='in_volume', + name_template='%s_diffeoxfmd.nii.gz', + position=1, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = diffeoScalarVolTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_diffeoScalarVolTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = diffeoScalarVolTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/tests/test_auto_diffeoSymTensor3DVolTask.py b/nipype/interfaces/dtitk/tests/test_auto_diffeoSymTensor3DVolTask.py new file mode 100644 index 0000000000..7f3926c71b --- /dev/null +++ b/nipype/interfaces/dtitk/tests/test_auto_diffeoSymTensor3DVolTask.py @@ -0,0 +1,60 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..registration import diffeoSymTensor3DVolTask + + +def test_diffeoSymTensor3DVolTask_inputs(): + input_map = dict( + args=dict(argstr='%s', ), + environ=dict( + nohash=True, + usedefault=True, + ), + ignore_exception=dict( + deprecated='1.0.0', + nohash=True, + usedefault=True, + ), + in_target=dict( + argstr='-target %s', + exists=True, + mandatory=False, + position=2, + ), + in_tensor=dict( + argstr='-in %s', + exists=True, + mandatory=False, + position=0, + ), + in_xfm=dict( + argstr='-trans %s', + exists=True, + mandatory=False, + position=1, + ), + out_file=dict( + argstr='-out %s', + exists=True, + mandatory=False, + name_source='in_tensor', + name_template='%s_diffeoxfmd.nii.gz', + position=3, + ), + terminal_output=dict( + deprecated='1.0.0', + nohash=True, + ), + ) + inputs = diffeoSymTensor3DVolTask.input_spec() + + for key, metadata in list(input_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(inputs.traits()[key], metakey) == value +def test_diffeoSymTensor3DVolTask_outputs(): + output_map = dict(out_file=dict(), ) + outputs = diffeoSymTensor3DVolTask.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value diff --git a/nipype/interfaces/dtitk/utils.py b/nipype/interfaces/dtitk/utils.py new file mode 100644 index 0000000000..86e0c08b8c --- /dev/null +++ b/nipype/interfaces/dtitk/utils.py @@ -0,0 +1,367 @@ +__author__ = 'kjordan' + +from ..base import TraitedSpec, CommandLineInputSpec, File, \ + traits, isdefined +import os +from .base import CommandLineDtitk + + +class TVAdjustOriginInputSpec(CommandLineInputSpec): + in_file = File(desc="image to resample", exists=True, mandatory=True, + position=0, argstr="-in %s") + out_file = traits.Str(genfile=True, desc='output path', position=1, + argstr="-out %s") + origin = traits.Str(desc='xyz voxel size', exists=True, mandatory=False, + position=4, argstr='-origin %s') + + +class TVAdjustOriginOutputSpec(TraitedSpec): + out_file = traits.Str(exists=True) + + +class TVAdjustOriginTask(CommandLineDtitk): + """ + Moves the origin of a tensor volume to zero + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.TVAdjustOriginTask() + >>> node.inputs.in_file = 'diffusion.nii' + >>> node.run() # doctest: +SKIP + """ + + input_spec = TVAdjustOriginInputSpec + output_spec = TVAdjustOriginOutputSpec + _cmd = 'TVAdjustVoxelspace' + _suffix = "_originzero" + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.out_file + if not isdefined(self.inputs.out_file): + outputs["out_file"] = self._gen_fname(self.inputs.in_file, + suffix=self._suffix, + ext='.'+'.'.join( + self.inputs.in_file. + split(".")[1:])) + outputs["out_file"] = os.path.abspath(outputs["out_file"]) + return outputs + + def _gen_filename(self, name): + if name == "out_file": + return self._list_outputs()["out_file"] + return None + + +class TVAdjustVoxSpInputSpec(CommandLineInputSpec): + in_file = File(desc="image to resample", exists=True, mandatory=True, + position=0, argstr="-in %s") + out_file = traits.Str(genfile=True, desc='output path', position=1, + argstr="-out %s") + origin = traits.Str(desc='xyz voxel size', exists=True, mandatory=False, + position=4, argstr='-origin %s') + target = traits.Str(desc='target volume', exists=True, mandatory=False, + position=2, argstr="-target %s") + vsize = traits.Str(desc='resampled voxel size', exists=True, + mandatory=False, position=3, argstr="-vsize %s") + + +class TVAdjustVoxSpOutputSpec(TraitedSpec): + out_file = traits.Str(exists=True) + + +class TVAdjustVoxSpTask(CommandLineDtitk): + """ + Adjusts the voxel space of a tensor volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.TVAdjustVoxSpTask() + >>> node.inputs.in_file = 'diffusion.nii' + >>> node.run() # doctest: +SKIP + """ + input_spec = TVAdjustVoxSpInputSpec + output_spec = TVAdjustVoxSpOutputSpec + _cmd = 'TVAdjustVoxelspace' + _suffix = '_reslice' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.out_file + if not isdefined(self.inputs.out_file): + outputs["out_file"] = self._gen_fname(self.inputs.in_file, + suffix=self._suffix, + ext='.'+'.'.join( + self.inputs.in_file. + split(".")[1:])) + outputs["out_file"] = os.path.abspath(outputs["out_file"]) + return outputs + + def _gen_filename(self, name): + if name == "out_file": + return self._list_outputs()["out_file"] + return None + + +# TODO not using these yet... need to be tested + + +class SVAdjustVoxSpInputSpec(CommandLineInputSpec): + in_file = traits.Str(desc="image to resample", exists=True, + mandatory=True, position=0, argstr="-in %s") + in_target = traits.Str(desc='target volume', exists=True, mandatory=False, + position=2, argstr="-target %s") + in_voxsz = traits.Str(desc='resampled voxel size', exists=True, + mandatory=False, position=3, argstr="-vsize %s") + out_file = traits.Str(desc='output path', exists=True, mandatory=False, + position=1, argstr="-out %s", + name_source="in_file", + name_template='%s_origmvd.nii.gz') + origin = traits.Str(desc='xyz voxel size', exists=True, mandatory=False, + position=4, argstr='-origin %s') + + +class SVAdjustVoxSpOutputSpec(TraitedSpec): + out_file = traits.File(exists=True) + + +class SVAdjustVoxSpTask(CommandLineDtitk): + """ + Adjusts the voxel space of a scalar volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.SVAdjustVoxSpTask() + >>> node.inputs.in_file = 'diffusion.nii.gz' + >>> node.run() # doctest: +SKIP + """ + input_spec = SVAdjustVoxSpInputSpec + output_spec = SVAdjustVoxSpOutputSpec + _cmd = 'SVAdjustVoxelspace' + _suffix = '_reslice' + + def _gen_filename(self, name): + if name == "out_file": + return self._list_outputs()["out_file"] + return None + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.out_file + if not isdefined(self.inputs.out_file): + outputs["out_file"] = self._gen_filename(self.inputs.in_file, + suffix=self._suffix, + ext='.' + '.'.join( + self.inputs.in_file. + split(".")[1:])) + outputs["out_file"] = os.path.abspath(outputs["out_file"]) + return outputs + + +class TVResampleInputSpec(CommandLineInputSpec): + in_file = traits.Str(desc="image to resample", exists=True, + mandatory=True, position=0, argstr="-in %s") + in_arraysz = traits.Str(desc='resampled array size', exists=True, + mandatory=False, position=1, argstr="-size %s") + in_voxsz = traits.Str(desc='resampled voxel size', exists=True, + mandatory=False, position=2, argstr="-vsize %s") + out_file = traits.Str(desc='output path', exists=True, mandatory=False, + position=3, argstr="-out %s", + name_source="in_file", + name_template="%s_resampled.nii.gz") + + +class TVResampleOutputSpec(TraitedSpec): + out_file = traits.File(exists=True) + + +class TVResampleTask(CommandLineDtitk): + """ + Resamples a tensor volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.TVResampleTask() + >>> node.inputs.in_file = 'diffusion.nii.gz' + >>> node.run() # doctest: +SKIP + """ + input_spec = TVResampleInputSpec + output_spec = TVResampleOutputSpec + _cmd = 'TVResample' + _suffix = '_resampled' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.out_file + if not isdefined(self.inputs.out_file): + outputs["out_file"] = self._gen_fname(self.inputs.in_file, + suffix=self._suffix, + ext='.' + '.'.join( + self.inputs.in_file. + split(".")[1:])) + outputs["out_file"] = os.path.abspath(outputs["out_file"]) + return outputs + + def _gen_filename(self, name): + if name == "out_file": + return self._list_outputs()["out_file"] + return None + + +class SVResampleInputSpec(CommandLineInputSpec): + in_file = traits.Str(desc="image to resample", exists=True, + mandatory=True, position=0, argstr="-in %s") + in_arraysz = traits.Str(desc='resampled array size', exists=True, + mandatory=False, position=1, + argstr="-size %s") + in_voxsz = traits.Str(desc='resampled voxel size', exists=True, + mandatory=False, position=2, argstr="-vsize %s") + out_file = traits.Str(desc='output path', exists=True, mandatory=False, + position=3, argstr="-out %s", + name_source="in_file", + name_template="%s_resampled.nii.gz") + + +class SVResampleOutputSpec(TraitedSpec): + out_file = traits.File(exists=True) + + +class SVResampleTask(CommandLineDtitk): + """ + Resamples a scalar volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.SVResampleTask() + >>> node.inputs.in_file = 'diffusion.nii' + >>> node.run() # doctest: +SKIP + """ + input_spec = SVResampleInputSpec + output_spec = SVResampleOutputSpec + _cmd = 'SVResample' + _suffix = '_resampled' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.out_file + if not isdefined(self.inputs.out_file): + outputs["out_file"] = self._gen_fname(self.inputs.in_file, + suffix=self._suffix, + ext='.' + '.'.join( + self.inputs.in_file. + split(".")[1:])) + outputs["out_file"] = os.path.abspath(outputs["out_file"]) + return outputs + + def _gen_filename(self, name): + if name == "out_file": + return self._list_outputs()["out_file"] + return None + + +class TVtoolInputSpec(CommandLineInputSpec): + in_file = traits.Str(desc="image to resample", exists=True, + mandatory=False, position=0, argstr="-in %s") + in_flag = traits.Enum('fa', 'tr', 'ad', 'rd', 'pd', 'rgb', exists=True, + mandatory=False, position=1, argstr="-%s", desc='') + + +class TVtoolOutputSpec(TraitedSpec): + out_file = traits.File(exists=True) + + +class TVtoolTask(CommandLineDtitk): + """ + Calculates a tensor metric volume from a tensor volume + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.TVtoolTask() + >>> node.inputs.in_file = 'diffusion.nii' + >>> node.inputs.in_flag = 'fa' + >>> node.run() # doctest: +SKIP + """ + input_spec = TVtoolInputSpec + output_spec = TVtoolOutputSpec + _cmd = 'TVtool' + + def _list_outputs(self): + _suffix = self.inputs.in_flag + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.out_file + if not isdefined(self.inputs.out_file): + outputs["out_file"] = self._gen_fname(self.inputs.in_file, + suffix=_suffix, + ext='.' + '.'.join( + self.inputs.in_file. + split(".")[1:])) + outputs["out_file"] = os.path.abspath(outputs["out_file"]) + return outputs + + def _gen_filename(self, name): + if name == "out_file": + return self._list_outputs()["out_file"] + return None + + +class BinThreshInputSpec(CommandLineInputSpec): + in_file = traits.Str(desc='', exists=True, mandatory=False, position=0, + argstr="%s") + out_file = traits.Str(desc='', exists=True, mandatory=False, position=1, + argstr="%s") + in_numbers = traits.Str(desc='LB UB inside_value outside_value', + exists=True, mandatory=False, position=2, + argstr="%s") + + +class BinThreshOutputSpec(TraitedSpec): + out_file = traits.File(exists=True) + + +class BinThreshTask(CommandLineDtitk): + """ + Binarizes an image based on parameters + + Example + ------- + + >>> import nipype.interfaces.dtitk as dtitk + >>> node = dtitk.BinThreshTask() + >>> node.inputs.in_file = 'diffusion.nii' + >>> node.inputs.in_numbers = '0 100 1 0' + >>> node.run() # doctest: +SKIP + """ + + input_spec = BinThreshInputSpec + output_spec = BinThreshOutputSpec + _cmd = 'BinaryThresholdImageFilter' + _suffix = '_bin' + + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = self.inputs.out_file + if not isdefined(self.inputs.out_file): + outputs["out_file"] = self._gen_fname(self.inputs.in_file, + suffix=self._suffix, + ext='.'+'.'.join( + self.inputs.in_file. + split(".")[1:])) + outputs["out_file"] = os.path.abspath(outputs["out_file"]) + return outputs + + def _gen_filename(self, name): + if name == "out_file": + return self._list_outputs()["out_file"] + return None