From 71c95382d4f337d83e32d7b58de9f441982b8413 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Wed, 1 Mar 2017 09:33:19 -0500 Subject: [PATCH 1/4] Add -hires and -expert flags to ReconAll --- nipype/interfaces/freesurfer/preprocess.py | 4 ++++ nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/nipype/interfaces/freesurfer/preprocess.py b/nipype/interfaces/freesurfer/preprocess.py index abc6e5b51d..735169ca91 100644 --- a/nipype/interfaces/freesurfer/preprocess.py +++ b/nipype/interfaces/freesurfer/preprocess.py @@ -632,6 +632,10 @@ class ReconAllInputSpec(CommandLineInputSpec): desc="Number of processors to use in parallel") parallel = traits.Bool(argstr="-parallel", desc="Enable parallel execution") + hires = traits.Bool(argstr="-hires", min_ver='6.0.0', + desc="Conform to minimum voxel size (for voxels < 1mm)") + expert = File(exists=True, argstr='-expert %s', + desc="Set parameters using expert file") subjects_dir = Directory(exists=True, argstr='-sd %s', hash_files=False, desc='path to subjects directory', genfile=True) flags = traits.Str(argstr='%s', desc='additional parameters') diff --git a/nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py b/nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py index f86d934d7a..b748df7aa9 100644 --- a/nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py +++ b/nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py @@ -18,10 +18,15 @@ def test_ReconAll_inputs(): environ=dict(nohash=True, usedefault=True, ), + expert=dict(argstr='-expert %s', + ), flags=dict(argstr='%s', ), hemi=dict(argstr='-hemi %s', ), + hires=dict(argstr='-hires', + min_ver='6.0.0', + ), ignore_exception=dict(nohash=True, usedefault=True, ), From 260a27577dea454640bfc5117e0ad8e53ece02dd Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Wed, 1 Mar 2017 21:33:23 -0500 Subject: [PATCH 2/4] Add ExpertOptions interface to freesurfer.utils --- .../tests/test_auto_ExpertOptions.py | 50 ++++++++++++++ nipype/interfaces/freesurfer/utils.py | 65 ++++++++++++++++++- 2 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 nipype/interfaces/freesurfer/tests/test_auto_ExpertOptions.py diff --git a/nipype/interfaces/freesurfer/tests/test_auto_ExpertOptions.py b/nipype/interfaces/freesurfer/tests/test_auto_ExpertOptions.py new file mode 100644 index 0000000000..1c62abb937 --- /dev/null +++ b/nipype/interfaces/freesurfer/tests/test_auto_ExpertOptions.py @@ -0,0 +1,50 @@ +# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT +from __future__ import unicode_literals +from ..utils import ExpertOptions + + +def test_ExpertOptions_inputs(): + input_map = dict(mri_aparc2aseg=dict(), + mri_ca_label=dict(), + mri_ca_normalize=dict(), + mri_ca_register=dict(), + mri_edit_wm_with_aseg=dict(), + mri_em_register=dict(), + mri_fill=dict(), + mri_mask=dict(), + mri_normalize=dict(), + mri_pretess=dict(), + mri_remove_neck=dict(), + mri_segment=dict(), + mri_segstats=dict(), + mri_tessellate=dict(), + mri_watershed=dict(), + mris_anatomical_stats=dict(), + mris_ca_label=dict(), + mris_fix_topology=dict(), + mris_inflate=dict(), + mris_make_surfaces=dict(), + mris_register=dict(), + mris_smooth=dict(), + mris_sphere=dict(), + mris_surf2vol=dict(), + mrisp_paint=dict(), + out_file=dict(usedefault=True, + ), + talairach=dict(), + ) + inputs = ExpertOptions.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_ExpertOptions_outputs(): + output_map = dict(out_file=dict(), + ) + outputs = ExpertOptions.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/freesurfer/utils.py b/nipype/interfaces/freesurfer/utils.py index fed63e498e..ad5a50a869 100644 --- a/nipype/interfaces/freesurfer/utils.py +++ b/nipype/interfaces/freesurfer/utils.py @@ -18,8 +18,8 @@ import shutil from ...utils.filemanip import fname_presuffix, split_filename -from ..base import (TraitedSpec, File, traits, OutputMultiPath, isdefined, - CommandLine, CommandLineInputSpec) +from ..base import (TraitedSpec, BaseInterface, File, traits, OutputMultiPath, + isdefined, CommandLine, CommandLineInputSpec) from .base import (FSCommand, FSTraitedSpec, FSScriptCommand, FSScriptOutputSpec, FSTraitedSpecOpenMP, FSCommandOpenMP) @@ -2879,3 +2879,64 @@ def _list_outputs(self): outputs = self._outputs().get() outputs["out_file"] = os.path.abspath(self.inputs.out_file) return outputs + + +class ExpertOptionsInputSpec(TraitedSpec): + talairach = traits.String(desc="Flags to pass to talairach commands") + mri_normalize = traits.String(desc="Flags to pass to mri_normalize commands") + mri_watershed = traits.String(desc="Flags to pass to mri_watershed commands") + mri_em_register = traits.String(desc="Flags to pass to mri_em_register commands") + mri_ca_normalize = traits.String(desc="Flags to pass to mri_ca_normalize commands") + mri_ca_register = traits.String(desc="Flags to pass to mri_ca_register commands") + mri_remove_neck = traits.String(desc="Flags to pass to mri_remove_neck commands") + mri_ca_label = traits.String(desc="Flags to pass to mri_ca_label commands") + mri_segstats = traits.String(desc="Flags to pass to mri_segstats commands") + mri_mask = traits.String(desc="Flags to pass to mri_mask commands") + mri_segment = traits.String(desc="Flags to pass to mri_segment commands") + mri_edit_wm_with_aseg = traits.String(desc="Flags to pass to mri_edit_wm_with_aseg commands") + mri_pretess = traits.String(desc="Flags to pass to mri_pretess commands") + mri_fill = traits.String(desc="Flags to pass to mri_fill commands") + mri_tessellate = traits.String(desc="Flags to pass to mri_tessellate commands") + mris_smooth = traits.String(desc="Flags to pass to mri_smooth commands") + mris_inflate = traits.String(desc="Flags to pass to mri_inflate commands") + mris_sphere = traits.String(desc="Flags to pass to mris_sphere commands") + mris_fix_topology = traits.String(desc="Flags to pass to mris_fix_topology commands") + mris_make_surfaces = traits.String(desc="Flags to pass to mris_make_surfaces commands") + mris_surf2vol = traits.String(desc="Flags to pass to mris_surf2vol commands") + mris_register = traits.String(desc="Flags to pass to mris_register commands") + mrisp_paint = traits.String(desc="Flags to pass to mrisp_paint commands") + mris_ca_label = traits.String(desc="Flags to pass to mris_ca_label commands") + mris_anatomical_stats = traits.String(desc="Flags to pass to mris_anatomical_stats commands") + mri_aparc2aseg = traits.String(desc="Flags to pass to mri_aparc2aseg commands") + out_file = File("expert.opts", usedefault=True, desc="Output expert options file") + + +class ExpertOptionsOutputSpec(TraitedSpec): + out_file = File(exists=False, desc="Output expert options file") + + +class ExpertOptions(BaseInterface): + """ + Creates expert options file + https://surfer.nmr.mgh.harvard.edu/fswiki/recon-all#ExpertOptionsFile + """ + input_spec = ExpertOptionsInputSpec + output_spec = ExpertOptionsOutputSpec + + def _list_outputs(self): + outputs = self._outputs().get() + outputs["out_file"] = os.path.abspath(self.inputs.out_file) + return outputs + + def _run_interface(self, runtime): + out_file = self.inputs.out_file + + lines = [] + for binary, args in self.inputs.get().items(): + if binary == 'out_file' or not isdefined(args): + continue + lines.append('{} {}\n'.format(binary, args)) + + with open(out_file, 'w') as fobj: + fobj.write(''.join(lines)) + return runtime From af036f7276769d498c699e30328e1569056c0aa2 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Fri, 3 Mar 2017 13:33:37 -0500 Subject: [PATCH 3/4] Accept expert options as a dictionary --- nipype/interfaces/freesurfer/preprocess.py | 9 ++- .../tests/test_auto_ExpertOptions.py | 50 -------------- nipype/interfaces/freesurfer/utils.py | 65 +------------------ 3 files changed, 10 insertions(+), 114 deletions(-) delete mode 100644 nipype/interfaces/freesurfer/tests/test_auto_ExpertOptions.py diff --git a/nipype/interfaces/freesurfer/preprocess.py b/nipype/interfaces/freesurfer/preprocess.py index 735169ca91..4e43a4f03d 100644 --- a/nipype/interfaces/freesurfer/preprocess.py +++ b/nipype/interfaces/freesurfer/preprocess.py @@ -28,6 +28,7 @@ Directory, InputMultiPath, OutputMultiPath, CommandLine, CommandLineInputSpec, isdefined) +from ..traits_extension import DictStrStr from .base import (FSCommand, FSTraitedSpec, FSTraitedSpecOpenMP, FSCommandOpenMP, Info) @@ -634,7 +635,7 @@ class ReconAllInputSpec(CommandLineInputSpec): desc="Enable parallel execution") hires = traits.Bool(argstr="-hires", min_ver='6.0.0', desc="Conform to minimum voxel size (for voxels < 1mm)") - expert = File(exists=True, argstr='-expert %s', + expert = traits.Either(File(exists=True), DictStrStr, argstr='-expert %s', desc="Set parameters using expert file") subjects_dir = Directory(exists=True, argstr='-sd %s', hash_files=False, desc='path to subjects directory', genfile=True) @@ -899,6 +900,12 @@ def _format_arg(self, name, trait_spec, value): if name == 'T1_files': if self._is_resuming(): return '' + if name == 'expert' and isinstance(value, dict): + expert_fname = os.path.abspath('expert.opts') + expert = ['{} {}\n'.format(key, val) for key, val in value.items()] + with open(expert_fname, 'w') as fobj: + fobj.write(''.join(expert)) + value = expert_fname return super(ReconAll, self)._format_arg(name, trait_spec, value) @property diff --git a/nipype/interfaces/freesurfer/tests/test_auto_ExpertOptions.py b/nipype/interfaces/freesurfer/tests/test_auto_ExpertOptions.py deleted file mode 100644 index 1c62abb937..0000000000 --- a/nipype/interfaces/freesurfer/tests/test_auto_ExpertOptions.py +++ /dev/null @@ -1,50 +0,0 @@ -# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT -from __future__ import unicode_literals -from ..utils import ExpertOptions - - -def test_ExpertOptions_inputs(): - input_map = dict(mri_aparc2aseg=dict(), - mri_ca_label=dict(), - mri_ca_normalize=dict(), - mri_ca_register=dict(), - mri_edit_wm_with_aseg=dict(), - mri_em_register=dict(), - mri_fill=dict(), - mri_mask=dict(), - mri_normalize=dict(), - mri_pretess=dict(), - mri_remove_neck=dict(), - mri_segment=dict(), - mri_segstats=dict(), - mri_tessellate=dict(), - mri_watershed=dict(), - mris_anatomical_stats=dict(), - mris_ca_label=dict(), - mris_fix_topology=dict(), - mris_inflate=dict(), - mris_make_surfaces=dict(), - mris_register=dict(), - mris_smooth=dict(), - mris_sphere=dict(), - mris_surf2vol=dict(), - mrisp_paint=dict(), - out_file=dict(usedefault=True, - ), - talairach=dict(), - ) - inputs = ExpertOptions.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_ExpertOptions_outputs(): - output_map = dict(out_file=dict(), - ) - outputs = ExpertOptions.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/freesurfer/utils.py b/nipype/interfaces/freesurfer/utils.py index ad5a50a869..fed63e498e 100644 --- a/nipype/interfaces/freesurfer/utils.py +++ b/nipype/interfaces/freesurfer/utils.py @@ -18,8 +18,8 @@ import shutil from ...utils.filemanip import fname_presuffix, split_filename -from ..base import (TraitedSpec, BaseInterface, File, traits, OutputMultiPath, - isdefined, CommandLine, CommandLineInputSpec) +from ..base import (TraitedSpec, File, traits, OutputMultiPath, isdefined, + CommandLine, CommandLineInputSpec) from .base import (FSCommand, FSTraitedSpec, FSScriptCommand, FSScriptOutputSpec, FSTraitedSpecOpenMP, FSCommandOpenMP) @@ -2879,64 +2879,3 @@ def _list_outputs(self): outputs = self._outputs().get() outputs["out_file"] = os.path.abspath(self.inputs.out_file) return outputs - - -class ExpertOptionsInputSpec(TraitedSpec): - talairach = traits.String(desc="Flags to pass to talairach commands") - mri_normalize = traits.String(desc="Flags to pass to mri_normalize commands") - mri_watershed = traits.String(desc="Flags to pass to mri_watershed commands") - mri_em_register = traits.String(desc="Flags to pass to mri_em_register commands") - mri_ca_normalize = traits.String(desc="Flags to pass to mri_ca_normalize commands") - mri_ca_register = traits.String(desc="Flags to pass to mri_ca_register commands") - mri_remove_neck = traits.String(desc="Flags to pass to mri_remove_neck commands") - mri_ca_label = traits.String(desc="Flags to pass to mri_ca_label commands") - mri_segstats = traits.String(desc="Flags to pass to mri_segstats commands") - mri_mask = traits.String(desc="Flags to pass to mri_mask commands") - mri_segment = traits.String(desc="Flags to pass to mri_segment commands") - mri_edit_wm_with_aseg = traits.String(desc="Flags to pass to mri_edit_wm_with_aseg commands") - mri_pretess = traits.String(desc="Flags to pass to mri_pretess commands") - mri_fill = traits.String(desc="Flags to pass to mri_fill commands") - mri_tessellate = traits.String(desc="Flags to pass to mri_tessellate commands") - mris_smooth = traits.String(desc="Flags to pass to mri_smooth commands") - mris_inflate = traits.String(desc="Flags to pass to mri_inflate commands") - mris_sphere = traits.String(desc="Flags to pass to mris_sphere commands") - mris_fix_topology = traits.String(desc="Flags to pass to mris_fix_topology commands") - mris_make_surfaces = traits.String(desc="Flags to pass to mris_make_surfaces commands") - mris_surf2vol = traits.String(desc="Flags to pass to mris_surf2vol commands") - mris_register = traits.String(desc="Flags to pass to mris_register commands") - mrisp_paint = traits.String(desc="Flags to pass to mrisp_paint commands") - mris_ca_label = traits.String(desc="Flags to pass to mris_ca_label commands") - mris_anatomical_stats = traits.String(desc="Flags to pass to mris_anatomical_stats commands") - mri_aparc2aseg = traits.String(desc="Flags to pass to mri_aparc2aseg commands") - out_file = File("expert.opts", usedefault=True, desc="Output expert options file") - - -class ExpertOptionsOutputSpec(TraitedSpec): - out_file = File(exists=False, desc="Output expert options file") - - -class ExpertOptions(BaseInterface): - """ - Creates expert options file - https://surfer.nmr.mgh.harvard.edu/fswiki/recon-all#ExpertOptionsFile - """ - input_spec = ExpertOptionsInputSpec - output_spec = ExpertOptionsOutputSpec - - def _list_outputs(self): - outputs = self._outputs().get() - outputs["out_file"] = os.path.abspath(self.inputs.out_file) - return outputs - - def _run_interface(self, runtime): - out_file = self.inputs.out_file - - lines = [] - for binary, args in self.inputs.get().items(): - if binary == 'out_file' or not isdefined(args): - continue - lines.append('{} {}\n'.format(binary, args)) - - with open(out_file, 'w') as fobj: - fobj.write(''.join(lines)) - return runtime From 2aa325ee4f0f3bd7537d7f198f485136034dbd9a Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Fri, 3 Mar 2017 14:49:26 -0500 Subject: [PATCH 4/4] Explicitly add extra options to ReconAllInputSpec --- nipype/interfaces/freesurfer/preprocess.py | 70 ++++++++++++++++--- .../freesurfer/tests/test_auto_ReconAll.py | 52 ++++++++++++++ 2 files changed, 114 insertions(+), 8 deletions(-) diff --git a/nipype/interfaces/freesurfer/preprocess.py b/nipype/interfaces/freesurfer/preprocess.py index 4e43a4f03d..9c25f93e43 100644 --- a/nipype/interfaces/freesurfer/preprocess.py +++ b/nipype/interfaces/freesurfer/preprocess.py @@ -28,7 +28,6 @@ Directory, InputMultiPath, OutputMultiPath, CommandLine, CommandLineInputSpec, isdefined) -from ..traits_extension import DictStrStr from .base import (FSCommand, FSTraitedSpec, FSTraitedSpecOpenMP, FSCommandOpenMP, Info) @@ -635,12 +634,40 @@ class ReconAllInputSpec(CommandLineInputSpec): desc="Enable parallel execution") hires = traits.Bool(argstr="-hires", min_ver='6.0.0', desc="Conform to minimum voxel size (for voxels < 1mm)") - expert = traits.Either(File(exists=True), DictStrStr, argstr='-expert %s', + expert = File(exists=True, argstr='-expert %s', desc="Set parameters using expert file") subjects_dir = Directory(exists=True, argstr='-sd %s', hash_files=False, desc='path to subjects directory', genfile=True) flags = traits.Str(argstr='%s', desc='additional parameters') + # Expert options + talairach = traits.Str(desc="Flags to pass to talairach commands", xor=['expert']) + mri_normalize = traits.Str(desc="Flags to pass to mri_normalize commands", xor=['expert']) + mri_watershed = traits.Str(desc="Flags to pass to mri_watershed commands", xor=['expert']) + mri_em_register = traits.Str(desc="Flags to pass to mri_em_register commands", xor=['expert']) + mri_ca_normalize = traits.Str(desc="Flags to pass to mri_ca_normalize commands", xor=['expert']) + mri_ca_register = traits.Str(desc="Flags to pass to mri_ca_register commands", xor=['expert']) + mri_remove_neck = traits.Str(desc="Flags to pass to mri_remove_neck commands", xor=['expert']) + mri_ca_label = traits.Str(desc="Flags to pass to mri_ca_label commands", xor=['expert']) + mri_segstats = traits.Str(desc="Flags to pass to mri_segstats commands", xor=['expert']) + mri_mask = traits.Str(desc="Flags to pass to mri_mask commands", xor=['expert']) + mri_segment = traits.Str(desc="Flags to pass to mri_segment commands", xor=['expert']) + mri_edit_wm_with_aseg = traits.Str(desc="Flags to pass to mri_edit_wm_with_aseg commands", xor=['expert']) + mri_pretess = traits.Str(desc="Flags to pass to mri_pretess commands", xor=['expert']) + mri_fill = traits.Str(desc="Flags to pass to mri_fill commands", xor=['expert']) + mri_tessellate = traits.Str(desc="Flags to pass to mri_tessellate commands", xor=['expert']) + mris_smooth = traits.Str(desc="Flags to pass to mri_smooth commands", xor=['expert']) + mris_inflate = traits.Str(desc="Flags to pass to mri_inflate commands", xor=['expert']) + mris_sphere = traits.Str(desc="Flags to pass to mris_sphere commands", xor=['expert']) + mris_fix_topology = traits.Str(desc="Flags to pass to mris_fix_topology commands", xor=['expert']) + mris_make_surfaces = traits.Str(desc="Flags to pass to mris_make_surfaces commands", xor=['expert']) + mris_surf2vol = traits.Str(desc="Flags to pass to mris_surf2vol commands", xor=['expert']) + mris_register = traits.Str(desc="Flags to pass to mris_register commands", xor=['expert']) + mrisp_paint = traits.Str(desc="Flags to pass to mrisp_paint commands", xor=['expert']) + mris_ca_label = traits.Str(desc="Flags to pass to mris_ca_label commands", xor=['expert']) + mris_anatomical_stats = traits.Str(desc="Flags to pass to mris_anatomical_stats commands", xor=['expert']) + mri_aparc2aseg = traits.Str(desc="Flags to pass to mri_aparc2aseg commands", xor=['expert']) + class ReconAllOutputSpec(FreeSurferSource.output_spec): subjects_dir = Directory(exists=True, desc='Freesurfer subjects directory.') @@ -856,6 +883,16 @@ class ReconAll(CommandLine): _steps = _autorecon1_steps + _autorecon2_steps + _autorecon3_steps + _binaries = ['talairach', 'mri_normalize', 'mri_watershed', + 'mri_em_register', 'mri_ca_normalize', 'mri_ca_register', + 'mri_remove_neck', 'mri_ca_label', 'mri_segstats', + 'mri_mask', 'mri_segment', 'mri_edit_wm_with_aseg', + 'mri_pretess', 'mri_fill', 'mri_tessellate', 'mris_smooth', + 'mris_inflate', 'mris_sphere', 'mris_fix_topology', + 'mris_make_surfaces', 'mris_surf2vol', 'mris_register', + 'mrisp_paint', 'mris_ca_label', 'mris_anatomical_stats', + 'mri_aparc2aseg'] + def _gen_subjects_dir(self): return os.getcwd() @@ -900,17 +937,16 @@ def _format_arg(self, name, trait_spec, value): if name == 'T1_files': if self._is_resuming(): return '' - if name == 'expert' and isinstance(value, dict): - expert_fname = os.path.abspath('expert.opts') - expert = ['{} {}\n'.format(key, val) for key, val in value.items()] - with open(expert_fname, 'w') as fobj: - fobj.write(''.join(expert)) - value = expert_fname return super(ReconAll, self)._format_arg(name, trait_spec, value) @property def cmdline(self): cmd = super(ReconAll, self).cmdline + + # Adds '-expert' flag if expert flags are passed + # Mutually exclusive with 'expert' input parameter + cmd += self._prep_expert_file() + if not self._is_resuming(): return cmd subjects_dir = self.inputs.subjects_dir @@ -944,6 +980,24 @@ def cmdline(self): iflogger.info('resume recon-all : %s' % cmd) return cmd + def _prep_expert_file(self): + if isdefined(self.inputs.expert): + return '' + + lines = [] + for binary in self._binaries: + args = getattr(self.inputs, binary) + if isdefined(args): + lines.append('{} {}\n'.format(binary, args)) + + if lines == []: + return '' + + expert_fname = os.path.abspath('expert.opts') + with open(expert_fname, 'w') as fobj: + fobj.write(''.join(lines)) + return ' -expert {}'.format(expert_fname) + class BBRegisterInputSpec(FSTraitedSpec): subject_id = traits.Str(argstr='--s %s', diff --git a/nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py b/nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py index b748df7aa9..b0e89e9a3f 100644 --- a/nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py +++ b/nipype/interfaces/freesurfer/tests/test_auto_ReconAll.py @@ -30,6 +30,56 @@ def test_ReconAll_inputs(): ignore_exception=dict(nohash=True, usedefault=True, ), + mri_aparc2aseg=dict(xor=['expert'], + ), + mri_ca_label=dict(xor=['expert'], + ), + mri_ca_normalize=dict(xor=['expert'], + ), + mri_ca_register=dict(xor=['expert'], + ), + mri_edit_wm_with_aseg=dict(xor=['expert'], + ), + mri_em_register=dict(xor=['expert'], + ), + mri_fill=dict(xor=['expert'], + ), + mri_mask=dict(xor=['expert'], + ), + mri_normalize=dict(xor=['expert'], + ), + mri_pretess=dict(xor=['expert'], + ), + mri_remove_neck=dict(xor=['expert'], + ), + mri_segment=dict(xor=['expert'], + ), + mri_segstats=dict(xor=['expert'], + ), + mri_tessellate=dict(xor=['expert'], + ), + mri_watershed=dict(xor=['expert'], + ), + mris_anatomical_stats=dict(xor=['expert'], + ), + mris_ca_label=dict(xor=['expert'], + ), + mris_fix_topology=dict(xor=['expert'], + ), + mris_inflate=dict(xor=['expert'], + ), + mris_make_surfaces=dict(xor=['expert'], + ), + mris_register=dict(xor=['expert'], + ), + mris_smooth=dict(xor=['expert'], + ), + mris_sphere=dict(xor=['expert'], + ), + mris_surf2vol=dict(xor=['expert'], + ), + mrisp_paint=dict(xor=['expert'], + ), openmp=dict(argstr='-openmp %d', ), parallel=dict(argstr='-parallel', @@ -41,6 +91,8 @@ def test_ReconAll_inputs(): genfile=True, hash_files=False, ), + talairach=dict(xor=['expert'], + ), terminal_output=dict(nohash=True, ), use_T2=dict(argstr='-T2pial',