Skip to content

Commit de252b4

Browse files
authored
Apply suggestions from code review [skip ci]
1 parent 0c542c6 commit de252b4

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

niworkflows/interfaces/nibabel.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ def _run_interface(self, runtime):
9393

9494
class _FourToThreeInputSpec(BaseInterfaceInputSpec):
9595
in_file = File(exists=True, mandatory=True, desc='input 4d image')
96+
accept_3D = traits.Bool(False, usedefault=True, desc='do not fail if a 3D volume is passed in')
9697

9798

9899
class _FourToThreeOutputSpec(TraitedSpec):
@@ -108,14 +109,25 @@ class SplitSeries(SimpleInterface):
108109
output_spec = _FourToThreeOutputSpec
109110

110111
def _run_interface(self, runtime):
111-
filenii = nb.load(self.inputs.in_file)
112-
if len(filenii.shape) != 4:
113-
raise RuntimeError('Input image (%s) is not 4D.' % filenii)
112+
filenii = nb.squeeze_image(nb.load(self.inputs.in_file))
113+
ndim = filenii.dataobj.ndim
114+
if ndim != 4:
115+
if self.inputs.accept_3D and ndim == 3:
116+
out_file = str(
117+
Path(fname_presuffix(self.inputs.in_file, suffix=f"_idx-000")).absolute()
118+
)
119+
self._results['out_files'] = out_file
120+
filenii.to_filename(out_file)
121+
return runtime
122+
raise RuntimeError(f"Input image image is {ndim}D.")
114123

115124
files_3d = nb.four_to_three(filenii)
116125
self._results['out_files'] = []
126+
in_file = self.inputs.in_file
117127
for i, file_3d in enumerate(files_3d):
118-
out_file = fname_presuffix(in_file, suffix=f"_idx-{i:03}")
128+
out_file = str(
129+
Path(fname_presuffix(in_file, suffix=f"_idx-{i:03}")).absolute()
130+
)
119131
file_3d.to_filename(out_file)
120132
self._results['out_files'].append(out_file)
121133

@@ -125,6 +137,7 @@ def _run_interface(self, runtime):
125137
class _MergeSeriesInputSpec(BaseInterfaceInputSpec):
126138
in_files = InputMultiObject(File(exists=True, mandatory=True,
127139
desc='input list of 3d images'))
140+
allow_4D = traits.Bool(True, usedefault=True, desc='whether 4D images are allowed to be concatenated')
128141

129142

130143
class _MergeSeriesOutputSpec(TraitedSpec):
@@ -142,11 +155,14 @@ def _run_interface(self, runtime):
142155
for f in self.inputs.in_files:
143156
filenii = nb.load(f)
144157
filenii = nb.squeeze_image(filenii)
145-
if len(filenii.shape) != 3:
146-
raise RuntimeError('Input image (%s) is not 3D.' % f)
147-
else:
158+
if filenii.dataobj.ndim == 3:
148159
nii_list.append(filenii)
149-
img_4d = nb.funcs.concat_images(nii_list)
160+
elif self.inputs.allow_4D and filenii.dataobj.ndim == 4:
161+
nii_list += nb.four_to_three(filenii)
162+
else:
163+
raise ValueError("Input image has an incorrect number of dimensions"
164+
f" ({filenii.dataobj.ndim}).")
165+
img_4d = nb.concat_images(nii_list)
150166
out_file = fname_presuffix(self.inputs.in_files[0], suffix="_merged")
151167
img_4d.to_filename(out_file)
152168

0 commit comments

Comments
 (0)