Skip to content

Commit 42335d3

Browse files
committed
rf: modify fsl.Merge api to abstract setting TR when merging along time dimension
1 parent 49066e0 commit 42335d3

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

nipype/interfaces/fsl/utils.py

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,12 @@ def _format_arg(self, name, trait_spec, value):
129129

130130

131131
class MergeInputSpec(FSLCommandInputSpec):
132-
in_files = traits.List(File(exists=True), argstr="%s", position=2,
133-
mandatory=True)
134-
dimension = traits.Enum('t', 'x', 'y', 'z', 'a', 'tr', argstr="-%s", position=0,
135-
desc="dimension along which to merge, tr option requires setting tr input",
132+
in_files = traits.List(File(exists=True), argstr="%s", position=2, mandatory=True)
133+
dimension = traits.Enum('t', 'x', 'y', 'z', 'a', argstr="-%s", position=0,
134+
desc="dimension along which to merge, optionally set tr input when dimension is t",
136135
mandatory=True)
137136
tr = traits.Float(position=-1, argstr='%.2f',
138-
desc='use to specify TR if dimension is set to tr')
137+
desc='use to specify TR in seconds (default is 1.00 sec), overrides dimension and sets it to tr')
139138
merged_file = File(argstr="%s", position=1, name_source='in_files', name_template='%s_merged', hash_files=False)
140139

141140

@@ -149,32 +148,42 @@ class Merge(FSLCommand):
149148
Images can be concatenated across time, x, y, or z dimensions. Across the time (t)
150149
dimension the TR is set by default to 1 sec.
151150
152-
Note: to set the TR to a different value, specify 'tr' for dimension and specify
153-
the TR value in seconds for the tr input.
151+
Note: to set the TR to a different value, specify 't' for dimension and specify
152+
the TR value in seconds for the tr input. The dimension will be automatically
153+
updated to 'tr'.
154154
155155
Examples
156156
--------
157157
>>> from nipype.interfaces.fsl import Merge
158158
>>> from nipype.testing import funcfile
159159
>>> merger = Merge()
160160
>>> merger.inputs.in_files = [funcfile, funcfile]
161-
>>> merger.inputs.dimension = 'tr'
162-
>>> merger.inputs.tr = 2.25
161+
>>> merger.inputs.dimension = 't'
163162
>>> merger.inputs.merged_file = "functional_merged.nii.gz"
164-
>>> merger.cmdline =='fslmerge -tr %s %s %.2f' % (merger.inputs.merged_file, ' '.join(merger.inputs.in_files), merger.inputs.tr)
163+
>>> merger.cmdline =='fslmerge -t %s %s' % (merger.inputs.merged_file,
164+
... ' '.join(merger.inputs.in_files))
165+
True
166+
>>> merger.inputs.tr = 2.25
167+
>>> merger.cmdline =='fslmerge -tr %s %s %.2f' % (merger.inputs.merged_file,
168+
... ' '.join(merger.inputs.in_files),
169+
... merger.inputs.tr)
165170
True
166171
"""
167172

168173
_cmd = 'fslmerge'
169174
input_spec = MergeInputSpec
170175
output_spec = MergeOutputSpec
171176

172-
def _format_arg(self, name, spec, value):
173-
if name == 'tr':
174-
if self.inputs.dimension != 'tr':
175-
raise ValueError('When TR is specified, dimension has to be tr')
176-
return spec.argstr % value
177-
return super(FSLMerge, self)._format_arg(name, spec, value)
177+
def _format_arg(self, name, spec, value):
178+
if name == 'tr':
179+
if self.inputs.dimension != 't':
180+
raise ValueError('When TR is specified, dimension must be t')
181+
return spec.argstr % value
182+
if name == 'dimension':
183+
if isdefined(self.inputs.tr):
184+
return '-tr'
185+
return spec.argstr % value
186+
return super(Merge, self)._format_arg(name, spec, value)
178187

179188

180189
class ExtractROIInputSpec(FSLCommandInputSpec):

0 commit comments

Comments
 (0)