def griddata(self, xdata, ydata, zdata, xbin=20, ybin=20): if self.verbose: print 'Entering griddata...', xmin = min(xdata) xmax = max(xdata) xstep = (xmax - xmin) / xbin ymin = min(ydata) ymax = max(ydata) ystep = (ymax - ymin) / ybin print xmin, xmax, xstep, ymin, ymax, ystep xi, yi = mgrid[xmin:xmax:xstep, ymin:ymax:ystep] # triangulate data try: print 'here1' tri = delaunay.Triangulation(xdata, ydata) print 'here2' interp = tri.nn_interpolator(zdata) print 'here3' zi = interp(xi, yi) print 'here4' except: print 'Problem in griddata' if self.verbose: print 'Done' return xi, yi, zi
def test_ccw_triangles(self): assert False for n in (10, 30, 100, 300, 1000, 3000): x, y = self.rs.uniform(0, 100, size=(2, n)) tri = dlny.Triangulation(x, y) for i,j,k in tri.triangle_nodes: assert not onright(x[i], y[i], x[j], y[j], x[k], y[k])
def prep_data2(xt, yt, zorigt, interpolate_on=True): # Data=pylab.load(r'c:\resolution_stuff\1p4K.iexy') #Data=pylab.load(filename) #xt=Data[:,2] #yt=Data[:,3] #zorigt=Data[:,0] xt = N.array(xt).flatten() yt = N.array(yt).flatten() zorigt = N.array(zorigt).flatten() x = xt[:, zorigt > 0.0] y = yt[:, zorigt > 0.0] z = zorigt[:, zorigt > 0.0] # zorig=ma.array(zorigt) print 'reached' threshold = 0.0 # print zorigt < threshold # print N.isnan(zorigt) # z = ma.masked_where(zorigt < threshold , zorigt) print 'where masked ', z.shape #should be commented out--just for testing ## x = pylab.randn(Nu)/aspect ## y = pylab.randn(Nu) ## z = pylab.rand(Nu) ## print x.shape ## print y.shape # Grid print x.min() print x.max() print y.min() print y.max() print x.shape xmesh_step = 0.02 ymesh_step = 0.5 xi, yi = N.mgrid[x.min():x.max():xmesh_step, y.min():y.max():ymesh_step] #blah # triangulate data tri = D.Triangulation(N.copy(x), N.copy(y)) print 'before interpolator' # interpolate data interp = tri.nn_interpolator(z) print 'interpolator reached' zi = interp(xi, yi) # or, all in one line # zi = Triangulation(x,y).nn_interpolator(z)(xi,yi) # return x,y,z if interpolate_on == False: #print "off" #print xi.shape #print N.reshape(x,(15,31)) xi = N.reshape(x, (15, 31)) yi = N.reshape(y, (15, 31)) zi = N.reshape(z, (15, 31)) #print zi2-zi #blah print "interpolation off" return xi, yi, zi
def test_circle_condition(self): assert False for n in (10, 30, 100, 300, 1000, 3000): x, y = self.rs.uniform(0, 100, size=(2, n)) tri = dlny.Triangulation(x, y) i = tri.triangle_nodes[:,0] r2 = ((x[i] - tri.circumcenters[:,0])**2 + (y[i] - tri.circumcenters[:,1])**2) alldist2 = (sp.subtract.outer(x, tri.circumcenters[:,0])**2 + sp.subtract.outer(y, tri.circumcenters[:,1])**2) assert sp.alltrue(r2 <= alldist2)
def test_ccw_hull(self): assert False for n in (10, 30, 100, 300, 1000, 3000): x, y = self.rs.uniform(0, 100, size=(2, n)) tri = dlny.Triangulation(x, y) hull = list(tri.hull) hull.append(hull[0]) hull.append(hull[1]) for i,j,k in zip(hull[:-2], hull[1:-1], hull[2:]): assert not onright(x[i], y[i], x[j], y[j], x[k], y[k])
def test_counts(self): assert False for n in (10, 30, 100, 300, 1000, 3000): x, y = self.rs.uniform(0, 100, size=(2, n)) tri = dlny.Triangulation(x, y) k = len(tri.hull) ntriangles = 2*n - 2 - k nedges = 3*n - 3 - k assert tri.triangle_nodes.shape == (ntriangles, 3) assert tri.triangle_neighbors.shape == (ntriangles, 3) assert tri.edge_db.shape == (nedges, 2) assert tri.circumcenters.shape == (ntriangles, 2) assert sp.sum((tri.triangle_neighbors == -1).astype(sp.int32).flat) == k
def interp(self, xt, yt, zorigt): x = xt[:, zorigt > 0.0] y = yt[:, zorigt > 0.0] z = zorigt[:, zorigt > 0.0] tri = D.Triangulation(x, y) interp = tri.nn_interpolator(z) xi = N.copy(x) yi = N.copy(y) xi = N.concatenate((xi, self.line_x)) yi = N.concatenate((yi, self.line_y)) zi = interp(xi, yi) mylocator = locator(xi, yi) inds = mylocator.inside(self.line_x, self.line_y) outxi = xi[inds.astype(int)] outyi = yi[inds.astype(int)] outzi = zi[inds.astype(int)] return outxi, outyi, outzi
def extrapolate_mask(a, mask=None): if mask is None and not isinstance(a, ma.MaskedArray): return a if mask is None: mask = a.mask else: if isinstance(a, ma.MaskedArray): mask = mask | a.mask a = a[:] # make a copy of array a jj, ii = indices(a.shape) igood = ii[~mask] jgood = jj[~mask] ibad = ii[mask] jbad = jj[mask] tri = delaunay.Triangulation(igood, jgood) # interpolate from the good points (mask == 1) interp = tri.nn_extrapolator(a[~mask]) # to the bad points (mask == 0) a[mask] = interp(ibad, jbad) return a
def prep_data(filename): # Data=pylab.load(r'c:\resolution_stuff\1p4K.iexy') Data = pylab.load(filename) xt = Data[:, 2] yt = Data[:, 3] zorigt = Data[:, 0] x = xt[:, zorigt > 0.0] y = yt[:, zorigt > 0.0] z = zorigt[:, zorigt > 0.0] # zorig=ma.array(zorigt) print 'reached' threshold = 0.0 # print zorigt < threshold # print N.isnan(zorigt) # z = ma.masked_where(zorigt < threshold , zorigt) print 'where masked ', z.shape #should be commented out--just for testing ## x = pylab.randn(Nu)/aspect ## y = pylab.randn(Nu) ## z = pylab.rand(Nu) ## print x.shape ## print y.shape # Grid xi, yi = N.mgrid[-5:5:100j, -5:5:100j] xi, yi = N.mgrid[x.min():x.max():.05, y.min():y.max():.05] # triangulate data tri = D.Triangulation(x, y) print 'before interpolator' # interpolate data interp = tri.nn_interpolator(z) print 'interpolator reached' zi = interp(xi, yi) # or, all in one line # zi = Triangulation(x,y).nn_interpolator(z)(xi,yi) # return x,y,z if interpolate_on == False: xi = x yi = y zi = z return xi, yi, zi
def transect(x, y, xi, yi, prop): '''propi = transect(x, y, xi, yi, prop) Interpolates property prop on a horizontal grid x, y to a transect given by the points in arrays xi, yi. prop may be two- or more dimensional, but the two rightmost dimensions must match those of x and y (which must both be two dimensional). The grid x, y may be given as a masked array.''' if ma.isMaskedArray(x) and ma.isMaskedArray(y): mask = ~x.mask & ~y.mask else: mask = ones(x.shape, dtype='bool') x = x[mask] y = y[mask] tri = delaunay.Triangulation(x, y) if prop.ndim == 2: return tri.nn_interpolator(prop[mask])(xi, yi) propi = empty(prop.shape[:-2] + (len(xi), ), 'd') for idx in zip(*indices(prop.shape[:-2])): propi[idx, :] = tri.nn_interpolator(prop[idx, mask].flat)(xi, yi) return propi
def prep_data2(xt, yt, zorigt): # Data=pylab.load(r'c:\resolution_stuff\1p4K.iexy') #Data=pylab.load(filename) #xt=Data[:,2] #yt=Data[:,3] #zorigt=Data[:,0] x = xt[:, zorigt > 0.0] y = yt[:, zorigt > 0.0] z = zorigt[:, zorigt > 0.0] # zorig=ma.array(zorigt) print 'reached' threshold = 0.0 # print zorigt < threshold # print N.isnan(zorigt) # z = ma.masked_where(zorigt < threshold , zorigt) print 'where masked ', z.shape #should be commented out--just for testing ## x = pylab.randn(Nu)/aspect ## y = pylab.randn(Nu) ## z = pylab.rand(Nu) ## print x.shape ## print y.shape # Grid print x.min() print x.max() print y.min() print y.max() print x.shape xi, yi = N.mgrid[x.min():x.max():1e-4, y.min():y.max():1e-4] # triangulate data tri = D.Triangulation(N.copy(x), N.copy(y)) print 'before interpolator' # interpolate data interp = tri.nn_interpolator(z) print 'interpolator reached' zi = interp(xi, yi) # or, all in one line # zi = Triangulation(x,y).nn_interpolator(z)(xi,yi) # return x,y,z return xi, yi, zi
if 1: point1 = (.514, .494) point2 = (.492, .51) myline = linegen.linegen(point1, point2) line_x, line_y = myline.gen_line(divisions=50) pylab.plot(line_x, line_y, 'red', linewidth=3.0) ax.set_ylim(ylim) ax.set_xlim(xlim) if 1: xt, yt, zorigt = readmeshfiles(mydirectory, 'dmesh', myend) #0 x = xt[:, zorigt > 0.0] y = yt[:, zorigt > 0.0] z = zorigt[:, zorigt > 0.0] tri = D.Triangulation(x, y) print 'before last interpolator' # interpolate data interp = tri.nn_interpolator(z) print 'interpolator reached' xi = N.copy(x) yi = N.copy(y) xi = N.concatenate((xi, line_x)) yi = N.concatenate((yi, line_y)) zi = interp(xi, yi) mylocator = locator.locator(xi, yi) inds = mylocator.inside(line_x, line_y) print 'after interpolator' print inds print xi[inds.astype(int)]
# data.append(datum) # print data.get_data()[1].gen_motor1_arr() # print data.extract_a4() a3,a4,counts=data.extract_a3a4() # a3=N.array(a3,'d') # a4=N.array(a4,'d') # counts=N.array(counts,'d') print a3.shape print a4.shape print counts.shape # Grid # xi, yi = N.mgrid[-5:5:100j,-5:5:100j] xi,yi=N.mgrid[a3.min():a3.max():.1,a4.min():a4.max():.1] # triangulate data tri = D.Triangulation(a3,a4) # interpolate data interp = tri.nn_interpolator(counts) zi = interp(xi,yi) # or, all in one line # zi = Triangulation(x,y).nn_interpolator(z)(xi,yi) plot_data(xi,yi,zi) # mydatareader.readibuffer(myfilestr)