@@ -140,6 +140,7 @@ def _run_interface(self, runtime):
140140
141141 # Load in the fieldmap
142142 fmapnii = nb .load (self .inputs .in_data )
143+ fmapnii = nb .as_closest_canonical (fmapnii )
143144 zooms = fmapnii .header .get_zooms ()
144145
145146 # Get a mask (or define on the spot to cover the full extent)
@@ -148,6 +149,8 @@ def _run_interface(self, runtime):
148149 if isdefined (self .inputs .in_mask )
149150 else None
150151 )
152+ if masknii is not None :
153+ masknii = nb .as_closest_canonical (masknii )
151154
152155 # Determine the shape of bspline coefficients
153156 # This should not change with resizing, so do it first
@@ -178,17 +181,20 @@ def _run_interface(self, runtime):
178181 )
179182
180183 # Recenter the fieldmap
184+ center = 0
181185 if self .inputs .recenter == "mode" :
182186 from scipy .stats import mode
183187
184188 # Handle pre- and post-1.9 mode behavior.
185189 # squeeze can be dropped when the minimum version reaches 1.9
186190 # Will become: data -= mode(data[mask], keepdims=False).mode
187- data - = np .squeeze (mode (data [mask ]).mode )
191+ center = np .squeeze (mode (data [mask ]).mode )
188192 elif self .inputs .recenter == "median" :
189- data - = np .median (data [mask ])
193+ center = np .median (data [mask ])
190194 elif self .inputs .recenter == "mean" :
191- data -= np .mean (data [mask ])
195+ center = np .mean (data [mask ])
196+
197+ data -= center
192198
193199 # Calculate collocation matrix from (possibly resized) image and knot grids
194200 colmat = sparse_vstack (grid_bspline_weights (fmapnii , grid ) for grid in bs_grids ).T .tocsr ()
@@ -224,11 +230,14 @@ def _run_interface(self, runtime):
224230 # Interpolating in the original grid will require a new collocation matrix
225231 if need_resize :
226232 fmapnii = nb .load (self .inputs .in_data )
227- data = fmapnii .get_fdata (dtype = "float32" )
228- mask = (
229- np .ones_like (fmapnii .dataobj , dtype = bool ) if masknii is None
230- else np .asanyarray (nb .load (self .inputs .in_mask ).dataobj ) > 1e-4
231- )
233+ fmapnii = nb .as_closest_canonical (fmapnii )
234+ data = fmapnii .get_fdata (dtype = "float32" ) - center
235+ if masknii is not None :
236+ masknii = nb .load (self .inputs .in_mask )
237+ masknii = nb .as_closest_canonical (masknii )
238+ mask = np .asanyarray (masknii .dataobj ) > 1e-4
239+ else :
240+ mask = np .ones_like (fmapnii .dataobj , dtype = bool )
232241 colmat = sparse_vstack (
233242 grid_bspline_weights (fmapnii , grid ) for grid in bs_grids
234243 ).T .tocsr ()
0 commit comments