vortex-nwp 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vortex/__init__.py +159 -0
- vortex/algo/__init__.py +13 -0
- vortex/algo/components.py +2462 -0
- vortex/algo/mpitools.py +1953 -0
- vortex/algo/mpitools_templates/__init__.py +1 -0
- vortex/algo/mpitools_templates/envelope_wrapper_default.tpl +27 -0
- vortex/algo/mpitools_templates/envelope_wrapper_mpiauto.tpl +29 -0
- vortex/algo/mpitools_templates/wrapstd_wrapper_default.tpl +18 -0
- vortex/algo/serversynctools.py +171 -0
- vortex/config.py +112 -0
- vortex/data/__init__.py +19 -0
- vortex/data/abstractstores.py +1510 -0
- vortex/data/containers.py +835 -0
- vortex/data/contents.py +622 -0
- vortex/data/executables.py +275 -0
- vortex/data/flow.py +119 -0
- vortex/data/geometries.ini +2689 -0
- vortex/data/geometries.py +799 -0
- vortex/data/handlers.py +1230 -0
- vortex/data/outflow.py +67 -0
- vortex/data/providers.py +487 -0
- vortex/data/resources.py +207 -0
- vortex/data/stores.py +1390 -0
- vortex/data/sync_templates/__init__.py +0 -0
- vortex/gloves.py +309 -0
- vortex/layout/__init__.py +20 -0
- vortex/layout/contexts.py +577 -0
- vortex/layout/dataflow.py +1220 -0
- vortex/layout/monitor.py +969 -0
- vortex/nwp/__init__.py +14 -0
- vortex/nwp/algo/__init__.py +21 -0
- vortex/nwp/algo/assim.py +537 -0
- vortex/nwp/algo/clim.py +1086 -0
- vortex/nwp/algo/coupling.py +831 -0
- vortex/nwp/algo/eda.py +840 -0
- vortex/nwp/algo/eps.py +785 -0
- vortex/nwp/algo/forecasts.py +886 -0
- vortex/nwp/algo/fpserver.py +1303 -0
- vortex/nwp/algo/ifsnaming.py +463 -0
- vortex/nwp/algo/ifsroot.py +404 -0
- vortex/nwp/algo/monitoring.py +263 -0
- vortex/nwp/algo/mpitools.py +694 -0
- vortex/nwp/algo/odbtools.py +1258 -0
- vortex/nwp/algo/oopsroot.py +916 -0
- vortex/nwp/algo/oopstests.py +220 -0
- vortex/nwp/algo/request.py +660 -0
- vortex/nwp/algo/stdpost.py +1641 -0
- vortex/nwp/data/__init__.py +30 -0
- vortex/nwp/data/assim.py +380 -0
- vortex/nwp/data/boundaries.py +314 -0
- vortex/nwp/data/climfiles.py +521 -0
- vortex/nwp/data/configfiles.py +153 -0
- vortex/nwp/data/consts.py +954 -0
- vortex/nwp/data/ctpini.py +149 -0
- vortex/nwp/data/diagnostics.py +209 -0
- vortex/nwp/data/eda.py +147 -0
- vortex/nwp/data/eps.py +432 -0
- vortex/nwp/data/executables.py +1045 -0
- vortex/nwp/data/fields.py +111 -0
- vortex/nwp/data/gridfiles.py +380 -0
- vortex/nwp/data/logs.py +584 -0
- vortex/nwp/data/modelstates.py +363 -0
- vortex/nwp/data/monitoring.py +193 -0
- vortex/nwp/data/namelists.py +696 -0
- vortex/nwp/data/obs.py +840 -0
- vortex/nwp/data/oopsexec.py +74 -0
- vortex/nwp/data/providers.py +207 -0
- vortex/nwp/data/query.py +206 -0
- vortex/nwp/data/stores.py +160 -0
- vortex/nwp/data/surfex.py +337 -0
- vortex/nwp/syntax/__init__.py +9 -0
- vortex/nwp/syntax/stdattrs.py +437 -0
- vortex/nwp/tools/__init__.py +10 -0
- vortex/nwp/tools/addons.py +40 -0
- vortex/nwp/tools/agt.py +67 -0
- vortex/nwp/tools/bdap.py +59 -0
- vortex/nwp/tools/bdcp.py +41 -0
- vortex/nwp/tools/bdm.py +24 -0
- vortex/nwp/tools/bdmp.py +54 -0
- vortex/nwp/tools/conftools.py +1661 -0
- vortex/nwp/tools/drhook.py +66 -0
- vortex/nwp/tools/grib.py +294 -0
- vortex/nwp/tools/gribdiff.py +104 -0
- vortex/nwp/tools/ifstools.py +203 -0
- vortex/nwp/tools/igastuff.py +273 -0
- vortex/nwp/tools/mars.py +68 -0
- vortex/nwp/tools/odb.py +657 -0
- vortex/nwp/tools/partitioning.py +258 -0
- vortex/nwp/tools/satrad.py +71 -0
- vortex/nwp/util/__init__.py +6 -0
- vortex/nwp/util/async.py +212 -0
- vortex/nwp/util/beacon.py +40 -0
- vortex/nwp/util/diffpygram.py +447 -0
- vortex/nwp/util/ens.py +279 -0
- vortex/nwp/util/hooks.py +139 -0
- vortex/nwp/util/taskdeco.py +85 -0
- vortex/nwp/util/usepygram.py +697 -0
- vortex/nwp/util/usetnt.py +101 -0
- vortex/proxy.py +6 -0
- vortex/sessions.py +374 -0
- vortex/syntax/__init__.py +9 -0
- vortex/syntax/stdattrs.py +867 -0
- vortex/syntax/stddeco.py +185 -0
- vortex/toolbox.py +1117 -0
- vortex/tools/__init__.py +20 -0
- vortex/tools/actions.py +523 -0
- vortex/tools/addons.py +316 -0
- vortex/tools/arm.py +96 -0
- vortex/tools/compression.py +325 -0
- vortex/tools/date.py +27 -0
- vortex/tools/ddhpack.py +10 -0
- vortex/tools/delayedactions.py +782 -0
- vortex/tools/env.py +541 -0
- vortex/tools/folder.py +834 -0
- vortex/tools/grib.py +738 -0
- vortex/tools/lfi.py +953 -0
- vortex/tools/listings.py +423 -0
- vortex/tools/names.py +637 -0
- vortex/tools/net.py +2124 -0
- vortex/tools/odb.py +10 -0
- vortex/tools/parallelism.py +368 -0
- vortex/tools/prestaging.py +210 -0
- vortex/tools/rawfiles.py +10 -0
- vortex/tools/schedulers.py +480 -0
- vortex/tools/services.py +940 -0
- vortex/tools/storage.py +996 -0
- vortex/tools/surfex.py +61 -0
- vortex/tools/systems.py +3976 -0
- vortex/tools/targets.py +440 -0
- vortex/util/__init__.py +9 -0
- vortex/util/config.py +1122 -0
- vortex/util/empty.py +24 -0
- vortex/util/helpers.py +216 -0
- vortex/util/introspection.py +69 -0
- vortex/util/iosponge.py +80 -0
- vortex/util/roles.py +49 -0
- vortex/util/storefunctions.py +129 -0
- vortex/util/structs.py +26 -0
- vortex/util/worker.py +162 -0
- vortex_nwp-2.0.0.dist-info/METADATA +67 -0
- vortex_nwp-2.0.0.dist-info/RECORD +144 -0
- vortex_nwp-2.0.0.dist-info/WHEEL +5 -0
- vortex_nwp-2.0.0.dist-info/licenses/LICENSE +517 -0
- vortex_nwp-2.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,954 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Various Resources for constant files used in NWP.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import footprints
|
|
6
|
+
from ..syntax.stdattrs import gvar
|
|
7
|
+
from vortex.data.contents import DataRaw, JsonDictContent, TextContent
|
|
8
|
+
from vortex.data.geometries import GaussGeometry, LonlatGeometry
|
|
9
|
+
from vortex.data.outflow import ModelGeoResource, ModelResource, StaticResource
|
|
10
|
+
from vortex.syntax.stdattrs import month_deco
|
|
11
|
+
from vortex.syntax.stddeco import (
|
|
12
|
+
namebuilding_append,
|
|
13
|
+
namebuilding_delete,
|
|
14
|
+
namebuilding_insert,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
#: No automatic export
|
|
18
|
+
__all__ = []
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class GenvModelResource(ModelResource):
|
|
22
|
+
"""Abstract class for gget driven resources."""
|
|
23
|
+
|
|
24
|
+
_abstract = True
|
|
25
|
+
_footprint = [
|
|
26
|
+
gvar,
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class GenvModelGeoResource(ModelGeoResource):
|
|
31
|
+
"""Abstract class for gget driven resources."""
|
|
32
|
+
|
|
33
|
+
_abstract = True
|
|
34
|
+
_footprint = [
|
|
35
|
+
gvar,
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class GPSList(GenvModelResource):
|
|
40
|
+
"""
|
|
41
|
+
Class of a GPS satellite ground coefficients. A Genvkey can be given.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
_footprint = dict(
|
|
45
|
+
info="Set of GPS coefficients",
|
|
46
|
+
attr=dict(
|
|
47
|
+
kind=dict(
|
|
48
|
+
values=["gpslist", "listgpssol"],
|
|
49
|
+
remap=dict(listgpssol="gpslist"),
|
|
50
|
+
),
|
|
51
|
+
clscontents=dict(
|
|
52
|
+
default=TextContent,
|
|
53
|
+
),
|
|
54
|
+
gvar=dict(default="list_gpssol"),
|
|
55
|
+
),
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def realkind(self):
|
|
60
|
+
return "gpslist"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class MODESList(GenvModelResource):
|
|
64
|
+
"""
|
|
65
|
+
Class of a MODE-S satellite white list for Bator.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
_footprint = dict(
|
|
69
|
+
info="Set of MODE-S coefficients",
|
|
70
|
+
attr=dict(
|
|
71
|
+
kind=dict(
|
|
72
|
+
values=["modeslist", "listmodes"],
|
|
73
|
+
remap=dict(listmodes="modeslist"),
|
|
74
|
+
),
|
|
75
|
+
clscontents=dict(
|
|
76
|
+
default=TextContent,
|
|
77
|
+
),
|
|
78
|
+
gvar=dict(
|
|
79
|
+
default="list_modes",
|
|
80
|
+
),
|
|
81
|
+
),
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def realkind(self):
|
|
86
|
+
return "modeslist"
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class BatodbConf(GenvModelResource):
|
|
90
|
+
"""
|
|
91
|
+
Default parameters for BATOR execution. A Genvkey can be given.
|
|
92
|
+
"""
|
|
93
|
+
|
|
94
|
+
_footprint = dict(
|
|
95
|
+
info="Batodb parametrization",
|
|
96
|
+
attr=dict(
|
|
97
|
+
kind=dict(
|
|
98
|
+
values=["batodbconf", "batorconf", "parambator"],
|
|
99
|
+
remap=dict(
|
|
100
|
+
parambator="batodbconf",
|
|
101
|
+
batorconf="batodbconf",
|
|
102
|
+
),
|
|
103
|
+
),
|
|
104
|
+
clscontents=dict(
|
|
105
|
+
default=TextContent,
|
|
106
|
+
),
|
|
107
|
+
gvar=dict(default="param_bator_cfg"),
|
|
108
|
+
),
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def realkind(self):
|
|
113
|
+
return "batodbconf"
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class BatorAveragingMask(GenvModelResource):
|
|
117
|
+
"""
|
|
118
|
+
Configuration file that drives the averaging of radiances in Bator.'''
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
_footprint = dict(
|
|
122
|
+
info="Definition file for the bator averaging",
|
|
123
|
+
attr=dict(
|
|
124
|
+
kind=dict(
|
|
125
|
+
values=[
|
|
126
|
+
"avgmask",
|
|
127
|
+
]
|
|
128
|
+
),
|
|
129
|
+
sensor=dict(),
|
|
130
|
+
clscontents=dict(
|
|
131
|
+
default=TextContent,
|
|
132
|
+
),
|
|
133
|
+
gvar=dict(
|
|
134
|
+
default="MASK_[sensor]",
|
|
135
|
+
),
|
|
136
|
+
),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def realkind(self):
|
|
141
|
+
return "avgmask"
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class AtmsMask(BatorAveragingMask):
|
|
145
|
+
"""Kept for backward compatibility with cy40 (see BatorAveragingMask)."""
|
|
146
|
+
|
|
147
|
+
_footprint = dict(
|
|
148
|
+
attr=dict(
|
|
149
|
+
kind=dict(
|
|
150
|
+
values=["atms", "atmsmask"],
|
|
151
|
+
remap=dict(atms="atmsmask"),
|
|
152
|
+
),
|
|
153
|
+
sensor=dict(
|
|
154
|
+
default="atms",
|
|
155
|
+
optional=True,
|
|
156
|
+
),
|
|
157
|
+
)
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
@property
|
|
161
|
+
def realkind(self):
|
|
162
|
+
return "atmsmask"
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class RtCoef(GenvModelResource):
|
|
166
|
+
"""
|
|
167
|
+
Class of a tar-zip file of satellite coefficients. A Genvkey can be given.
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
_footprint = dict(
|
|
171
|
+
info="Set of satellite coefficients",
|
|
172
|
+
attr=dict(
|
|
173
|
+
kind=dict(values=["rtcoef", "mwave_rtcoef"]),
|
|
174
|
+
gvar=dict(default="[kind]_tgz"),
|
|
175
|
+
),
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
@property
|
|
179
|
+
def realkind(self):
|
|
180
|
+
return "rtcoef"
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
class RRTM(GenvModelResource):
|
|
184
|
+
"""
|
|
185
|
+
Class of a tar-zip file of coefficients for radiative transfers computations.
|
|
186
|
+
A Genvkey can be given.
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
_footprint = dict(
|
|
190
|
+
info="Coefficients of RRTM scheme",
|
|
191
|
+
attr=dict(
|
|
192
|
+
kind=dict(
|
|
193
|
+
values=[
|
|
194
|
+
"rrtm",
|
|
195
|
+
]
|
|
196
|
+
),
|
|
197
|
+
gvar=dict(default="rrtm_const"),
|
|
198
|
+
),
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
@property
|
|
202
|
+
def realkind(self):
|
|
203
|
+
return "rrtm"
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class CoefModel(GenvModelResource):
|
|
207
|
+
"""
|
|
208
|
+
TODO.
|
|
209
|
+
A Genvkey can be given.
|
|
210
|
+
"""
|
|
211
|
+
|
|
212
|
+
_footprint = dict(
|
|
213
|
+
info="Coefficients for some purpose... but which one ?",
|
|
214
|
+
attr=dict(
|
|
215
|
+
kind=dict(
|
|
216
|
+
values=["coef_model", "coefmodel"],
|
|
217
|
+
remap=dict(autoremap="first"),
|
|
218
|
+
),
|
|
219
|
+
gvar=dict(default="coef_model"),
|
|
220
|
+
),
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
@property
|
|
224
|
+
def realkind(self):
|
|
225
|
+
return "coef_model"
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
class ScatCMod5(GenvModelResource):
|
|
229
|
+
"""
|
|
230
|
+
TODO.
|
|
231
|
+
A Genvkey can be given.
|
|
232
|
+
"""
|
|
233
|
+
|
|
234
|
+
_footprint = dict(
|
|
235
|
+
info="Coefficients for some purpose... but which one ?",
|
|
236
|
+
attr=dict(
|
|
237
|
+
kind=dict(
|
|
238
|
+
values=["cmod5", "cmod5table", "scat_cmod5", "scatcmod5"],
|
|
239
|
+
remap=dict(autoremap="first"),
|
|
240
|
+
),
|
|
241
|
+
gvar=dict(default="scat_cmod5_table"),
|
|
242
|
+
),
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
@property
|
|
246
|
+
def realkind(self):
|
|
247
|
+
return "cmod5"
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
class BcorIRSea(GenvModelResource):
|
|
251
|
+
"""
|
|
252
|
+
Obsolete.
|
|
253
|
+
A Genvkey can be given.
|
|
254
|
+
"""
|
|
255
|
+
|
|
256
|
+
_footprint = dict(
|
|
257
|
+
info="Some bias ?",
|
|
258
|
+
attr=dict(
|
|
259
|
+
kind=dict(
|
|
260
|
+
values=["bcor"],
|
|
261
|
+
),
|
|
262
|
+
scope=dict(
|
|
263
|
+
values=["irsea"],
|
|
264
|
+
),
|
|
265
|
+
gvar=dict(default="bcor_meto_[scope]"),
|
|
266
|
+
),
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
@property
|
|
270
|
+
def realkind(self):
|
|
271
|
+
return "bcor_irsea"
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
class RmtbError(GenvModelResource):
|
|
275
|
+
"""
|
|
276
|
+
Obsolete.
|
|
277
|
+
A Genvkey can be given.
|
|
278
|
+
"""
|
|
279
|
+
|
|
280
|
+
_footprint = dict(
|
|
281
|
+
info="Some bias ?",
|
|
282
|
+
attr=dict(
|
|
283
|
+
kind=dict(
|
|
284
|
+
values=["rmtberr"],
|
|
285
|
+
),
|
|
286
|
+
scope=dict(
|
|
287
|
+
values=["airs", "noaa"],
|
|
288
|
+
),
|
|
289
|
+
gvar=dict(default="[scope]_rmtberr"),
|
|
290
|
+
),
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
@property
|
|
294
|
+
def realkind(self):
|
|
295
|
+
return "rmtberr"
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
class ChanSpectral(GenvModelResource):
|
|
299
|
+
"""
|
|
300
|
+
Obsolete.
|
|
301
|
+
A Genvkey can be given.
|
|
302
|
+
"""
|
|
303
|
+
|
|
304
|
+
_footprint = dict(
|
|
305
|
+
info="Coefficients for some purpose... but which one ?",
|
|
306
|
+
attr=dict(
|
|
307
|
+
kind=dict(
|
|
308
|
+
values=["chanspec", "chan_spec"],
|
|
309
|
+
remap=dict(autoremap="first"),
|
|
310
|
+
),
|
|
311
|
+
scope=dict(
|
|
312
|
+
optional=True,
|
|
313
|
+
default="noaa",
|
|
314
|
+
values=["noaa"],
|
|
315
|
+
),
|
|
316
|
+
gvar=dict(default="[scope]_chanspec"),
|
|
317
|
+
),
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
@property
|
|
321
|
+
def realkind(self):
|
|
322
|
+
return "chanspec"
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
class Correl(GenvModelResource):
|
|
326
|
+
"""
|
|
327
|
+
TODO.
|
|
328
|
+
A Genvkey can be given.
|
|
329
|
+
"""
|
|
330
|
+
|
|
331
|
+
_footprint = dict(
|
|
332
|
+
info="Coefficients for some purpose... but which one ?",
|
|
333
|
+
attr=dict(
|
|
334
|
+
kind=dict(
|
|
335
|
+
values=["correl"],
|
|
336
|
+
),
|
|
337
|
+
scope=dict(
|
|
338
|
+
optional=True,
|
|
339
|
+
default="misc",
|
|
340
|
+
),
|
|
341
|
+
gvar=dict(default="[scope]_correl"),
|
|
342
|
+
),
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
@property
|
|
346
|
+
def realkind(self):
|
|
347
|
+
return "correl"
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
class CstLim(GenvModelResource):
|
|
351
|
+
"""
|
|
352
|
+
Obsolete.
|
|
353
|
+
A Genvkey can be given.
|
|
354
|
+
"""
|
|
355
|
+
|
|
356
|
+
_footprint = dict(
|
|
357
|
+
info="Coefficients for some purpose... but which one ?",
|
|
358
|
+
attr=dict(
|
|
359
|
+
kind=dict(
|
|
360
|
+
values=["cstlim", "cst_lim"],
|
|
361
|
+
remap=dict(autoremap="first"),
|
|
362
|
+
),
|
|
363
|
+
scope=dict(
|
|
364
|
+
optional=True,
|
|
365
|
+
default="noaa",
|
|
366
|
+
values=["noaa"],
|
|
367
|
+
),
|
|
368
|
+
gvar=dict(default="[scope]_cstlim"),
|
|
369
|
+
),
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
@property
|
|
373
|
+
def realkind(self):
|
|
374
|
+
return "cstlim"
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
class RszCoef(GenvModelResource):
|
|
378
|
+
"""
|
|
379
|
+
Obsolete.
|
|
380
|
+
A Genvkey can be given.
|
|
381
|
+
"""
|
|
382
|
+
|
|
383
|
+
_footprint = dict(
|
|
384
|
+
info="Coefficients for some purpose... but which one ?",
|
|
385
|
+
attr=dict(
|
|
386
|
+
kind=dict(
|
|
387
|
+
values=["rszcoef", "rsz_coef"],
|
|
388
|
+
remap=dict(autoremap="first"),
|
|
389
|
+
),
|
|
390
|
+
gvar=dict(default="rszcoef_fmt"),
|
|
391
|
+
),
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
@property
|
|
395
|
+
def realkind(self):
|
|
396
|
+
return "rszcoef"
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
class RtCoefAirs(GenvModelResource):
|
|
400
|
+
"""
|
|
401
|
+
Obsolete.
|
|
402
|
+
A Genvkey can be given.
|
|
403
|
+
"""
|
|
404
|
+
|
|
405
|
+
_footprint = dict(
|
|
406
|
+
info="Coefficients for some purpose... but which one ?",
|
|
407
|
+
attr=dict(
|
|
408
|
+
kind=dict(
|
|
409
|
+
values=["rtcoef_airs"],
|
|
410
|
+
),
|
|
411
|
+
gvar=dict(default="rtcoef_airs_ieee"),
|
|
412
|
+
),
|
|
413
|
+
)
|
|
414
|
+
|
|
415
|
+
@property
|
|
416
|
+
def realkind(self):
|
|
417
|
+
return "rtcoef_airs"
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
class RtCoefAtovs(GenvModelResource):
|
|
421
|
+
"""
|
|
422
|
+
Obsolete.
|
|
423
|
+
A Genvkey can be given.
|
|
424
|
+
"""
|
|
425
|
+
|
|
426
|
+
_footprint = dict(
|
|
427
|
+
info="Coefficients for some purpose... but which one ?",
|
|
428
|
+
attr=dict(
|
|
429
|
+
kind=dict(
|
|
430
|
+
values=["rtcoef_atovs"],
|
|
431
|
+
),
|
|
432
|
+
gvar=dict(default="rtcoef_ieee_atovs"),
|
|
433
|
+
),
|
|
434
|
+
)
|
|
435
|
+
|
|
436
|
+
@property
|
|
437
|
+
def realkind(self):
|
|
438
|
+
return "rtcoef_atovs"
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
class SigmaB(GenvModelResource):
|
|
442
|
+
"""
|
|
443
|
+
Obsolete.
|
|
444
|
+
A Genvkey can be given.
|
|
445
|
+
"""
|
|
446
|
+
|
|
447
|
+
_footprint = dict(
|
|
448
|
+
info="Coefficients for some purpose... but which one ?",
|
|
449
|
+
attr=dict(
|
|
450
|
+
kind=dict(
|
|
451
|
+
values=["sigmab", "sigma", "sigma_b"],
|
|
452
|
+
remap=dict(autoremap="first"),
|
|
453
|
+
),
|
|
454
|
+
gvar=dict(default="misc_sigmab"),
|
|
455
|
+
),
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
@property
|
|
459
|
+
def realkind(self):
|
|
460
|
+
return "sigmab"
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
class AtlasEmissivity(GenvModelResource):
|
|
464
|
+
"""
|
|
465
|
+
Abstract class for any Emissivity atlas.
|
|
466
|
+
"""
|
|
467
|
+
|
|
468
|
+
_abstract = True
|
|
469
|
+
_footprint = dict(
|
|
470
|
+
attr=dict(
|
|
471
|
+
kind=dict(
|
|
472
|
+
values=[
|
|
473
|
+
"atlas_emissivity",
|
|
474
|
+
"atlasemissivity",
|
|
475
|
+
"atlasemiss",
|
|
476
|
+
"emiss",
|
|
477
|
+
"emissivity_atlas",
|
|
478
|
+
],
|
|
479
|
+
remap=dict(autoremap="first"),
|
|
480
|
+
),
|
|
481
|
+
)
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
@property
|
|
485
|
+
def realkind(self):
|
|
486
|
+
return "atlas_emissivity"
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
class AtlasEmissivityGeneric(AtlasEmissivity):
|
|
490
|
+
"""
|
|
491
|
+
A yearly emissivity atlas from a specific source.
|
|
492
|
+
A Genvkey can be given.
|
|
493
|
+
"""
|
|
494
|
+
|
|
495
|
+
_footprint = dict(
|
|
496
|
+
info="Yearly emissivity atlas from a given source.",
|
|
497
|
+
attr=dict(
|
|
498
|
+
source=dict(
|
|
499
|
+
values=["uwir", "telsem"],
|
|
500
|
+
),
|
|
501
|
+
gvar=dict(default="[source]_emis_atlas"),
|
|
502
|
+
month=dict(
|
|
503
|
+
# This is a fake attribute that avoid warnings...
|
|
504
|
+
values=[
|
|
505
|
+
None,
|
|
506
|
+
],
|
|
507
|
+
optional=True,
|
|
508
|
+
default=None,
|
|
509
|
+
doc_visibility=footprints.doc.visibility.GURU,
|
|
510
|
+
),
|
|
511
|
+
),
|
|
512
|
+
)
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
class AtlasEmissivityInstrument(AtlasEmissivity):
|
|
516
|
+
"""
|
|
517
|
+
A yearly emissivity atlas for a specific instrument/sensor.
|
|
518
|
+
A Genvkey can be given.
|
|
519
|
+
"""
|
|
520
|
+
|
|
521
|
+
_footprint = dict(
|
|
522
|
+
info="Yearly emissivity atlas for a given instrument(s).",
|
|
523
|
+
attr=dict(
|
|
524
|
+
instrument=dict(
|
|
525
|
+
values=[
|
|
526
|
+
"seviri",
|
|
527
|
+
"ssmis",
|
|
528
|
+
"iasi",
|
|
529
|
+
"amsua",
|
|
530
|
+
"amsub",
|
|
531
|
+
"an1",
|
|
532
|
+
"an2",
|
|
533
|
+
],
|
|
534
|
+
remap=dict(an1="amsua", an2="amsub"),
|
|
535
|
+
),
|
|
536
|
+
gvar=dict(default="emissivity_atlas_[instrument]"),
|
|
537
|
+
month=dict(
|
|
538
|
+
# This is a fake attribute that avoid warnings...
|
|
539
|
+
values=[
|
|
540
|
+
None,
|
|
541
|
+
],
|
|
542
|
+
optional=True,
|
|
543
|
+
default=None,
|
|
544
|
+
doc_visibility=footprints.doc.visibility.GURU,
|
|
545
|
+
),
|
|
546
|
+
),
|
|
547
|
+
)
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
class AtlasMonthlyEmissivityInstrument(AtlasEmissivityInstrument):
|
|
551
|
+
"""
|
|
552
|
+
A monthly emissivity atlas for a specific instrument/sensor.
|
|
553
|
+
A Genvkey can be given.
|
|
554
|
+
"""
|
|
555
|
+
|
|
556
|
+
_footprint = [
|
|
557
|
+
month_deco,
|
|
558
|
+
dict(
|
|
559
|
+
info="Monthly emissivity atlas for a given instrument(s).",
|
|
560
|
+
attr=dict(
|
|
561
|
+
gvar=dict(default="emissivity_atlas_[instrument]_monthly"),
|
|
562
|
+
),
|
|
563
|
+
),
|
|
564
|
+
]
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
class AtlasEmissivityPack(AtlasEmissivity):
|
|
568
|
+
"""
|
|
569
|
+
Legacy yearly emissivity atlases for Amsu-A/B. DEPRECIATED.
|
|
570
|
+
A Genvkey can be given.
|
|
571
|
+
"""
|
|
572
|
+
|
|
573
|
+
_footprint = dict(
|
|
574
|
+
info="Atlas of emissivity according to some pack of instrument(s).",
|
|
575
|
+
attr=dict(
|
|
576
|
+
pack=dict(
|
|
577
|
+
values=["1", "2"],
|
|
578
|
+
),
|
|
579
|
+
gvar=dict(default="emissivity[pack]"),
|
|
580
|
+
),
|
|
581
|
+
)
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
class SeaIceLonLat(GenvModelGeoResource):
|
|
585
|
+
"""
|
|
586
|
+
Coordinates of the file containing sea ice observations.
|
|
587
|
+
It is used to create the ice_content file.
|
|
588
|
+
"""
|
|
589
|
+
|
|
590
|
+
_footprint = dict(
|
|
591
|
+
info="Coordinates used for ice_concent creation.",
|
|
592
|
+
attr=dict(
|
|
593
|
+
kind=dict(values=["seaice_lonlat"]),
|
|
594
|
+
gvar=dict(default="sea_ice_lonlat"),
|
|
595
|
+
),
|
|
596
|
+
)
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
class ODBRaw(GenvModelResource):
|
|
600
|
+
"""
|
|
601
|
+
Class for static ODB layouts RSTBIAS, COUNTRYRSTRHBIAS, SONDETYPERSTRHBIAS.
|
|
602
|
+
A GenvKey can be given.
|
|
603
|
+
"""
|
|
604
|
+
|
|
605
|
+
_footprint = dict(
|
|
606
|
+
info="ODB Raw bias",
|
|
607
|
+
attr=dict(
|
|
608
|
+
kind=dict(
|
|
609
|
+
values=["odbraw"],
|
|
610
|
+
),
|
|
611
|
+
layout=dict(
|
|
612
|
+
values=[
|
|
613
|
+
"rstbias",
|
|
614
|
+
"countryrstrhbias",
|
|
615
|
+
"sondetyperstrhbias",
|
|
616
|
+
"RSTBIAS",
|
|
617
|
+
"COUNTRYRSTRHBIAS",
|
|
618
|
+
"SONDETYPERSTRHBIAS",
|
|
619
|
+
],
|
|
620
|
+
remap=dict(
|
|
621
|
+
RSTBIAS="rstbias",
|
|
622
|
+
COUNTRYRSTRHBIAS="countryrstrhbias",
|
|
623
|
+
SONDETYPERSTRHBIAS="sondetyperstrhbias",
|
|
624
|
+
),
|
|
625
|
+
),
|
|
626
|
+
gvar=dict(
|
|
627
|
+
default="rs_bias_odbtable_[layout]",
|
|
628
|
+
),
|
|
629
|
+
),
|
|
630
|
+
)
|
|
631
|
+
|
|
632
|
+
@property
|
|
633
|
+
def realkind(self):
|
|
634
|
+
return "odbraw"
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
@namebuilding_delete("fmt")
|
|
638
|
+
@namebuilding_insert("radical", lambda s: "matfil")
|
|
639
|
+
@namebuilding_append(
|
|
640
|
+
"geo",
|
|
641
|
+
lambda s: [
|
|
642
|
+
s.scope.area,
|
|
643
|
+
],
|
|
644
|
+
)
|
|
645
|
+
class MatFilter(GenvModelGeoResource):
|
|
646
|
+
"""
|
|
647
|
+
Class of a filtering matrix. A GaussGeometry object is needed,
|
|
648
|
+
as well as the LonlatGeometry of the scope domain (containing the
|
|
649
|
+
filtering used).
|
|
650
|
+
A GenvKey can be given.
|
|
651
|
+
"""
|
|
652
|
+
|
|
653
|
+
_footprint = dict(
|
|
654
|
+
info="Filtering matrix",
|
|
655
|
+
attr=dict(
|
|
656
|
+
model=dict(
|
|
657
|
+
optional=True,
|
|
658
|
+
),
|
|
659
|
+
kind=dict(values=["matfilter"]),
|
|
660
|
+
geometry=dict(type=GaussGeometry),
|
|
661
|
+
scope=dict(
|
|
662
|
+
type=LonlatGeometry,
|
|
663
|
+
),
|
|
664
|
+
gvar=dict(default="mat_filter_[scope::area]"),
|
|
665
|
+
),
|
|
666
|
+
)
|
|
667
|
+
|
|
668
|
+
@property
|
|
669
|
+
def realkind(self):
|
|
670
|
+
return "matfilter"
|
|
671
|
+
|
|
672
|
+
def olive_basename(self):
|
|
673
|
+
"""OLIVE specific naming convention."""
|
|
674
|
+
return (
|
|
675
|
+
"matrix.fil."
|
|
676
|
+
+ self.scope.area
|
|
677
|
+
+ ".t{!s}".format(self.geometry.truncation)
|
|
678
|
+
+ ".c{!s}".format(self.geometry.stretching)
|
|
679
|
+
)
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
class WaveletTable(GenvModelGeoResource):
|
|
683
|
+
"""
|
|
684
|
+
Wavelet covariance operators: auto-correlations of the control variable.
|
|
685
|
+
A GenvKey can be given.
|
|
686
|
+
"""
|
|
687
|
+
|
|
688
|
+
_footprint = dict(
|
|
689
|
+
info="Wavelet covariance operators",
|
|
690
|
+
attr=dict(
|
|
691
|
+
kind=dict(
|
|
692
|
+
values=[
|
|
693
|
+
"wtable",
|
|
694
|
+
"wavelettable",
|
|
695
|
+
"wavelet_table",
|
|
696
|
+
"rtable",
|
|
697
|
+
"rtabwavelet",
|
|
698
|
+
],
|
|
699
|
+
remap=dict(autoremap="first"),
|
|
700
|
+
),
|
|
701
|
+
gvar=dict(default="RTABLE_WAVELET"),
|
|
702
|
+
),
|
|
703
|
+
)
|
|
704
|
+
|
|
705
|
+
@property
|
|
706
|
+
def realkind(self):
|
|
707
|
+
return "wtable"
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
class AmvError(GenvModelGeoResource):
|
|
711
|
+
"""
|
|
712
|
+
TODO.
|
|
713
|
+
A Genvkey can be given.
|
|
714
|
+
"""
|
|
715
|
+
|
|
716
|
+
_footprint = dict(
|
|
717
|
+
info="AMV Tracking Error",
|
|
718
|
+
attr=dict(
|
|
719
|
+
kind=dict(
|
|
720
|
+
values=["amvtrackingerror", "amvtr", "amverror", "amv_error"],
|
|
721
|
+
remap=dict(
|
|
722
|
+
amvtrackingerror="amv_error",
|
|
723
|
+
amvtr="amv_error",
|
|
724
|
+
amverror="amv_error",
|
|
725
|
+
),
|
|
726
|
+
),
|
|
727
|
+
gvar=dict(
|
|
728
|
+
default="amv_tracking_error",
|
|
729
|
+
),
|
|
730
|
+
),
|
|
731
|
+
)
|
|
732
|
+
|
|
733
|
+
@property
|
|
734
|
+
def realkind(self):
|
|
735
|
+
return "amv_error"
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
class AmvBias(GenvModelGeoResource):
|
|
739
|
+
"""
|
|
740
|
+
TODO.
|
|
741
|
+
A Genvkey can be given.
|
|
742
|
+
"""
|
|
743
|
+
|
|
744
|
+
_footprint = dict(
|
|
745
|
+
info="AMV Tracking Error",
|
|
746
|
+
attr=dict(
|
|
747
|
+
kind=dict(
|
|
748
|
+
values=["amvbias", "amv_bias"],
|
|
749
|
+
remap=dict(amvbias="amv_bias"),
|
|
750
|
+
),
|
|
751
|
+
gvar=dict(default="amv_bias_info"),
|
|
752
|
+
),
|
|
753
|
+
)
|
|
754
|
+
|
|
755
|
+
@property
|
|
756
|
+
def realkind(self):
|
|
757
|
+
return "amv_bias"
|
|
758
|
+
|
|
759
|
+
|
|
760
|
+
class LFIScripts(StaticResource):
|
|
761
|
+
"""
|
|
762
|
+
The LFI scripts. A Genvkey can be given.
|
|
763
|
+
"""
|
|
764
|
+
|
|
765
|
+
_footprint = [
|
|
766
|
+
gvar,
|
|
767
|
+
dict(
|
|
768
|
+
info="LFI scripts",
|
|
769
|
+
attr=dict(
|
|
770
|
+
kind=dict(
|
|
771
|
+
values=[
|
|
772
|
+
"lfiscripts",
|
|
773
|
+
],
|
|
774
|
+
),
|
|
775
|
+
gvar=dict(default="tools_lfi"),
|
|
776
|
+
),
|
|
777
|
+
),
|
|
778
|
+
]
|
|
779
|
+
|
|
780
|
+
@property
|
|
781
|
+
def realkind(self):
|
|
782
|
+
return "lfiscripts"
|
|
783
|
+
|
|
784
|
+
|
|
785
|
+
class FilteringRequest(GenvModelResource):
|
|
786
|
+
"""
|
|
787
|
+
Class of a JSON file that describes a resource filter. A Genvkey can be given.
|
|
788
|
+
"""
|
|
789
|
+
|
|
790
|
+
_footprint = dict(
|
|
791
|
+
info="Description of a resource's data filter",
|
|
792
|
+
attr=dict(
|
|
793
|
+
kind=dict(
|
|
794
|
+
values=[
|
|
795
|
+
"filtering_request",
|
|
796
|
+
],
|
|
797
|
+
),
|
|
798
|
+
filtername=dict(),
|
|
799
|
+
nativefmt=dict(
|
|
800
|
+
values=[
|
|
801
|
+
"json",
|
|
802
|
+
],
|
|
803
|
+
default="json",
|
|
804
|
+
),
|
|
805
|
+
clscontents=dict(
|
|
806
|
+
default=JsonDictContent,
|
|
807
|
+
),
|
|
808
|
+
gvar=dict(default="filtering_request"),
|
|
809
|
+
),
|
|
810
|
+
)
|
|
811
|
+
|
|
812
|
+
@property
|
|
813
|
+
def realkind(self):
|
|
814
|
+
return "filtering_request"
|
|
815
|
+
|
|
816
|
+
def gget_urlquery(self):
|
|
817
|
+
"""GGET specific query : ``extract``."""
|
|
818
|
+
return "extract=filter_{:s}.json".format(self.filtername)
|
|
819
|
+
|
|
820
|
+
|
|
821
|
+
class GribAPIConfig(StaticResource):
|
|
822
|
+
"""
|
|
823
|
+
Configuration files for the Grib-API (samples or definitions)
|
|
824
|
+
"""
|
|
825
|
+
|
|
826
|
+
_footprint = [
|
|
827
|
+
gvar,
|
|
828
|
+
dict(
|
|
829
|
+
info="Grib-API configuration files",
|
|
830
|
+
attr=dict(
|
|
831
|
+
kind=dict(
|
|
832
|
+
values=[
|
|
833
|
+
"gribapiconf",
|
|
834
|
+
],
|
|
835
|
+
),
|
|
836
|
+
target=dict(
|
|
837
|
+
values=["samples", "def", "definitions"],
|
|
838
|
+
remap=dict(definitions="def"),
|
|
839
|
+
),
|
|
840
|
+
gvar=dict(default="grib_api_[target]"),
|
|
841
|
+
),
|
|
842
|
+
),
|
|
843
|
+
]
|
|
844
|
+
|
|
845
|
+
@property
|
|
846
|
+
def realkind(self):
|
|
847
|
+
return "gribapiconf"
|
|
848
|
+
|
|
849
|
+
|
|
850
|
+
class StdPressure(GenvModelGeoResource):
|
|
851
|
+
"""
|
|
852
|
+
Standard pressure profile for standard error truncation extrapolation.
|
|
853
|
+
A GenvKey can be given.
|
|
854
|
+
"""
|
|
855
|
+
|
|
856
|
+
_footprint = dict(
|
|
857
|
+
info="Standard pressure profile",
|
|
858
|
+
attr=dict(
|
|
859
|
+
kind=dict(
|
|
860
|
+
values=["stdpressure"],
|
|
861
|
+
),
|
|
862
|
+
level=dict(
|
|
863
|
+
type=int,
|
|
864
|
+
optional=True,
|
|
865
|
+
default=60,
|
|
866
|
+
values=[60],
|
|
867
|
+
),
|
|
868
|
+
gvar=dict(default="std_pressure"),
|
|
869
|
+
),
|
|
870
|
+
)
|
|
871
|
+
|
|
872
|
+
@property
|
|
873
|
+
def realkind(self):
|
|
874
|
+
return "stdpressure"
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
class TruncObj(GenvModelGeoResource):
|
|
878
|
+
"""
|
|
879
|
+
Standard error truncation (spectral filtering).
|
|
880
|
+
A GenvKey can be given.
|
|
881
|
+
"""
|
|
882
|
+
|
|
883
|
+
_footprint = dict(
|
|
884
|
+
info="Standard error truncation",
|
|
885
|
+
attr=dict(
|
|
886
|
+
kind=dict(
|
|
887
|
+
values=["truncobj", "stderr_trunc"],
|
|
888
|
+
),
|
|
889
|
+
gvar=dict(default="trunc_obj"),
|
|
890
|
+
),
|
|
891
|
+
)
|
|
892
|
+
|
|
893
|
+
@property
|
|
894
|
+
def realkind(self):
|
|
895
|
+
return "truncobj"
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
class InterChannelsCorrelations(GenvModelResource):
|
|
899
|
+
"""
|
|
900
|
+
Inter channels correlations for a specific instrument/sensor.
|
|
901
|
+
A Genvkey can be given.
|
|
902
|
+
"""
|
|
903
|
+
|
|
904
|
+
_footprint = dict(
|
|
905
|
+
info="Inter channel correlations for a given instrument.",
|
|
906
|
+
attr=dict(
|
|
907
|
+
kind=dict(
|
|
908
|
+
values=[
|
|
909
|
+
"correlations",
|
|
910
|
+
],
|
|
911
|
+
),
|
|
912
|
+
instrument=dict(
|
|
913
|
+
values=[
|
|
914
|
+
"cris",
|
|
915
|
+
"iasi",
|
|
916
|
+
],
|
|
917
|
+
),
|
|
918
|
+
gvar=dict(default="correlations_[instrument]"),
|
|
919
|
+
clscontents=dict(
|
|
920
|
+
default=DataRaw,
|
|
921
|
+
),
|
|
922
|
+
),
|
|
923
|
+
)
|
|
924
|
+
|
|
925
|
+
@property
|
|
926
|
+
def realkind(self):
|
|
927
|
+
return "correlations"
|
|
928
|
+
|
|
929
|
+
|
|
930
|
+
class SunMoonPositionCoeff(StaticResource):
|
|
931
|
+
"""
|
|
932
|
+
Coefficients of the Chebyshev polynomials used to calculate the position of the moon and the sun.
|
|
933
|
+
"""
|
|
934
|
+
|
|
935
|
+
_footprint = [
|
|
936
|
+
gvar,
|
|
937
|
+
dict(
|
|
938
|
+
info="Chebyshev polynomials for the moon and sun position",
|
|
939
|
+
attr=dict(
|
|
940
|
+
kind=dict(
|
|
941
|
+
values=[
|
|
942
|
+
"sunmoonpositioncoeffs",
|
|
943
|
+
],
|
|
944
|
+
),
|
|
945
|
+
gvar=dict(
|
|
946
|
+
default="sun_moon_position_tgz",
|
|
947
|
+
),
|
|
948
|
+
),
|
|
949
|
+
),
|
|
950
|
+
]
|
|
951
|
+
|
|
952
|
+
@property
|
|
953
|
+
def realkind(self):
|
|
954
|
+
return "sunmoonpositioncoeffs"
|