shift_origin bugfix if slightly out of bounds
This commit is contained in:
parent
d256d4ec2c
commit
3afdee9e15
7
field.py
7
field.py
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Reference in New Issue