Ejemplo n.º 1
0
def findvar(fname, name, *args):
    '''
  Locates variable inside grib file
  Inputs:
    name, part of variable short name (parameter abbv)
    args, any string inside variable string representation

  Example:
    findvar('file.grib2','temperatue','10 m')
  '''

    G = Grib2Decode(fname)
    out = []
    for g in G:
        if isPygrib:
            #if g['parameterName'].lower().find(name.lower())>=0:
            if g['shortName'].lower() == name:
                if all([str(g).lower().find(i.lower()) >= 0 for i in args]):
                    out += [g]
        else:
            #if g.parameter.lower().find(name.lower())>=0:
            if g.parameter_abbrev.lower() == name:
                if all([str(g).lower().find(i.lower()) >= 0 for i in args]):
                    out += [g]

    return out
Ejemplo n.º 2
0
def show_all(fname):
    '''
  Lists variables inside grib file
  '''

    G = Grib2Decode(fname)
    tmp = []
    for g in G:
        if isPygrib:
            abb = g['shortName']
            name = g['parameterName']
            level = ''
            vlevel = str(g['level'])
            units = g['parameterUnits']
        else:
            abb = g.parameter_abbrev
            name = g.parameter
            level = g.vertical_level_descriptor
            vlevel = g.vertical_level
            units = g.parameter_units


#    print '%10s %30s %40s %10s %20s' % (abb.ljust(10),name.ljust(30)[:30],level.ljust(40)[:40],vlevel.ljust(10)[:10],units.ljust(20)[:20])
        print '%-10s %-20s %-20s %-10s %-10s' % (abb, name[:20], level[:20],
                                                 vlevel[:10], units[:10])
Ejemplo n.º 3
0
def show(fname):
  # organize variables with same short name:
  G=Grib2Decode(fname)
  from collections import OrderedDict
  vars=OrderedDict()
  varsn={}
  for g in G:
    abb    = g['shortName']
    if abb in vars.keys():
      varsn[abb]+=1
    else:
      vars[abb]=g['parameterName'],str(g['level']),g['parameterUnits']
      varsn[abb]=1


  print '%-10s %-25s %5s   %-10s' % ('','name','n vel','units')
  for abb in vars.keys():
    name,vlevel,units=vars[abb]
    vlevel=str(varsn[abb])
    print '%-10s %-25s %5s   %-10s' % (abb,name[:25],vlevel[:10],units[:10])
Ejemplo n.º 4
0
from grib2 import Grib2Decode
import numpy as N
# open a GRIB2 file, create a Grib2 class instance.
grbs = Grib2Decode('../sampledata/eta.grb')
# print an inventory of the file.
for g in grbs:
    print g
# extract just geopotential height on isobaric surfaces.
zgribs = [
    g for g in grbs if g.parameter_abbrev == 'HGT'
    and g.vertical_level_descriptor == 'Isobaric Surface'
]
nlevs = len(zgribs)
nlons = zgribs[0].points_in_x_direction
nlats = zgribs[0].points_in_y_direction
data = N.zeros((nlevs, nlats, nlons), 'f')
print
# verify we got z on p.
for nlev, zg in enumerate(zgribs):
    if nlev == 0: lats, lons = zg.grid()  # get lats and lons of grid
    print nlev, zg
    data[nlev] = zg.data()
print
# plot min/max of data and grid.
print data.shape, data.min(), data.max()
print lats.shape, lats.min(), lats.max()
print lons.shape, lons.min(), lons.max()
Ejemplo n.º 5
0
from grib2 import Grib2Decode
from pylab import *
from mpl_toolkits.basemap import Basemap
from numpy import ma

grbs = Grib2Decode('../sampledata/ds.temp.grb')
g = grbs[0]
lats, lons = g.grid()
data = g.data()
print data.dtype
print data.shape, lons.shape, lats.shape
print data.min(), data.max()
llcrnrlon = lons[0, 0]
llcrnrlat = lats[0, 0]
urcrnrlon = lons[-1, -1]
urcrnrlat = lats[-1, -1]
rsphere = (grbs[0].earthRmajor, grbs[0].earthRminor)
lat_1 = grbs[0].proj4_lat_1
lat_2 = grbs[0].proj4_lat_2
lon_0 = grbs[0].proj4_lon_0
projection = grbs[0].proj4_proj
fig = figure()
ax = fig.add_axes([0.1, 0.1, 0.75, 0.75])
m = Basemap(llcrnrlon=llcrnrlon,
            llcrnrlat=llcrnrlat,
            urcrnrlon=urcrnrlon,
            urcrnrlat=urcrnrlat,
            rsphere=rsphere,
            lon_0=lon_0,
            lat_1=lat_1,
            lat_2=lat_2,
Ejemplo n.º 6
0
from pylab import *
from mpl_toolkits.basemap import Basemap
from numpy import ma
from grib2 import Grib2Decode, dump

grbs = Grib2Decode('../sampledata/tigge.grb')
for grb in grbs:
    fld = 0.01*grb.data() # convert to hPa
    lats,lons = grb.grid()
    print grb.originating_center, fld.shape, fld.min(), fld.max()
    fig=figure(figsize=(10,5))
    fig.add_axes([0.1,0.1,0.8,0.8])
    # setup robinson world map projection.
    m = Basemap(projection='robin',lon_0=180)
    x, y = m(lons,lats)
    levels = arange(475,1101,25)
    CS = m.contourf(x,y,fld,levels,cmap=cm.jet)
    colorbar(drawedges=True, shrink=0.8) # draw colorbar
    m.drawcoastlines()
    m.drawparallels(arange(-80,81,20),labels=[1,0,0,0])
    m.drawmeridians(arange(0,360,60),labels=[0,0,0,1])
    m.drawmapboundary()
    title(grb.parameter+': '+grb.center_wmo_code.upper()+', i.e. '+grb.originating_center,fontsize=12)
show()
Ejemplo n.º 7
0
from pylab import *
from mpl_toolkits.basemap import Basemap
from numpy import ma
from grib2 import Grib2Decode, dump

grbs = Grib2Decode('../sampledata/ecmwf_tigge.grb')
for g in grbs:
    if g.parameter_abbrev == 'SOILM':
        fld = g.data()
        lats, lons = g.grid()
        break
# stack grids side-by-side (in longitiudinal direction), so
# any range of longitudes (between -360 and 360) may be plotted on a world map.
lons = concatenate((lons - 360, lons), 1)
lats = concatenate((lats, lats), 1)
fld = ma.concatenate((fld, fld), 1)
# setup miller cylindrical map projection.
print lats[0, 0], lats[-1, -1]
m = Basemap(llcrnrlon=-180.,llcrnrlat=-90,urcrnrlon=180.,urcrnrlat=90.,\
            resolution='l',area_thresh=10000.,projection='mill')
x, y = m(lons, lats)
CS = m.contourf(x, y, fld, 15, cmap=cm.jet)
#im = m.pcolor(x,y,fld,cmap=cm.jet,shading='flat')
ax = gca()
pos = ax.get_position()
l, b, w, h = pos.bounds
cax = axes([l + w + 0.025, b, 0.025, h])  # setup colorbar axes
colorbar(drawedges=True, cax=cax, format='%g')  # draw colorbar
axes(ax)  # make the original axes current again
m.drawcoastlines()
# draw parallels
Ejemplo n.º 8
0
from grib2 import Grib2Decode
from pylab import *
from mpl_toolkits.basemap import Basemap
#grbs = Grib2Decode('../sampledata/gfs.grb')
grbs = Grib2Decode('test.grb')
for g in grbs:
    #if g.parameter_abbrev == 'PRES' and g.vertical_level_descriptor == 'Ground or Water Surface':
    if g.parameter_abbrev == 'SOILW' and g.vertical_level == "0-0.1 m":
        print g.vertical_level
        data = g.data()
        lats,lons = g.grid()
        break
print data.min(), data.max()
print lats[:,0]
print lons[0,:]
llcrnrlon = lons[0,0]
llcrnrlat = lats[0,0]
urcrnrlon = lons[-1,-1]
urcrnrlat = lats[-1,-1]
print llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat
m = Basemap(llcrnrlon=llcrnrlon,llcrnrlat=llcrnrlat,
            urcrnrlon=urcrnrlon,urcrnrlat=urcrnrlat,
            resolution='c',projection='cyl')
m.scatter(lons.flat,lats.flat,1,marker='o',color='k',zorder=10)
m.drawcoastlines()
x,y = m(lons,lats)
m.contourf(x,y,data,15)
#m.fillcontinents()
title('Global Lat/Lon Grid')
show()
Ejemplo n.º 9
0
from grib2 import Grib2Decode
from pylab import *
from mpl_toolkits.basemap import Basemap
grbs = Grib2Decode('../sampledata/flux.grb')
lats, lons = grbs[1].grid()
data = grbs[1].data()
print lats[:, 0]
print lons[0, :]
llcrnrlon = lons[0, 0]
llcrnrlat = lats[0, 0]
urcrnrlon = lons[-1, -1]
urcrnrlat = lats[-1, -1]
print llcrnrlon, llcrnrlat, urcrnrlon, urcrnrlat
m = Basemap(llcrnrlon=llcrnrlon,
            llcrnrlat=llcrnrlat,
            urcrnrlon=urcrnrlon,
            urcrnrlat=urcrnrlat,
            resolution='c',
            projection='cyl')
m.scatter(lons.flat, lats.flat, 1, marker='o', color='k', zorder=10)
x, y = m(lons, lats)
m.drawcoastlines()
m.contourf(x, y, data, 15)
#m.fillcontinents()
title('Global Gaussian Grid')
show()
Ejemplo n.º 10
0
from grib2 import Grib2Decode, Grib2Encode
import numpy as N
# open a GRIB2 file, create a Grib2 class instance.
filein = '../sampledata/gfs.grb'
print 'input grib file:', filein
grbs = Grib2Decode(filein)
# open a file for output.
fileout = 'test.grb'
print 'output grib file:', fileout
f = open(fileout, 'wb')
# test encoding sxn0, sxn1.
print 'message number,field number,bitmap flag,min,max:'
print '------------------------------------------------'
for nmsg, grb in enumerate(grbs):
    grbo = Grib2Encode(grb.discipline_code, grb.identification_section)
    # add grid definition template
    if hasattr(grb, 'grid_definition_list'):
        grbo.addgrid(grb.grid_definition_info,
                     grb.grid_definition_template,
                     deflist=grb.grid_definition_list)
    else:
        grbo.addgrid(grb.grid_definition_info, grb.grid_definition_template)
    field = grb.data()
    bitmapflag = grb.bitmap_indicator_flag
    if bitmapflag == 0:
        bitmap = grb._bitmap
    else:
        bitmap = None
    if bitmap is not None:
        fieldcompress = N.compress(N.ravel(bitmap), N.ravel(field))
        fieldmin = fieldcompress.min()
Ejemplo n.º 11
0
from grib2 import Grib2Decode
from pylab import *
from mpl_toolkits.basemap import Basemap
grbs = Grib2Decode('../sampledata/ngm.grb')
for g in grbs:
    if g.parameter_abbrev == 'PRES' and g.vertical_level_descriptor == 'Ground or Water Surface':
        data = g.data()
        lats, lons = g.grid()
        break
print lats.min(), lats.max()
print lons.min(), lons.max()
print lats[0, 0], lons[0, 0]
print lats[-1, -1], lons[-1, -1]
llcrnrlon = lons[0, 0]
llcrnrlat = lats[0, 0]
urcrnrlon = lons[-1, -1]
urcrnrlat = lats[-1, -1]
rsphere = (grbs[0].earthRmajor, grbs[0].earthRminor)
lat_ts = grbs[0].proj4_lat_ts
lon_0 = grbs[0].proj4_lon_0
lat_0 = grbs[0].proj4_lat_0
projection = grbs[0].proj4_proj
m = Basemap(llcrnrlon=llcrnrlon,
            llcrnrlat=llcrnrlat,
            urcrnrlon=urcrnrlon,
            urcrnrlat=urcrnrlat,
            rsphere=rsphere,
            lon_0=lon_0,
            lat_ts=lat_ts,
            lat_0=lat_0,
            resolution='l',
Ejemplo n.º 12
0
from grib2 import Grib2Decode
from pylab import *
from numpy import ma
from mpl_toolkits.basemap import Basemap, cm

grbs = Grib2Decode('../sampledata/eumetsat_precip.grb')
g = grbs[0]
fld = g.data()
lats, lons = g.grid()

m = Basemap(lon_0=g.proj4_lon_0,satellite_height=g.proj4_h,\
            rsphere = (g.earthRmajor,g.earthRminor),\
            resolution='l',area_thresh=10000.,projection='geos')
# plot every 50th point.
x, y = m(lons, lats)
m.scatter(x[::50, ::50].flat,
          y[::50, ::50].flat,
          1,
          marker='o',
          color='k',
          zorder=10)
m.drawcoastlines()
m.drawcountries()
#m.fillcontinents(color='coral')
m.drawcoastlines()
# contour data.
m.contourf(x, y, fld, 20)
# pcolor image (slower)
#m.pcolor(x,y,fld)
m.drawparallels(arange(-80, 81, 20))
m.drawmeridians(arange(-90, 90, 20))