Ejemplo n.º 1
0
    def __init__(self, var, maxvalue=0., fillvalue=0., shoreline=None):
        if var.getLongitude() is None:
            var.getAxis(1).designateLongitude()
        if var.getLatitude() is None:
            var.getAxis(1).designateLatitude()
        if var.getGrid() is None:
            var.setGrid(create_grid(var.getLongitude(), var.getLatitude()))
        self._bathy = var
        self._xres, self._yres = resol(self.get_grid())
        _GriddedBathyMasked_.__init__(self, shoreline=shoreline, fillvalue=fillvalue, maxvalue=maxvalue)
        self._lon2d, self._lat2d = meshgrid(self.get_lon(), self.get_lat())
#        self._lon2dp,self._lat2dp = meshbounds(self.get_lon(), self.get_lat())
        self._xxs = self._yys = None
    figfiles.append(savefig)
    if show: P.show()
    else: P.close()
    
result = []
    
# 1D axis
lon1d = create_lon((0, 10))
result.append(('AssertEqual', (coord2slice(lon1d, lon=(2.5, 4., 'cc')), slice(3, 5, 1))))
result.append(('AssertEqual', (coord2slice(lon1d, lon=(2.5, 4., 'ccb')), slice(2, 5, 1))))
result.append(('AssertEqual', (coord2slice(lon1d, lon=slice(3, 6)), slice(3, 6, None))))
result.append(('AssertEqual', (coord2slice(lon1d, lat=(6, 8)), slice(0, 10, 1))))
result.append(('AssertEqual', (coord2slice(lon1d, lon=(60, 70)), None)))

# Rect grid
grid = create_grid((0, 10.), (20, 30.))
result.append(('AssertEqual', (coord2slice(grid, lon=(0., 3.5), lat=slice(3, 5)), 
    (slice(0, 4, 1), slice(3, 5, None), None))))
