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)


AliceSpringsMulga: Processing 309 files ...
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110514.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110515.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110516.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110517.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110518.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110519.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110520.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110521.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110522.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110523.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110524.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110529.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110530.nc
ACCESS variable accum_prcp not found in ../../ACCESS/AliceSpringsMulga/2011/access_Alice_Springs_Mulga_20110531.nc

In [19]:
f.variables.keys()


Out[19]:
['ps',
 'Fn_sw',
 'Fe',
 'valid_time',
 'Ts',
 'q',
 'ustar',
 'Precip',
 'u',
 'Fn_lw',
 'v',
 'Fh',
 'Fsd',
 'Sws',
 'valid_date',
 'Fld',
 'Ta']

In [ ]: