From 4815831615f1511a0eb9b49308e225138ab1a086 Mon Sep 17 00:00:00 2001 From: istvans Date: Thu, 2 Oct 2025 15:53:30 +0200 Subject: [PATCH 1/3] Quantities in alphabetical order --- src/openradardata_validator/radar_cf.py | 172 ++++++++++-------------- 1 file changed, 73 insertions(+), 99 deletions(-) diff --git a/src/openradardata_validator/radar_cf.py b/src/openradardata_validator/radar_cf.py index 07a7360..f471943 100644 --- a/src/openradardata_validator/radar_cf.py +++ b/src/openradardata_validator/radar_cf.py @@ -1,99 +1,73 @@ -radar_cf = {} -radar_cf["TH"] = "radar_linear_equivalent_reflectivity_factor_h" -radar_cf["TV"] = "radar_linear_equivalent_reflectivity_factor_v" -radar_cf["DBZH"] = "radar_equivalent_reflectivity_factor_h" -radar_cf["DBZV"] = "radar_equivalent_reflectivity_factor_v" -# ODIM deprecated -radar_cf["DBZ"] = "radar_equivalent_reflectivity_factor_h" - -radar_cf["ZDR"] = "radar_differential_reflectivity_hv" -radar_cf["UZDR"] = "UZDR" -# ODIM deprecated -radar_cf["LZDR"] = "radar_differential_reflectivity_hv" - -radar_cf["RHOHV"] = "radar_correlation_coefficient_hv" - -radar_cf["URHOHV"] = "" - -radar_cf["LDR"] = "radar_linear_depolarization_ratio" -radar_cf["ULDR"] = "ULDR" - -radar_cf["PHIDP"] = "radar_differential_phase_hv" -radar_cf["UPHIDP"] = "UPHIDP" - -radar_cf["PIA"] = "PIA" -radar_cf["KDP"] = "radar_specific_differential_phase_hv" -radar_cf["UKDP"] = "UKDP" - -radar_cf["SQIH"] = "SQIH" -radar_cf["USQIH"] = "USQIH" -radar_cf["SQIV"] = "SQIV" -radar_cf["USQIV"] = "USQIV" -# ODIM deprecated -radar_cf["SQI"] = "SQI" - -radar_cf["SNR"] = "radar_signal_to_noise_ratio" -radar_cf["SNRHC"] = "radar_signal_to_noise_ratio_copolar_h" -radar_cf["SNRHX"] = "radar_signal_to_noise_ratio_crosspolar_h" -radar_cf["SNRVC"] = "radar_signal_to_noise_ratio_copolar_v" -radar_cf["SNRVX"] = "radar_signal_to_noise_ratio_crosspolar_v" -radar_cf["USNRHC"] = "USNRHC" -radar_cf["USNRVC"] = "USNRVC" - -radar_cf["CCORH"] = "CCOR_h" -radar_cf["CCORV"] = "CCOR_v" - -radar_cf["CPA"] = "CPA" - -radar_cf["RATE"] = "radar_estimated_precipitation_rate" -radar_cf["URATE"] = "URATE" - -radar_cf["POR"] = "POR" -radar_cf["HI"] = "HI" -radar_cf["POH"] = "POH" -radar_cf["POSH"] = "POSH" - -radar_cf["MESH"] = "MESH" - -radar_cf["ACRR"] = "ACRR" -radar_cf["HGHT"] = "HGHT" -radar_cf["VIL"] = "VIL" - -radar_cf["VRADH"] = "radial_velocity_of_scatterers_away_from_instrument_h" -radar_cf["UVRADH"] = "UVRADH" -radar_cf["VRADV"] = "radial_velocity_of_scatterers_away_from_instrument_v" -radar_cf["UVRADV"] = "UVRADV" -# ODIM deprecated -radar_cf["VRAD"] = "radial_velocity_of_scatterers_away_from_instrument_h" - -radar_cf["VRADDH"] = "VRADDH" -radar_cf["VRADDV"] = "VRADDV" - -radar_cf["WRADH"] = "radar_doppler_spectrum_width_h" -radar_cf["UWRADH"] = "UWRADH" -radar_cf["WRADV"] = "radar_doppler_spectrum_width_v" -radar_cf["UWRADV"] = "UWRADV" -# ODIM deprecated -radar_cf["WRAD"] = "radar_doppler_spectrum_width_h" - -radar_cf["UWND"] = "UWND" -radar_cf["VWND"] = "VWND" - -radar_cf["RSHR"] = "RSHR" -radar_cf["ASHR"] = "ASHR" -radar_cf["CSHR"] = "CSHR" -radar_cf["ESHR"] = "ESHR" -radar_cf["OSHR"] = "OSHR" -radar_cf["HSHR"] = "HSHR" -radar_cf["VSHR"] = "VSHR" -radar_cf["TSHR"] = "TSHR" -radar_cf["PSH"] = "PSH" -radar_cf["PSV"] = "PSV" - -radar_cf["UPSPH"] = "UPSPH" -radar_cf["UPSPV"] = "UPSPV" - -radar_cf["BRDR"] = "BRDR" -radar_cf["QIND"] = "QIND" - -radar_cf["CLASS"] = "CLASS" +radar_cf = { + "ACRR": "ACRR", + "ASHR": "ASHR", + "BRDR": "BRDR", + "CCORH": "CCOR_h", + "CCORV": "CCOR_v", + "CLASS": "CLASS", + "CPA": "CPA", + "CSHR": "CSHR", + "DBZ": "radar_equivalent_reflectivity_factor_h", + "DBZH": "radar_equivalent_reflectivity_factor_h", + "DBZV": "radar_equivalent_reflectivity_factor_v", + "ESHR": "ESHR", + "HGHT": "HGHT", + "HI": "HI", + "HSHR": "HSHR", + "KDP": "radar_specific_differential_phase_hv", + "LDR": "radar_linear_depolarization_ratio", + "LZDR": "radar_differential_reflectivity_hv", + "MESH": "MESH", + "OSHR": "OSHR", + "PHIDP": "radar_differential_phase_hv", + "PIA": "PIA", + "POH": "POH", + "POR": "POR", + "POSH": "POSH", + "PSH": "PSH", + "PSV": "PSV", + "QIND": "QIND", + "RATE": "radar_estimated_precipitation_rate", + "RHOHV": "radar_correlation_coefficient_hv", + "RSHR": "RSHR", + "SNR": "radar_signal_to_noise_ratio", + "SNRHC": "radar_signal_to_noise_ratio_copolar_h", + "SNRHX": "radar_signal_to_noise_ratio_crosspolar_h", + "SNRVC": "radar_signal_to_noise_ratio_copolar_v", + "SNRVX": "radar_signal_to_noise_ratio_crosspolar_v", + "SQI": "SQI", + "SQIH": "SQIH", + "SQIV": "SQIV", + "TH": "radar_linear_equivalent_reflectivity_factor_h", + "TSHR": "TSHR", + "TV": "radar_linear_equivalent_reflectivity_factor_v", + "UKDP": "UKDP", + "ULDR": "ULDR", + "UPHIDP": "UPHIDP", + "UPSPH": "UPSPH", + "UPSPV": "UPSPV", + "URATE": "URATE", + "URHOHV": "URHOHV", + "USNRHC": "USNRHC", + "USNRVC": "USNRVC", + "USQIH": "USQIH", + "USQIV": "USQIV", + "UVRADH": "UVRADH", + "UVRADV": "UVRADV", + "UWND": "UWND", + "UWRADH": "UWRADH", + "UWRADV": "UWRADV", + "UZDR": "UZDR", + "VIL": "VIL", + "VRAD": "radial_velocity_of_scatterers_away_from_instrument_h", + "VRADDH": "VRADDH", + "VRADDV": "VRADDV", + "VRADH": "radial_velocity_of_scatterers_away_from_instrument_h", + "VRADV": "radial_velocity_of_scatterers_away_from_instrument_v", + "VSHR": "VSHR", + "VWND": "VWND", + "WRAD": "radar_doppler_spectrum_width_h", + "WRADH": "radar_doppler_spectrum_width_h", + "WRADV": "radar_doppler_spectrum_width_v", + "ZDR": "radar_differential_reflectivity_hv" +} From c27957302ef72ca7c18a6a1a1d0bd584f6dec973 Mon Sep 17 00:00:00 2001 From: istvans Date: Thu, 2 Oct 2025 16:58:25 +0200 Subject: [PATCH 2/3] Add ACDD attributes(ODIM v2.4.2) --- src/openradardata_validator/odim2ordmsg.py | 10 ++++++++-- src/openradardata_validator/radar_cf.py | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/openradardata_validator/odim2ordmsg.py b/src/openradardata_validator/odim2ordmsg.py index ec136d5..8565b44 100644 --- a/src/openradardata_validator/odim2ordmsg.py +++ b/src/openradardata_validator/odim2ordmsg.py @@ -10,7 +10,7 @@ import numpy import pandas as pd -from openradardata_validator.radar_cf import radar_cf +from openradardata_validator.radar_cf import radar_cf, odim_acdd_attrs current_filedir = Path(__file__).parent.resolve() @@ -123,6 +123,12 @@ def parse_odim_source(odim: h5py.File, def_msg: dict[str, Any]) -> None: def_msg["properties"]["platform"] = "0-20010-0-" + "OPERA" def_msg["properties"]["platform_name"] = "OPERA" + if "how" in odim: + for attr in odim_acdd_attrs: + od_attr = get_attr_str(odim["how"], attr) + if od_attr: + def_msg["properties"][attr] = od_attr + if nod: if station: def_msg["properties"]["platform_name"] = "[" + nod + "]" + " " + station @@ -292,7 +298,7 @@ def parse_odim_dataset_data( .decode("utf-8") # pylint: disable=no-member ) - current_ingest = f"{dataset_msg["properties"]["datetime"]}_{dataset_msg["properties"]["level"]}_{quantity}" + current_ingest = f'{dataset_msg["properties"]["datetime"]}_{dataset_msg["properties"]["level"]}_{quantity}' if current_ingest not in ingest_list: if quantity in radar_cf: ingest_list.append(current_ingest) diff --git a/src/openradardata_validator/radar_cf.py b/src/openradardata_validator/radar_cf.py index f471943..fc61197 100644 --- a/src/openradardata_validator/radar_cf.py +++ b/src/openradardata_validator/radar_cf.py @@ -71,3 +71,19 @@ "WRADV": "radar_doppler_spectrum_width_v", "ZDR": "radar_differential_reflectivity_hv" } + +odim_acdd_attrs = [ + "license", + "naming_authority", + "institution", + "creator_name", + "creator_email", + "creator_url", + "publisher_name", + "publisher_email", + "publisher_url", + "creator_type", + "creator_institution", + "publisher_type", + "publisher_institution" +] From 94f398ea018b7a4a0555f856883b0816de7ee70f Mon Sep 17 00:00:00 2001 From: istvans Date: Thu, 2 Oct 2025 17:02:11 +0200 Subject: [PATCH 3/3] naming_authority by country code --- src/openradardata_validator/odim2ordmsg.py | 9 +++++- src/openradardata_validator/radar_cf.py | 36 ++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/openradardata_validator/odim2ordmsg.py b/src/openradardata_validator/odim2ordmsg.py index 8565b44..c97e6a9 100644 --- a/src/openradardata_validator/odim2ordmsg.py +++ b/src/openradardata_validator/odim2ordmsg.py @@ -10,7 +10,7 @@ import numpy import pandas as pd -from openradardata_validator.radar_cf import radar_cf, odim_acdd_attrs +from openradardata_validator.radar_cf import radar_cf, odim_acdd_attrs, country_naming_auth current_filedir = Path(__file__).parent.resolve() @@ -134,6 +134,13 @@ def parse_odim_source(odim: h5py.File, def_msg: dict[str, Any]) -> None: def_msg["properties"]["platform_name"] = "[" + nod + "]" + " " + station else: def_msg["properties"]["platform_name"] = "[" + nod + "]" + + cc = str(nod)[:2].lower() + if def_msg["properties"]["naming_authority"] == "eu.eumetnet": + if cc.lower() in country_naming_auth: + def_msg["properties"]["naming_authority"] = country_naming_auth[cc] + else: + def_msg["properties"]["naming_authority"] = cc else: if org == "247": def_msg["properties"]["period_int"] = 300 diff --git a/src/openradardata_validator/radar_cf.py b/src/openradardata_validator/radar_cf.py index fc61197..86d193b 100644 --- a/src/openradardata_validator/radar_cf.py +++ b/src/openradardata_validator/radar_cf.py @@ -87,3 +87,39 @@ "publisher_type", "publisher_institution" ] + +country_naming_auth = { + "at": "at.austrocontrol", + "be": "be.meteo", + "ch": "ch.meteoswiss", + "mt": "com.maltairport", + "cy": "cy.gov.moa.dom", + "cz": "cz.chmi", + "de": "de.dwd", + "dk": "dk.dmi", + "ee": "ee.envir", + "es": "es.aemet", + "fi": "fi.fmi", + "fr": "fr.meteo", + "gr": "gr.hnms", + "hr": "hr.dhz.cirus", + "hu": "hu.met", + "ie": "ie.met", + "il": "il.gov.ims", + "is": "is.vedur", + "je": "je.gov.jerseymet", + "lt": "lt.meteo", + "lu": "lu.etat.airport", + "lv": "lv.lvgmc", + "md": "md.gov.meteo", + "nl": "nl.knmi", + "no": "no.met", + "pl": "pl.imgw", + "pt": "pt.ipma", + "ro": "ro.meteoromania", + "rs": "rs.gov.hidmet", + "se": "se.smhi", + "si": "si.gov", + "sk": "sk.shmu", + "uk": "uk.gov.metoffice" +}