pikobs 3.0.330__tar.gz → 3.0.332__tar.gz
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.
- {pikobs-3.0.330 → pikobs-3.0.332}/CHANGELOG.md +8 -0
- {pikobs-3.0.330/pikobs.egg-info → pikobs-3.0.332}/PKG-INFO +1 -1
- pikobs-3.0.332/VERSION +1 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obstimedb/obstimedb.py +55 -40
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obstimedb/obstimedb_plot.py +17 -7
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_obstimedb.sh +4 -4
- {pikobs-3.0.330 → pikobs-3.0.332/pikobs.egg-info}/PKG-INFO +1 -1
- pikobs-3.0.330/VERSION +0 -1
- {pikobs-3.0.330 → pikobs-3.0.332}/.gitignore +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/MANIFEST.in +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/README.md +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/clear.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/conda_build/pikobs/activate.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/conda_build/pikobs/build.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/conda_build/pikobs/meta.yaml +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/conda_build/pikobs/pikobs.yml +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/Makefile +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/make.bat +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/cardio.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/conf.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/families.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/flag.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/flags_criteria.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/histogram.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/index.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/mapobs.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/obscountdb.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/obstimedb.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/pikobsburp2rdb.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/profile.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/profile_ft.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/profile_ft2.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/projection.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/region.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/scatter.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/spatial.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/timeserie.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/unittest.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/varno.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/vdedr.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/docs/source/zone.rst +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/env/.mambarc +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/env/conda-meta/history +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/env/etc/aau_token +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/__not_used/plot_proj.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/__not_used/vdedr2.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/__not_used/vdedr3.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/cardio/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/cardio/cardio.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/cardio/cardio_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/cardio/cardio_plot_old.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/delete_folder.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/families.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/familyobs.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/flags_criteria.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/regionsobs.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/special_family.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/type_boxes.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/type_projection.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/configobs/type_varno.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/extension/color_mapping.json +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/extension/libudfsqlite-shared.so +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/flags.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/flags_count.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/flags_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/flags_plot0.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/flags_plot3.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/flags_plotv2.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/plotpo.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/plotpo2.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/plotpo3.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/plotpo4.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/plotpo5.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/plotpo7.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/plotpo8.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/flags/plotpo9.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/histogram/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/histogram/histogram.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/histogram/histogram_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/mapobs/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/mapobs/color.j +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/mapobs/mapobs.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obscountdb/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obscountdb/obscountdb.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obscountdb/obscountdb_old.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obscountdb/obscountdb_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obscutoff/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obscutoff/obscutoff.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obscutoff/obscutoff_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/obstimedb/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/pbs_submit/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/pbs_submit/pbs_submit.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/pikobsburp2rdb/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/pikobsburp2rdb/pikobsburp2rdb.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/profile/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/profile/profile.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/profile/profile_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/progps/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/progps/progps.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/progps2/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/progps2/progps2.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/scatter/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/scatter/scatter.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/remove.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/remove2.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_2exp.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_cardio.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_cardio_lco.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_cardio_sky.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_flag.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_histogra.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_mapobs.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_obscountdb.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_obscountdb_1.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_pikobsburp2rdb.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_profile.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_profile_1.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_profile_ra.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_profile_radar.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_profile_s.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_progps.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_progps2.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_scatter.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_scatter_diff.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_scatter_one.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_scatter_two_sw.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_spatial.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_timeserie.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_timeserie_radar.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_vdedr.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/run_zone2.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/setup_pikobs.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/script/setup_pikobs.sh.1 +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/spatial/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/spatial/spatial.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/timeserie/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/timeserie/timeserie.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/timeserie/timeserie_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/unittestpikobs/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/unittestpikobs/test_pikobs.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/unittestpikobs/unittest_timeserie.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/vdedr/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/vdedr/vdedr.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/vdedr/vdedr_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/web/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/web/viewer.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/zone/__init__.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/zone/zone.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs/zone/zone_plot.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs.egg-info/SOURCES.txt +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs.egg-info/dependency_links.txt +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs.egg-info/requires.txt +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs.egg-info/top_level.txt +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs_env.yml +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/pikobs_env2.yml +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/publique.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/publique.txt +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/readme/flag_criteria.md +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/readme/geographic.md +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/readme/read_projection.md +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/readme/readme_cardiograme.md +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/readme/readme_scatter.md +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/setup.cfg +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/setup.py +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/setup_pikobs.sh +0 -0
- {pikobs-3.0.330 → pikobs-3.0.332}/setup_pikobs.sh.1 +0 -0
pikobs-3.0.332/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.0.332
|
|
@@ -374,50 +374,65 @@ def create_and_populate_moyenne_table(
|
|
|
374
374
|
# it into its own column. Every other family leaves `channel` as
|
|
375
375
|
# a literal NULL and groups exactly as before -- this is a pure
|
|
376
376
|
# addition, the non-radiance extraction path is unchanged.
|
|
377
|
+
#
|
|
378
|
+
# CRITICAL: the per-channel rows must NEVER be the only rows
|
|
379
|
+
# inserted for a radiance family. The SAME id_obs (profile)
|
|
380
|
+
# appears in MANY channel rows (one per channel it reports), so
|
|
381
|
+
# summing Nobsdata/Nobsprofile ACROSS channel rows -- exactly
|
|
382
|
+
# what every consumer of `moyenne` that isn't channel-aware does
|
|
383
|
+
# (the main Nobs/Nobsprofile series behind the mosaic, global
|
|
384
|
+
# time series, and profile summary table) -- silently multiplies
|
|
385
|
+
# the true profile count by roughly the number of channels
|
|
386
|
+
# reported (confirmed directly: a 10-profile/15-channel test
|
|
387
|
+
# case summed to 150, not 10). The fix is to ALSO insert a
|
|
388
|
+
# SEPARATE, non-channel-split row (channel=NULL) with the
|
|
389
|
+
# correct, ungrouped-by-channel counts, so every consumer that
|
|
390
|
+
# filters `WHERE channel IS NULL` (the main series) gets the
|
|
391
|
+
# right numbers, while `WHERE channel IS NOT NULL` (the
|
|
392
|
+
# per-channel breakdown) still works exactly as before.
|
|
377
393
|
# ------------------------------------------------------------------
|
|
378
394
|
is_radiance = (VCOTYP == 'CANAL')
|
|
379
395
|
if is_radiance:
|
|
380
|
-
|
|
381
|
-
group_by_clause = f"{group_col}, vcoord"
|
|
396
|
+
passes = [("NULL", group_col), ("vcoord", f"{group_col}, vcoord")]
|
|
382
397
|
else:
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
398
|
+
passes = [("NULL", group_col)]
|
|
399
|
+
|
|
400
|
+
for channel_expr, group_by_clause in passes:
|
|
401
|
+
insert_query = f"""
|
|
402
|
+
INSERT INTO moyenne (Nobsdata, Nobsprofile, avg_omp, avg_oma, id_stn, channel, date)
|
|
403
|
+
SELECT
|
|
404
|
+
count(DISTINCT(id_data)),
|
|
405
|
+
count(DISTINCT(id_obs)),
|
|
406
|
+
{avg_omp_expr},
|
|
407
|
+
{avg_oma_expr},
|
|
408
|
+
{id_stn_expr},
|
|
409
|
+
{channel_expr},
|
|
410
|
+
{date_match.group(1)}
|
|
411
|
+
FROM db.header
|
|
412
|
+
NATURAL JOIN db.DATA
|
|
413
|
+
WHERE obsvalue IS NOT NULL
|
|
414
|
+
{flag_criteria}
|
|
415
|
+
{LATLONCRIT}
|
|
416
|
+
{VCOCRIT}
|
|
417
|
+
{family_filter}
|
|
418
|
+
GROUP BY {group_by_clause};
|
|
419
|
+
"""
|
|
420
|
+
|
|
421
|
+
try:
|
|
422
|
+
cursor.execute(insert_query)
|
|
423
|
+
except sqlite3.OperationalError as err:
|
|
424
|
+
msg = str(err).lower()
|
|
425
|
+
fb_query = insert_query
|
|
426
|
+
for metric in agr_list:
|
|
427
|
+
if metric in msg:
|
|
428
|
+
print(f"[WARNING] Column '{metric}' not found in "
|
|
429
|
+
f"{os.path.basename(existing_db_filename)}; storing NULL.",
|
|
430
|
+
flush=True)
|
|
431
|
+
fb_query = fb_query.replace(f"AVG({metric})", "NULL")
|
|
432
|
+
if fb_query != insert_query:
|
|
433
|
+
cursor.execute(fb_query)
|
|
434
|
+
else:
|
|
435
|
+
raise
|
|
421
436
|
mem_conn.commit()
|
|
422
437
|
|
|
423
438
|
try:
|
|
@@ -379,10 +379,20 @@ def _draw_profile_summary_table(df_all, run_time, name_in='experience'):
|
|
|
379
379
|
row per (family, id_stn) PLUS one 'ALL' row per family, matching
|
|
380
380
|
the reference report's per-family total row.
|
|
381
381
|
"""
|
|
382
|
+
# NOTE: "Yesterday" and "Last week" are NOT immediately adjacent to
|
|
383
|
+
# "Today"/"This week" -- confirmed against TWO independent reference
|
|
384
|
+
# tables given directly by the user (run_time 2026082600/00Z and
|
|
385
|
+
# 2026083112/12Z), both consistently showing a 1-DAY GAP: Yesterday
|
|
386
|
+
# ends a full 24h before Today starts, and Last week ends a full
|
|
387
|
+
# day before This week starts. This was a real bug in an earlier
|
|
388
|
+
# version of this function (computed both as immediately adjacent,
|
|
389
|
+
# no gap) -- fixed here to match the confirmed convention exactly.
|
|
382
390
|
today_start = run_time - pd.Timedelta(hours=24)
|
|
383
|
-
|
|
391
|
+
yesterday_end = run_time - pd.Timedelta(hours=48)
|
|
392
|
+
yesterday_start = run_time - pd.Timedelta(hours=72)
|
|
384
393
|
week_start = run_time - pd.Timedelta(days=7)
|
|
385
|
-
|
|
394
|
+
lastweek_end = run_time - pd.Timedelta(days=8)
|
|
395
|
+
lastweek_start = run_time - pd.Timedelta(days=15)
|
|
386
396
|
tenday_start = run_time - pd.Timedelta(days=10)
|
|
387
397
|
run_hour = run_time.hour
|
|
388
398
|
|
|
@@ -400,9 +410,9 @@ def _draw_profile_summary_table(df_all, run_time, name_in='experience'):
|
|
|
400
410
|
<b>PASS:</b> {run_hour:02d}Z<br><br>
|
|
401
411
|
<b>Definitions of periods</b> (computed for this run):<br>
|
|
402
412
|
Today: date > {_fmtd(today_start)} and date ≤ {_fmtd(run_time)}<br>
|
|
403
|
-
Yesterday: date > {_fmtd(yesterday_start)} and date ≤ {_fmtd(
|
|
413
|
+
Yesterday: date > {_fmtd(yesterday_start)} and date ≤ {_fmtd(yesterday_end)}<br>
|
|
404
414
|
This week: date > {_fmtd(week_start)} and date ≤ {_fmtd(run_time)}<br>
|
|
405
|
-
Last week: date > {_fmtd(lastweek_start)} and date ≤ {_fmtd(
|
|
415
|
+
Last week: date > {_fmtd(lastweek_start)} and date ≤ {_fmtd(lastweek_end)}<br>
|
|
406
416
|
Last 10 days (same PASS {run_hour:02d}Z): date > {_fmtd(tenday_start)}
|
|
407
417
|
and date ≤ {_fmtd(run_time)}<br><br>
|
|
408
418
|
<b>Percentage difference calculations:</b><br>
|
|
@@ -434,9 +444,9 @@ def _draw_profile_summary_table(df_all, run_time, name_in='experience'):
|
|
|
434
444
|
|
|
435
445
|
def _build_row(family, id_stn, g):
|
|
436
446
|
today = _period_sum(g, today_start, run_time)
|
|
437
|
-
yesterday = _period_sum(g, yesterday_start,
|
|
447
|
+
yesterday = _period_sum(g, yesterday_start, yesterday_end)
|
|
438
448
|
this_week = _period_sum(g, week_start, run_time)
|
|
439
|
-
last_week = _period_sum(g, lastweek_start,
|
|
449
|
+
last_week = _period_sum(g, lastweek_start, lastweek_end)
|
|
440
450
|
at_run = g.loc[g['date'] == run_time, 'Nprofile'].sum()
|
|
441
451
|
tenday_avg = _period_mean(g, tenday_start, run_time, same_hour=True)
|
|
442
452
|
return {
|
|
@@ -881,7 +891,7 @@ def obstimedb_plot(
|
|
|
881
891
|
select_extra.append(
|
|
882
892
|
f"SUM(CASE WHEN {col} IS NOT NULL THEN Nobsdata ELSE 0 END) as _wden_{metric}")
|
|
883
893
|
query = ("SELECT date, id_stn, " + ", ".join(select_extra) +
|
|
884
|
-
" FROM moyenne GROUP BY date, id_stn;")
|
|
894
|
+
" FROM moyenne WHERE channel IS NULL GROUP BY date, id_stn;")
|
|
885
895
|
try:
|
|
886
896
|
df = pd.read_sql_query(query, conn)
|
|
887
897
|
except Exception as e:
|
|
@@ -8,18 +8,18 @@ set -eo pipefail
|
|
|
8
8
|
# ============================================================================
|
|
9
9
|
# Directory containing the SQLite observation databases for the (single)
|
|
10
10
|
# experiment. obstimedb tracks ONE run over time — no control/reference.
|
|
11
|
-
PATH_EXPERIENCE_FILES="/home/
|
|
11
|
+
PATH_EXPERIENCE_FILES="/home/smco500/.suites/gdps/g2/hub/ppp7/monitoring/banco/postalt/"
|
|
12
12
|
# Label for the experiment data.
|
|
13
13
|
EXPERIENCE_NAME="GDPS-SN"
|
|
14
14
|
# Output directory where the generated results will be saved.
|
|
15
15
|
PATHWORK="/home/dlo001/sites8/pikobs_obstimedb"
|
|
16
16
|
# Start and end dates for the processing window in YYYYMMDDHH format (UTC).
|
|
17
|
-
DATESTART="
|
|
18
|
-
DATEEND="
|
|
17
|
+
DATESTART="2026082106"
|
|
18
|
+
DATEEND="2026083112"
|
|
19
19
|
# Region to process.
|
|
20
20
|
REGION="Monde"
|
|
21
21
|
# Observation families to process (space-separated list).
|
|
22
|
-
FAMILY="ai
|
|
22
|
+
FAMILY="ai atms_allsky ch cris csr gp iasi mwhs2 ro sc sf ssmis sw to_amsua_allsky to_amsub_allsky ua"
|
|
23
23
|
# Bitmask filter criteria.
|
|
24
24
|
FLAGS_CRITERIA="assimilee"
|
|
25
25
|
# Baseline look-back window, in calendar days, for the same synoptic hour
|
pikobs-3.0.330/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.0.330
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|