26
26
27
27
from ..base import (traits , TraitedSpec , InputMultiPath , File ,
28
28
isdefined )
29
- from .base import FSLCommand , FSLCommandInputSpec
29
+ from .base import FSLCommand , FSLCommandInputSpec , Info
30
30
31
31
32
32
class PrepareFieldmapInputSpec (FSLCommandInputSpec ):
@@ -140,6 +140,13 @@ class TOPUPInputSpec(FSLCommandInputSpec):
140
140
out_field = File (argstr = '--fout=%s' , hash_files = False ,
141
141
name_source = ['in_file' ], name_template = '%s_field' ,
142
142
desc = 'name of image file with field (Hz)' )
143
+ out_warp_prefix = traits .Str ("warpfield" , argstr = '--dfout=%s' , hash_files = False ,
144
+ desc = 'prefix for the warpfield images (in mm)' ,
145
+ usedefault = True )
146
+ out_jac_prefix = traits .Str ("jac" , argstr = '--jacout=%s' ,
147
+ hash_files = False ,
148
+ desc = 'prefix for the warpfield images' ,
149
+ usedefault = True )
143
150
out_corrected = File (argstr = '--iout=%s' , hash_files = False ,
144
151
name_source = ['in_file' ], name_template = '%s_corrected' ,
145
152
desc = 'name of 4D image file with unwarped images' )
@@ -212,6 +219,8 @@ class TOPUPOutputSpec(TraitedSpec):
212
219
out_movpar = File (exists = True , desc = 'movpar.txt output file' )
213
220
out_enc_file = File (desc = 'encoding directions file output for applytopup' )
214
221
out_field = File (desc = 'name of image file with field (Hz)' )
222
+ out_warps = traits .List (File (exists = True ), desc = 'warpfield images' )
223
+ out_jacs = traits .List (File (exists = True ), desc = 'Jacobian images' )
215
224
out_corrected = File (desc = 'name of 4D image file with unwarped images' )
216
225
out_logfile = File (desc = 'name of log-file' )
217
226
@@ -237,7 +246,8 @@ class TOPUP(FSLCommand):
237
246
>>> topup.cmdline # doctest: +ELLIPSIS +ALLOW_UNICODE
238
247
'topup --config=b02b0.cnf --datain=topup_encoding.txt \
239
248
--imain=b0_b0rev.nii --out=b0_b0rev_base --iout=b0_b0rev_corrected.nii.gz \
240
- --fout=b0_b0rev_field.nii.gz --logout=b0_b0rev_topup.log'
249
+ --fout=b0_b0rev_field.nii.gz --jacout=jac --logout=b0_b0rev_topup.log \
250
+ --dfout=warpfield'
241
251
>>> res = topup.run() # doctest: +SKIP
242
252
243
253
"""
@@ -270,6 +280,16 @@ def _list_outputs(self):
270
280
outputs ['out_movpar' ] = self ._gen_fname (base , suffix = '_movpar' ,
271
281
ext = '.txt' , cwd = base_path )
272
282
283
+ n_vols = nb .load (self .inputs .in_file ).shape [- 1 ]
284
+ ext = Info .output_type_to_ext (self .inputs .output_type )
285
+ fmt = os .path .abspath ('{prefix}_{i:02d}{ext}' ).format
286
+ outputs ['out_warps' ] = [
287
+ fmt (prefix = self .inputs .out_warp_prefix , i = i , ext = ext )
288
+ for i in range (1 , n_vols + 1 )]
289
+ outputs ['out_jacs' ] = [
290
+ fmt (prefix = self .inputs .out_jac_prefix , i = i , ext = ext )
291
+ for i in range (1 , n_vols + 1 )]
292
+
273
293
if isdefined (self .inputs .encoding_direction ):
274
294
outputs ['out_enc_file' ] = self ._get_encfilename ()
275
295
return outputs
0 commit comments