@@ -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