diff --git a/src/subscript/fmuobs/fmuobs.py b/src/subscript/fmuobs/fmuobs.py index 5954d7e38..3d765bcfe 100644 --- a/src/subscript/fmuobs/fmuobs.py +++ b/src/subscript/fmuobs/fmuobs.py @@ -166,8 +166,10 @@ def validate_internal_dframe(obs_df: pd.DataFrame) -> bool: failed = True non_supported_classes = set(obs_df["CLASS"]) - set(CLASS_SHORTNAME.keys()) if non_supported_classes: - logger.error("Unsupported observation classes: %s", non_supported_classes) - failed = True + logger.warning( + "Unsupported observation classes (will be ignored): %s", + non_supported_classes, + ) index = {"CLASS", "LABEL", "OBS", "SEGMENT"}.intersection(set(obs_df.columns)) repeated_rows = obs_df[obs_df.set_index(list(index)).index.duplicated(keep=False)] diff --git a/src/subscript/fmuobs/parsers.py b/src/subscript/fmuobs/parsers.py index c15b9aecc..31a357b3d 100644 --- a/src/subscript/fmuobs/parsers.py +++ b/src/subscript/fmuobs/parsers.py @@ -358,8 +358,10 @@ def flatten_observation_unit( for subunit in subunit_keys: if len(subunit.split()) < 2: - # It must be two strings, like "OBS P1", or "SEGMENT FIRST_YEAR". - raise ValueError("Wrong observation subunit syntax: " + str(subunit)) + # Single-word subunit keys (e.g. LOCALIZATION) carry no label and + # are not representable in the internal dataframe format; skip them. + logger.debug("Ignoring unlabeled subunit block: %s", subunit) + continue obs_subunits.append( { subunit.split()[0]: subunit.split()[1], @@ -367,6 +369,10 @@ def flatten_observation_unit( **obsunit[subunit], } ) + if not obs_subunits: + # All nested blocks were unlabeled (e.g. only LOCALIZATION); return + # the plain key-value data of this observation. + return [keyvalues] return obs_subunits diff --git a/tests/test_fmuobs.py b/tests/test_fmuobs.py index 4fb9d26a1..a36ed9948 100644 --- a/tests/test_fmuobs.py +++ b/tests/test_fmuobs.py @@ -33,6 +33,7 @@ def fixture_readonly_testdata_dir(monkeypatch): ("ert-doc.csv", "csv"), ("fmu-ensemble-obs.yml", "yaml"), ("drogon_wbhp_rft_wct_gor_tracer_4d.obs", "ert"), + ("drogon_wbhp_rft_wct_gor_tracer_plt_local.obs", "ert"), ], ) def test_autoparse_file(filename, expected_format, readonly_testdata_dir): @@ -161,6 +162,7 @@ def test_roundtrip_ertobs(filename, readonly_testdata_dir): ("ert-doc.csv"), ("fmu-ensemble-obs.yml"), ("drogon_wbhp_rft_wct_gor_tracer_4d.obs"), + ("drogon_wbhp_rft_wct_gor_tracer_plt_local.obs"), ], ) def test_roundtrip_yaml(filename, readonly_testdata_dir): @@ -206,6 +208,7 @@ def test_roundtrip_yaml(filename, readonly_testdata_dir): ("ert-doc.csv"), ("fmu-ensemble-obs.yml"), ("drogon_wbhp_rft_wct_gor_tracer_4d.obs"), + ("drogon_wbhp_rft_wct_gor_tracer_plt_local.obs"), ], ) def test_roundtrip_resinsight(filename, readonly_testdata_dir): @@ -228,19 +231,73 @@ def test_roundtrip_resinsight(filename, readonly_testdata_dir): # LABEL is not part of the ResInsight format, and a made-up label # is obtained through the roundtrip (when importing back). Skip it - # when comparing. + # when comparing. ERROR_MODE is also not preserved in ResInsight format. pd.testing.assert_frame_equal( ri_roundtrip_dframe.sort_index(axis="columns").drop( - ["LABEL", "COMMENT", "SUBCOMMENT"], axis="columns", errors="ignore" + ["LABEL", "COMMENT", "SUBCOMMENT", "ERROR_MODE"], + axis="columns", + errors="ignore", ), dframe.sort_index(axis="columns").drop( - ["LABEL", "COMMENT", "SUBCOMMENT"], axis="columns", errors="ignore" + ["LABEL", "COMMENT", "SUBCOMMENT", "ERROR_MODE"], + axis="columns", + errors="ignore", ), check_like=True, ) +def test_rft_observation_warning(readonly_testdata_dir, caplog): + """Test that RFT_OBSERVATION (unsupported class) is silently ignored with + a warning instead of raising an error.""" + import logging + + filename = "drogon_wbhp_rft_wct_gor_tracer_plt_local.obs" + with caplog.at_level(logging.WARNING): + format_, dframe = autoparse_file(filename) + + assert format_ == "ert" + assert not dframe.empty + assert "RFT_OBSERVATION" in dframe["CLASS"].values + + # No error should have been logged about unsupported classes + assert ( + "error" not in caplog.text.lower() or "unsupported" not in caplog.text.lower() + ) + # A warning should be emitted from validate_internal_dframe via main(), + # but autoparse_file does not call validate; check the class is parseable. + assert "SUMMARY_OBSERVATION" in dframe["CLASS"].values + + +def test_rft_observation_warning_via_main(tmp_path, mocker, caplog, monkeypatch): + """Test that running main() on a file with RFT_OBSERVATION emits a warning + (not an error) and produces valid output for supported classes.""" + import logging + + monkeypatch.chdir(tmp_path) + mocker.patch( + "sys.argv", + [ + "fmuobs", + "--includedir", + str(TESTDATA_DIR), + "--csv", + "output.csv", + str(TESTDATA_DIR / "drogon_wbhp_rft_wct_gor_tracer_plt_local.obs"), + ], + ) + with caplog.at_level(logging.WARNING): + main() + + assert Path("output.csv").exists() + # Should warn about unsupported class, not error + assert "RFT_OBSERVATION" in caplog.text + assert "Unsupported observation classes (will be ignored)" in caplog.text + # Dataframe is still valid (no error logged about invalidity) + assert "Observation dataframe is invalid" not in caplog.text + + @pytest.mark.integration def test_integration(): """Test that the endpoint is installed""" diff --git a/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_plt_local.obs b/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_plt_local.obs new file mode 100644 index 000000000..8cbbecb46 --- /dev/null +++ b/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_plt_local.obs @@ -0,0 +1,135 @@ +-- The item ERROR_MODE can take three different values - ABS, REL or RELMIN. +-- The default error mode for the HISTORY_OBSERVATION keyword is RELMIN, +-- while the default for the SUMMARY_OBSERVATION keyword is ABS. +-- +-- NOTE 'fmuobs' only supports ABS error mode + +-- NOTE Localization data for position (EAST, NORTH) was extracted from well paths in RMS and the mid-point of the well path was chosen. +-- The localization radius is (arbitrarily) assigned to relatively typical values, but may very well be modified. +-- Seismic data is not included here since the observation format is not yet ready for localization. + +-- Seismic data +-- GENERAL_OBSERVATION AMP_2020_2018_TOP { DATA = AMP_2020_2018_TOP ; RESTART=1; OBS_FILE=./seismic/topvolantis_amplitude_mean_20200701_20180101_1.txt; }; +-- GENERAL_OBSERVATION AMP_2020_2018_BASE { DATA = AMP_2020_2018_BASE ; RESTART=1; OBS_FILE=./seismic/basevolantis_amplitude_mean_20200701_20180101_1.txt; }; +-- +-- PLT data +SUMMARY_OBSERVATION A3_WOPR_VALYSAR_01_08_2019 {VALUE = 266; ERROR = 100; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WOPRL__1:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A3_WOPR_THERYS_01_08_2019 {VALUE = 0; ERROR = 100; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WOPRL__2:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A3_WOPR_VOLON_01_08_2019 {VALUE = 1072; ERROR = 100; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WOPRL__3:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A3_WWPR_VOLON_01_08_2019 {VALUE = 1211; ERROR = 100; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WWPRL__3:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A4_WOPR_VALYSAR_01_08_2019 {VALUE = 825; ERROR = 100; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WOPRL__1:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION A4_WOPR_VOLON_01_08_2019 {VALUE = 1800; ERROR = 100; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WOPRL__3:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION A5_WWIR_VALYSAR_01_08_2019 {VALUE = 3943; ERROR = 200; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WWIRL__1:A5; LOCALIZATION { EAST = 461519.21; NORTH = 5935692.65; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A5_WWIR_THERYS_01_08_2019 {VALUE = 1929; ERROR = 200; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WWIRL__2:A5; LOCALIZATION { EAST = 461519.21; NORTH = 5935692.65; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A5_WWIR_VOLON_01_08_2019 {VALUE = 2127; ERROR = 200; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WWIRL__3:A5; LOCALIZATION { EAST = 461519.21; NORTH = 5935692.65; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A6_WWIR_VALYSAR_01_08_2019 {VALUE = 1164; ERROR = 200; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WWIRL__1:A6; LOCALIZATION { EAST = 461292.74; NORTH = 5931883.26; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A6_WWIR_THERYS_01_08_2019 {VALUE = 3107; ERROR = 200; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WWIRL__2:A6; LOCALIZATION { EAST = 461292.74; NORTH = 5931883.26; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A6_WWIR_VOLON_01_08_2019 {VALUE = 3729; ERROR = 200; ERROR_MODE = ABS; DATE = 2019-08-01; KEY = WWIRL__3:A6; LOCALIZATION { EAST = 461292.74; NORTH = 5931883.26; RADIUS = 1000.0;}; }; +-- +-- Tracer data +GENERAL_OBSERVATION TRACER_OBS { DATA = TRACER_SIM; RESTART=1; OBS_FILE=./tracer/drogon_tracer.obs; }; +-- +-- RFT data +RFT_OBSERVATION rft_obs { CSV=./rft/rft_ertobs.csv; } ; +-- +-- BHP (shut-in) data +SUMMARY_OBSERVATION A1_WBHP_05_05_2019 { VALUE = 237.8; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-05-05; KEY = WBHP:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A2_WBHP_05_05_2019 { VALUE = 266.8; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-05-05; KEY = WBHP:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A3_WBHP_05_05_2019 { VALUE = 218.2; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-05-05; KEY = WBHP:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A4_WBHP_05_05_2019 { VALUE = 245.2; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-05-05; KEY = WBHP:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION A5_WBHP_05_05_2019 { VALUE = 296.2; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-05-05; KEY = WBHP:A5; LOCALIZATION { EAST = 461519.21; NORTH = 5935692.65; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A6_WBHP_05_05_2019 { VALUE = 287.1; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-05-05; KEY = WBHP:A6; LOCALIZATION { EAST = 461292.74; NORTH = 5931883.26; RADIUS = 1000.0;}; }; +-- +SUMMARY_OBSERVATION A1_WBHP_02_11_2019 { VALUE = 214.0; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-11-02; KEY = WBHP:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A2_WBHP_02_11_2019 { VALUE = 261.2; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-11-02; KEY = WBHP:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A3_WBHP_02_11_2019 { VALUE = 200.6; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-11-02; KEY = WBHP:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A4_WBHP_02_11_2019 { VALUE = 243.3; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-11-02; KEY = WBHP:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION A5_WBHP_02_11_2019 { VALUE = 307.7; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-11-02; KEY = WBHP:A5; LOCALIZATION { EAST = 461519.21; NORTH = 5935692.65; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A6_WBHP_02_11_2019 { VALUE = 294.1; ERROR = 10; ERROR_MODE = ABS; DATE = 2019-11-02; KEY = WBHP:A6; LOCALIZATION { EAST = 461292.74; NORTH = 5931883.26; RADIUS = 1000.0;}; }; +-- +SUMMARY_OBSERVATION A1_WBHP_05_05_2020 { VALUE = 222.9; ERROR = 10; ERROR_MODE = ABS; DATE = 2020-05-05; KEY = WBHP:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A2_WBHP_05_05_2020 { VALUE = 267.1; ERROR = 10; ERROR_MODE = ABS; DATE = 2020-05-05; KEY = WBHP:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A3_WBHP_05_05_2020 { VALUE = 218.8; ERROR = 10; ERROR_MODE = ABS; DATE = 2020-05-05; KEY = WBHP:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A4_WBHP_05_05_2020 { VALUE = 248.1; ERROR = 10; ERROR_MODE = ABS; DATE = 2020-05-05; KEY = WBHP:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION A5_WBHP_05_05_2020 { VALUE = 289.5; ERROR = 10; ERROR_MODE = ABS; DATE = 2020-05-05; KEY = WBHP:A5; LOCALIZATION { EAST = 461519.21; NORTH = 5935692.65; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION A6_WBHP_05_05_2020 { VALUE = 290.4; ERROR = 10; ERROR_MODE = ABS; DATE = 2020-05-05; KEY = WBHP:A6; LOCALIZATION { EAST = 461292.74; NORTH = 5931883.26; RADIUS = 1000.0;}; }; +-- +-- WWCT and WGOR data +SUMMARY_OBSERVATION WWCT_A1_0 { VALUE = 2.990008169945213e-06; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-03-30; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_1 { VALUE = 2.9680345505767036e-06; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-06-22; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_2 { VALUE = 2.8782408207916887e-06; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-09-14; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_3 { VALUE = 2.976913492602762e-06; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-12-07; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_4 { VALUE = 0.000736650254111737; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-03-01; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_5 { VALUE = 0.035560693591833115; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-05-24; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_6 { VALUE = 0.06950899958610535; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-08-16; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_7 { VALUE = 0.20865759253501892; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-11-08; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_8 { VALUE = 0.3314569592475891; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-01-31; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A1_9 { VALUE = 0.4636625051498413; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-04-24; KEY=WWCT:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; + +SUMMARY_OBSERVATION WGOR_A1_0 { VALUE = 138.32456970214844; ERROR = 50; ERROR_MODE = ABS; DATE=2018-03-30; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_1 { VALUE = 137.20663452148438; ERROR = 50; ERROR_MODE = ABS; DATE=2018-06-22; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_2 { VALUE = 137.1474609375; ERROR = 50; ERROR_MODE = ABS; DATE=2018-09-14; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_3 { VALUE = 134.7957305908203; ERROR = 50; ERROR_MODE = ABS; DATE=2018-12-07; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_4 { VALUE = 133.6744842529297; ERROR = 50; ERROR_MODE = ABS; DATE=2019-03-01; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_5 { VALUE = 150.79522705078125; ERROR = 50; ERROR_MODE = ABS; DATE=2019-05-24; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_6 { VALUE = 181.50244140625; ERROR = 50; ERROR_MODE = ABS; DATE=2019-08-16; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_7 { VALUE = 202.2801971435547; ERROR = 50; ERROR_MODE = ABS; DATE=2019-11-08; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_8 { VALUE = 182.59190368652344; ERROR = 50; ERROR_MODE = ABS; DATE=2020-01-31; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A1_9 { VALUE = 147.66795349121094; ERROR = 50; ERROR_MODE = ABS; DATE=2020-04-24; KEY=WGOR:A1; LOCALIZATION { EAST = 462588.52; NORTH = 5934080.96; RADIUS = 1000.0;}; }; + +SUMMARY_OBSERVATION WWCT_A2_0 { VALUE = 0.10108489543199539; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-06-02; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_1 { VALUE = 0.25315606594085693; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-08-25; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_2 { VALUE = 0.2776966989040375; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-11-17; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_3 { VALUE = 0.283459335565567; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-02-09; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_4 { VALUE = 0.0; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-05-04; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_5 { VALUE = 0.32546260952949524; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-07-27; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_6 { VALUE = 0.351017028093338; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-10-19; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_7 { VALUE = 0.37808743119239807; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-01-11; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_8 { VALUE = 0.4027750790119171; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-04-04; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A2_9 { VALUE = 0.43981707096099854; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-06-27; KEY=WWCT:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; + +SUMMARY_OBSERVATION WGOR_A2_0 { VALUE = 153.72811889648438; ERROR = 50; ERROR_MODE = ABS; DATE=2018-06-02; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_1 { VALUE = 156.37786865234375; ERROR = 50; ERROR_MODE = ABS; DATE=2018-08-25; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_2 { VALUE = 155.46145629882812; ERROR = 50; ERROR_MODE = ABS; DATE=2018-11-17; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_3 { VALUE = 152.78273010253906; ERROR = 50; ERROR_MODE = ABS; DATE=2019-02-09; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_4 { VALUE = 0.0; ERROR = 50; ERROR_MODE = ABS; DATE=2019-05-04; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_5 { VALUE = 156.41839599609375; ERROR = 50; ERROR_MODE = ABS; DATE=2019-07-27; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_6 { VALUE = 157.92662048339844; ERROR = 50; ERROR_MODE = ABS; DATE=2019-10-19; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_7 { VALUE = 159.18914794921875; ERROR = 50; ERROR_MODE = ABS; DATE=2020-01-11; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_8 { VALUE = 159.24913024902344; ERROR = 50; ERROR_MODE = ABS; DATE=2020-04-04; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A2_9 { VALUE = 160.32638549804688; ERROR = 50; ERROR_MODE = ABS; DATE=2020-06-27; KEY=WGOR:A2; LOCALIZATION { EAST = 460994.90; NORTH = 5933813.29; RADIUS = 1000.0;}; }; + +SUMMARY_OBSERVATION WWCT_A3_0 { VALUE = 0.00023010979930404574; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-10-05; KEY=WWCT:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A3_1 { VALUE = 0.22004300355911255; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-12-28; KEY=WWCT:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A3_2 { VALUE = 0.38389915227890015; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-03-22; KEY=WWCT:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A3_3 { VALUE = 0.45054447650909424; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-06-14; KEY=WWCT:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A3_4 { VALUE = 0.4891080856323242; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-09-06; KEY=WWCT:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A3_5 { VALUE = 0.5082587003707886; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-11-29; KEY=WWCT:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A3_6 { VALUE = 0.5267271399497986; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-02-21; KEY=WWCT:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WWCT_A3_7 { VALUE = 0.5443038940429688; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-05-15; KEY=WWCT:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; + +SUMMARY_OBSERVATION WGOR_A3_0 { VALUE = 256.6658935546875; ERROR = 50; ERROR_MODE = ABS; DATE=2018-10-05; KEY=WGOR:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A3_1 { VALUE = 141.71803283691406; ERROR = 50; ERROR_MODE = ABS; DATE=2018-12-28; KEY=WGOR:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A3_2 { VALUE = 142.8449249267578; ERROR = 50; ERROR_MODE = ABS; DATE=2019-03-22; KEY=WGOR:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A3_3 { VALUE = 161.7709197998047; ERROR = 50; ERROR_MODE = ABS; DATE=2019-06-14; KEY=WGOR:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A3_4 { VALUE = 161.30799865722656; ERROR = 50; ERROR_MODE = ABS; DATE=2019-09-06; KEY=WGOR:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A3_5 { VALUE = 156.68983459472656; ERROR = 50; ERROR_MODE = ABS; DATE=2019-11-29; KEY=WGOR:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A3_6 { VALUE = 149.95159912109375; ERROR = 50; ERROR_MODE = ABS; DATE=2020-02-21; KEY=WGOR:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; +SUMMARY_OBSERVATION WGOR_A3_7 { VALUE = 142.96775817871094; ERROR = 50; ERROR_MODE = ABS; DATE=2020-05-15; KEY=WGOR:A3; LOCALIZATION { EAST = 462753.44; NORTH = 5932869.64; RADIUS = 1000.0;}; }; + +SUMMARY_OBSERVATION WWCT_A4_0 { VALUE = 8.481842087348923e-06; ERROR = 0.1; ERROR_MODE = ABS; DATE=2018-12-15; KEY=WWCT:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WWCT_A4_1 { VALUE = 0.081839919090271; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-03-09; KEY=WWCT:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WWCT_A4_2 { VALUE = 0.2239859402179718; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-06-01; KEY=WWCT:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WWCT_A4_3 { VALUE = 0.3734499514102936; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-08-24; KEY=WWCT:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WWCT_A4_4 { VALUE = 0.4346226453781128; ERROR = 0.1; ERROR_MODE = ABS; DATE=2019-11-16; KEY=WWCT:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WWCT_A4_5 { VALUE = 0.49893033504486084; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-02-08; KEY=WWCT:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WWCT_A4_6 { VALUE = 0.0; ERROR = 0.1; ERROR_MODE = ABS; DATE=2020-05-02; KEY=WWCT:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; + +SUMMARY_OBSERVATION WGOR_A4_0 { VALUE = 136.2583465576172; ERROR = 50; ERROR_MODE = ABS; DATE=2018-12-15; KEY=WGOR:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WGOR_A4_1 { VALUE = 133.3849639892578; ERROR = 50; ERROR_MODE = ABS; DATE=2019-03-09; KEY=WGOR:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WGOR_A4_2 { VALUE = 133.1396942138672; ERROR = 50; ERROR_MODE = ABS; DATE=2019-06-01; KEY=WGOR:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WGOR_A4_3 { VALUE = 135.09825134277344; ERROR = 50; ERROR_MODE = ABS; DATE=2019-08-24; KEY=WGOR:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WGOR_A4_4 { VALUE = 135.28724670410156; ERROR = 50; ERROR_MODE = ABS; DATE=2019-11-16; KEY=WGOR:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WGOR_A4_5 { VALUE = 134.9546356201172; ERROR = 50; ERROR_MODE = ABS; DATE=2020-02-08; KEY=WGOR:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;}; }; +SUMMARY_OBSERVATION WGOR_A4_6 { VALUE = 0.0; ERROR = 50; ERROR_MODE = ABS; DATE=2020-05-02; KEY=WGOR:A4; LOCALIZATION { EAST = 464160.0; NORTH = 5932177.0; RADIUS = 1600.0;};}; +-- \ No newline at end of file