From 286eecf034953829e37453931dc963c8445aa71b Mon Sep 17 00:00:00 2001 From: Isaiah Norton Date: Wed, 10 Oct 2018 17:26:42 -0400 Subject: [PATCH 1/2] Make mrtrix3 FitTensor reg_term conditional on version - mrtrix3: use looseversion to avoid undefined version - Address review comment and update auto_FitTensor test - mrtrix3.FitTensor: switch back to single spec, usedefault=False --- nipype/interfaces/mrtrix3/base.py | 36 +++++++++++++++++-- nipype/interfaces/mrtrix3/reconst.py | 2 +- .../mrtrix3/tests/test_auto_FitTensor.py | 2 +- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/nipype/interfaces/mrtrix3/base.py b/nipype/interfaces/mrtrix3/base.py index 55ca385153..bdd7c4fd56 100644 --- a/nipype/interfaces/mrtrix3/base.py +++ b/nipype/interfaces/mrtrix3/base.py @@ -4,11 +4,39 @@ from __future__ import (print_function, division, unicode_literals, absolute_import) -from ... import logging -from ..base import (CommandLineInputSpec, CommandLine, traits, File, isdefined) +from ... import logging, LooseVersion +from ...utils.filemanip import which +from ..base import (CommandLineInputSpec, CommandLine, traits, File, isdefined, PackageInfo) iflogger = logging.getLogger('nipype.interface') +class Info(PackageInfo): + version_cmd = 'mrconvert --version' + + @staticmethod + def parse_version(raw_info): + # info is like: "== mrconvert 0.3.15-githash" + for line in raw_info.splitlines(): + if line.startswith('== mrconvert '): + v_string = line.split()[2] + break + else: + return None + + # -githash may or may not be appended + v_string = v_string.split('-')[0] + + return '.'.join(v_string.split('.')[:3]) + + @classmethod + def looseversion(cls): + """ Return a comparable version object + + If no version found, use LooseVersion('0.0.0') + """ + return LooseVersion(cls.version() or '0.0.0') + + class MRTrix3BaseInputSpec(CommandLineInputSpec): nthreads = traits.Int( argstr='-nthreads %d', @@ -78,3 +106,7 @@ def _parse_inputs(self, skip=None): pass return super(MRTrix3Base, self)._parse_inputs(skip=skip) + + @property + def version(self): + return Info.version() diff --git a/nipype/interfaces/mrtrix3/reconst.py b/nipype/interfaces/mrtrix3/reconst.py index 6583c58996..f9d237d6e1 100644 --- a/nipype/interfaces/mrtrix3/reconst.py +++ b/nipype/interfaces/mrtrix3/reconst.py @@ -39,8 +39,8 @@ class FitTensorInputSpec(MRTrix3BaseInputSpec): argstr='-method %s', desc=('select method used to perform the fitting')) reg_term = traits.Float( - 5.e3, usedefault=True, argstr='-regularisation %f', + max_ver='0.3.13', desc=('specify the strength of the regularisation term on the ' 'magnitude of the tensor elements (default = 5000). This ' 'only applies to the non-linear methods')) diff --git a/nipype/interfaces/mrtrix3/tests/test_auto_FitTensor.py b/nipype/interfaces/mrtrix3/tests/test_auto_FitTensor.py index 40b7baa931..85c103cc10 100644 --- a/nipype/interfaces/mrtrix3/tests/test_auto_FitTensor.py +++ b/nipype/interfaces/mrtrix3/tests/test_auto_FitTensor.py @@ -34,7 +34,7 @@ def test_FitTensor_inputs(): ), reg_term=dict( argstr='-regularisation %f', - usedefault=True, + max_ver='0.3.13', ), ) inputs = FitTensor.input_spec() From 98faffa4a714da015c65c257c4db94500f4d83cb Mon Sep 17 00:00:00 2001 From: Isaiah Norton Date: Fri, 12 Oct 2018 10:12:06 -0400 Subject: [PATCH 2/2] Fix doctest --- nipype/interfaces/mrtrix3/reconst.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nipype/interfaces/mrtrix3/reconst.py b/nipype/interfaces/mrtrix3/reconst.py index f9d237d6e1..f1e9c604d2 100644 --- a/nipype/interfaces/mrtrix3/reconst.py +++ b/nipype/interfaces/mrtrix3/reconst.py @@ -64,8 +64,7 @@ class FitTensor(MRTrix3Base): >>> tsr.inputs.in_mask = 'mask.nii.gz' >>> tsr.inputs.grad_fsl = ('bvecs', 'bvals') >>> tsr.cmdline # doctest: +ELLIPSIS - 'dwi2tensor -fslgrad bvecs bvals -mask mask.nii.gz \ --regularisation 5000.000000 dwi.mif dti.mif' + 'dwi2tensor -fslgrad bvecs bvals -mask mask.nii.gz dwi.mif dti.mif' >>> tsr.run() # doctest: +SKIP """