From 2c1971fe32fc1d582ea76df8bf2bb7653ed96217 Mon Sep 17 00:00:00 2001 From: j-opatz <59586397+j-opatz@users.noreply.github.com> Date: Fri, 1 Apr 2022 15:05:57 -0600 Subject: [PATCH] Update develop-ref after #1538 (#1550) * thru O #1049 * fixing OOBAR formating #1049 * thru PR_CORR #1049 * commented lines out with line total info #1049 * commented lines out with line total info take 2 #1049 * thru R #1049 * thru SPEED #1049 * thru S #1049 * thru T #1049 * thru U #1049 * thru V #1049 * thru V #1049 * thru Z #1049 * Update statistics_list.rst Tara is testing editing in UI * Update statistics_list.rst Updates through the A's * Update statistics_list.rst Cleaning up the A's * Update statistics_list.rst Standardizing MODE and MTD entries * Update statistics_list.rst Updating B's and C's * Update statistics_list.rst Testing adding TC-Stat and TCST to an entry * feature 1252 allow dictionary value for time_summary.width (#1253) * Update statistics_list.rst Clean up of a few A-Cs and then update of Ds * Update statistics_list.rst A few clean-ups and Es * Update statistics_list.rst Halfway through Fs... * feature 1213 obs_quality_inc/exc (#1260) * Feature 1203 ioda2nc (#1262) * Update statistics_list.rst A little clean up and the rest of Fs * Update statistics_list.rst G, H, I, Ks * Update statistics_list.rst L, M, Ns * Update statistics_list.rst A little clean-up and Os * Update statistics_list.rst A little clean-up and Os * Update statistics_list.rst Rs * Update statistics_list.rst S and Ts * Update statistics_list.rst The rest of the list * Update statistics_list.rst Removed Attr from Stat Type thru E * Update statistics_list.rst Remove Attr from Statistics Type through Gs * Update statistics_list.rst Remove Attr from Statistic Type through Rs * Update statistics_list.rst Remove Attr from Stat Type to the end * Update statistics_list.rst Cleaned up some Line Type typos * Update statistics_list.rst Still more Attr cleanup * Add default title for the new use case issue template. * Feature 1019 harmonic preprocessing (#1272) Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * Feature 1266 gen ens prod missing ensembles (#1275) * Feature 1049 statistics list (#1271) * first attempt at a table #1049 * 2nd attempt, smaller, different formatting table #1049 * trying to get rid of git error message by adding this to the index #1049 * alignment #1049 * trying to text wrap in a table #1049 * attempting to create text wrapping in tables #1049 * removing role, trying to wrap text #1049 * removing html break, trying to wrap text #1049 * adding code to wrap text #1049 * removing code to wrap text #1049 * fixing naming typo #1049 * hitting returns in table #1049 * removing typo file, removing line breaks #1049 * attempting a simple table for text wrapping #1049 * attempting to bold header row in simple table #1049 * simple table line break attempt #1049 * simple table line break attempt #2 #1049 * simple table line break attempt #3 #1049 * trying another | #1049 * 2 trying another | #1049 * 3 trying another | #1049 * trying a blank line #1049 * trying reformating grid #1049 * 2 trying reformating grid #1049 * 3 trying reformating grid #1049 * 4 trying reformating grid #1049 * adding in one more table row #1049 * adding more text #1049 * trying glossary format #1049 * 2 trying glossary format #1049 * 3 trying glossary format #1049 * 4 trying glossary format #1049 * adding glossary format 2D objects #1049 * fixing glossary format 2D objects #1049 * adding glossary items #1049 * fixing glossary format #1049 * hopefully all examples are working #1049 * changing reference to tool * removing 2D object examples * removing the unwrapped table * adding ACC into the example * fixing formatting #1049 * fixing formatting take 2 #1049 * fixing formatting take 3 #1049 * bolding and language change #1049 * fixing spacing #1049 * fixing spacing again #1049 * changing title #1049 * trying superscript #1049 * superscript glossary #1049 * removing quotes #1049 * fixing spacing #1049 * Tara has decided to go with the glossary format. Removing table example. #1049 * Adding 2D objects #1049 * 2D objects fix #1049 * 2D objects fix attempt 2 #1049 * 2D objects fix attempt 3 #1049 * 2D objects fix attempt 4 #1049 * 2D objects fix attempt 5 #1049 * 2D objects fix attempt 7 #1049 * 2D objects fix attempt 8 #1049 * ABR added #1049 * adding remaining AB items to list #1049 * adding remaining ACC_ items to list #1049 * ADLAND & AFSS entries #1049 * A entries #1049 * fixing formatting #1049 * fixing formatting #2 #1049 * removing new entries to make it run #1049 * adding a couple back in #1049 * adding a couple more back in #1049 * tool key at the bottom #1049 * spacing changes #1049 * spacing changes another try #1049 * fixing spacing #1049 * fixing spacing attempt 2 #1049 * fixing spacing attempt 3 #1049 * through AREA items #1049 * AMODEL listed twice but it's not #1049 * AMODEL listed twice but it's not #2 #1049 * AMODEL added question marks so it will run #1049 * final A entries #1049 * naming the glossary statistics in hopes of not conflicting with original glossary #1049 * removing glossary statistics space #1049 * Testing multiple glossary names * Per #1067, working on attempts to have multiple glossaries with the same term * Per #1067, working on attempts to have multiple glossaries with the same term * Per #1067, working on attempts to have multiple glossaries with the same term * Per #1067, removing code with attempts at mutiple glossaries * Per #1067, adding back three question marks due to duplicate term * paring down list, adding a table for review * problems with table * still trying to get it to publish * still trying to get a second line in the table * still trying to get a second line in the table 2 * testing different formatting * testing different formatting * trying to comment out the glossary inner workings * formatting again * line breaks in table #1049 * adding in some more for an example #1049 * adding new entries in through AREA #1049 * fixing line breaks #1049 * fixing line breaks #1049 #2 * fixing line breaks and warning messages #1049 * fixing line breaks #1049 * adding AREA_RATIO through ASPECT_DIFF * fixing typo #1049 * fixing typo #1049 * fixing typo #1049 take 2 * adding AXIS_ANG to BCMSE #1049 * adding spacing #1049 * adding spacing removing commas #1049 * removing comma #1049 * BOUNDARY_DIST thru BSS_SMPL #1049 * BOUNDARY_DIST splitting across 2 lines #1049 * cleaning up typos #1049 * calibration thru centriod_dist #1049 * centriod_lat thru centroid_y #1049 * fixing spacing #1049 * removing test glossary #1049 * climo_mean thru crtk_err #1049 * fixing crtk_err spacing #1049 * fixing spacing #1049 * CSI to CURVATURE_Y #1049 * CURVATURE_X & Y spacing #1049 * DEV_CAT to DURATION_DIFF #1049 * EC_VALUE to F #1049 * F_RATE TO FBS #1049 * Fixing spacing #1049 * fcst_clus thru fcst_conv_radius #1049 * removing CTOP_PRS #1049 * fixing the order of tools for FBAR and FBIAS #1049 * fixing spacing #1049 * adding grid-stat to all point-stat entries #1049 * adding fixing spacing #1049 * adding fixing spacing take 2 #1049 * adding fixing spacing take 3 #1049 * adding fixing spacing take 4 #1049 * adding fixing spacing take 5 #1049 * adding fixing spacing take 6 #1049 * adding fixing spacing take 7 #1049 * fixing spacing with a period take 7 #1049 * first attempt fcst_ #1049 * fixing typos #1049 * thru FOBAR #1049 * thru end of F #1049 * g thru h #1049 * i thru intensity #s #1049 * fixing typos #1049 * capturing example for Julie #1049 * thru k #1049 * fixing typos #1049 * thru L #1049 * thru MG #1049 * thru N_ENS #1049 * thru all N #1049 * fixing FBIAS alignment #1049 * fixing ME and MSE alignment #1049 * fixing ME alignment take 2 #1049 * thru OBS_E #1049 * fixing alignment #1049 * fixing alignment n_thresh #1049 * thru OBS_thresh #1049 * thru O #1049 * fixing OOBAR formating #1049 * thru PR_CORR #1049 * commented lines out with line total info #1049 * commented lines out with line total info take 2 #1049 * thru R #1049 * thru SPEED #1049 * thru S #1049 * thru T #1049 * thru U #1049 * thru V #1049 * thru V #1049 * thru Z #1049 * Update statistics_list.rst Tara is testing editing in UI * Update statistics_list.rst Updates through the A's * Update statistics_list.rst Cleaning up the A's * Update statistics_list.rst Standardizing MODE and MTD entries * Update statistics_list.rst Updating B's and C's * Update statistics_list.rst Testing adding TC-Stat and TCST to an entry * Update statistics_list.rst Clean up of a few A-Cs and then update of Ds * Update statistics_list.rst A few clean-ups and Es * Update statistics_list.rst Halfway through Fs... * Update statistics_list.rst A little clean up and the rest of Fs * Update statistics_list.rst G, H, I, Ks * Update statistics_list.rst L, M, Ns * Update statistics_list.rst A little clean-up and Os * Update statistics_list.rst A little clean-up and Os * Update statistics_list.rst Rs * Update statistics_list.rst S and Ts * Update statistics_list.rst The rest of the list * Update statistics_list.rst Removed Attr from Stat Type thru E * Update statistics_list.rst Remove Attr from Statistics Type through Gs * Update statistics_list.rst Remove Attr from Statistic Type through Rs * Update statistics_list.rst Remove Attr from Stat Type to the end * Update statistics_list.rst Cleaned up some Line Type typos * Update statistics_list.rst Still more Attr cleanup Co-authored-by: Julie Prestopnik Co-authored-by: TaraJensen * creating a separate list for diagnostics, in progesss * removing diagnostics from statistics, in progess #1049 * adding diagnostics_list to TOC #1049 * separating lists * fixing typos #1049 * moving blank statistic type from statistics to diagnostics #1049 * Feature 1263 v4.1.0 beta4 (#1277) * update version to note development towards beta5 * fixing errors #1049 * updating table name #1049 * fixing typo #1049 * Feature 934 release stage doc (#1235) * Per #934 add stages of the METplus release cycle. * Per #934, adding link to descriptions of the release cycle in the User's Guide. * Per #934, made corrections * Per #934, changed Beta and Release Candidate (rc) from bold to subsubsections. * Update index.rst Co-authored-by: Julie Prestopnik * putting both tables into one chapter * removing diagnostics since it's going back into the statistics chapter #1049 * Delete diagnostics_list.rst This table will be added to the statistics page as a separate table. #1049 * test. breaking out directories A-B and C-D #1049 * testing with section names #1049 * alphbetical sections for statistics #1049 * making U-Z statistics list #1049 * alpabetical breaks for diagnostics list #1049 * trying to fix errors #1049 * trying to fix errors take 2 #1049 * trying to fix errors take 3 #1049 * Removed a unnecessary space #1049 * Making all METplus Names CAPITAL LETTERS #1049 * Feature 344 met util refactor (#1292) * removed deprecated sections from config examples * minor change to METplus release guide to add a link to the PDF of the User's Guide instead of downloading it and attaching it to the release * Feature 1285 extract tiles mtd times (#1315) * Feature 896 more met config (#1322) * removed incorrect search keyword * added workflow_dispatch event so workflow can be triggered by an external repository such as MET to test to ensure that changes from that repo will break anything in METplus * added another input argument for workflow_dispatch event * added job with name that shows the event name or the repository name if triggered by an external repository such as MET * GHA: add username that triggered external event to event info job name * added required input argument for external trigger that contains the commit hash of the push event that triggered in the other repo * change event info to show commit hash instead of username that merged the PR * changed input names to match names of event in repository that triggered workflow * feature 1320 OMP_NUM_THREADS (#1338) * Feature 1183 memory documentation (#1340) Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * add email address of user who triggered push event to job name * Feature 1166 series analysis field info (#1353) * Feature 1116 usecase smos (#1348) Co-authored-by: Mrinal Biswas * turn off new use case from every push * feature 1236 Control Members in EnsembleStat and GenEnsProd (#1357) * added optional argument to change the directory to untar new input data into so the same Dockerfile can be used to add data for other METplus components such as MET * feature 1358 v4.1.0-beta5 release (#1359) * update version for next development cycle * Feature 1216 usecase smap (#1361) * Adding a conf file for SMAP * Adding a directory to host the read file * Removing temp file * Updated the valid dates to match Todd's code * Adding documentation for SMAP case * Updates the valis dates to match Todd's code * Removing a tmp file * Typo in file name * Updating the input RTOFS to have the init time instead of the valid time ii the file name * updated file paths, tesing * updated use case descriptions, rearranged use case group testing * put new use case into its own group so that the diff logic can evaluate marine_and_cryosphere:3. The truth data for 3-4 does not exist yet so the diff fails. Co-authored-by: Mrinal Biswas Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * updated marine_and_cryo grouping * Feature 1230 stratosphere metrics (#1354) * Initial checkin for Meridial Mean use case * Changed the name and directories * Added some documentation * Fixed config variables * Issue 1230 Stratospheric metrics (zonal/meridional use case) put INPUT_BASE in the user_env_vars so the user doesn't need to set the INPUT_BASE environment in the current working shell * Issue #1230 remove import of metplotpy-this isn't called * Issue #1230_stratosphere_metric Add use case to the list of use cases to be run for testing * Issue 1230 Remove the INPUT_BASE from the user_env_vars section * Issue #1230 redundant files * Issue #1230 redundant files * Issue #1230 redundant files * Issue #120 replace INPUT_BASE with INPUT_FILE_NAME * Issue #1230 remove entry for INPUT_FILE_NAME, this goes in the system.conf * Update all_use_cases.txt Copy and pasted #11 from s2s use case for the Stratosphere use case but forgot to update the index to 12. * Update use_case_groups.json added use case #12 from s2s to test stratosphere use case * Issue #1230 put INPUT_FILE_NAME back under the user_env_vars * Issue #1230 forgot to include the filename * Issue #1230 clean up config file, remove uneccessary comments, group related entries in the user_env_vars * Issue #1230 remove extraneous and incorrect path to the input_filename setting * Removed pingouin dependency * Issue #1230 another cut and paste error fixed for the Stratosphere use case * Issue #1230 type in name, obs_Only should be obsOnly * Issue #1230 added the metdatadb to the env, code imports metdatadb and may require some of these dependencies * issue #1230 removed pingouin dependency from comment to reduce any confusion * issue #1230 turn off the test for the Stratosphere metrics use case * Added use case image Co-authored-by: Hank Fisher Co-authored-by: Minna Win Co-authored-by: bikegeek <3753118+bikegeek@users.noreply.github.com> Co-authored-by: Christina Kalb * Corrected spelling of occurrence in two places * Fixed misspelling of occurrence * Found and fixed two more misspellings of occurence * Changed version specific information to by X.Y.Z moved text indicating to click save to the bottom of the list. * Feature 1374 python packages (#1378) * Added documentation about updating spreadsheet of Python requirements * Changed references to master_metplus.py to run_metplus.py * Fixed formatting of section with run_metplus.py commands * Updated text for updating the spreadsheet * Removed a newly added section that wasn't needed Co-authored-by: Julie Prestopnik * feature 1368 PCPCombine use zero accum (#1381) * feature 1369 grid_weight_flag in EnsembleStat (#1379) * Per #1356, change how wrappers create instances of other wrappers to ensure that config settings for the created instance do not change values in METplusConfig used by the rest of the wrappers, ci-run-all-diff * Per #1356, remove config_overrides functionality in favor of using instances -- this prevents the issue where overrides for a given tool affect the global config settings. it also forces the configs to override for an instance to be put into another config section so that it will be available in the final conf, ci-run-all-diff * Per #1356, update documentation to reflect changes * Per #1356, fixed unit test to no longer use deprecated approach to overriding config variables * feature 1247 climatology settings (#1385) * feature 1356 isolate config (#1386) * Feature 675 Continuous Integration Documentation (#1409) Co-authored-by: johnhg * feature 1382 Filename templates in MODEL (#1414) * Feature 1289 explicit file list (#1387) * Per PR #1387 review, fix typo * Bugfix 1421 EnsembleStat use fcst fields in ens dictionary if ens is unset (#1422) * fixed missing path change for docker file path * removed variables that are not used * Feature 1408 use case ptype (#1425) * adding imagery, config file, updating internal tests * updated lists, auto testing * corrected old reference * Update use_case_groups.json * only trigger testing workflow for pull requests that are going into develop or main_* branches * Feature 1371 blocking wr (#1426) * turn off use cases for push events * Feature 1392 climo_cdf.direct_prob and SeriesAnalysis (#1396) * Changed event triggering rules for documentation workflow so that it will run for pull requests even if no files in the docs directory have changed. A recent pull request passed but develop failed after it was approved because files that were referenced in the use case documentation files had been deleted as part of the PR. * feature 1273 TCGen -edeck and -shape (#1424) * Feature 966 Fix mask.poly logic (#1430) * Feature 1030 total seconds documentation (#1428) Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * Update UserScript_fcstGFS_obsERA_Blocking.py * Update UserScript_fcstGFS_obsERA_Blocking.py * Update UserScript_fcstGFS_obsERA_Blocking.py * Update UserScript_obsERA_obsOnly_Blocking.py * Update UserScript_fcstGFS_obsERA_WeatherRegime.py * Update UserScript_obsERA_obsOnly_WeatherRegime.py * Update UserScript_obsERA_obsOnly_WeatherRegime.py * Update UserScript_fcstGFS_obsERA_Blocking.py * Update UserScript_fcstGFS_obsERA_WeatherRegime.py * Update UserScript_obsERA_obsOnly_Blocking.py * Update UserScript_obsERA_obsOnly_WeatherRegime.py * Update UserScript_fcstGFS_obsERA_Blocking.py * Update UserScript_fcstGFS_obsERA_WeatherRegime.py * Update UserScript_obsERA_obsOnly_Blocking.py * Update UserScript_obsERA_obsOnly_WeatherRegime.py * Update UserScript_fcstGFS_obsERA_Blocking.py * Update UserScript_fcstGFS_obsERA_WeatherRegime.py * Update UserScript_fcstGFS_obsERA_WeatherRegime.py * Update UserScript_fcstGFS_obsERA_Blocking.py * Update UserScript_obsERA_obsOnly_Blocking.py * Update UserScript_obsERA_obsOnly_WeatherRegime.py * get branch name in job controls job * replace logic to update input data volumes with call to dtcenter/metplus-action-data-update action * feature 1431 remove obs_prepbufr_map (#1433) * Per #675, added images and updated content * added statsmodel package to metplotpy docker conda environment * Added fcst_file_type to two wrappers (#1437) Co-authored-by: Hank Fisher Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * added release notes for tasks that have already been completed for beta6 * updated env var for METplotpy base to match changes made to the METplotpy repository * Updated METplotpy base env var to preemptively match changes from PR dtcenter/metplotpy#197. Once that PR is merged into develop, a test workflow will run that should fix this issue. * removed commented code that is no longer used * update the instructions for updating test input data to ensure volume_mount_directories file is updated in the upcoming version directory, i.e. v4.1, so that the Docker data volumes from the release will be created properly * removed duplicate script * updated script to copy volume_mount_directories file into new METplus version directory * added logic to skip files that are temporary copies of tar files that should not be added to new version directory * updated release guide instructions for creating METplus data directory for next development cycle * Feature 911 tc trackint (#1439) Co-authored-by: Mrinal Biswas Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * added new use cases that are currently being reviewed to release notes * updated event info in contributor's guide * Feature 626 fix hovmoeller documentation (#1444) * Update UserScript_obsPrecip_obsOnly_Hovmoeller.py replace hovmoeller_diagram.conf with UserScript_obsPrecip_obsOnly_Hovmoeller.conf * Update UserScript_obsPrecip_obsOnly_Hovmoeller.py Removed a typo: UserScript This uses data from... Now: This uses data from... * Update UserScript_obsPrecip_obsOnly_Hovmoeller.py * Modified the PR template to add review of the source issue metadata ci-skip-all * feature_1403_python_components_table (#1446) * creating new METplus Components Python Requirements * adding a return to test * testing use case links * testing use case links #2 * testing use case links #3 * testing use case links #4 * Filling in some use cases * fixing indentation #1403 * fixing indentation #1403 take 2 * fixing indentation #1403 take 3 * cleaning up anything after # in the links #1403 * entries thru D #1403 * entries thru H #1403 * fixing indents #1403 * fixing indents #1403 take 2 * fixing web name #1403 * entries thru L #1403 * entry matplotlib #1403 * entry matplotlib #1403 marking duplicate names * entry metcalcpy #1403 * entry metcalcpy fix indents #1403 * entry matplotlib #1403 fixing duplicate names * entry metplotpy #1403 * entry metplotpy #1403 marking duplicate names * entry metplotpy #1403 fixing * entry thru ps #1403 * double names #1403 * character fix #1403 * adding in missing links #1403 * thru pyproj #1403 * problem with line 353 #1403 * thru pyproj #1403 typos * more duplicate names #1403 * line break #1403 * loose ends #1403 * adding >= to some of the versions #1403 * adding name to the Use Cases to avoid duplicate naming issues TEST #1403 * adding name to the Use Cases to avoid duplicate naming issues thru pyproj #1403 * adding thru pyresample #1403 * fixing pyresample typo #1403 * adding thru scikit-image #1403 * fixing line breaks#1403 * web links thru scikit-learn #1403 * web links thru scipy #1403 * web links thru sklearn #1403 * Duplicate web names. temp. fix #1403 * Duplicate web names fixed #1403 * Duplicate web names fixing #3 #1403 * Duplicate web names fixing #4 #1403 * Duplicate web names fixing #5 #1403 * table end #1403 * table loose ends #1403 * Removed unnecessary comma * table loose ends after pull request #1403 * Minor modifications to METplus Component column * Changed description of pyproj * Added link for last referenced use case * Attempting to fix doc warning Co-authored-by: jprestop * Feature 1318 usecase aviso (#1440) * Correct small typo. * Update pull_request_template.md * Added files for ReadTheDocs (#864) * Updated documentation links for ReadtheDocs * Update pull_request_template.md Added entry for completion date for pull request review. * Adding python embedding script to read AVISO, RTOFS, HYCOM and OSTIA data * Updated the script - working but only RMSE values match * Adding documentation for the AVISO case * Adding a conf file for the AVISO case * Updates to the codel to include model3, obs, climo3 but also has many extra print statements, netcdf output files which needs to be cleaned * Cleaning up the conf file and adding SAL1L2 to get the model_climo sdev and obs_climo sdev * Updating the file to fix the standard names and add the model3, climo3 and obs3 * Updating the file to fix the standard names and add the model3, climo3 and obs3 * Adding an image to the use case. Image Courtesy: EMC/NOAA website * added to use case list * updated case description * removed merge issues * caught second docs issue * removed other doc merge issues, turned off auto test * more merge comments sneaking in Co-authored-by: johnhg Co-authored-by: jprestop Co-authored-by: Mrinal Biswas * Revert "Feature 1318 usecase aviso (#1440)" (#1459) This reverts commit d3021deccbedb15bbb40599659c1bbd4f912002e. * Feature 1449 v4.1.0 beta6 (#1461) * Per #1449, updated version as specified in the Release Guide * Per #1449, updated release notes * Updated release date for beta6 release Co-authored-by: Julie Prestopnik * updated version number after beta release * Feature 1318 usecase aviso attempt 2 (#1473) Co-authored-by: johnhg Co-authored-by: jprestop Co-authored-by: Mrinal Biswas Co-authored-by: j-opatz * error if no input template is set for GridDiag wrapper * added comment for new logic, ci-run-diff * updated old section name to config, ci-run-all-diff * fixed bug with replacing wildcard characters with 'all' in output file paths * Revert "fixed bug with replacing wildcard characters with 'all' in output file paths" This reverts commit c11711e29d7451c3d996907d72fac93ca62192a5. * fixed bug with replacing wildcard characters with 'all' in output file paths, ci-run-all-diff * feature 1102 -out for TCStat and StatAnalysis (#1477) * feature 1464 EnsembleStat probabilistic additions (#1479) * feature 1445 normalize in GenEnsProd (#1478) * added logic to add quotes around grid value if they are not set in conf variable value, moved error check for unset grid to init step, ci-run-all-diff * bugfix 1486 PB2NC file window variables not read (#1487) * added build arg to override MET DockerHub repository so development version tests can use dtcenter/met-dev:develop * set MET DockerHub repo based on develop or stable version of METplus * run diff logic for push events to develop and main_v* branches so we can catch if changes to external repositories caused differences in the output * do not run diff logic on main_v* and develop branch push events -- diff logic is already running when external repository triggers workflow, which is what we need to test with the diff logic * Added description for Use Cases * updated script to set up new release input data directories -- use real path for all symbolic links for consistency, added usage statement * changed logic to error if new version directory to create already exists at all -- previous logic only errors if directory is not empty * Changed all filename template tags for datetime objects (init/valid/da_init/etc.) to use %H instead of %2H. We discovered that Python 3.6.8 interprets %2H as the same as %H (correctly substituting the hour), however Python 3.8.8 interprets %2H as 2H. The number in between the % and letter is not supported by strftime so it is not valid for these datetime values. The logic to zero-pad using this notation was written in the METplus string substitution logic and only applies to lead and level template tags. ci-run-all-diff * feature 1274 TCGen use case using -shape/-genesis (#1492) Co-authored-by: Kathryn Newman Co-authored-by: j-opatz <59586397+j-opatz@users.noreply.github.com> * feature 1490 Python Embedding for Point Observations (#1491) * update use case groupings for automated tests * removed extra comma typo, ci-run-all-diff * added missing characters in commmands * Feature 1403 python components table (#1497) Co-authored-by: Lisa Goodrich Co-authored-by: Julie Prestopnik * testing new statistics provided by Tara #1049 * testing new statistics #2 #1049 * New statistics from Tara #1049 * New statistics from Tara small corrections #1049 * New statistics from Tara small corrections #2 #1049 * New statistics from Tara small moving to Diagnostics table #1049 * Fixing space-time, like that's possible #1049 * Fixing spacing #1049 * feature 1471 fix current field info in output_prefix (#1500) * Feature 1503 v4.1.0 rc1 (#1504) * update version after rc1 release to reflect development towards 4.1.0 release * Corrected documentation title name * bugfix 1486 pb2nc window variables (#1507) * feature 1443 document probabilistic field settings (#1508) Co-authored-by: johnhg * feature 943 document referencing current level (#1509) * feature 1510 v4.1.0 Release (#1511) * updated release guide to reflect updated process to trigger reference branch GHA workflow for an official release * update version to reflect development towards 5.0.0-beta1 release * Feature 673 MET (#1517) * set MET docker repo to dtcenter/met if forcing a specific MET tag to use since that is where the stable release versions are stored on DockerHub * pass variable to tell docker build script that an external workflow triggered the run and use -lite if so to ensure that MET docker image that was created by the triggering MET workflow is used * echo output variables from job control job so they can be reviewed in the GHA log output * minor fix for consistency in logs, ci-skip-all * Feature 1399 usecase cable (#1538) * Adding initial code to read AOML Cable Transport and RTOFS cable transport variables * Updating the conf file (no stat analysis yet) and updates to the read file * Updating the conf file to add STAT_ANALYSIS * Updates to the code- adding stats * Updated code--runs now but needs to follow User Script conventions * Changed directory name based on MET conventions * Updating the read file and adding a conf file * Added logic to count the number of directories in the RTOFS dir * Updated to run with UserScript conf * update version for official release * Adding a yaml file to specify start_date * Added the yaml file and cleaned up the conf file * Added logic to read the yaml file, cleaned up the script * Updating the confile to add output dir, input template and clean up * Removing yaml, getting vDate from conf file, adding output file * Adding the doc file for the cable use case * Adding image courtesy NOAA * Adding more documentation * Adding more info * Updated docs * Correcting the python embedding script * Updating to see if the error goes away..no clue * Fixing the doc error * modifed docs, testing * updated permissions for script * turned off always testing * Updated version number * Update use_case_groups.json * Removed erroneous file * Apply suggestions from code review * Update .github/parm/use_case_groups.json Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * Update docs/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport.py Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * Update docs/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport.py Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> * Update docs/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport.py Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> Co-authored-by: Mrinal Biswas Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> Co-authored-by: Lisa Goodrich Co-authored-by: TaraJensen Co-authored-by: George McCabe <23407799+georgemccabe@users.noreply.github.com> Co-authored-by: johnhg Co-authored-by: Christina Kalb Co-authored-by: lisagoodrich <33230218+lisagoodrich@users.noreply.github.com> Co-authored-by: Julie Prestopnik Co-authored-by: jprestop Co-authored-by: Mrinal Biswas Co-authored-by: bikegeek Co-authored-by: Hank Fisher Co-authored-by: Hank Fisher Co-authored-by: Minna Win Co-authored-by: bikegeek <3753118+bikegeek@users.noreply.github.com> Co-authored-by: Christina Kalb Co-authored-by: Hank Fisher Co-authored-by: Mrinal Biswas Co-authored-by: Kathryn Newman --- .github/ISSUE_TEMPLATE/bug_report.md | 1 + .github/ISSUE_TEMPLATE/enhancement_request.md | 1 + .github/ISSUE_TEMPLATE/new_feature_request.md | 1 + .github/ISSUE_TEMPLATE/new_use_case.md | 1 + .github/ISSUE_TEMPLATE/task.md | 1 + .github/jobs/docker_setup.sh | 6 + .github/jobs/get_use_cases_to_run.sh | 2 +- .github/jobs/set_job_controls.sh | 8 + .github/parm/use_case_groups.json | 4 +- .github/pull_request_template.md | 1 + .github/workflows/release_published.yml | 15 - .github/workflows/testing.yml | 1 + README.md | 2 +- build_components/Externals_stable.cfg | 10 +- docs/Contributors_Guide/add_use_case.rst | 17 +- docs/Release_Guide/met_official.rst | 1 + docs/Release_Guide/metplus_official.rst | 2 +- .../create_release_on_github.rst | 3 +- .../finalize_release_on_github_official.rst | 36 +- .../met/create_release_reference_branch.rst | 35 + .../create_release_reference_branch.rst | 38 + .../metplus/update_manage_externals.rst | 9 + .../metplus/update_release_content.rst | 29 - .../release_steps/open_release_issue.rst | 2 +- .../release_steps/rotate_authorship.rst | 11 + docs/Users_Guide/overview.rst | 11 +- docs/Users_Guide/release-notes.rst | 248 ++- docs/Users_Guide/statistics_list.rst | 1852 ++++++++++------- docs/Users_Guide/systemconfiguration.rst | 86 +- ...Script_fcstRTOFS_obsAOML_calcTransport.png | Bin 0 -> 187673 bytes docs/conf.py | 5 +- ...eStat_fcstHRRRE_obsHRRRE_Sfc_MultiField.py | 7 +- ...rScript_fcstRTOFS_obsAOML_calcTransport.py | 159 ++ .../config_metplus/test_config_metplus.py | 36 +- .../pytests/pb2nc/test_pb2nc_wrapper.py | 6 + internal_tests/use_cases/all_use_cases.txt | 1 + metplus/RELEASE_DATE | 2 +- metplus/VERSION | 2 +- metplus/util/config_metplus.py | 18 +- metplus/util/met_config.py | 6 + metplus/wrappers/command_builder.py | 2 + .../met_tool_wrapper/Example/Example.conf | 2 +- .../met_tool_wrapper/PB2NC/PB2NC.conf | 2 +- .../PlotDataPlane/PlotDataPlane_grib1.conf | 4 +- ...tat_fcstHRRRE_obsHRRRE_Sfc_MultiField.conf | 2 +- ...cript_fcstRTOFS_obsAOML_calcTransport.conf | 73 + .../read_aomlcable_rtofs_transport.py | 188 ++ ...cstGFS_obsNAM_Sfc_MultiField_PrepBufr.conf | 2 +- ...t_fcstMULTI_obsMETAR_PtypeComparisons.conf | 4 +- ...sis_fcstNMME_obsCPC_seasonal_forecast.conf | 6 +- 50 files changed, 1984 insertions(+), 977 deletions(-) delete mode 100644 .github/workflows/release_published.yml create mode 100644 docs/Release_Guide/release_steps/met/create_release_reference_branch.rst create mode 100644 docs/Release_Guide/release_steps/metplus/update_manage_externals.rst delete mode 100644 docs/Release_Guide/release_steps/metplus/update_release_content.rst create mode 100644 docs/_static/marine_and_cryosphere-UserScript_fcstRTOFS_obsAOML_calcTransport.png create mode 100644 docs/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport.py create mode 100644 parm/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport.conf create mode 100755 parm/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport/read_aomlcable_rtofs_transport.py diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 6c4450e814..118348bafe 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -65,6 +65,7 @@ Branch name: `bugfix__main__` - [ ] Add/update log messages for easier debugging. - [ ] Add/update unit tests. - [ ] Add/update documentation. +- [ ] Add any new Python packages to the [METplus Components Python Requirements](https://metplus.readthedocs.io/en/develop/Users_Guide/overview.html#metplus-components-python-requirements) table. - [ ] Push local changes to GitHub. - [ ] Submit a pull request to merge into **main_\**. Pull request: `bugfix main_ ` diff --git a/.github/ISSUE_TEMPLATE/enhancement_request.md b/.github/ISSUE_TEMPLATE/enhancement_request.md index 3133dec892..85a64e9da3 100644 --- a/.github/ISSUE_TEMPLATE/enhancement_request.md +++ b/.github/ISSUE_TEMPLATE/enhancement_request.md @@ -54,6 +54,7 @@ Branch name: `feature__` - [ ] Add/update log messages for easier debugging. - [ ] Add/update unit tests. - [ ] Add/update documentation. +- [ ] Add any new Python packages to the [METplus Components Python Requirements](https://metplus.readthedocs.io/en/develop/Users_Guide/overview.html#metplus-components-python-requirements) table. - [ ] Push local changes to GitHub. - [ ] Submit a pull request to merge into **develop**. Pull request: `feature ` diff --git a/.github/ISSUE_TEMPLATE/new_feature_request.md b/.github/ISSUE_TEMPLATE/new_feature_request.md index b37efe8aef..1fe07f63dd 100644 --- a/.github/ISSUE_TEMPLATE/new_feature_request.md +++ b/.github/ISSUE_TEMPLATE/new_feature_request.md @@ -58,6 +58,7 @@ Branch name: `feature__` - [ ] Add/update log messages for easier debugging. - [ ] Add/update unit tests. - [ ] Add/update documentation. +- [ ] Add any new Python packages to the [METplus Components Python Requirements](https://metplus.readthedocs.io/en/develop/Users_Guide/overview.html#metplus-components-python-requirements) table. - [ ] Push local changes to GitHub. - [ ] Submit a pull request to merge into **develop**. Pull request: `feature ` diff --git a/.github/ISSUE_TEMPLATE/new_use_case.md b/.github/ISSUE_TEMPLATE/new_use_case.md index d16e19960f..6d8be0973e 100644 --- a/.github/ISSUE_TEMPLATE/new_use_case.md +++ b/.github/ISSUE_TEMPLATE/new_use_case.md @@ -67,6 +67,7 @@ Branch name: `feature__` - [ ] Add/update log messages for easier debugging. - [ ] Add/update unit tests. - [ ] Add/update documentation. +- [ ] Add any new Python packages to the [METplus Components Python Requirements](https://metplus.readthedocs.io/en/develop/Users_Guide/overview.html#metplus-components-python-requirements) table. - [ ] Push local changes to GitHub. - [ ] Submit a pull request to merge into **develop**. Pull request: `feature ` diff --git a/.github/ISSUE_TEMPLATE/task.md b/.github/ISSUE_TEMPLATE/task.md index ce3a6fb09a..24aa7eaf91 100644 --- a/.github/ISSUE_TEMPLATE/task.md +++ b/.github/ISSUE_TEMPLATE/task.md @@ -54,6 +54,7 @@ Branch name: `feature__` - [ ] Add/update log messages for easier debugging. - [ ] Add/update unit tests. - [ ] Add/update documentation. +- [ ] Add any new Python packages to the [METplus Components Python Requirements](https://metplus.readthedocs.io/en/develop/Users_Guide/overview.html#metplus-components-python-requirements) table. - [ ] Push local changes to GitHub. - [ ] Submit a pull request to merge into **develop**. Pull request: `feature ` diff --git a/.github/jobs/docker_setup.sh b/.github/jobs/docker_setup.sh index 46e1e61e84..f5c923dad9 100755 --- a/.github/jobs/docker_setup.sh +++ b/.github/jobs/docker_setup.sh @@ -36,11 +36,17 @@ MET_TAG=`${GITHUB_WORKSPACE}/scripts/docker/hooks/get_met_version` MET_DOCKER_REPO=met-dev if [ "${MET_TAG}" != "develop" ]; then MET_DOCKER_REPO=met +elif [ "${EXTERNAL_TRIGGER}" == "true" ]; then + # if MET tag is develop and external repo triggered workflow + # then append -lite to MET tag name to use tag generated by + # MET GHA workflow that does not include MET unit test tools + MET_TAG=${MET_TAG}-lite fi # if MET_FORCE_TAG variable is set and not empty, use that version instead if [ ! -z "$MET_FORCE_TAG" ]; then MET_TAG=$MET_FORCE_TAG + MET_DOCKER_REPO=met fi echo Using MET_DOCKER_REPO=$MET_DOCKER_REPO diff --git a/.github/jobs/get_use_cases_to_run.sh b/.github/jobs/get_use_cases_to_run.sh index bfd2991038..39c250474c 100755 --- a/.github/jobs/get_use_cases_to_run.sh +++ b/.github/jobs/get_use_cases_to_run.sh @@ -9,7 +9,7 @@ run_all_use_cases=$2 run_unit_tests=$3 echo Run use cases: $run_use_cases -echo Run All use cases: $run_all_use_cases +echo Run all use cases: $run_all_use_cases echo Run unit tests: $run_unit_tests # if running use cases, generate JQ filter to use diff --git a/.github/jobs/set_job_controls.sh b/.github/jobs/set_job_controls.sh index 007adb50eb..e8015992c1 100755 --- a/.github/jobs/set_job_controls.sh +++ b/.github/jobs/set_job_controls.sh @@ -94,3 +94,11 @@ echo ::set-output name=branch_name::$branch_name # get use cases to run .github/jobs/get_use_cases_to_run.sh $run_use_cases $run_all_use_cases $run_unit_tests + +# echo output variables to review in logs +echo branch_name: $branch_name +echo run_diff: $run_diff +echo run_save_truth_data: $run_save_truth_data +echo external_trigger: $external_trigger +echo run_get_image: $run_get_image +echo run_get_input_data: $run_get_input_data diff --git a/.github/parm/use_case_groups.json b/.github/parm/use_case_groups.json index 025054ccc9..372caf3779 100644 --- a/.github/parm/use_case_groups.json +++ b/.github/parm/use_case_groups.json @@ -61,12 +61,12 @@ }, { "category": "marine_and_cryosphere", - "index_list": "3-4", + "index_list": "3-5", "run": false }, { "category": "marine_and_cryosphere", - "index_list": "5", + "index_list": "6", "run": false }, { diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c94d25f2a8..1e30a18207 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -15,6 +15,7 @@ If **yes**, describe the new output and/or changes to the existing output:
## Pull Request Checklist ## See the [METplus Workflow](https://metplus.readthedocs.io/en/latest/Contributors_Guide/github_workflow.html) for details. +- [ ] Add any new Python packages to the [METplus Components Python Requirements](https://metplus.readthedocs.io/en/develop/Users_Guide/overview.html#metplus-components-python-requirements) table. - [ ] Review the source issue metadata (required labels, projects, and milestone). - [ ] Complete the PR definition above. - [ ] Ensure the PR title matches the feature or bugfix branch name. diff --git a/.github/workflows/release_published.yml b/.github/workflows/release_published.yml deleted file mode 100644 index 8a7ce83ae2..0000000000 --- a/.github/workflows/release_published.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Release Published -on: - release: - types: [published] - -jobs: - send-message: - name: Send Slack Message for New Release - runs-on: ubuntu-latest - steps: - - name: Run cURL Command - run: > - curl -X POST -H 'Content-type: application/json' --data - '{"text":"METplus ${{ github.event.release.tag_name }} release was created: <${{ github.event.release.html_url }}>"}' - ${{ secrets.SLACK_WEBHOOK }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 858fb6fbe2..1b47909874 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -84,6 +84,7 @@ jobs: env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + EXTERNAL_TRIGGER: ${{ needs.job_control.outputs.external_trigger }} #MET_FORCE_TAG: 10.0.0 update_data_volumes: diff --git a/README.md b/README.md index 65d62d2072..10f4a11a5f 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ METplus is a Python scripting infrastructure around the MET verification tools Documentation for both Users and Contributors can be found [here](https://metplus.readthedocs.io). For more information about the entire suite of tools, please visit the -[MET website](https://dtcenter.org/community-code/model-evaluation-tools-met). +[DTC METplus website](https://dtcenter.org/community-code/metplus). Support for the METplus components is provided through the [METplus Discussions](https://github.com/dtcenter/METplus/discussions) forum. diff --git a/build_components/Externals_stable.cfg b/build_components/Externals_stable.cfg index afc09b80e4..123ebeaff8 100644 --- a/build_components/Externals_stable.cfg +++ b/build_components/Externals_stable.cfg @@ -3,35 +3,35 @@ local_path = ../MET protocol = git required = True repo_url = https://github.com/dtcenter/MET -branch = v10.0.0 +tag = v10.1.0 [METviewer] local_path = ../METviewer protocol = git required = True repo_url = https://github.com/dtcenter/METviewer -branch = v4.0.0 +tag = v4.1.0 [METplotpy] local_path = ../METplotpy protocol = git required = True repo_url = https://github.com/dtcenter/METplotpy -branch = v1.0.0 +tag = v1.1.0 [METcalcpy] local_path = ../METcalcpy protocol = git required = True repo_url = https://github.com/dtcenter/METcalcpy -branch = v1.0.0 +tag = v1.1.0 [METdatadb] local_path = ../METdatadb protocol = git required = True repo_url = https://github.com/dtcenter/METdatadb -branch = develop +tag = v1.1.0 [externals_description] diff --git a/docs/Contributors_Guide/add_use_case.rst b/docs/Contributors_Guide/add_use_case.rst index fcd423fbcb..8d02d21e3d 100644 --- a/docs/Contributors_Guide/add_use_case.rst +++ b/docs/Contributors_Guide/add_use_case.rst @@ -210,15 +210,14 @@ use case OR category directory for a model_applications use case * Update the description of the input data in the Datasets section. * Update the list of External Dependencies (if applicable) to include any - required Python packages. Update the - `METplus Components Python Requirements `_ - spreadsheet. If the package is already listed in the spreadsheet, add + required Python packages. Update the :ref:`python_requirements_table` + table. If the package is already listed in the spreadsheet, add a link to the documentation page for this new use case, following the - format in the spreadsheet. If the package is not already listed, update - the spreadsheet to include the name of the required package, the version, + format in the table. If the package is not already listed, update + the table to include the name of the required package, the version, the METplus component (e.g. METplus wrappers, METcalcpy, METplotpy), the - source, a brief description, and a link to this new use case that uses - this new Python package. + source, a brief description of the package, and a link to this new use + case that uses this new Python package. * Update the list of tools used in the METplus Components section. @@ -905,14 +904,14 @@ Compare the volume_mount_directories file Compare the feature branch file to the upcoming METplus version directory file:: - diff ${METPLUS_FEATURE_BRANCH}/volume_mount_directories ${METPLUS_VERSION}/volume_mount_directories + diff ${METPLUS_FEATURE_BRANCH}/volume_mount_directories v${METPLUS_VERSION}/volume_mount_directories **ONLY RUN THE COMMAND THAT IS APPROPRIATE TO YOUR USE CASE. READ CAREFULLY!** **CONDITION 1: IF there is a new entry or change in the feature version**, copy the feature file into the upcoming METplus version directory and the develop directory:: - cp ${METPLUS_FEATURE_BRANCH}/volume_mount_directories ${METPLUS_VERSION}/volume_mount_directories + cp ${METPLUS_FEATURE_BRANCH}/volume_mount_directories v${METPLUS_VERSION}/volume_mount_directories cp ${METPLUS_FEATURE_BRANCH}/volume_mount_directories develop/volume_mount_directories Copy data from the feature directory into the next version directory diff --git a/docs/Release_Guide/met_official.rst b/docs/Release_Guide/met_official.rst index 1cf1457509..7bef52530a 100644 --- a/docs/Release_Guide/met_official.rst +++ b/docs/Release_Guide/met_official.rst @@ -13,6 +13,7 @@ Create a new vX.Y.Z official release from the develop branch. .. include:: release_steps/update_release_notes_official.rst .. include:: release_steps/rotate_authorship.rst .. include:: release_steps/merge_release_issue.rst +.. include:: release_steps/met/create_release_reference_branch.rst .. include:: release_steps/create_release_branch.rst .. include:: release_steps/create_release_on_github.rst .. include:: release_steps/create_release_extra.rst diff --git a/docs/Release_Guide/metplus_official.rst b/docs/Release_Guide/metplus_official.rst index 675a3012a4..47a1ba344d 100644 --- a/docs/Release_Guide/metplus_official.rst +++ b/docs/Release_Guide/metplus_official.rst @@ -12,9 +12,9 @@ Create a new vX.Y.Z official release from the develop branch. .. include:: release_steps/metplus/update_release_date.rst .. include:: release_steps/update_release_notes_official.rst .. include:: release_steps/rotate_authorship.rst +.. include:: release_steps/metplus/update_manage_externals.rst .. include:: release_steps/merge_release_issue.rst .. include:: release_steps/metplus/create_release_reference_branch.rst -.. include:: release_steps/metplus/update_release_content.rst .. include:: release_steps/push_release_branch.rst .. include:: release_steps/create_release_on_github.rst .. include:: release_steps/metplus/create_release_extra.rst diff --git a/docs/Release_Guide/release_steps/create_release_on_github.rst b/docs/Release_Guide/release_steps/create_release_on_github.rst index a20cd4f28a..c1346b2cd0 100644 --- a/docs/Release_Guide/release_steps/create_release_on_github.rst +++ b/docs/Release_Guide/release_steps/create_release_on_github.rst @@ -13,7 +13,6 @@ Create Release on GitHub https://|projectRepo|.readthedocs.io/en/vX.Y.Z-betaN/Users_Guide/release-notes.html (Note: the URL will not be active until the release is created) -* Add a link to the PDF of the |projectRepo| User's Guide, if available. - The PDF can be downloaded from ReadTheDocs if it is available, i.e. +* Add links to the HTML and PDF versions of the |projectRepo| User's Guide on ReadTheDocs. https://|projectRepo|.readthedocs.io/_/downloads/en/vX.Y.Z-betaN/pdf/ (Note: the URL will not be active until the release is created) diff --git a/docs/Release_Guide/release_steps/finalize_release_on_github_official.rst b/docs/Release_Guide/release_steps/finalize_release_on_github_official.rst index ca2abafbd7..45123c695d 100644 --- a/docs/Release_Guide/release_steps/finalize_release_on_github_official.rst +++ b/docs/Release_Guide/release_steps/finalize_release_on_github_official.rst @@ -1,14 +1,33 @@ Finalize Release on GitHub -------------------------- -* Close the GitHub issue for creating this official release. -* Edit the milestone for the current release by updating the *Due date* with the actual release date. -* If necessary, create a new milestone for the next official release (e.g. next vX.Y.Z release). -* If necessary, reassign any remaining issues for the current milestone to the next one. -* Close the current milestone. -* Confirm that all existing development projects for the current milestone are closed. -* If necessary, create development projects for the next milestone (e.g. |projectRepo|-X.Y.Z-beta1, beta2, beta3). -* Update the repository settings by resetting the *Default branch* to the new main_vX.Y branch: +* Update milestones: + + * Edit the milestone for the current release by updating the *Due date* with the actual release date. + + * Close the current milestone. + + * Create a new milestone for the first bugfix release (e.g. first vX.Y.1 (bugfix) release). + + * If necessary, create a new milestone for the next official release (e.g. next vX.Y.Z release). + +* Update issues: + + * Close the GitHub issue for creating this official release. + + * If necessary, reassign any remaining issues for the current milestone to other milestones. + +* Update projects: + + * Confirm that all existing development projects for the current milestone are closed. + + * If necessary, create development projects for the next milestone (e.g. |projectRepo|-X.Y.Z-beta1, beta2, beta3). + +* Update branches: + + * Remove any remaining stale development branches from the new release. + + * Update the repository settings by resetting the *Default branch* to the new main_vX.Y branch: .. parsed-literal:: @@ -16,4 +35,3 @@ Finalize Release on GitHub -> Settings -> Branches (tab on left) -> change the drop down to new branch - diff --git a/docs/Release_Guide/release_steps/met/create_release_reference_branch.rst b/docs/Release_Guide/release_steps/met/create_release_reference_branch.rst new file mode 100644 index 0000000000..c4018922da --- /dev/null +++ b/docs/Release_Guide/release_steps/met/create_release_reference_branch.rst @@ -0,0 +1,35 @@ +Create Release Reference Branch +------------------------------- + +* Create a branch from the develop branch for the reference branch for the + new official release and push it to GitHub. The branch name should match + the format main_vX.Y-ref where X.Y is the major/minor release number. + +.. parsed-literal:: + + cd |projectRepo| + git checkout develop + git pull + git checkout -b main_vX.Y-ref + +Push Reference Branch to GitHub +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +:: + + git push -u origin main_vX.Y-ref + +Pushing this branch to GitHub should trigger the GitHub Actions automation +that runs all of the use cases and creates Docker data volumes with the output +data. These data will be used to verify that any bugfixes applied to the +main_vX.Y branch does not break any of existing logic. + +Monitor GitHub Actions Workflow +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Navigate to https://github.com/dtcenter/MET/actions and verify that a +*Testing* workflow was triggered on the *main_vX.Y-ref* branch. + +* Wait until the entire workflow has run successfully. The final job entitled + "Create Output Docker Data Volumes" should create Docker data volumes for + each use case category on DockerHub (dtcenter/met-dev). diff --git a/docs/Release_Guide/release_steps/metplus/create_release_reference_branch.rst b/docs/Release_Guide/release_steps/metplus/create_release_reference_branch.rst index 94845f5361..db2a4db7ec 100644 --- a/docs/Release_Guide/release_steps/metplus/create_release_reference_branch.rst +++ b/docs/Release_Guide/release_steps/metplus/create_release_reference_branch.rst @@ -1,6 +1,13 @@ Create Release Reference Branch ------------------------------- +* For METplus, the corresponding MET release must be created before starting + this step. Specifically, a DockerHub tag on dtcenter/met that is named + (X+6).Y-latest must already exist. For example, for METplus 4.1.0, the MET + DockerHub tag for 10.1-latest must be built. + See https://hub.docker.com/repository/docker/dtcenter/met/general for + a list of existing tags. + * Create a branch from the develop branch for the reference branch for the new official release and push it to GitHub. The branch name should match the format main_vX.Y-ref where X.Y is the major/minor release number. @@ -11,6 +18,31 @@ Create Release Reference Branch git checkout develop git pull git checkout -b main_vX.Y-ref + +Update the version number +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Update the content that should go into the release version but remain unchanged +in the develop branch. + +Remove **-dev** from the version number: + +* As of METplus 4.0.0, we are naming releases with X.Y.Z format even if Z is 0. +* As of METplus v4.0.0, the file containing the version number is located at + **metplus/VERSION** (in earlier releases, the file was located at + docs/version or doc/version). +* In the develop branch, the version should match the upcoming release + with -dev added to the end like X.Y.Z-betaN-dev, i.e. 4.0.0-beta1-dev +* Remove **-dev** from the version number so that it matches the release + you are creating. + +Commit these changes. + +Push Reference Branch to GitHub +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +:: + git push -u origin main_vX.Y-ref Pushing this branch to GitHub should trigger the GitHub Actions automation @@ -18,6 +50,9 @@ that runs all of the use cases and creates Docker data volumes with the output data. These data will be used to verify that any bugfixes applied to the main_vX.Y branch does not break any of existing logic. +Monitor GitHub Actions Workflow +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Navigate to https://github.com/dtcenter/METplus/actions and verify that a *Testing* workflow was triggered on the *main_vX.Y-ref* branch. @@ -28,6 +63,9 @@ Navigate to https://github.com/dtcenter/METplus/actions and verify that a each use case category on DockerHub (dtcenter/metplus-data-dev). The names of these volumes start with *output-*. +Create main branch and push to GitHub +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * After the truth data volumes have been generated, create the main_vX.Y branch off of the -ref branch. diff --git a/docs/Release_Guide/release_steps/metplus/update_manage_externals.rst b/docs/Release_Guide/release_steps/metplus/update_manage_externals.rst new file mode 100644 index 0000000000..c32b3f0e8a --- /dev/null +++ b/docs/Release_Guide/release_steps/metplus/update_manage_externals.rst @@ -0,0 +1,9 @@ +Update the version numbers in the manage externals files +-------------------------------------------------------- + +build_components/Externals_stable.cfg + +Each of the components in these files has a tag associated with them. +Update the value for tag to the tag associated with the release for each +METplus component that is part of this METplus coordinated release, i.e. +MET should be v10.0.0 for the METplus 4.0.0 coordinated release. diff --git a/docs/Release_Guide/release_steps/metplus/update_release_content.rst b/docs/Release_Guide/release_steps/metplus/update_release_content.rst deleted file mode 100644 index 92ba48afda..0000000000 --- a/docs/Release_Guide/release_steps/metplus/update_release_content.rst +++ /dev/null @@ -1,29 +0,0 @@ -Update Release Content ----------------------- - -Update content that should go into the release version but remain unchanged -in the develop branch. - -Update the version number -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Remove **-dev** from the version number: - -* As of METplus 4.0.0, we are naming releases with X.Y.Z format even if Z is 0. -* As of METplus v4.0.0, the file containing the version number is located at - **metplus/VERSION** (in earlier releases, the file was located at - docs/version or doc/version). -* In the develop branch, the version should match the upcoming release - with -dev added to the end like X.Y.Z-betaN-dev, i.e. 4.0.0-beta1-dev -* Remove **-dev** from the version number so that it matches the release - you are creating. - -Update the version numbers in the manage externals files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -build_components/Externals_stable.cfg - -Each of the components in these files has a branch associated with them. -Update the value for branch to the tag associated with the release for each -METplus component that is part of this METplus coordinated release, i.e. -MET should be 10.0.0 for the METplus 4.0.0 coordinated release. diff --git a/docs/Release_Guide/release_steps/open_release_issue.rst b/docs/Release_Guide/release_steps/open_release_issue.rst index a1ea1abaec..46cdc15d83 100644 --- a/docs/Release_Guide/release_steps/open_release_issue.rst +++ b/docs/Release_Guide/release_steps/open_release_issue.rst @@ -7,7 +7,7 @@ Open Release Issue * "Create the |projectRepo| vX.Y.Z-betaN (or -rcN) release" for a development release. -* For an official or development release, assign the issue to the current |projectRepo| development project. +* For an official or development release, assign the issue to the corresponding |projectRepo| development project. * For a bugfix release, assign the issue to the organization level support project. diff --git a/docs/Release_Guide/release_steps/rotate_authorship.rst b/docs/Release_Guide/release_steps/rotate_authorship.rst index cf6f9627b7..e0507210b0 100644 --- a/docs/Release_Guide/release_steps/rotate_authorship.rst +++ b/docs/Release_Guide/release_steps/rotate_authorship.rst @@ -14,5 +14,16 @@ for each official release: "First Initial. Last Name". Please maintain that format as it is the most common format for citations. +* The author list is typically found in the conf.py file in the documentation + directory, i.e. *docs/conf.py*. + Most of the component repositories store the list of authors in a variable + named **author_list**. Please ensure that changes to this list match the + correct format listed above. + In the METplus repository, the conf.py file has variable named + CURRENT_AUTHORS that is a list of the authors to rotate. + To rotate, move the first item in the list to the end of the list. + There is logic in this file to read the list and format it properly to match + the expected format for citations. + * Review the list of authors in the citation and at the top level of the documentation and update as needed. diff --git a/docs/Users_Guide/overview.rst b/docs/Users_Guide/overview.rst index d76e2c94eb..b6f30e4025 100644 --- a/docs/Users_Guide/overview.rst +++ b/docs/Users_Guide/overview.rst @@ -85,6 +85,8 @@ METplus Wrappers configuration files. Some Python wrappers do not correspond to a particular MET tool, but wrap utilities to extend METplus functionality. +.. _python_requirements_table: + METplus Components Python Requirements ====================================== @@ -96,7 +98,6 @@ METplus Components Python Requirements Description - no more than 22 (was 20) characters Use Cases - no more than 17 (was 10) characters - .. role:: raw-html(raw) :format: html @@ -414,6 +415,14 @@ METplus Components Python Requirements Python programming :raw-html:`
` language - For using MET Python embedding functionality in use cases + * - pint + - >=0.18 + - METcalcpy + - https://github.com/hgrecco/pint + - Python package to define, :raw-html:`
` + operate and manipulate :raw-html:`
` + physical quantities + - * - plotly - >=4.9.0 - METcalcpy, :raw-html:`
` diff --git a/docs/Users_Guide/release-notes.rst b/docs/Users_Guide/release-notes.rst index 6f6c3a7ba9..3443efde4c 100644 --- a/docs/Users_Guide/release-notes.rst +++ b/docs/Users_Guide/release-notes.rst @@ -39,168 +39,192 @@ describes the bugfix, enhancement, or new feature: https://github.com/dtcenter/METplus/issues -METplus Version 4.1.0-beta6 Release Notes (2022-03-01) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -* Enhancements: - - * **Add support for setting file_type for fcst/obs for applications that process gridded data** (`#1165 `_) - * **Enhance logic for setting mask.poly to allow MET list characters (square braces and semi-colon)** (`#966 `_) - * Enhance TCGen wrapper to add support for new configurations (`#1273 `_) - * Add support for new climo_cdf.direct_prob flag (`#1392 `_) - * Implement various enhancements to climatology settings (`#1247 `_) - * Enhance logic to set climatology info for Python embedding (`#944 `_) - * Incorporate basic zonal and meridional means into METplus (`#1230 `_) - * Add support for explicitly setting file list file paths in wrappers that support multiple input files (`#1289 `_) - * Add support for setting grid_weight_flag in EnsembleStat (`#1369 `_) - * Add option to PCPCombine to force using 0 hr accum in subtract mode (`#1368 `_) - * Fix logic to use fcst dictionary if ens dictionary is not set in EnsembleStat wrapper (`#1421 `_) - * Fix logic to create instances of other wrappers within wrappers to avoid modifying global configurations (`#1356 `_) - * Remove support for PB2NC_OBS_PREPBUFR_MAP (`#1431 `_) - - -* New Use Cases: +METplus Version 4.1.0 Release Notes (2022-03-14) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Precipitation-type comparison across 3 models (`#1408 `_) - * TC Verification Compare ADECK vs BDECK (`#911 `_) +* Enhancements: -* Internal: + * General: - * Document Continous Integration Functionality in the METplus Contributor's Guide (`#675 `_) + * **Add support for setting control members in EnsembleStat and GenEnsProd** (`#1236 `_) + * **Create an Amazon AMI containing all METplus components** (`#506 `_) + * Modify wrappers that use wrapped MET config files to default to parm/met_config versions if unset (`#931 `_) + * Add support for setting hss_ec_value in MET config files (`#951 `_) + * Added support for setting a dictionary value for time_summary.width (`#1252 `_) + * Properly handle list values that include square braces (`#1212 `_) + * Update wrapped MET config files to reference MET_TMP_DIR in tmp value (`#1101 `_) + * Add support for setting INIT_LIST and VALID_LIST for irregular time intervals (`#1286 `_) + * Support setting the OMP_NUM_THREADS environment variable (`#1320 `_) + * Add support for commonly changed MET config variables (`#896 `_) + * Prevent wildcard character from being used in output file path (`#1291 `_) + * Add support for setting file_type for fcst/obs for applications that process gridded data (`#1165 `_) + * Enhance logic for setting mask.poly to allow MET list characters (square braces and semi-colon) (`#966 `_) + * Add support for new climo_cdf.direct_prob flag (`#1392 `_) + * Implement various enhancements to climatology settings (`#1247 `_) + * Enhance logic to set climatology info for Python embedding (`#944 `_) + * Updated logic for handling _CLIMO_MEAN_FIELD variables for specifying climatology fields (`#1021 `_) + * Incorporate basic zonal and meridional means into METplus (`#1230 `_) + * Add support for explicitly setting file list file paths in wrappers that support multiple input files (`#1289 `_) + * Add support for setting -out argument in TCStat and StatAnalysis wrappers (`#1102 `_) -METplus Version 4.1.0-beta5 Release Notes (2022-01-14) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * PointStat: -* Enhancements: + * Make output_flag.orank configurable for Point-Stat (`#1103 `_) + * Added support for setting obs_quality_inc/exc in PointStat (`#1213 `_) - * **Add support for setting control members in EnsembleStat and GenEnsProd** (`#1236 `_) - * **Enhance SeriesAnalysis wrapper to allow different field info values for each file in a list** (`#1166 `_) - * Add support for setting INIT_LIST and VALID_LIST for irregular time intervals (`#1286 `_) - * Support setting the OMP_NUM_THREADS environment variable (`#1320 `_) - * Enhance ExtractTiles using MTD input to properly match times (`#1285 `_) - * Add support for commonly changed MET config variables part 2 (`#896 `_) - * Prevent wildcard character from being used in output file path (`#1291 `_) + * GridStat: -* New Use Cases: + * Add Grid-Stat configuration options for distance_map dictionary (`#1089 `_) - * Satellite verification of sea surface salinity: SMOS vs RTOFS output (`#1116 `_) + * EnsembleStat: -* Internal: + * Add support for setting grid_weight_flag in EnsembleStat (`#1369 `_) + * Fix logic to use fcst dictionary if ens dictionary is not set in EnsembleStat wrapper (`#1421 `_) + * Add support for probabilistic verification to the Ensemble-Stat wrapper (`#1464 `_) - * **Create guidance for memory-intensive use cases, introduce Python memory profiler** (`#1183 `_) - * **Identify code throughout METplus components that are common utilities** (`#799 `_) - * **Add definitions to the Release Guide for the stages of the release cycle** (`#934 `_) + * GenEnsProd: -METplus Version 4.1.0-beta4 Release Notes (2021-11-16) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * Add support for the normalize option to the Gen-Ens-Prod wrapper (`#1445 `_) -* Enhancements: + * TCPairs: - * **Create an Amazon AMI containing all METplus components** (`#506 `_) - * Added support for setting a dictionary value for time_summary.width (`#1252 `_) - * Added support for setting obs_quality_inc/exc in PointStat (`#1213 `_) - * Properly handle list values that include square braces (`#1212 `_) - * Reorganize the Cryosphere and Marine and Coastal use case categories into one group (`#1200 `_) - * Update wrapped MET config files to reference MET_TMP_DIR in tmp value (`#1101 `_) - * CyclonePlotter, create options to format output grid area to user-desired area (`#1091 `_) - * CyclonePlotter, connected lines run over the Prime Meridian (`#1000 `_) - * Add harmonic pre-processing to the RMM use case (`#1019 `_) + * Enhance TC-Pairs wrapper to make valid_inc, valid_exc, and write_valid configurable options (`#1069 `_) + * Improve logic of TCPairs wrapper (`#749 `_) + * Enhance TCPairs to loop by valid time and allow looping when LOOP_ORDER = processes (`#986 `_) -* New Wrappers: + * TCGen: - * **IODA2NC** (`#1203 `_) - * **GenEnsProd** (`#1180 `_, `#1266 `_) + * Enhance TCGen wrapper to add support for new configurations (`#1273 `_) -* New Use Cases: + * SeriesAnalysis: - * **IODA2NC** (`#1204 `_) - * **GenEnsProd** (`#1180 `_, `#1266 `_) + * **Enhance SeriesAnalysis wrapper to allow different field info values for each file in a list** (`#1166 `_) + * Add support for probability field threshold in SeriesAnalysis (`#875 `_) + * RegridDataPlane: -METplus Version 4.1.0-beta3 Release Notes (2021-10-06) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * **Add support for extra field options in RegridDataPlane wrapper** (`#924 `_) -* Enhancements: + * PCPCombine: - * Add Grid-Stat configuration options for distance_map dictionary (`#1089 `_) - * Fix installation instructions in User's Guide (`#1067 `_) - * Add instructions to update old METplus configuration files that reference user-defined wrapped MET config files (`#1147 `_) + * Improve PCPCombine derive mode logic to skip lookback (`#928 `_) + * Add support for using filename templates for defining input level in PCPCombine (`#1062 `_) + * Add option to PCPCombine to force using 0 hr accum in subtract mode (`#1368 `_) -* New Use Cases: + * GenVxMask: - * Satellite verification of sea surface temperature (GHRSST) against RTOFS output (`#1004 `_) - * Feature Relative using MTD output for feature centroid lat/lon (`#641 `_) + * Update GenVxMask wrapper to require setting -type (`#960 `_) -* Internal: + * UserScript: - * Transition Community and Developer Support to Github Discussions (`#932 `_) - * Add documentation about the Release Guide and Verification Datasets Guide (`#874 `_) + * **Enhance UserScript to get a list of files that match the run times instead of using a wildcard** (`#1002 `_) -METplus Version 4.1.0-beta2 Release Notes (2021-08-31) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * ExtractTiles: -* Enhancements: + * Enhance ExtractTiles using MTD input to properly match times (`#1285 `_) + + * TCMPRPlotter: + + * Improvements to TCMPRPlotter wrapper logging and output control (`#926 `_) + * Add option to TCMPRPlotter to pass in directory to tc_stat instead of individual files (`#1057 `_) + * Add option to pass in the input directory to TCMPRPlotter instead of finding all tcst files and passing the list (`#1084 `_) + + * CyclonePlotter: + + * Update CyclonePlotter for offline/HPC usage (`#933 `_) + * CyclonePlotter, create options to format output grid area to user-desired area (`#1091 `_) + * CyclonePlotter, connected lines run over the Prime Meridian (`#1000 `_) + + * Use Cases: + + * Add stat_analysis to the Blocking and Weather Regime processing (`#1001 `_) + * Modify user diagnostic feature relative use case to use MetPy Python package (`#759 `_) + * Reorganize the Cryosphere and Marine and Coastal use case categories into one group (`#1200 `_) + * Add harmonic pre-processing to the RMM use case (`#1019 `_) - * Add stat_analysis to the Blocking and Weather Regime processing (`#1001 `_) - * Make output_flag.orank configurable for Point-Stat (`#1103 `_) - * Enhance TC-Pairs wrapper to make valid_inc, valid_exc, and write_valid configurable options (`#1069 `_) - * Add option to TCMPRPlotter to pass in directory to tc_stat instead of individual files (`#1057 `_) - * **Add support for using filename templates for defining input level in PCPCombine** (`#1062 `_) - * Modify wrappers that use wrapped MET config files to default to parm/met_config versions if unset (`#931 `_) - * Modify user diagnostic feature relative use case to use MetPy Python package (`#759 `_) - * Add option to pass in the input directory to TCMPRPlotter instead of finding all tcst files and passing the list (`#1084 `_) - * Updated logic for handling _CLIMO_MEAN_FIELD variables for specifying climatology fields (`#1021 `_) - * Add support for setting hss_ec_value in MET config files (`#951 `_) - * Update documentation to reference GitHub Discussions instead of MET Help (`#956 `_) * New Wrappers: + * GenEnsProd (`#1180 `_, `#1266 `_) + * GFDLTracker (`#615 `_) + * IODA2NC (`#1203 `_) + + * New Use Cases: - * GFDL tracker for TC genesis (`#616 `_) - * GFDL tracker for Extra-TC tracking (`#617 `_) - * RMM and OMI (driver scripts) (`#892 `_) + * MET Tool Wrapper: -* Internal: + * **PointStat: Python Embedding for Point Observations** (`#1490 `_) + * IODA2NC (`#1204 `_) + * GenEnsProd (`#1180 `_, `#1266 `_) + * GFDLTracker for TropicalCyclone (`#615 `_) + * GFDLTracker for TC Genesis (`#616 `_) + * GFDLTracker for Extra-TC Tracking (`#617 `_) - * Make updates to the Release Guide (`#935 `_) - * Clean up GitHub wiki broken links and out-of-date information (`#237 `_) - * Add option to override MET version used for automated tests (`#936 `_) + * Marine and Cryosphere: -METplus Version 4.1.0-beta1 Release Notes (2021-07-21) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * GridStat_fcstRTOFS_obsOSTIA_iceCover (`#834 `_) + * Satellite verification of sea surface temperature (GHRSST) against RTOFS output (`#1004 `_) + * Satellite verification of sea surface salinity: SMOS vs RTOFS output (`#1116 `_) + * Satellite verification of sea surface salinity: AVISO vs RTOFS output HYCOM climo (`#1318 `_) + * Satellite verification of sea surface salinity: SMAP vs RTOFS output (`#1216 `_) -* Enhancements: - * **Improve logic of TCPairs wrapper** (`#749 `_) - * **Add support for probability field threshold in SeriesAnalysis** (`#875 `_) - * **Add support for extra field options in RegridDataPlane wrapper** (`#924 `_) - * **Improvements to TCMPRPlotter wrapper logging and output control** (`#926 `_) - * **Improve PCPCombine derive mode logic to skip lookback** (`#928 `_) - * **Update CyclonePlotter for offline/HPC usage** (`#933 `_) - * **Update GenVxMask wrapper to require setting -type** (`#960 `_) - * **Enhance TCPairs to loop by valid time and allow looping when LOOP_ORDER = processes** (`#986 `_) - * **Enhance UserScript to get a list of files that match the run times instead of using a wildcard** (`#1002 `_) + * Medium Range: + * Feature Relative using MTD output for feature centroid lat/lon (`#641 `_) -* New Wrappers: - * **GFDLTracker** + * Precipitation: + * Precipitation-type comparison across 3 models (`#1408 `_) + + + * Seasonal to Subseasonal (S2S): + + * UserScript_fcstGFS_obsERA_OMI (`#892 `_) + * UserScript_fcstGFS_obsERA_PhaseDiagram (`#1019 `_) + * UserScript_fcstGFS_obsERA_RMM (`#892 `_) + * RMM and OMI (driver scripts) (`#892 `_) + + + * Tropical Cyclone and Extra Tropical Cyclone (tc_and_extra_tc): + + * TC Verification Compare ADECK vs BDECK (`#911 `_) + * TCGen Verify Deterministic Genesis Forecasts and Probabilities from ATCF e-deck files (`#1274 `_) + + +* Bugfixes: + + * Fix read of PB2NC_FILE_WINDOW_[BEGIN/END] configuration variables (`#1486 `_) + * Fix use of current field info in output prefix when using process list instances (`#1471 `_) + * Fix logic to create instances of other wrappers within wrappers to avoid modifying global configurations (`#1356 `_) -* New Use Cases: - * Marine and Cryosphere: GridStat_fcstRTOFS_obsOSTIA_iceCover (`#834 `_) - * met_tool_wrapper: GFDLTracker_TC (`#615 `_) - * Seasonal to Subseasonal: UserScript_fcstGFS_obsERA_OMI - * Seasonal to Subseasonal: UserScript_fcstGFS_obsERA_PhaseDiagram - * Seasonal to Subseasonal: UserScript_fcstGFS_obsERA_RMM +* Documentation: + * Add list of METplus statistics to documentation (`#1049 `_) + * Update documentation to reference GitHub Discussions instead of MET Help (`#956 `_) + * Fix installation instructions in User's Guide (`#1067 `_) + * Add instructions to update old METplus configuration files that reference user-defined wrapped MET config files (`#1147 `_) * Internal: * Improve approach to obtain additional python packages needed for some use cases (`#839 `_) + * Make updates to the Release Guide (`#935 `_) + * Clean up GitHub wiki broken links and out-of-date information (`#237 `_) + * Add option to override MET version used for automated tests (`#936 `_) + * Transition Community and Developer Support to Github Discussions (`#932 `_) + * Add documentation about the Release Guide and Verification Datasets Guide (`#874 `_) + * Create guidance for memory-intensive use cases, introduce Python memory profiler (`#1183 `_) + * Identify code throughout METplus components that are common utilities (`#799 `_) + * Add definitions to the Release Guide for the stages of the release cycle (`#934 `_) + * Document Continous Integration Functionality in the METplus Contributor's Guide (`#675 `_) + * Update Contributor's Guide for new removing/adding data protocols (`#1227 `_) + * Add recording of Python packages to Adding Use Cases documentation (`#1374 `_) + * Remove public-facing access to outdated use case categories (Cryosphere, marine_and_coastal) (`#1226 `_) + METplus Version 4.0.0 Release Notes (2021-05-10) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/Users_Guide/statistics_list.rst b/docs/Users_Guide/statistics_list.rst index 856f073ee1..320c570334 100644 --- a/docs/Users_Guide/statistics_list.rst +++ b/docs/Users_Guide/statistics_list.rst @@ -1,19 +1,26 @@ -****************************** -METplus Database of Statistics -****************************** +******************************** +METplus Statistics & Diagnostics +******************************** .. Number of characters per line: Statistic Name - no more that 32 characters METplus Name - no more than 17 characters Statistic Type - no more than 19 characters + Tools - approx 18 characters? METplus Line Type - currently unlimited (approx 33 characters) +Statistics Database +=================== + + +Statistics List A-B +___________________ .. role:: raw-html(raw) :format: html -.. list-table:: Statistics List +.. list-table:: Statistics List A-B :widths: auto :header-rows: 1 @@ -34,7 +41,8 @@ METplus Database of Statistics MCTS :raw-html:`
` NBRCTS :raw-html:`
` MODE cts - * - Asymptotic Fractions Skill Score + * - Asymptotic :raw-html:`
` + Fractions Skill Score - AFSS - Neighborhood - Grid-Stat @@ -46,12 +54,6 @@ METplus Database of Statistics TC-Stat - TCMPR :raw-html:`
` TCST - * - Difference between the axis :raw-html:`
` - angles of two objects (in degrees) - - ANGLE_DIFF - - Diagnostic - - MODE - - MODE * - Anomaly Correlation :raw-html:`
` including mean error - ANOM_CORR @@ -64,56 +66,14 @@ METplus Database of Statistics * - Uncentered Anomaly :raw-html:`
` Correlation excluding mean :raw-html:`
` error - - ANOM_CORR :raw-html:`
` _UNCNTR + - ANOM_CORR :raw-html:`
` + _UNCNTR - Continuous - Point-Stat :raw-html:`
` Grid-Stat :raw-html:`
` Series-Analysis :raw-html:`
` Stat-Analysis - CNT - * - Object area (in grid squares) - - AREA - - Diagnostic - - MODE :raw-html:`
` - MTD - - MODE obj - * - Forecast object area :raw-html:`
` - divided by the observation :raw-html:`
` - object area (unitless) - - AREA_RATIO - - Diagnostic - - MODE - - MODE obj - * - Area of the object :raw-html:`
` - that meet the object :raw-html:`
` - definition threshold :raw-html:`
` - criteria (in grid squares) - - AREA_THRESH - - Diagnostic - - MODE - - MODE obj - * - Absolute value of :raw-html:`
` - the difference :raw-html:`
` - between the aspect :raw-html:`
` - ratios of two objects :raw-html:`
` - (unitless) - - ASPECT_DIFF - - Diagnostic - - MODE - - MODE obj - * - Object axis angle :raw-html:`
` - (in degrees) - - AXIS_ANG - - Diagnostic - - MODE :raw-html:`
` - MTD - - MTD obj - * - Difference in spatial :raw-html:`
` - axis plane angles - - AXIS_DIFF - - Diagnostic - - MTD - - MTD obj * - Baddeley’s Delta Metric - BADDELEY - Distance Map @@ -149,13 +109,6 @@ METplus Database of Statistics Ensemble-Stat - CNT :raw-html:`
` SSVAR - * - Minimum distance between :raw-html:`
` - the boundaries of two objects - - BOUNDARY :raw-html:`
` - _DIST - - Diagnostic - - MODE - - MODE obj * - Brier Score - BRIER - Probability @@ -182,6 +135,24 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - PSTD + +Statistics List C-E +___________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Statistics List C-E + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type * - Calibration when forecast :raw-html:`
` is between the ith and :raw-html:`
` i+1th probability :raw-html:`
` @@ -192,58 +163,6 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - PJC - * - Total great circle distance :raw-html:`
` - travelled by the 2D spatial :raw-html:`
` - centroid over the lifetime :raw-html:`
` - of the 3D object - - CDIST :raw-html:`
` - _TRAVELLED - - Diagnostic - - MTD - - MTD 3D obj - * - Distance between two :raw-html:`
` - objects centroids :raw-html:`
` - (in grid units) - - CENTROID :raw-html:`
` - _DIST - - Diagnostic - - MODE - - MODE obj - * - Latitude of centroid :raw-html:`
` - - CENTROID :raw-html:`
` - _LAT - - Diagnostic - - MTD :raw-html:`
` - MODE - - MTD 2D & 3D obj :raw-html:`
` - MODE obj - * - Longitude of centroid :raw-html:`
` - - CENTROID :raw-html:`
` - _LON - - Diagnostic - - MTD :raw-html:`
` - MODE - - MTD 2D & 3D obj :raw-html:`
` - MODE obj - * - Time coordinate of centroid - - CENTROID_T - - Diagnostic - - MTD - - MTD 3D obj - * - X coordinate of centroid :raw-html:`
` - - CENTROID_X - - Diagnostic - - MTD :raw-html:`
` - MODE - - MTD 2D & 3D obj :raw-html:`
` - MODE obj - * - Y coordinate of centroid :raw-html:`
` - - CENTROID_Y - - Diagnostic - - MTD :raw-html:`
` - MODE - - MTD 2D & 3D obj :raw-html:`
` - MODE obj * - Climatological mean value - CLIMO_MEAN - Continuous @@ -261,35 +180,6 @@ METplus Database of Statistics Ensemble-Stat - MPR :raw-html:`
` ORANK - * - Ratio of the difference :raw-html:`
` - between the area of an :raw-html:`
` - object and the area of :raw-html:`
` - its convex hull divided :raw-html:`
` - by the area of the :raw-html:`
` - complex hull (unitless) - - COMPLEXITY - - Diagnostic - - MODE - - MODE obj - * - Ratio of complexities of :raw-html:`
` - two objects defined as :raw-html:`
` - the lesser of the forecast :raw-html:`
` - complexity divided by the :raw-html:`
` - observation complexity or :raw-html:`
` - its reciprocal (unitless) - - COMPLEXITY :raw-html:`
` - _RATIO - - Diagnostic - - MODE - - MODE obj - * - Minimum distance between :raw-html:`
` - the convex hulls of two :raw-html:`
` - objects (in grid units) - - CONVEX_HULL :raw-html:`
` - _DIST - - Diagnostic - - MODE - - MODE obj * - Continuous Ranked :raw-html:`
` Probability Score :raw-html:`
` (normal dist.) @@ -348,31 +238,6 @@ METplus Database of Statistics - CTS :raw-html:`
` MODE :raw-html:`
` MBRCTCS - * - Radius of curvature - - CURVATURE - - Diagnostic - - MODE - - MODE obj - * - Ratio of the curvature - - CURVATURE :raw-html:`
` - _RATIO - - Diagnostic - - MODE - - MODE obj - * - Center of curvature :raw-html:`
` - (in grid coordinates) - - CURVATURE :raw-html:`
` - _X - - Diagnostic - - MODE - - MODE obj - * - Center of curvature :raw-html:`
` - (in grid coordinates) - - CURVATURE :raw-html:`
` - _Y - - Diagnostic - - MODE - - MODE obj * - Absolute value of :raw-html:`
` DIR_ERR (see below) - DIR_ABSERR @@ -389,21 +254,6 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - VCNT - * - Difference in object :raw-html:`
` - direction of movement - - DIRECTION :raw-html:`
` - _DIFF - - Diagnostic - - MTD - - MTD 3D obj - * - Difference in the :raw-html:`
` - lifetimes of the :raw-html:`
` - two objects - - DURATION :raw-html:`
` - _DIFF - - Diagnostic - - MTD - - MTD 3D obj * - Expected correct rate :raw-html:`
` used for MCTS HSS_EC - EC_VALUE @@ -432,18 +282,6 @@ METplus Database of Statistics - Continuous - Grid-Stat - GRAD - * - Object end time - - END_TIME - - Diagnostic - - MTD - - MTD 3D obj - * - Difference in object :raw-html:`
` - ending time steps - - END_TIME :raw-html:`
` - _DELTA - - Diagnostic - - MTD - - MTD 3D obj * - The unperturbed :raw-html:`
` ensemble mean value - ENS_MEAN @@ -467,6 +305,21 @@ METplus Database of Statistics Ensemble-Stat - CNT :raw-html:`
` SSVAR + +Statistics List F +_________________ + +.. list-table:: Statistics List F + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type * - Forecast rate/event :raw-html:`
` frequency - F_RATE @@ -478,7 +331,7 @@ METplus Database of Statistics * - Mean forecast wind speed - F_SPEED :raw-html:`
` _BAR - - Continous + - Continuous - Point-Stat :raw-html:`
` Grid-Stat - VL1L2 @@ -533,193 +386,6 @@ METplus Database of Statistics - Continuous - Grid-Stat - NBRCNT - * - Number of forecast :raw-html:`
` - clusters - - fcst_clus - - Diagnostic - - MODE - - MODE obj - * - Number of points used to :raw-html:`
` - define the hull of all :raw-html:`
` - of the cluster forecast :raw-html:`
` - objects - - fcst_clus :raw-html:`
` - _hull - - Diagnostic - - MODE - - MODE obj - * - Forecast Cluster Convex :raw-html:`
` - Hull Point Latitude - - fcst_clus :raw-html:`
` - _hull_lat - - Diagnostic - - MODE - - MODE obj - * - Forecast Cluster Convex :raw-html:`
` - Hull Point Longitude - - fcst_clus :raw-html:`
` - _hull _lon - - Diagnostic - - MODE - - MODE obj - * - Number of Forecast :raw-html:`
` - Cluster Convex Hull Points - - fcst_clus :raw-html:`
` - _hull_npts - - Diagnostic - - MODE - - MODE obj - * - Forecast Cluster Convex :raw-html:`
` - Hull Starting Index - - fcst_clus :raw-html:`
` - _hull_start - - Diagnostic - - MODE - - MODE obj - * - Forecast Cluster Convex :raw-html:`
` - Hull Point X-Coordinate - - fcst_clus :raw-html:`
` - _hull_x - - Diagnostic - - MODE - - MODE obj - * - Forecast Cluster Convex :raw-html:`
` - Hull Point Y-Coordinate - - fcst_clus :raw-html:`
` - _hull_y - - Diagnostic - - MODE - - MODE obj - * - Forecast Object Raw :raw-html:`
` - Values - - fcst_obj :raw-html:`
` - _raw - - Diagnostic - - MODE - - MODE obj - * - Number of simple :raw-html:`
` - forecast objects - - fcst_simp - - Diagnostic - - MODE - - MODE obj - * - Number of points used :raw-html:`
` - to define the boundaries :raw-html:`
` - of all of the simple :raw-html:`
` - forecast objects - - fcst_simp :raw-html:`
` - _bdy - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple :raw-html:`
` - Boundary Latitude - - fcst_simp :raw-html:`
` - _bdy_lat - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple :raw-html:`
` - Boundary Longitude - - fcst_simp :raw-html:`
` - _bdy_lon - - Diagnostic - - MODE - - MODE obj - * - Number of Forecast :raw-html:`
` - Simple Boundary Points - - fcst_simp :raw-html:`
` - _bdy_npts - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple :raw-html:`
` - Boundary Starting Index - - fcst_simp :raw-html:`
` - _bdy_start - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple :raw-html:`
` - Boundary X-Coordinate - - fcst_simp :raw-html:`
` - _bdy_x - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple :raw-html:`
` - Boundary Y-Coordinate - - fcst_simp :raw-html:`
` - _bdy_y - - Diagnostic - - MODE - - MODE obj - * - Number of points used to :raw-html:`
` - define the hull of all :raw-html:`
` - of the simple forecast :raw-html:`
` - objects - - fcst_simp :raw-html:`
` - _hull - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple Convex :raw-html:`
` - Hull Point Latitude - - fcst_simp :raw-html:`
` - _hull_lat - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple Convex :raw-html:`
` - Hull Point Longitude - - fcst_simp :raw-html:`
` - _hull_lon - - Diagnostic - - MODE - - MODE obj - * - Number of Forecast :raw-html:`
` - Simple Convex Hull Points - - fcst_simp :raw-html:`
` - _hull_npts - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple Convex :raw-html:`
` - Hull Starting Index - - fcst_simp :raw-html:`
` - _hull_start - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple Convex :raw-html:`
` - Hull Point X-Coordinate - - fcst_simp :raw-html:`
` - _hull_x - - Diagnostic - - MODE - - MODE obj - * - Forecast Simple Convex :raw-html:`
` - Hull Point Y-Coordinate - - fcst_simp :raw-html:`
` - _hull_y - - Diagnostic - - MODE - - MODE obj - * - Number of thresholds :raw-html:`
` - applied to the forecast - - fcst :raw-html:`
` - _thresh :raw-html:`
` - _length - - Diagnostic - - MODE - - MODE obj - * - Number of thresholds :raw-html:`
` - applied to the forecast - - fcst_thresh :raw-html:`
` - _length - - Diagnostic - - MODE - - MODE obj * - Direction of the average :raw-html:`
` forecast wind vector - FDIR @@ -727,12 +393,6 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - VCNT - * - Forecast energy squared :raw-html:`
` - for this scale - - FENERGY - - - - Wavelet-Stat - - ISC * - Mean Forecast Anomaly Squared - FFABAR - Continuous @@ -748,18 +408,6 @@ METplus Database of Statistics Grid-Stat - SSVAR :raw-html:`
` SL1L2 - * - Mean of absolute value :raw-html:`
` - of forecast gradients - - FGBAR - - - - Grid-Stat - - GRAD - * - Ratio of forecast and :raw-html:`
` - observed gradients - - FGOG_RATIO - - - - Grid-Stat - - GRAD * - Count of events in :raw-html:`
` forecast category i and :raw-html:`
` observation category j @@ -823,38 +471,6 @@ METplus Database of Statistics Grid-Stat - SSVAR :raw-html:`
` SL1L2 - * - Pratt’s Figure of Merit :raw-html:`
` - from observation to :raw-html:`
` - forecast - - FOM_FO - - Diagnostic - - Grid-Stat - - DMAP - * - Maximum of FOM_FO :raw-html:`
` - and FOM_OF - - FOM_MAX - - Diagnostic - - Grid-Stat - - DMAP - * - Mean of FOM_FO :raw-html:`
` - and FOM_OF :raw-html:`
` - - FOM_MEAN - - Diagnostic - - Grid-Stat - - DMAP - * - Minimum of FOM_FO :raw-html:`
` - and FOM_OF - - FOM_MIN - - Diagnostic - - Grid-Stat - - DMAP - * - Pratt’s Figure of Merit :raw-html:`
` - from forecast to :raw-html:`
` - observation - - FOM_OF - - Diagnostic - - Grid-Stat - - DMAP * - Number of tied forecast :raw-html:`
` ranks used in computing :raw-html:`
` Kendall’s tau statistic @@ -910,20 +526,25 @@ METplus Database of Statistics - MODE :raw-html:`
` CTC :raw-html:`
` NBRCTC - * - Distance between the :raw-html:`
` - forecast and Best track :raw-html:`
` - genesis events (km) - - GEN_DIST - - Diagnostic - - TC-Gen - - GENMPR - * - Forecast minus Best track :raw-html:`
` - genesis time in HHMMSS :raw-html:`
` - format - - GEN_TDIFF - - Diagnostic - - TC-Gen - - GENMPR + +Statistics List G-M +___________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Statistics List G-M + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type + * - Gerrity Score and :raw-html:`
` bootstrap confidence limits - GER @@ -946,11 +567,6 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - FHO - * - Hausdorff Distance - - HAUSDORFF - - Diagnostic - - Grid-Stat - - DMAP * - Hanssen and Kuipers :raw-html:`
` Discriminant - HK @@ -973,7 +589,7 @@ METplus Database of Statistics CTS :raw-html:`
` NBRCTS * - Heidke Skill Score :raw-html:`
` - user-specific expected :raw-html:`
` + user-specific expected :raw-html:`
` correct - HSS_EC - Categorical @@ -985,102 +601,18 @@ METplus Database of Statistics - Ensemble - Ensemble-Stat - ECNT - * - Best track genesis minus :raw-html:`
` - forecast initialization :raw-html:`
` - time in HHMMSS format - - INIT_TDIFF - - Diagnostic - - TC-Gen - - GENMPR - * - 10th, 25th, 50th, 75th, :raw-html:`
` - 90th, and user-specified :raw-html:`
` - percentiles of :raw-html:`
` - intensity of the raw :raw-html:`
` - field within the :raw-html:`
` - object or time slice - - INTENSITY :raw-html:`
` - _10, _25, :raw-html:`
` - _50, _75, :raw-html:`
` - _90, _NN - - Diagnostic - - MODE - - MODE obj - * - Sum of the intensities of :raw-html:`
` - the raw field within the :raw-html:`
` - object (variable units) - - INTENSITY :raw-html:`
` - _SUM - - Diagnostics - - MODE - - MODE obj - * - Total interest for this :raw-html:`
` - object pair - - INTEREST - - Diagnostic - - MTD :raw-html:`
` - MODE - - MTD 3D obj :raw-html:`
` - MODE obj - * - Intersection area of two :raw-html:`
` - objects (in grid squares) - - INTERSECT :raw-html:`
` - ION_AREA - - Diagnostic - - MODE - - MODE obj - * - Ratio of intersection area :raw-html:`
` - to the lesser of the :raw-html:`
` - forecast and observation :raw-html:`
` - object areas (unitless) - - INTERSECT :raw-html:`
` - ION_OVER :raw-html:`
` - _AREA - - Diagnostic - - MODE - - MODE obj - * - “Volume” of object :raw-html:`
` - intersection - - INTERSECT :raw-html:`
` - ION_VOLUME - - Diagnostic - - MTD - - MTD 3D obj * - Interquartile Range :raw-html:`
` - IQR - Continuous - Point-Stat :raw-html:`
` Grid-Stat - - CNT - * - The intensity scale :raw-html:`
` - skill score - - ISC - - - - Wavelet-Stat - - ISC - * - The scale at which all :raw-html:`
` - information following :raw-html:`
` - applies - - ISCALE - - - - Wavelet-Stat - - ISC + - CNT * - Kendall’s tau statistic - KT_CORR - Continuous - Point-Stat :raw-html:`
` Grid-Stat - CNT - * - Dimension of the latitude - - LAT - - Diagnostic - - MODE - - MODE obj - * - Length of the :raw-html:`
` - enclosing rectangle - - LENGTH - - Diagnostic - - MODE - - MODE obj * - Likelihood when forecast :raw-html:`
` is between the ith and :raw-html:`
` i+1th probability :raw-html:`
` @@ -1098,11 +630,6 @@ METplus Database of Statistics Grid-Stat - CTS :raw-html:`
` NBRCTS - * - Dimension of the longitude - - LON - - Diagnostic - - MODE - - MODE obj * - The Median Absolute :raw-html:`
` Deviation - MAD @@ -1179,14 +706,6 @@ METplus Database of Statistics - Distance - Grid-Stat - DMAP - * - Mean of maximum of :raw-html:`
` - absolute values of :raw-html:`
` - forecast and observed :raw-html:`
` - gradients - - MGBAR - - - - Grid-Stat - - GRAD * - Mean squared error - MSE - Continuous @@ -1212,7 +731,25 @@ METplus Database of Statistics - Continuous - Point-Stat :raw-html:`
` Grid-Stat - - VCNT + - VCNT + +Statistics List N-O +___________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Statistics List N-O + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type * - Dimension of the :raw-html:`
` contingency table & the :raw-html:`
` total number of :raw-html:`
` @@ -1224,23 +761,6 @@ METplus Database of Statistics Grid-Stat - MCTC :raw-html:`
` MCTS - * - Number of cluster objects - - N_CLUS - - Diagnostic - - MODE - - MODE obj - * - Number of simple :raw-html:`
` - forecast objects - - N_FCST_SIMP - - Diagnostic - - MODE - - MODE obj - * - Number of simple :raw-html:`
` - observation objects - - N_OBS_SIMP - - Diagnostic - - MODE - - MODE obj * - Observation rate - O_RATE - Categorical @@ -1278,114 +798,6 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - VCNT - * - Number of observed :raw-html:`
` - clusters - - obs_clus - - Diagnostic - - MODE - - MODE obj - * - Number of points used to :raw-html:`
` - define the hull of all of :raw-html:`
` - the cluster observation :raw-html:`
` - objects - - obs_clus :raw-html:`
` - _hull - - Diagnostic - - MODE - - MODE obj - * - Observation Cluster Convex :raw-html:`
` - Hull Point Latitude - - obs_clus :raw-html:`
` - _hull_lat - - Diagnostic - - MODE - - MODE obj - * - Observation Cluster Convex :raw-html:`
` - Hull Point Longitude - - obs_clus :raw-html:`
` - _hull_lon - - Diagnostic - - MODE - - MODE obj - * - Number of Observation :raw-html:`
` - Cluster Convex Hull Points - - obs_clus :raw-html:`
` - _hull_npts - - Diagnostic - - MODE - - MODE obj - * - Observation Cluster Convex :raw-html:`
` - Hull Starting Index - - obs_clus :raw-html:`
` - _hull_start - - Diagnostic - - MODE - - MODE obj - * - Observation Cluster Convex :raw-html:`
` - Hull Point X-Coordinate - - obs_clus :raw-html:`
` - _hull_x - - Diagnostic - - MODE - - MODE obj - * - Observation Cluster Convex :raw-html:`
` - Hull Point Y-Coordinate - - obs_clus :raw-html:`
` - _hull_y - - Diagnostic - - MODE - - MODE obj - * - Number of simple :raw-html:`
` - observation objects - - obs_simp - - Diagnostic - - MODE - - MODE obj - * - Number of points used :raw-html:`
` - to define the boundaries :raw-html:`
` - of the simple observation :raw-html:`
` - objects - - obs_simp :raw-html:`
` - _bdy - - Diagnostic - - MODE - - MODE obj - * - Observation Simple :raw-html:`
` - Boundary Point Latitude - - obs_simp :raw-html:`
` - _bdy_lat - - Diagnostic - - MODE - - MODE obj - * - Observation Simple :raw-html:`
` - Boundary Point Longitude - - obs_simp :raw-html:`
` - _bdy_lon - - Diagnostic - - MODE - - MODE obj - * - Number of Observation :raw-html:`
` - Simple Boundary Points - - obs_simp :raw-html:`
` - _bdy_npts - - Diagnostic - - MODE - - MODE obj - * - Number of points used to :raw-html:`
` - define the hull of the :raw-html:`
` - simple observation objects - - obs_simp :raw-html:`
` - _hull - - Diagnostic - - MODE - - MODE obj - * - Number of Observation :raw-html:`
` - Simple Convex Hull Points - - obs_simp :raw-html:`
` - _hull_npts - - Diagnostic - - MODE - - MODE obj * - Odds Ratio - ODDS - Categorical @@ -1401,19 +813,7 @@ METplus Database of Statistics - Continuous - Point-Stat :raw-html:`
` Grid-Stat - - VCNT - * - Observed energy squared :raw-html:`
` - for this scale - - OENERGY - - - - Wavelet-Stat - - ISC - * - Mean of absolute value :raw-html:`
` - of observed gradients - - OGBAR - - - - Grid-Stat - - GRAD + - VCNT * - Number of observation :raw-html:`
` when forecast is between :raw-html:`
` the ith and i+1th :raw-html:`
` @@ -1505,17 +905,27 @@ METplus Database of Statistics - Probability - Point-Stat :raw-html:`
` Grid-Stat - - PJC - * - Ratio of the nth percentile :raw-html:`
` - (INTENSITY_NN column) of :raw-html:`
` - intensity of the two :raw-html:`
` - objects - - PERCENTILE :raw-html:`
` - _INTENSITY :raw-html:`
` - _RATIO - - Diagnostic - - MODE - - MODE obj + - PJC + + +Statistics List P-R +___________________ + + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Statistics List P-R + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type * - Probability Integral :raw-html:`
` Transform - PIT @@ -1628,7 +1038,7 @@ METplus Database of Statistics - RELP_i - Ensemble - Ensemble-Stat - - RELP + - RELP * - Resolution - RESOLUTION - Probability @@ -1664,7 +1074,7 @@ METplus Database of Statistics - Continuous - Point-Stat :raw-html:`
` Grid-Stat - - CNT + - CNT * - Square root of MSVE - RMSVE - Continuous @@ -1717,6 +1127,26 @@ METplus Database of Statistics - Ensemble - Ensemble-Stat - RPS + + +Statistics List S-T +___________________ + + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Statistics List S-T + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type * - S1 score - S1 - Continuous @@ -1757,15 +1187,6 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - CNT - * - Spatial distance between :raw-html:`
` - (𝑥,𝑦)(x,y) coordinates of :raw-html:`
` - object spacetime centroid - - SPACE :raw-html:`
` - _CENTROID :raw-html:`
` - _DIST - - Diagnostics - - MTD - - MTD 3D obs * - Absolute value of SPEED_ERR - SPEED :raw-html:`
` _ABSERR @@ -1773,11 +1194,6 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - VCNT - * - Difference in object speeds - - SPEED_DELTA - - Diagnostics - - MTD - - MTD 3D obs * - Difference between the :raw-html:`
` length of the average :raw-html:`
` forecast wind vector and :raw-html:`
` @@ -1814,29 +1230,6 @@ METplus Database of Statistics - Ensemble-Stat - ECNT :raw-html:`
` ORANK - * - Difference in object :raw-html:`
` - starting time steps - - START_TIME :raw-html:`
` - _DELTA - - Diagnostic - - MTD - - MTD 3D obj - * - Symmetric difference of :raw-html:`
` - two objects :raw-html:`
` - (in grid squares) - - SYMMETRIC :raw-html:`
` - _DIFF - - Diagnostics - - MODE - - MODE obj - * - Difference in t index of :raw-html:`
` - object spacetime centroid - - TIME :raw-html:`
` - _CENTROID :raw-html:`
` - _DELTA - - Diagnostic - - MTD - - MTD 3D obj * - Track error of adeck :raw-html:`
` relative to bdeck (nm) - TK_ERR @@ -1849,6 +1242,26 @@ METplus Database of Statistics - Continuous - TC-Pairs - TCMPR + + + +Statistics List U-Z +___________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Statistics List U-Z + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type * - Mean U-component :raw-html:`
` Forecast Anomaly - UFABAR @@ -1875,13 +1288,6 @@ METplus Database of Statistics - Point-Stat :raw-html:`
` Grid-Stat - PSTD - * - Union area of :raw-html:`
` - two objects :raw-html:`
` - (in grid squares) - - UNION_AREA - - Diagnostic - - MODE - - MODE obj * - Mean U-component :raw-html:`
` Observation Anomaly - UOABAR @@ -1992,7 +1398,7 @@ METplus Database of Statistics - VCNT * - Mean(vf-vc) - VFABAR - - Continous + - Continuous - Point-Stat :raw-html:`
` Grid-Stat - VAL1L2 @@ -2013,15 +1419,933 @@ METplus Database of Statistics - Continuous - Point-Stat :raw-html:`
` Grid-Stat - - VL1L2 - * - Integer count of the :raw-html:`
` - number of 3D “cells” :raw-html:`
` - in an object - - VOLUME - - Diagnostic - - MTD - - MTD 3D obj - * - Forecast object volume :raw-html:`
` + - VL1L2 + + +Diagnostics Database +==================== + + +.. Number of characters per line: + Statistic Name - no more that 32 characters + METplus Name - no more than 17 characters + Statistic Type - no more than 19 characters + METplus Line Type - currently unlimited (approx 33 characters) + +Diagnostics List A-B +____________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Diagnostics List A-B + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type + * - Difference between the axis :raw-html:`
` + angles of two objects (in degrees) + - ANGLE_DIFF + - Diagnostic + - MODE + - MODE + * - Object area (in grid squares) + - AREA + - Diagnostic + - MODE :raw-html:`
` + MTD + - MODE obj + * - Forecast object area :raw-html:`
` + divided by the observation :raw-html:`
` + object area (unitless) + - AREA_RATIO + - Diagnostic + - MODE + - MODE obj + * - Area of the object :raw-html:`
` + that meet the object :raw-html:`
` + definition threshold :raw-html:`
` + criteria (in grid squares) + - AREA_THRESH + - Diagnostic + - MODE + - MODE obj + * - Absolute value of :raw-html:`
` + the difference :raw-html:`
` + between the aspect :raw-html:`
` + ratios of two objects :raw-html:`
` + (unitless) + - ASPECT_DIFF + - Diagnostic + - MODE + - MODE obj + * - Object axis angle :raw-html:`
` + (in degrees) + - AXIS_ANG + - Diagnostic + - MODE :raw-html:`
` + MTD + - MTD obj + * - Difference in spatial :raw-html:`
` + axis plane angles + - AXIS_DIFF + - Diagnostic + - MTD + - MTD obj + * - Blocking Index + - Blocking :raw-html:`
` + Index + - Diagnostic + - METplus Use :raw-html:`
` + Case + - n/a + * - Minimum distance between :raw-html:`
` + the boundaries of two objects + - BOUNDARY :raw-html:`
` + _DIST + - Diagnostic + - MODE + - MODE obj + +Diagnostics List C-E +____________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Diagnostics List C-E + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type + * - Total great circle distance :raw-html:`
` + travelled by the 2D spatial :raw-html:`
` + centroid over the lifetime :raw-html:`
` + of the 3D object + - CDIST :raw-html:`
` + _TRAVELLED + - Diagnostic + - MTD + - MTD 3D obj + * - Distance between two :raw-html:`
` + objects centroids :raw-html:`
` + (in grid units) + - CENTROID :raw-html:`
` + _DIST + - Diagnostic + - MODE + - MODE obj + * - Latitude of centroid :raw-html:`
` + - CENTROID :raw-html:`
` + _LAT + - Diagnostic + - MTD :raw-html:`
` + MODE + - MTD 2D & 3D obj :raw-html:`
` + MODE obj + * - Longitude of centroid :raw-html:`
` + - CENTROID :raw-html:`
` + _LON + - Diagnostic + - MTD :raw-html:`
` + MODE + - MTD 2D & 3D obj :raw-html:`
` + MODE obj + * - Time coordinate of centroid + - CENTROID_T + - Diagnostic + - MTD + - MTD 3D obj + * - X coordinate of centroid :raw-html:`
` + - CENTROID_X + - Diagnostic + - MTD :raw-html:`
` + MODE + - MTD 2D & 3D obj :raw-html:`
` + MODE obj + * - Y coordinate of centroid :raw-html:`
` + - CENTROID_Y + - Diagnostic + - MTD :raw-html:`
` + MODE + - MTD 2D & 3D obj :raw-html:`
` + MODE obj + * - Space-Time :raw-html:`
` + Coherence Diagram + - Coherence :raw-html:`
` + Diagram + - Diagnostic + - METplus :raw-html:`
` + Use Case + - n/a + * - Ratio of the difference :raw-html:`
` + between the area of an :raw-html:`
` + object and the area of :raw-html:`
` + its convex hull divided :raw-html:`
` + by the area of the :raw-html:`
` + complex hull (unitless) + - COMPLEXITY + - Diagnostic + - MODE + - MODE obj + * - Ratio of complexities of :raw-html:`
` + two objects defined as :raw-html:`
` + the lesser of the forecast :raw-html:`
` + complexity divided by the :raw-html:`
` + observation complexity or :raw-html:`
` + its reciprocal (unitless) + - COMPLEXITY :raw-html:`
` + _RATIO + - Diagnostic + - MODE + - MODE obj + * - Minimum distance between :raw-html:`
` + the convex hulls of two :raw-html:`
` + objects (in grid units) + - CONVEX_HULL :raw-html:`
` + _DIST + - Diagnostic + - MODE + - MODE obj + * - Radius of curvature + - CURVATURE + - Diagnostic + - MODE + - MODE obj + * - Ratio of the curvature + - CURVATURE :raw-html:`
` + _RATIO + - Diagnostic + - MODE + - MODE obj + * - Center of curvature :raw-html:`
` + (in grid coordinates) + - CURVATURE :raw-html:`
` + _X + - Diagnostic + - MODE + - MODE obj + * - Center of curvature :raw-html:`
` + (in grid coordinates) + - CURVATURE :raw-html:`
` + _Y + - Diagnostic + - MODE + - MODE obj + * - Cloud Water / :raw-html:`
` + Precip Relationship + - CW/Precip :raw-html:`
` + Relationship + - Diagnostic + - Grid-Diag + - n/a + * - Difference in object :raw-html:`
` + direction of movement + - DIRECTION :raw-html:`
` + _DIFF + - Diagnostic + - MTD + - MTD 3D obj + * - Difference in the :raw-html:`
` + lifetimes of the :raw-html:`
` + two objects + - DURATION :raw-html:`
` + _DIFF + - Diagnostic + - MTD + - MTD 3D obj + * - Object end time + - END_TIME + - Diagnostic + - MTD + - MTD 3D obj + * - Difference in object :raw-html:`
` + ending time steps + - END_TIME :raw-html:`
` + _DELTA + - Diagnostic + - MTD + - MTD 3D obj + +Diagnostics List F +__________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Diagnostics List F + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type + * - Number of forecast :raw-html:`
` + clusters + - FCST_CLUS + - Diagnostic + - MODE + - MODE obj + * - Number of points used to :raw-html:`
` + define the hull of all :raw-html:`
` + of the cluster forecast :raw-html:`
` + objects + - FCST_CLUS :raw-html:`
` + _HULL + - Diagnostic + - MODE + - MODE obj + * - Forecast Cluster Convex :raw-html:`
` + Hull Point Latitude + - FCST_CLUS :raw-html:`
` + _HULL_LAT + - Diagnostic + - MODE + - MODE obj + * - Forecast Cluster Convex :raw-html:`
` + Hull Point Longitude + - FCST_CLUS :raw-html:`
` + _HULL _LON + - Diagnostic + - MODE + - MODE obj + * - Number of Forecast :raw-html:`
` + Cluster Convex Hull Points + - FCST_CLUS :raw-html:`
` + _HULL_NPTS + - Diagnostic + - MODE + - MODE obj + * - Forecast Cluster Convex :raw-html:`
` + Hull Starting Index + - FCST_CLUS :raw-html:`
` + _HULL_START + - Diagnostic + - MODE + - MODE obj + * - Forecast Cluster Convex :raw-html:`
` + Hull Point X-Coordinate + - FCST_CLUS :raw-html:`
` + _HULL_X + - Diagnostic + - MODE + - MODE obj + * - Forecast Cluster Convex :raw-html:`
` + Hull Point Y-Coordinate + - FCST_CLUS :raw-html:`
` + _HULL_Y + - Diagnostic + - MODE + - MODE obj + * - Forecast Object Raw :raw-html:`
` + Values + - FCST_OBJ :raw-html:`
` + _RAW + - Diagnostic + - MODE + - MODE obj + * - Number of simple :raw-html:`
` + forecast objects + - FCST_SIMP + - Diagnostic + - MODE + - MODE obj + * - Number of points used :raw-html:`
` + to define the boundaries :raw-html:`
` + of all of the simple :raw-html:`
` + forecast objects + - FCST_SIMP :raw-html:`
` + _BDY + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple :raw-html:`
` + Boundary Latitude + - FCST_SIMP :raw-html:`
` + _BDY_LAT + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple :raw-html:`
` + Boundary Longitude + - FCST_SIMP :raw-html:`
` + _BDY_LON + - Diagnostic + - MODE + - MODE obj + * - Number of Forecast :raw-html:`
` + Simple Boundary Points + - FCST_SIMP :raw-html:`
` + _BDY_NPTS + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple :raw-html:`
` + Boundary Starting Index + - FCST_SIMP :raw-html:`
` + _BDY_START + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple :raw-html:`
` + Boundary X-Coordinate + - FCST_SIMP :raw-html:`
` + _BDY_X + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple :raw-html:`
` + Boundary Y-Coordinate + - FCST_SIMP :raw-html:`
` + _BDY_Y + - Diagnostic + - MODE + - MODE obj + * - Number of points used to :raw-html:`
` + define the hull of all :raw-html:`
` + of the simple forecast :raw-html:`
` + objects + - FCST_SIMP :raw-html:`
` + _HULL + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple Convex :raw-html:`
` + Hull Point Latitude + - FCST_SIMP :raw-html:`
` + _HULL_LAT + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple Convex :raw-html:`
` + Hull Point Longitude + - FCST_SIMP :raw-html:`
` + _HULL_LON + - Diagnostic + - MODE + - MODE obj + * - Number of Forecast :raw-html:`
` + Simple Convex Hull Points + - FCST_SIMP :raw-html:`
` + _HULL_NPTS + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple Convex :raw-html:`
` + Hull Starting Index + - FCST_SIMP :raw-html:`
` + _HULL_START + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple Convex :raw-html:`
` + Hull Point X-Coordinate + - FCST_SIMP :raw-html:`
` + _HULL_X + - Diagnostic + - MODE + - MODE obj + * - Forecast Simple Convex :raw-html:`
` + Hull Point Y-Coordinate + - FCST_SIMP :raw-html:`
` + _HULL_Y + - Diagnostic + - MODE + - MODE obj + * - Number of thresholds :raw-html:`
` + applied to the forecast + - FCST :raw-html:`
` + _THRESH :raw-html:`
` + _LENGTH + - Diagnostic + - MODE + - MODE obj + * - Number of thresholds :raw-html:`
` + applied to the forecast + - FCST_THRESH :raw-html:`
` + _LENGTH + - Diagnostic + - MODE + - MODE obj + * - Forecast energy squared :raw-html:`
` + for this scale + - FENERGY + - + - Wavelet-Stat + - ISC + * - Mean of absolute value :raw-html:`
` + of forecast gradients + - FGBAR + - + - Grid-Stat + - GRAD + * - Ratio of forecast and :raw-html:`
` + observed gradients + - FGOG_RATIO + - + - Grid-Stat + - GRAD + * - Pratt’s Figure of Merit :raw-html:`
` + from observation to :raw-html:`
` + forecast + - FOM_FO + - Diagnostic + - Grid-Stat + - DMAP + * - Maximum of FOM_FO :raw-html:`
` + and FOM_OF + - FOM_MAX + - Diagnostic + - Grid-Stat + - DMAP + * - Mean of FOM_FO :raw-html:`
` + and FOM_OF :raw-html:`
` + - FOM_MEAN + - Diagnostic + - Grid-Stat + - DMAP + * - Minimum of FOM_FO :raw-html:`
` + and FOM_OF + - FOM_MIN + - Diagnostic + - Grid-Stat + - DMAP + * - Pratt’s Figure of Merit :raw-html:`
` + from forecast to :raw-html:`
` + observation + - FOM_OF + - Diagnostic + - Grid-Stat + - DMAP + + +Diagnostics List G-L +____________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Diagnostics List G-L + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type + * - Distance between the :raw-html:`
` + forecast and Best track :raw-html:`
` + genesis events (km) + - GEN_DIST + - Diagnostic + - TC-Gen + - GENMPR + * - Forecast minus Best track :raw-html:`
` + genesis time in HHMMSS :raw-html:`
` + format + - GEN_TDIFF + - Diagnostic + - TC-Gen + - GENMPR + * - Hausdorff Distance + - HAUSDORFF + - Diagnostic + - Grid-Stat + - DMAP + * - Hovmoeller Diagram + - Hovmoeller + - Diagnostic + - METplus :raw-html:`
` + Use Case + - n/a + * - Best track genesis minus :raw-html:`
` + forecast initialization :raw-html:`
` + time in HHMMSS format + - INIT_TDIFF + - Diagnostic + - TC-Gen + - GENMPR + * - 10th, 25th, 50th, 75th, :raw-html:`
` + 90th, and user-specified :raw-html:`
` + percentiles of :raw-html:`
` + intensity of the raw :raw-html:`
` + field within the :raw-html:`
` + object or time slice + - INTENSITY :raw-html:`
` + _10, _25, :raw-html:`
` + _50, _75, :raw-html:`
` + _90, _NN + - Diagnostic + - MODE + - MODE obj + * - Sum of the intensities of :raw-html:`
` + the raw field within the :raw-html:`
` + object (variable units) + - INTENSITY :raw-html:`
` + _SUM + - Diagnostic + - MODE + - MODE obj + * - Total interest for this :raw-html:`
` + object pair + - INTEREST + - Diagnostic + - MTD :raw-html:`
` + MODE + - MTD 3D obj :raw-html:`
` + MODE obj + * - Intersection area of two :raw-html:`
` + objects (in grid squares) + - INTERSECT :raw-html:`
` + ION_AREA + - Diagnostic + - MODE + - MODE obj + * - Ratio of intersection area :raw-html:`
` + to the lesser of the :raw-html:`
` + forecast and observation :raw-html:`
` + object areas (unitless) + - INTERSECT :raw-html:`
` + ION_OVER :raw-html:`
` + _AREA + - Diagnostic + - MODE + - MODE obj + * - “Volume” of object :raw-html:`
` + intersection + - INTERSECT :raw-html:`
` + ION_VOLUME + - Diagnostic + - MTD + - MTD 3D obj + * - The intensity scale :raw-html:`
` + skill score + - ISC + - + - Wavelet-Stat + - ISC + * - The scale at which all :raw-html:`
` + information following :raw-html:`
` + applies + - ISCALE + - + - Wavelet-Stat + - ISC + * - Joint Probability :raw-html:`
` + Distribution between :raw-html:`
` + variable + - Joint PDF :raw-html:`
` + to Diagnose :raw-html:`
` + Relationship + - Diagnostic + - Grid-Diag + - n/a + * - Dimension of the latitude + - LAT + - Diagnostic + - MODE + - MODE obj + * - Length of the :raw-html:`
` + enclosing rectangle + - LENGTH + - Diagnostic + - MODE + - MODE obj + * - Dimension of the longitude + - LON + - Diagnostic + - MODE + - MODE obj + + +Diagnostics List M-O +____________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Diagnostics List M-O + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type + * - Meridional Means + - Meridional Means + - Diagnostic + - METplus Use Case + - n/a + * - Mean of maximum of :raw-html:`
` + absolute values of :raw-html:`
` + forecast and observed :raw-html:`
` + gradients + - MGBAR + - + - Grid-Stat + - GRAD + * - Number of cluster objects + - N_CLUS + - Diagnostic + - MODE + - MODE obj + * - Number of simple :raw-html:`
` + forecast objects + - N_FCST_SIMP + - Diagnostic + - MODE + - MODE obj + * - Number of simple :raw-html:`
` + observation objects + - N_OBS_SIMP + - Diagnostic + - MODE + - MODE obj + * - Number of observed :raw-html:`
` + clusters + - OBS_CLUS + - Diagnostic + - MODE + - MODE obj + * - Number of points used to :raw-html:`
` + define the hull of all of :raw-html:`
` + the cluster observation :raw-html:`
` + objects + - OBS_CLUS :raw-html:`
` + _HULL + - Diagnostic + - MODE + - MODE obj + * - Observation Cluster Convex :raw-html:`
` + Hull Point Latitude + - OBS_CLUS :raw-html:`
` + _HULL_LAT + - Diagnostic + - MODE + - MODE obj + * - Observation Cluster Convex :raw-html:`
` + Hull Point Longitude + - OBS_CLUS :raw-html:`
` + _HULL_LON + - Diagnostic + - MODE + - MODE obj + * - Number of Observation :raw-html:`
` + Cluster Convex Hull Points + - OBS_CLUS :raw-html:`
` + _HULL_NPTS + - Diagnostic + - MODE + - MODE obj + * - Observation Cluster Convex :raw-html:`
` + Hull Starting Index + - OBS_CLUS :raw-html:`
` + _HULL_START + - Diagnostic + - MODE + - MODE obj + * - Observation Cluster Convex :raw-html:`
` + Hull Point X-Coordinate + - OBS_CLUS :raw-html:`
` + _HULL_X + - Diagnostic + - MODE + - MODE obj + * - Observation Cluster Convex :raw-html:`
` + Hull Point Y-Coordinate + - OBS_CLUS :raw-html:`
` + _HULL_Y + - Diagnostic + - MODE + - MODE obj + * - Number of simple :raw-html:`
` + observation objects + - OBS_SIMP + - Diagnostic + - MODE + - MODE obj + * - Number of points used :raw-html:`
` + to define the boundaries :raw-html:`
` + of the simple observation :raw-html:`
` + objects + - OBS_SIMP :raw-html:`
` + _BDY + - Diagnostic + - MODE + - MODE obj + * - Observation Simple :raw-html:`
` + Boundary Point Latitude + - OBS_SIMP :raw-html:`
` + _BDY_LAT + - Diagnostic + - MODE + - MODE obj + * - Observation Simple :raw-html:`
` + Boundary Point Longitude + - OBS_SIMP :raw-html:`
` + _BDY_LON + - Diagnostic + - MODE + - MODE obj + * - Number of Observation :raw-html:`
` + Simple Boundary Points + - OBS_SIMP :raw-html:`
` + _BDY_NPTS + - Diagnostic + - MODE + - MODE obj + * - Number of points used to :raw-html:`
` + define the hull of the :raw-html:`
` + simple observation objects + - OBS_SIMP :raw-html:`
` + _HULL + - Diagnostic + - MODE + - MODE obj + * - Number of Observation :raw-html:`
` + Simple Convex Hull Points + - OBS_SIMP :raw-html:`
` + _HULL_NPTS + - Diagnostic + - MODE + - MODE obj + * - Observed energy squared :raw-html:`
` + for this scale + - OENERGY + - + - Wavelet-Stat + - ISC + * - Mean of absolute value :raw-html:`
` + of observed gradients + - OGBAR + - + - Grid-Stat + - GRAD + * - OLR-based MJO Index + - OMI + - Diagnostic + - METplus :raw-html:`
` + Use Case + - n/a + + +Diagnostics List P-Z +____________________ + +.. role:: raw-html(raw) + :format: html + +.. list-table:: Diagnostics List P-Z + :widths: auto + :header-rows: 1 + + * - Statistics :raw-html:`
` + Long Name + - METplus Name + - Statistic Type + - Tools + - METplus :raw-html:`
` + Line Type + * - Ratio of the nth percentile :raw-html:`
` + (INTENSITY_NN column) of :raw-html:`
` + intensity of the two :raw-html:`
` + objects + - PERCENTILE :raw-html:`
` + _INTENSITY :raw-html:`
` + _RATIO + - Diagnostic + - MODE + - MODE obj + * - Phase Diagram :raw-html:`
` + for RMM and OMI + - Phase :raw-html:`
` + Diagram + - Diagnostic + - METplus :raw-html:`
` + Use Case + - n/a + * - Realtime Multivariate :raw-html:`
` + MJO Index + - RMM + - Diagnostic + - METplus :raw-html:`
` + Use Case + - n/a + * - Spatial distance between :raw-html:`
` + (𝑥,𝑦)(x,y) coordinates of :raw-html:`
` + object spacetime centroid + - SPACE :raw-html:`
` + _CENTROID :raw-html:`
` + _DIST + - Diagnostic + - MTD + - MTD 3D obs + * - Difference in object speeds + - SPEED_DELTA + - Diagnostic + - MTD + - MTD 3D obs + * - Difference in object :raw-html:`
` + starting time steps + - START_TIME :raw-html:`
` + _DELTA + - Diagnostic + - MTD + - MTD 3D obj + * - Symmetric difference of :raw-html:`
` + two objects :raw-html:`
` + (in grid squares) + - SYMMETRIC :raw-html:`
` + _DIFF + - Diagnostic + - MODE + - MODE obj + * - Difference in t index of :raw-html:`
` + object spacetime centroid + - TIME :raw-html:`
` + _CENTROID :raw-html:`
` + _DELTA + - Diagnostic + - MTD + - MTD 3D obj + * - Union area of :raw-html:`
` + two objects :raw-html:`
` + (in grid squares) + - UNION_AREA + - Diagnostic + - MODE + - MODE obj + * - Integer count of the :raw-html:`
` + number of 3D “cells” :raw-html:`
` + in an object + - VOLUME + - Diagnostic + - MTD + - MTD 3D obj + * - Forecast object volume :raw-html:`
` divided by observation :raw-html:`
` object volume - VOLUME :raw-html:`
` @@ -2029,6 +2353,13 @@ METplus Database of Statistics - Diagnostic - MTD - MTD 3D obj + * - Weather Regime Index + - Weather :raw-html:`
` + Regime Index + - Diagnostic + - METplus :raw-html:`
` + Use Case + - n/a * - Width of the enclosing :raw-html:`
` rectangle (in grid units) - WIDTH @@ -2066,6 +2397,12 @@ METplus Database of Statistics - TC-Pairs - PROBRIRW :raw-html:`
` TCMPR + * - Zonal Means + - Zonal Means + - Diagnostic + - METplus :raw-html:`
` + Use Case + - n/a * - Zhu’s Measure from :raw-html:`
` observation to forecast - ZHU_FO @@ -2096,3 +2433,4 @@ METplus Database of Statistics - Diagnostic - Grid-Stat - DMAP + diff --git a/docs/Users_Guide/systemconfiguration.rst b/docs/Users_Guide/systemconfiguration.rst index 999b6ec049..96f5061ca0 100644 --- a/docs/Users_Guide/systemconfiguration.rst +++ b/docs/Users_Guide/systemconfiguration.rst @@ -1387,7 +1387,7 @@ a single run. If the MET tool allows it and METplus Wrappers is configured accordingly, these two comparisons would be configured in a single run. Read explicit time dimension from a NetCDF level -"""""""""""""""""""""""""""""""""""""""""""""""" +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If the input NetCDF data contains a time dimension, the time can be specified in the level value. The MET tool will find the data for the time requested:: @@ -1407,6 +1407,40 @@ functionality). The time can be specified based on the current run time, i.e.:: In this example, {valid?fmt=%Y%m%d_%H%M%S} will be substituted with the valid time of the current run. +Substituting Current Level +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When using Python Embedding to pass in data for a field, one may want to +call the same Python script for each vertical level specifying the level +string for each call. In this case, a list of levels can be specified using +:term:`FCST_VAR_LEVELS` and the value can be substituted into the +corresponding :term:`FCST_VAR_NAME` using {fcst_level}:: + + [config] + FCST_VAR1_NAME = {INPUT_BASE}/myscripts/read_nc2xr.py {INPUT_BASE}/mydata/forecast_file.nc4 TMP {valid?fmt=%Y%m%d_%H%M} {fcst_level} + FCST_VAR1_LEVELS = P1000,P850,P700,P500,P250,P100 + +This will call the Python script 6 times: + +* {INPUT_BASE}/myscripts/read_nc2xr.py {INPUT_BASE}/mydata/forecast_file.nc4 TMP {valid?fmt=%Y%m%d_%H%M} P1000 +* {INPUT_BASE}/myscripts/read_nc2xr.py {INPUT_BASE}/mydata/forecast_file.nc4 TMP {valid?fmt=%Y%m%d_%H%M} P850 +* {INPUT_BASE}/myscripts/read_nc2xr.py {INPUT_BASE}/mydata/forecast_file.nc4 TMP {valid?fmt=%Y%m%d_%H%M} P700 +* {INPUT_BASE}/myscripts/read_nc2xr.py {INPUT_BASE}/mydata/forecast_file.nc4 TMP {valid?fmt=%Y%m%d_%H%M} P500 +* {INPUT_BASE}/myscripts/read_nc2xr.py {INPUT_BASE}/mydata/forecast_file.nc4 TMP {valid?fmt=%Y%m%d_%H%M} P250 +* {INPUT_BASE}/myscripts/read_nc2xr.py {INPUT_BASE}/mydata/forecast_file.nc4 TMP {valid?fmt=%Y%m%d_%H%M} P100 + +This only applies if the wrapper runs once per field name/level combination +such as MODE or if the wrapper is configured to do so, +for example GridStat using :term:`GRID_STAT_ONCE_PER_FIELD`. + +The same logic applies for observation data using +:term:`OBS_VAR_NAME`, :term:`OBS_VAR_LEVELS`, and {obs_level}. + +To reference the current field name and/or level in another configuration +variable such as :term:`MODE_OUTPUT_PREFIX`, use +{CURRENT_FCST_NAME}, {CURRENT_FCST_LEVEL}, {CURRENT_OBS_NAME}, +and/or {CURRENT_OBS_LEVEL}. + :term:`FCST_VAR_THRESH` / :term:`OBS_VAR_THRESH` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -1454,6 +1488,56 @@ fcst dictionary item. If this is the case, then use these variables. If it is not set, the values in the corresponding FCST_VAR_[NAME/LEVELS/THRESH/OPTIONS] will be used in the ens dictionary. +Probabilistic Forecast Fields +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If processing probabilistic forecast fields, there are additional configuration +variables that are used to properly format the field info that is passed into +the wrapped MET configuration files. +:term:`FCST_IS_PROB` is used to process probabilistic data:: + + [config] + FCST_IS_PROB = True + FCST_VAR1_NAME = APCP_24_A24_ENS_FREQ_gt0.0 + FCST_VAR1_LEVELS = "(*,*)" + +will add the following to the MET config file:: + + fcst = {field = [{ name="APCP_24_A24_ENS_FREQ_gt0.0"; level="(*,*)"; prob=TRUE; cat_thresh=[ ==0.1 ]; }];} + +The cat_thresh value defaults to ==0.1 and defines the size of the Nx2 probabilistic contingency table. +It is set by :term:`FCST_GRID_STAT_PROB_THRESH` (for GridStat):: + + [config] + FCST_IS_PROB = True + FCST_VAR1_NAME = APCP + FCST_VAR1_LEVELS = "(*,*)" + FCST_GRID_STAT_PROB_THRESH = ==0.2 + +will add the following to the MET config file:: + + fcst = {field = [{ name="APCP"; level="(*,*)"; prob=TRUE; cat_thresh=[ ==0.2 ]; }];} + +Some GRIB files contain probabilistic field information in the +Product Definition Section (PDS). The format of the fcst.field info to read +these data expect the name to be set to "PROB" and the field name/level values +are set inside a prob dictionary. +If this is the case, then :term:`FCST_PROB_IN_GRIB_PDS` should be set to True. +At least 1 threshold must be set with :term:`FCST_VAR_THRESH` in this case. +The threshold value will be formatted in the prob dictionary using +thresh_lo and/or thresh_hi values:: + + [config] + FCST_IS_PROB = True + FCST_PROB_IN_GRIB_PDS = True + FCST_VAR1_NAME = APCP + FCST_VAR1_LEVELS = A03 + FCST_VAR1_THRESH = gt12.7 + +will add the following to the MET config file:: + + fcst = {field = [{ name="PROB"; level="A03"; prob={ name="APCP"; thresh_lo=12.7; } cat_thresh=[ ==0.1 ]; }];} + Wrapper Specific Field Info ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/_static/marine_and_cryosphere-UserScript_fcstRTOFS_obsAOML_calcTransport.png b/docs/_static/marine_and_cryosphere-UserScript_fcstRTOFS_obsAOML_calcTransport.png new file mode 100644 index 0000000000000000000000000000000000000000..68df6c11430a273d52dd0f54813cec0340499647 GIT binary patch literal 187673 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�oeiWQaB}~8N-C9}Rc18hMlo~y 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 60 seconds +VALID_INCREMENT = 24H + +# List of forecast leads to process for each run time (init or valid) +# In hours if units are not specified +# If unset, defaults to 0 (don't loop through forecast leads) +LEAD_SEQ = + +# Order of loops to process data - Options are times, processes +# Not relevant if only one item is in the PROCESS_LIST +# times = run all wrappers in the PROCESS_LIST for a single run time, then +# increment the run time and run all wrappers again until all times have +# been evaluated. +# processes = run the first wrapper in the PROCESS_LIST for all times +# specified, then repeat for the next item in the PROCESS_LIST until all +# wrappers have been run + +LOOP_ORDER = processes + +USER_SCRIPT_RUNTIME_FREQ = RUN_ONCE + +USER_SCRIPT_OUTPUT_DIR = {OUTPUT_BASE}/model_applications/marine_and_cryosphere/calc_transport + +USER_SCRIPT_INPUT_TEMPLATE = {VALID_BEG} + +# The valid date increments backwards +USER_SCRIPT_COMMAND = {PARM_BASE}/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport/read_aomlcable_rtofs_transport.py {USER_SCRIPT_INPUT_TEMPLATE} + + +[user_env_vars] + +# Calc Transport specific variables + +CALC_TRANSPORT_RTOFS_DIRNAME = {INPUT_BASE}/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport/RTOFS + +CALC_TRANSPORT_CABLE_FILENAME = {INPUT_BASE}/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport/FC_cable_transport_2021.dat + +CALC_TRANSPORT_EIGHTMILE_FILENAME = {INPUT_BASE}/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport/eightmilecable.dat + +CALC_TRANSPORT_LEAD_TIME = 24 + +# Calculate stats for number of days. The operational website uses 21 days +# of data and then calculates 7 day stats. For the use case both of them are 3 days each. +# The code calculates the number of subdirectories +# under RTOFS directory, however, CALC_TRANSPORT_STATS_DAY is the number of days the statistics +# will be calculated. +CALC_TRANSPORT_STATS_DAY = 3 + +CALC_TRANSPORT_LOG_FILE = calc_transport.log + +OUTPUT_DIR = {OUTPUT_BASE}/model_applications/marine_and_cryosphere/calc_transport diff --git a/parm/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport/read_aomlcable_rtofs_transport.py b/parm/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport/read_aomlcable_rtofs_transport.py new file mode 100755 index 0000000000..4d92710c68 --- /dev/null +++ b/parm/use_cases/model_applications/marine_and_cryosphere/UserScript_fcstRTOFS_obsAOML_calcTransport/read_aomlcable_rtofs_transport.py @@ -0,0 +1,188 @@ +#! /usr/bin/env python3 +""" +Florida Cable Transport Class-4 Validation System +Adapted from Todd Spindler's code +""" + +from netCDF4 import Dataset +import numpy as np +from pyproj import Geod +import math +from sklearn.metrics import mean_squared_error +from datetime import datetime, timedelta +import pandas as pd +import sys, os +import logging + +vDate=datetime.strptime(sys.argv[1],'%Y%m%d') +rtofsdir = os.environ.get('CALC_TRANSPORT_RTOFS_DIRNAME') +cablefile = os.environ.get('CALC_TRANSPORT_CABLE_FILENAME') +eightmilefile = os.environ.get('CALC_TRANSPORT_EIGHTMILE_FILENAME') + +print('Starting Cable V&V at',datetime.now(),'for',vDate) + + + +if not os.path.exists(cablefile): + print('missing AOML Cable transport file for',vDate) + +#----------------------------------------------- +# read cable transport data from AOML +#----------------------------------------------- + +# read the AOML dataset +names=['year','month','day','transport'] +cable=pd.read_csv(cablefile,comment='%',names=names,delimiter=' ', + skipinitialspace=True,header=None,usecols=list(range(4))) +cable['date']=pd.to_datetime(cable[['year','month','day']]) +cable.index=cable.date +cable['error']=2.0 +del cable['year'], cable['month'], cable['day'], cable['date'] +print(cable) + +#----------------------------------------------- +# full cross-section transport calculation +#----------------------------------------------- +def calc_transport(dates,fcst): + """ + Calculate the transport of water across the Florida Straits + This extracts the section and integrates the flow through it. + """ + transport=[] + fcst_str='f{:03d}'.format(fcst) + cable_loc=np.loadtxt(eightmilefile,dtype='int',usecols=(0,1)) + eightmile_lat = 26.5167 + eightmile_lon = -78.7833%360 + wpb_lat = 26.7153425 + wpb_lon = -80.0533746%360 + cable_angle = math.atan((eightmile_lat-wpb_lat)/(eightmile_lon-wpb_lon)) + g=Geod(ellps='WGS84') + + for date in dates: + print('DATE :', date, ' DATES :',dates) + print('processing',date.strftime('%Y%m%d'),'fcst',fcst) + rundate=date-timedelta(fcst/24.) # calc rundate from fcst and date + ufile=rtofsdir+'/'+rundate.strftime('%Y%m%d')+'/rtofs_glo_3dz_'+fcst_str+'_daily_3zuio.nc' + vfile=rtofsdir+'/'+rundate.strftime('%Y%m%d')+'/rtofs_glo_3dz_'+fcst_str+'_daily_3zvio.nc' + + print(ufile) + print(vfile) + + udata=Dataset(ufile) + vdata=Dataset(vfile) + + lon=udata['Longitude'][:] + lat=udata['Latitude'][:] + depth=udata['Depth'][:] + + usection=np.zeros((depth.shape[0],cable_loc.shape[0])) + vsection=np.zeros((depth.shape[0],cable_loc.shape[0])) + + udata=udata['u'][:].squeeze() + vdata=vdata['v'][:].squeeze() + + for ncol,(row,col) in enumerate(cable_loc): + usection[:,ncol]=udata[:,row,col].filled(fill_value=0.0) + vsection[:,ncol]=vdata[:,row,col].filled(fill_value=0.0) + + lon=lon[cable_loc[:,0],cable_loc[:,1]] + lat=lat[cable_loc[:,0],cable_loc[:,1]] + + # compute the distances along the track + _,_,dist=g.inv(lon[0:-1],lat[0:-1],lon[1:],lat[1:]) + depth=np.diff(depth) + usection=usection[:-1,:-1] + vsection=vsection[:-1,:-1] + + dist,depth=np.meshgrid(dist,depth) + u,v=rotate(usection,vsection,cable_angle) + trans1=(v*dist*depth).sum()/1e6 + #print(date.strftime('%Y-%m-%d'),' transport:',transport,'Sv') + transport.append(trans1) + + return transport + +#----------------------------------------------- +# retrieve model data +#----------------------------------------------- +def get_model(dates,fcsts): + + transport={'dates':dates} + + + for fcst in fcsts: + transport[fcst]=calc_transport(dates,fcst) + + model=pd.DataFrame(transport) + model.index=model.dates + del model['dates'] + #del model['validDates'] + + print(model) + return model +#----------------------------------------------- +# coordinate rotation +#----------------------------------------------- +def rotate(u,v,phi): + # phi is in radians + u2 = u*math.cos(phi) + v*math.sin(phi) + v2 = -u*math.sin(phi) + v*math.cos(phi) + return u2,v2 + +#----------------------------------------------- +if __name__ == "__main__": + + want_date=vDate + DateSet=True + + fcst = int(os.environ.get('CALC_TRANSPORT_LEAD_TIME')) + no_of_fcst_stat_days = int(os.environ.get('CALC_TRANSPORT_STATS_DAY')) + + fcsts=list(range(fcst,fcst+1,24)) + + start_date=want_date + stop_date=want_date + cable=cable[:stop_date] + + # Count the number in the subdirs RTOFS dir + path, dirs, files = next(os.walk(rtofsdir)) + dir_count = len(dirs) + dir_count + + """ + Setup logging + """ + logfile = os.environ.get('CALC_TRANSPORT_LOG_FILE') + + + for end_date in pd.date_range(start_date,stop_date): + dates=pd.date_range(end=end_date,periods=dir_count) + model=get_model(dates,fcsts) + + both=pd.merge(cable,model,left_index=True,right_index=True,how='inner') + print("both :", both) + both=both[both.index.max()-timedelta(no_of_fcst_stat_days):] + + diff=both[fcst] - both.transport + bias=diff.mean() + rmse=mean_squared_error(both.transport,both[fcst])**0.5 + if both[fcst].mean() != 0.0: + scatter_index=100.0*(((diff**2).mean())**0.5 - bias**2)/both.transport.mean() + else: + scatter_index=np.nan + + corr=both[fcst].corr(both.transport) + +# print("BIAS :",bias, "RMSE :",rmse, "CORR :",corr, "SCATTER INDEX :",scatter_index) + + outdir = os.environ.get('OUTPUT_DIR') + + if not os.path.exists(outdir): + print(f"Creating output directory: {outdir}") + os.makedirs(outdir) + + expected_file = os.path.join(outdir,logfile) + print(expected_file) + + with open(expected_file, 'w') as f: + print("BIAS :",bias, "RMSE :",rmse, "CORR :",corr, "SCATTER INDEX :",scatter_index, file=f) diff --git a/parm/use_cases/model_applications/medium_range/PointStat_fcstGFS_obsNAM_Sfc_MultiField_PrepBufr.conf b/parm/use_cases/model_applications/medium_range/PointStat_fcstGFS_obsNAM_Sfc_MultiField_PrepBufr.conf index bf86801b45..224833c82c 100644 --- a/parm/use_cases/model_applications/medium_range/PointStat_fcstGFS_obsNAM_Sfc_MultiField_PrepBufr.conf +++ b/parm/use_cases/model_applications/medium_range/PointStat_fcstGFS_obsNAM_Sfc_MultiField_PrepBufr.conf @@ -130,7 +130,7 @@ OBS_POINT_STAT_INPUT_DIR = {PB2NC_OUTPUT_DIR} POINT_STAT_OUTPUT_DIR = {OUTPUT_BASE}/{OBTYPE} [filename_templates] -PB2NC_INPUT_TEMPLATE = nam.{da_init?fmt=%Y%m%d}/nam.t{da_init?fmt=%2H}z.prepbufr.tm{offset?fmt=%2H} +PB2NC_INPUT_TEMPLATE = nam.{da_init?fmt=%Y%m%d}/nam.t{da_init?fmt=%H}z.prepbufr.tm{offset?fmt=%2H} PB2NC_OUTPUT_TEMPLATE = {valid?fmt=%Y%m%d}/nam.{valid?fmt=%Y%m%d%H}.nc diff --git a/parm/use_cases/model_applications/precipitation/PointStat_fcstMULTI_obsMETAR_PtypeComparisons.conf b/parm/use_cases/model_applications/precipitation/PointStat_fcstMULTI_obsMETAR_PtypeComparisons.conf index aaf0a32504..738d1c8d03 100644 --- a/parm/use_cases/model_applications/precipitation/PointStat_fcstMULTI_obsMETAR_PtypeComparisons.conf +++ b/parm/use_cases/model_applications/precipitation/PointStat_fcstMULTI_obsMETAR_PtypeComparisons.conf @@ -16,10 +16,10 @@ PB2NC_OFFSETS = 0, 12 PB2NC_SKIP_IF_OUTPUT_EXISTS = True PB2NC_INPUT_DIR = {INPUT_BASE}/model_applications/precipitation/PointStat_fcstMULTI_obsMETAR_PtypeComparisons -PB2NC_INPUT_TEMPLATE = nam.{valid?fmt=%Y%m%d}.t{valid?fmt=%2H}z.prepbufr.tm00 +PB2NC_INPUT_TEMPLATE = nam.{valid?fmt=%Y%m%d}.t{valid?fmt=%H}z.prepbufr.tm00 PB2NC_OUTPUT_DIR = {OUTPUT_BASE}/model_applications/precipitation -PB2NC_OUTPUT_TEMPLATE = nam.obsfile_sfc_prwe.{valid?fmt=%m%d%Y}_{valid?fmt=%2H}z.nc +PB2NC_OUTPUT_TEMPLATE = nam.obsfile_sfc_prwe.{valid?fmt=%m%d%Y}_{valid?fmt=%H}z.nc PB2NC_CONFIG_FILE = {PARM_BASE}/met_config/PB2NCConfig_wrapped diff --git a/parm/use_cases/model_applications/s2s/GridStat_SeriesAnalysis_fcstNMME_obsCPC_seasonal_forecast.conf b/parm/use_cases/model_applications/s2s/GridStat_SeriesAnalysis_fcstNMME_obsCPC_seasonal_forecast.conf index 160291463f..6a59ac2da9 100644 --- a/parm/use_cases/model_applications/s2s/GridStat_SeriesAnalysis_fcstNMME_obsCPC_seasonal_forecast.conf +++ b/parm/use_cases/model_applications/s2s/GridStat_SeriesAnalysis_fcstNMME_obsCPC_seasonal_forecast.conf @@ -70,7 +70,7 @@ FCST_IS_PROB = false # Increase verbosity of MET tools #LOG_MET_VERBOSITY=4 -GRID_STAT_OUTPUT_PREFIX = {MODEL}-hindcast_{CURRENT_OBS_NAME}_vs_{OBTYPE}_IC{init?fmt=%Y%b}_V{valid?fmt=%Y%2m%d} +GRID_STAT_OUTPUT_PREFIX = {MODEL}-hindcast_{CURRENT_OBS_NAME}_vs_{OBTYPE}_IC{init?fmt=%Y%b}_V{valid?fmt=%Y%m%d} # sets the desc variable in the SeriesAnalysis config file SERIES_ANALYSIS_DESC = hindcast @@ -137,12 +137,12 @@ SERIES_ANALYSIS_CLIMO_MEAN_INPUT_DIR = # format of filenames # FCST -FCST_GRID_STAT_INPUT_TEMPLATE = nmme_pr_hcst_{init?fmt=%b}IC_{valid?fmt=%2m}_*.nc +FCST_GRID_STAT_INPUT_TEMPLATE = nmme_pr_hcst_{init?fmt=%b}IC_{valid?fmt=%m}_*.nc # ANLYS OBS_GRID_STAT_INPUT_TEMPLATE = obs_cpc_pp.1x1.nc -BOTH_SERIES_ANALYSIS_INPUT_TEMPLATE = grid_stat_{MODEL}-hindcast_precip_vs_{OBTYPE}_IC{init?fmt=%Y%b}_V{valid?fmt=%Y%2m}01_*pairs.nc +BOTH_SERIES_ANALYSIS_INPUT_TEMPLATE = grid_stat_{MODEL}-hindcast_precip_vs_{OBTYPE}_IC{init?fmt=%Y%b}_V{valid?fmt=%Y%m}01_*pairs.nc SERIES_ANALYSIS_OUTPUT_TEMPLATE = series_analysis_{MODEL}_{OBTYPE}_stats_F{lead?fmt=%2m}_{instance?fmt=%s}.nc