From 1847bc090848b371ebea42f0562a35c537a6b686 Mon Sep 17 00:00:00 2001 From: George McCabe <23407799+georgemccabe@users.noreply.github.com> Date: Wed, 5 Oct 2022 12:21:01 -0600 Subject: [PATCH] Update Develop-ref after #1841 (#1851) Co-authored-by: jprestop Co-authored-by: johnhg Co-authored-by: Mrinal Biswas Co-authored-by: Julie Prestopnik Co-authored-by: j-opatz Co-authored-by: Kathryn Newman Co-authored-by: j-opatz <59586397+j-opatz@users.noreply.github.com> Co-authored-by: Lisa Goodrich Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> Co-authored-by: Julie Prestopnik Co-authored-by: Christina Kalb Co-authored-by: Hank Fisher Co-authored-by: cristianastan2 Co-authored-by: John Halley Gotway Co-authored-by: bikegeek Co-authored-by: bikegeek <3753118+bikegeek@users.noreply.github.com> Co-authored-by: lisagoodrich <33230218+lisagoodrich@users.noreply.github.com> Co-authored-by: Christina Kalb Co-authored-by: Howard Soh Co-authored-by: Molly Smith Co-authored-by: hsoh-u Co-authored-by: Hank Fisher --- .github/parm/use_case_groups.json | 7 +- docs/Contributors_Guide/create_wrapper.rst | 2 +- .../met/update_version_development.rst | 2 +- .../met/update_version_official.rst | 1 + docs/Users_Guide/glossary.rst | 42 ++-- docs/Users_Guide/release-notes.rst | 47 ++++ docs/Users_Guide/systemconfiguration.rst | 43 +--- docs/Users_Guide/wrappers.rst | 75 +------ ...GridStat_fcstGEFS_obsCADB_BinaryObsPOE.png | Bin 0 -> 227440 bytes ..._tc-TCGen_fcstGFS_obsBDECK_2021season.png} | Bin .../GridStat_fcstGEFS_obsCADB_BinaryObsPOE.py | 148 +++++++++++++ .../make_plots/test_make_plots_wrapper.py | 1 - .../series_analysis/test_series_analysis.py | 195 ++++++----------- .../stat_analysis/test_stat_analysis.py | 1 - internal/tests/use_cases/all_use_cases.txt | 2 +- metplus/VERSION | 2 +- metplus/util/config_metplus.py | 23 +- metplus/util/constants.py | 67 ++++++ metplus/util/doc_util.py | 41 +--- metplus/util/met_util.py | 26 +-- metplus/wrappers/command_builder.py | 22 +- metplus/wrappers/grid_diag_wrapper.py | 20 -- metplus/wrappers/make_plots_wrapper.py | 1 - metplus/wrappers/met_db_load_wrapper.py | 56 ++--- metplus/wrappers/plot_point_obs_wrapper.py | 12 +- metplus/wrappers/runtime_freq_wrapper.py | 207 ++++++++++++------ metplus/wrappers/series_analysis_wrapper.py | 162 +++++--------- metplus/wrappers/stat_analysis_wrapper.py | 3 +- metplus/wrappers/tc_pairs_wrapper.py | 2 +- metplus/wrappers/user_script_wrapper.py | 56 ++--- .../PointStat_python_embedding_obs.conf | 3 + ...ridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf | 126 +++++++++++ .../Tmax_fcst_embedded.py | 70 ++++++ .../EnsembleStat_fcstWOFS_obsWOFS.conf | 2 - 34 files changed, 850 insertions(+), 617 deletions(-) create mode 100644 docs/_static/medium_range-GridStat_fcstGEFS_obsCADB_BinaryObsPOE.png rename docs/_static/{tc_and_extra_tc-TCGen_fcstGFS_obsDBECK_2021season.png => tc_and_extra_tc-TCGen_fcstGFS_obsBDECK_2021season.png} (100%) create mode 100644 docs/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.py create mode 100644 parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf create mode 100644 parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE/Tmax_fcst_embedded.py diff --git a/.github/parm/use_case_groups.json b/.github/parm/use_case_groups.json index 3bb687f2c8..f4dcd06a1e 100644 --- a/.github/parm/use_case_groups.json +++ b/.github/parm/use_case_groups.json @@ -99,6 +99,11 @@ "index_list": "8", "run": false }, + { + "category": "medium_range", + "index_list": "9", + "run": false + }, { "category": "precipitation", "index_list": "0", @@ -117,7 +122,7 @@ { "category": "precipitation", "index_list": "3-7", - "run": true + "run": false }, { "category": "precipitation", diff --git a/docs/Contributors_Guide/create_wrapper.rst b/docs/Contributors_Guide/create_wrapper.rst index 9ce44eceee..d9849dcc20 100644 --- a/docs/Contributors_Guide/create_wrapper.rst +++ b/docs/Contributors_Guide/create_wrapper.rst @@ -22,7 +22,7 @@ For example, the new_tool wrapper would be named **NewToolWrapper**. Add Entry to LOWER_TO_WRAPPER_NAME Dictionary --------------------------------------------- -In *metplus/util/doc_util.py*, add entries to the LOWER_TO_WRAPPER_NAME +In *metplus/util/constants.py*, add entries to the LOWER_TO_WRAPPER_NAME dictionary so that the wrapper can be found in the PROCESS_LIST even if it is formatted differently. The key should be the wrapper name in all lower-case letters without any underscores. The value should be the class name diff --git a/docs/Release_Guide/release_steps/met/update_version_development.rst b/docs/Release_Guide/release_steps/met/update_version_development.rst index 6764bd4682..70db799c41 100644 --- a/docs/Release_Guide/release_steps/met/update_version_development.rst +++ b/docs/Release_Guide/release_steps/met/update_version_development.rst @@ -3,7 +3,7 @@ Update Version Number * Prior to creating the first development release (e.g. beta1) for a new version, the official release version number should have already been updated. -* If the official release version has not yet been updated (e.g. beta1), follow the official release instructions to do so. +* If the official release version has not yet been updated (e.g. beta1), follow the :ref:`official release instructions ` to do so. * If the official release version has already been updated (e.g. beta2 and beyond), do the following: diff --git a/docs/Release_Guide/release_steps/met/update_version_official.rst b/docs/Release_Guide/release_steps/met/update_version_official.rst index 1c4ec4f8d5..bd0efe94fe 100644 --- a/docs/Release_Guide/release_steps/met/update_version_official.rst +++ b/docs/Release_Guide/release_steps/met/update_version_official.rst @@ -1,5 +1,6 @@ Update Version Number --------------------- +.. _update_version_official: * Update the version in the code and documentation: diff --git a/docs/Users_Guide/glossary.rst b/docs/Users_Guide/glossary.rst index dbe419ef6e..65b5c0345d 100644 --- a/docs/Users_Guide/glossary.rst +++ b/docs/Users_Guide/glossary.rst @@ -1620,12 +1620,12 @@ METplus Configuration Glossary .. warning:: **DEPRECATED:** Please use :term:`FCST_THRESH_LIST` instead. FCST_THRESH_LIST - Specify the values of the FCST_THRESH column in the MET .stat file to use. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the values of the FCST_THRESH column in the MET .stat file to use. | *Used by:* StatAnalysis OBS_THRESH_LIST - Specify the values of the OBS_THRESH column in the MET .stat file to use. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the values of the OBS_THRESH column in the MET .stat file to use. | *Used by:* StatAnalysis @@ -1647,7 +1647,7 @@ METplus Configuration Glossary .. warning:: **DEPRECATED:** Please use :term:`FCST_LEVEL_LIST` instead. FCST_LEVEL_LIST - Specify the values of the FCST_LEV column in the MET .stat file to use. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the values of the FCST_LEV column in the MET .stat file to use. | *Used by:* StatAnalysis @@ -1655,12 +1655,12 @@ METplus Configuration Glossary .. warning:: **DEPRECATED:** Please use :term:`FCST_VAR_LIST` instead. FCST_VAR_LIST - Specify the values of the FCST_VAR column in the MET .stat file to use. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the values of the FCST_VAR column in the MET .stat file to use. | *Used by:* StatAnalysis FCST_UNITS_LIST - Specify the values of the FCST_UNITS column in the MET .stat file to use. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the values of the FCST_UNITS column in the MET .stat file to use. | *Used by:* StatAnalysis @@ -2319,7 +2319,7 @@ METplus Configuration Glossary LINE_TYPE_LIST - Specify the MET STAT line types to be considered. For TCMPRPlotter, this is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the MET STAT line types to be considered. | *Used by:* MakePlots, StatAnalysis, TCMPRPlotter @@ -2395,7 +2395,7 @@ METplus Configuration Glossary .. warning:: **DEPRECATED:** Please use :term:`LOOP_BY` instead. LOOP_ORDER - Control the looping order for METplus. Valid options are "times" or "processes". "times" runs all items in the :term:`PROCESS_LIST` for a single run time, then repeat until all times have been evaluated. "processes" runs each item in the :term:`PROCESS_LIST` for all times specified, then repeat for the next item in the :term:`PROCESS_LIST`. + .. warning:: **DEPRECATED:** This previously controlled the looping order for METplus. This was removed in v5.0.0. The wrappers will always execute the logic that was previously run when LOOP_ORDER = processes, which runs each item in the :term:`PROCESS_LIST` for all times specified, then repeat for the next item in the :term:`PROCESS_LIST`. | *Used by:* All @@ -3207,7 +3207,7 @@ METplus Configuration Glossary .. warning:: **DEPRECATED:** Please use :term:`OBS_LEVEL_LIST` instead. OBS_LEVEL_LIST - Specify the values of the OBS_LEV column in the MET .stat file to use. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the values of the OBS_LEV column in the MET .stat file to use. | *Used by:* StatAnalysis @@ -3215,12 +3215,12 @@ METplus Configuration Glossary .. warning:: **DEPRECATED:** Please use :term:`OBS_VAR_LIST` instead. OBS_VAR_LIST - Specify the values of the OBS_VAR column in the MET .stat file to use. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the values of the OBS_VAR column in the MET .stat file to use. | *Used by:* StatAnalysis OBS_UNITS_LIST - Specify the values of the OBS_UNITS column in the MET .stat file to use. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the values of the OBS_UNITS column in the MET .stat file to use. | *Used by:* StatAnalysis @@ -3837,7 +3837,7 @@ METplus Configuration Glossary .. warning:: **DEPRECATED:** Please use :term:`MODEL_STAT_ANALYSIS_DUMP_ROW_TEMPLATE` instead. MODEL_STAT_ANALYSIS_DUMP_ROW_TEMPLATE - Specify the template to use for the stat_analysis dump_row file. A user customized template to use for the dump_row file. If left blank and a dump_row file is requested, a default version will be used. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the template to use for the stat_analysis dump_row file. A user customized template to use for the dump_row file. If left blank and a dump_row file is requested, a default version will be used. | *Used by:* StatAnalysis @@ -3853,7 +3853,7 @@ METplus Configuration Glossary .. warning:: **DEPRECATED:** Please use :term:`MODEL_STAT_ANALYSIS_OUT_STAT_TEMPLATE` instead. MODEL_STAT_ANALYSIS_OUT_STAT_TEMPLATE - Specify the template to use for the stat_analysis out_stat file. A user customized template to use for the out_stat file. If left blank and a out_stat file is requested, a default version will be used. This is optional in the METplus configuration file for running with :term:`LOOP_ORDER` = times. + Specify the template to use for the stat_analysis out_stat file. A user customized template to use for the out_stat file. If left blank and a out_stat file is requested, a default version will be used. | *Used by:* StatAnalysis @@ -7636,12 +7636,11 @@ METplus Configuration Glossary | *Used by:* UserScript TC_PAIRS_RUN_ONCE - If True and LOOP_ORDER = processes, TCPairs will be run once using the + If True, TCPairs will be run once using the INIT_BEG or VALID_BEG value (depending on the value of LOOP_BY). This is the default setting and preserves the original logic of the wrapper. If this variable is set to False, then TCPairs will run once - for each run time iteration. If LOOP_ORDER = times, then TCPairs will - still run for each run time. The preferred configuration settings to + for each run time iteration. The preferred configuration settings to run TCPairs once for a range of init or valid times is to set INIT_BEG to INIT_END (if LOOP_BY = INIT) and define the range of init times to filter the data inside TCPairs with TC_PAIRS_INIT_BEG and @@ -9901,6 +9900,19 @@ METplus Configuration Glossary | *Used by:* PlotPointObs + RUN_ID + Eight character hash string unique to a given run of METplus. + Automatically set by METplus at the beginning of a run. + Can be referenced in other METplus config variables to distinguish + multiple METplus runs that may have started within the same second. + For example, it can be added to :term:`LOG_TIMESTAMP_TEMPLATE` to + create unique log files, final config files, etc. + + Example: + LOG_TIMESTAMP_TEMPLATE = %Y%m%d%H%M%S.{RUN_ID} + + | *Used by:* All + ENSEMBLE_STAT_NC_ORANK_FLAG_LATLON Specify the value for 'nc_orank_flag.latlon' in the MET configuration file for EnsembleStat. diff --git a/docs/Users_Guide/release-notes.rst b/docs/Users_Guide/release-notes.rst index 118baa77a5..d1ee026553 100644 --- a/docs/Users_Guide/release-notes.rst +++ b/docs/Users_Guide/release-notes.rst @@ -39,6 +39,53 @@ describes the bugfix, enhancement, or new feature: https://github.com/dtcenter/METplus/issues +METplus Version 5.0.0 Beta 3 Release Notes (2022-09-21) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. warning:: **MAJOR CHANGES**: + + * Use cases that include **EnsembleStat** wrapper will require config file updates. **NEW USER'S GUIDE SECTION OUTLINING REQUIRED CHANGES COMING SOON** + * The default value of :term:`SCRUB_STAGING_DIR` is now *True*. + This means some intermediate files that are auto-generated by METplus such as file lists and + uncompressed files will automatically be removed unless this option is set by the user. + These files are typically only used to debug unexpected issues. + * The default value of :term:`METPLUS_CONF` now includes the :term:`LOG_TIMESTAMP` so each METplus run + will generate a unique final config file, e.g. metplus_final.conf.20220921121733. + + +* Enhancements: + + * **Update the EnsembleStat wrapper and use case examples to remove ensemble post processing logic** (`#1816 `_) + * Enhance logic to consistently create directories (`#1657 `_) + * Create checksum for released code (`#262 `_) + * Add the user ID to the log output at beginning and end of each METplus wrappers run (`dtcenter/METplus-Internal#20 `_) + * Update logic to name final conf and intermediate files with a unique identifier (`dtcenter/METplus-Internal#32 `_) + * Change default logging time information (`dtcenter/METplus-Internal#34 `_) + +* Bugfixes: + + * Allow NA value for _CLIMO_[MEAN/STDEV]_HOUR_INTERVAL (`#1787 `_) + +* New Wrappers: + + * PlotPointObs (`#1489 `_) + +* New Use Cases: + + * PANDA-C use cases (`#1686 `_) + * MJO-ENSO diagnostics (`#1330 `_) + + +* Documentation: + + +* Internal: + + * Add instructions in Release Guide for "Recreate an Existing Release" (`#1746 `_) + * Add modulefiles used for installations on various machines (`#1749 `_) + + + METplus Version 5.0.0 Beta 2 Release Notes (2022-08-03) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/Users_Guide/systemconfiguration.rst b/docs/Users_Guide/systemconfiguration.rst index e9e3868f2d..c0ff3ef4dd 100644 --- a/docs/Users_Guide/systemconfiguration.rst +++ b/docs/Users_Guide/systemconfiguration.rst @@ -1078,38 +1078,14 @@ the output directory. Loop Order ---------- -The METplus wrappers can be configured to loop first by times then -processes or vice-versa. Looping by times first will run each process in -the process list for a given run time, increment to the next run time, run -each process in the process list, and so on. Looping by processes first -will run all times for the first process, then run all times for the -second process, and so on. +The METplus wrappers will run all times for the first process defined in the +:term:`PROCESS_LIST`, then run all times for the second process, and so on. +The :term:`LOOP_ORDER` variable has been deprecated in v5.0.0. +This is the behavior that was previously executed when LOOP_ORDER = processes. -**Example 1 Configuration**:: - - [config] - LOOP_ORDER = times - - PROCESS_LIST = PCPCombine, GridStat - - VALID_BEG = 20190201 - VALID_END = 20190203 - VALID_INCREMENT = 1d - -will run in the following order:: - - * PCPCombine at 2019-02-01 - * GridStat at 2019-02-01 - * PCPCombine at 2019-02-02 - * GridStat at 2019-02-02 - * PCPCombine at 2019-02-03 - * GridStat at 2019-02-03 - - -**Example 2 Configuration**:: +**Example Configuration**:: [config] - LOOP_ORDER = processes PROCESS_LIST = PCPCombine, GridStat @@ -1126,12 +1102,7 @@ will run in the following order:: * GridStat at 2019-02-02 * GridStat at 2019-02-03 -.. note:: - If running a MET tool that processes data over a time range, such as - SeriesAnalysis or StatAnalysis, the tool must be run with - LOOP_ORDER = processes. - .. _Custom_Looping: Custom Looping @@ -1782,15 +1753,13 @@ The possible values for the \*_RUNTIME_FREQ variables are: (init or valid and forecast lead combination). All filename templates are substituted with values. -Note that :term:`LOOP_ORDER` must be set to processes to run these wrappers. -Also note that the following example may not contain all of the configuration +Note that the following example may not contain all of the configuration variables that are required for a successful run. The are intended to show how these variables affect how the data is processed. **SeriesAnalysis Examples**:: [config] - LOOP_ORDER = processes LOOP_BY = INIT INIT_TIME_FMT = %Y%m%d%H diff --git a/docs/Users_Guide/wrappers.rst b/docs/Users_Guide/wrappers.rst index 0956b88bef..8850e47abe 100644 --- a/docs/Users_Guide/wrappers.rst +++ b/docs/Users_Guide/wrappers.rst @@ -3693,9 +3693,9 @@ Description ----------- The MakePlots wrapper creates various statistical plots using python -scripts for the various METplus Wrappers use cases. This can only be run -following StatAnalysis wrapper when LOOP_ORDER = processes. To run -MakePlots wrapper, include MakePlots in PROCESS_LIST. +scripts for the various METplus Wrappers use cases. +This can only be run following StatAnalysis wrapper. +To run MakePlots wrapper, include MakePlots in PROCESS_LIST. METplus Configuration --------------------- @@ -6829,74 +6829,18 @@ Description The StatAnalysis wrapper encapsulates the behavior of the MET stat_analysis tool. It provides the infrastructure to summarize and -filter the MET .stat files. StatAnalysis wrapper can be run in two -different methods. First is to look at the STAT lines for a single date, -to use this method set LOOP_ORDER = times. Second is to look at the STAT -lines over a span of dates, to use this method set LOOP_ORDER = -processes. To run StatAnalysis wrapper, include StatAnalysis in -PROCESS_LIST. +filter the MET .stat files. METplus Configuration --------------------- -The following values must be defined in the METplus Wrappers -configuration file for running with LOOP_ORDER = times: +The following values **must** be defined in the METplus configuration file: | :term:`STAT_ANALYSIS_OUTPUT_DIR` -| :term:`MODEL_STAT_ANALYSIS_DUMP_ROW_TEMPLATE` -| :term:`MODEL_STAT_ANALYSIS_OUT_STAT_TEMPLATE` | :term:`LOG_STAT_ANALYSIS_VERBOSITY` | :term:`MODEL\` | :term:`MODEL_OBTYPE` | :term:`MODEL_STAT_ANALYSIS_LOOKIN_DIR` -| :term:`MODEL_LIST` -| :term:`GROUP_LIST_ITEMS` -| :term:`LOOP_LIST_ITEMS` -| :term:`STAT_ANALYSIS_CONFIG_FILE` -| :term:`STAT_ANALYSIS_JOB_NAME` -| :term:`STAT_ANALYSIS_JOB_ARGS` -| :term:`STAT_ANALYSIS_MET_CONFIG_OVERRIDES` -| - -The following values are **optional** in the METplus Wrappers -configuration file for running with LOOP_ORDER = times: - -| :term:`DESC_LIST` -| :term:`FCST_VALID_HOUR_LIST` -| :term:`OBS_VALID_HOUR_LIST` -| :term:`FCST_INIT_HOUR_LIST` -| :term:`OBS_INIT_HOUR_LIST` -| :term:`FCST_VAR_LIST` -| :term:`OBS_VAR_LIST` -| :term:`FCST_LEVEL_LIST` -| :term:`OBS_LEVEL_LIST` -| :term:`FCST_UNITS_LIST` -| :term:`OBS_UNITS_LIST` -| :term:`FCST_THRESH_LIST` -| :term:`OBS_THRESH_LIST` -| :term:`FCST_LEAD_LIST` -| :term:`OBS_LEAD_LIST` -| :term:`VX_MASK_LIST` -| :term:`INTERP_MTHD_LIST` -| :term:`INTERP_PNTS_LIST` -| :term:`ALPHA_LIST` -| :term:`COV_THRESH_LIST` -| :term:`LINE_TYPE_LIST` -| :term:`STAT_ANALYSIS_SKIP_IF_OUTPUT_EXISTS` -| :term:`STAT_ANALYSIS_HSS_EC_VALUE` -| :term:`STAT_ANALYSIS_OUTPUT_TEMPLATE` -| - -The following values **must** be defined in the METplus Wrappers -configuration file for running with LOOP_ORDER = processes: - -| :term:`STAT_ANALYSIS_OUTPUT_DIR` -| :term:`LOG_STAT_ANALYSIS_VERBOSITY` -| :term:`DATE_TYPE` -| :term:`STAT_ANALYSIS_CONFIG_FILE` -| :term:`MODEL\` -| :term:`MODEL_OBTYPE` -| :term:`MODEL_STAT_ANALYSIS_LOOKIN_DIR` | :term:`MODEL_REFERENCE_NAME` | :term:`GROUP_LIST_ITEMS` | :term:`LOOP_LIST_ITEMS` @@ -6904,11 +6848,14 @@ configuration file for running with LOOP_ORDER = processes: | :term:`VX_MASK_LIST` | :term:`FCST_LEAD_LIST` | :term:`LINE_TYPE_LIST` +| :term:`STAT_ANALYSIS_JOB_NAME` +| :term:`STAT_ANALYSIS_JOB_ARGS` +| :term:`STAT_ANALYSIS_MET_CONFIG_OVERRIDES` | -The following values are optional in the METplus Wrappers configuration -file for running with LOOP_ORDER = processes: +The following values are optional in the METplus configuration file: +| :term:`STAT_ANALYSIS_CONFIG_FILE` | :term:`VAR_FOURIER_DECOMP` | :term:`VAR_WAVE_NUM_LIST` | :term:`FCST_VALID_HOUR_LIST` @@ -6923,6 +6870,8 @@ file for running with LOOP_ORDER = processes: | :term:`ALPHA_LIST` | :term:`STAT_ANALYSIS_HSS_EC_VALUE` | :term:`STAT_ANALYSIS_OUTPUT_TEMPLATE` +| :term:`MODEL_STAT_ANALYSIS_DUMP_ROW_TEMPLATE` +| :term:`MODEL_STAT_ANALYSIS_OUT_STAT_TEMPLATE` | .. warning:: **DEPRECATED:** diff --git a/docs/_static/medium_range-GridStat_fcstGEFS_obsCADB_BinaryObsPOE.png b/docs/_static/medium_range-GridStat_fcstGEFS_obsCADB_BinaryObsPOE.png new file mode 100644 index 0000000000000000000000000000000000000000..18a2f3de302540e3c97d9225026640cdfab1bd0e GIT binary patch literal 227440 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

