diff --git a/nipype/interfaces/fsl/model.py b/nipype/interfaces/fsl/model.py index f45f6d62fb..b4d3fb56f8 100644 --- a/nipype/interfaces/fsl/model.py +++ b/nipype/interfaces/fsl/model.py @@ -1815,6 +1815,72 @@ def _format_arg(self, name, spec, value): return super(Cluster, self)._format_arg(name, spec, value) +class DualRegressionInputSpec(FSLCommandInputSpec): + in_files = InputMultiPath(File(exists=True), argstr="%s", mandatory=True, + position=-1, sep=" ", + desc="List all subjects' preprocessed, standard-space 4D datasets",) + group_IC_maps_4D = File(exists=True, argstr="%s", mandatory=True, position=1, + desc="4D image containing spatial IC maps (melodic_IC) from the " + "whole-group ICA analysis") + des_norm = traits.Bool(True, argstr="%i", position=2, usedefault=True, + desc="Whether to variance-normalise the timecourses used as the " + "stage-2 regressors; True is default and recommended") + one_sample_group_mean = traits.Bool(argstr="-1", position=3, + desc="perform 1-sample group-mean test instead of generic " + "permutation test") + design_file = File(exists=True, argstr="%s", position=3, + desc="Design matrix for final cross-subject modelling with " + "randomise") + con_file = File(exists=True, argstr="%s", position=4, + desc="Design contrasts for final cross-subject modelling with " + "randomise") + n_perm = traits.Int(argstr="%i", mandatory=True, position=5, + desc="Number of permutations for randomise; set to 1 for just raw " + "tstat output, set to 0 to not run randomise at all.") + out_dir = Directory("output", argstr="%s", usedefault=True, position=6, + desc="This directory will be created to hold all output and logfiles", + genfile=True) + + +class DualRegressionOutputSpec(TraitedSpec): + out_dir = Directory(exists=True) + + +class DualRegression(FSLCommand): + """Wrapper Script for Dual Regression Workflow + + Examples + -------- + + >>> dual_regression = DualRegression() + >>> dual_regression.inputs.in_files = ["functional.nii", "functional2.nii", "functional3.nii"] + >>> dual_regression.inputs.group_IC_maps_4D = "allFA.nii" + >>> dual_regression.inputs.des_norm = False + >>> dual_regression.inputs.one_sample_group_mean = True + >>> dual_regression.inputs.n_perm = 10 + >>> dual_regression.inputs.out_dir = "my_output_directory" + >>> dual_regression.cmdline # doctest: +ALLOW_UNICODE + u'dual_regression allFA.nii 0 -1 10 my_output_directory functional.nii functional2.nii functional3.nii' + >>> dual_regression.run() # doctest: +SKIP + + """ + input_spec = DualRegressionInputSpec + output_spec = DualRegressionOutputSpec + _cmd = 'dual_regression' + + def _list_outputs(self): + outputs = self.output_spec().get() + if isdefined(self.inputs.out_dir): + outputs['out_dir'] = os.path.abspath(self.inputs.out_dir) + else: + outputs['out_dir'] = self._gen_filename("out_dir") + return outputs + + def _gen_filename(self, name): + if name == "out_dir": + return os.getcwd() + + class RandomiseInputSpec(FSLCommandInputSpec): in_file = File(exists=True, desc='4D input file', argstr='-i %s', position=0, mandatory=True) diff --git a/nipype/interfaces/fsl/tests/test_auto_DualRegression.py b/nipype/interfaces/fsl/tests/test_auto_DualRegression.py new file mode 100644 index 0000000000..02c68ebc24 --- /dev/null +++ b/nipype/interfaces/fsl/tests/test_auto_DualRegression.py @@ -0,0 +1,64 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..model import DualRegression + + +def test_DualRegression_inputs(): + input_map = dict(args=dict(argstr='%s', + ), + con_file=dict(argstr='%s', + position=4, + ), + des_norm=dict(argstr='%i', + position=2, + usedefault=True, + ), + design_file=dict(argstr='%s', + position=3, + ), + environ=dict(nohash=True, + usedefault=True, + ), + group_IC_maps_4D=dict(argstr='%s', + mandatory=True, + position=1, + ), + ignore_exception=dict(nohash=True, + usedefault=True, + ), + in_files=dict(argstr='%s', + mandatory=True, + position=-1, + sep=' ', + ), + n_perm=dict(argstr='%i', + mandatory=True, + position=5, + ), + one_sample_group_mean=dict(argstr='-1', + position=3, + ), + out_dir=dict(argstr='%s', + genfile=True, + position=6, + usedefault=True, + ), + output_type=dict(), + terminal_output=dict(nohash=True, + ), + ) + inputs = DualRegression.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_DualRegression_outputs(): + output_map = dict(out_dir=dict(), + ) + outputs = DualRegression.output_spec() + + for key, metadata in list(output_map.items()): + for metakey, value in list(metadata.items()): + assert getattr(outputs.traits()[key], metakey) == value