13 from datetime
import datetime, timedelta
15 from pathlib
import Path
17 IODA_CONV_PATH = Path(__file__).parent/
"@SCRIPT_LIB_PATH@"
18 if not IODA_CONV_PATH.is_dir():
19 IODA_CONV_PATH = Path(__file__).parent/
'..'/
'lib-python'
20 sys.path.append(
str(IODA_CONV_PATH.resolve()))
22 import ioda_conv_ncio
as iconv
23 from orddicts
import DefaultOrderedDict
26 vName =
"sea_surface_salinity"
29 (
"latitude",
"float"),
30 (
"longitude",
"float"),
31 (
"datetime",
"string")
49 valKey = vName, self.
writerwriter.OvalName()
50 errKey = vName, self.
writerwriter.OerrName()
51 qcKey = vName, self.
writerwriter.OqcName()
54 print(
" Reading file: ", f)
55 ncd = nc.Dataset(f,
'r')
61 'sss_err':
'Sigma_SSS_corr',
62 'sss_qc':
'Dg_quality_SSS_corr'
64 lon = ncd.variables[
'Longitude'][:]
65 lat = ncd.variables[
'Latitude'][:]
66 sss = ncd.variables[
'SSS_corr'][:]
67 sss_err = ncd.variables[
'Sigma_SSS_corr'][:]
68 sss_qc = ncd.variables[
'Dg_quality_SSS_corr'][:]
69 sss_qc = sss_qc.astype(int)
71 mask = np.logical_not(sss.mask)
75 sss_err = sss_err[mask]
78 for i
in range(len(lon)):
85 date1 = f[n+19:n+19+8]
86 HH1 = f[n+19+9:n+19+11]
87 MM1 = f[n+19+11:n+19+13]
88 SS1 = f[n+19+13:n+19+15]
90 seconds = (datetime.strptime(date1+HH1+MM1+SS1,
'%Y%m%d%H%M%S') - datetime.strptime(
91 date1,
'%Y%m%d')).total_seconds()
92 basetime = datetime.strptime(date1,
'%Y%m%d')
93 obs_date = basetime + timedelta(seconds=
int(seconds))
94 locKey = lat[i], lon[i], obs_date.strftime(
"%Y-%m-%dT%H:%M:%SZ")
95 self.
datadata[0][locKey][valKey] = sss[i]
96 self.
datadata[0][locKey][errKey] = sss_err[i]
97 self.
datadata[0][locKey][qcKey] = sss_qc[i]
103 parser = argparse.ArgumentParser(
105 'Read JPL/RSS SMOS sea surface salinity (SSS) file(s) and convert'
106 ' to a concatenated IODA formatted output file.')
108 required = parser.add_argument_group(title=
'required arguments')
109 required.add_argument(
111 help=
"name of sss input file(s)",
112 type=str, nargs=
'+', required=
True)
113 required.add_argument(
115 help=
"name of ioda output file",
116 type=str, required=
True)
117 required.add_argument(
119 help=
"base date for the center of the window",
120 metavar=
"YYYYMMDDHH", type=str, required=
True)
121 args = parser.parse_args()
122 fdate = datetime.strptime(args.date,
'%Y%m%d%H')
124 writer = iconv.NcWriter(args.output, locationKeyList)
127 sal =
Salinity(args.input, fdate, writer)
130 AttrData[
'date_time_string'] = fdate.strftime(
"%Y-%m-%dT%H:%M:%SZ")
132 (ObsVars, LocMdata, VarMdata) = writer.ExtractObsData(sal.data)
133 writer.BuildNetcdf(ObsVars, LocMdata, VarMdata, AttrData)
136 if __name__ ==
'__main__':
def __init__(self, filenames, date, writer)