result.append(('AssertEqual', (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)
plot(lon2d, lat2d, lon2d, 'lon2d', figfiles, figfile, lon=(2, 4), lat=slice(0, 2), **kw)
plot(lon2d, lat2d, lat2d,  'lat2d', figfiles, figfile, lat=(22, 26.6,'ccb'), **kw)
Ejemplo n.º 3
0
# Création de l'objet de bathy grillee
from vacumm.bathy.bathy import GriddedBathy
bathy = GriddedBathy(var)

# On définit le traît de côte pour le masquage
bathy.set_shoreline('f')

# On récupère une version masquée
bathy_orig = bathy.bathy(mask=False)
bathy_masked = bathy.bathy(mask=True)


# Definition d'une grille zoom
from vacumm.misc.grid import create_grid
new_grid = create_grid((-5.5, -4.6, 0.009), (48.25, 48.6, .006))

# On interpole la bathy masquée sur une autre grille
interp_bathy_masked = bathy.regrid(new_grid)

# On interpole et masque la bathy originale sur une autre grille
# - interpolation
interp_bathy_orig = bathy.regrid(new_grid, mask=False)
# - masquage
interp_bathy_orig_masked = GriddedBathy(interp_bathy_orig, shoreline='f').bathy()

# Plots
from matplotlib import rc ; rc('font', size=9);rc('axes', titlesize=9)
kwplot = dict(resolution=None, show=False, colorbar=False, contour=False, 
    top=.97, hspace=.25, bottom=.03, right=.98, 
    autoresize=False, vmax=bathy_orig.max(), vmin=bathy_orig.min())
Ejemplo n.º 4
0
    def read(self):
        """ Lecture des fichiers NetCDF de NAR SST """
        import cdms2, sys, os, glob
        import numpy, MV2
        import cdtime
        from vacumm.misc.axes import create_lon
        from vacumm.misc.grid import create_grid, set_grid
        from vacumm.misc.atime import create_time
        from vacumm.misc.phys.units import kel2degc

        # -- Dans le cas d'un NAR SST on lit la grille lon lat dans le fichier grid
        # -- Lecture de la grille
        znar = self.ZONE_NAR
        gridfile = "grid_%(znar)s.nc" % vars()
        f = cdms2.open(gridfile)
        la = f('latitude')
        lo = f('longitude')
        f.close()

        # -- Creation des axes longitude et latitude
        lat_axis = create_lon(la, id='latitude')
        lon_axis = create_lon(lo, id='longitude')
        # -- Creation de la grille
        grid = create_grid(lon_axis, lat_axis)

        # -- Creation d'un objet cdms nomme self.data et d'un tableau cumt pour les dates extraites des noms de fichiers
        self.data = ()  #Initialise un tuple
        # =============== ATTENTION ====================
        # Initialiser self.data pour ne pas dupliquer en memoire !!!!!!!!!
        # ============================================

        #cumt = [] # Initialise un array

        # -- Boucle sur les fichiers presents dans le WORKDIR

        #url_file_def="%(YYYY)s%(MM)s%(DD)s%(HH)s%(ext)s"%vars()

        #self.ctdeb

        # -- Ancienne methode
        #files = glob.glob(os.path.join(self.WORKDIR, '2*.nc'))
        #files.sort()
        # --

        # -- Methode amelioree
        # Cree une liste
        files = []
        # Cree la liste des fichiers correspondants a la periode consideree
        ctest = self.ctdeb
        while ctest <= self.ctfin:
            flnme_only = '%(#)04d%(##)02d%(###)02d*.nc' % {
                '#': ctest.year,
                '##': ctest.month,
                '###': ctest.day
            }
            files.extend(glob.glob(os.path.join(self.WORKDIR, flnme_only)))
            ctest = ctest.add(1, cdtime.Days)
        # --

        for filename in files:
            # -- Lecture du fichier filename
            f = cdms2.open(filename)
            temp = f('sea_surface_temperature')
            # =============== ATTENTION ==================================
            # Verifier que temp utilise tout le temps le meme espace memoire ... voir du cote de cdms
            # ==========================================================
            f.close()

            # -- Extraction de la date et heure du nom du fichier
            #ty = numpy.int(filename[-15:-11])
            #tm = numpy.int(filename[-11:-9])
            #tj = numpy.int(filename[-9:-7])
            #th = numpy.int(filename[-7:-5])
            #tt = cdtime.comptime(ty,tm,tj,th)
            #cumt.append(tt)

            # -- Transfert de temp dans l'objet cdat self.data (concatenation)
            # =============== ATTENTION ====================
            # Faire une variable intermediaire qui sera au prealable allouee en memoire pour eviter
            # trop de copies en memoire !!!!!!!!!!!!!!!!
            # ============================================
            self.data += temp,

        # -- Creation de l'axe temporel
        #taxis = create_time(cumt)

        # -- MV2.concatenate pour concatener les informations dans self.data (entre autre construit l'axe temporel)
        self.data = MV2.concatenate(self.data)

        # -- Attribution de la grille a l'objet self.data
        set_grid(self.data, grid, axes=True)

        # -- Informations sur le dataset
        self.data.name = "NAR_SST"
        self.data.units = "degree_Celsius"
        self.data.standard_name = "satellite_sea_surface_temperature"
        self.data.long_name = "Satellite Sea Surface Temperature - NAR"

        # -- Change unit
        self.data = kel2degc(self.data)
Ejemplo n.º 5
0
print 'Resolution in meters:', xyz.resol()

# %% Automatic grid
grid_auto = xyz.grid
print 'Resolution of auto grid:', resol(grid_auto)

# %% Interpolation on auto grid
print 'Interpolation:'
gridded_auto = xyz.togrid()
#  equivalent a :
#  >>> gridded_auto = xyz.togrid(xyz.grid)

# %% Interpolation on manual grid
print 'Interpolation and masking, then extraction'
# - defintion
grid_manual = create_grid((-5.3, -4.91, .01), (48.1, 48.41, .01))
# - interpolation
gridded_manual = xyz.togrid(grid_manual, mask='h')
# - extraction with margin
xyz_up = xyz.clip(zone=(None, None, None, 48.3), margin=2)
# - si None, valeurs limites internes (i.e xyz.xmin(), ...)
# - margin : marge relative en unite de resolution
#   -> ici : ymax = 48.3 + xyz.resol()[1]*2

# %% Save
print 'Save'
prefix = __file__[:-2] + 'up'
xyz_up.save(prefix + '.xyz')  # ascii
xyz_up.save(prefix + '.nc')  # netcdf/grd

# %% Plots
# -*- coding: utf8 -*-
from vacumm.misc.grid.regridding import regrid2d
import MV2
from vacumm.misc.grid import create_grid
from vacumm.misc.plot import map2 as map
import pylab as P
gmax=40
ggi = create_grid((0., gmax, 1.), (0., gmax, 1.))
ggo = create_grid((0.01, gmax, .5), (0.01, gmax, .5))

vari = MV2.reshape(MV2.arange(ggi.size(), dtype='f'), ggi.shape)
vari.setGrid(ggi)
varo = regrid2d(vari, ggo, 'bilinear')
map(varo, clabel_glow=True, resolution=None, show=False, savefigs=__file__)
Ejemplo n.º 7
0
 def get_grid(self):
     if self._bathy.getGrid() is None:
         self._bathy.setGrid(create_grid(self.get_lon(), self.get_lat()))
     return self._bathy.getGrid()
Ejemplo n.º 8
0
here = os.path.dirname(__file__)
for rpath in [os.path.join(here, '../lib/python')]:
    path = os.path.abspath(rpath)
    sys.path.append(path)
try:
    from vacumm.misc.grid import resol, get_xy, create_grid
    from vacumm.misc import lonlab, latlab, scalebox
    from vacumm.misc.plot import map2, add_grid
    import cdms2
except:
    sys.exit('Error when loading vacumm')

# Dimension
gg = (lon, lat)
lonn, latn = get_xy(gg, num=True)
grid = create_grid(*gg)
print 'Dimensions           : nx=%i ny=%i'%grid.shape[::-1]
print 'Axes                 : lon="%s" lat="%s" (%iD)'%(lon.id, lat.id, lonn.ndim)


# Extension
print 'Zonal extent         : %s -> %s  [%s -> %s]'%(
    lonn.min(), lonn.max(), lonlab(lonn.min(), decimal=False), lonlab(lonn.max(), decimal=False))
print 'Meridional extent    : %s -> %s  [%s -> %s]'%(
    latn.min(), latn.max(), latlab(latn.min(), decimal=False), latlab(latn.max(), decimal=False))

# Resolution
lonres, latres = resol(gg, proj=False)
xres, yres = resol(gg, proj=True)
xres /= 1000.
yres /= 1000.
Ejemplo n.º 9
0
# -*- coding: utf8 -*-
from vacumm.misc.grid.regridding import regrid2d
import MV2
from vacumm.misc.grid import create_grid
from vacumm.misc.plot import map2 as map
import pylab as P
gmax=40
ggi = create_grid((0., gmax, 1.), (0., gmax, 1.))
ggo = create_grid((0.01, gmax, .5), (0.01, gmax, .5))

vari = MV2.reshape(MV2.arange(ggi.size(), dtype='f'), ggi.shape)
vari.setGrid(ggi)
varo = regrid2d(vari, ggo, 'bilinear')
map(varo, clabel_glow=True, resolution=None, show=False, savefigs=__file__,
    close=True)
Ejemplo n.º 10
0
    def read(self, verbose=False, cfg=None):
        """ Lecture des fichiers NetCDF de NAR SST """
        import cdms2,sys,os, glob
        import numpy,MV2
        import cdtime
        from vacumm.misc.axes import create_lon, set_order
        from vacumm.misc.grid import create_grid,  set_grid
        from vacumm.misc.atime import create_time
        from vacumm.misc.phys.units import kel2degc
        import gc
      
        # Get the configuration file information 
        #cfg = self.get_config()
        #print cfg
              
        # -- Creation d'un objet cdms nomme self.data et d'un tableau cumt pour les dates extraites des noms de fichiers
        self.data = () #Initialise un tuple
        # =============== ATTENTION ====================
        # Initialiser self.data pour ne pas dupliquer en memoire !!!!!!!!!
        # ============================================

        # -- Methode amelioree
        # Cree une liste
        files = []
        # Cree la liste des fichiers correspondants a la periode consideree
        if cfg is None:
	  config = ConfigParser.RawConfigParser()
	  config.read(os.path.join(self.SCRIPT_DIR,'config.cfg'))
	  hr_satellites = config.get('Nar SST', 'hr_satellites')
	else:
	  hr_satellites = cfg['Nar SST']['hr_satellites']
	  
	hr_satellites = hr_satellites.split(',')
	#hr_satellites = cfg['hr_satellites']
	  

        #print hr_satellites
        
        ctest = self.ctdeb
        while ctest <= self.ctfin:
            for isat, s_name in enumerate(hr_satellites):
                
                flnme_only = '%04d%02d%02d*%s*.nc'%(ctest.year, ctest.month, ctest.day, s_name)
                files.extend(glob.glob(os.path.join(flnme_only)))
                
            ctest=ctest.add(1,cdtime.Days)
        # --
      
	if cfg is None:
	  lomin = float(config.get('Domain', 'lomin') )
	  lomax = float(config.get('Domain', 'lomax')      )
	  lamin = float(config.get('Domain', 'lamin')     )
	  lamax = float(config.get('Domain', 'lamax')     )
	else:
	  lomin = cfg['Domain']['lomin']
	  lomax = cfg['Domain']['lomax']
	  lamin = cfg['Domain']['lamin']
	  lamax = cfg['Domain']['lamax']
	  
        
        #print files

        if files == []:
            print 'No data file to read ...'
        else:
            
            # ---- Lecture et creation de la grille ----
            #
            # -- Lecture du fichier filename
            f = cdms2.open(files[0])                        
            lo = f.getVariable('lon')
            la = f.getVariable('lat')
            # -- Creation des axes longitude et latitude
#            lat_axis = create_lon(la,id='latitude')
#            lon_axis = create_lon(lo,id='longitude')
            # -- Creation de la grille
            grid = create_grid(lo, la)
            
            del lo,  la
            
            for ifile, filename in enumerate(files):
      
                
                # -- Lecture du fichier filename
                f = cdms2.open(filename)
                
                temp2 = f('sea_surface_temperature')
                set_order(temp2, 'tyx') # pour que averager.py fontionne
                
                # modif J.Gatti : utilisation de l'index de qualite (0:unprocessed 1:cloudy 2:bad 3:suspect 4:acceptable 5:excellent)
                temp2.set_fill_value(temp2._FillValue)
                conf=f('proximity_confidence')
                MV2.putmask(temp2.data,conf.data<3,temp2._FillValue)   #  ne change que data   
                MV2.putmask(temp2.mask,conf.data<3,True)                    # ne change que mask
                #autre methode
                #--------------------
                #temp2=MV2.masked_where(conf.data<3,temp2)          # ne change que mask
                #oldmask=temp2.mask
                #temp2[:]=temp2.filled()                                                  # change data mais met mask a false partout
                #temp2.mask=oldmask                                                     # remet le bon mask sans lien
                del conf
                # fin modif J.Gatti : utilisation de l'index de qualite    
                
                # -- Attribution de la grille a l'objet self.data
                set_grid(temp2, grid, axes=True)     
                
                temp = temp2(lon=(lomin, lomax), lat=(lamin, lamax))
                
                if verbose:
                    # == TEST OCCUPATION MEMOIRE ===
                    print ctest,  'Avant'
                    #print psutil.Process(os.getpid()).get_memory_percent()
                    #print psutil.Process(os.getpid()).get_memory_info()
                    #print 'CPU percent: ', psutil.cpu_percent(interval=0.1)
                    #print 'Used phymem: ', psutil.used_phymem()
                    #print 'Used virtmem: ', psutil.used_virtmem()
                
                del temp2
                
                if verbose:
                    # == TEST OCCUPATION MEMOIRE ===
                    print ctest,  'Apres del'
                    #print psutil.Process(os.getpid()).get_memory_percent()
                    #print psutil.Process(os.getpid()).get_memory_info()
                    #print 'CPU percent: ', psutil.cpu_percent(interval=0.1)
                    #print 'Used phymem: ', psutil.used_phymem()
                    #print 'Used virtmem: ', psutil.used_virtmem()
 
                # =============== ATTENTION ==================================
                # Verifier que temp utilise tout le temps le meme espace memoire ... voir du cote de cdms
                # ==========================================================
                f.close()
                
                
                


                # -- Transfert de temp dans l'objet cdat self.data (concatenation)
                # =============== ATTENTION ====================
                # Faire une variable intermediaire qui sera au prealable allouee en memoire pour eviter
                # trop de copies en memoire !!!!!!!!!!!!!!!!
                # ============================================
                #self.data += temp,
                if ifile == 0:
                    self.data = temp
                else:                
                    self.data = MV2.concatenate((self.data, temp))
                
                if verbose:
                    # == TEST OCCUPATION MEMOIRE ===
                    print ctest,  'Avant gccollect'
                    #print psutil.Process(os.getpid()).get_memory_percent()
                    #print psutil.Process(os.getpid()).get_memory_info()
                    #print 'CPU percent: ', psutil.cpu_percent(interval=0.1)
                    #print 'Used phymem: ', psutil.used_phymem()
                    #print 'Used virtmem: ', psutil.used_virtmem()
                    print gc.collect()
                gc.collect()
                
                if verbose:
                    # == TEST OCCUPATION MEMOIRE ===
                    print ctest,  'Apres gccollect'
                    #print psutil.Process(os.getpid()).get_memory_percent()
                    #print psutil.Process(os.getpid()).get_memory_info()
                    #print 'CPU percent: ', psutil.cpu_percent(interval=0.1)
                    #print 'Used phymem: ', psutil.used_phymem()
                    #print 'Used virtmem: ', psutil.used_virtmem()

            # -- Creation de l'axe temporel
            #taxis = create_time(cumt)
            
            # -- MV2.concatenate pour concatener les informations dans self.data (entre autre construit l'axe temporel)
            #self.data = MV2.concatenate(self.data)
 
            
 
 
        # -- Informations sur le dataset
        #self.data.name = "NAR_SST"
        self.data.units = "degree_Celsius"
        self.data.standard_name = "satellite_sea_surface_temperature"
        self.data.long_name = "Satellite Sea Surface Temperature - NAR"
        
        # -- Change unit
        self.data = kel2degc(self.data)
Ejemplo n.º 11
0
# Création de l'objet de bathy grillee
from vacumm.bathy.bathy import GriddedBathy
bathy = GriddedBathy(var)

# On définit le traît de côte pour le masquage
bathy.set_shoreline('f')

# On récupère une version masquée
bathy_orig = bathy.bathy(mask=False)
bathy_masked = bathy.bathy(mask=True)


# Definition d'une grille zoom
from vacumm.misc.grid import create_grid
new_grid = create_grid((-5.5, -4.6, 0.009), (48.25, 48.6, .006))

# On interpole la bathy masquée sur une autre grille
interp_bathy_masked = bathy.regrid(new_grid)

# On interpole et masque la bathy originale sur une autre grille
# - interpolation
interp_bathy_orig = bathy.regrid(new_grid, mask=False)
# - masquage
interp_bathy_orig_masked = GriddedBathy(interp_bathy_orig, shoreline='f').bathy()

# Plots
from matplotlib import rc ; rc('font', size=9);rc('axes', titlesize=9)
kwplot = dict(resolution=None, show=False, colorbar=False, contour=False,
    top=.97, hspace=.25, bottom=.03, right=.98,
    autoresize=False, vmax=bathy_orig.max(), vmin=bathy_orig.min())
Ejemplo n.º 12
0
here = os.path.dirname(__file__)
for rpath in [os.path.join(here, '../lib/python')]:
    path = os.path.abspath(rpath)
    sys.path.append(path)
try:
    from vacumm.misc.grid import resol, get_xy, create_grid
    from vacumm.misc import lonlab, latlab, scalebox
    from vacumm.misc.plot import map2, add_grid
    import cdms2
except:
    sys.exit('Error when loading vacumm')

# Dimension
gg = (lon, lat)
lonn, latn = get_xy(gg, num=True)
grid = create_grid(*gg)
print 'Dimensions           : nx=%i ny=%i' % grid.shape[::-1]
print 'Axes                 : lon="%s" lat="%s" (%iD)' % (lon.id, lat.id,
                                                          lonn.ndim)

# Extension
print 'Zonal extent         : %s -> %s  [%s -> %s]' % (
    lonn.min(), lonn.max(), lonlab(
        lonn.min(), decimal=False), lonlab(lonn.max(), decimal=False))
print 'Meridional extent    : %s -> %s  [%s -> %s]' % (
    latn.min(), latn.max(), latlab(
        latn.min(), decimal=False), latlab(latn.max(), decimal=False))

# Resolution
lonres, latres = resol(gg, proj=False)
xres, yres = resol(gg, proj=True)
Ejemplo n.º 13
0
    def read(self):
        """ Lecture des fichiers NetCDF de NAR SST """
        import cdms2,sys,os, glob
        import numpy,MV2
        import cdtime
        from vacumm.misc.axes import create_lon
        from vacumm.misc.grid import create_grid,  set_grid
        from vacumm.misc.atime import create_time
        from vacumm.misc.phys.units import kel2degc

        # -- Dans le cas d'un NAR SST on lit la grille lon lat dans le fichier grid
        # -- Lecture de la grille
        znar=self.ZONE_NAR
        gridfile="grid_%(znar)s.nc"%vars()
        f=cdms2.open(gridfile)
        la = f('latitude')
        lo = f('longitude')
        f.close()

        # -- Creation des axes longitude et latitude
        lat_axis = create_lon(la,id='latitude')
        lon_axis = create_lon(lo,id='longitude')
        # -- Creation de la grille
        grid = create_grid(lon_axis, lat_axis)

        # -- Creation d'un objet cdms nomme self.data et d'un tableau cumt pour les dates extraites des noms de fichiers
        self.data = () #Initialise un tuple
        # =============== ATTENTION ====================
        # Initialiser self.data pour ne pas dupliquer en memoire !!!!!!!!!
        # ============================================

        #cumt = [] # Initialise un array

        # -- Boucle sur les fichiers presents dans le WORKDIR

        #url_file_def="%(YYYY)s%(MM)s%(DD)s%(HH)s%(ext)s"%vars()

        #self.ctdeb

        # -- Ancienne methode
        #files = glob.glob(os.path.join(self.WORKDIR, '2*.nc'))
        #files.sort()
        # --

        # -- Methode amelioree
        # Cree une liste
        files = []
        # Cree la liste des fichiers correspondants a la periode consideree
        ctest = self.ctdeb
        while ctest <= self.ctfin:
            flnme_only = '%(#)04d%(##)02d%(###)02d*.nc'%{'#':ctest.year, '##':ctest.month, '###':ctest.day}
            files.extend(glob.glob(os.path.join(self.WORKDIR, flnme_only)))
            ctest=ctest.add(1,cdtime.Days)
        # --

        for filename in files:
            # -- Lecture du fichier filename
            f = cdms2.open(filename)
            temp = f('sea_surface_temperature')
            # =============== ATTENTION ==================================
            # Verifier que temp utilise tout le temps le meme espace memoire ... voir du cote de cdms
            # ==========================================================
            f.close()

            # -- Extraction de la date et heure du nom du fichier
            #ty = numpy.int(filename[-15:-11])
            #tm = numpy.int(filename[-11:-9])
            #tj = numpy.int(filename[-9:-7])
            #th = numpy.int(filename[-7:-5])
            #tt = cdtime.comptime(ty,tm,tj,th)
            #cumt.append(tt)

            # -- Transfert de temp dans l'objet cdat self.data (concatenation)
            # =============== ATTENTION ====================
            # Faire une variable intermediaire qui sera au prealable allouee en memoire pour eviter
            # trop de copies en memoire !!!!!!!!!!!!!!!!
            # ============================================
            self.data += temp,


        # -- Creation de l'axe temporel
        #taxis = create_time(cumt)

        # -- MV2.concatenate pour concatener les informations dans self.data (entre autre construit l'axe temporel)
        self.data = MV2.concatenate(self.data)



        # -- Attribution de la grille a l'objet self.data
        set_grid(self.data, grid, axes=True)

        # -- Informations sur le dataset
        self.data.name = "NAR_SST"
        self.data.units = "degree_Celsius"
        self.data.standard_name = "satellite_sea_surface_temperature"
        self.data.long_name = "Satellite Sea Surface Temperature - NAR"

        # -- Change unit
        self.data = kel2degc(self.data)
Ejemplo n.º 14
0
print 'Resolution metrique :', xyz.resol()

# Definition auto d'une grille reguliere
grid_auto = xyz.grid
print 'Resolution grille auto :', resol(grid_auto)

# Interpolation sur grille auto
print 'Interpolation auto'
gridded_auto = xyz.togrid()
#  equivalent a :
#  >>> gridded_auto = xyz.togrid(xyz.grid)

# Interpolation sur grille manuelle
print 'Interpolation et masquage manuels puis extraction'
# - defintion de la grille
grid_manual = create_grid((-5.3, -4.91, .01), (48.1, 48.41, .01))
# - interpolation
gridded_manual = xyz.togrid(grid_manual, mask='h')
# Extraction d'une sous-zone (xmin,ymin...) avec marge
xyz_up = xyz.clip(zone=(None, None, None, 48.3), margin=2)
# - si None, valeurs limites internes (i.e xyz.xmin(), ...)
# - margin : marge relative en unite de resolution 
#   -> ici : ymax = 48.3 + xyz.resol()[1]*2

# Sauvegarde
print 'Sauvegarde'
prefix = __file__[:-2]+'up'
xyz_up.save(prefix+'.xyz') # ascii
xyz_up.save(prefix+'.nc')  # netcdf/grd

# Plots
Ejemplo n.º 15
0
# Création de bathymétries fictives à partir de Smith and Sandwell
import cdms2
from vacumm.config import data_sample
cdms2.axis.longitude_aliases.append('x')
cdms2.axis.latitude_aliases.append('y')
f = cdms2.open(data_sample('ETOPO2v2g_flt.grd'))
# - large
var_large = f('z', lon=(-7, -1), lat=(46, 49))
# - petite
var_small = f('z', lon=(-4.5, -.5), lat=(44.5, 46.5))
f.close()
# - regrillage de la large vers une grille moins fine
from vacumm.misc.grid import regridding, resol, create_grid
xr, yr = resol(var_large.getGrid())
grid_large = create_grid((-7., -1, xr * 4.5), (46., 49, yr * 4.5))
var_large = regridding.regrid2d(var_large, grid_large)

# On ajoute un traît de côte pour le masquage
from vacumm.bathy.bathy import GriddedBathy, GriddedBathyMerger
bathy_large = GriddedBathy(var_large, shoreline='i')
bathy_small = var_small

# Création de la grille finale de résolution intermédiaire
final_grid = create_grid((-6., .5, xr * 2.5), (45, 47., yr * 2.5))

# On crée maintenant le merger
merger = GriddedBathyMerger(final_grid)
# - ajout de la bathy basse resolution en premier (en dessous)
merger += bathy_large
# - puis ajout de celle haute résolution
Ejemplo n.º 16
0
Archivo: nar.py Proyecto: acoat/vacumm
    def read(self, verbose=False, cfg=None):
        """ Lecture des fichiers NetCDF de NAR SST """
        import cdms2, sys, os, glob
        import numpy, MV2
        import cdtime
        from vacumm.misc.axes import create_lon, set_order
        from vacumm.misc.grid import create_grid, set_grid
        from vacumm.misc.atime import create_time
        from vacumm.misc.phys.units import kel2degc
        import gc

        # Get the configuration file information
        #cfg = self.get_config()
        #print cfg

        # -- Creation d'un objet cdms nomme self.data et d'un tableau cumt pour les dates extraites des noms de fichiers
        self.data = ()  #Initialise un tuple
        # =============== ATTENTION ====================
        # Initialiser self.data pour ne pas dupliquer en memoire !!!!!!!!!
        # ============================================

        # -- Methode amelioree
        # Cree une liste
        files = []
        # Cree la liste des fichiers correspondants a la periode consideree
        if cfg is None:
            config = configparser.RawConfigParser()
            config.read(os.path.join(self.SCRIPT_DIR, 'config.cfg'))
            hr_satellites = config.get('Nar SST', 'hr_satellites')
        else:
            hr_satellites = cfg['Nar SST']['hr_satellites']

        hr_satellites = hr_satellites.split(',')
        #hr_satellites = cfg['hr_satellites']

        #print hr_satellites

        ctest = self.ctdeb
        while ctest <= self.ctfin:
            for isat, s_name in enumerate(hr_satellites):

                flnme_only = '%04d%02d%02d*%s*.nc' % (ctest.year, ctest.month,
                                                      ctest.day, s_name)
                files.extend(glob.glob(os.path.join(flnme_only)))

            ctest = ctest.add(1, cdtime.Days)
        # --

        if cfg is None:
            lomin = float(config.get('Domain', 'lomin'))
            lomax = float(config.get('Domain', 'lomax'))
            lamin = float(config.get('Domain', 'lamin'))
            lamax = float(config.get('Domain', 'lamax'))
        else:
            lomin = cfg['Domain']['lomin']
            lomax = cfg['Domain']['lomax']
            lamin = cfg['Domain']['lamin']
            lamax = cfg['Domain']['lamax']

        #print files

        if files == []:
            print('No data file to read ...')
        else:

            # ---- Lecture et creation de la grille ----
            #
            # -- Lecture du fichier filename
            f = cdms2.open(files[0])
            lo = f.getVariable('lon')
            la = f.getVariable('lat')
            # -- Creation des axes longitude et latitude
            #            lat_axis = create_lon(la,id='latitude')
            #            lon_axis = create_lon(lo,id='longitude')
            # -- Creation de la grille
            grid = create_grid(lo, la)

            del lo, la

            for ifile, filename in enumerate(files):

                # -- Lecture du fichier filename
                f = cdms2.open(filename)

                temp2 = f('sea_surface_temperature')
                set_order(temp2, 'tyx')  # pour que averager.py fontionne

                # modif J.Gatti : utilisation de l'index de qualite (0:unprocessed 1:cloudy 2:bad 3:suspect 4:acceptable 5:excellent)
                temp2.set_fill_value(temp2._FillValue)
                conf = f('proximity_confidence')
                MV2.putmask(temp2.data, conf.data < 3,
                            temp2._FillValue)  #  ne change que data
                MV2.putmask(temp2.mask, conf.data < 3,
                            True)  # ne change que mask
                #autre methode
                #--------------------
                #temp2=MV2.masked_where(conf.data<3,temp2)          # ne change que mask
                #oldmask=temp2.mask
                #temp2[:]=temp2.filled()                                                  # change data mais met mask a false partout
                #temp2.mask=oldmask                                                     # remet le bon mask sans lien
                del conf
                # fin modif J.Gatti : utilisation de l'index de qualite

                # -- Attribution de la grille a l'objet self.data
                set_grid(temp2, grid, axes=True)

                temp = temp2(lon=(lomin, lomax), lat=(lamin, lamax))

                if verbose:
                    # == TEST OCCUPATION MEMOIRE ===
                    print(ctest, 'Avant')
                    #print psutil.Process(os.getpid()).get_memory_percent()
                    #print psutil.Process(os.getpid()).get_memory_info()
                    #print 'CPU percent: ', psutil.cpu_percent(interval=0.1)
                    #print 'Used phymem: ', psutil.used_phymem()
                    #print 'Used virtmem: ', psutil.used_virtmem()

                del temp2

                if verbose:
                    # == TEST OCCUPATION MEMOIRE ===
                    print(ctest, 'Apres del')
                    #print psutil.Process(os.getpid()).get_memory_percent()
                    #print psutil.Process(os.getpid()).get_memory_info()
                    #print 'CPU percent: ', psutil.cpu_percent(interval=0.1)
                    #print 'Used phymem: ', psutil.used_phymem()
                    #print 'Used virtmem: ', psutil.used_virtmem()

                # =============== ATTENTION ==================================
                # Verifier que temp utilise tout le temps le meme espace memoire ... voir du cote de cdms
                # ==========================================================
                f.close()

                # -- Transfert de temp dans l'objet cdat self.data (concatenation)
                # =============== ATTENTION ====================
                # Faire une variable intermediaire qui sera au prealable allouee en memoire pour eviter
                # trop de copies en memoire !!!!!!!!!!!!!!!!
                # ============================================
                #self.data += temp,
                if ifile == 0:
                    self.data = temp
                else:
                    self.data = MV2.concatenate((self.data, temp))

                if verbose:
                    # == TEST OCCUPATION MEMOIRE ===
                    print(ctest, 'Avant gccollect')
                    #print psutil.Process(os.getpid()).get_memory_percent()
                    #print psutil.Process(os.getpid()).get_memory_info()
                    #print 'CPU percent: ', psutil.cpu_percent(interval=0.1)
                    #print 'Used phymem: ', psutil.used_phymem()
                    #print 'Used virtmem: ', psutil.used_virtmem()
                    print(gc.collect())
                gc.collect()

                if verbose:
                    # == TEST OCCUPATION MEMOIRE ===
                    print(ctest, 'Apres gccollect')
                    #print psutil.Process(os.getpid()).get_memory_percent()
                    #print psutil.Process(os.getpid()).get_memory_info()
                    #print 'CPU percent: ', psutil.cpu_percent(interval=0.1)
                    #print 'Used phymem: ', psutil.used_phymem()
                    #print 'Used virtmem: ', psutil.used_virtmem()

            # -- Creation de l'axe temporel
            #taxis = create_time(cumt)

            # -- MV2.concatenate pour concatener les informations dans self.data (entre autre construit l'axe temporel)
            #self.data = MV2.concatenate(self.data)

        # -- Informations sur le dataset
        #self.data.name = "NAR_SST"
        self.data.units = "degree_Celsius"
        self.data.standard_name = "satellite_sea_surface_temperature"
        self.data.long_name = "Satellite Sea Surface Temperature - NAR"

        # -- Change unit
        self.data = kel2degc(self.data)
Ejemplo n.º 17
0
# -*- coding: utf8 -*-
# Création de bathymétries fictives à partir de Smith and Sandwell
import cdms2
from vacumm.config import data_sample
cdms2.axis.longitude_aliases.append('x')
cdms2.axis.latitude_aliases.append('y')
f = cdms2.open(data_sample('ETOPO2v2g_flt.grd'))
# - large
var_large = f('z', lon=(-7, -1), lat=(46, 49))
# - petite
var_small = f('z', lon=(-4.5, -.5), lat=(44.5, 46.5))
f.close()
# - regrillage de la large vers une grille moins fine
from vacumm.misc.grid import regridding, resol, create_grid
xr, yr = resol(var_large.getGrid())
grid_large = create_grid((-7., -1, xr*4.5), (46., 49, yr*4.5))
var_large = regridding.regrid2d(var_large, grid_large)

# On ajoute un traît de côte pour le masquage
from vacumm.bathy.bathy import GriddedBathy, GriddedBathyMerger
bathy_large = GriddedBathy(var_large, shoreline='i')
bathy_small = var_small

# Création de la grille finale de résolution intermédiaire
final_grid = create_grid((-6., .5, xr*2.5), (45, 47., yr*2.5))

# On crée maintenant le merger
merger = GriddedBathyMerger(final_grid)
# - ajout de la bathy basse resolution en premier (en dessous)
merger += bathy_large
# - puis ajout de celle haute résolution