diff --git a/.github/parm/use_case_groups.json b/.github/parm/use_case_groups.json index 0e9a05056c..3bb687f2c8 100644 --- a/.github/parm/use_case_groups.json +++ b/.github/parm/use_case_groups.json @@ -117,7 +117,7 @@ { "category": "precipitation", "index_list": "3-7", - "run": false + "run": true }, { "category": "precipitation", diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index b156497b06..305e2e80f2 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -85,7 +85,7 @@ jobs: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} EXTERNAL_TRIGGER: ${{ needs.job_control.outputs.external_trigger }} - #MET_FORCE_TAG: 10.0.0 + #MET_FORCE_TAG: 10.1.0 update_data_volumes: name: Docker Setup - Update Data Volumes @@ -109,7 +109,7 @@ jobs: name: Use Case Tests runs-on: ubuntu-latest needs: [get_image, update_data_volumes, job_control] - if: ${{ always() && needs.job_control.outputs.run_some_tests == 'true' }} + if: ${{ needs.job_control.outputs.run_some_tests == 'true' }} strategy: fail-fast: false matrix: ${{fromJson(needs.job_control.outputs.matrix)}} diff --git a/docs/Users_Guide/glossary.rst b/docs/Users_Guide/glossary.rst index b2a4501c91..7dd8f3b440 100644 --- a/docs/Users_Guide/glossary.rst +++ b/docs/Users_Guide/glossary.rst @@ -984,12 +984,18 @@ METplus Configuration Glossary | *Used by:* EnsembleStat ENSEMBLE_STAT_ENS_VLD_THRESH + .. warning:: **DEPRECATED:** Please use :term:`ENSEMBLE_STAT_VLD_THRESH` instead. + + ENSEMBLE_STAT_VLD_THRESH Threshold for the ratio of the number of valid data values to the total number of expected ensemble members. This value is passed into the ensemble_stat config file to make sure the percentage of files that are valid meets the expectation. | *Used by:* EnsembleStat ENSEMBLE_STAT_ENS_OBS_THRESH - Sets the ens.obs_thresh value in the ensemble_stat MET config file. + .. warning:: **DEPRECATED:** Please use :term:`ENSEMBLE_STAT_OBS_THRESH`. + + ENSEMBLE_STAT_OBS_THRESH + Sets the obs_thresh value in the ensemble_stat MET config file. | *Used by:* EnsembleStat @@ -5586,19 +5592,13 @@ METplus Configuration Glossary | *Used by:* EnsembleStat ENSEMBLE_STAT_NBRHD_PROB_WIDTH - Specify the value for 'nbrhd_prob.width' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NBRHD_PROB_WIDTH` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_NBRHD_PROB_SHAPE - Specify the value for 'nbrhd_prob.shape' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NBRHD_PROB_SHAPE` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH - Specify the value for 'nbrhd_prob.vld_thresh' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NBRHD_PROB_VLD_THRESH` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_CLIMO_CDF_CDF_BINS See :term:`ENSEMBLE_STAT_CLIMO_CDF_BINS` @@ -5634,34 +5634,22 @@ METplus Configuration Glossary | *Used by:* EnsembleStat ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX - Specify the value for 'nmep_smooth.gaussian_dx' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NMEP_SMOOTH_GAUSSIAN_DX` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS - Specify the value for 'nmep_smooth.gaussian_radius' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NMEP_SMOOTH_GAUSSIAN_RADIUS` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH - Specify the value for 'nmep_smooth.vld_thresh' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NMEP_SMOOTH_VLD_THRESH` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE - Specify the value for 'nmep_smooth.shape' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NMEP_SMOOTH_SHAPE` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_NMEP_SMOOTH_METHOD - Specify the value for 'nmep_smooth.type.method' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NMEP_SMOOTH_METHOD` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH - Specify the value for 'nmep_smooth.type.width' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_NMEP_SMOOTH_WIDTH` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_CENSOR_THRESH Specify the value for 'censor_thresh' in the MET configuration file for EnsembleStat. @@ -5925,74 +5913,46 @@ METplus Configuration Glossary | *Used by:* EnsembleStat ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON - Specify the value for 'ensemble_flag.latlon' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON` or :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_LATLON` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN - Specify the value for 'ensemble_flag.mean' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN` or :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_MEAN` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV - Specify the value for 'ensemble_flag.stdev' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_STDEV` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS - Specify the value for 'ensemble_flag.minus' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_MINUS` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS - Specify the value for 'ensemble_flag.plus' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_PLUS` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN - Specify the value for 'ensemble_flag.min' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_MIN` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX - Specify the value for 'ensemble_flag.max' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_MAX` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE - Specify the value for 'ensemble_flag.range' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_RANGE` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT - Specify the value for 'ensemble_flag.vld_count' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT` or :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_VLD_COUNT` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY - Specify the value for 'ensemble_flag.frequency' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_FREQUENCY` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP - Specify the value for 'ensemble_flag.nep' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_NEP` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP - Specify the value for 'ensemble_flag.nmep' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_NMEP` in :ref:`gen_ens_prod_wrapper` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK - Specify the value for 'ensemble_flag.rank' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_RANK` instead. ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT - Specify the value for 'ensemble_flag.weight' in the MET configuration file for EnsembleStat. - - | *Used by:* EnsembleStat + .. warning:: **DEPRECATED:** Please use :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT` instead. GRID_STAT_MASK_GRID Specify the value for 'mask.grid' in the MET configuration file for GridStat. @@ -6358,9 +6318,12 @@ METplus Configuration Glossary | *Used by:* TCpairs ENS_ENSEMBLE_STAT_INPUT_DATATYPE - Set the file_type entry of the ens dictionary in the MET config file for EnsembleStat. + .. warning:: **DEPRECATED:** Please use :term:`GEN_ENS_PROD_INPUT_DATATYPE` in :ref:`gen_ens_prod_wrapper` instead. - | *Used by:* EnsembleStat + GEN_ENS_PROD_INPUT_DATATYPE + Set the file_type entry of the ens dictionary in the MET config file for GenEnsProd. + + | *Used by:* GenEnsProd FCST_SERIES_ANALYSIS_INPUT_DATATYPE Set the file_type entry of the fcst dictionary in the MET config file for SeriesAnalysis. @@ -9224,7 +9187,7 @@ METplus Configuration Glossary it will automatically be removed by the wrapper to prevent an error in the MET tool. This may require adjusting the value for :term:`ENSEMBLE_STAT_N_MEMBERS` and/or - :term:`ENSEMBLE_STAT_ENS_VLD_THRESH`. + :term:`ENSEMBLE_STAT_VLD_THRESH`. | *Used by:* EnsembleStat @@ -9937,3 +9900,38 @@ METplus Configuration Glossary See :ref:`Overriding Unsupported MET config file settings` for more information | *Used by:* PlotPointObs + + ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON + Specify the value for 'nc_orank_flag.latlon' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat + + ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN + Specify the value for 'nc_orank_flag.mean' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat + + ENSEMBLE_STAT_NC_ORANK_FLAG_RAW + Specify the value for 'nc_orank_flag.raw' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat + + ENSEMBLE_STAT_NC_ORANK_FLAG_RANK + Specify the value for 'nc_orank_flag.rank' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat + + ENSEMBLE_STAT_NC_ORANK_FLAG_PIT + Specify the value for 'nc_orank_flag.pit' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat + + ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT + Specify the value for 'nc_orank_flag.vld_count' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat + + ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT + Specify the value for 'nc_orank_flag.weight' 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 3a1b7c0af7..bf045de7ca 100644 --- a/docs/Users_Guide/wrappers.rst +++ b/docs/Users_Guide/wrappers.rst @@ -210,28 +210,19 @@ METplus Configuration | :term:`OBS_ENSEMBLE_STAT_FILE_WINDOW_BEGIN` | :term:`OBS_ENSEMBLE_STAT_FILE_WINDOW_END` | :term:`ENSEMBLE_STAT_ENS_THRESH` -| :term:`ENSEMBLE_STAT_ENS_VLD_THRESH` -| :term:`ENSEMBLE_STAT_ENS_OBS_THRESH` +| :term:`ENSEMBLE_STAT_VLD_THRESH` +| :term:`ENSEMBLE_STAT_OBS_THRESH` | :term:`ENSEMBLE_STAT_CUSTOM_LOOP_LIST` | :term:`ENSEMBLE_STAT_SKIP_IF_OUTPUT_EXISTS` | :term:`ENSEMBLE_STAT_DESC` | :term:`ENSEMBLE_STAT_ENS_SSVAR_BIN_SIZE` | :term:`ENSEMBLE_STAT_ENS_PHIST_BIN_SIZE` -| :term:`ENSEMBLE_STAT_NBRHD_PROB_WIDTH` -| :term:`ENSEMBLE_STAT_NBRHD_PROB_SHAPE` -| :term:`ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH` | :term:`ENSEMBLE_STAT_CLIMO_CDF_BINS` | :term:`ENSEMBLE_STAT_CLIMO_CDF_CENTER_BINS` | :term:`ENSEMBLE_STAT_CLIMO_CDF_WRITE_BINS` | :term:`ENSEMBLE_STAT_CLIMO_CDF_DIRECT_PROB` | :term:`ENSEMBLE_STAT_DUPLICATE_FLAG` | :term:`ENSEMBLE_STAT_SKIP_CONST` -| :term:`ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX` -| :term:`ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS` -| :term:`ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH` -| :term:`ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE` -| :term:`ENSEMBLE_STAT_NMEP_SMOOTH_METHOD` -| :term:`ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH` | :term:`ENSEMBLE_STAT_CENSOR_THRESH` | :term:`ENSEMBLE_STAT_CENSOR_VAL` | :term:`ENSEMBLE_STAT_DUPLICATE_FLAG` @@ -286,20 +277,13 @@ METplus Configuration | :term:`ENSEMBLE_STAT_OUTPUT_FLAG_PJC` | :term:`ENSEMBLE_STAT_OUTPUT_FLAG_PRC` | :term:`ENSEMBLE_STAT_OUTPUT_FLAG_ECLV` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK` -| :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT` +| :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON` +| :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN` +| :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_RAW` +| :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_RANK` +| :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_PIT` +| :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT` +| :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT` | :term:`ENSEMBLE_STAT_OBS_QUALITY_INC` | :term:`ENSEMBLE_STAT_OBS_QUALITY_EXC` | :term:`ENSEMBLE_STAT_MET_CONFIG_OVERRIDES` @@ -451,9 +435,9 @@ see :ref:`How METplus controls MET config file settings`. * - METplus Config(s) - MET Config File * - :term:`ENSEMBLE_STAT_ENS_THRESH` - - ens.ens_thresh + - fcst.ens_thresh -**${METPLUS_ENS_VLD_THRESH}** +**${METPLUS_VLD_THRESH}** .. list-table:: :widths: 5 5 @@ -461,10 +445,10 @@ see :ref:`How METplus controls MET config file settings`. * - METplus Config(s) - MET Config File - * - :term:`ENSEMBLE_STAT_ENS_VLD_THRESH` - - ens.vld_thresh + * - :term:`ENSEMBLE_STAT_VLD_THRESH` + - fcst.vld_thresh -**${METPLUS_ENS_OBS_THRESH}** +**${METPLUS_OBS_THRESH}** .. list-table:: :widths: 5 5 @@ -472,8 +456,8 @@ see :ref:`How METplus controls MET config file settings`. * - METplus Config(s) - MET Config File - * - :term:`ENSEMBLE_STAT_ENS_OBS_THRESH` - - ens.obs_thresh + * - :term:`ENSEMBLE_STAT_OBS_THRESH` + - obs_thresh **${METPLUS_ENS_FIELD}** @@ -494,42 +478,6 @@ see :ref:`How METplus controls MET config file settings`. .. note:: For more information on controlling the forecast field attributes in METplus, please see the :ref:`Field_Info` section of the User's Guide. -**${METPLUS_NBRHD_PROB_DICT}** - -.. list-table:: - :widths: 5 5 - :header-rows: 0 - - * - METplus Config(s) - - MET Config File - * - :term:`ENSEMBLE_STAT_NBRHD_PROB_WIDTH` - - nbrhd_prob.width - * - :term:`ENSEMBLE_STAT_NBRHD_PROB_SHAPE` - - nbrhd_prob.shape - * - :term:`ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH` - - nbrhd_prob.vld_thresh - -**${METPLUS_NMEP_SMOOTH_DICT}** - -.. list-table:: - :widths: 5 5 - :header-rows: 0 - - * - METplus Config(s) - - MET Config File - * - :term:`ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH` - - nmep_smooth.vld_thresh - * - :term:`ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE` - - nmep_smooth.shape - * - :term:`ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX` - - nmep_smooth.gaussian_dx - * - :term:`ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS` - - nmep_smooth.gaussian_radius - * - :term:`ENSEMBLE_STAT_NMEP_SMOOTH_METHOD` - - nmep_smooth.type.method - * - :term:`ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH` - - nmep_smooth.type.width - **${METPLUS_PROB_CAT_THRESH}** .. list-table:: @@ -862,7 +810,7 @@ see :ref:`How METplus controls MET config file settings`. * - :term:`ENSEMBLE_STAT_OUTPUT_FLAG_ECLV` - output_flag.eclv -**${METPLUS_ENSEMBLE_FLAG_DICT}** +**${METPLUS_NC_ORANK_FLAG_DICT}** .. list-table:: :widths: 5 5 @@ -870,34 +818,20 @@ see :ref:`How METplus controls MET config file settings`. * - METplus Config(s) - MET Config File - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON` - - ensemble_flag.latlon - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN` - - ensemble_flag.mean - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV` - - ensemble_flag.stdev - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS` - - ensemble_flag.minus - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS` - - ensemble_flag.plus - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN` - - ensemble_flag.min - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX` - - ensemble_flag.max - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE` - - ensemble_flag.range - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT` - - ensemble_flag.vld_count - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY` - - ensemble_flag.frequency - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP` - - ensemble_flag.nep - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP` - - ensemble_flag.nmep - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK` - - ensemble_flag.rank - * - :term:`ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT` - - ensemble_flag.weight + * - :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON` + - nc_orank_flag.latlon + * - :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN` + - nc_orank_flag.mean + * - :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_RAW` + - nc_orank_flag.raw + * - :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_RANK` + - nc_orank_flag.rank + * - :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_PIT` + - nc_orank_flag.pit + * - :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT` + - nc_orank_flag.vld_count + * - :term:`ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT` + - nc_orank_flag.weight **${METPLUS_OUTPUT_PREFIX}** 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 b28d875704..7a745cb92a 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 @@ -16,12 +16,9 @@ obs_name = 'APCP_03' obs_level_no_quotes = '(*,*)' obs_level = f'"{obs_level_no_quotes}"' -ens_name = 'REFC' -ens_level = 'L0' fcst_fmt = f'field = [{{ name="{fcst_name}"; level="{fcst_level}"; }}];' obs_fmt = (f'field = [{{ name="{obs_name}"; ' f'level="{obs_level_no_quotes}"; }}];') -ens_fmt = f'field = [{{ name="{ens_name}"; level="{ens_level}"; }}];' time_fmt = '%Y%m%d%H' run_times = ['2005080700', '2005080712'] @@ -60,44 +57,17 @@ def set_minimum_config_settings(config, set_fields=True): config.set('config', 'FCST_VAR1_LEVELS', fcst_level) config.set('config', 'OBS_VAR1_NAME', obs_name) config.set('config', 'OBS_VAR1_LEVELS', obs_level) - config.set('config', 'ENS_VAR1_NAME', ens_name) - config.set('config', 'ENS_VAR1_LEVELS', ens_level) @pytest.mark.parametrize( 'config_overrides, env_var_values', [ - # 0 : 3 ens, 1 fcst, 1 obs - ({'ENS_VAR1_NAME': 'ens_name_1', - 'ENS_VAR1_LEVELS': 'ENS_LEVEL_1', - 'ENS_VAR2_NAME': 'ens_name_2', - 'ENS_VAR2_LEVELS': 'ENS_LEVEL_2A, ENS_LEVEL_2B', - 'FCST_VAR1_NAME': 'fcst_name_1', - 'FCST_VAR1_LEVELS': 'FCST_LEVEL_1', - 'OBS_VAR1_NAME': 'obs_name_1', - 'OBS_VAR1_LEVELS': 'OBS_LEVEL_1', - }, - {'METPLUS_ENS_FIELD': ('field = [' - '{ name="ens_name_1"; level="ENS_LEVEL_1"; },' - '{ name="ens_name_2"; level="ENS_LEVEL_2A"; },' - '{ name="ens_name_2"; level="ENS_LEVEL_2B"; }' - '];'), - 'METPLUS_FCST_FIELD': ('field = [' - '{ name="fcst_name_1"; level="FCST_LEVEL_1"; }' - '];'), - 'METPLUS_OBS_FIELD': ('field = [' - '{ name="obs_name_1"; level="OBS_LEVEL_1"; }' - '];'), - }), - # 1 : no ens, 1 fcst, 1 obs -- use fcst for ens + # 0 : no ens, 1 fcst, 1 obs ({'FCST_VAR1_NAME': 'fcst_name_1', 'FCST_VAR1_LEVELS': 'FCST_LEVEL_1', 'OBS_VAR1_NAME': 'obs_name_1', 'OBS_VAR1_LEVELS': 'OBS_LEVEL_1', }, - {'METPLUS_ENS_FIELD': ('field = [' - '{ name="fcst_name_1"; level="FCST_LEVEL_1"; }' - '];'), - 'METPLUS_FCST_FIELD': ('field = [' + {'METPLUS_FCST_FIELD': ('field = [' '{ name="fcst_name_1"; level="FCST_LEVEL_1"; }' '];'), 'METPLUS_OBS_FIELD': ('field = [' @@ -359,76 +329,46 @@ def test_handle_climo_file_variables(metplus_config, config_overrides, 'pct = STAT;pstd = STAT;' 'pjc = STAT;prc = STAT;eclv = STAT;' '}')}), - # ensemble_flag - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {latlon = FALSE;}'}), - - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {mean = FALSE;}'}), - - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {stdev = FALSE;}'}), - - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {minus = FALSE;}'}), - - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {plus = FALSE;}'}), + # nc_orank_flag + ({'ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON': 'True', }, + {'METPLUS_NC_ORANK_FLAG_DICT': 'nc_orank_flag = {latlon = TRUE;}'}), - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {min = FALSE;}'}), + ({'ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN': 'True', }, + {'METPLUS_NC_ORANK_FLAG_DICT': 'nc_orank_flag = {mean = TRUE;}'}), - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {max = FALSE;}'}), + ({'ENSEMBLE_STAT_NC_ORANK_FLAG_RAW': 'True', }, + {'METPLUS_NC_ORANK_FLAG_DICT': 'nc_orank_flag = {raw = TRUE;}'}), - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {range = FALSE;}'}), + ({'ENSEMBLE_STAT_NC_ORANK_FLAG_RANK': 'True', }, + {'METPLUS_NC_ORANK_FLAG_DICT': 'nc_orank_flag = {rank = TRUE;}'}), - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT': 'FALSE', }, - { - 'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {vld_count = FALSE;}'}), + ({'ENSEMBLE_STAT_NC_ORANK_FLAG_PIT': 'True', }, + {'METPLUS_NC_ORANK_FLAG_DICT': 'nc_orank_flag = {pit = TRUE;}'}), - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY': 'FALSE', }, + ({'ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT': 'True', }, { - 'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {frequency = FALSE;}'}), - - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {nep = FALSE;}'}), - - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {nmep = FALSE;}'}), + 'METPLUS_NC_ORANK_FLAG_DICT': 'nc_orank_flag = {vld_count = TRUE;}'}), - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {rank = FALSE;}'}), - - ({'ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT': 'FALSE', }, - {'METPLUS_ENSEMBLE_FLAG_DICT': 'ensemble_flag = {weight = FALSE;}'}), + ({'ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT': 'True', }, + {'METPLUS_NC_ORANK_FLAG_DICT': 'nc_orank_flag = {weight = TRUE;}'}), ({ - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK': 'FALSE', - 'ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT': 'FALSE', + 'ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON': 'True', + 'ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN': 'True', + 'ENSEMBLE_STAT_NC_ORANK_FLAG_RAW': 'True', + 'ENSEMBLE_STAT_NC_ORANK_FLAG_RANK': 'True', + 'ENSEMBLE_STAT_NC_ORANK_FLAG_PIT': 'True', + 'ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT': 'True', + 'ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT': 'True', }, { - 'METPLUS_ENSEMBLE_FLAG_DICT': ('ensemble_flag = {latlon = FALSE;' - 'mean = FALSE;stdev = FALSE;' - 'minus = FALSE;plus = FALSE;' - 'min = FALSE;max = FALSE;' - 'range = FALSE;vld_count = FALSE;' - 'frequency = FALSE;nep = FALSE;' - 'nmep = FALSE;rank = FALSE;' - 'weight = FALSE;}')}), + 'METPLUS_NC_ORANK_FLAG_DICT': ('nc_orank_flag = {latlon = TRUE;' + 'mean = TRUE;raw = TRUE;' + 'rank = TRUE;pit = TRUE;' + 'vld_count = TRUE;' + 'weight = TRUE;}') + }), + # climo_cdf dictionary ({'ENSEMBLE_STAT_CLIMO_CDF_CDF_BINS': '1', }, {'METPLUS_CLIMO_CDF_DICT': 'climo_cdf = {cdf_bins = 1.0;}'}), @@ -587,60 +527,6 @@ def test_handle_climo_file_variables(metplus_config, config_overrides, 'match_month = TRUE;day_interval = 30;' 'hour_interval = 12;}'), 'CLIMO_STDEV_FILE': '"/some/climo_stdev/file.txt"'}), - ({'ENSEMBLE_STAT_NBRHD_PROB_WIDTH': '5', }, - {'METPLUS_NBRHD_PROB_DICT': 'nbrhd_prob = {width = [5];}'}), - - ({'ENSEMBLE_STAT_NBRHD_PROB_SHAPE': 'circle', }, - {'METPLUS_NBRHD_PROB_DICT': 'nbrhd_prob = {shape = CIRCLE;}'}), - - ({'ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH': '0.0', }, - {'METPLUS_NBRHD_PROB_DICT': 'nbrhd_prob = {vld_thresh = 0.0;}'}), - - ({ - 'ENSEMBLE_STAT_NBRHD_PROB_WIDTH': '5', - 'ENSEMBLE_STAT_NBRHD_PROB_SHAPE': 'CIRCLE', - 'ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH': '0.0', - }, - { - 'METPLUS_NBRHD_PROB_DICT': ( - 'nbrhd_prob = {width = [5];shape = CIRCLE;' - 'vld_thresh = 0.0;}' - ) - }), - ({'ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH': '0.0', }, - {'METPLUS_NMEP_SMOOTH_DICT': 'nmep_smooth = {vld_thresh = 0.0;}'}), - - ({'ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE': 'circle', }, - {'METPLUS_NMEP_SMOOTH_DICT': 'nmep_smooth = {shape = CIRCLE;}'}), - - ({'ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX': '81.27', }, - {'METPLUS_NMEP_SMOOTH_DICT': 'nmep_smooth = {gaussian_dx = 81.27;}'}), - - ({'ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS': '120', }, - { - 'METPLUS_NMEP_SMOOTH_DICT': 'nmep_smooth = {gaussian_radius = 120;}'}), - - ({'ENSEMBLE_STAT_NMEP_SMOOTH_TYPE_METHOD': 'GAUSSIAN', }, - {'METPLUS_NMEP_SMOOTH_DICT': 'nmep_smooth = {type = [{method = GAUSSIAN;}];}'}), - - ({'ENSEMBLE_STAT_NMEP_SMOOTH_TYPE_WIDTH': '1', }, - {'METPLUS_NMEP_SMOOTH_DICT': 'nmep_smooth = {type = [{width = 1;}];}'}), - - ({ - 'ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH': '0.0', - 'ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE': 'circle', - 'ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX': '81.27', - 'ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS': '120', - 'ENSEMBLE_STAT_NMEP_SMOOTH_TYPE_METHOD': 'GAUSSIAN', - 'ENSEMBLE_STAT_NMEP_SMOOTH_TYPE_WIDTH': '1', - }, - { - 'METPLUS_NMEP_SMOOTH_DICT': ( - 'nmep_smooth = {vld_thresh = 0.0;shape = CIRCLE;' - 'gaussian_dx = 81.27;gaussian_radius = 120;' - 'type = [{method = GAUSSIAN;width = 1;}];}' - ) - }), ({'ENSEMBLE_STAT_OBS_QUALITY_INC': '2,3,4', }, {'METPLUS_OBS_QUALITY_INC': 'obs_quality_inc = ["2", "3", "4"];'}), ({'ENSEMBLE_STAT_OBS_QUALITY_EXC': '5,6,7', }, @@ -664,6 +550,14 @@ def test_handle_climo_file_variables(metplus_config, config_overrides, ({'ENSEMBLE_STAT_ECLV_POINTS': '0.05', }, {'METPLUS_ECLV_POINTS': 'eclv_points = 0.05;'}), + ({'ENSEMBLE_STAT_ENS_THRESH': '0.1', }, + {'METPLUS_ENS_THRESH': 'ens_thresh = 0.1;'}), + + ({'ENSEMBLE_STAT_VLD_THRESH': '0.5', }, + {'METPLUS_VLD_THRESH': 'vld_thresh = 0.5;'}), + + ({'ENSEMBLE_STAT_OBS_THRESH': 'NA, 0.5', }, + {'METPLUS_OBS_THRESH': 'obs_thresh = [NA, 0.5];'}), ] ) @pytest.mark.wrapper_c @@ -717,8 +611,6 @@ def test_ensemble_stat_single_field(metplus_config, config_overrides, assert(actual_value == fcst_fmt) elif env_var_key == 'METPLUS_OBS_FIELD': assert (actual_value == obs_fmt) - elif env_var_key == 'METPLUS_ENS_FIELD': - assert (actual_value == ens_fmt) else: assert(env_var_values.get(env_var_key, '') == actual_value) diff --git a/metplus/wrappers/ensemble_stat_wrapper.py b/metplus/wrappers/ensemble_stat_wrapper.py index 8eee180644..e31ff82679 100755 --- a/metplus/wrappers/ensemble_stat_wrapper.py +++ b/metplus/wrappers/ensemble_stat_wrapper.py @@ -34,18 +34,14 @@ class EnsembleStatWrapper(CompareGriddedWrapper): 'METPLUS_REGRID_DICT', 'METPLUS_CENSOR_THRESH', 'METPLUS_CENSOR_VAL', - 'METPLUS_ENS_FILE_TYPE', 'METPLUS_ENS_THRESH', - 'METPLUS_ENS_VLD_THRESH', - 'METPLUS_ENS_OBS_THRESH', - 'METPLUS_ENS_FIELD', - 'METPLUS_NBRHD_PROB_DICT', - 'METPLUS_NMEP_SMOOTH_DICT', + 'METPLUS_VLD_THRESH', 'METPLUS_FCST_FILE_TYPE', 'METPLUS_FCST_FIELD', 'METPLUS_OBS_FILE_TYPE', 'METPLUS_OBS_FIELD', 'METPLUS_MESSAGE_TYPE', + 'METPLUS_OBS_THRESH', 'METPLUS_DUPLICATE_FLAG', 'METPLUS_SKIP_CONST', 'METPLUS_OBS_ERROR_FLAG', @@ -60,7 +56,7 @@ class EnsembleStatWrapper(CompareGriddedWrapper): 'METPLUS_CI_ALPHA', 'METPLUS_INTERP_DICT', 'METPLUS_OUTPUT_FLAG_DICT', - 'METPLUS_ENSEMBLE_FLAG_DICT', + 'METPLUS_NC_ORANK_FLAG_DICT', 'METPLUS_OUTPUT_PREFIX', 'METPLUS_OBS_QUALITY_INC', 'METPLUS_OBS_QUALITY_EXC', @@ -93,21 +89,15 @@ class EnsembleStatWrapper(CompareGriddedWrapper): 'eclv', ] - ENSEMBLE_FLAGS = ['latlon', - 'mean', - 'stdev', - 'minus', - 'plus', - 'min', - 'max', - 'range', - 'vld_count', - 'frequency', - 'nep', - 'nmep', - 'rank', - 'weight', - ] + NC_ORANK_FLAGS = [ + 'latlon', + 'mean', + 'raw', + 'rank', + 'pit', + 'vld_count', + 'weight', + ] def __init__(self, config, instance=None): self.app_name = 'ensemble_stat' @@ -130,23 +120,19 @@ def create_c_dict(self): 'LOG_ENSEMBLE_STAT_VERBOSITY', c_dict['VERBOSITY']) - c_dict['ENS_INPUT_DATATYPE'] = \ - self.config.getstr('config', 'ENS_ENSEMBLE_STAT_INPUT_DATATYPE', '') - - c_dict['FCST_INPUT_DATATYPE'] = \ - self.config.getstr('config', - 'FCST_ENSEMBLE_STAT_INPUT_DATATYPE', - '') + c_dict['FCST_INPUT_DATATYPE'] = ( + self.config.getraw('config', 'FCST_ENSEMBLE_STAT_INPUT_DATATYPE') + ) - c_dict['OBS_POINT_INPUT_DATATYPE'] = \ - self.config.getstr('config', - 'OBS_ENSEMBLE_STAT_INPUT_POINT_DATATYPE', - '') + c_dict['OBS_POINT_INPUT_DATATYPE'] = ( + self.config.getraw('config', + 'OBS_ENSEMBLE_STAT_INPUT_POINT_DATATYPE') + ) - c_dict['OBS_GRID_INPUT_DATATYPE'] = \ - self.config.getstr('config', - 'OBS_ENSEMBLE_STAT_INPUT_GRID_DATATYPE', - '') + c_dict['OBS_GRID_INPUT_DATATYPE'] = ( + self.config.getraw('config', + 'OBS_ENSEMBLE_STAT_INPUT_GRID_DATATYPE') + ) # check if more than 1 obs datatype is set to python embedding, # only one can be used @@ -177,23 +163,28 @@ def create_c_dict(self): # fill inputs that are not found with fake path to note it is missing c_dict['FCST_FILL_MISSING'] = True - c_dict['OBS_POINT_INPUT_DIR'] = \ + c_dict['OBS_POINT_INPUT_DIR'] = ( self.config.getdir('OBS_ENSEMBLE_STAT_POINT_INPUT_DIR', '') + ) - c_dict['OBS_POINT_INPUT_TEMPLATE'] = \ + c_dict['OBS_POINT_INPUT_TEMPLATE'] = ( self.config.getraw('config', 'OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE') + ) - c_dict['OBS_GRID_INPUT_DIR'] = \ + c_dict['OBS_GRID_INPUT_DIR'] = ( self.config.getdir('OBS_ENSEMBLE_STAT_GRID_INPUT_DIR', '') + ) - c_dict['OBS_GRID_INPUT_TEMPLATE'] = \ + c_dict['OBS_GRID_INPUT_TEMPLATE'] = ( self.config.getraw('config', 'OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE') + ) # The ensemble forecast files input directory and filename templates - c_dict['FCST_INPUT_DIR'] = \ + c_dict['FCST_INPUT_DIR'] = ( self.config.getdir('FCST_ENSEMBLE_STAT_INPUT_DIR', '') + ) c_dict['FCST_INPUT_TEMPLATE'] = ( self.config.getraw('config', 'FCST_ENSEMBLE_STAT_INPUT_TEMPLATE') @@ -206,26 +197,24 @@ def create_c_dict(self): self.log_error("Must set FCST_ENSEMBLE_STAT_INPUT_TEMPLATE or " "FCST_ENSEMBLE_STAT_INPUT_FILE_LIST") - c_dict['OUTPUT_DIR'] = self.config.getdir('ENSEMBLE_STAT_OUTPUT_DIR', - '') + c_dict['OUTPUT_DIR'] = ( + self.config.getdir('ENSEMBLE_STAT_OUTPUT_DIR', '') + ) if not c_dict['OUTPUT_DIR']: self.log_error("Must set ENSEMBLE_STAT_OUTPUT_DIR " "in configuration file") c_dict['OUTPUT_TEMPLATE'] = ( self.config.getraw('config', - 'ENSEMBLE_STAT_OUTPUT_TEMPLATE', - '') + 'ENSEMBLE_STAT_OUTPUT_TEMPLATE') ) # get ctrl (control) template/dir - optional - c_dict['CTRL_INPUT_TEMPLATE'] = self.config.getraw( - 'config', - 'ENSEMBLE_STAT_CTRL_INPUT_TEMPLATE' + c_dict['CTRL_INPUT_TEMPLATE'] = ( + self.config.getraw('config', 'ENSEMBLE_STAT_CTRL_INPUT_TEMPLATE') ) - c_dict['CTRL_INPUT_DIR'] = self.config.getdir( - 'ENSEMBLE_STAT_CTRL_INPUT_DIR', - '' + c_dict['CTRL_INPUT_DIR'] = ( + self.config.getdir('ENSEMBLE_STAT_CTRL_INPUT_DIR', '') ) # get climatology config variables @@ -243,24 +232,28 @@ def create_c_dict(self): ) # read by MET through environment variable, not set in MET config file - c_dict['MET_OBS_ERR_TABLE'] = \ - self.config.getstr('config', 'ENSEMBLE_STAT_MET_OBS_ERR_TABLE', '') + c_dict['MET_OBS_ERR_TABLE'] = ( + self.config.getraw('config', 'ENSEMBLE_STAT_MET_OBS_ERR_TABLE') + ) self.add_met_config(name='vld_thresh', data_type='float', - env_var_name='METPLUS_ENS_VLD_THRESH', - metplus_configs=['ENSEMBLE_STAT_ENS_VLD_THRESH', - 'ENSEMBLE_STAT_VLD_THRESH', - 'ENSEMBLE_STAT_ENS_VALID_THRESH', - 'ENSEMBLE_STAT_VALID_THRESH', - ]) + metplus_configs=[ + 'ENSEMBLE_STAT_VLD_THRESH', + 'ENSEMBLE_STAT_VALID_THRESH', + 'ENSEMBLE_STAT_FCST_VLD_THRESH', + 'ENSEMBLE_STAT_FCST_VALID_THRESH', + 'FCST_ENSEMBLE_STAT_VLD_THRESH', + 'FCST_ENSEMBLE_STAT_VALID_THRESH', + 'ENSEMBLE_STAT_ENS_VLD_THRESH', + ]) self.add_met_config(name='obs_thresh', data_type='list', - env_var_name='METPLUS_ENS_OBS_THRESH', - metplus_configs=['ENSEMBLE_STAT_ENS_OBS_THRESH', - 'ENSEMBLE_STAT_OBS_THRESH'], - extra_args={'remove_quotes': True}) + metplus_configs=['ENSEMBLE_STAT_OBS_THRESH', + 'ENSEMBLE_STAT_ENS_OBS_THRESH'], + extra_args={'remove_quotes': True, + 'allow_empty': True}) self.add_met_config(name='ens_ssvar_bin_size', data_type='float') @@ -268,10 +261,11 @@ def create_c_dict(self): self.add_met_config(name='ens_phist_bin_size', data_type='float') - self.handle_nbrhd_prob_dict() - self.add_met_config(name='ens_thresh', - data_type='float') + data_type='float', + metplus_configs=['ENSEMBLE_STAT_ENS_THRESH', + 'ENSEMBLE_STAT_FCST_ENS_THRESH', + 'FCST_ENSEMBLE_STAT_ENS_THRESH']) self.add_met_config(name='duplicate_flag', data_type='string', @@ -283,14 +277,11 @@ def create_c_dict(self): # set climo_cdf dictionary variables self.handle_climo_cdf_dict() - # set nmep_smooth dictionary variables - self.handle_nmep_smooth_dict() - # interp dictionary values self.handle_interp_dict() self.handle_flags('OUTPUT') - self.handle_flags('ENSEMBLE') + self.handle_flags('NC_ORANK') self.add_met_config(name='flag', data_type='bool', @@ -366,11 +357,6 @@ def create_c_dict(self): data_type='list', extra_args={'remove_quotes': True}) - # old method of setting MET config values - c_dict['ENS_THRESH'] = ( - self.config.getstr('config', 'ENSEMBLE_STAT_ENS_THRESH', '1.0') - ) - # signifies that the tool can be run without setting # field information for fcst and obs c_dict['VAR_LIST_OPTIONAL'] = True @@ -390,25 +376,40 @@ def create_c_dict(self): return c_dict - def handle_nmep_smooth_dict(self): - self.add_met_config_dict('nmep_smooth', { - 'vld_thresh': 'float', - 'shape': ('string', 'uppercase,remove_quotes'), - 'gaussian_dx': 'float', - 'gaussian_radius': 'int', - 'type': ('dictlist', '', {'method': ('string', - 'uppercase,remove_quotes'), - 'width': 'int', - } - ) - }) - - def handle_nbrhd_prob_dict(self): - self.add_met_config_dict('nbrhd_prob', { - 'width': ('list', 'remove_quotes'), - 'shape': ('string', 'uppercase,remove_quotes'), - 'vld_thresh': 'float', - }) + def get_command(self): + """! Builds the command to run the MET application + @rtype string + @return Returns a MET command with arguments that you can run + """ + cmd = '{} -v {} '.format(self.app_path, self.c_dict['VERBOSITY']) + + for args in self.args: + cmd += args + " " + + if not self.infiles: + self.log_error(self.app_name+": No input filenames specified") + return None + + for infile in self.infiles: + cmd += infile + " " + + if self.param != "": + cmd += self.param + " " + + for obs_file in self.point_obs_files: + if obs_file.startswith('PYTHON'): + obs_file = f"'{obs_file}'" + cmd += "-point_obs " + obs_file + " " + + for obs_file in self.grid_obs_files: + cmd += "-grid_obs " + obs_file + " " + + if not self.outdir: + self.log_error(self.app_name+": No output directory specified") + return None + + cmd += '-outdir {}'.format(self.outdir) + return cmd def run_at_time_all_fields(self, time_info): """! Runs the MET application for a given time and forecast lead combination @@ -422,15 +423,12 @@ def run_at_time_all_fields(self, time_info): fill_missing=fill_missing): return - # parse var list for ENS fields - ensemble_var_list = util.sub_var_list(self.c_dict['ENS_VAR_LIST_TEMP'], - time_info) - # parse optional var list for FCST and/or OBS fields var_list = util.sub_var_list(self.c_dict['VAR_LIST_TEMP'], time_info) - # if empty var list for FCST/OBS, use None as first var, else use first var in list + # if empty var list for FCST/OBS, use None as first var, + # else use first var in list if not var_list: first_var_info = None else: @@ -438,7 +436,8 @@ def run_at_time_all_fields(self, time_info): # get point observation file if requested if self.c_dict['OBS_POINT_INPUT_TEMPLATE']: - point_obs_path = self.find_data(time_info, first_var_info, 'OBS_POINT') + point_obs_path = self.find_data(time_info, first_var_info, + 'OBS_POINT') if point_obs_path is None: return @@ -446,7 +445,8 @@ def run_at_time_all_fields(self, time_info): # get grid observation file if requested if self.c_dict['OBS_GRID_INPUT_TEMPLATE']: - grid_obs_path = self.find_data(time_info, first_var_info, 'OBS_GRID') + grid_obs_path = self.find_data(time_info, first_var_info, + 'OBS_GRID') if grid_obs_path is None: return @@ -455,51 +455,31 @@ def run_at_time_all_fields(self, time_info): # set field info fcst_field = self.get_all_field_info(var_list, 'FCST') obs_field = self.get_all_field_info(var_list, 'OBS') - ens_field = self.get_all_field_info(ensemble_var_list, 'ENS') - if not fcst_field and not obs_field and not ens_field: - self.log_error("Could not build field info for fcst, obs, or ens") + if not fcst_field and not obs_field: + self.log_error("Could not build field info for fcst or obs") return - # if ens is not set, use fcst - if not ens_field: - ens_field = fcst_field - self.format_field('FCST', fcst_field) self.format_field('OBS', obs_field) - self.format_field('ENS', ens_field) - # run self.process_fields(time_info) - def get_all_field_info(self, var_list, data_type): """!Get field info based on data type""" field_list = [] for var_info in var_list: - if data_type == 'FCST': - level = var_info['fcst_level'] - thresh = var_info['fcst_thresh'] - name = var_info['fcst_name'] - extra = var_info['fcst_extra'] - elif data_type == 'OBS': - level = var_info['obs_level'] - thresh = var_info['obs_thresh'] - name = var_info['obs_name'] - extra = var_info['obs_extra'] - elif data_type == 'ENS': - level = var_info['ens_level'] - thresh = var_info['ens_thresh'] - name = var_info['ens_name'] - extra = var_info['ens_extra'] - else: - return '' + type_lower = data_type.lower() + level = var_info[f'{type_lower}_level'] + thresh = var_info[f'{type_lower}_thresh'] + name = var_info[f'{type_lower}_name'] + extra = var_info[f'{type_lower}_extra'] # check if python embedding is used and set up correctly # set env var for file type if it is used - pyEmbedIsOK = self.check_for_python_embedding(data_type, var_info) - if not pyEmbedIsOK: + py_embed_ok = self.check_for_python_embedding(data_type, var_info) + if not py_embed_ok: return '' next_field = self.get_field_info(v_level=level, @@ -517,48 +497,14 @@ def get_all_field_info(self, var_list, data_type): def set_environment_variables(self, time_info): self.add_env_var("MET_OBS_ERROR_TABLE", self.c_dict.get('MET_OBS_ERR_TABLE', '')) - - fcst_field = self.c_dict.get('FCST_FIELD', '') - self.add_env_var("FCST_FIELD", - fcst_field) - self.add_env_var("OBS_FIELD", - self.c_dict.get('OBS_FIELD', '')) - - ens_field = self.c_dict.get('ENS_FIELD', '') - # if ens field is not set, use fcst field - if not ens_field: - ens_field = fcst_field - - self.add_env_var("ENS_FIELD", ens_field) - - self.add_env_var("OBS_WINDOW_BEGIN", - str(self.c_dict['OBS_WINDOW_BEGIN'])) - self.add_env_var("OBS_WINDOW_END", - str(self.c_dict['OBS_WINDOW_END'])) - - # support old method of setting variables in MET config files - self.add_env_var('ENS_THRESH', - self.c_dict.get('ENS_THRESH')) - met_config_list_old = [ - 'OBTYPE', - 'INPUT_BASE', - 'ENS_FILE_TYPE', - 'FCST_FILE_TYPE', - 'OBS_FILE_TYPE', - ] - for item in met_config_list_old: - self.add_env_var(item, self.c_dict.get(item, '')) - - # call parent function to set common vars, user env vars, - # and print list of variables that are set super().set_environment_variables(time_info) def process_fields(self, time_info): """! Set and print environment variables, then build/run MET command - Args: - @param time_info dictionary containing timing information - @param fcst_field field information formatted for MET config file - @param obs_field field information formatted for MET config file + + @param time_info dictionary containing timing information + @param fcst_field field information formatted for MET config file + @param obs_field field information formatted for MET config file """ # set config file since command is reset after each run self.param = do_string_sub(self.c_dict['CONFIG_FILE'], @@ -572,60 +518,12 @@ def process_fields(self, time_info): # set environment variables that are passed to the MET config self.set_environment_variables(time_info) - # check if METplus can generate the command successfully - cmd = self.get_command() - if cmd is None: - self.log_error("Could not generate command") - return - # run the MET command self.build() - def clear(self): """!Unset class variables to prepare for next run time """ super().clear() self.point_obs_files = [] self.grid_obs_files = [] - - - def get_command(self): - """! Builds the command to run the MET application - @rtype string - @return Returns a MET command with arguments that you can run - """ - if self.app_path is None: - self.log_error(self.app_name + ": No app path specified. \ - You must use a subclass") - return None - - cmd = '{} -v {} '.format(self.app_path, self.c_dict['VERBOSITY']) - - for args in self.args: - cmd += args + " " - - if len(self.infiles) == 0: - self.log_error(self.app_name+": No input filenames specified") - return None - - for infile in self.infiles: - cmd += infile + " " - - if self.param != "": - cmd += self.param + " " - - for obs_file in self.point_obs_files: - if obs_file.startswith('PYTHON'): - obs_file = f"'{obs_file}'" - cmd += "-point_obs " + obs_file + " " - - for obs_file in self.grid_obs_files: - cmd += "-grid_obs " + obs_file + " " - - if self.outdir == "": - self.log_error(self.app_name+": No output directory specified") - return None - - cmd += '-outdir {}'.format(self.outdir) - return cmd diff --git a/parm/met_config/EnsembleStatConfig_wrapped b/parm/met_config/EnsembleStatConfig_wrapped index c4846b4d06..b0cbe84f33 100644 --- a/parm/met_config/EnsembleStatConfig_wrapped +++ b/parm/met_config/EnsembleStatConfig_wrapped @@ -39,37 +39,12 @@ ${METPLUS_CENSOR_VAL} cat_thresh = []; nc_var_str = ""; -// -// Ensemble product fields to be processed -// -ens = { - - ${METPLUS_ENS_FILE_TYPE} - - ${METPLUS_ENS_THRESH} - ${METPLUS_ENS_VLD_THRESH} - ${METPLUS_ENS_OBS_THRESH} - - ${METPLUS_ENS_FIELD} -} - //ens_member_ids = ${METPLUS_ENS_MEMBER_IDS} //control_id = ${METPLUS_CONTROL_ID} -//////////////////////////////////////////////////////////////////////////////// - -// -// Neighborhood ensemble probabilities -// -${METPLUS_NBRHD_PROB_DICT} - -// -// NMEP smoothing methods -// -${METPLUS_NMEP_SMOOTH_DICT} //////////////////////////////////////////////////////////////////////////////// @@ -92,7 +67,8 @@ ${METPLUS_ECLV_POINTS} fcst = { ${METPLUS_FCST_FILE_TYPE} - + ${METPLUS_ENS_THRESH} + ${METPLUS_VLD_THRESH} ${METPLUS_FCST_FIELD} } @@ -112,7 +88,8 @@ obs = { ${METPLUS_MESSAGE_TYPE} sid_exc = []; -obs_thresh = [ NA ]; +//obs_thresh = [ NA ]; +${METPLUS_OBS_THRESH} //obs_quality_inc = ${METPLUS_OBS_QUALITY_INC} @@ -219,9 +196,10 @@ ${METPLUS_OUTPUT_FLAG_DICT} //////////////////////////////////////////////////////////////////////////////// // -// Ensemble product output types +// Gridded verification output types +// May be set separately in each "obs.field" entry // -${METPLUS_ENSEMBLE_FLAG_DICT} +${METPLUS_NC_ORANK_FLAG_DICT} //////////////////////////////////////////////////////////////////////////////// diff --git a/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf b/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf index acad0c6f72..81233349e0 100644 --- a/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf +++ b/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf @@ -85,29 +85,6 @@ OBS_VAR1_LEVELS = {FCST_VAR1_LEVELS} OBS_VAR1_OPTIONS = {FCST_VAR1_OPTIONS} -ENS_VAR1_NAME = APCP -ENS_VAR1_LEVELS = A24 -ENS_VAR1_THRESH = >0.0, >=10.0 - -ENS_VAR2_NAME = REFC -ENS_VAR2_LEVELS = L0 -ENS_VAR2_THRESH = >=35.0 - -ENS_VAR2_OPTIONS = GRIB1_ptv = 129; - -ENS_VAR3_NAME = UGRD -ENS_VAR3_LEVELS = Z10 -ENS_VAR3_THRESH = >=5.0 - -ENS_VAR4_NAME = VGRD -ENS_VAR4_LEVELS = Z10 -ENS_VAR4_THRESH = >=5.0 - -ENS_VAR5_NAME = WIND -ENS_VAR5_LEVELS = Z10 -ENS_VAR5_THRESH = >=5.0 - - ### # EnsembleStat Settings # https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#ensemblestat @@ -121,12 +98,12 @@ ENSEMBLE_STAT_CONFIG_FILE = {PARM_BASE}/met_config/EnsembleStatConfig_wrapped ENSEMBLE_STAT_DESC = NA -OBS_ENSEMBLE_STAT_WINDOW_BEGIN = -5400 -OBS_ENSEMBLE_STAT_WINDOW_END = 5400 +ENSEMBLE_STAT_OBS_WINDOW_BEGIN = -5400 +ENSEMBLE_STAT_OBS_WINDOW_END = 5400 ENSEMBLE_STAT_ENS_THRESH = 1.0 -ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 +ENSEMBLE_STAT_VLD_THRESH = 1.0 ENSEMBLE_STAT_OUTPUT_PREFIX = @@ -141,23 +118,12 @@ ENSEMBLE_STAT_REGRID_SHAPE = SQUARE ENSEMBLE_STAT_CENSOR_THRESH = ENSEMBLE_STAT_CENSOR_VAL = -ENSEMBLE_STAT_NBRHD_PROB_WIDTH = 5 -ENSEMBLE_STAT_NBRHD_PROB_SHAPE = CIRCLE -ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH = 0.0 - -ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH = 0.0 -ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE = CIRCLE -ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX = 81.27 -ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS = 120 -ENSEMBLE_STAT_NMEP_SMOOTH_METHOD = GAUSSIAN -ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH = 1 - #ENSEMBLE_STAT_PROB_CAT_THRESH = #ENSEMBLE_STAT_PROB_PCT_THRESH = ==0.25 #ENSEMBLE_STAT_ECLV_POINTS = 0.05 ENSEMBLE_STAT_MESSAGE_TYPE = ADPSFC - +#ENSEMBLE_STAT_OBS_THRESH = ENSEMBLE_STAT_DUPLICATE_FLAG = NONE ENSEMBLE_STAT_SKIP_CONST = False @@ -222,21 +188,13 @@ ENSEMBLE_STAT_OUTPUT_FLAG_RELP = BOTH #ENSEMBLE_STAT_OUTPUT_FLAG_PRC = BOTH #ENSEMBLE_STAT_OUTPUT_FLAG_ECLV = BOTH - -ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE +ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_RAW = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_RANK = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_PIT = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT = FALSE #ENSEMBLE_STAT_OBS_QUALITY_INC = #ENSEMBLE_STAT_OBS_QUALITY_EXC = diff --git a/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat_python_embedding.conf b/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat_python_embedding.conf index 8bdf7689cf..95eea3c846 100644 --- a/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat_python_embedding.conf +++ b/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat_python_embedding.conf @@ -41,8 +41,6 @@ LOOP_ORDER = times # https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info ### -ENS_ENSEMBLE_STAT_INPUT_DATATYPE = PYTHON_NUMPY - FCST_ENSEMBLE_STAT_INPUT_DATATYPE = PYTHON_NUMPY OBS_ENSEMBLE_STAT_INPUT_GRID_DATATYPE = PYTHON_NUMPY @@ -74,7 +72,6 @@ OBS_FILE_WINDOW_END = 0 # https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#field-info ### -ENS_VAR1_NAME = {MET_INSTALL_DIR}/share/met/python/read_ascii_numpy.py MET_PYTHON_INPUT_ARG FCST FCST_VAR1_NAME = {MET_INSTALL_DIR}/share/met/python/read_ascii_numpy.py MET_PYTHON_INPUT_ARG FCST OBS_VAR1_NAME = {MET_INSTALL_DIR}/share/met/python/read_ascii_numpy.py MET_PYTHON_INPUT_ARG OBS @@ -99,7 +96,7 @@ OBS_ENSEMBLE_STAT_WINDOW_END = 5400 ENSEMBLE_STAT_N_MEMBERS = 2 ENSEMBLE_STAT_ENS_THRESH = 1.0 -ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 +ENSEMBLE_STAT_VLD_THRESH = 1.0 ENSEMBLE_STAT_REGRID_TO_GRID = NONE @@ -114,20 +111,13 @@ ENSEMBLE_STAT_OUTPUT_FLAG_ORANK = BOTH ENSEMBLE_STAT_OUTPUT_FLAG_SSVAR = BOTH ENSEMBLE_STAT_OUTPUT_FLAG_RELP = BOTH -ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE +ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_RAW = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_RANK = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_PIT = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT = FALSE #ENSEMBLE_STAT_MET_OBS_ERR_TABLE = diff --git a/parm/use_cases/model_applications/air_quality_and_comp/EnsembleStat_fcstICAP_obsMODIS_aod.conf b/parm/use_cases/model_applications/air_quality_and_comp/EnsembleStat_fcstICAP_obsMODIS_aod.conf index ade1512714..213142de06 100644 --- a/parm/use_cases/model_applications/air_quality_and_comp/EnsembleStat_fcstICAP_obsMODIS_aod.conf +++ b/parm/use_cases/model_applications/air_quality_and_comp/EnsembleStat_fcstICAP_obsMODIS_aod.conf @@ -41,8 +41,6 @@ LOOP_ORDER = times # https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info ### -ENS_ENSEMBLE_STAT_INPUT_DATATYPE = PYTHON_NUMPY - FCST_ENSEMBLE_STAT_INPUT_DATATYPE = PYTHON_NUMPY FCST_ENSEMBLE_STAT_INPUT_DIR = FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = 0, 1, 2, 3, 4, 5, 6 @@ -61,8 +59,6 @@ ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE} CONFIG_DIR = {PARM_BASE}/use_cases/model_applications/air_quality_and_comp/EnsembleStat_fcstICAP_obsMODIS_aod -ENS_VAR1_NAME = {CONFIG_DIR}/forecast_embedded.py {OBS_ENSEMBLE_STAT_GRID_INPUT_DIR}/icap_{init?fmt=%Y%m%d%H}_aod.nc:total_aod:{valid?fmt=%Y%m%d%H%M}:MET_PYTHON_INPUT_ARG - FCST_VAR1_NAME = {CONFIG_DIR}/forecast_embedded.py {OBS_ENSEMBLE_STAT_GRID_INPUT_DIR}/icap_{init?fmt=%Y%m%d%H}_aod.nc:total_aod:{valid?fmt=%Y%m%d%H%M}:MET_PYTHON_INPUT_ARG OBS_VAR1_NAME = {CONFIG_DIR}/analysis_embedded.py {OBS_ENSEMBLE_STAT_GRID_INPUT_DIR}/AGGR_HOURLY_{valid?fmt=%Y%m%d}T{valid?fmt=%H%M}_1deg_global_archive.nc:aod_nrl_total:Mean @@ -76,8 +72,8 @@ OBS_VAR1_NAME = {CONFIG_DIR}/analysis_embedded.py {OBS_ENSEMBLE_STAT_GRID_INPUT_ MODEL = ICAP OBTYPE = NRL_AOD -OBS_ENSEMBLE_STAT_WINDOW_BEGIN = -5400 -OBS_ENSEMBLE_STAT_WINDOW_END = 5400 +ENSEMBLE_STAT_OBS_WINDOW_BEGIN = -5400 +ENSEMBLE_STAT_OBS_WINDOW_END = 5400 ENSEMBLE_STAT_N_MEMBERS = 7 diff --git a/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstHRRRE_FcstOnly_NetCDF.conf b/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstHRRRE_FcstOnly_NetCDF.conf index 2fa8f1af12..258be24d73 100644 --- a/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstHRRRE_FcstOnly_NetCDF.conf +++ b/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstHRRRE_FcstOnly_NetCDF.conf @@ -11,7 +11,7 @@ # https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#process-list ### -PROCESS_LIST = EnsembleStat +PROCESS_LIST = GenEnsProd ### @@ -41,11 +41,11 @@ LOOP_ORDER = processes # https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info ### -FCST_ENSEMBLE_STAT_INPUT_DIR = {INPUT_BASE}/model_applications/precipitation/HRRRE/pcp_combine -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = hrrrebegin_end_incr(1,3,1,2)_{init?fmt=%Y%m%d%H}f{lead?fmt=%HHH}_A03.nc +GEN_ENS_PROD_INPUT_DIR = {INPUT_BASE}/model_applications/precipitation/HRRRE/pcp_combine +GEN_ENS_PROD_INPUT_TEMPLATE = hrrrebegin_end_incr(1,3,1,2)_{init?fmt=%Y%m%d%H}f{lead?fmt=%HHH}_A03.nc -ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE}/model_applications/precipitation/EnsembleSTat_fcstHRRRE_FcstOnly_NetCDF/EnsembleStat -ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H%M} +GEN_ENS_PROD_OUTPUT_DIR = {OUTPUT_BASE}/model_applications/precipitation/EnsembleSTat_fcstHRRRE_FcstOnly_NetCDF/EnsembleStat +GEN_ENS_PROD_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H%M}/ensemble_stat_{ENS_VAR1_NAME}_{valid?fmt=%Y%m%d_%H%M%S}V_ens.nc ### @@ -58,35 +58,26 @@ ENS_VAR1_LEVELS = "(*,*)" ### -# EnsembleStat Settings -# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#ensemblestat +# GenEnsProd Settings +# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#genensprod ### - -MODEL = HRRRE -OBTYPE = ANALYS - -ENSEMBLE_STAT_N_MEMBERS = 3 - -ENSEMBLE_STAT_ENS_THRESH = 0.5 -ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0 - -OBS_ENSEMBLE_STAT_WINDOW_BEGIN = -5400 -OBS_ENSEMBLE_STAT_WINDOW_END = 5400 - -ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE - -ENSEMBLE_STAT_OUTPUT_PREFIX = APCP_03 +GEN_ENS_PROD_N_MEMBERS = 3 + +GEN_ENS_PROD_ENS_THRESH = 0.5 +GEN_ENS_PROD_VLD_THRESH = 1.0 + +GEN_ENS_PROD_ENSEMBLE_FLAG_LATLON = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MEAN = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_STDEV = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MINUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_PLUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MIN = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MAX = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_RANGE = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_VLD_COUNT = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_FREQUENCY = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_NEP = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_NMEP = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_RANK = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_WEIGHT = FALSE diff --git a/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstWOFS_obsWOFS.conf b/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstWOFS_obsWOFS.conf index ea682db012..8624d7aaed 100644 --- a/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstWOFS_obsWOFS.conf +++ b/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstWOFS_obsWOFS.conf @@ -11,7 +11,7 @@ # https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#process-list ### -PROCESS_LIST = PcpCombine, EnsembleStat, GridStat +PROCESS_LIST = PcpCombine, EnsembleStat, GenEnsProd, GridStat ### @@ -49,6 +49,14 @@ FCST_PCP_COMBINE_INPUT_TEMPLATE = {init?fmt=%Y%m%d?shift=-44100}/{init?fmt=%H%M} FCST_PCP_COMBINE_OUTPUT_DIR = {OUTPUT_BASE}/{MODEL}/pcp_combine FCST_PCP_COMBINE_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d?shift=-44100}/{init?fmt=%H%M}/ENS_MEM_{custom?fmt=%s}/wofs{custom?fmt=%s}_PCP_{init?fmt=%Y%m%d}_{init?fmt=%H%M}_{valid?fmt=%H%M}_A1.nc +# GenEnsProd + +GEN_ENS_PROD_INPUT_DIR = {FCST_PCP_COMBINE_OUTPUT_DIR} +GEN_ENS_PROD_INPUT_TEMPLATE = {init?fmt=%Y%m%d?shift=-44100}/{init?fmt=%H%M}/ENS_MEM_??/wofs??_PCP_{init?fmt=%Y%m%d}_{init?fmt=%H%M}_{valid?fmt=%H%M}_A1.nc + +GEN_ENS_PROD_OUTPUT_DIR = {OUTPUT_BASE}/{MODEL}/ensemble_stat +GEN_ENS_PROD_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d?shift=-44100}/{init?fmt=%H%M}/ensemble_stat_{MODEL}_PCP_{init?fmt=%H%M}_{lead?fmt=%H%M}00L_A1_{init?fmt=%Y%m%d}_{valid?fmt=%H%M}00V_ens.nc + # EnsembleStat FCST_ENSEMBLE_STAT_INPUT_DIR = {FCST_PCP_COMBINE_OUTPUT_DIR} @@ -62,8 +70,8 @@ ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d?shift=-44100}/{init?fmt=%H%M} # GridStat -FCST_GRID_STAT_INPUT_DIR = {ENSEMBLE_STAT_OUTPUT_DIR} -FCST_GRID_STAT_INPUT_TEMPLATE = {ENSEMBLE_STAT_OUTPUT_TEMPLATE}/ensemble_stat_{MODEL}_PCP_{init?fmt=%H%M}_{lead?fmt=%H%M}00L_A1_{init?fmt=%Y%m%d}_{valid?fmt=%H%M}00V_ens.nc +FCST_GRID_STAT_INPUT_DIR = {GEN_ENS_PROD_OUTPUT_DIR} +FCST_GRID_STAT_INPUT_TEMPLATE = {GEN_ENS_PROD_OUTPUT_TEMPLATE} OBS_GRID_STAT_INPUT_DIR = {OBS_ENSEMBLE_STAT_GRID_INPUT_DIR} OBS_GRID_STAT_INPUT_TEMPLATE = {init?fmt=%Y%m%d?shift=-44100}/{init?fmt=%H%M}/mrms_PCP_{init?fmt=%Y%m%d}_{init?fmt=%H%M}_{valid?fmt=%H%M}_A1.nc @@ -82,6 +90,16 @@ GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d?shift=-44100}/{init?fmt=%H%M}/ MODEL= WOFS OBTYPE = MRMS_QPE + +# GenEnsProd + +ENS_VAR1_NAME = APCP_01 +ENS_VAR1_LEVELS = "(*,*)" +ENS_VAR1_THRESH = >=12.7, >=25.4, >=50.8 + + +# EnsembleStat + FCST_ENSEMBLE_STAT_VAR1_NAME = APCP_01 FCST_ENSEMBLE_STAT_VAR1_LEVELS = "(*,*)" FCST_ENSEMBLE_STAT_VAR1_THRESH = >=12.7, >=25.4, >=50.8 @@ -90,6 +108,9 @@ OBS_ENSEMBLE_STAT_VAR1_NAME = GaugeCorrQPE01H_01 OBS_ENSEMBLE_STAT_VAR1_LEVELS = "(*,*)" OBS_ENSEMBLE_STAT_VAR1_THRESH = {FCST_ENSEMBLE_STAT_VAR1_THRESH} + +# GridStat + FCST_GRID_STAT_VAR1_NAME = APCP_01_A1_ENS_NMEP_ge12.7_NBRHD1_NEAREST1 FCST_GRID_STAT_VAR1_LEVELS = "(*,*)" FCST_GRID_STAT_VAR1_OPTIONS = prob = TRUE @@ -273,6 +294,45 @@ PCP_COMBINE_CUSTOM_LOOP_LIST = 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 1 FCST_PCP_COMBINE_COMMAND = -sum 00000000_000000 1 {valid?fmt=%Y%m%d}_{valid?fmt=%H%M}00 1 -pcpdir {FCST_PCP_COMBINE_INPUT_DIR}/{FCST_PCP_COMBINE_INPUT_TEMPLATE} -pcprx wofs -field 'name="APCP";level="A1";' +### +# GenEnsProd Settings +# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#genensprod +### + + +GEN_ENS_PROD_N_MEMBERS = 18 + +GEN_ENS_PROD_ENS_THRESH = 1.0 + +GEN_ENS_PROD_REGRID_TO_GRID = FCST +GEN_ENS_PROD_REGRID_METHOD = BUDGET +GEN_ENS_PROD_REGRID_WIDTH = 2 +GEN_ENS_PROD_REGRID_VLD_THRESH = 1.0 + +GEN_ENS_PROD_NBRHD_PROB_WIDTH = 1, 3, 5, 7, 9 +GEN_ENS_PROD_NBRHD_PROB_SHAPE = SQUARE +GEN_ENS_PROD_NBRHD_PROB_VLD_THRESH = 1.0 + +GEN_ENS_PROD_NMEP_SMOOTH_VLD_THRESH = 1.0 +GEN_ENS_PROD_NMEP_SMOOTH_SHAPE = SQUARE +GEN_ENS_PROD_NMEP_SMOOTH_METHOD = NEAREST +GEN_ENS_PROD_NMEP_SMOOTH_WIDTH = 1 + +#GEN_ENS_PROD_INPUT_GRID_DATATYPE = NETCDF + +GEN_ENS_PROD_ENSEMBLE_FLAG_LATLON = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MEAN = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_STDEV = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MINUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_PLUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MIN = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MAX = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_RANGE = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_VLD_COUNT = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_FREQUENCY = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_NEP = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_NMEP = TRUE + ### # EnsembleStat Settings # https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#ensemblestat @@ -287,19 +347,9 @@ ENSEMBLE_STAT_REGRID_METHOD = BUDGET ENSEMBLE_STAT_REGRID_WIDTH = 2 ENSEMBLE_STAT_REGRID_VLD_THRESH = 1.0 -ENSEMBLE_STAT_NBRHD_PROB_WIDTH = 1, 3, 5, 7, 9 -ENSEMBLE_STAT_NBRHD_PROB_SHAPE = SQUARE -ENSEMBLE_STAT_NBRHD_PROB_VLD_THRESH = 1.0 - FCST_ENSEMBLE_STAT_INPUT_GRID_DATATYPE = NETCDF OBS_ENSEMBLE_STAT_INPUT_GRID_DATATYPE = NETCDF -ENSEMBLE_STAT_NMEP_SMOOTH_VLD_THRESH = 1.0 -ENSEMBLE_STAT_NMEP_SMOOTH_SHAPE = SQUARE -ENSEMBLE_STAT_NMEP_SMOOTH_METHOD = NEAREST -ENSEMBLE_STAT_NMEP_SMOOTH_WIDTH = 1 -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_DX = 3 -#ENSEMBLE_STAT_NMEP_SMOOTH_GAUSSIAN_RADIUS = 3 ENSEMBLE_STAT_MESSAGE_TYPE = @@ -311,20 +361,13 @@ ENSEMBLE_STAT_OUTPUT_FLAG_ORANK = STAT ENSEMBLE_STAT_OUTPUT_FLAG_SSVAR = STAT ENSEMBLE_STAT_OUTPUT_FLAG_RELP = STAT -ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE +ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_RAW = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_RANK = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_PIT = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT = FALSE ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_PCP_{init?fmt=%H%M}_{lead?fmt=%H%M}00L_A1 diff --git a/parm/use_cases/model_applications/short_range/EnsembleStat_fcstHRRRE_obsHRRRE_Sfc_MultiField.conf b/parm/use_cases/model_applications/short_range/EnsembleStat_fcstHRRRE_obsHRRRE_Sfc_MultiField.conf index 830276b6d6..d050f8fb79 100644 --- a/parm/use_cases/model_applications/short_range/EnsembleStat_fcstHRRRE_obsHRRRE_Sfc_MultiField.conf +++ b/parm/use_cases/model_applications/short_range/EnsembleStat_fcstHRRRE_obsHRRRE_Sfc_MultiField.conf @@ -11,7 +11,7 @@ # https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#process-list ### -PROCESS_LIST = PB2NC, EnsembleStat +PROCESS_LIST = PB2NC, EnsembleStat, GenEnsProd ### @@ -71,6 +71,12 @@ ENSEMBLE_STAT_VERIFICATION_MASK_TEMPLATE = ENSEMBLE_STAT_OUTPUT_DIR = {OUTPUT_BASE}/model_applications/short_range/EnsembleStat_fcstHRRRE_obsHRRRE_Sfc_MultiField/EnsembleStat ENSEMBLE_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H%M} +# GenEnsProd +GEN_ENS_PROD_INPUT_DIR = {FCST_ENSEMBLE_STAT_INPUT_DIR} +GEN_ENS_PROD_INPUT_TEMPLATE = {FCST_ENSEMBLE_STAT_INPUT_TEMPLATE} + +GEN_ENS_PROD_OUTPUT_DIR = {ENSEMBLE_STAT_OUTPUT_DIR} +GEN_ENS_PROD_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H%M}/ensemble_stat_{ENSEMBLE_STAT_OUTPUT_PREFIX}_{valid?fmt=%Y%m%d_%H%M%S}V_ens.nc ### # Field Info @@ -179,22 +185,47 @@ ENSEMBLE_STAT_OUTPUT_FLAG_ORANK = BOTH ENSEMBLE_STAT_OUTPUT_FLAG_SSVAR = BOTH ENSEMBLE_STAT_OUTPUT_FLAG_RELP = BOTH -ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE + +ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_MEAN = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_RANK = FALSE +ENSEMBLE_STAT_NC_ORANK_FLAG_PIT = FALSE +ENSEMBLE_STAT_NC_ORANK_FLAG_VLD_COUNT = TRUE +ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT = FALSE CONFIG_DIR={PARM_BASE}/use_cases/model_applications/short_range/EnsembleStat_fcstHRRRE_obsHRRRE_Sfc_MultiField ENSEMBLE_STAT_MET_OBS_ERR_TABLE = {CONFIG_DIR}/obs_error_table_V8.0.txt ENSEMBLE_STAT_OUTPUT_PREFIX = HRRRE_F{lead?fmt=%3H}_ADPSFC + +### +# GenEnsProd Settings +# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#genensprod +### + + +GEN_ENS_PROD_OBS_WINDOW_BEGIN = -900 +GEN_ENS_PROD_OBS_WINDOW_END = 900 + +GEN_ENS_PROD_N_MEMBERS = 2 + +GEN_ENS_PROD_ENS_THRESH = 1.0 + +GEN_ENS_PROD_REGRID_TO_GRID = FCST +GEN_ENS_PROD_REGRID_METHOD = BILIN +GEN_ENS_PROD_REGRID_WIDTH = 2 + +GEN_ENS_PROD_ENSEMBLE_FLAG_LATLON = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MEAN = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_STDEV = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MINUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_PLUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MIN = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MAX = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_RANGE = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_VLD_COUNT = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_FREQUENCY = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_NEP = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_NMEP = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_RANK = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_WEIGHT = FALSE \ No newline at end of file diff --git a/parm/use_cases/model_applications/short_range/EnsembleStat_fcstHRRR_fcstOnly_SurrogateSevere.conf b/parm/use_cases/model_applications/short_range/EnsembleStat_fcstHRRR_fcstOnly_SurrogateSevere.conf index 2566dd2421..3176dab1a3 100644 --- a/parm/use_cases/model_applications/short_range/EnsembleStat_fcstHRRR_fcstOnly_SurrogateSevere.conf +++ b/parm/use_cases/model_applications/short_range/EnsembleStat_fcstHRRR_fcstOnly_SurrogateSevere.conf @@ -11,7 +11,7 @@ # https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#process-list ### -PROCESS_LIST = PCPCombine, EnsembleStat, RegridDataPlane +PROCESS_LIST = PCPCombine, GenEnsProd, RegridDataPlane ### @@ -52,16 +52,16 @@ FCST_PCP_COMBINE_OUTPUT_DIR = {OUTPUT_BASE}/short_range/surrogate_severe_calc FCST_PCP_COMBINE_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d}/hrrr_ncep_{init?fmt=%Y%m%d%H}f{lead?fmt=%HHH}.nc -FCST_ENSEMBLE_STAT_INPUT_DIR = {FCST_PCP_COMBINE_OUTPUT_DIR} -FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {FCST_PCP_COMBINE_OUTPUT_TEMPLATE} - -ENSEMBLE_STAT_OUTPUT_DIR = {FCST_PCP_COMBINE_OUTPUT_DIR} +GEN_ENS_PROD_INPUT_DIR = {FCST_PCP_COMBINE_OUTPUT_DIR} +GEN_ENS_PROD_INPUT_TEMPLATE = {FCST_PCP_COMBINE_OUTPUT_TEMPLATE} +GEN_ENS_PROD_OUTPUT_DIR = {FCST_PCP_COMBINE_OUTPUT_DIR} +GEN_ENS_PROD_OUTPUT_TEMPLATE = ensemble_stat_{valid?fmt=%Y%m%d}_120000V_ens.nc FCST_REGRID_DATA_PLANE_RUN = True -FCST_REGRID_DATA_PLANE_INPUT_DIR = {FCST_PCP_COMBINE_OUTPUT_DIR} -FCST_REGRID_DATA_PLANE_INPUT_TEMPLATE = ensemble_stat_{valid?fmt=%Y%m%d}_120000V_ens.nc +FCST_REGRID_DATA_PLANE_INPUT_DIR = {GEN_ENS_PROD_OUTPUT_DIR} +FCST_REGRID_DATA_PLANE_INPUT_TEMPLATE = {GEN_ENS_PROD_OUTPUT_TEMPLATE} FCST_REGRID_DATA_PLANE_OUTPUT_DIR = {FCST_PCP_COMBINE_OUTPUT_DIR} FCST_REGRID_DATA_PLANE_OUTPUT_TEMPLATE = surrogate_severe_{init?fmt=%Y%m%d}_{lead?fmt=%HHH}V_regrid.nc @@ -114,52 +114,33 @@ FCST_PCP_COMBINE_INPUT_DATATYPE = GRIB ### -# EnsembleStat Settings -# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#ensemblestat +# GenEnsProd Settings +# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#genensprod ### -ENSEMBLE_STAT_N_MEMBERS = 1 -ENSEMBLE_STAT_ENS_THRESH = 1.0 - -ENSEMBLE_STAT_REGRID_TO_GRID = G211 -ENSEMBLE_STAT_REGRID_METHOD = MAX -ENSEMBLE_STAT_REGRID_WIDTH = 27 -ENSEMBLE_STAT_REGRID_VLD_THRESH = 0.0 - -ENSEMBLE_STAT_DUPLICATE_FLAG = UNIQUE -ENSEMBLE_STAT_SKIP_CONST = True - -ENSEMBLE_STAT_CENSOR_THRESH = ==-9999 -ENSEMBLE_STAT_CENSOR_VAL = 0.0 - -ENSEMBLE_STAT_OBS_ERROR_FLAG = True - -ENSEMBLE_STAT_MASK_GRID = - -ENSEMBLE_STAT_CI_ALPHA = 0.01 - -ENSEMBLE_STAT_OUTPUT_FLAG_ECNT = NONE -ENSEMBLE_STAT_OUTPUT_FLAG_RPS = NONE -ENSEMBLE_STAT_OUTPUT_FLAG_RHIST = NONE -ENSEMBLE_STAT_OUTPUT_FLAG_PHIST = NONE -ENSEMBLE_STAT_OUTPUT_FLAG_ORANK = NONE -ENSEMBLE_STAT_OUTPUT_FLAG_SSVAR = NONE -ENSEMBLE_STAT_OUTPUT_FLAG_RELP = NONE - -ENSEMBLE_STAT_ENSEMBLE_FLAG_LATLON = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MEAN = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_STDEV = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MINUS = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_PLUS = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MIN = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_MAX = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANGE = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_VLD_COUNT = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_FREQUENCY = TRUE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_NMEP = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_RANK = FALSE -ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE +GEN_ENS_PROD_N_MEMBERS = 1 +GEN_ENS_PROD_ENS_THRESH = 1.0 + +GEN_ENS_PROD_REGRID_TO_GRID = G211 +GEN_ENS_PROD_REGRID_METHOD = MAX +GEN_ENS_PROD_REGRID_WIDTH = 27 +GEN_ENS_PROD_REGRID_VLD_THRESH = 0.0 + +GEN_ENS_PROD_CENSOR_THRESH = ==-9999 +GEN_ENS_PROD_CENSOR_VAL = 0.0 + +GEN_ENS_PROD_ENSEMBLE_FLAG_LATLON = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_MEAN = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_STDEV = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MINUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_PLUS = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MIN = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_MAX = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_RANGE = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_VLD_COUNT = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_FREQUENCY = TRUE +GEN_ENS_PROD_ENSEMBLE_FLAG_NEP = FALSE +GEN_ENS_PROD_ENSEMBLE_FLAG_NMEP = FALSE ###