In [1]:
import sys
sys.path.append('../scripts')
import constants as c
import glob
import qcio
import qcutils
import netCDF4
In [10]:
class ACCESSData(object):
def __init__(self):
self.globalattr = {}
self.variables = {}
self.varattr = {}
In [13]:
def access_read_mfiles(file_list=[],var_list=[]):
#ds = qcio.DataStructure()
f = ACCESSData()
#print file_list[0]
ncfile = netCDF4.Dataset(file_list[0])
# get the global attributes
for gattr in ncfile.ncattrs():
f.globalattr[gattr] = getattr(ncfile,gattr)
dims = ncfile.dimensions
shape = (len(dims["time"]),len(dims["lat"]),len(dims["lon"]))
if len(var_list)==0: var_list=ncfile.variables.keys()
# load the data from the first file into the data structure
for var in var_list:
access_name = cf["Variables"][var]["access_name"]
if access_name in ncfile.variables.keys():
f.variables[var] = ncfile.variables[access_name][:]
f.varattr[var] = {}
for this_attr in ncfile.variables[access_name].ncattrs():
f.varattr[var][this_attr] = getattr(ncfile.variables[access_name],this_attr)
else:
print "ACCESS variable "+access_name+" not found in "+file_list[0]
f.variables[var] = makedummyseries(shape)
ncfile.close()
if len(file_list)>1:
# loop over the remaining files and append the data
for filename in file_list[1:]:
#print filename
ncfile = netCDF4.Dataset(filename)
for var in var_list:
access_name = cf["Variables"][var]["access_name"]
#print var,ncfile.variables[access_name].shape
if access_name in ncfile.variables.keys():
f.variables[var] = numpy.concatenate((f.variables[var],ncfile.variables[access_name][:]),axis=0)
if var not in f.varattr.keys():
f.varattr[var] = {}
for this_attr in ncfile.variables[access_name].ncattrs():
f.varattr[var][this_attr] = getattr(ncfile.variables[access_name],this_attr)
else:
print "ACCESS variable "+access_name+" not found in "+filename
f.variables[var] = makedummyseries(shape)
ncfile.close()
return f
In [ ]:
def create_access_series(ncfile,dims,access_name,ds):
# get the variable attributes
attr = {}
for this_attr in ncfile.variables[access_name].ncattrs():
attr[this_attr] = getattr(ncfile.variables[access_name],this_attr)
flag = numpy.zeros(len(dims["time"]))
for i in range(len(dims["lat"])):
for j in range(len(dims["lat"])):
if len(ncfile.variables[access_name].shape)==3:
label_ij = label+'_'+str(i)+str(j)
series = ncfile.variables[access_name][:,i,j]
qcutils.CreateSeries(ds,label_ij,series,Flag=flag,Attr=attr)
elif len(f.variables[access_name].shape)==4:
label_ij = label+'_'+str(i)+str(j)
series = ncfile.variables[access_name][:,0,i,j]
qcutils.CreateSeries(ds,label_ij,series,Flag=flag,Attr=attr)
else:
raise Exception("Unrecognised variable ("+label+") dimension in ACCESS file")
In [4]:
def makedummyseries(shape):
return numpy.ma.masked_all(shape)
In [5]:
cf=qcio.load_controlfile(path="../controlfiles")
var_list = cf["Variables"].keys()
site_list = cf["Sites"].keys()
In [14]:
for site in ["AliceSpringsMulga"]:
#print site
infilename = cf["Sites"][site]["in_filepath"]+cf["Sites"][site]["in_filename"]
file_list = sorted(glob.glob(infilename))
nFiles = len(file_list)
print site+": Processing "+str(nFiles)+" files ..."
outfilename = cf["Sites"][site]["out_filepath"]+cf["Sites"][site]["out_filename"]
f = access_read_mfiles(file_list=file_list,var_list=var_list)
In [19]:
f.variables.keys()
Out[19]:
In [ ]: