def missing_interp(lon, lat, arr): grid0 = create_grid(lon[0, :], lat[:, 0]) varri = MV2.asarray(arr) varri = set_grid(varri, grid0) tempf = fill2d(varri, method='carg') lon = np.ma.masked_where(tempf == tempf.fill_value, lon) lat = np.ma.masked_where(tempf == tempf.fill_value, lat) arri = griddata(lon.compressed(), lat.compressed(), tempf.compressed(), (lon[0, :], lat[:, 0]), method='nat', ext=True, sub=10) return arri
"""Test function :func:`~vacumm.misc.grid.resol`""" from vcmq import create_lon, create_lat, create_grid, rotate_grid, assert_allclose from vacumm.misc.grid.misc import resol2 as resol lon1d = create_lon((0, 10., 1.)) lat1d = create_lat((43, 50, 1.)) rgrid = create_grid(lon1d, lat1d) cgrid = rotate_grid(rgrid, 45) lon2d = cgrid.getLongitude() lat2d = cgrid.getLatitude() assert_allclose(resol(lon1d, cache=False), 1.) assert_allclose(resol(lon1d, meters=True, cache=False), 78626.2617245) assert_allclose(resol(lon1d, lat=0, cache=False), 1.0) assert_allclose(resol(lon1d, lat=0, meters=True, cache=False), 111195.031364) assert_allclose(resol(rgrid, cache=False), (1.0, 1.0)) assert_allclose(resol(rgrid, meters=True, cache=False), (77242.051980165023, 111195.03136431401)) assert_allclose(resol((lon1d, lat1d), cache=False), (1.0, 1.0)) assert_allclose(resol((lon1d, lat1d), meters=True, cache=False), (77242.051980165023, 111195.03136431401)) assert_allclose(resol(cgrid, cache=False), (1.0, 1.0)) assert_allclose(resol(cgrid, meters=True, cache=False), (94804.663264739473, 94804.663264739473)) N.random.seed(0) x = N.random.random(10) y = N.random.random(10)
from vcmq import N, MV2, create_lon, create_lat, create_grid, isgrid, isrect, islon, set_grid, get_grid, get_axis, varsel, resol, curv2rect, get_xy, meshgrid, meshcells, create_dep, isregular, P, rotate_grid, shiftgrid, extendgrid, create_axes2d, isdepthup, coord2slice, monotonic, xshift, depth2dz, get_closest # Créer # - axes lon = create_lon((2., 11, 2.)) # -> SPECIFIEZ LE LONG_NAME lat = create_lat(N.arange(43, 50.)) dep = create_dep((0., 10)) # -> AFFICHEZ LES INFOS xx, yy = N.meshgrid(N.arange(5.), N.arange(4.)) lon2d, lat2d = create_axes2d(xx, yy) ii = lon2d.getAxis(1) # - grille grid = create_grid(lon, lat) # -> ESSAYEZ AVEC LON EXPLICITE gridc = create_grid(lon2d, lat2d) # Verifier print islon(lon) print isgrid(grid) # -> TEST PARAM CURV=... print isrect(gridc) # -> CREEZ GRILLE NON RECT ET RETESTER print isdepthup(dep) # -> TESTEZ EN CHANGEANT ATTRIBUT POSITIVE ET VALEURS print isregular(lon) # Affecter var = MV2.ones(grid.shape) set_grid(var, grid) varc = MV2.ones(gridc.shape)
# Lecture f = cdms2.open(data_sample("mfs.nc")) select = dict(lat=(42.5, 43.5), lon=(3, 4)) ssti = f("votemper", level=slice(0, 1), squeeze=1, **select) f.close() gridi = ssti.getGrid() dxi, dyi = resol(gridi) # Nouvelle grille factor = 0.634 # -> CHANGEZ LE FACTEUR dxo = dxi * factor dyo = dyi * factor grido = create_grid((3.13, 3.8, dxo), (42.62, 43.4, dyo)) # Quelle méthode ? method = regrid_method(gridi, grido) print method # Regrillage ssto = regrid2d(ssti, grido, method=method) # -> CHANGEZ LA METHODE # -> UTILISEZ USECDR=TRUE # Regrilleur de CDAT regridder = CDATRegridder(gridi, grido, method="cellave") # -> CHANGEZ LA METHODE ssto2 = regridder.regrid(ssti)
nx, ny = 6, 4 vari = MV2.array(N.arange(nx*ny*1.).reshape(ny, nx), fill_value=1e20) xi = vari.getAxis(-1) xi[:] *= 2 yi = vari.getAxis(-2) yi[:] *= 3 xi.designateLongitude() yi.designateLatitude() xi.setBounds(bounds1d(xi)) yi.setBounds(bounds1d(yi)) vari[1:2, 2:4] = MV2.masked gridi = vari.getGrid() # Output grido = create_grid(xi[:]+2*2.5, yi[:]+3*1.5) xo = grido.getLongitude() yo = grido.getLatitude() xo.setBounds(bounds1d(xo)) yo.setBounds(bounds1d(yo)) xxob, yyob = meshbounds(xo, yo) # Regridding varo, wo = vari.regrid(grido, tool='regrid2', returnTuple=1) # Plot kw = dict(fill='pcolor', contour=False, xhide=True, yhide=True, xticks=[], yticks=[], cmap='jet', colorbar=False, show=False) P.figure(figsize=(6, 3)) p = plot2d(vari, subplot=131, title='Original', **kw)
"""Test :meth:`vacumm.data.misc.arakawa.CGrid.interp`""" from vcmq import MV2, N, create_grid, create_dep, set_grid, map2, \ code_file_name, CGrid, minmax, curve2, add_grid # Initial variable grid = create_grid(N.arange(-7, 0.), N.arange(43, 50.)) dep = create_dep([-5000, -3000, -2000, -1000, -500, -300, -200, -100.]) var = {} var['t'] = MV2.reshape( N.arange(grid.size() * len(dep)) * 1., (len(dep), ) + grid.shape) set_grid(var['t'], grid) var['t'].setAxis(0, dep) # Arakawa manager ag = CGrid() # Interpolations for p in 'u', 'v', 'f', 'w': var[p] = ag.interp(var['t'], 't', p, mode='extrap') # Surface plots vmin, vmax = minmax(*[var[p][-1] for p in ['u', 'v', 'f']]) kw = dict(show=False, res=None, vmin=vmin, vmax=vmax, colorbar=False, grid=False, cmap='jet') m = map2(var['t'][-1],
figfiles.append(savefig) if show: P.show() else: P.close() # %% 1D axis lon1d = create_lon((0, 10)) assert coord2slice(lon1d, lon=(2.5, 4., 'cc')) == slice(3, 5, 1) assert coord2slice(lon1d, lon=(2.5, 4., 'cc')) == slice(3, 5, 1) assert coord2slice(lon1d, lon=(2.5, 4., 'ccb')) == slice(2, 5, 1) assert coord2slice(lon1d, lon=slice(3, 6)) == slice(3, 6, None) assert coord2slice(lon1d, lat=(6, 8)) == slice(0, 10, 1) assert coord2slice(lon1d, lon=(60, 70)) == None # %% Rect grid grid = create_grid((0, 10.), (20, 30.)) assert (coord2slice(grid, lon=(0., 3.5), lat=slice(3, 5)) == (slice(0, 4, 1), slice(3, 5, None), None)) assert (coord2slice(grid, lat=(21, 21, 'ccb')) == (slice(0, 10, 1), slice(1, 2, 1), None)) # %% 2D axis lon2d = N.empty((10, 10)) for i in xrange(10): lon2d[i] = lon1d[:] + i lat2d = N.resize((N.arange(10) + 20), (10, 10)).T lon2d, lat2d = create_axes2d(lon2d, lat2d) kw = dict(show=False) plot(lon2d, lat2d, lon2d, 'lon2d', figfiles, figfile, lon=(2, 4), **kw)
bathy.set_shoreline('f') # -> essayer 'i' bathy_masked2 = bathy.masked_bathy() # -> nb de points masques ? # Plot bathy.plot(title='Direct') # Bathy standard from vacumm.bathy.bathy import NcGriddedBathy, bathy_list print bathy_list().keys() sbathy = NcGriddedBathy(lon=(-5.2, -3), lat=(48., 48.9), name='etopo2') sbathy.plot(title='Bathy par defaut') # Fusion de bathy mgrid = create_grid((-6.1, -3, 0.01), (47.8, 48.9, .006)) # -> changer la grille from vacumm.bathy.bathy import GriddedBathyMerger merger = GriddedBathyMerger(mgrid) merger += sbathy merger += bathy merger.plot(title='Fusion / plot direct') # Plot via plot_bathy mbathy = merger.merge() plot_bathy(mbathy, title='Fusion / plot via plot_bathy') # Regrillage rgrid = create_grid((-6.1, -3, 0.05), (47.8, 48.9, .02)) Mbathy = GriddedBathy(mbathy) rbathy = Mbathy.regrid(rgrid)
"""Test :func:`~vacumm.misc.grid.misc.GriddedSelector`""" # %% Imports from vcmq import N, MV2, create_grid, rotate_grid, GriddedSelector # %% Rectangular grid rgrid = create_grid((-14., -4, .25), (43., 52, .25), 'rect') var = MV2.reshape(MV2.arange(2 * rgrid.shape[0] * rgrid.shape[1]), (2, ) + rgrid.shape) gs = GriddedSelector(rgrid, lon=(-9, -6, 'co'), lat=(44.1, 48.2)) rvar = gs(var) assert rvar.shape == (2, 16, 12) assert rvar.getLongitude()[-1] == -6.25 assert rvar.getLatitude()[-1] == 48 # %% Curvilinear cgrid = rotate_grid(rgrid, 30.) gs = GriddedSelector(cgrid, lon=(-9, -6, 'co'), lat=(44.1, 48.2)) cvar = gs(var) assert cvar.shape == (2, 20, 18) assert cvar.getLongitude().asma()[~gs.mask].min() == -9 assert cvar.getLatitude().asma()[~gs.mask].max() <= 48.2 # %% Unstructured N.random.seed(0) ugrid = create_grid(N.random.uniform(-14, -4, 100), N.random.uniform(43, 52, 100), 'unstruct') var = MV2.resize(ugrid.getLatitude().asma(), (2, ) + ugrid.shape) gs = GriddedSelector(ugrid, lon=(-9, -6, 'co'), lat=(44.1, 48.2)) uvar = gs(var) assert uvar.getGrid().shape == (34, )
from vcmq import N, P, polygons, create_polygon, plot_polygon, create_grid from _geoslib import Polygon # Data xx = N.array([0., 5., 4., 1.]) yy = N.array([0., 0., 2., 2.]) clip = [-3, -3, 0, 0] xaxis = yaxis = N.linspace(-2., 2., 20.) def plot_polygons(polys, **kwargs): for p in polys: plot_polygon(p, **kwargs) ## Single known argument #pp0 = polygons(Polygon(N.array([xx, yy]).T)) # ## Classic data #pp0 = polygons([N.array([xx, yy]), N.array([xx, yy]).T+6.]) # ## Classic with projection #proj = lambda x, y: (x*1.5, y*1.5) #pp1 = polygons([N.array([xx, yy])]) # ## Classic with clipping #pp2 = polygons([-N.array([xx, yy])], clip=clip) # From grid pp3 = polygons([create_grid(xaxis, yaxis)])
# Plot kwp = dict(size=40, map_res=None, masked_alpha=0.1) xyz1.plot(mode="both", **kwp) # -> essayer autre mode # Fichier fbathy = __file__[:-2] + "xyz" xyz1.save(fbathy) xyz3 = XYZBathy(fbathy) xyz3.plot(title="XYZ3", **kwp) # Fusions xyz = xyz1 + xyz2 merger = XYZBathyMerger() merger += xyz1 # -> supprimer/ajouter merger.append(xyz2) for i, b in enumerate(merger): b.long_name = "Niveau : %i" % i # Pour les legendes b.set_transp(False) # Opacite merger.plot(mode="cluster", **kwp) # -> essayer autre mode xyz = merger.get_xyz(long_name="Merged") xyz.plot(**kwp) # Regrillage grid_auto = xyz.grid grid_manual = create_grid((-5.3, -4.91, 0.01), (48.1, 48.41, 0.01)) gridded = xyz.togrid(grid_manual) map2(gridded, res=None)
"""Test :func:`~vacumm.misc.grid.misc.varsel`""" # %% Imports from vcmq import N, MV2, create_grid, varsel, set_grid # %% With specified grid rgrid = create_grid((-14., -4, .25), (43., 52, .25), 'rect') var_ = MV2.reshape(MV2.arange(2 * rgrid.shape[0] * rgrid.shape[1]), (2, ) + rgrid.shape) var = var_.clone() cache = {} rvar0 = varsel(var, grid=rgrid, lon=(-9, -6, 'co'), lat=(44.1, 48.2), cache=cache) assert rvar0.shape == (2, 16, 12) assert rvar0.getLongitude()[-1] == -6.25 assert rvar0.getLatitude()[-1] == 48 set_grid(var, rgrid) # %% Without grid specification rvar1 = varsel(var, lon=(-9, -6, 'co'), lat=(44.1, 48.2)) N.testing.assert_allclose(rvar0.asma(), rvar1.asma()) # %% With cached gridded selector assert 'gridded_selector' in cache rvar2 = varsel(var_.clone(), lon=(-9, -6, 'co'), lat=(44.1, 48.2), cache=cache) N.testing.assert_allclose(rvar0.asma(), rvar2.asma())
"""Test :func:`~vacumm.misc.grid.misc.isrect`""" # %% Imports from vcmq import isrect, create_grid, rotate_grid # %% Trully rectangular rgrid = create_grid((0., 25, .25), (0., 10, .25), 'rect') assert isrect(rgrid) # %% Rectangular 2D crgrid = create_grid((0., 25, .25), (0., 10, .25), 'curv') assert isrect(crgrid) # %% Curvilinear cgrid = rotate_grid(crgrid, 30.) assert not isrect(cgrid)
"""Test :func:`~vacumm.misc.grid.misc.rotate_grid`""" # %% Imports from vcmq import N, create_grid, rotate_grid # %% Create grid rgrid = create_grid((0., 25, 1.), (0., 10, 1.), 'rect') cgrid = rotate_grid(rgrid, 30.) # %% check assert cgrid.getLongitude().ptp(axis=0).mean() == 4.5
"""Test the :func:`~vacumm.misc.grid.masking.polygons` function""" from vcmq import N, P, polygons, create_polygon, plot_polygon, create_grid from _geoslib import Polygon # Data xx = N.array([0., 5., 4., 1.]) yy = N.array([0., 0., 2., 2.]) clip = [-3, -3, 0, 0] xaxis = yaxis = N.linspace(-2., 2., 20.) def plot_polygons(polys, **kwargs): for p in polys: plot_polygon(p, **kwargs) ## Single known argument #pp0 = polygons(Polygon(N.array([xx, yy]).T)) # ## Classic data #pp0 = polygons([N.array([xx, yy]), N.array([xx, yy]).T+6.]) # ## Classic with projection #proj = lambda x, y: (x*1.5, y*1.5) #pp1 = polygons([N.array([xx, yy])]) # ## Classic with clipping #pp2 = polygons([-N.array([xx, yy])], clip=clip) # From grid pp3 = polygons([create_grid(xaxis, yaxis)])
"""Test :meth:`vacumm.data.misc.arakawa.CGrid.interp`""" from vcmq import MV2, N, create_grid, create_dep, set_grid, map2, \ code_file_name, CGrid, minmax, curve2, add_grid # Initial variable grid = create_grid(N.arange(-7, 0.), N.arange(43, 50.)) dep = create_dep([-5000, -3000, -2000, -1000, -500, -300, -200, -100.]) var = {} var['t'] = MV2.reshape(N.arange(grid.size()*len(dep))*1., (len(dep), )+grid.shape) set_grid(var['t'], grid) var['t'].setAxis(0, dep) # Arakawa manager ag = CGrid() # Interpolations for p in 'u', 'v', 'f', 'w': var[p] = ag.interp(var['t'], 't', p, mode='extrap') # Surface plots vmin, vmax = minmax(*[var[p][-1] for p in ['u', 'v', 'f']]) kw = dict(show=False, res=None, vmin=vmin, vmax=vmax, colorbar=False, grid=False, cmap='jet') m = map2(var['t'][-1], fill='pcolor', title='Interpolations on an Arakawa C grid: T->U/V/F', **kw) add_grid(var['t'], linestyle='-') kw.update(fill='scatter', contour=False, fill_s=60) markers = dict(u='>', v='^', f='D', t='o') for p in 't', 'u', 'v', 'f': m = map2(var[p][-1], fill_marker=markers[p], shadow=True, zorder=100, **kw)
"""Test the :func:`~vacumm.misc.grid.regridding.regrid2d` function""" from vcmq import P, N, MV2, code_file_name, os, add_grid, rotate_grid, set_grid, \ create_grid, rc, rcdefaults, plot2d from vacumm.misc.grid.regridding import regrid2d # Input grid and data nxi = 20 nyi = 15 # - rect xi = N.arange(nxi*1.) yi = N.arange(nyi*1.) gridri = create_grid(xi, yi) xxri, yyri = N.meshgrid(xi, yi) zzri = N.ma.array(yyri) zzri[int(nyi*0.3):int(nyi*0.6), int(nxi*0.3):int(nxi*0.6)] = N.ma.masked varri = MV2.asarray(zzri) set_grid(varri, gridri) # - curv gridci = rotate_grid(gridri, 30) xxci = gridci.getLongitude().getValue() yyci = gridci.getLatitude().getValue() zzci = N.ma.array(yyci) zzci[int(nyi*0.3):int(nyi*0.6), int(nxi*0.3):int(nxi*0.6)] = N.ma.masked varci = MV2.asarray(zzci) set_grid(varci, gridci) # Output positions nxo = 25 nyo = 18 # - rect
# Input nx, ny = 6, 4 vari = MV2.array(N.arange(nx * ny * 1.).reshape(ny, nx), fill_value=1e20) xi = vari.getAxis(-1) xi[:] *= 2 yi = vari.getAxis(-2) yi[:] *= 3 xi.designateLongitude() yi.designateLatitude() xi.setBounds(bounds1d(xi)) yi.setBounds(bounds1d(yi)) vari[1:2, 2:4] = MV2.masked gridi = vari.getGrid() # Output grido = create_grid(xi[:] + 2 * 2.5, yi[:] + 3 * 1.5) xo = grido.getLongitude() yo = grido.getLatitude() xo.setBounds(bounds1d(xo)) yo.setBounds(bounds1d(yo)) xxob, yyob = meshbounds(xo, yo) # Regridding varo, wo = vari.regrid(grido, tool='regrid2', returnTuple=1) # Plot kw = dict(fill='pcolor', contour=False, xhide=True, yhide=True, xticks=[],