Skip to content

Commit af55be6

Browse files
authored
Merge pull request #2141 from effigies/enh/template_default_outputs
ENH: Add default transform, intensity scaling files to RobustTemplate
2 parents 539fdb9 + 7d271a8 commit af55be6

File tree

1 file changed

+28
-12
lines changed

1 file changed

+28
-12
lines changed

nipype/interfaces/freesurfer/longitudinal.py

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,15 @@ class RobustTemplateInputSpec(FSTraitedSpecOpenMP):
4242
desc='set outlier sensitivity manually (e.g. "--sat 4.685" ). Higher '
4343
'values mean less sensitivity.')
4444
# optional
45-
transform_outputs = InputMultiPath(
46-
File(exists=False), argstr='--lta %s',
45+
transform_outputs = traits.Either(
46+
InputMultiPath(File(exists=False)), traits.Bool, argstr='--lta %s',
4747
desc='output xforms to template (for each input)')
4848
intensity_scaling = traits.Bool(
4949
default_value=False, argstr='--iscale',
5050
desc='allow also intensity scaling (default off)')
51-
scaled_intensity_outputs = InputMultiPath(
52-
File(exists=False), argstr='--iscaleout %s',
51+
scaled_intensity_outputs = traits.Either(
52+
InputMultiPath(File(exists=False)), traits.Bool,
53+
argstr='--iscaleout %s',
5354
desc='final intensity scales (will activate --iscale)')
5455
subsample_threshold = traits.Int(
5556
argstr='--subsample %d',
@@ -107,8 +108,13 @@ class RobustTemplate(FSCommandOpenMP):
107108
... 'functional.lta']
108109
>>> template.inputs.scaled_intensity_outputs = ['structural-iscale.txt',
109110
... 'functional-iscale.txt']
110-
>>> template.cmdline #doctest: +NORMALIZE_WHITESPACE +ALLOW_UNICODE
111-
'mri_robust_template --satit --average 0 --fixtp --mov structural.nii functional.nii --inittp 1 --noit --template T1.nii --iscaleout structural-iscale.txt functional-iscale.txt --subsample 200 --lta structural.lta functional.lta'
111+
>>> template.cmdline #doctest: +NORMALIZE_WHITESPACE +ALLOW_UNICODE +ELLIPSIS
112+
'mri_robust_template --satit --average 0 --fixtp --mov structural.nii functional.nii --inittp 1 --noit --template T1.nii --iscaleout .../structural-iscale.txt .../functional-iscale.txt --subsample 200 --lta .../structural.lta .../functional.lta'
113+
114+
>>> template.inputs.transform_outputs = True
115+
>>> template.inputs.scaled_intensity_outputs = True
116+
>>> template.cmdline #doctest: +NORMALIZE_WHITESPACE +ALLOW_UNICODE +ELLIPSIS
117+
'mri_robust_template --satit --average 0 --fixtp --mov structural.nii functional.nii --inittp 1 --noit --template T1.nii --iscaleout .../is1.txt .../is2.txt --subsample 200 --lta .../tp1.lta .../tp2.lta'
112118
113119
>>> template.run() #doctest: +SKIP
114120
@@ -126,18 +132,28 @@ def _format_arg(self, name, spec, value):
126132
if name == 'average_metric':
127133
# return enumeration value
128134
return spec.argstr % {"mean": 0, "median": 1}[value]
135+
if name in ('transform_outputs', 'scaled_intensity_outputs'):
136+
value = self._list_outputs()[name]
129137
return super(RobustTemplate, self)._format_arg(name, spec, value)
130138

131139
def _list_outputs(self):
132140
outputs = self.output_spec().get()
133-
outputs['out_file'] = os.path.abspath(
134-
self.inputs.out_file)
141+
outputs['out_file'] = os.path.abspath(self.inputs.out_file)
142+
n_files = len(self.inputs.in_files)
143+
fmt = '{}{:02d}.{}' if n_files > 9 else '{}{:d}.{}'
135144
if isdefined(self.inputs.transform_outputs):
136-
outputs['transform_outputs'] = [os.path.abspath(
137-
x) for x in self.inputs.transform_outputs]
145+
fnames = self.inputs.transform_outputs
146+
if fnames is True:
147+
fnames = [fmt.format('tp', i + 1, 'lta')
148+
for i in range(n_files)]
149+
outputs['transform_outputs'] = [os.path.abspath(x) for x in fnames]
138150
if isdefined(self.inputs.scaled_intensity_outputs):
139-
outputs['scaled_intensity_outputs'] = [os.path.abspath(
140-
x) for x in self.inputs.scaled_intensity_outputs]
151+
fnames = self.inputs.scaled_intensity_outputs
152+
if fnames is True:
153+
fnames = [fmt.format('is', i + 1, 'txt')
154+
for i in range(n_files)]
155+
outputs['scaled_intensity_outputs'] = [os.path.abspath(x)
156+
for x in fnames]
141157
return outputs
142158

143159

0 commit comments

Comments
 (0)