From 3afdee9e1515e13922c745d6709d865d7f77b934 Mon Sep 17 00:00:00 2001 From: Michael Krayer Date: Thu, 3 Jun 2021 13:22:02 +0200 Subject: [PATCH] shift_origin bugfix if slightly out of bounds --- field.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/field.py b/field.py index b60af87..4a30082 100644 --- a/field.py +++ b/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]