In [1]:
import glob
from netCDF4 import MFDataset
import qcio
import qcutils
In [2]:
cf = qcio.load_controlfile(path='../controlfiles')
varlist = cf["Variables"].keys()
site_list = cf["Sites"].keys()
site = site_list[0]
infilename = cf["Sites"][site]["in_filepath"]+cf["Sites"][site]["in_filename"]
file_list = sorted(glob.glob(infilename))
outfilename = cf["Sites"][site]["out_filepath"]+cf["Sites"][site]["out_filename"]
site_timezone = cf["Sites"][site]["site_timezone"]
ds_60minutes = qcio.DataStructure()
ds_30minutes = qcio.DataStructure()
f = MFDataset(infilename)
valid_date = f.variables["valid_date"][:]
valid_time = f.variables["valid_time"][:]
nRecs = len(valid_date)
for attr in f.ncattrs():
ds_60minutes.globalattributes[attr] = getattr(f,attr)
flag_60minutes = numpy.zeros(nRecs)
for label in varlist:
# get the name of the ACCESS variable
access_name = cf["Variables"][label]["access_name"]
if access_name not in f.variables.keys():
log.error("Requested variable "+access_name+" not found in ACCESS data")
continue
attr = {}
for this_attr in f.variables[access_name].ncattrs():
attr[this_attr] = getattr(f.variables[access_name],this_attr)
# loop over all ACCESS grids and give them standard OzFlux names with the grid idices appended
for i in range(0,3):
for j in range(0,3):
if len(f.variables[access_name].shape)==3:
label_ij = label+'_'+str(i)+str(j)
series = f.variables[access_name][:,i,j]
qcutils.CreateSeries(ds_60minutes,label_ij,series,Flag=flag_60minutes,Attr=attr)
elif len(f.variables[access_name].shape)==4:
label_ij = label+'_'+str(i)+str(j)
series = f.variables[access_name][:,0,i,j]
qcutils.CreateSeries(ds_60minutes,label_ij,series,Flag=flag_60minutes,Attr=attr)
else:
print "Unrecognised variable ("+label+") dimension in ACCESS file"
# clean up any valid_date==0 occurrances
index = numpy.where(valid_date==0)[0]
if len(index)!=0:
for i in index:
dt = datetime.datetime.strptime(str(valid_date[i-1]),"%Y%m%d")
dt = dt+datetime.timedelta(days=1)
valid_date[i] = datetime.datetime.strftime(dt,"%Y%m%d")
# copy the precipitation from the first midnight to the second
ind_mn1=range(24,nRecs,25)
ind_mn2=range(25,nRecs,25)
series_list=ds_60minutes.series.keys()
precip_list = [x for x in series_list if "Precip" in x]
for precip in precip_list:
data,flag = qcutils.GetSeriesasMA(ds_60minutes,precip)
attr = qcutils.GetAttributeDictionary(ds_60minutes,precip)
data[ind_mn2]=data[ind_mn1]
flag[ind_mn2]=flag[ind_mn1]
qcutils.CreateSeries(ds_60minutes,precip,data,Flag=flag,Attr=attr)
In [ ]: