From d2cc92f943a96c91a55495d4e71a80fae5b244c4 Mon Sep 17 00:00:00 2001 From: Matteo Visconti dOC Date: Tue, 12 Dec 2017 14:58:24 +0100 Subject: [PATCH 1/6] NF: add afni.ConvertDset --- nipype/interfaces/afni/__init__.py | 3 +- nipype/interfaces/afni/utils.py | 47 ++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/nipype/interfaces/afni/__init__.py b/nipype/interfaces/afni/__init__.py index 6a1e7df767..3239230a2d 100644 --- a/nipype/interfaces/afni/__init__.py +++ b/nipype/interfaces/afni/__init__.py @@ -20,7 +20,8 @@ TShift, Volreg, Warp, QwarpPlusMinus, Qwarp) from .svm import (SVMTest, SVMTrain) from .utils import (ABoverlap, AFNItoNIFTI, Autobox, Axialize, BrickStat, - Bucket, Calc, Cat, CatMatvec, CenterMass, Copy, Dot, + Bucket, Calc, Cat, CatMatvec, CenterMass, ConvertDset, + Copy, Dot, Edge3, Eval, FWHMx, MaskTool, Merge, Notes, NwarpApply, NwarpCat, OneDToolPy, Refit, Resample, TCat, TCatSubBrick, TStat, To3D, Unifize, diff --git a/nipype/interfaces/afni/utils.py b/nipype/interfaces/afni/utils.py index 3e03adda92..94b48f62f8 100644 --- a/nipype/interfaces/afni/utils.py +++ b/nipype/interfaces/afni/utils.py @@ -737,6 +737,53 @@ def _list_outputs(self): return outputs +class ConvertDsetInputSpec(CommandLineInputSpec): + in_file = File( + desc='input file to ConvertDset', + argstr='-input %s', + position=-2, + mandatory=True, + exists=True) + + out_file = File( + desc='output file for ConvertDset', + argstr='-prefix %s', + position=-1) + + out_type = traits.Enum( + ('niml', 'niml_asc', 'niml_bi', + '1D', '1Dp', '1Dpt', + 'gii', 'gii_asc', 'gii_b64', 'gii_b64gz'), + desc='output type', + argstr='-o_%s', + mandatory=True, + position=0) + + +class ConvertDset(AFNICommandBase): + """Converts a surface dataset from one format to another. + + For complete details, see the `ConvertDset Documentation. + `_ + + Examples + ======== + + >>> from nipype.interfaces import afni + >>> convertdset = afni.ConvertDset() + >>> convertdset.inputs.in_file = 'lh.pial_converted.gii' + >>> convertdset.inputs.out_type = 'niml_asc' + >>> convertdset.inputs.out_file = 'lh.pial_converted.niml.dset' + >>> convertdset.cmdline + 'ConvertDset -o_niml_asc -input nipype/testing/data/lh.pial_converted.gii -prefix lh.pial_converted.niml.dset' + >>> res = convertdset.run() # doctest: +SKIP + """ + + _cmd = 'ConvertDset' + input_spec = ConvertDsetInputSpec + output_spec = AFNICommandOutputSpec + + class CopyInputSpec(AFNICommandInputSpec): in_file = File( desc='input file to 3dcopy', From c5d55b310396e94ff576d217b337a96840a1d728 Mon Sep 17 00:00:00 2001 From: Matteo Visconti dOC Date: Tue, 12 Dec 2017 15:37:49 +0100 Subject: [PATCH 2/6] Fix docstring test, add auto test --- .../afni/tests/test_auto_ConvertDset.py | 45 +++++++++++++++++++ nipype/interfaces/afni/utils.py | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 nipype/interfaces/afni/tests/test_auto_ConvertDset.py diff --git a/nipype/interfaces/afni/tests/test_auto_ConvertDset.py b/nipype/interfaces/afni/tests/test_auto_ConvertDset.py new file mode 100644 index 0000000000..c6e73f4ecf --- /dev/null +++ b/nipype/interfaces/afni/tests/test_auto_ConvertDset.py @@ -0,0 +1,45 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import ConvertDset + + +def test_ConvertDset_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='-input %s', + mandatory=True, + position=-2, + ), + out_file=dict(argstr='-prefix %s', + position=-1, + ), + out_type=dict(argstr='-o_%s', + mandatory=True, + position=0, + ), + terminal_output=dict(deprecated='1.0.0', + nohash=True, + ), + ) + inputs = ConvertDset.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_ConvertDset_outputs(): + output_map = dict(out_file=dict(), + ) + outputs = ConvertDset.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/afni/utils.py b/nipype/interfaces/afni/utils.py index 94b48f62f8..2ef03971ed 100644 --- a/nipype/interfaces/afni/utils.py +++ b/nipype/interfaces/afni/utils.py @@ -775,7 +775,7 @@ class ConvertDset(AFNICommandBase): >>> convertdset.inputs.out_type = 'niml_asc' >>> convertdset.inputs.out_file = 'lh.pial_converted.niml.dset' >>> convertdset.cmdline - 'ConvertDset -o_niml_asc -input nipype/testing/data/lh.pial_converted.gii -prefix lh.pial_converted.niml.dset' + 'ConvertDset -o_niml_asc -input lh.pial_converted.gii -prefix lh.pial_converted.niml.dset' >>> res = convertdset.run() # doctest: +SKIP """ From a07d9ea5dd5cab78751da8f573d5d55d47c2e92b Mon Sep 17 00:00:00 2001 From: Matteo Visconti dOC Date: Tue, 12 Dec 2017 16:31:29 +0100 Subject: [PATCH 3/6] Fix output --- nipype/interfaces/afni/utils.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nipype/interfaces/afni/utils.py b/nipype/interfaces/afni/utils.py index 2ef03971ed..f5338ad472 100644 --- a/nipype/interfaces/afni/utils.py +++ b/nipype/interfaces/afni/utils.py @@ -748,7 +748,8 @@ class ConvertDsetInputSpec(CommandLineInputSpec): out_file = File( desc='output file for ConvertDset', argstr='-prefix %s', - position=-1) + position=-1, + mandatory=True) out_type = traits.Enum( ('niml', 'niml_asc', 'niml_bi', @@ -783,6 +784,11 @@ class ConvertDset(AFNICommandBase): input_spec = ConvertDsetInputSpec output_spec = AFNICommandOutputSpec + def _list_outputs(self): + outputs = self.output_spec().get() + outputs['out_file'] = op.abspath(self.inputs.out_file) + return outputs + class CopyInputSpec(AFNICommandInputSpec): in_file = File( From 15ff070823db5d85a5ca97fe58262315bd6423d4 Mon Sep 17 00:00:00 2001 From: Matteo Visconti dOC Date: Thu, 18 Jan 2018 18:08:00 -0500 Subject: [PATCH 4/6] Add ConvertDset to __init__.py --- nipype/interfaces/afni/__init__.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/nipype/interfaces/afni/__init__.py b/nipype/interfaces/afni/__init__.py index 751f168b1c..9cb519a2a2 100644 --- a/nipype/interfaces/afni/__init__.py +++ b/nipype/interfaces/afni/__init__.py @@ -15,9 +15,10 @@ ROIStats, Retroicor, Seg, SkullStrip, TCorr1D, TCorrMap, TCorrelate, TNorm, TShift, Volreg, Warp, QwarpPlusMinus, Qwarp) from .svm import (SVMTest, SVMTrain) -from .utils import (ABoverlap, AFNItoNIFTI, Autobox, Axialize, BrickStat, - Bucket, Calc, Cat, CatMatvec, CenterMass, Copy, Dot, Edge3, - Eval, FWHMx, MaskTool, Merge, Notes, NwarpApply, NwarpCat, - OneDToolPy, Refit, Resample, TCat, TCatSubBrick, TStat, - To3D, Unifize, Undump, ZCutUp, GCOR, Zcat, Zeropad) +from .utils import ( + ABoverlap, AFNItoNIFTI, Autobox, Axialize, BrickStat, Bucket, Calc, Cat, + CatMatvec, CenterMass, ConvertDset, Copy, Dot, Edge3, Eval, FWHMx, + MaskTool, Merge, Notes, NwarpApply, NwarpCat, OneDToolPy, Refit, Resample, + TCat, TCatSubBrick, TStat, To3D, Unifize, Undump, ZCutUp, GCOR, Zcat, + Zeropad) from .model import (Deconvolve, Remlfit, Synthesize) From 6bfce44a66df91ac5d07b488ad8f97affb6dfb18 Mon Sep 17 00:00:00 2001 From: Matteo Visconti dOC Date: Thu, 18 Jan 2018 18:09:18 -0500 Subject: [PATCH 5/6] Use AFNICommandInputSpec for ConvertdsetInputSpec --- nipype/interfaces/afni/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nipype/interfaces/afni/utils.py b/nipype/interfaces/afni/utils.py index fc96f9b55e..188ba158c0 100644 --- a/nipype/interfaces/afni/utils.py +++ b/nipype/interfaces/afni/utils.py @@ -712,7 +712,7 @@ def _list_outputs(self): return outputs -class ConvertDsetInputSpec(CommandLineInputSpec): +class ConvertDsetInputSpec(AFNICommandInputSpec): in_file = File( desc='input file to ConvertDset', argstr='-input %s', From 2957ef85f8f2b1db0bf7bb65e788be71321d8f99 Mon Sep 17 00:00:00 2001 From: Matteo Visconti dOC Date: Thu, 18 Jan 2018 18:10:27 -0500 Subject: [PATCH 6/6] Update changelog --- CHANGES | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES b/CHANGES index c1991d5f2b..3fdacfd639 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ Upcoming release (0.14.1) ========================= +* ENH: Add AFNI interface for 3dConvertDset (https://github.com/nipy/nipype/pull/2337) * MAINT: Cleanup EngineBase (https://github.com/nipy/nipype/pull/2376) * FIX: Robustly handled outputs of 3dFWHMx across different versions of AFNI (https://github.com/nipy/nipype/pull/2373) * FIX: Cluster threshold in randomise + change default prefix (https://github.com/nipy/nipype/pull/2369)