Skip to content

Commit ca30015

Browse files
authored
Merge pull request #1976 from chrisfilo/enh/toptup_out_warp
Output warp fields and jacobian correction files in TOPUP.
2 parents f3ba8d2 + 4ecd866 commit ca30015

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

nipype/interfaces/fsl/epi.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
from ..base import (traits, TraitedSpec, InputMultiPath, File,
2828
isdefined)
29-
from .base import FSLCommand, FSLCommandInputSpec
29+
from .base import FSLCommand, FSLCommandInputSpec, Info
3030

3131

3232
class PrepareFieldmapInputSpec(FSLCommandInputSpec):
@@ -140,6 +140,13 @@ class TOPUPInputSpec(FSLCommandInputSpec):
140140
out_field = File(argstr='--fout=%s', hash_files=False,
141141
name_source=['in_file'], name_template='%s_field',
142142
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)
143150
out_corrected = File(argstr='--iout=%s', hash_files=False,
144151
name_source=['in_file'], name_template='%s_corrected',
145152
desc='name of 4D image file with unwarped images')
@@ -212,6 +219,8 @@ class TOPUPOutputSpec(TraitedSpec):
212219
out_movpar = File(exists=True, desc='movpar.txt output file')
213220
out_enc_file = File(desc='encoding directions file output for applytopup')
214221
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')
215224
out_corrected = File(desc='name of 4D image file with unwarped images')
216225
out_logfile = File(desc='name of log-file')
217226

@@ -237,7 +246,8 @@ class TOPUP(FSLCommand):
237246
>>> topup.cmdline # doctest: +ELLIPSIS +ALLOW_UNICODE
238247
'topup --config=b02b0.cnf --datain=topup_encoding.txt \
239248
--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'
241251
>>> res = topup.run() # doctest: +SKIP
242252
243253
"""
@@ -270,6 +280,16 @@ def _list_outputs(self):
270280
outputs['out_movpar'] = self._gen_fname(base, suffix='_movpar',
271281
ext='.txt', cwd=base_path)
272282

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+
273293
if isdefined(self.inputs.encoding_direction):
274294
outputs['out_enc_file'] = self._get_encfilename()
275295
return outputs

nipype/interfaces/fsl/tests/test_auto_TOPUP.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ def test_TOPUP_inputs():
5454
name_source=['in_file'],
5555
name_template='%s_field',
5656
),
57+
out_warp_prefix=dict(argstr='--dfout=%s',
58+
hash_files=False,
59+
usedefault=True,
60+
),
61+
out_jac_prefix=dict(argstr='--jacout=%s',
62+
hash_files=False,
63+
usedefault=True,
64+
),
5765
out_logfile=dict(argstr='--logout=%s',
5866
hash_files=False,
5967
keep_extension=True,
@@ -98,6 +106,8 @@ def test_TOPUP_outputs():
98106
out_fieldcoef=dict(),
99107
out_logfile=dict(),
100108
out_movpar=dict(),
109+
out_warps=dict(),
110+
out_jacs=dict(),
101111
)
102112
outputs = TOPUP.output_spec()
103113

0 commit comments

Comments
 (0)