1 |
""" |
---|
2 |
Make level 2 sodar NetCDF for latest level 1 NetCDF. |
---|
3 |
|
---|
4 |
For sodar data after January 2013, level 2 NetCDF |
---|
5 |
is the same as level 1 NetCDF. So simply copy level 1 |
---|
6 |
to level 2, except change the process_level global |
---|
7 |
attribute to 'level2'. |
---|
8 |
|
---|
9 |
Sodar data prior to February 2013 was previously processed |
---|
10 |
from level 1 to level 2 by a manual process. This script |
---|
11 |
simply ensures that the latest sodar data is also copied |
---|
12 |
to level 2. |
---|
13 |
""" |
---|
14 |
|
---|
15 |
__author__ = 'Chris Calloway' |
---|
16 |
__email__ = 'cbc@unc.edu' |
---|
17 |
__copyright__ = 'Copyright 2014 UNC-CH Marine Sciences' |
---|
18 |
__version__ = '1.0.0' |
---|
19 |
|
---|
20 |
import os |
---|
21 |
import datetime |
---|
22 |
import pycdf as cdf |
---|
23 |
from glob import glob |
---|
24 |
|
---|
25 |
level1 = "/seacoos/data/nccoos/level1/billymitchell/sodar1" |
---|
26 |
level2 = "/seacoos/data/nccoos/level2/billymitchell/sodar1" |
---|
27 |
|
---|
28 |
ncext = 'nc' |
---|
29 |
ncs = os.path.join(level1, '*' + os.extsep + ncext) |
---|
30 |
ncs = glob(ncs) |
---|
31 |
ncs = [os.path.basename(nc) for nc in ncs] |
---|
32 |
ncs.sort() |
---|
33 |
nc = ncs[-1] |
---|
34 |
|
---|
35 |
try: |
---|
36 |
now = datetime.datetime.utcnow().replace(microsecond=0).strftime("%Y-%m-%d %H:%M:%S") |
---|
37 |
srcnc = os.path.join(level1, nc) |
---|
38 |
destnc = os.path.join(level2, nc) |
---|
39 |
print now, __file__, "reading", srcnc |
---|
40 |
src = cdf.CDF(srcnc) |
---|
41 |
dest = cdf.CDF(destnc, cdf.NC.WRITE | cdf.NC.CREATE | cdf.NC.TRUNC) |
---|
42 |
dest.automode(True) |
---|
43 |
for key in src.attributes().keys(): |
---|
44 |
if key not in ('process_level', 'release_date', 'creation_date', 'modification_date'): |
---|
45 |
src.attr(key).copy(dest) |
---|
46 |
dest.release_date = now |
---|
47 |
dest.creation_date = now |
---|
48 |
dest.modification_date = now |
---|
49 |
dest.process_level = 'level2' |
---|
50 |
for key, (value, index, flag) in src.dimensions(True).items(): |
---|
51 |
if flag: |
---|
52 |
dest.def_dim(key, cdf.NC.UNLIMITED) |
---|
53 |
else: |
---|
54 |
dest.def_dim(key, value) |
---|
55 |
for key, (dims, lens, vtype, index) in src.variables().items(): |
---|
56 |
var = dest.def_var(key, vtype, dims) |
---|
57 |
for attr in src.var(key).attributes().keys(): |
---|
58 |
src.var(key).attr(attr).copy(var) |
---|
59 |
data = src.var(key).get() |
---|
60 |
var.put(data, (0,) * data.ndim, data.shape) |
---|
61 |
dest.sync() |
---|
62 |
finally: |
---|
63 |
src.close() |
---|
64 |
dest.close() |
---|
65 |
now = datetime.datetime.utcnow().replace(microsecond=0).strftime("%Y-%m-%d %H:%M:%S") |
---|
66 |
print now, __file__, "wrote", destnc |
---|