Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 18 additions & 30 deletions nipype/interfaces/afni/preprocess.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,8 @@ class AllineateInputSpec(AFNICommandInputSpec):
out_file = File(
desc='output file from 3dAllineate',
argstr='-prefix %s',
genfile=True,
name_template='%s_allineate',
name_source='in_file',
hash_files=False,
xor=['allcostx'])
out_param_file = File(
Expand Down Expand Up @@ -425,11 +426,11 @@ class AllineateInputSpec(AFNICommandInputSpec):
_dirs = ['X', 'Y', 'Z', 'I', 'J', 'K']
nwarp_fixmot = traits.List(
traits.Enum(*_dirs),
argstr='-nwarp_fixmot%s',
argstr='-nwarp_fixmot%s...',
desc='To fix motion along directions.')
nwarp_fixdep = traits.List(
traits.Enum(*_dirs),
argstr='-nwarp_fixdep%s',
argstr='-nwarp_fixdep%s...',
desc='To fix non-linear warp dependency along directions.')
verbose = traits.Bool(
argstr='-verb', desc='Print out verbose progress reports.')
Expand Down Expand Up @@ -466,50 +467,43 @@ class Allineate(AFNICommand):
'3dAllineate -source functional.nii -prefix functional_allineate.nii -1Dmatrix_apply cmatrix.mat'
>>> res = allineate.run() # doctest: +SKIP

>>> from nipype.interfaces import afni
>>> allineate = afni.Allineate()
>>> allineate.inputs.in_file = 'functional.nii'
>>> allineate.inputs.reference = 'structural.nii'
>>> allineate.inputs.allcostx = 'out.allcostX.txt'
>>> allineate.cmdline
'3dAllineate -source functional.nii -base structural.nii -allcostx |& tee out.allcostX.txt'
>>> res = allineate.run() # doctest: +SKIP

>>> allineate = afni.Allineate()
>>> allineate.inputs.in_file = 'functional.nii'
>>> allineate.inputs.reference = 'structural.nii'
>>> allineate.inputs.nwarp_fixmot = ['X', 'Y']
>>> allineate.cmdline
'3dAllineate -source functional.nii -nwarp_fixmotX -nwarp_fixmotY -prefix functional_allineate -base structural.nii'
>>> res = allineate.run() # doctest: +SKIP
"""

_cmd = '3dAllineate'
input_spec = AllineateInputSpec
output_spec = AllineateOutputSpec

def _format_arg(self, name, trait_spec, value):
if name == 'nwarp_fixmot' or name == 'nwarp_fixdep':
arg = ' '.join([trait_spec.argstr % v for v in value])
return arg
return super(Allineate, self)._format_arg(name, trait_spec, value)

def _gen_outfilename(self):
out_file = self.inputs.out_file
if not isdefined(out_file) and isdefined(self.inputs.in_file) and not isdefined(self.inputs.allcostx):
out_file = op.abspath(self._gen_fname(self.inputs.in_file,op.dirname(self.inputs.in_file),suffix='_allineate'))
return out_file

def _list_outputs(self):
outputs = self.output_spec().get()

outputs['out_file'] = self._gen_outfilename()
outputs = super(Allineate, self)._list_outputs()

if isdefined(self.inputs.out_weight_file):
if self.inputs.out_weight_file:
outputs['out_weight_file'] = op.abspath(
self.inputs.out_weight_file)

if isdefined(self.inputs.out_matrix):
if self.inputs.out_matrix:
path, base, ext = split_filename(self.inputs.out_matrix)
if ext.lower() not in ['.1d', '.1D']:
outputs['out_matrix'] = self._gen_fname(
self.inputs.out_matrix, suffix='.aff12.1D')
else:
outputs['out_matrix'] = op.abspath(self.inputs.out_matrix)

if isdefined(self.inputs.out_param_file):
if self.inputs.out_param_file:
path, base, ext = split_filename(self.inputs.out_param_file)
if ext.lower() not in ['.1d', '.1D']:
outputs['out_param_file'] = self._gen_fname(
Expand All @@ -518,16 +512,10 @@ def _list_outputs(self):
outputs['out_param_file'] = op.abspath(
self.inputs.out_param_file)

if isdefined(self.inputs.allcostx):
outputs['allcostX'] = os.path.abspath(
os.path.join(os.getcwd(), self.inputs.allcostx))
if self.inputs.allcostx:
outputs['allcostX'] = os.path.abspath(self.inputs.allcostx)
return outputs

def _gen_filename(self, name):
if name == 'out_file':
return self._gen_outfilename()
return None


class AutoTcorrelateInputSpec(AFNICommandInputSpec):
in_file = File(
Expand Down
6 changes: 6 additions & 0 deletions nipype/interfaces/base/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -1072,6 +1072,12 @@ def _filename_from_source(self, name, chain=None):
if not isdefined(retval) or "%s" in retval:
if not trait_spec.name_source:
return retval

# Do not generate filename when excluded by other inputs
if trait_spec.xor and any(isdefined(getattr(self.inputs, field))
for field in trait_spec.xor):
return retval

if isdefined(retval) and "%s" in retval:
name_template = retval
else:
Expand Down