From 207f037c7e68f4d2f3cf1879c02263797740f6cb Mon Sep 17 00:00:00 2001 From: Wouter Peters <wouter.peters@wur.nl> Date: Tue, 3 Aug 2010 13:11:08 +0000 Subject: [PATCH] working on implementing Nio for tools/io.py --- da/ct/io.py | 6 ++-- da/tools/io.py | 79 ++++++++++++++++++++++---------------------------- 2 files changed, 37 insertions(+), 48 deletions(-) diff --git a/da/ct/io.py b/da/ct/io.py index f3bba790..2196be26 100755 --- a/da/ct/io.py +++ b/da/ct/io.py @@ -17,10 +17,10 @@ import os disclaimer = "This data belongs to the CarbonTracker project" email = "wouter.peters@wur.nl" -url = "http://carbontracker.wur.nl" -institution = "Wageningen University and Research Center" +url = "http://carbontracker.wur.nl" +institution = "Wageningen University and Research Center" source = "CarbonTracker release 2.0" -conventions = "CF-1.1" +conventions = "CF-1.1" historytext = 'Created on '+dt.datetime.now().strftime('%B %d, %Y')+' by %s'%os.environ['USER'] std_savedict={'name':'unknown','values':[],'dims':(0,0,),'units':'','long_name':'','_FillValue':float(-999.),'comment':''} diff --git a/da/tools/io.py b/da/tools/io.py index 460d2b13..5e7a7b21 100755 --- a/da/tools/io.py +++ b/da/tools/io.py @@ -9,9 +9,7 @@ File created on 15 Oct 2008. File modified for CT data assimilation system in July 2010, Wouter Peters """ -import da.ct.standardvariables import datetime as dt -import Nio from numpy import array import os @@ -28,51 +26,47 @@ std_savedict={'name':'unknown','values':[],'dims':(0,0,),'units':'','long_name': class CT_CDF(object): """ function opens a NetCDF/HDF/GRIB file for writing of output""" def __init__(self,*arguments): + import Nio - self.file = Nio.open_file(*arguments) - #self.AddCTHeader() + self.file = Nio.open_file(*arguments) + self.AddCTHeader() def AddCTHeader(self): - self.automode() # - setattr(self,'Institution',institution) - setattr(self,'Contact',email) - setattr(self,'URL',url) - setattr(self,'Source',source) - setattr(self,'Convention',conventions) - setattr(self,'Disclaimer',disclaimer) + setattr(self.file,'Institution',institution) + setattr(self.file,'Contact',email) + setattr(self.file,'URL',url) + setattr(self.file,'Source',source) + setattr(self.file,'Convention',conventions) + setattr(self.file,'Disclaimer',disclaimer) setattr(self,'History',historytext) def AddParamsDim(self,nparams): - self.automode() - dimparams=self.def_dim('nparameters',nparams) + dimparams=self.file.create_dimension('nparameters',nparams) return (dimparams,) def AddMembersDim(self,nmembers): - self.automode() - dimmembers=self.def_dim('nmembers',nmembers) + dimmembers=self.file.create_dimension('nmembers',nmembers) return (dimmembers,) def AddLagDim(self,nlag,unlimited=True): - self.automode() if unlimited: - dimlag =self.def_dim('nlag',CDF.NC.UNLIMITED) + dimlag =self.file.create_dimension('nlag',CDF.NC.UNLIMITED) else: - dimlag=self.def_dim('nlag',nlag) + dimlag=self.file.create_dimension('nlag',nlag) return (dimlag,) def AddObsDim(self,nobs): - self.automode() - dimobs=self.def_dim('nobs',nobs) + dimobs=self.file.create_dimension('nobs',nobs) return (dimobs,) @@ -80,7 +74,7 @@ class CT_CDF(object): from numpy import arange, float64 - if 'latitude' in self.dimensions(): return (self.dim('latitude'),self.dim('longitude'),) # already exists + if 'latitude' in self.file.dimensions.keys(): return (self.file.dimensions['latitude'],self.file.dimensions['longitude'],) # already exists lons=-180+arange(360)*1.0+0.5 lats=-90+arange(180)*1.0+0.5 @@ -88,9 +82,8 @@ class CT_CDF(object): lats=lats[jstart:jend] lons=lons[istart:iend] # - self.automode() - dimlon=self.def_dim('longitude',lons.shape[0]) - dimlat=self.def_dim('latitude',lats.shape[0]) + dimlon=self.file.create_dimension('longitude',lons.shape[0]) + dimlat=self.file.create_dimension('latitude',lats.shape[0]) savedict=self.StandardVar(varname='latitude') savedict['values']=lats.tolist() @@ -108,20 +101,18 @@ class CT_CDF(object): def AddDateDim(self): - self.automode() - if 'date' in self.dimensions(): return (self.dim('date'),) - return (self.def_dim('date',CDF.NC.UNLIMITED),) + if 'date' in self.dimensions.keys(): return (self.file.dimensions['date'],) + return (self.file.create_dimension('date',None),) def AddDateDimFormat(self): - self.automode() - if 'yyyymmddhhmmss' in self.dimensions(): return (self.dim('yyyymmddhhmmss'),) # already exists - return (self.def_dim('yyyymmddhhmmss',6),) + if 'yyyymmddhhmmss' in self.file.dimensions.keys(): return (self.file.dimensions['yyyymmddhhmmss'],) # already exists + return (self.file.create_dimension('yyyymmddhhmmss',6),) def has_date(self,dd): - if self.inq_unlimlen() > 0: - if dd in self.GetVariable('date').tolist(): + if self.file.dimensions['date'] > 0: + if dd in self.file.variables.['date'][:].tolist(): return True else: return False @@ -130,7 +121,7 @@ class CT_CDF(object): def GetVariable(self,varname): """ get variable from ncf file""" - return array(self.var(varname).get()) + return self.file.variables.[varname][:] def StandardVar(self,varname): """ return properties of standard variables """ @@ -144,7 +135,7 @@ class CT_CDF(object): def AddData(self,datadict,nsets=1,silent=True): """ add fields to file, at end of unlimited dimension""" - existing_vars=self.variables() + existing_vars=self.file.variables.keys() try: next = datadict['count'] @@ -153,22 +144,22 @@ class CT_CDF(object): if existing_vars.has_key(datadict['name']): - var = self.var(datadict['name']) + var = self.file.variables[datadict['name']] var[next:next+nsets]=datadict['values'] else: if not silent: print 'Creating new dataset: '+datadict['name'] if datadict.has_key('dtype'): if datadict['dtype'] == 'int': - var = self.def_var(datadict['name'],CDF.NC.INT,datadict['dims']) + var = self.file.create_variable(datadict['name'],'i',datadict['dims']) elif datadict['dtype'] == 'char': - var = self.def_var(datadict['name'],CDF.NC.CHAR,datadict['dims']) + var = self.file.create_variable(datadict['name'],'s1',datadict['dims']) elif datadict['dtype'] == 'double': - var = self.def_var(datadict['name'],CDF.NC.DOUBLE,datadict['dims']) + var = self.file.create_variable(datadict['name'],'d',datadict['dims']) else: - var = self.def_var(datadict['name'],CDF.NC.FLOAT,datadict['dims']) + var = self.file.create_variable(datadict['name'],'f',datadict['dims']) else: - var = self.def_var(datadict['name'],CDF.NC.FLOAT,datadict['dims']) + var = self.file.create_variable(datadict['name'],'f',datadict['dims']) for k,v in datadict.iteritems(): if k not in ['name','dims','values','_FillValue','count']: setattr(var,k,v) @@ -177,10 +168,6 @@ class CT_CDF(object): else: var[:]=datadict['values'] -def GetVariable(file,varname): - """ get variable from HDF file""" - return array(file.select(varname).get()) - def CreateDirs(rundat,dirname): dirname=os.path.join(rundat.outputdir,dirname) @@ -198,8 +185,10 @@ if __name__ == '__main__': sys.path.append('../../') + import da.tools.standardvariables + ncf=CT_CDF('test.nc','c') #dimgrid=ncf.AddLatLonDim() - #dimdate=ncf.AddDateDim() + dimdate=ncf.AddDateDim() #dimidate=ncf.AddDateDimFormat() -- GitLab