[6] | 1 | #!/usr/bin/env python |
---|
| 2 | # -*- coding: utf-8 -*- |
---|
| 3 | import numpy as np |
---|
| 4 | from numpy import * |
---|
| 5 | |
---|
| 6 | def newgrid(x, y, z, mask, vnx, z0, z1): |
---|
| 7 | |
---|
| 8 | |
---|
| 9 | dx=0.1 |
---|
| 10 | dy=1 |
---|
| 11 | dparx=0.05 |
---|
| 12 | dpary=0.5 |
---|
| 13 | n0=0 |
---|
| 14 | y11= -50 |
---|
| 15 | x0, x1 = -180, 180 |
---|
| 16 | y0, y1 = -90, 90 |
---|
| 17 | dx=0.1 |
---|
| 18 | dy=1.0 |
---|
| 19 | n=size(x) |
---|
| 20 | xvec = arange(x0,x1,dx) |
---|
| 21 | yvec = arange(y0,y11,dy) |
---|
| 22 | nx = size(xvec) |
---|
| 23 | ny = size(yvec) |
---|
| 24 | ix = zeros(n, float) |
---|
| 25 | iy = zeros(n, float) |
---|
| 26 | |
---|
| 27 | for kk in range(0,n): |
---|
| 28 | if x[kk] == -180: |
---|
| 29 | ix[kk] = 3600 |
---|
| 30 | else: |
---|
| 31 | ix[kk] = math.ceil((x[kk] - x0)/dx)-1 |
---|
| 32 | |
---|
| 33 | for kk in range(0,n): |
---|
| 34 | if y[kk] == -90: |
---|
| 35 | iy[kk] = 0 |
---|
| 36 | else: |
---|
| 37 | iy[kk] = math.ceil((y[kk] - y0)/dy)-1 |
---|
| 38 | |
---|
| 39 | inx = (ix >= 0) & (ix < nx) |
---|
| 40 | iny = (iy >= 0) & (iy < ny) |
---|
| 41 | inz = (z >= z0) & (z <= z1) |
---|
| 42 | inn = inx & iny & inz |
---|
| 43 | iix = ix[inn] |
---|
| 44 | iiy = iy[inn] |
---|
| 45 | zz = z[inn] |
---|
| 46 | mm = mask[inn] |
---|
| 47 | |
---|
| 48 | N = size(iix)# how many datapoints are left now? |
---|
| 49 | #calculation of the each arc legth |
---|
| 50 | |
---|
| 51 | dxx=vnx |
---|
| 52 | ngrid = zeros([nx, ny], float)# no of obs per grid cell |
---|
| 53 | nngrid = zeros([nx, ny], float) |
---|
| 54 | zgrid = zeros([nx, ny], float)# z-coordinate |
---|
| 55 | zzgrid = zeros([nx, ny], float)# z-coordinate grouped |
---|
| 56 | zdgrid = zeros([nx, ny], float)# z-coordinate 2 |
---|
| 57 | zz2grid = zeros([nx, ny], float)# z-coordinate 2 grouped |
---|
| 58 | |
---|
| 59 | for i in range(0, N): |
---|
| 60 | zgrid[iix[i], iiy[i]] = zgrid[iix[i],iiy[i]]+zz[i] |
---|
| 61 | zdgrid[iix[i], iiy[i]] = zdgrid[iix[i],iiy[i]]+zz[i]*zz[i] |
---|
| 62 | ngrid[iix[i], iiy[i]] = ngrid[iix[i],iiy[i]]+ 1 |
---|
| 63 | |
---|
| 64 | for i in range(0,ny): |
---|
| 65 | jj=round(3600/dxx[i]) |
---|
| 66 | c=reshape(ngrid[:,i],(jj,dxx[i])) |
---|
| 67 | b=c.sum(axis=1) |
---|
| 68 | d=reshape(zgrid[:,i],(jj,dxx[i])) |
---|
| 69 | e=d.sum(axis=1) |
---|
| 70 | f=reshape(zdgrid[:,i],(jj,dxx[i])) |
---|
| 71 | g=f.sum(axis=1) |
---|
| 72 | for j in range(0, nx): |
---|
| 73 | ii=ceil((j+1)/dxx[i])-1 |
---|
| 74 | nngrid[j,i]=b[ii] |
---|
| 75 | zzgrid[j,i]=e[ii] |
---|
| 76 | zz2grid[j,i]=g[ii] |
---|
| 77 | |
---|
| 78 | zzpgrid = zeros([nx, ny], float) |
---|
| 79 | zzpgrid = zzgrid/nngrid |
---|
| 80 | sigma_grid=sqrt(zz2grid/nngrid-zzpgrid*zzpgrid) |
---|
| 81 | zgrid = np.transpose(zgrid) |
---|
| 82 | sigma_grid=np.transpose(sigma_grid) |
---|
| 83 | zzpgrid = np.transpose(zzpgrid) |
---|
| 84 | ngrid = np.transpose(ngrid) |
---|
| 85 | nngrid = np.transpose(nngrid) |
---|
| 86 | return zgrid, zzpgrid, ngrid, nngrid, sigma_grid, xvec, yvec, zz, mm |
---|