From 414be7e7285b0814c790f084e5edce757ce49ce2 Mon Sep 17 00:00:00 2001 From: George McCabe <23407799+georgemccabe@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:53:31 -0600 Subject: [PATCH] Feature #2727 point_weight_flag and obtype_as_group_val_flag (#2730) * Per #2727, add support for setting point_weight_flag * Per #2727, add support for obtype_as_group_val_flag * per #2714, deprecate master_metplus.py --- docs/Users_Guide/glossary.rst | 20 +++++++ docs/Users_Guide/wrappers.rst | 54 ++++++++++++++++++- .../test_ensemble_stat_wrapper.py | 5 ++ .../point_stat/test_point_stat_wrapper.py | 4 ++ metplus/wrappers/ensemble_stat_wrapper.py | 9 ++++ metplus/wrappers/point_stat_wrapper.py | 9 ++++ parm/met_config/EnsembleStatConfig_wrapped | 5 ++ parm/met_config/PointStatConfig_wrapped | 6 +++ .../EnsembleStat/EnsembleStat.conf | 3 ++ .../met_tool_wrapper/PointStat/PointStat.conf | 3 ++ ush/master_metplus.py | 11 +++- 11 files changed, 127 insertions(+), 2 deletions(-) mode change 120000 => 100755 ush/master_metplus.py diff --git a/docs/Users_Guide/glossary.rst b/docs/Users_Guide/glossary.rst index 2dcd640c4f..4ed26829ba 100644 --- a/docs/Users_Guide/glossary.rst +++ b/docs/Users_Guide/glossary.rst @@ -12970,3 +12970,23 @@ METplus Configuration Glossary using the -aggr command line argument. | *Used by:* SeriesAnalysis + + POINT_STAT_POINT_WEIGHT_FLAG + Specify the value for 'point_weight_flag' in the MET configuration file for PointStat. + + | *Used by:* PointStat + + ENSEMBLE_STAT_POINT_WEIGHT_FLAG + Specify the value for 'point_weight_flag' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat + + POINT_STAT_OBTYPE_AS_GROUP_VAL_FLAG + Specify the value for 'obtype_as_group_val_flag' in the MET configuration file for PointStat. + + | *Used by:* PointStat + + ENSEMBLE_STAT_OBTYPE_AS_GROUP_VAL_FLAG + Specify the value for 'obtype_as_group_val_flag' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat diff --git a/docs/Users_Guide/wrappers.rst b/docs/Users_Guide/wrappers.rst index aa2794377c..5ca93e9dd0 100644 --- a/docs/Users_Guide/wrappers.rst +++ b/docs/Users_Guide/wrappers.rst @@ -233,6 +233,7 @@ METplus Configuration | :term:`ENSEMBLE_STAT_CUSTOM_LOOP_LIST` | :term:`ENSEMBLE_STAT_SKIP_IF_OUTPUT_EXISTS` | :term:`ENSEMBLE_STAT_DESC` +| :term:`ENSEMBLE_STAT_OBTYPE_AS_GROUP_VAL_FLAG` | :term:`ENSEMBLE_STAT_ENS_SSVAR_BIN_SIZE` | :term:`ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE` | :term:`ENSEMBLE_STAT_CLIMO_CDF_BINS` @@ -356,6 +357,7 @@ METplus Configuration | :term:`ENSEMBLE_STAT_ENS_MEMBER_IDS` | :term:`ENSEMBLE_STAT_CONTROL_ID` | :term:`ENSEMBLE_STAT_GRID_WEIGHT_FLAG` +| :term:`ENSEMBLE_STAT_POINT_WEIGHT_FLAG` | :term:`ENSEMBLE_STAT_PROB_CAT_THRESH` | :term:`ENSEMBLE_STAT_PROB_PCT_THRESH` | :term:`ENSEMBLE_STAT_ECLV_POINTS` @@ -849,6 +851,18 @@ ${METPLUS_OBS_ERROR_FLAG} * - :term:`ENSEMBLE_STAT_OBS_ERROR_FLAG` - obs_error.flag +${METPLUS_OBTYPE_AS_GROUP_VAL_FLAG} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`ENSEMBLE_STAT_OBTYPE_AS_GROUP_VAL_FLAG` + - obtype_as_group_val_flag + ${METPLUS_ENS_SSVAR_BIN_SIZE} """"""""""""""""""""""""""""" @@ -1091,6 +1105,18 @@ ${METPLUS_GRID_WEIGHT_FLAG} * - :term:`ENSEMBLE_STAT_GRID_WEIGHT_FLAG` - grid_weight_flag +${METPLUS_POINT_WEIGHT_FLAG} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`ENSEMBLE_STAT_POINT_WEIGHT_FLAG` + - point_weight_flag + ${METPLUS_OUTPUT_PREFIX} """""""""""""""""""""""" @@ -7070,6 +7096,7 @@ Configuration | :term:`POINT_STAT_HIRA_SHAPE` | :term:`POINT_STAT_HIRA_PROB_CAT_THRESH` | :term:`POINT_STAT_MESSAGE_TYPE_GROUP_MAP` +| :term:`POINT_STAT_OBTYPE_AS_GROUP_VAL_FLAG` | :term:`FCST_POINT_STAT_IS_PROB` | :term:`FCST_POINT_STAT_PROB_IN_GRIB_PDS` | :term:`FCST_POINT_STAT_WINDOW_BEGIN` @@ -7097,6 +7124,7 @@ Configuration | :term:`POINT_STAT_UGRID_MAX_DISTANCE_KM` | :term:`POINT_STAT_UGRID_COORDINATES_FILE` | :term:`POINT_STAT_UGRID_CONFIG_FILE` +| :term:`POINT_STAT_POINT_WEIGHT_FLAG` | .. warning:: **DEPRECATED:** @@ -7472,7 +7500,19 @@ ${METPLUS_MESSAGE_TYPE_GROUP_MAP} - MET Config File * - :term:`POINT_STAT_MESSAGE_TYPE_GROUP_MAP` - message_type_group_map - + +${METPLUS_OBTYPE_AS_GROUP_VAL_FLAG} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`POINT_STAT_OBTYPE_AS_GROUP_VAL_FLAG` + - obtype_as_group_val_flag + ${METPLUS_CLIMO_MEAN_DICT} """""""""""""""""""""""""" @@ -7787,6 +7827,18 @@ ${METPLUS_OUTPUT_PREFIX} * - :term:`POINT_STAT_OUTPUT_PREFIX` - output_prefix +${METPLUS_POINT_WEIGHT_FLAG} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`POINT_STAT_POINT_WEIGHT_FLAG` + - point_weight_flag + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" diff --git a/internal/tests/pytests/wrappers/ensemble_stat/test_ensemble_stat_wrapper.py b/internal/tests/pytests/wrappers/ensemble_stat/test_ensemble_stat_wrapper.py index b17171495d..963966513b 100644 --- a/internal/tests/pytests/wrappers/ensemble_stat/test_ensemble_stat_wrapper.py +++ b/internal/tests/pytests/wrappers/ensemble_stat/test_ensemble_stat_wrapper.py @@ -829,6 +829,11 @@ def test_ensemble_stat_field_info(metplus_config, config_overrides, 'time_interp_method = NEAREST;' 'match_month = TRUE;day_interval = 30;' 'hour_interval = 12;}')}), + ({'ENSEMBLE_STAT_POINT_WEIGHT_FLAG': 'SID', }, + {'METPLUS_POINT_WEIGHT_FLAG': 'point_weight_flag = SID;'}), + ({'ENSEMBLE_STAT_OBTYPE_AS_GROUP_VAL_FLAG': 'FALSE', }, + {'METPLUS_OBTYPE_AS_GROUP_VAL_FLAG': 'obtype_as_group_val_flag = FALSE;'}), + ] ) @pytest.mark.wrapper_c diff --git a/internal/tests/pytests/wrappers/point_stat/test_point_stat_wrapper.py b/internal/tests/pytests/wrappers/point_stat/test_point_stat_wrapper.py index 3660a1b37a..b76ac81d53 100755 --- a/internal/tests/pytests/wrappers/point_stat/test_point_stat_wrapper.py +++ b/internal/tests/pytests/wrappers/point_stat/test_point_stat_wrapper.py @@ -863,6 +863,10 @@ def test_met_dictionary_in_var_options(metplus_config): 'time_interp_method = NEAREST;' 'match_month = TRUE;day_interval = 30;' 'hour_interval = 12;}')}), + ({'POINT_STAT_POINT_WEIGHT_FLAG': 'SID', }, + {'METPLUS_POINT_WEIGHT_FLAG': 'point_weight_flag = SID;'}), + ({'POINT_STAT_OBTYPE_AS_GROUP_VAL_FLAG': 'FALSE', }, + {'METPLUS_OBTYPE_AS_GROUP_VAL_FLAG': 'obtype_as_group_val_flag = FALSE;'}), ] ) @pytest.mark.wrapper_a diff --git a/metplus/wrappers/ensemble_stat_wrapper.py b/metplus/wrappers/ensemble_stat_wrapper.py index 92364bab17..8121eec8bf 100755 --- a/metplus/wrappers/ensemble_stat_wrapper.py +++ b/metplus/wrappers/ensemble_stat_wrapper.py @@ -68,9 +68,11 @@ class EnsembleStatWrapper(CompareGriddedWrapper): 'METPLUS_ENS_MEMBER_IDS', 'METPLUS_CONTROL_ID', 'METPLUS_GRID_WEIGHT_FLAG', + 'METPLUS_POINT_WEIGHT_FLAG', 'METPLUS_PROB_CAT_THRESH', 'METPLUS_PROB_PCT_THRESH', 'METPLUS_ECLV_POINTS', + 'METPLUS_OBTYPE_AS_GROUP_VAL_FLAG', ] # deprecated env vars that are no longer supported in the wrapped MET conf @@ -267,6 +269,8 @@ def create_c_dict(self): extra_args={'remove_quotes': True, 'allow_empty': True}) + self.add_met_config(name='obtype_as_group_val_flag', data_type='bool') + self.add_met_config(name='ens_ssvar_bin_size', data_type='float') self.add_met_config(name='ens_phist_bin_size', data_type='float') @@ -354,6 +358,11 @@ def create_c_dict(self): extra_args={'remove_quotes': True, 'uppercase': True}) + self.add_met_config(name='point_weight_flag', + data_type='string', + extra_args={'remove_quotes': True, + 'uppercase': True}) + self.add_met_config(name='prob_pct_thresh', data_type='list', extra_args={'remove_quotes': True}) diff --git a/metplus/wrappers/point_stat_wrapper.py b/metplus/wrappers/point_stat_wrapper.py index 13d797af2a..bce6459366 100755 --- a/metplus/wrappers/point_stat_wrapper.py +++ b/metplus/wrappers/point_stat_wrapper.py @@ -52,12 +52,14 @@ class PointStatWrapper(CompareGriddedWrapper): 'METPLUS_HSS_EC_VALUE', 'METPLUS_HIRA_DICT', 'METPLUS_MESSAGE_TYPE_GROUP_MAP', + 'METPLUS_OBTYPE_AS_GROUP_VAL_FLAG', 'METPLUS_FCST_FILE_TYPE', 'METPLUS_OBS_FILE_TYPE', 'METPLUS_SEEPS_P1_THRESH', 'METPLUS_UGRID_DATASET', 'METPLUS_UGRID_MAX_DISTANCE_KM', 'METPLUS_UGRID_COORDINATES_FILE', + 'METPLUS_POINT_WEIGHT_FLAG', ] # deprecated env vars that are no longer supported in the wrapped MET conf @@ -279,6 +281,8 @@ def create_c_dict(self): self.add_met_config(name='message_type_group_map', data_type='list', extra_args={'remove_quotes': True}) + self.add_met_config(name='obtype_as_group_val_flag', data_type='bool') + self.add_met_config(name='seeps_p1_thresh', data_type='string', extra_args={'remove_quotes': True}) @@ -286,6 +290,11 @@ def create_c_dict(self): self.add_met_config(name='ugrid_max_distance_km', data_type='int') self.add_met_config(name='ugrid_coordinates_file', data_type='string') + self.add_met_config(name='point_weight_flag', + data_type='string', + extra_args={'remove_quotes': True, + 'uppercase': True}) + if not c_dict['FCST_INPUT_TEMPLATE']: self.log_error('Must set FCST_POINT_STAT_INPUT_TEMPLATE ' 'in config file') diff --git a/parm/met_config/EnsembleStatConfig_wrapped b/parm/met_config/EnsembleStatConfig_wrapped index 9f508ff4c7..92a79082a1 100644 --- a/parm/met_config/EnsembleStatConfig_wrapped +++ b/parm/met_config/EnsembleStatConfig_wrapped @@ -136,6 +136,9 @@ message_type_group_map = [ { key = "ONLYSF"; val = "ADPSFC,SFCSHP"; } ]; +//obtype_as_group_val_flag = +${METPLUS_OBTYPE_AS_GROUP_VAL_FLAG} + // // Ensemble bin sizes // May be set separately in each "obs.field" entry @@ -234,6 +237,8 @@ rng = { //grid_weight_flag = ${METPLUS_GRID_WEIGHT_FLAG} +//point_weight_flag = +${METPLUS_POINT_WEIGHT_FLAG} //output_prefix = ${METPLUS_OUTPUT_PREFIX} //version = "V9.0"; diff --git a/parm/met_config/PointStatConfig_wrapped b/parm/met_config/PointStatConfig_wrapped index 0d12bd0a73..780fb829e8 100644 --- a/parm/met_config/PointStatConfig_wrapped +++ b/parm/met_config/PointStatConfig_wrapped @@ -93,6 +93,9 @@ ${METPLUS_OBS_PERC_VALUE} //message_type_group_map = ${METPLUS_MESSAGE_TYPE_GROUP_MAP} +//obtype_as_group_val_flag = +${METPLUS_OBTYPE_AS_GROUP_VAL_FLAG} + //////////////////////////////////////////////////////////////////////////////// // @@ -208,6 +211,9 @@ ${METPLUS_UGRID_COORDINATES_FILE} //////////////////////////////////////////////////////////////////////////////// +//point_weight_flag = +${METPLUS_POINT_WEIGHT_FLAG} + tmp_dir = "${MET_TMP_DIR}"; // output_prefix = diff --git a/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf b/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf index 3ac91314f2..5d08f98ac4 100644 --- a/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf +++ b/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf @@ -131,6 +131,8 @@ ENSEMBLE_STAT_SKIP_CONST = False ENSEMBLE_STAT_OBS_ERROR_FLAG = FALSE +#ENSEMBLE_STAT_OBTYPE_AS_GROUP_VAL_FLAG = + ENSEMBLE_STAT_ENS_SSVAR_BIN_SIZE = 1.0 ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE = 0.05 @@ -246,3 +248,4 @@ ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT = FALSE #ENSEMBLE_STAT_CONTROL_ID = #ENSEMBLE_STAT_GRID_WEIGHT_FLAG = +#ENSEMBLE_STAT_POINT_WEIGHT_FLAG = diff --git a/parm/use_cases/met_tool_wrapper/PointStat/PointStat.conf b/parm/use_cases/met_tool_wrapper/PointStat/PointStat.conf index 6d793e2bf9..92816c297b 100644 --- a/parm/use_cases/met_tool_wrapper/PointStat/PointStat.conf +++ b/parm/use_cases/met_tool_wrapper/PointStat/PointStat.conf @@ -259,8 +259,11 @@ POINT_STAT_MESSAGE_TYPE = ADPUPA, ADPSFC #POINT_STAT_HIRA_PROB_CAT_THRESH = #POINT_STAT_MESSAGE_TYPE_GROUP_MAP = +#POINT_STAT_OBTYPE_AS_GROUP_VAL_FLAG = #POINT_STAT_UGRID_DATASET = #POINT_STAT_UGRID_MAX_DISTANCE_KM = #POINT_STAT_UGRID_COORDINATES_FILE = #POINT_STAT_UGRID_CONFIG_FILE = + +#POINT_STAT_POINT_WEIGHT_FLAG = diff --git a/ush/master_metplus.py b/ush/master_metplus.py deleted file mode 120000 index ffbf916c4b..0000000000 --- a/ush/master_metplus.py +++ /dev/null @@ -1 +0,0 @@ -run_metplus.py \ No newline at end of file diff --git a/ush/master_metplus.py b/ush/master_metplus.py new file mode 100755 index 0000000000..e8eef52e67 --- /dev/null +++ b/ush/master_metplus.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python3 + +import sys + +def main(): + print("ERROR: master_metplus.py is deprecated. Please use run_metplus.py instead") + sys.exit(1) + +if __name__ == "__main__": + main()