@@ -160,6 +160,7 @@ class _MergeSeriesInputSpec(BaseInterfaceInputSpec):
160160 allow_4D = traits .Bool (
161161 True , usedefault = True , desc = "whether 4D images are allowed to be concatenated"
162162 )
163+ affine_tolerance = traits .Float (desc = "Absolute tolerance allowed between image affines" )
163164
164165
165166class _MergeSeriesOutputSpec (TraitedSpec ):
@@ -174,8 +175,17 @@ class MergeSeries(SimpleInterface):
174175
175176 def _run_interface (self , runtime ):
176177 nii_list = []
178+ aff0 = None
177179 for f in self .inputs .in_files :
178180 filenii = nb .squeeze_image (nb .load (f ))
181+ if self .inputs .affine_tolerance :
182+ if aff0 is None :
183+ aff0 = filenii .affine
184+ elif not np .allclose (aff0 , filenii .affine , atol = self .inputs .affine_tolerance ):
185+ raise ValueError (
186+ "Difference in affines greater than allowed tolerance "
187+ f"{ self .inputs .affine_tolerance } "
188+ )
179189 ndim = filenii .dataobj .ndim
180190 if ndim == 3 :
181191 nii_list .append (filenii )
@@ -188,7 +198,10 @@ def _run_interface(self, runtime):
188198 "Input image has an incorrect number of dimensions" f" ({ ndim } )."
189199 )
190200
191- img_4d = nb .concat_images (nii_list )
201+ img_4d = nb .concat_images (
202+ nii_list ,
203+ check_affines = not bool (self .inputs .affine_tolerance )
204+ )
192205 out_file = fname_presuffix (
193206 self .inputs .in_files [0 ], suffix = "_merged" , newpath = runtime .cwd
194207 )
0 commit comments