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
Пример #2
0
    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])
Пример #3
0
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
Пример #4
0
    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)
Пример #5
0
    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])
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
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
Пример #9
0
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
Пример #10
0
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
Пример #11
0
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
Пример #12
0
    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)]
Пример #13
0
#        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)