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)
# 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())
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)
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__)
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()
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.
# -*- 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)
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)
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)
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)
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
# 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
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)
# -*- 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