From 4c84ea6adcf598c84b8cd5e1b222105e238156c2 Mon Sep 17 00:00:00 2001 From: Michael Krayer Date: Fri, 6 Aug 2021 20:35:27 +0200 Subject: [PATCH] clipping routines --- field.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/field.py b/field.py index 6ae11a1..2331ebc 100644 --- a/field.py +++ b/field.py @@ -214,6 +214,35 @@ class Field3d: data = self.data[sl] return Field3d(data,origin,spacing,deep=deep) + def clip(self,position,axis,invert=False,deep=False): + idx_clip = self.nearest_gridpoint(coord,axis=axis,lower=True) + sl = 3*[slice(None)] + origin_ = self.origin + spacing_ = self.spacing + if invert: + sl[axis] = slice(idx_clip+1,None) + origin_[axis] = self.origin[axis]+idx_clip*self.spacing[axis] + else: + sl[axis] = slice(0,idx_clip+1) + data_ = self.data[tuple(sl)] + return Field3d(data_,origin_,spacing_,deep=deep) + + def clip_box(self,bounds,deep=False,is_relative=False): + if is_relative: + bounds = tuple(self.origin[ii//2] + bounds[ii]*self.dim(ii//2)*self.spacing[ii//2] for ii in range(6)) + print(bounds) + idx_lo = self.nearest_gridpoint((bounds[0],bounds[2],bounds[4]),lower=True) + idx_hi = self.nearest_gridpoint((bounds[1],bounds[3],bounds[5]),lower=True) + origin_ = self.origin + spacing_ = self.spacing + idx_lo = tuple(0 if idx_lo[axis]<0 else idx_lo[axis] for axis in range(3)) + idx_hi = tuple(0 if idx_hi[axis]<0 else idx_hi[axis] for axis in range(3)) + sl_ = tuple([slice(idx_lo[0],idx_hi[0]+1), + slice(idx_lo[1],idx_hi[1]+1), + slice(idx_lo[2],idx_hi[2]+1)]) + data_ = self.data[sl_] + return Field3d(data_,origin_,spacing_,deep=deep) + def coordinate(self,idx,axis=None): if axis is None: assert len(idx)==3, "If 'axis' is None, 'idx' must be a tuple/list of length 3."