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 [ ]: