10 from __future__
import print_function
14 from datetime
import datetime, timedelta
15 import dateutil.parser
16 from pathlib
import Path
18 IODA_CONV_PATH = Path(__file__).parent/
"@SCRIPT_LIB_PATH@"
19 if not IODA_CONV_PATH.is_dir():
20 IODA_CONV_PATH = Path(__file__).parent/
'..'/
'lib-python'
21 sys.path.append(
str(IODA_CONV_PATH.resolve()))
23 import ioda_conv_ncio
as iconv
24 from orddicts
import DefaultOrderedDict
39 ncd = nc.MFDataset(self.
filenamefilename)
40 time = ncd.variables[
'time_mjd'][:]
41 lons = ncd.variables[
'lon'][:]
42 lats = ncd.variables[
'lat'][:]
43 vals = ncd.variables[
'adt_xgm2016'][:]
44 units = ncd.variables[
'time_mjd'].units[-23:-4]
45 reftime = dateutil.parser.parse(units)
48 valKey = vName, self.
writerwriter.OvalName()
49 errKey = vName, self.
writerwriter.OerrName()
50 qcKey = vName, self.
writerwriter.OqcName()
53 for i
in range(len(lons)):
56 obs_date = reftime + timedelta(days=time[i])
58 locKey = lats[i], lons[i], obs_date.strftime(
"%Y-%m-%dT%H:%M:%SZ")
59 self.
datadata[0][locKey][valKey] = vals[i]
60 self.
datadata[0][locKey][errKey] = 0.1
61 self.
datadata[0][locKey][qcKey] = 0
64 vName =
"obs_absolute_dynamic_topography"
67 (
"latitude",
"float"),
68 (
"longitude",
"float"),
69 (
"datetime",
"string")
80 parser = argparse.ArgumentParser(
82 'Reads absolute dynamic topography (ADT) observations'
83 ' from NESDIS file(s) and converts into IODA formatted'
87 required = parser.add_argument_group(title=
'required arguments')
88 required.add_argument(
90 help=
"RADS observation input file(s)",
91 type=str, nargs=
'+', required=
True)
92 required.add_argument(
94 help=
"path of ioda output file",
95 type=str, required=
True)
96 required.add_argument(
98 help=
"base date for the center of the window",
99 metavar=
"YYYYMMDDHH", type=str, required=
True)
101 args = parser.parse_args()
102 fdate = datetime.strptime(args.date,
'%Y%m%d%H')
103 writer = iconv.NcWriter(args.output, locationKeyList)
109 AttrData[
'date_time_string'] = fdate.strftime(
"%Y-%m-%dT%H:%M:%SZ")
111 (ObsVars, LocMdata, VarMdata) = writer.ExtractObsData(altim.data)
112 writer.BuildNetcdf(ObsVars, LocMdata, VarMdata, AttrData)
115 if __name__ ==
'__main__':
def __init__(self, filename, date, writer)