7 from multiprocessing
import Pool
8 from pathlib
import Path
10 IODA_CONV_PATH = Path(__file__).parent/
"@SCRIPT_LIB_PATH@"
11 if not IODA_CONV_PATH.is_dir():
12 IODA_CONV_PATH = Path(__file__).parent/
'..'/
'lib-python'
13 sys.path.append(
str(IODA_CONV_PATH.resolve()))
15 import gsi_ncdiag
as gsid
19 print(
"Processing:"+
str(convfile))
21 Diag = gsid.Conv(convfile)
23 Diag.toIODAobs(outdir, platforms=platforms)
25 print(
"Time (OBS) %s[%s]: %.3g sec" % (covfile,
",".join(platforms), time.time() - startt))
30 print(
"Processing run_radiances_obs:%s" % radfile)
32 Diag = gsid.Radiances(radfile)
34 Diag.toIODAobs(outdir, obsbias, qcvars, testrefs)
36 print(
"Time (OBS) %s: %.3g sec" % (radfile, time.time() - startt))
41 print(
"Processing:"+
str(aodfile))
43 Diag = gsid.AOD(aodfile)
45 Diag.toIODAobs(outdir)
46 print(
"Time (OBS) %s: %.3g sec" % (aodfile, time.time() - startt))
51 print(
"Processing:"+
str(ozfile))
53 Diag = gsid.Ozone(ozfile)
55 Diag.toIODAobs(outdir)
56 print(
"Time (OBS) %s: %.3g sec" % (ozfile, time.time() - startt))
61 print(
"Processing:"+
str(convfile))
63 Diag = gsid.Conv(convfile)
65 Diag.toGeovals(outdir)
66 print(
"Time (GEO) %s: %.3g sec" % (convfile, time.time() - startt))
71 print(
"Processing run_radiances_geo:%s" % radfile)
73 Diag = gsid.Radiances(radfile)
75 Diag.toGeovals(outdir)
76 print(
"Time (GEO) %s: %.3g sec" % (radfile, time.time() - startt))
81 print(
"Processing:"+
str(aodfile))
83 Diag = gsid.AOD(aodfile)
85 Diag.toGeovals(outdir)
86 print(
"Time (GEO) %s: %.3g sec" % (aodfile, time.time() - startt))
91 print(
"Processing:"+
str(ozfile))
93 Diag = gsid.Ozone(ozfile)
95 Diag.toGeovals(outdir)
96 print(
"Time (GEO) %s: %.3g sec" % (ozfile, time.time() - startt))
101 print(
"Processing run_radiances_obsdiag: %s" % radfile)
103 Diag = gsid.Radiances(radfile)
105 Diag.toObsdiag(outdir)
106 print(
"Time (DIAG) %s: %.3g sec" % (radfile, time.time() - startt))
110 ScriptName = os.path.basename(sys.argv[0])
113 ap = argparse.ArgumentParser()
114 ap.add_argument(
"-n",
"--nprocs",
115 help=
"Number of tasks/processors for multiprocessing")
116 ap.add_argument(
"input_dir", help=
"Path to concatenated GSI diag files")
117 ap.add_argument(
"-o",
"--obs_dir",
118 help=
"Path to directory to output observations")
119 ap.add_argument(
"-g",
"--geovals_dir",
120 help=
"Path to directory to output observations")
121 ap.add_argument(
"-d",
"--obsdiag_dir",
122 help=
"Path to directory to output observations")
123 ap.add_argument(
"-b",
"--add_obsbias", default=
False,
124 help=
"Add ObsBias group to output observations")
125 ap.add_argument(
"-q",
"--add_qcvars", default=
False,
126 help=
"Add QC variables to output observations")
127 ap.add_argument(
"-r",
"--add_testrefs", default=
False,
128 help=
"Add TestReference group to output observations")
130 MyArgs = ap.parse_args()
133 nprocs =
int(MyArgs.nprocs)
137 DiagDir = MyArgs.input_dir
139 print(
"Proc GSI Using %d processors." % nprocs)
140 obspool = Pool(processes=nprocs)
143 ObsDir = MyArgs.obs_dir
144 if not Path(ObsDir).is_dir():
145 raise Exception(
"Obs dir: '%s' does not exist." % ObsDir)
146 ObsBias = MyArgs.add_obsbias
147 QCVars = MyArgs.add_qcvars
148 TestRefs = MyArgs.add_testrefs
151 convfiles = glob.glob(DiagDir+
'/*conv*')
152 for convfile
in convfiles:
153 splitfname = convfile.split(
'/')[-1].split(
'_')
154 if 'conv' in splitfname:
155 i = splitfname.index(
'conv')
156 c =
"_".join(splitfname[i:i + 2])
158 for p
in gsid.conv_platforms[c]:
159 res = obspool.apply_async(run_conv_obs, args=(convfile, ObsDir, [p]))
163 radfiles = glob.glob(DiagDir+
'/diag*')
164 for radfile
in radfiles:
166 for p
in gsid.rad_sensors:
170 res = obspool.apply_async(run_radiances_obs, args=(radfile, ObsDir, ObsBias, QCVars, TestRefs))
173 for radfile
in radfiles:
175 for p
in gsid.aod_sensors:
179 res = obspool.apply_async(run_aod_obs, args=(radfile, ObsDir))
181 for radfile
in radfiles:
183 for p
in gsid.oz_sensors:
187 res = obspool.apply_async(run_oz_obs, args=(radfile, ObsDir))
190 if MyArgs.geovals_dir:
191 GeoDir = MyArgs.geovals_dir
194 convfiles = glob.glob(DiagDir+
'/*conv*')
195 for convfile
in convfiles:
196 res = obspool.apply_async(run_conv_geo, args=(convfile, GeoDir))
198 radfiles = glob.glob(DiagDir+
'/diag*')
199 for radfile
in radfiles:
201 for p
in gsid.rad_sensors:
205 res = obspool.apply_async(run_radiances_geo, args=(radfile, GeoDir))
208 for radfile
in radfiles:
210 for p
in gsid.aod_sensors:
214 res = obspool.apply_async(run_aod_geo, args=(radfile, GeoDir))
216 for radfile
in radfiles:
218 for p
in gsid.oz_sensors:
222 res = obspool.apply_async(run_oz_geo, args=(radfile, GeoDir))
225 if MyArgs.obsdiag_dir:
226 ObsdiagDir = MyArgs.obsdiag_dir
228 radfiles = glob.glob(DiagDir+
'/diag*')
229 for radfile
in radfiles:
231 for p
in gsid.rad_sensors:
235 res = obspool.apply_async(run_radiances_obsdiag, args=(radfile, ObsdiagDir))
def run_conv_obs(convfile, outdir, platforms)
def run_radiances_geo(radfile, outdir)
def run_radiances_obs(radfile, outdir, obsbias, qcvars, testrefs)
def run_aod_geo(aodfile, outdir)
def run_oz_obs(ozfile, outdir)
def run_radiances_obsdiag(radfile, outdir)
def run_aod_obs(aodfile, outdir)
def run_oz_geo(ozfile, outdir)
def run_conv_geo(convfile, outdir)