Index: sodarlevel2/trunk/sodarlevel2.py =================================================================== --- (revision ) +++ sodarlevel2/trunk/sodarlevel2.py (revision 523) @@ -1,0 +1,66 @@ +""" +Make level 2 sodar NetCDF for latest level 1 NetCDF. + +For sodar data after January 2013, level 2 NetCDF +is the same as level 1 NetCDF. So simply copy level 1 +to level 2, except change the process_level global +attribute to 'level2'. + +Sodar data prior to February 2013 was previously processed +from level 1 to level 2 by a manual process. This script +simply insures that the latest sodar data is also copied +to level 2. +""" + +__author__ = 'Chris Calloway' +__email__ = 'cbc@unc.edu' +__copyright__ = 'Copyright 2014 UNC-CH Marine Sciences' +__version__ = '1.0.0' + +import os +import datetime +import pycdf as cdf +from glob import glob + +level1 = "/seacoos/data/nccoos/level1/billymitchell/sodar1" +level2 = "/seacoos/data/nccoos/level2/billymitchell/sodar1" + +ncext = 'nc' +ncs = os.path.join(level1, '*' + os.extsep + ncext) +ncs = glob(ncs) +ncs = [os.path.basename(nc) for nc in ncs] +ncs.sort() +nc = ncs[-1] + +try: + now = datetime.datetime.utcnow().replace(microsecond=0).strftime("%Y-%m-%d %H:%M:%S") + srcnc = os.path.join(level1, nc) + destnc = os.path.join(level2, nc) + print now, __file__, "reading", srcnc + src = cdf.CDF(srcnc) + dest = cdf.CDF(destnc, cdf.NC.WRITE | cdf.NC.CREATE | cdf.NC.TRUNC) + dest.automode(True) + for key in src.attributes().keys(): + if key not in ('process_level', 'release_date', 'creation_date', 'modification_date'): + src.attr(key).copy(dest) + dest.release_date = now + dest.creation_date = now + dest.modification_date = now + dest.process_level = 'level2' + for key, (value, index, flag) in src.dimensions(True).items(): + if flag: + dest.def_dim(key, cdf.NC.UNLIMITED) + else: + dest.def_dim(key, value) + for key, (dims, lens, vtype, index) in src.variables().items(): + var = dest.def_var(key, vtype, dims) + for attr in src.var(key).attributes().keys(): + src.var(key).attr(attr).copy(var) + data = src.var(key).get() + var.put(data, (0,) * data.ndim, data.shape) + dest.sync() +finally: + src.close() + dest.close() +now = datetime.datetime.utcnow().replace(microsecond=0).strftime("%Y-%m-%d %H:%M:%S") +print now, __file__, "wrote", destnc