6 from __future__
import print_function
12 from datetime
import datetime, timedelta
13 import dateutil.parser
14 from pathlib
import Path
16 IODA_CONV_PATH = Path(__file__).parent/
"@SCRIPT_LIB_PATH@"
17 if not IODA_CONV_PATH.is_dir():
18 IODA_CONV_PATH = Path(__file__).parent/
'..'/
'lib-python'
19 sys.path.append(
str(IODA_CONV_PATH.resolve()))
21 import ioda_conv_ncio
as iconv
22 from orddicts
import DefaultOrderedDict
24 vName = [
"sea_water_meridional_current",
25 "sea_water_zonal_current"]
29 (
"latitude",
"float"),
30 (
"longitude",
"float"),
31 (
"datetime",
"string")
51 ncd = nc.MFDataset(self.
filenamefilename)
52 time = ncd.variables[
'time'][:]
53 lons = ncd.variables[
'lon'][:]
54 lats = ncd.variables[
'lat'][:]
55 vals_u = ncd.variables[
'u'][:]
56 vals_v = ncd.variables[
'v'][:]
57 units =
'1970-01-01 00:00:00'
58 reftime = dateutil.parser.parse(units)
60 lons, lats = np.meshgrid(lons, lats)
63 vals_u = vals_u.flatten()
64 vals_v = vals_v.flatten()
65 time = np.matlib.repmat(time, len(lons), 1)
67 for i
in range(len(lons)):
69 valKey = vName[j], self.
writerwriter.OvalName()
70 errKey = vName[j], self.
writerwriter.OerrName()
71 qcKey = vName[j], self.
writerwriter.OqcName()
74 obs_date = reftime + timedelta(seconds=
int(time[i]))
75 locKey = lats[i], lons[i], obs_date.strftime(
"%Y-%m-%dT%H:%M:%SZ")
77 self.
datadata[0][locKey][valKey] = vals_u[i]
78 self.
datadata[0][locKey][errKey] = 0.1
79 self.
datadata[0][locKey][qcKey] = 0
81 self.
datadata[0][locKey][valKey] = vals_v[i]
82 self.
datadata[0][locKey][errKey] = 0.1
83 self.
datadata[0][locKey][qcKey] = 0
89 parser = argparse.ArgumentParser(
91 'Reads marine HF radar radial velocity from archiving'
92 'and converts into IODA formatted'
96 required = parser.add_argument_group(title=
'required arguments')
97 required.add_argument(
99 help=
"Radar observation input file(s)",
100 type=str, nargs=
'+', required=
True)
101 required.add_argument(
103 help=
"path of ioda output file",
104 type=str, required=
True)
105 required.add_argument(
107 help=
"base date for the center of the window",
108 metavar=
"YYYYMMDDHH", type=str, required=
True)
110 args = parser.parse_args()
111 fdate = datetime.strptime(args.date,
'%Y%m%d%H')
112 writer = iconv.NcWriter(args.output, locationKeyList)
118 AttrData[
'date_time_string'] = fdate.strftime(
"%Y-%m-%dT%H:%M:%SZ")
120 (ObsVars, LocMdata, VarMdata) = writer.ExtractObsData(altim.data)
121 writer.BuildNetcdf(ObsVars, LocMdata, VarMdata, AttrData)
124 if __name__ ==
'__main__':
def __init__(self, filename, date, writer)