shift_origin bugfix if slightly out of bounds

This commit is contained in:
Michael Krayer 2021-06-03 13:22:02 +02:00
parent d256d4ec2c
commit 3afdee9e15
1 changed files with 5 additions and 2 deletions

View File

@ -6,7 +6,7 @@ class Field3d:
self.data = numpy.array(data)
self.origin = tuple([float(x) for x in origin])
self.spacing = tuple([float(x) for x in spacing])
self.eps_collapse = 1e-7
self.eps_collapse = 1e-8
self._dim = None
return
@ -370,7 +370,7 @@ class Field3d:
from scipy import ndimage
assert isinstance(rel_shift,(tuple,list,numpy.ndarray)) and len(rel_shift)==3,\
"'shift' must be tuple/list with length 3."
assert all([rel_shift[ii]>=-1.0 and rel_shift[ii]<=1.0 for ii in range(3)]),\
assert all([rel_shift[ii]>=-1.0-self.eps_collapse and rel_shift[ii]<=1.0+self.eps_collapse for ii in range(3)]),\
"'shift' must be in (-1.0,1.0). {}".format(rel_shift)
data = self.data.copy()
origin = list(self.origin)
@ -385,6 +385,9 @@ class Field3d:
if only_keep_interior:
sl[axis] = slice(0,-1)
else:
# It has been asserted that rel_shift is within range, so map it on boundaries if necessary
if rel_shift[axis]>1.0: rel_shift[axis]=1.0
if rel_shift[axis]<-1.0: rel_shift[axis]=-1.0
weights = (-rel_shift[axis],1.0+rel_shift[axis])
data = ndimage.correlate1d(data,weights,axis=axis,mode='constant',cval=numpy.nan,origin=0)
origin[axis] += rel_shift[axis]*self.spacing[axis]