示例#1
0
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
示例#2
0
"""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)
示例#3
0
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)
示例#4
0

# 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)
示例#6
0
"""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)
示例#8
0
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)
示例#9
0
"""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, )
示例#10
0
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)])
示例#11
0
# 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)
示例#12
0
"""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())
示例#13
0
"""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)
示例#14
0
"""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


示例#15
0
"""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)])

示例#16
0
"""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)
示例#17
0
"""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
示例#18
0
# 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=[],