2 * NAME: copy_sim_met.py
4 * DESCRIPTION: Executable program to copy meteorological data from simulation
5 * files to a group called meteorology in another file.
7 * USAGE: python copy_sim_met.py -l [L1A directory] -o [output directory]
9 * Created on May 10, 2019
11 * Author: Samuel Anderson
17 import optparse
as optparse
22 LOG = logging.getLogger(
'copy_sim_met')
32 description =
'''Copy ancillary data from simulation files to output.'''
33 usage =
"usage: python copy_sim_met.py -a [aer file] \
34 -c [chm file] -m [met file] -o [output file] [options]"
37 parser = optparse.OptionParser(description=description,usage=usage,version=version)
40 mandatoryGroup = optparse.OptionGroup(parser,
"Mandatory Arguments",
41 "At a minimum these arguments must be specified")
43 parser.add_option_group(mandatoryGroup)
45 mandatoryGroup.add_option(
'-a',
'--aer',
49 help=
"The full path of the input aer file")
51 mandatoryGroup.add_option(
'-c',
'--chm',
55 help=
"The full path of the input chm file")
57 mandatoryGroup.add_option(
'-m',
'--met',
61 help=
"The full path of the input met file")
63 mandatoryGroup.add_option(
'-o',
'--out',
67 help=
"The output directory path")
70 optionalGroup = optparse.OptionGroup(parser,
"Extra Options",
71 "These options may be used to customize behavior of this program.")
73 parser.add_option(
'-v',
'--verbose',
77 help=
'each occurrence increases verbosity 1 level from ERROR: -v=WARNING -vv=INFO -vvv=DEBUG')
79 parser.add_option_group(optionalGroup)
82 (options, args) = parser.parse_args()
85 levels = [logging.ERROR, logging.WARN, logging.INFO, logging.DEBUG]
86 logging.basicConfig(level = levels[options.verbosity])
93 for m,m_err
in zip(mandatories,mand_errors):
94 if not options.__dict__[m]:
98 parser.error(
"Incomplete mandatory arguments, aborting...")
101 options.out = os.path.expanduser(options.out)
105 LOG.info(
'Copying ancillary data %s' % (options.out) )
111 df = tables.open_file(options.out,
"w")
112 mg = df.create_group(
"/",
"Meteorology",
'Meteorology data')
113 atom = tables.Float32Atom()
115 met_file = tables.open_file(options.met,
"r")
116 QV10M_o = df.create_carray(mg,
'QV10M', atom, (ydim,xdim),
"")
117 QV10M_o[:,:] = met_file.get_node(
"/",
"QV10M")[0,:,:]
118 SLP_o = df.create_carray(mg,
'SLP', atom, (ydim,xdim),
"")
119 SLP_o[:,:] = met_file.get_node(
"/",
"SLP")[0,:,:]
120 T10M_o = df.create_carray(mg,
'T10M', atom, (ydim,xdim),
"")
121 T10M_o[:,:] = met_file.get_node(
"/",
"T10M")[0,:,:]
122 TQV_o = df.create_carray(mg,
'TQV', atom, (ydim,xdim),
"")
123 TQV_o[:,:] = met_file.get_node(
"/",
"TQV")[0,:,:]
124 PS_o = df.create_carray(mg,
'PS', atom, (ydim,xdim),
"")
125 PS_o[:,:] = met_file.get_node(
"/",
"PS")[0,:,:]
126 U10M_o = df.create_carray(mg,
'U10M', atom, (ydim,xdim),
"")
127 U10M_o[:,:] = met_file.get_node(
"/",
"U10M")[0,:,:]
128 V10M_o = df.create_carray(mg,
'V10M', atom, (ydim,xdim),
"")
129 V10M_o[:,:] = met_file.get_node(
"/",
"V10M")[0,:,:]
132 chm_file = tables.open_file(options.chm,
"r")
135 aer_file = tables.open_file(options.aer,
"r")
142 print e.message +
" ... exiting"
145 LOG.info(
'Exiting...')
148 if __name__==
'__main__':