gU_V@bdKk6N@k{fl3Vw(mM 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 Z&C^f=e!S|h)px+3f{e0ssiaBJ{{eJBP1FDY literal 0 HcmV?d00001 diff --git a/docs/_static/tc_and_extra_tc-TCGen_fcstGFS_obsDBECK_2021season.png b/docs/_static/tc_and_extra_tc-TCGen_fcstGFS_obsBDECK_2021season.png similarity index 100% rename from docs/_static/tc_and_extra_tc-TCGen_fcstGFS_obsDBECK_2021season.png rename to docs/_static/tc_and_extra_tc-TCGen_fcstGFS_obsBDECK_2021season.png diff --git a/docs/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.py b/docs/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.py new file mode 100644 index 0000000000..d62e5e0ef8 --- /dev/null +++ b/docs/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.py @@ -0,0 +1,148 @@ +""" +GridStat: Use binary observation field to verify percentile forecast +==================================================================== + +model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf + +""" +############################################################################## +# Scientific Objective +# -------------------- +# Evaluation of a Probability of Exceedence (POE) field presents several difficulties. Some of these include a fitting verification statistic to report on, +# choosing a meaningful percentile field, and more. This use case was the culmination of attempting to verify a POE field for extreme temperature (defined +# as the 85th percentile) in METplus. In order to provide a streamlined process that didn't require vast reworkings of the MET tools, the observation +# field was converted to binary: 0s indicating a non-85th percentile temperature was observed, and a 1 indicating the opposite. +# Those observations are compared to the chosen forecast percentile and the HSS_EC becomes the main statistical focus, as the new hss_ec_value feature +# allowed the use case to more closely replicate in-house verificaiton that already existed. +# A final note that because the POE forecast file is a non-standard netCDF, Python Embedding was used to extract the desired field + +############################################################################## +# Datasets +# --------------------- +# +# | **Forecast:** 85th percentile of Temperature maximum, from GEFS +# +# | **Observations:** Climate Assessment Data Base (CADB), converted into a binary field relative to the 85th percentile +# +# +# | **Location:** All of the input data required for this use case can be found in the met_test sample data tarball. Click here to the METplus releases page and download sample data for the appropriate release: https://github.com/dtcenter/METplus/releases +# | This tarball should be unpacked into the directory that you will set the value of INPUT_BASE. See `Running METplus`_ section for more information. +# +# | **Data Source:** CPC + +############################################################################## +# METplus Components +# ------------------ +# +# This use case calls a Python script to extract the user-defined percentile forecast. METplus then verifies it against a binary observation field +# in GridStat and returns the requested line type outputs. + +############################################################################## +# METplus Workflow +# ---------------- +# +# The following boundary time is used for the entire script: +# +# | **Init Beg:** 2022-05-22 +# | **Init End:** 2022-05-22 +# +# There is only one time processed for the use case. +# + +############################################################################## +# METplus Configuration +# --------------------- +# +# METplus first loads all of the configuration files found in parm/metplus_config, +# then it loads any configuration files passed to METplus via the command line +# i.e. -c parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf +# +# .. highlight:: bash +# .. literalinclude:: ../../../../parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf +# + +############################################################################## +# MET Configuration +# --------------------- +# +# METplus sets environment variables based on the values in the METplus configuration file. These variables are referenced in the MET configuration file. **YOU SHOULD NOT SET ANY OF THESE ENVIRONMENT VARIABLES YOURSELF! THEY WILL BE OVERWRITTEN BY METPLUS WHEN IT CALLS THE MET TOOLS!** If there is a setting in the MET configuration file that is not controlled by an environment variable, you can add additional environment variables to be set only within the METplus environment using the [user_env_vars] section of the METplus configuration files. See the ‘User Defined Config’ section on the ‘System Configuration’ page of the METplus User’s Guide for more information. +# +# .. highlight:: bash +# .. literalinclude:: ../../../../parm/met_config/GridStatConfig_wrapped +# + +############################################################################## +# Python Embedding +# ---------------- +# +# This use case calls a Python script to parse the user-requested percentile from the forecast dataset. +# This is controlled in the forecast VAR1 variable setting and is provided in +# parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE/Tmax_fcst_embedded.py +# +# .. highlight:: python +# .. literalinclude:: ../../../../parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE/Tmax_fcst_embedded.py +# + +############################################################################## +# Running METplus +# --------------- +# +# This use case can be run two ways: +# +# 1) Passing in GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf then a user-specific system configuration file:: +# +# run_metplus.py /path/to/METplus/parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf /path/to/user_system.conf +# +# 2) Modifying the configurations in parm/metplus_config, then passing in GridStat_fcstGEFS_obsCADB_BinaryObsPOE:: +# +# run_metplus.py /path/to/METplus/parm/use_cases/model_applications/marine_and_cryosphere/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf +# +# The former method is recommended. Whether you add them to a user-specific configuration file or modify the metplus_config files, the following variables must be set correctly: +# +# * **INPUT_BASE** - Path to directory where sample data tarballs are unpacked (See Datasets section to obtain tarballs). This is not required to run METplus, but it is required to run the examples in parm/use_cases +# * **OUTPUT_BASE** - Path where METplus output will be written. This must be in a location where you have write permissions +# * **MET_INSTALL_DIR** - Path to location where MET is installed locally +# +# Example User Configuration File:: +# +# [config] +# INPUT_BASE = /path/to/sample/input/data +# OUTPUT_BASE = /path/to/output/dir +# MET_INSTALL_DIR = /path/to/met-X.Y +# +# + +############################################################################## +# Expected Output +# --------------- +# +# A successful run will output the following both to the screen and to the logfile:: +# +# INFO: METplus has successfully finished running. +# +# Refer to the value set for **OUTPUT_BASE** to find where the output data was generated. +# Output for the use case will be found in model_applications/POE_tmax (relative to **OUTPUT_BASE**). +# The following files should exist: +# +# * grid_stat_1920000L_20220530_000000V_ctc.txt +# * grid_stat_1920000L_20220530_000000V_cts.txt +# * grid_stat_1920000L_20220530_000000V.stat +# + +############################################################################## +# Keywords +# -------- +# +# .. note:: +# +# * GridStatUseCase +# * PythonEmbeddingFileUseCase +# * MediumRangeAppUseCase +# * NETCDFFileUseCase +# +# Navigate to the :ref:`quick-search` page to discover other similar use cases. +# +# +# +# sphinx_gallery_thumbnail_path = '_static/medium_range-GridStat_fcstGEFS_obsCADB_BinaryObsPOE.png' + diff --git a/internal/tests/pytests/plotting/make_plots/test_make_plots_wrapper.py b/internal/tests/pytests/plotting/make_plots/test_make_plots_wrapper.py index 5ee62c781a..5c6b08c910 100644 --- a/internal/tests/pytests/plotting/make_plots/test_make_plots_wrapper.py +++ b/internal/tests/pytests/plotting/make_plots/test_make_plots_wrapper.py @@ -47,7 +47,6 @@ def test_create_c_dict(metplus_config): mp = make_plots_wrapper(metplus_config) # Test 1 c_dict = mp.create_c_dict() - assert(c_dict['LOOP_ORDER'] == 'processes') # NOTE: MakePlots relies on output from StatAnalysis # so its input resides in the output of StatAnalysis assert(c_dict['INPUT_BASE_DIR'] == mp.config.getdir('OUTPUT_BASE') diff --git a/internal/tests/pytests/wrappers/series_analysis/test_series_analysis.py b/internal/tests/pytests/wrappers/series_analysis/test_series_analysis.py index 5259e03ef1..d588d2425f 100644 --- a/internal/tests/pytests/wrappers/series_analysis/test_series_analysis.py +++ b/internal/tests/pytests/wrappers/series_analysis/test_series_analysis.py @@ -313,9 +313,13 @@ def test_series_analysis_single_field(metplus_config, config_overrides, config_file = wrapper.c_dict.get('CONFIG_FILE') out_dir = wrapper.c_dict.get('OUTPUT_DIR') + prefix = 'series_analysis_files_' + suffix = '_init_20050807000000_valid_ALL_lead_ALL.txt' + fcst_file = f'{prefix}fcst{suffix}' + obs_file = f'{prefix}obs{suffix}' expected_cmds = [(f"{app_path} " - f"-fcst {out_dir}/FCST_FILES " - f"-obs {out_dir}/OBS_FILES " + f"-fcst {out_dir}/{fcst_file} " + f"-obs {out_dir}/{obs_file} " f"-out {out_dir}/2005080700 " f"-config {config_file} {verbosity}"), ] @@ -356,8 +360,6 @@ def test_get_fcst_file_info(metplus_config): expected_beg = '000' expected_end = '048' - time_info = {'storm_id': storm_id, 'lead': 0, 'valid': '', 'init': ''} - wrapper = series_analysis_wrapper(metplus_config) wrapper.c_dict['FCST_INPUT_DIR'] = '/fake/path/of/file' wrapper.c_dict['FCST_INPUT_TEMPLATE'] = ( @@ -404,49 +406,26 @@ def test_get_storms_list(metplus_config): assert storm_list == expected_storm_list -# added list of all files for reference for creating subsets -all_fake_fcst = ['fcst/20141214_00/ML1201072014/FCST_TILE_F000_gfs_4_20141214_0000_000.nc', - 'fcst/20141214_00/ML1221072014/FCST_TILE_F000_gfs_4_20141214_0000_000.nc', - 'fcst/20141214_00/ML1201072014/FCST_TILE_F006_gfs_4_20141214_0000_006.nc', - 'fcst/20141214_00/ML1221072014/FCST_TILE_F006_gfs_4_20141214_0000_006.nc', - 'fcst/20141214_00/ML1201072014/FCST_TILE_F012_gfs_4_20141214_0000_012.nc', - 'fcst/20141214_00/ML1221072014/FCST_TILE_F012_gfs_4_20141214_0000_012.nc', - 'fcst/20141215_00/ML1291072014/FCST_TILE_F000_gfs_4_20141215_0000_000.nc', - 'fcst/20141215_00/ML1291072014/FCST_TILE_F006_gfs_4_20141215_0000_006.nc', - 'fcst/20141215_00/ML1291072014/FCST_TILE_F012_gfs_4_20141215_0000_012.nc', - ] -all_fake_obs = ['obs/20141214_00/ML1201072014/OBS_TILE_F000_gfs_4_20141214_0000_000.nc', - 'obs/20141214_00/ML1221072014/OBS_TILE_F000_gfs_4_20141214_0000_000.nc', - 'obs/20141214_00/ML1201072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', - 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', - 'obs/20141214_00/ML1201072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', - 'obs/20141214_00/ML1221072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', - 'obs/20141215_00/ML1291072014/OBS_TILE_F000_gfs_4_20141215_0000_000.nc', - 'obs/20141215_00/ML1291072014/OBS_TILE_F006_gfs_4_20141215_0000_006.nc', - 'obs/20141215_00/ML1291072014/OBS_TILE_F012_gfs_4_20141215_0000_012.nc', - ] - - @pytest.mark.parametrize( 'time_info, expect_fcst_subset, expect_obs_subset', [ - # filter by init all storms + # 0: filter by init all storms ({'init': datetime(2014, 12, 14, 0, 0), 'valid': '*', 'lead': '*', 'storm_id': '*'}, ['fcst/20141214_00/ML1201072014/FCST_TILE_F000_gfs_4_20141214_0000_000.nc', - 'fcst/20141214_00/ML1221072014/FCST_TILE_F000_gfs_4_20141214_0000_000.nc', 'fcst/20141214_00/ML1201072014/FCST_TILE_F006_gfs_4_20141214_0000_006.nc', - 'fcst/20141214_00/ML1221072014/FCST_TILE_F006_gfs_4_20141214_0000_006.nc', 'fcst/20141214_00/ML1201072014/FCST_TILE_F012_gfs_4_20141214_0000_012.nc', + 'fcst/20141214_00/ML1221072014/FCST_TILE_F000_gfs_4_20141214_0000_000.nc', + 'fcst/20141214_00/ML1221072014/FCST_TILE_F006_gfs_4_20141214_0000_006.nc', 'fcst/20141214_00/ML1221072014/FCST_TILE_F012_gfs_4_20141214_0000_012.nc',], ['obs/20141214_00/ML1201072014/OBS_TILE_F000_gfs_4_20141214_0000_000.nc', - 'obs/20141214_00/ML1221072014/OBS_TILE_F000_gfs_4_20141214_0000_000.nc', 'obs/20141214_00/ML1201072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', - 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1201072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', + 'obs/20141214_00/ML1221072014/OBS_TILE_F000_gfs_4_20141214_0000_000.nc', + 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1221072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc',]), - # filter by init single storm + # 1: filter by init single storm ({'init': datetime(2014, 12, 14, 0, 0), 'valid': '*', 'lead': '*', @@ -461,7 +440,7 @@ def test_get_storms_list(metplus_config): 'obs/20141214_00/ML1201072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1201072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', ]), - # filter by init another single storm + # 2: filter by init another single storm ({'init': datetime(2014, 12, 14, 0, 0), 'valid': '*', 'lead': '*', @@ -476,7 +455,7 @@ def test_get_storms_list(metplus_config): 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1221072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', ]), - # filter by lead all storms + # 3: filter by lead all storms ({'init': '*', 'valid': '*', 'lead': 21600, @@ -510,7 +489,6 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, stat_input_dir, tile_input_dir = get_input_dirs(wrapper.config) stat_input_template = 'another_fake_filter_{init?fmt=%Y%m%d_%H}.tcst' - wrapper.c_dict['RUN_ONCE_PER_STORM_ID'] = True wrapper.c_dict['TC_STAT_INPUT_DIR'] = stat_input_dir wrapper.c_dict['TC_STAT_INPUT_TEMPLATE'] = stat_input_template @@ -522,16 +500,24 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, wrapper.c_dict['FCST_INPUT_DIR'] = fcst_input_dir wrapper.c_dict['OBS_INPUT_DIR'] = obs_input_dir - assert wrapper.get_all_files() + if time_info['storm_id'] == '*': + wrapper.c_dict['RUN_ONCE_PER_STORM_ID'] = False + else: + wrapper.c_dict['RUN_ONCE_PER_STORM_ID'] = True + assert wrapper.get_all_files() + print(f"ALL FILES: {wrapper.c_dict['ALL_FILES']}") expected_fcst = [ 'fcst/20141214_00/ML1201072014/FCST_TILE_F000_gfs_4_20141214_0000_000.nc', - 'fcst/20141214_00/ML1221072014/FCST_TILE_F000_gfs_4_20141214_0000_000.nc', 'fcst/20141214_00/ML1201072014/FCST_TILE_F006_gfs_4_20141214_0000_006.nc', - 'fcst/20141214_00/ML1221072014/FCST_TILE_F006_gfs_4_20141214_0000_006.nc', 'fcst/20141214_00/ML1201072014/FCST_TILE_F012_gfs_4_20141214_0000_012.nc', + 'fcst/20141214_00/ML1221072014/FCST_TILE_F000_gfs_4_20141214_0000_000.nc', + 'fcst/20141214_00/ML1221072014/FCST_TILE_F006_gfs_4_20141214_0000_006.nc', 'fcst/20141214_00/ML1221072014/FCST_TILE_F012_gfs_4_20141214_0000_012.nc', ] + if time_info['storm_id'] != '*': + expected_fcst = [item for item in expected_fcst + if time_info['storm_id'] in item] expected_fcst_files = [] for expected in expected_fcst: expected_fcst_files.append(os.path.join(tile_input_dir, expected)) @@ -539,26 +525,44 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, expected_obs = [ 'obs/20141214_00/ML1201072014/OBS_TILE_F000_gfs_4_20141214_0000_000.nc', - 'obs/20141214_00/ML1221072014/OBS_TILE_F000_gfs_4_20141214_0000_000.nc', 'obs/20141214_00/ML1201072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', - 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1201072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', + 'obs/20141214_00/ML1221072014/OBS_TILE_F000_gfs_4_20141214_0000_000.nc', + 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1221072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', ] + if time_info['storm_id'] != '*': + expected_obs = [item for item in expected_obs + if time_info['storm_id'] in item] expected_obs_files = [] for expected in expected_obs: expected_obs_files.append(os.path.join(tile_input_dir, expected)) + fcst_key, obs_key = wrapper._get_fcst_obs_keys(time_info['storm_id']) + fcst_files = [item[fcst_key] for item in wrapper.c_dict['ALL_FILES'] + if fcst_key in item] + obs_files = [item[obs_key] for item in wrapper.c_dict['ALL_FILES'] + if obs_key in item] # convert list of lists into a single list to compare to expected results - fcst_files = [item['fcst'] for item in wrapper.c_dict['ALL_FILES']] fcst_files = [item for sub in fcst_files for item in sub] - obs_files = [item['obs'] for item in wrapper.c_dict['ALL_FILES']] obs_files = [item for sub in obs_files for item in sub] - + fcst_files.sort() + obs_files.sort() assert fcst_files == expected_fcst_files assert obs_files == expected_obs_files - fcst_files_sub, obs_files_sub = wrapper.subset_input_files(time_info) + list_file_dict = wrapper.subset_input_files(time_info) + fcst_files_sub = [] + obs_files_sub = [] + for key, value in list_file_dict.items(): + if key.startswith('fcst'): + with open(value, 'r') as file_handle: + fcst_files_sub.extend(file_handle.read().splitlines()[1:]) + if key.startswith('obs'): + with open(value, 'r') as file_handle: + obs_files_sub.extend(file_handle.read().splitlines()[1:]) + fcst_files_sub.sort() + obs_files_sub.sort() assert fcst_files_sub and obs_files_sub assert len(fcst_files_sub) == len(obs_files_sub) @@ -571,7 +575,7 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, @pytest.mark.parametrize( 'config_overrides, time_info, storm_id, lead_group, expect_fcst_subset, expect_obs_subset', [ - # filter by init all storms + # 0: filter by init all storms ({'LEAD_SEQ': '0H, 6H, 12H', 'SERIES_ANALYSIS_OUTPUT_TEMPLATE': "{init?fmt=%Y%m%d_%H}/{storm_id}/series_{fcst_name}_{fcst_level}.nc", 'TEST_OUTPUT_DIRNAME': 'byinitallstorms'}, @@ -593,7 +597,7 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1201072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', 'obs/20141214_00/ML1221072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc',]), - # filter by init single storm + # 1: filter by init single storm ({'LEAD_SEQ': '0H, 6H, 12H', 'SERIES_ANALYSIS_OUTPUT_TEMPLATE': "{init?fmt=%Y%m%d_%H}/{storm_id}/series_{fcst_name}_{fcst_level}.nc", 'TEST_OUTPUT_DIRNAME': 'byinitstormA'}, @@ -611,7 +615,7 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, 'obs/20141214_00/ML1201072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1201072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', ]), - # filter by init another single storm + # 2: filter by init another single storm ({'LEAD_SEQ': '0H, 6H, 12H', 'SERIES_ANALYSIS_OUTPUT_TEMPLATE': "{init?fmt=%Y%m%d_%H}/{storm_id}/series_{fcst_name}_{fcst_level}.nc", 'TEST_OUTPUT_DIRNAME': 'byinitstormB'}, @@ -629,7 +633,7 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1221072014/OBS_TILE_F012_gfs_4_20141214_0000_012.nc', ]), - # filter by lead all storms + # 3: filter by lead all storms ({'LEAD_SEQ': '0H, 6H, 12H', 'SERIES_ANALYSIS_OUTPUT_TEMPLATE': "series_{fcst_name}_{fcst_level}.nc", 'TEST_OUTPUT_DIRNAME': 'byleadallstorms'}, @@ -645,7 +649,7 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, ['obs/20141214_00/ML1201072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', ]), - # filter by lead 1 storm + # 4: filter by lead 1 storm ({'LEAD_SEQ': '0H, 6H, 12H', 'SERIES_ANALYSIS_OUTPUT_TEMPLATE': "series_{fcst_name}_{fcst_level}.nc", 'TEST_OUTPUT_DIRNAME': 'byleadstormA'}, @@ -659,7 +663,7 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, ], ['obs/20141214_00/ML1201072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', ]), - # filter by lead another storm + # 5: filter by lead another storm ({'LEAD_SEQ': '0H, 6H, 12H', 'SERIES_ANALYSIS_OUTPUT_TEMPLATE': "series_{fcst_name}_{fcst_level}.nc", 'TEST_OUTPUT_DIRNAME': 'byleadstormB'}, @@ -673,7 +677,7 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, ], ['obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', ]), - # filter by lead groups A all storms + # 6: filter by lead groups A all storms ({'LEAD_SEQ_1': '0H, 6H', 'LEAD_SEQ_1_LABEL': 'Group1', 'LEAD_SEQ_2': '12H', @@ -695,7 +699,7 @@ def test_get_all_files_and_subset(metplus_config, time_info, expect_fcst_subset, 'obs/20141214_00/ML1201072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', 'obs/20141214_00/ML1221072014/OBS_TILE_F006_gfs_4_20141214_0000_006.nc', ]), - # filter by lead groups B all storms + # 7: filter by lead groups B all storms ({'LEAD_SEQ_1': '0H, 6H', 'LEAD_SEQ_1_LABEL': 'Group1', 'LEAD_SEQ_2': '12H', @@ -730,32 +734,31 @@ def test_get_fcst_and_obs_path(metplus_config, config_overrides, all_config_overrides.update(config_overrides) wrapper = series_analysis_wrapper(metplus_config, all_config_overrides) stat_input_dir, tile_input_dir = get_input_dirs(wrapper.config) - fcst_input_dir = os.path.join(tile_input_dir, - 'fcst') - obs_input_dir = os.path.join(tile_input_dir, - 'obs') + fcst_input_dir = os.path.join(tile_input_dir, 'fcst') + obs_input_dir = os.path.join(tile_input_dir, 'obs') stat_input_template = 'another_fake_filter_{init?fmt=%Y%m%d_%H}.tcst' wrapper.c_dict['TC_STAT_INPUT_DIR'] = stat_input_dir wrapper.c_dict['TC_STAT_INPUT_TEMPLATE'] = stat_input_template - wrapper.c_dict['RUN_ONCE_PER_STORM_ID'] = True wrapper.c_dict['FCST_INPUT_DIR'] = fcst_input_dir wrapper.c_dict['OBS_INPUT_DIR'] = obs_input_dir test_out_dirname = wrapper.config.getstr('config', 'TEST_OUTPUT_DIRNAME') output_dir = os.path.join(wrapper.config.getdir('OUTPUT_BASE'), - 'series_by', - 'output', - test_out_dirname) + 'series_by', 'output', test_out_dirname) wrapper.c_dict['OUTPUT_DIR'] = output_dir - assert wrapper.get_all_files() + fcst_id, obs_id = wrapper._get_fcst_obs_keys(storm_id) # read output files and compare to expected list if storm_id == '*': storm_dir = 'all_storms' + wrapper.c_dict['RUN_ONCE_PER_STORM_ID'] = False else: storm_dir = storm_id + wrapper.c_dict['RUN_ONCE_PER_STORM_ID'] = True + + assert wrapper.get_all_files() templates = config_overrides['SERIES_ANALYSIS_OUTPUT_TEMPLATE'].split('/') if len(templates) == 1: @@ -763,21 +766,13 @@ def test_get_fcst_and_obs_path(metplus_config, config_overrides, else: output_prefix = os.path.join('20141214_00', storm_dir) - if lead_group: - leads = lead_group[1] - else: - leads = None - fcst_list_file = wrapper._get_ascii_filename('FCST', storm_id, leads) - fcst_file_path = os.path.join(output_dir, - output_prefix, - fcst_list_file) + fcst_list_file = wrapper.get_list_file_name(time_info, fcst_id) + fcst_file_path = os.path.join(output_dir, output_prefix, fcst_list_file) if os.path.exists(fcst_file_path): os.remove(fcst_file_path) - obs_list_file = wrapper._get_ascii_filename('OBS', storm_id, leads) - obs_file_path = os.path.join(output_dir, - output_prefix, - obs_list_file) + obs_list_file = wrapper.get_list_file_name(time_info, obs_id) + obs_file_path = os.path.join(output_dir, output_prefix, obs_list_file) if os.path.exists(obs_file_path): os.remove(obs_file_path) @@ -790,6 +785,7 @@ def test_get_fcst_and_obs_path(metplus_config, config_overrides, actual_fcsts = file_handle.readlines() actual_fcsts = [item.strip() for item in actual_fcsts[1:]] + assert len(actual_fcsts) == len(expect_fcst_subset) for actual_file, expected_file in zip(actual_fcsts, expect_fcst_subset): actual_file = actual_file.replace(tile_input_dir, '').lstrip('/') assert actual_file == expected_file @@ -798,61 +794,12 @@ def test_get_fcst_and_obs_path(metplus_config, config_overrides, actual_obs_files = file_handle.readlines() actual_obs_files = [item.strip() for item in actual_obs_files[1:]] + assert len(actual_obs_files) == len(expect_obs_subset) for actual_file, expected_file in zip(actual_obs_files, expect_obs_subset): actual_file = actual_file.replace(tile_input_dir, '').lstrip('/') assert actual_file == expected_file -@pytest.mark.parametrize( - 'storm_id, leads, expected_result', [ - # storm ID, no leads - ('ML1221072014', None, '_FILES_ML1221072014'), - # no storm ID no leads - ('*', None, '_FILES'), - # storm ID, 1 lead - ('ML1221072014', [relativedelta(hours=12)], '_FILES_ML1221072014_F012'), - # no storm ID, 1 lead - ('*', [relativedelta(hours=12)], '_FILES_F012'), - # storm ID, 2 leads - ('ML1221072014', [relativedelta(hours=18), - relativedelta(hours=12)], - '_FILES_ML1221072014_F012_to_F018'), - # no storm ID, 2 leads - ('*', [relativedelta(hours=18), - relativedelta(hours=12)], - '_FILES_F012_to_F018'), - # storm ID, 3 leads - ('ML1221072014', [relativedelta(hours=15), - relativedelta(hours=18), - relativedelta(hours=12)], - '_FILES_ML1221072014_F012_to_F018'), - # no storm ID, 3 leads - ('*', [relativedelta(hours=15), - relativedelta(hours=18), - relativedelta(hours=12)], - '_FILES_F012_to_F018'), - ] -) -@pytest.mark.wrapper_a -def test_get_ascii_filename(metplus_config, storm_id, leads, - expected_result): - wrapper = series_analysis_wrapper(metplus_config) - for data_type in ['FCST', 'OBS']: - actual_result = wrapper._get_ascii_filename(data_type, - storm_id, - leads) - assert actual_result == f"{data_type}{expected_result}" - - if leads is None: - return - - lead_seconds = [ti_get_seconds_from_lead(item) for item in leads] - actual_result = wrapper._get_ascii_filename(data_type, - storm_id, - lead_seconds) - assert actual_result == f"{data_type}{expected_result}" - - @pytest.mark.parametrize( # no storm ID, label 'template, storm_id, label, expected_result', [ diff --git a/internal/tests/pytests/wrappers/stat_analysis/test_stat_analysis.py b/internal/tests/pytests/wrappers/stat_analysis/test_stat_analysis.py index 054e167bc5..8a5755d263 100644 --- a/internal/tests/pytests/wrappers/stat_analysis/test_stat_analysis.py +++ b/internal/tests/pytests/wrappers/stat_analysis/test_stat_analysis.py @@ -54,7 +54,6 @@ def test_create_c_dict(metplus_config): st = stat_analysis_wrapper(metplus_config) # Test 1 c_dict = st.create_c_dict() - assert c_dict['LOOP_ORDER'] == 'times' assert(os.path.realpath(c_dict['CONFIG_FILE']) == (METPLUS_BASE+'/internal/tests/' +'config/STATAnalysisConfig')) assert(c_dict['OUTPUT_DIR'] == (st.config.getdir('OUTPUT_BASE') diff --git a/internal/tests/use_cases/all_use_cases.txt b/internal/tests/use_cases/all_use_cases.txt index c70cae161a..6599002f72 100644 --- a/internal/tests/use_cases/all_use_cases.txt +++ b/internal/tests/use_cases/all_use_cases.txt @@ -96,7 +96,7 @@ Category: medium_range 6::model_applications/medium_range/PointStat_fcstGFS_obsGDAS_UpperAir_MultiField_PrepBufr.conf 7::TCStat_SeriesAnalysis_fcstGFS_obsGFS_FeatureRelative_SeriesByLead_PyEmbed_Multiple_Diagnostics:: model_applications/medium_range/TCStat_SeriesAnalysis_fcstGFS_obsGFS_FeatureRelative_SeriesByLead_PyEmbed_Multiple_Diagnostics.conf:: cfgrib_env,py_embed 8::MTD_SeriesAnalysis_fcstGFS_obsGFS_FeatureRelative_SeriesByLead::model_applications/medium_range/MTD_SeriesAnalysis_fcstGFS_obsGFS_FeatureRelative_SeriesByLead.conf:: netcdf4_env - +9::GridStat_fcstGEFS_obsCADB_BinaryObsPOE:: model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf:: netcdf4_env Category: precipitation diff --git a/metplus/VERSION b/metplus/VERSION index a8aeb8e210..008caf3049 100644 --- a/metplus/VERSION +++ b/metplus/VERSION @@ -1 +1 @@ -5.0.0-beta3-dev +5.0.0-beta4-dev diff --git a/metplus/util/config_metplus.py b/metplus/util/config_metplus.py index feea916bc2..36a977be16 100644 --- a/metplus/util/config_metplus.py +++ b/metplus/util/config_metplus.py @@ -18,9 +18,11 @@ import shutil from configparser import ConfigParser, NoOptionError from pathlib import Path +import uuid from produtil.config import ProdConfig +from .constants import RUNTIME_CONFS from . import met_util as util from .string_template_substitution import get_tags, do_string_sub from .met_util import is_python_script, format_var_items @@ -242,6 +244,9 @@ def launch(config_list): # save list of user configuration files in a variable config.set('config', 'CONFIG_INPUT', ','.join(config_format_list)) + # save unique identifier for the METplus run + config.set('config', 'RUN_ID', str(uuid.uuid4())[0:8]) + # get OUTPUT_BASE to make sure it is set correctly so the first error # that is logged relates to OUTPUT_BASE, not LOG_DIR, which is likely # only set incorrectly because OUTPUT_BASE is set incorrectly @@ -523,23 +528,6 @@ def move_runtime_configs(self): """ from_section = 'config' to_section = 'runtime' - RUNTIME_CONFS = [ - 'CLOCK_TIME', - 'METPLUS_VERSION', - 'MET_INSTALL_DIR', - 'CONFIG_INPUT', - 'METPLUS_CONF', - 'TMP_DIR', - 'STAGING_DIR', - 'CONVERT', - 'GEMPAKTOCF_JAR', - 'GFDL_TRACKER_EXEC', - 'INPUT_MUST_EXIST', - 'USER_SHELL', - 'DO_NOT_RUN_EXE', - 'SCRUB_STAGING_DIR', - 'MET_BIN_DIR', - ] more_run_confs = [item for item in self.keys(from_section) if item.startswith('LOG') or item.endswith('BASE')] @@ -1000,7 +988,6 @@ def check_for_deprecated_config(config): # modify the code to handle both variables accordingly deprecated_dict = { 'LOOP_BY_INIT' : {'sec' : 'config', 'alt' : 'LOOP_BY', 'copy': False}, - 'LOOP_METHOD' : {'sec' : 'config', 'alt' : 'LOOP_ORDER'}, 'PREPBUFR_DIR_REGEX' : {'sec' : 'regex_pattern', 'alt' : None}, 'PREPBUFR_FILE_REGEX' : {'sec' : 'regex_pattern', 'alt' : None}, 'OBS_INPUT_DIR_REGEX' : {'sec' : 'regex_pattern', 'alt' : 'OBS_POINT_STAT_INPUT_DIR', 'copy': False}, diff --git a/metplus/util/constants.py b/metplus/util/constants.py index 7e7d9cd9f0..e73408a2f1 100644 --- a/metplus/util/constants.py +++ b/metplus/util/constants.py @@ -1,3 +1,45 @@ +# Constant variables used throughout the METplus wrappers source code + +# dictionary used by get_wrapper_name function to easily convert wrapper +# name in many formats to the correct name of the wrapper class +LOWER_TO_WRAPPER_NAME = { + 'ascii2nc': 'ASCII2NC', + 'cycloneplotter': 'CyclonePlotter', + 'ensemblestat': 'EnsembleStat', + 'example': 'Example', + 'extracttiles': 'ExtractTiles', + 'gempaktocf': 'GempakToCF', + 'genvxmask': 'GenVxMask', + 'genensprod': 'GenEnsProd', + 'gfdltracker': 'GFDLTracker', + 'griddiag': 'GridDiag', + 'gridstat': 'GridStat', + 'ioda2nc': 'IODA2NC', + 'makeplots': 'MakePlots', + 'metdbload': 'METDbLoad', + 'mode': 'MODE', + 'mtd': 'MTD', + 'modetimedomain': 'MTD', + 'pb2nc': 'PB2NC', + 'pcpcombine': 'PCPCombine', + 'plotdataplane': 'PlotDataPlane', + 'plotpointobs': 'PlotPointObs', + 'point2grid': 'Point2Grid', + 'pointtogrid': 'Point2Grid', + 'pointstat': 'PointStat', + 'pyembedingest': 'PyEmbedIngest', + 'regriddataplane': 'RegridDataPlane', + 'seriesanalysis': 'SeriesAnalysis', + 'statanalysis': 'StatAnalysis', + 'tcgen': 'TCGen', + 'tcpairs': 'TCPairs', + 'tcrmw': 'TCRMW', + 'tcstat': 'TCStat', + 'tcmprplotter': 'TCMPRPlotter', + 'usage': 'Usage', + 'userscript': 'UserScript', +} + # supported file extensions that will automatically be uncompressed COMPRESSION_EXTENSIONS = [ '.gz', @@ -35,3 +77,28 @@ 'Example', 'CyclonePlotter', ) + +# configuration variables that are specific to a given run +# these are copied from [config] to [runtime] at the +# end of the run so they will not be read if the final +# config file is passed back into METplus but they will +# still be available to review +RUNTIME_CONFS = [ + 'RUN_ID', + 'CLOCK_TIME', + 'METPLUS_VERSION', + 'MET_INSTALL_DIR', + 'CONFIG_INPUT', + 'METPLUS_CONF', + 'TMP_DIR', + 'STAGING_DIR', + 'FILE_LISTS_DIR', + 'CONVERT', + 'GEMPAKTOCF_JAR', + 'GFDL_TRACKER_EXEC', + 'INPUT_MUST_EXIST', + 'USER_SHELL', + 'DO_NOT_RUN_EXE', + 'SCRUB_STAGING_DIR', + 'MET_BIN_DIR', +] diff --git a/metplus/util/doc_util.py b/metplus/util/doc_util.py index 44ee50ad8a..d32e42f778 100755 --- a/metplus/util/doc_util.py +++ b/metplus/util/doc_util.py @@ -3,45 +3,8 @@ import sys import os -# dictionary used by get_wrapper_name function to easily convert wrapper -# name in many formats to the correct name of the wrapper class -LOWER_TO_WRAPPER_NAME = { - 'ascii2nc': 'ASCII2NC', - 'cycloneplotter': 'CyclonePlotter', - 'ensemblestat': 'EnsembleStat', - 'example': 'Example', - 'extracttiles': 'ExtractTiles', - 'gempaktocf': 'GempakToCF', - 'genvxmask': 'GenVxMask', - 'genensprod': 'GenEnsProd', - 'gfdltracker': 'GFDLTracker', - 'griddiag': 'GridDiag', - 'gridstat': 'GridStat', - 'ioda2nc': 'IODA2NC', - 'makeplots': 'MakePlots', - 'metdbload': 'METDbLoad', - 'mode': 'MODE', - 'mtd': 'MTD', - 'modetimedomain': 'MTD', - 'pb2nc': 'PB2NC', - 'pcpcombine': 'PCPCombine', - 'plotdataplane': 'PlotDataPlane', - 'plotpointobs': 'PlotPointObs', - 'point2grid': 'Point2Grid', - 'pointtogrid': 'Point2Grid', - 'pointstat': 'PointStat', - 'pyembedingest': 'PyEmbedIngest', - 'regriddataplane': 'RegridDataPlane', - 'seriesanalysis': 'SeriesAnalysis', - 'statanalysis': 'StatAnalysis', - 'tcgen': 'TCGen', - 'tcpairs': 'TCPairs', - 'tcrmw': 'TCRMW', - 'tcstat': 'TCStat', - 'tcmprplotter': 'TCMPRPlotter', - 'usage': 'Usage', - 'userscript': 'UserScript', -} +from . import LOWER_TO_WRAPPER_NAME + def get_wrapper_name(process_name): """! Determine name of wrapper from string that may not contain the correct diff --git a/metplus/util/met_util.py b/metplus/util/met_util.py index a8c337b8f4..32eecab662 100644 --- a/metplus/util/met_util.py +++ b/metplus/util/met_util.py @@ -136,21 +136,11 @@ def run_metplus(config, process_list): logger.info("Refer to ERROR messages above to resolve issues.") return 1 - loop_order = config.getstr('config', 'LOOP_ORDER', '').lower() - - if loop_order == "processes": - all_commands = [] - for process in processes: - new_commands = process.run_all_times() - if new_commands: - all_commands.extend(new_commands) - - elif loop_order == "times": - all_commands = loop_over_times_and_call(config, processes) - else: - logger.error("Invalid LOOP_ORDER defined. " - "Options are processes, times") - return 1 + all_commands = [] + for process in processes: + new_commands = process.run_all_times() + if new_commands: + all_commands.extend(new_commands) # if process list contains any wrapper that should run commands if any([item[0] not in NO_COMMAND_WRAPPERS for item in process_list]): @@ -396,12 +386,6 @@ def write_final_conf(config): @param config METplusConfig object to write to file """ - # write out os environment to file for debugging - env_file = os.path.join(config.getdir('LOG_DIR'), '.metplus_user_env') - with open(env_file, 'w') as env_file: - for key, value in os.environ.items(): - env_file.write('{}={}\n'.format(key, value)) - final_conf = config.getstr('config', 'METPLUS_CONF') # remove variables that start with CURRENT diff --git a/metplus/wrappers/command_builder.py b/metplus/wrappers/command_builder.py index f16dc01eff..31cf9da942 100755 --- a/metplus/wrappers/command_builder.py +++ b/metplus/wrappers/command_builder.py @@ -30,6 +30,7 @@ from ..util import get_wrapped_met_config_file, add_met_config_item, format_met_config from ..util import remove_quotes from ..util import get_field_info, format_field_info +from ..util import get_wrapper_name from ..util.met_config import add_met_config_dict, handle_climo_dict # pylint:disable=pointless-string-statement @@ -88,10 +89,7 @@ def __init__(self, config, instance=None): ) self.instance = instance - - self.env = os.environ.copy() - if hasattr(config, 'env'): - self.env = config.env + self.env = config.env if hasattr(config, 'env') else os.environ.copy() # populate c_dict dictionary self.c_dict = self.create_c_dict() @@ -1280,16 +1278,6 @@ def run_command(self, cmd, cmd_name=None): return True - # argument needed to match call - # pylint:disable=unused-argument - def run_at_time(self, input_dict): - """! Used to output error and exit if wrapper is attempted to be run - with LOOP_ORDER = times and the run_at_time method is not implemented - """ - self.log_error(f'run_at_time not implemented for {self.log_name} ' - 'wrapper. Cannot run with LOOP_ORDER = times') - return None - def run_all_times(self, custom=None): """! Loop over time range specified in conf file and call METplus wrapper for each time @@ -1627,3 +1615,9 @@ def handle_climo_cdf_dict(self, write_bins=True): items['direct_prob'] = 'bool' self.add_met_config_dict('climo_cdf', items) + + def get_wrapper_instance_name(self): + wrapper_name = get_wrapper_name(self.app_name) + if not self.instance: + return wrapper_name + return f'{wrapper_name}({self.instance})' diff --git a/metplus/wrappers/grid_diag_wrapper.py b/metplus/wrappers/grid_diag_wrapper.py index afe63f4480..d44026af25 100755 --- a/metplus/wrappers/grid_diag_wrapper.py +++ b/metplus/wrappers/grid_diag_wrapper.py @@ -152,26 +152,6 @@ def get_command(self): return cmd def run_at_time_once(self, time_info): - """! Process runtime and try to build command to run ascii2nc - Args: - @param time_info dictionary containing timing information - """ - - # if custom is already set in time info, run for only that item - # if not, loop over the CUSTOM_LOOP_LIST and process once for each - if 'custom' in time_info: - custom_loop_list = [time_info['custom']] - else: - custom_loop_list = self.c_dict['CUSTOM_LOOP_LIST'] - - for custom_string in custom_loop_list: - if custom_string: - self.logger.info(f"Processing custom string: {custom_string}") - - time_info['custom'] = custom_string - self.run_at_time_custom(time_info) - - def run_at_time_custom(self, time_info): self.clear() # subset input files as appropriate diff --git a/metplus/wrappers/make_plots_wrapper.py b/metplus/wrappers/make_plots_wrapper.py index 29bbcc8aac..88ba564fb7 100755 --- a/metplus/wrappers/make_plots_wrapper.py +++ b/metplus/wrappers/make_plots_wrapper.py @@ -105,7 +105,6 @@ def create_c_dict(self): self.config.getstr('config', 'LOG_MAKE_PLOTS_VERBOSITY', c_dict['VERBOSITY']) ) - c_dict['LOOP_ORDER'] = self.config.getstr('config', 'LOOP_ORDER') c_dict['INPUT_BASE_DIR'] = self.config.getdir('MAKE_PLOTS_INPUT_DIR') c_dict['OUTPUT_BASE_DIR'] = self.config.getdir('MAKE_PLOTS_OUTPUT_DIR') c_dict['SCRIPTS_BASE_DIR'] = self.config.getdir('MAKE_PLOTS_SCRIPTS_DIR') diff --git a/metplus/wrappers/met_db_load_wrapper.py b/metplus/wrappers/met_db_load_wrapper.py index e5a8783935..1ed678cb9f 100755 --- a/metplus/wrappers/met_db_load_wrapper.py +++ b/metplus/wrappers/met_db_load_wrapper.py @@ -94,6 +94,9 @@ def create_c_dict(self): self.log_error(f"Must set MET_DB_LOAD_MV_{name}") c_dict[f'MV_{name}'] = value + # set variable to skip finding input files + c_dict['FIND_FILES'] = False + return c_dict def get_command(self): @@ -111,49 +114,30 @@ def run_at_time_once(self, time_info): """ success = True - # if custom is already set in time info, run for only that item - # if not, loop over the CUSTOM_LOOP_LIST and process once for each - if 'custom' in time_info: - custom_loop_list = [time_info['custom']] - else: - custom_loop_list = self.c_dict['CUSTOM_LOOP_LIST'] - - for custom_string in custom_loop_list: - if custom_string: - self.logger.info(f"Processing custom string: {custom_string}") + # if lead and either init or valid are set, compute other string sub + if time_info.get('lead') != '*': + if (time_info.get('init') != '*' + or time_info.get('valid') != '*'): + time_info = time_util.ti_calculate(time_info) - time_info['custom'] = custom_string - # if lead and either init or valid are set, compute other string sub - if time_info.get('lead') != '*': - if (time_info.get('init') != '*' - or time_info.get('valid') != '*'): - time_info = time_util.ti_calculate(time_info) + self.set_environment_variables(time_info) - self.set_environment_variables(time_info) + if not self.replace_values_in_xml(time_info): + return - if not self.replace_values_in_xml(time_info): - return + # run command + if not self.build(): + success = False - # run command - if not self.build(): - success = False - - # remove tmp file - if self.c_dict.get('REMOVE_TMP_XML', True): - xml_file = self.c_dict.get('XML_TMP_FILE') - if xml_file and os.path.exists(xml_file): - self.logger.debug(f"Removing tmp file: {xml_file}") - os.remove(xml_file) + # remove tmp file + if self.c_dict.get('REMOVE_TMP_XML', True): + xml_file = self.c_dict.get('XML_TMP_FILE') + if xml_file and os.path.exists(xml_file): + self.logger.debug(f"Removing tmp file: {xml_file}") + os.remove(xml_file) return success - def get_all_files(self, custom=None): - """! Don't get list of all files for METdbLoad wrapper - - @returns True to report that no failures occurred - """ - return True - def get_stat_directories(self, input_paths): """! Traverse through files under input path and find all directories that contain .stat, .tcst, mode*.txt, and mtd*.txt files. diff --git a/metplus/wrappers/plot_point_obs_wrapper.py b/metplus/wrappers/plot_point_obs_wrapper.py index 3648003c87..2a0ec4373b 100755 --- a/metplus/wrappers/plot_point_obs_wrapper.py +++ b/metplus/wrappers/plot_point_obs_wrapper.py @@ -14,10 +14,10 @@ from ..util import do_string_sub, ti_calculate, get_lead_sequence from ..util import skip_time -from . import RuntimeFreqWrapper +from . import LoopTimesWrapper -class PlotPointObsWrapper(RuntimeFreqWrapper): +class PlotPointObsWrapper(LoopTimesWrapper): """! Wrapper used to build commands to call plot_point_obs """ WRAPPER_ENV_VAR_KEYS = [ @@ -56,10 +56,6 @@ def create_c_dict(self): c_dict = super().create_c_dict() app = self.app_name.upper() - # set default runtime frequency if unset explicitly - if not c_dict['RUNTIME_FREQ']: - c_dict['RUNTIME_FREQ'] = 'RUN_ONCE_FOR_EACH' - c_dict['VERBOSITY'] = self.config.getstr('config', f'LOG_{app}_VERBOSITY', c_dict['VERBOSITY']) @@ -70,8 +66,8 @@ def create_c_dict(self): c_dict['INPUT_DIR'] = self.config.getdir(f'{app}_INPUT_DIR', '') if not c_dict['INPUT_TEMPLATE']: - self.logger.warning(f'{app}_INPUT_TEMPLATE is required ' - 'to run PlotPointObs wrapper.') + self.log_error(f'{app}_INPUT_TEMPLATE is required ' + 'to run PlotPointObs wrapper.') # get optional grid input files c_dict['GRID_INPUT_TEMPLATE'] = self.config.getraw( diff --git a/metplus/wrappers/runtime_freq_wrapper.py b/metplus/wrappers/runtime_freq_wrapper.py index 8488f2072a..2812e81e15 100755 --- a/metplus/wrappers/runtime_freq_wrapper.py +++ b/metplus/wrappers/runtime_freq_wrapper.py @@ -28,11 +28,12 @@ class RuntimeFreqWrapper(CommandBuilder): # valid options for run frequency - FREQ_OPTIONS = ['RUN_ONCE', - 'RUN_ONCE_PER_INIT_OR_VALID', - 'RUN_ONCE_PER_LEAD', - 'RUN_ONCE_FOR_EACH' - ] + FREQ_OPTIONS = [ + 'RUN_ONCE', + 'RUN_ONCE_PER_INIT_OR_VALID', + 'RUN_ONCE_PER_LEAD', + 'RUN_ONCE_FOR_EACH' + ] def __init__(self, config, instance=None): super().__init__(config, instance=instance) @@ -100,14 +101,8 @@ def run_all_times(self): f" {', '.join(self.FREQ_OPTIONS)}") return None - # if not running once for each runtime and loop order is not set to - # 'processes' report an error - if self.c_dict['RUNTIME_FREQ'] != 'RUN_ONCE_FOR_EACH': - loop_order = self.config.getstr('config', 'LOOP_ORDER', '').lower() - if loop_order != 'processes': - self.log_error(f"Cannot run using {self.c_dict['RUNTIME_FREQ']} " - "mode unless LOOP_ORDER = processes") - return None + wrapper_instance_name = self.get_wrapper_instance_name() + self.logger.info(f'Running wrapper: {wrapper_instance_name}') # loop over all custom strings for custom_string in self.c_dict['CUSTOM_LOOP_LIST']: @@ -125,11 +120,6 @@ def run_all_times_custom(self, custom): @returns True on success, False on failure """ - # get a list of all input files that are available - if not self.get_all_files(custom): - self.log_error("A problem occurred trying to obtain input files") - return None - runtime_freq = self.c_dict['RUNTIME_FREQ'] if runtime_freq == 'RUN_ONCE': self.run_once(custom) @@ -138,7 +128,7 @@ def run_all_times_custom(self, custom): elif runtime_freq == 'RUN_ONCE_PER_LEAD': self.run_once_per_lead(custom) elif runtime_freq == 'RUN_ONCE_FOR_EACH': - self.all_commands = super().run_all_times(custom) + self.run_once_for_each(custom) def run_once(self, custom): self.logger.debug("Running once for all files") @@ -155,6 +145,10 @@ def run_once(self, custom): time_input['valid'] = '*' time_input['lead'] = '*' + if not self.get_all_files(custom): + self.log_error("A problem occurred trying to obtain input files") + return None + return self.run_at_time_once(time_input) def run_once_per_init_or_valid(self, custom): @@ -178,6 +172,8 @@ def run_once_per_init_or_valid(self, custom): time_input['lead'] = '*' + self.c_dict['ALL_FILES'] = self.get_all_files_from_leads(time_input) + self.clear() if not self.run_at_time_once(time_input): success = False @@ -205,19 +201,36 @@ def run_once_per_lead(self, custom): time_input['init'] = '*' time_input['valid'] = '*' + self.c_dict['ALL_FILES'] = self.get_all_files_for_lead(time_input) + self.clear() if not self.run_at_time_once(time_input): success = False return success - def run_at_time(self, input_dict): - """! Runs the command for a given run time. This function loops - over the list of forecast leads and list of custom loops - and runs once for each combination + def run_once_for_each(self, custom): + self.logger.debug(f"Running once for each init/valid and lead time") - @param input_dict dictionary containing time information - """ + success = True + for time_input in time_generator(self.config): + if time_input is None: + success = False + continue + + log_runtime_banner(self.config, time_input, self) + add_to_time_input(time_input, + instance=self.instance, + custom=custom) + + # loop of forecast leads and process each + if not self.run_at_time(time_input): + success = False + + return success + + def run_at_time(self, input_dict): + success = True # loop of forecast leads and process each lead_seq = get_lead_sequence(self.config, input_dict) for lead in lead_seq: @@ -248,7 +261,10 @@ def run_at_time(self, input_dict): # Run for given init/valid time and forecast lead combination self.clear() - self.run_at_time_once(time_info) + if not self.run_at_time_once(time_info): + success = False + + return success def get_all_files(self, custom=None): """! Get all files that can be processed with the app. @@ -256,6 +272,9 @@ def get_all_files(self, custom=None): i.e. fcst or obs, and the value is a list of files that fit in that category """ + if not self.c_dict.get('FIND_FILES', True): + return True + self.logger.debug("Finding all input files") all_files = [] @@ -268,27 +287,8 @@ def get_all_files(self, custom=None): instance=self.instance, custom=custom) - # loop over all forecast leads - wildcard_if_empty = self.c_dict.get('WILDCARD_LEAD_IF_EMPTY', - False) - lead_seq = get_lead_sequence(self.config, - time_input, - wildcard_if_empty=wildcard_if_empty) - for lead in lead_seq: - time_input['lead'] = lead - - # set current lead time config and environment variables - time_info = time_util.ti_calculate(time_input) - - if skip_time(time_info, self.c_dict.get('SKIP_TIMES')): - continue - - file_dict = self.get_files_from_time(time_info) - if file_dict: - if isinstance(file_dict, list): - all_files.extend(file_dict) - else: - all_files.append(file_dict) + lead_files = self.get_all_files_from_leads(time_input) + all_files.extend(lead_files) if not all_files: return False @@ -296,7 +296,66 @@ def get_all_files(self, custom=None): self.c_dict['ALL_FILES'] = all_files return True - def get_files_from_time(self, time_info): + def get_all_files_from_leads(self, time_input): + if not self.c_dict.get('FIND_FILES', True): + return True + + lead_files = [] + # loop over all forecast leads + wildcard_if_empty = self.c_dict.get('WILDCARD_LEAD_IF_EMPTY', + False) + lead_seq = get_lead_sequence(self.config, + time_input, + wildcard_if_empty=wildcard_if_empty) + for lead in lead_seq: + current_time_input = time_input.copy() + current_time_input['lead'] = lead + + # set current lead time config and environment variables + time_info = time_util.ti_calculate(current_time_input) + + if skip_time(time_info, self.c_dict.get('SKIP_TIMES')): + continue + + file_dict = self.get_files_from_time(time_info) + if file_dict: + if isinstance(file_dict, list): + lead_files.extend(file_dict) + else: + lead_files.append(file_dict) + + return lead_files + + def get_all_files_for_lead(self, time_input): + if not self.c_dict.get('FIND_FILES', True): + return True + + new_files = [] + for run_time in time_generator(self.config): + if run_time is None: + continue + + current_time_input = time_input.copy() + if 'valid' in run_time: + current_time_input['valid'] = run_time['valid'] + del current_time_input['init'] + elif 'init' in run_time: + current_time_input['init'] = run_time['init'] + del current_time_input['valid'] + time_info = time_util.ti_calculate(current_time_input) + if skip_time(time_info, self.c_dict.get('SKIP_TIMES')): + continue + file_dict = self.get_files_from_time(time_info) + if file_dict: + if isinstance(file_dict, list): + new_files.extend(file_dict) + else: + new_files.append(file_dict) + + return new_files + + @staticmethod + def get_files_from_time(time_info): """! Create dictionary containing time information (key time_info) and any relevant files for that runtime. @param time_info dictionary containing time information @@ -307,7 +366,8 @@ def get_files_from_time(self, time_info): file_dict['time_info'] = time_info.copy() return file_dict - def compare_time_info(self, runtime, filetime): + @staticmethod + def compare_time_info(runtime, filetime): """! Compare current runtime dictionary to current file time dictionary If runtime value for init, valid, or lead is not a wildcard and it doesn't match the file's time value, return False. Otherwise @@ -318,12 +378,13 @@ def compare_time_info(self, runtime, filetime): @returns True if file's info matches the requirements for current runtime or False if not. """ + # False if init/valid is not wildcard and the file time doesn't match for time_val in ['init', 'valid']: if (runtime[time_val] != '*' and filetime[time_val] != runtime[time_val]): return False - if runtime['lead'] == '*': + if runtime.get('lead', '*') == '*': return True # convert each value to seconds to compare @@ -373,7 +434,7 @@ def find_input_files(self, time_info, fill_missing=False): return all_input_files - def subset_input_files(self, time_info): + def subset_input_files(self, time_info, output_dir=None, leads=None): """! Obtain a subset of input files from the c_dict ALL_FILES based on the time information for the current run. @@ -386,21 +447,34 @@ def subset_input_files(self, time_info): if not self.c_dict.get('ALL_FILES'): return all_input_files + if leads is None: + lead_loop = [None] + else: + lead_loop = leads + for file_dict in self.c_dict['ALL_FILES']: - # compare time information for each input file - # add file to list of files to use if it matches - if not self.compare_time_info(time_info, file_dict['time_info']): - continue + for lead in lead_loop: + if lead is not None: + current_time_info = time_info.copy() + current_time_info['lead'] = lead + else: + current_time_info = time_info - for input_key in file_dict: - # skip time info key - if input_key == 'time_info': + # compare time information for each input file + # add file to list of files to use if it matches + if not self.compare_time_info(current_time_info, + file_dict['time_info']): continue - if input_key not in all_input_files: - all_input_files[input_key] = [] + for input_key in file_dict: + # skip time info key + if input_key == 'time_info': + continue + + if input_key not in all_input_files: + all_input_files[input_key] = [] - all_input_files[input_key].extend(file_dict[input_key]) + all_input_files[input_key].extend(file_dict[input_key]) # return None if no matching input files were found if not all_input_files: @@ -410,7 +484,9 @@ def subset_input_files(self, time_info): list_file_dict = {} for identifier, input_files in all_input_files.items(): list_file_name = self.get_list_file_name(time_info, identifier) - list_file_path = self.write_list_file(list_file_name, input_files) + list_file_path = self.write_list_file(list_file_name, + input_files, + output_dir=output_dir) list_file_dict[identifier] = list_file_path return list_file_dict @@ -435,11 +511,16 @@ def get_list_file_name(self, time_info, identifier): else: valid = time_info['valid'].strftime('%Y%m%d%H%M%S') - if time_info['lead'] == '*': + if time_info.get('lead', '*') == '*': lead = 'ALL' else: lead = time_util.ti_get_seconds_from_lead(time_info['lead'], time_info['valid']) + # use lead with letter if seconds cannot be computed e.g. 3m + if lead is None: + lead = time_util.ti_get_lead_string(time_info['lead'], + plural=False, + letter_only=True) return (f"{self.app_name}_files_{identifier}_" f"init_{init}_valid_{valid}_lead_{lead}.txt") diff --git a/metplus/wrappers/series_analysis_wrapper.py b/metplus/wrappers/series_analysis_wrapper.py index cc45658217..8d24ea0c30 100755 --- a/metplus/wrappers/series_analysis_wrapper.py +++ b/metplus/wrappers/series_analysis_wrapper.py @@ -26,7 +26,8 @@ from ..util import do_string_sub, parse_template, get_tags from ..util import get_lead_sequence, get_lead_sequence_groups from ..util import ti_get_hours_from_lead, ti_get_seconds_from_lead -from ..util import ti_get_lead_string +from ..util import ti_get_lead_string, ti_calculate +from ..util import ti_get_seconds_from_relativedelta from ..util import parse_var_list from ..util import add_to_time_input from ..util import field_read_prob_info @@ -465,11 +466,29 @@ def run_once_per_lead(self, custom): self.logger.debug(f"Processing {lead_group[0]} - forecast leads: " f"{', '.join(lead_hours)}") + + self.c_dict['ALL_FILES'] = ( + self.get_all_files_for_leads(input_dict, lead_group[1]) + ) + + # if only 1 forecast lead is being processed, set it in time dict + if len(lead_group[1]) == 1: + input_dict['lead'] = lead_group[1][0] + if not self.run_at_time_once(input_dict, lead_group): success = False return success + def get_all_files_for_leads(self, input_dict, leads): + all_files = [] + current_input_dict = input_dict.copy() + for lead in leads: + current_input_dict['lead'] = lead + new_files = self.get_all_files_for_lead(current_input_dict) + all_files.extend(new_files) + return all_files + def run_at_time_once(self, time_info, lead_group=None): """! Attempt to build series_analysis command for run time @@ -577,12 +596,23 @@ def get_files_from_time(self, time_info): if fcst_files is None or obs_files is None: return None - file_dict['fcst'] = fcst_files - file_dict['obs'] = obs_files + fcst_key, obs_key = self._get_fcst_obs_keys(storm_id) + + file_dict[fcst_key] = fcst_files + file_dict[obs_key] = obs_files file_dict_list.append(file_dict) return file_dict_list + @staticmethod + def _get_fcst_obs_keys(storm_id): + fcst_key = 'fcst' + obs_key = 'obs' + if storm_id != '*': + fcst_key = f'{fcst_key}_{storm_id}' + obs_key = f'{obs_key}_{storm_id}' + return fcst_key, obs_key + def find_input_files(self, time_info, data_type): """! Loop over list of input templates and find files for each @@ -596,27 +626,6 @@ def find_input_files(self, time_info, data_type): mandatory=False) return input_files - def subset_input_files(self, time_info): - """! Obtain a subset of input files from the c_dict ALL_FILES based on - the time information for the current run. - - @param time_info dictionary containing time information - @returns the path to a ascii file containing the list of files - or None if could not find any files - """ - fcst_files = [] - obs_files = [] - for file_dict in self.c_dict['ALL_FILES']: - # compare time information for each input file - # add file to list of files to use if it matches - if not self.compare_time_info(time_info, file_dict['time_info']): - continue - - fcst_files.extend(file_dict['fcst']) - obs_files.extend(file_dict['obs']) - - return fcst_files, obs_files - def compare_time_info(self, runtime, filetime): """! Call parents implementation then if the current run time and file time may potentially still not match, use storm_id to check @@ -696,48 +705,21 @@ def _get_fcst_and_obs_path(self, time_info, storm_id, lead_group): return fcst_path, obs_path - all_fcst_files = [] - all_obs_files = [] - lead_loop = leads if leads else [None] - for lead in lead_loop: - if lead is not None: - time_info['lead'] = lead - - fcst_files, obs_files = self.subset_input_files(time_info) - if fcst_files and obs_files: - all_fcst_files.extend(fcst_files) - all_obs_files.extend(obs_files) - - # skip if no files were found - if not all_fcst_files or not all_obs_files: - return None, None - output_dir = self.get_output_dir(time_info, storm_id, label) - # create forecast (or both) file list - if self.c_dict['USING_BOTH']: - data_type = 'BOTH' - else: - data_type = 'FCST' - - fcst_ascii_filename = self._get_ascii_filename(data_type, - storm_id, - leads) - fcst_path = self.write_list_file(fcst_ascii_filename, - all_fcst_files, - output_dir=output_dir) + list_file_dict = self.subset_input_files(time_info, + output_dir=output_dir, + leads=leads) + if not list_file_dict: + return None, None + # add storm_id and label to time_info for output filename + self._add_storm_id_and_label(time_info, storm_id, label) + fcst_key, obs_key = self._get_fcst_obs_keys(storm_id) + fcst_path = list_file_dict[fcst_key] if self.c_dict['USING_BOTH']: return fcst_path, fcst_path - - # create analysis file list - obs_ascii_filename = self._get_ascii_filename('OBS', - storm_id, - leads) - obs_path = self.write_list_file(obs_ascii_filename, - all_obs_files, - output_dir=output_dir) - + obs_path = list_file_dict[obs_key] return fcst_path, obs_path def _check_python_embedding(self): @@ -758,50 +740,6 @@ def _check_python_embedding(self): return True - @staticmethod - def _get_ascii_filename(data_type, storm_id, leads=None): - """! Build filename for ASCII file list file - - @param data_type FCST, OBS, or BOTH - @param storm_id current storm ID or wildcard character - @param leads list of forecast leads to use add the forecast hour - string to the filename or the minimum and maximum forecast hour - strings if there are more than one lead - @returns string containing filename to use - """ - prefix = f"{data_type}_FILES" - - # of storm ID is set (not wildcard), then add it to filename - if storm_id == '*': - filename = '' - else: - filename = f"_{storm_id}" - - # add forecast leads if specified - if leads is not None: - lead_hours_list = [] - for lead in leads: - lead_hours = ti_get_hours_from_lead(lead) - if lead_hours is None: - lead_hours = ti_get_lead_string(lead, - letter_only=True) - lead_hours_list.append(lead_hours) - - # get first forecast lead, convert to hours, and add to filename - lead_hours = min(lead_hours_list) - - lead_str = str(lead_hours).zfill(3) - filename += f"_F{lead_str}" - - # if list of forecast leads, get min and max and add them to name - if len(lead_hours_list) > 1: - max_lead_hours = max(lead_hours_list) - max_lead_str = str(max_lead_hours).zfill(3) - filename += f"_to_F{max_lead_str}" - - ascii_filename = f"{prefix}{filename}" - return ascii_filename - def get_output_dir(self, time_info, storm_id, label): """! Determine directory that will contain output data from the OUTPUT_DIR and OUTPUT_TEMPLATE. This will include any @@ -818,17 +756,23 @@ def get_output_dir(self, time_info, storm_id, label): output_dir_template = os.path.join(self.c_dict['OUTPUT_DIR'], self.c_dict['OUTPUT_TEMPLATE']) output_dir_template = os.path.dirname(output_dir_template) + + # get output directory including storm ID and label + current_time_info = time_info.copy() + self._add_storm_id_and_label(current_time_info, storm_id, label) + output_dir = do_string_sub(output_dir_template, + **current_time_info) + return output_dir + + @staticmethod + def _add_storm_id_and_label(time_info, storm_id, label): if storm_id == '*': storm_id_out = 'all_storms' else: storm_id_out = storm_id - # get output directory including storm ID and label time_info['storm_id'] = storm_id_out time_info['label'] = label - output_dir = do_string_sub(output_dir_template, - **time_info) - return output_dir def build_and_run_series_request(self, time_info, fcst_path, obs_path): """! Build up the -obs, -fcst, -out necessary for running the diff --git a/metplus/wrappers/stat_analysis_wrapper.py b/metplus/wrappers/stat_analysis_wrapper.py index de313014ca..ffde04030a 100755 --- a/metplus/wrappers/stat_analysis_wrapper.py +++ b/metplus/wrappers/stat_analysis_wrapper.py @@ -158,7 +158,6 @@ def create_c_dict(self): self.config.getstr('config', 'LOG_STAT_ANALYSIS_VERBOSITY', c_dict['VERBOSITY']) ) - c_dict['LOOP_ORDER'] = self.config.getstr('config', 'LOOP_ORDER') # STATAnalysis config file is optional, so # don't provide wrapped config file name as default value @@ -436,7 +435,7 @@ def set_lists_loop_or_group(self, c_dict): for missing_config in missing_config_list: # if running MakePlots - if (c_dict['LOOP_ORDER'] == 'processes' and self.runMakePlots): + if self.runMakePlots: # if LINE_TYPE_LIST is missing, add it to group list if missing_config == 'LINE_TYPE_LIST': diff --git a/metplus/wrappers/tc_pairs_wrapper.py b/metplus/wrappers/tc_pairs_wrapper.py index e4870b7e06..c86cc01ab8 100755 --- a/metplus/wrappers/tc_pairs_wrapper.py +++ b/metplus/wrappers/tc_pairs_wrapper.py @@ -285,7 +285,7 @@ def create_c_dict(self): False) ) - # if LOOP_ORDER = processes, only run once if True + # only run once if True c_dict['RUN_ONCE'] = self.config.getbool('config', 'TC_PAIRS_RUN_ONCE', True) diff --git a/metplus/wrappers/user_script_wrapper.py b/metplus/wrappers/user_script_wrapper.py index a64cfbdefa..50384c0190 100755 --- a/metplus/wrappers/user_script_wrapper.py +++ b/metplus/wrappers/user_script_wrapper.py @@ -63,43 +63,25 @@ def run_at_time_once(self, time_info): @param time_info dictionary containing time information @returns True if command was run successfully, False otherwise """ - success = True - - # if custom is already set in time info, run for only that item - # if not, loop over the CUSTOM_LOOP_LIST and process once for each - if 'custom' in time_info: - custom_loop_list = [time_info['custom']] - else: - custom_loop_list = self.c_dict['CUSTOM_LOOP_LIST'] - - for custom_string in custom_loop_list: - if custom_string: - self.logger.info(f"Processing custom string: {custom_string}") - - time_info['custom'] = custom_string - # if lead and either init or valid are set, compute other string sub - if time_info.get('lead') != '*': - if (time_info.get('init') != '*' - or time_info.get('valid') != '*'): - time_info = time_util.ti_calculate(time_info) - - # create file list text files for the current run time criteria - # set c_dict to the input file dict to set as environment vars - self.c_dict['INPUT_LIST_DICT'] = self.subset_input_files(time_info) - - self.set_environment_variables(time_info) - - # substitute values from dictionary into command - self.c_dict['COMMAND'] = ( - do_string_sub(self.c_dict['COMMAND_TEMPLATE'], - **time_info) - ) - - # run command - if not self.build(): - success = False - - return success + # if lead and either init or valid are set, compute other string sub + if time_info.get('lead') != '*': + if (time_info.get('init') != '*' + or time_info.get('valid') != '*'): + time_info = time_util.ti_calculate(time_info) + + # create file list text files for the current run time criteria + # set c_dict to the input file dict to set as environment vars + self.c_dict['INPUT_LIST_DICT'] = self.subset_input_files(time_info) + + self.set_environment_variables(time_info) + + # substitute values from dictionary into command + self.c_dict['COMMAND'] = ( + do_string_sub(self.c_dict['COMMAND_TEMPLATE'], + **time_info) + ) + + return self.build() def get_files_from_time(self, time_info): """! Create dictionary containing time information (key time_info) and diff --git a/parm/use_cases/met_tool_wrapper/PointStat/PointStat_python_embedding_obs.conf b/parm/use_cases/met_tool_wrapper/PointStat/PointStat_python_embedding_obs.conf index 96af438ba3..024573a7f2 100644 --- a/parm/use_cases/met_tool_wrapper/PointStat/PointStat_python_embedding_obs.conf +++ b/parm/use_cases/met_tool_wrapper/PointStat/PointStat_python_embedding_obs.conf @@ -70,6 +70,7 @@ FCST_VAR1_THRESH = <=273, >273 OBS_VAR1_NAME = TMP OBS_VAR1_LEVELS = P750-900 OBS_VAR1_THRESH = <=273, >273 +OBS_VAR1_OPTIONS = set_attr_units = "K" FCST_VAR2_NAME = UGRD FCST_VAR2_LEVELS = Z10 @@ -77,6 +78,7 @@ FCST_VAR2_THRESH = >=5 OBS_VAR2_NAME = UGRD OBS_VAR2_LEVELS = Z10 OBS_VAR2_THRESH = >=5 +OBS_VAR2_OPTIONS = set_attr_units = "m/s" FCST_VAR3_NAME = VGRD FCST_VAR3_LEVELS = Z10 @@ -84,6 +86,7 @@ FCST_VAR3_THRESH = >=5 OBS_VAR3_NAME = VGRD OBS_VAR3_LEVELS = Z10 OBS_VAR3_THRESH = >=5 +OBS_VAR3_OPTIONS = set_attr_units = "m/s" ### diff --git a/parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf b/parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf new file mode 100644 index 0000000000..7bce8e2c66 --- /dev/null +++ b/parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE.conf @@ -0,0 +1,126 @@ +[config] + + +PROCESS_LIST = GridStat + + +LOOP_BY = INIT +INIT_TIME_FMT = %Y%m%d +INIT_BEG=20220522 +INIT_END=20220522 +INIT_INCREMENT = 12H + +LEAD_SEQ = 8d + +LOOP_ORDER = times + + +### +# File I/O +# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info +### + +FCST_GRID_STAT_INPUT_TEMPLATE = PYTHON_NUMPY + +OBS_GRID_STAT_INPUT_DIR = {INPUT_BASE}/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE +OBS_GRID_STAT_INPUT_TEMPLATE = tmax_cats_{valid?fmt=%Y%m%d}.nc + +GRID_STAT_CLIMO_MEAN_INPUT_DIR = +GRID_STAT_CLIMO_MEAN_INPUT_TEMPLATE = + +GRID_STAT_CLIMO_STDEV_INPUT_DIR = +GRID_STAT_CLIMO_STDEV_INPUT_TEMPLATE = + +GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE}/model_applications/POE_tmax +GRID_STAT_OUTPUT_TEMPLATE = + + +### +# Field Info +# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#field-info +### + +MODEL = GEFS +OBTYPE = Obs + +GRID_STAT_ONCE_PER_FIELD = False + +FCST_IS_PROB = false +#FCST_GRID_STAT_PROB_THRESH = ==0.1 + +FCST_VAR1_NAME = {PARM_BASE}/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE/Tmax_fcst_embedded.py {INPUT_BASE}/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE/gefs-00z_rfcst-cal_tmax_{init?fmt=%Y%m%d}_day8.nc:85 +FCST_VAR1_THRESH = >=0.2 + +OBS_VAR1_NAME = tmax +OBS_VAR1_LEVELS = "(*,*)" +OBS_VAR1_THRESH = gt0.5 + + +### +# GridStat Settings (optional) +# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#gridstat +### + +#LOG_GRID_STAT_VERBOSITY = 2 + +GRID_STAT_CONFIG_FILE = {PARM_BASE}/met_config/GridStatConfig_wrapped + +#FCST_GRID_STAT_FILE_TYPE = +OBS_GRID_STAT_FILE_TYPE = NETCDF_NCCF + +GRID_STAT_REGRID_TO_GRID = FCST + + +GRID_STAT_DESC = NA + +FCST_GRID_STAT_FILE_WINDOW_BEGIN = 0 +FCST_GRID_STAT_FILE_WINDOW_END = 0 +OBS_GRID_STAT_FILE_WINDOW_BEGIN = 0 +OBS_GRID_STAT_FILE_WINDOW_END = 0 + +GRID_STAT_NEIGHBORHOOD_WIDTH = 1 +GRID_STAT_NEIGHBORHOOD_SHAPE = SQUARE + +GRID_STAT_NEIGHBORHOOD_COV_THRESH = >=0.5 + +GRID_STAT_OUTPUT_PREFIX = + +#GRID_STAT_OUTPUT_FLAG_FHO = NONE +GRID_STAT_OUTPUT_FLAG_CTC = BOTH +GRID_STAT_OUTPUT_FLAG_CTS = BOTH +#GRID_STAT_OUTPUT_FLAG_MCTC = NONE +#GRID_STAT_OUTPUT_FLAG_MCTS = NONE +#GRID_STAT_OUTPUT_FLAG_CNT = NONE +#GRID_STAT_OUTPUT_FLAG_SL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_SAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VAL1L2 = NONE +#GRID_STAT_OUTPUT_FLAG_VCNT = NONE +#GRID_STAT_OUTPUT_FLAG_PCT = NONE +#GRID_STAT_OUTPUT_FLAG_PSTD = NONE +#GRID_STAT_OUTPUT_FLAG_PJC = NONE +#GRID_STAT_OUTPUT_FLAG_PRC = NONE +#GRID_STAT_OUTPUT_FLAG_ECLV = BOTH +#GRID_STAT_OUTPUT_FLAG_NBRCTC = NONE +#GRID_STAT_OUTPUT_FLAG_NBRCTS = NONE +#GRID_STAT_OUTPUT_FLAG_NBRCNT = NONE +#GRID_STAT_OUTPUT_FLAG_GRAD = BOTH +#GRID_STAT_OUTPUT_FLAG_DMAP = NONE + +GRID_STAT_NC_PAIRS_FLAG_LATLON = FALSE +GRID_STAT_NC_PAIRS_FLAG_RAW = FALSE +GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE +GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE +#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE +#GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE +#GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE +#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE +#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE +#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE +GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE + +GRID_STAT_HSS_EC_VALUE = 0.15 + +#GRID_STAT_MASK_GRID = +GRID_STAT_MASK_POLY = {MET_INSTALL_DIR}/share/met/poly/CONUS.poly, {MET_INSTALL_DIR}/share/met/poly/EAST.poly, {MET_INSTALL_DIR}/share/met/poly/WEST.poly, {MET_INSTALL_DIR}/share/met/poly/NPL.poly, {MET_INSTALL_DIR}/share/met/poly/NEC.poly + diff --git a/parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE/Tmax_fcst_embedded.py b/parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE/Tmax_fcst_embedded.py new file mode 100644 index 0000000000..0caab856b7 --- /dev/null +++ b/parm/use_cases/model_applications/medium_range/GridStat_fcstGEFS_obsCADB_BinaryObsPOE/Tmax_fcst_embedded.py @@ -0,0 +1,70 @@ +import sys +import datetime as dt +import numpy as np +from netCDF4 import Dataset + + +try: + #user will input name of the file, as well as a percentile they're interested in + #in future iteration, this may need to change to multiple percentiles (a la list style) + print("1") + input_file,ptile = sys.argv[1].split(':') + f = Dataset(input_file, 'r') + print("2") + v = f['poe'] + val_time = f.valid_date_range[1] + val_time = dt.datetime.strptime(val_time,"%Y%m%d") + ini_time = str(input_file.split('_')[-2]) + ini_time = dt.datetime.strptime(ini_time,"%Y%m%d") + print("3") + lead, rem = divmod((val_time - ini_time).total_seconds(), 3600) + ptile_ind = np.where(f['ptile'][:] == int(ptile))[0][0] + print("4") + lat = np.float64(f.variables['latitude'][:]) + lon = np.float64(f.variables['longitude'][:]) + #var = np.float64(v[0,ptile_ind,:,:],fill_value=-9999.) + var = np.float64(v[0,ptile_ind,:,:]) + print(np.amax(var),np.amin(var)) + met_data = var.copy() +except NameError: + print("Can't find input file") + sys.exit(1) + +#ADDED +#for i in range(len(met_data)): +# for j in range(len(met_data[i])): +# if j <=2 or j >=358: +# print("edge of ", met_data[i,j],"at", lat[i],lon[j]) +# if lat[i] >=42.0 and lat[i] <= 46.0: +# if lon[j] >= 235.0 and lon[j] <= 239.0: +# print("found",met_data[i,j]," at ",lat[i],lon[j],i,j) + +attrs = { + + 'valid': str(val_time.strftime("%Y%m%d"))+'_000000', + 'init': str(ini_time.strftime("%Y%m%d"))+'_000000', + 'name': 'poe_P'+str(ptile), + 'long_name': v.long_name, + 'lead': str(int(lead)), + 'accum': '00', + 'level': 'SURFACE', + 'units': 'PERCENTILES', + + 'grid': { + 'name': 'Global 1 degree', + 'type': 'LatLon', + 'lat_ll': -90.0, + 'lon_ll': 0.0, + 'delta_lat': 1.0, + 'delta_lon': 1.0, + + 'Nlon': f.dimensions['longitude'].size, + 'Nlat': f.dimensions['latitude'].size, + } + } + +#print output for user to show successful run +print("Input file: " + repr(input_file.split('/')[-1])) +print("Attributes:\t"+ repr(attrs)) +f.close() + 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 def657f8ca..03904ba0e4 100644 --- a/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstWOFS_obsWOFS.conf +++ b/parm/use_cases/model_applications/precipitation/EnsembleStat_fcstWOFS_obsWOFS.conf @@ -318,8 +318,6 @@ 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