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