Skip to content
Snippets Groups Projects
Commit 207f037c authored by Peters, Wouter's avatar Peters, Wouter
Browse files

working on implementing Nio for tools/io.py

parent a9fdccd0
Branches
No related tags found
No related merge requests found
......@@ -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':''}
......
......@@ -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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment