@@ -42,14 +42,15 @@ class RobustTemplateInputSpec(FSTraitedSpecOpenMP):
42
42
desc = 'set outlier sensitivity manually (e.g. "--sat 4.685" ). Higher '
43
43
'values mean less sensitivity.' )
44
44
# 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' ,
47
47
desc = 'output xforms to template (for each input)' )
48
48
intensity_scaling = traits .Bool (
49
49
default_value = False , argstr = '--iscale' ,
50
50
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' ,
53
54
desc = 'final intensity scales (will activate --iscale)' )
54
55
subsample_threshold = traits .Int (
55
56
argstr = '--subsample %d' ,
@@ -107,8 +108,13 @@ class RobustTemplate(FSCommandOpenMP):
107
108
... 'functional.lta']
108
109
>>> template.inputs.scaled_intensity_outputs = ['structural-iscale.txt',
109
110
... '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'
112
118
113
119
>>> template.run() #doctest: +SKIP
114
120
@@ -126,18 +132,28 @@ def _format_arg(self, name, spec, value):
126
132
if name == 'average_metric' :
127
133
# return enumeration value
128
134
return spec .argstr % {"mean" : 0 , "median" : 1 }[value ]
135
+ if name in ('transform_outputs' , 'scaled_intensity_outputs' ):
136
+ value = self ._list_outputs ()[name ]
129
137
return super (RobustTemplate , self )._format_arg (name , spec , value )
130
138
131
139
def _list_outputs (self ):
132
140
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}.{}'
135
144
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 ]
138
150
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 ]
141
157
return outputs
142
158
143
159
0 commit comments