Пример #1
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)
Пример #2
0
    def read(self, 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
        from vacumm.misc.grid import create_grid, set_grid
        from vacumm.misc.atime import create_time
        from vacumm.misc.phys.units import kel2degc

        if self.ctdeb >= cdtime.comptime(2012, 01, 01, 0, 0, 0):
            # -- 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
            ctest = self.ctdeb
            while ctest <= self.ctfin:
                for iH in numpy.arange(24):
                    flnme_only = '%04d%02d%02d%02d*.nc' % (
                        ctest.year, ctest.month, ctest.day, iH)
                    files.extend(
                        glob.glob(os.path.join(self.OBSDIR, flnme_only)))
                ctest = ctest.add(1, cdtime.Days)
            # --

            if cfg is None:
                config = ConfigParser.RawConfigParser()
                config.read(os.path.join(self.SCRIPT_DIR, 'config.cfg'))
                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']

            if cfg is None:
                try:
                    timerange = config.get('Seviri SST', 'timerange')
                    # timerange = 'midnight' pour donnees a minuit seulement
                    # timerange = 'all' pour donnees a minuit seulement
                except ConfigParser.NoOptionError:
                    #print 'No Time Range'
                    timerange = 'all'  # Par defaut, lecture de toutes les heures
            else:
                timerange = cfg['Seviri SST']['timerange']

            if files == []:
                print 'No data file to read ...'
            else:
                for ifile, filename in enumerate(files):
                    # -- Lecture du fichier filename
                    f = cdms2.open(filename)
                    temp = f('sea_surface_temperature',
                             lon=(lomin, lomax),
                             lat=(lamin, lamax))
                    f.close()

                    # -- Transfert de temp dans l'objet cdat self.data (concatenation)
                    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)

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

                # -- Change unit
                self.data = kel2degc(self.data)
Пример #3
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)
Пример #4
0
                    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)

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

                # -- Change unit
                self.data = kel2degc(self.data)

        #-- Fin de lecture des donnees
        #----------------------------------------------------

    def read_assim(self, cfg=None):
        """ Lecture des fichiers NetCDF de SST SEVIRI formatte pour l'assimilation """
        import cdms2, sys, os, glob
        import numpy, MV2
        import cdtime

        # -- Creation d'un objet cdms nomme self.data

        if cfg is None:
            config = ConfigParser.RawConfigParser()
            config.read(os.path.join(self.SCRIPT_DIR, 'config.cfg'))
Пример #5
0
    def read(self, 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
        from vacumm.misc.grid import create_grid, set_grid
        from vacumm.misc.atime import create_time
        from vacumm.misc.phys.units import kel2degc

        if self.ctdeb >= cdtime.comptime(2012, 01, 01, 0, 0, 0):
            # -- 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
            ctest = self.ctdeb
            while ctest <= self.ctfin:
                for iH in numpy.arange(24):
                    flnme_only = "%04d%02d%02d%02d*.nc" % (ctest.year, ctest.month, ctest.day, iH)
                    files.extend(glob.glob(os.path.join(self.OBSDIR, flnme_only)))
                ctest = ctest.add(1, cdtime.Days)
                # --

            if cfg is None:
                config = ConfigParser.RawConfigParser()
                config.read(os.path.join(self.SCRIPT_DIR, "config.cfg"))
                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"]

            if cfg is None:
                try:
                    timerange = config.get("Seviri SST", "timerange")
                    # timerange = 'midnight' pour donnees a minuit seulement
                    # timerange = 'all' pour donnees a minuit seulement
                except ConfigParser.NoOptionError:
                    # print 'No Time Range'
                    timerange = "all"  # Par defaut, lecture de toutes les heures
            else:
                timerange = cfg["Seviri SST"]["timerange"]

            if files == []:
                print "No data file to read ..."
            else:
                for ifile, filename in enumerate(files):
                    # -- Lecture du fichier filename
                    f = cdms2.open(filename)
                    temp = f("sea_surface_temperature", lon=(lomin, lomax), lat=(lamin, lamax))
                    f.close()

                    # -- Transfert de temp dans l'objet cdat self.data (concatenation)
                    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)

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

                # -- Change unit
                self.data = kel2degc(self.data)
Пример #6
0
                    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)

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

                # -- Change unit
                self.data = kel2degc(self.data)

                # -- Fin de lecture des donnees
                # ----------------------------------------------------

    def read_assim(self, cfg=None):
        """ Lecture des fichiers NetCDF de SST SEVIRI formatte pour l'assimilation """
        import cdms2, sys, os, glob
        import numpy, MV2
        import cdtime

        # -- Creation d'un objet cdms nomme self.data

        if cfg is None:
            config = ConfigParser.RawConfigParser()
            config.read(os.path.join(self.SCRIPT_DIR, "config.cfg"))
Пример #7
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)
Пример #8
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)