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.data = numpy.array(data)
|
||||||
self.origin = tuple([float(x) for x in origin])
|
self.origin = tuple([float(x) for x in origin])
|
||||||
self.spacing = tuple([float(x) for x in spacing])
|
self.spacing = tuple([float(x) for x in spacing])
|
||||||
self.eps_collapse = 1e-7
|
self.eps_collapse = 1e-8
|
||||||
self._dim = None
|
self._dim = None
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
@ -370,7 +370,7 @@ class Field3d:
|
||||||
from scipy import ndimage
|
from scipy import ndimage
|
||||||
assert isinstance(rel_shift,(tuple,list,numpy.ndarray)) and len(rel_shift)==3,\
|
assert isinstance(rel_shift,(tuple,list,numpy.ndarray)) and len(rel_shift)==3,\
|
||||||
"'shift' must be tuple/list with length 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)
|
"'shift' must be in (-1.0,1.0). {}".format(rel_shift)
|
||||||
data = self.data.copy()
|
data = self.data.copy()
|
||||||
origin = list(self.origin)
|
origin = list(self.origin)
|
||||||
|
|
@ -385,6 +385,9 @@ class Field3d:
|
||||||
if only_keep_interior:
|
if only_keep_interior:
|
||||||
sl[axis] = slice(0,-1)
|
sl[axis] = slice(0,-1)
|
||||||
else:
|
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])
|
weights = (-rel_shift[axis],1.0+rel_shift[axis])
|
||||||
data = ndimage.correlate1d(data,weights,axis=axis,mode='constant',cval=numpy.nan,origin=0)
|
data = ndimage.correlate1d(data,weights,axis=axis,mode='constant',cval=numpy.nan,origin=0)
|
||||||
origin[axis] += rel_shift[axis]*self.spacing[axis]
|
origin[axis] += rel_shift[axis]*self.spacing[axis]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue