""" 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 ensures 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() # months in order nc = ncs[-1] # latest month 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