1. Overview

1.1. Purpose and organization of the User’s Guide

The goal of this User’s Guide is to equip users with the information needed to use the Model Evaluation Tools (MET) and its companion package METplus Wrappers. MET is a set of verification tools developed and supported to community via the Developmental Testbed Center (DTC) for use by the numerical weather prediction community. METplus Wrappers is a suite of Python wrappers and ancillary scripts to enhance the user’s ability to quickly set-up and run MET. Over the next few years, METplus Wrappers will become the authoritative repository for verification of the Unified Forecast System.

The METplus Wrappers User’s Guide is organized as follows. An overview of METplus Wrappers can be found below. Software Installation contains basic information about how to get started with METplus Wrappers - including system requirements, required software, and how to download METplus Wrappers. System Configuration provides information about configuring your environment and METplus Wrappers installation.

1.2. The Developmental Testbed Center (DTC)

METplus Wrappers has been developed, and will be maintained and enhanced, by the Developmental Testbed Center (DTC; http://www.dtcenter.org/ ). The main goal of the DTC is to serve as a bridge between operations and research and to facilitate the activities of these two important components of the numerical weather prediction (NWP) community. The DTC provides an environment that is functionally equivalent to the operational environment in which the research community can test model enhancements; the operational community benefits from DTC testing and evaluation of models before new models are implemented operationally. METplus Wrappers serves both the research and operational communities in this way - offering capabilities for researchers to test their own enhancements to models and providing a capability for the DTC to evaluate the strengths and weaknesses of advances in NWP prior to operational implementation.

METplus Wrappers will also be available to DTC visitors and the NOAA Unified Forecast System (UFS) and NCAR System for Integrated Modeling of the Atmosphere (SIMA) modeling communities for testing and evaluation of new model capabilities, applications in new environments, and so on. The METplus Wrappers release schedule is coincident with the MET release schedule and the METplus Wrappers major release number is six less than the MET major release number (e.g. MET 8.X is released with METplus Wrappers 2.X).

1.3. METplus Wrappers goals and design philosophy

METplus Wrappers is a Python scripting infrastructure for the MET tools. The primary goal of METplus Wrappers development is to provide MET users with a highly configurable and simple means to perform model verification using the MET tools. Prior to the availability of METplus Wrappers, users who had more complex verifications that required the use of more than one MET tool were faced with setting up multiple MET config files and creating some automation scripts to perform the verification. METplus Wrappers provides the user with the infrastructure to modularly create the necessary steps to perform such verifications.

METplus Wrappers has been designed to be modular and adaptable. This is accomplished through wrapping the MET tools with Python and the use of hierarchical configuration files to enable users to readily customize their verification environments. Wrappers can be run individually, or as a group of wrappers that represent a sequence of MET processes. New wrappers can readily be added to the METplus Wrappers package due to this modular design. Currently, METplus Wrappers can easily be applied by any user on their own computer platform that supports Python 3.6. We have deprecated support to Python 2.7.

The METplus Wrappers code and documentation is maintained by the DTC in Boulder, Colorado. METplus Wrappers is freely available to the modeling, verification, and operational communities, including universities, governments, the private sector, and operational modeling and prediction centers through a publicly accessible GitHub repository. Refer to Getting the METplus Wrappers source code for simple examples of obtaining METplus Wrappers.

1.4. METplus Wrappers Components

The major components of the METplus Wrappers package are METplus Python wrappers to the MET tools, MET configuration files and a hierarchy of METplus Wrappers configuration files. Some Python wrappers do not correspond to a particular MET tool, but wrap utilities to extend METplus functionality.

1.5. METplus Components Python Requirements

METplus Components Python Requirements

Name

Version

METplus Component

Source

Description

Use Cases (only applicable for METplus wrappers component)(followed by python package name)

Python 3.6.3+

METplus wrappers,
METcalcpy,
METplotpy

Python 3.7

METplus wrappers

Multi_Tool: Feature Relative by Lead using Multiple User-Defined Fields (Python 3.7)

cartopy

>=0.18.0

METplus wrappers,
METcalcpy,
METplotpy

https://scitools.org.uk/cartopy/docs/latest/

Designed for
geospatial data
processing in
order to produce
maps and other
geospatial data
analyses

TCGen: Genesis Density Function (GDF) and Track Density Function (TDF) (cartopy)
CyclonePlotter: Extra-TC Tracker and Plotting Capabilities (cartopy)

cfgrib

METplus wrappers

https://pypi.org/project/cfgrib/

map GRIB files
to the NetCDF
Common Data Model
following the
CF Convention
using ecCodes

Multi_Tool: Feature Relative by Lead using Multiple User-Defined Fields (cfgrib)

cmocean

METcalcpy,
METplotpy

https://pypi.org/project/cmocean/

contains colormaps
for commonly-used
oceanographic variables

dateutil

>=2.8

METplus wrappers

https://github.com/dateutil/dateutil/releases

provides powerful
extensions to the
standard datetime
module

Most

eofs

METplus wrappers,
METcalcpy,
METplotpy

https://pypi.org/project/eofs/

empirical orthogonal
functions analysis of
spatial-temporal data

WeatherRegime Calculation: RegridDataPlane, PcpCombine, and WeatherRegime python code (eofs)
WeatherRegime Calculation: GFS and ERA RegridDataPlane, PcpCombine, and WeatherRegime python code (eofs)

h5py

METplus wrappers

https://github.com/h5py/h5py

Pythonic interface
to the HDF5
binary data format

PCPCombine: Python Embedding Use Case (h5py)

imutils

0.5.3

METcalcpy,
METplotpy

https://pypi.org/project/imutils/

A series of convenience
functions to make basic
image processing
functions such as
translation, rotation,
resizing, skeletonization,
displaying Matplotlib
images, sorting contours,
detecting edges,
and much more easier

imageio

METcalcpy,
METplotpy

https://pypi.org/project/imageio/

provides an easy
interface to read
and write a wide
range of image data,
including animated
images, volumetric data,
and scientific formats

lxml

METcalcpy,
METplotpy

https://pypi.org/project/lxml/

a Pythonic binding for
the C libraries
libxml2 and libxslt

matplotlib

>=3.3.4

METplus wrappers,
METcalcpy,
METplotpy

https://matplotlib.org/stable/users/installing/index.html

a comprehensive library
for creating static,
animated, and
interactive visualizations

UserScript: Make OMI plot from calculated MJO indices (obs only) (matplotlib)
TCGen: Genesis Density Function (GDF) and Track Density Function (TDF) (matplotlib)
UserScript: Make a Phase Diagram plot from input RMM or OMI (matplotlib)
UserScript: Make OMI plot from calculated MJO indices (matplotlib)
UserScript: Make RMM plots from calculated MJO indices (matplotlib)
CyclonePlotter: Extra-TC Tracker and Plotting Capabilities (matplotlib)

metcalcpy

METplus wrappers,
METcalcpy,
METplotpy

https://github.com/dtcenter/METcalcpy/releases

a Python version of the
statistics calculation
functionality of
METviewer, METexpress,
plotting packages in
METplotpy and is a
stand-alone package for
any other application

UserScript: Make a Hovmoeller plot (metcalcpy)
UserScript: Make a Cross Spectra plot (metcalcpy)
Grid-Stat: Verification of TC forecasts against merged TDR data (metcalcpy)
UserScript: Calculate the Difficulty Index (metcalcpy)
UserScript: Make zonal and meridonial means (metcalcpy)

metplotpy

METplus wrappers

https://github.com/dtcenter/METplotpy/releases

contains packages for
plotting in METplus as
stand-alone, or part of
METplus use case,
METplus wrappers,
METexpress,
or METviewer

UserScript: Make a Hovmoeller plot (metplotpy)
UserScript: Make a Cross Spectra plot (metplotpy)
UserScript: Calculate the Difficulty Index (metplotpy)
TCGen: Genesis Density Function (GDF) and Track Density Function (TDF) (metplotpy)

metpy

METplus wrappers

https://www.unidata.ucar.edu/software/metpy/

a collection of tools
in Python for reading,
visualizing, and
performing calculations
with weather data

Multi_Tool: Feature Relative by Lead using Multiple User-Defined Fields (metpy)

nc-time-axis

1.4

METplotpy
stratosphere_diagnostics

https://github.com/SciTools/nc-time-axis

extension to cftime
**REQUIRES Python 3.7

netCDF4

>=1.5.4

METplus wrappers,
METcalcpy,
METplotpy

https://unidata.github.io/netcdf4-python/

a Python interface to
the netCDF C library

For using MET Python embedding functionality in use cases

numpy

>=1.19.2

METplus wrappers,
METcalcpy,
METplotpy

https://numpy.org/

NumPy offers
comprehensive
mathematical functions,
random number generators,
linear algebra routines,
Fourier transforms, and more.

For using MET Python embedding functionality in use cases

pandas

>=1.0.5

METplus wrappers,
METcalcpy,
METplotpy

https://pypi.org/project/pandas

a fast, powerful,
flexible and easy to use
open source data analysis
and manipulation tool,
built on top of the
Python programming
language

For using MET Python embedding functionality in use cases

pint

>=0.18

METcalcpy

https://github.com/hgrecco/pint

Python package to define,
operate and manipulate
physical quantities

plotly

>=4.9.0

METcalcpy,
METplotpy

https://github.com/plotly/plotly.py

makes interactive,
publication-quality graphs

psutil

5.7.2

METcalcpy,
METplotpy

https://pypi.org/project/psutil/

Cross-platform lib for
process and system
monitoring in Python

pygrib

METplus wrappers

https://github.com/jswhit/pygrib

for reading/writing
GRIB files

Multi_Tool: Feature Relative by Lead using Multiple User-Defined Fields (pygrib)

pylab

METplus wrappers

https://pypi.org/project/matplotlib/

a convenience module
that bulk imports
matplotlib.pyplot (for
plotting) and NumPy (for
Mathematics and working
with arrays) in a
single name space

WeatherRegime Calculation: RegridDataPlane, PcpCombine, and WeatherRegime python code (pylab)
WeatherRegime Calculation: GFS and ERA RegridDataPlane, PcpCombine, and WeatherRegime python code (pylab)

pymysql

METcalcpy,
METplotpy

https://pypi.org/project/psutil/

a pure-Python MySQL
client library,
based on PEP 249

pyproj

2.3.1

METplus wrappers

https://github.com/pyproj4/pyproj/archive/v2.3.1rel.tar.gz

Python interface to PROJ
(cartographic projections and
coordinate transformations library)

GridStat: Python Embedding to read and process ice cover (pyproj)

pyresample

METplus wrappers

https://github.com/pytroll/pyresample

for resampling geospatial
image data

GridStat: Python Embedding to read and process SST (pyresample)
GridStat: Python Embedding to read and process ice cover (pyresample)
GridStat: Python Embedding for sea surface salinity using level 3, 1 day composite obs (pyresample)
GridStat: Python Embedding for sea surface salinity using level 3, 8 day mean obs (pyresample)

pytest

>=5.2.1

METcalcpy,
METplotpy

https://github.com/pytest-dev/pytest/archive/5.2.1.tar.gz

a mature full-featured
Python testing tool that
helps you write better
programs

python-kaleido

>=0.2.1

METcalcpy,
METplotpy

https://pypi.org/project/kaleido/

provides a low-level
Python API that is
designed to be used by
high-level plotting
libraries like Plotly

pyyaml

>=5.3.1

METcalcpy,
METplotpy

https://github.com/yaml/pyyaml

a full-featured YAML
framework for the Python
programming language

scikit-image

>=0.16.2

METcalcpy,
METplotpy

https://scikit-image.org

a collection of
algorithms for image
processing

scikit-learn

0.23.2

METplus wrappers,
METcalcpy,
METplotpy

https://github.com/scikit-learn/scikit-learn/releases

Open Source library for
Machine Learning in Python

GridStat: Python Embedding to read and process SST (scikit-learn)
GridStat: Python Embedding to read and process ice cover (scikit-learn)
GridStat: Python Embedding for sea surface salinity using level 3, 1 day composite obs (scikit-learn)
GridStat: Python Embedding for sea surface salinity using level 3, 8 day mean obs (scikit-learn)

scipy

>=1.5.1

METplus wrappers,
METcalcpy,
METplotpy

https://www.scipy.org/

wraps highly-optimized
implementations written
in low-level languages
like Fortran, C, and C++

Blocking Calculation: ERA RegridDataPlane, PcpCombine, and Blocking python code (scipy)
WeatherRegime Calculation: RegridDataPlane, PcpCombine, and WeatherRegime python code (scipy)
UserScript: Make OMI plot from calculated MJO indices (obs only) (scipy)
WeatherRegime Calculation: GFS and ERA RegridDataPlane, PcpCombine, and WeatherRegime python code (scipy)
Blocking Calculation: GFS and ERA RegridDataPlane, PcpCombine, and Blocking python code (scipy)
UserScript: Make a Phase Diagram plot from input RMM or OMI (scipy)
UserScript: Make OMI plot from calculated MJO indices (scipy)
UserScript: Make RMM plots from calculated MJO indices (scipy)

sklearn

METplus wrappers

https://www.kite.com/python/docs/sklearn

Simple and efficient
tools for predictive
data analysis

WeatherRegime Calculation: RegridDataPlane, PcpCombine, and WeatherRegime python code (sklearn)
WeatherRegime Calculation: GFS and ERA RegridDataPlane, PcpCombine, and WeatherRegime python code (sklearn)

statsmodels

>=0.11.1

METcalcpy,
METplotpy

https://www.statsmodels.org/

provides classes and
functions for the
estimation of many
different statistical
models, as well as for
conducting statistical
tests, and statistical
data exploration

xarray

>=0.17.0

METplus wrappers,
METcalcpy,
METplotpy

https://xarray.pydata.org/en/v0.17.0/

makes working with
labelled
multi-dimensional arrays
simple, efficient,
and fun

For using MET Python embedding functionality in use cases

xesmf

METplus wrappers

NOTE: The xesmf package
will not be installed
on WCOSS2 and there is
an open GitHub issue to
replace the package in
the use case that uses it:
https://github.com/dtcenter/METplus/issues/1314

for regridding

PlotDataPlane: Python Embedding of tripolar coordinate file (xesmf)

yaml

METcalcpy,
METplotpy

https://pypi.org/project/PyYAML/

to load, read, and write
YAML files with PyYAML

1.6. METplus Release Notes

Users can view the Stages of the METplus Release Cycle section of the Release Guide for descriptions of the development releases (including beta releases and release candidates), official releases, and bugfix releases for the METplus Components.

1.6.2. METplus Wrappers Release Notes

When applicable, release notes are followed by the GitHub issue number which describes the bugfix, enhancement, or new feature: https://github.com/dtcenter/METplus/issues

1.6.2.1. METplus Version 4.1.3 Release Notes (2022-07-27)

  • Bugfixes:

    • Set Point2Grid -adp and -qc arguments properly (METplus #1623)

    • Reconcile setting of METPLOTPY_BASE for use cases (METplus #1713)

    • Allow NA value for <TOOL-NAME>_CLIMO_[MEAN/STDEV]_DAY_INTERVAL (METplus #1653)

    • Add missing brackets around list variable values for StatAnalysis wrapper (METplus #1641)

    • Phase Diagram use case writes all output into OUTPUT_BASE instead of INPUT_BASE (METplus #1706)

1.6.2.2. METplus Version 4.1.2 Release Notes (2022-05-16)

  • Bugfixes:

    • Add logic to catch error thrown when wrapper has been disabled and update documentation to include instructions to disable UserScript wrapper (METplus-Internal #33)

1.6.2.3. METplus Version 4.1.1 Release Notes (2022-04-21)

  • Bugfixes:

    • Fix reset of arguments for some wrappers (i.e. GenEnsProd) after each run (#1555)

    • Fix PCPCombine extra options removal of semi-colon (#1534)

    • Fix inconsistent Weather Regime classification numbers when the forecast is reordered (#1553)

1.6.2.4. METplus Version 4.1.0 Release Notes (2022-03-14)

  • Enhancements:

    • General:

      • 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)

    • PointStat:

      • Make output_flag.orank configurable for Point-Stat (#1103)

      • Added support for setting obs_quality_inc/exc in PointStat (#1213)

    • GridStat:

      • Add Grid-Stat configuration options for distance_map dictionary (#1089)

    • EnsembleStat:

      • 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)

    • GenEnsProd:

      • Add support for the normalize option to the Gen-Ens-Prod wrapper (#1445)

    • TCPairs:

      • 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)

    • TCGen:

      • Enhance TCGen wrapper to add support for new configurations (#1273)

    • SeriesAnalysis:

      • 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:

      • Add support for extra field options in RegridDataPlane wrapper (#924)

    • PCPCombine:

      • 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)

    • GenVxMask:

      • Update GenVxMask wrapper to require setting -type (#960)

    • UserScript:

      • Enhance UserScript to get a list of files that match the run times instead of using a wildcard (#1002)

    • ExtractTiles:

      • 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)

  • New Wrappers:

  • New Use Cases:

    • MET Tool Wrapper:

      • 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)

    • Marine and Cryosphere:

      • 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)

    • Medium Range:

      • Feature Relative using MTD output for feature centroid lat/lon (#641)

    • 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)

  • 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)

1.6.2.5. METplus Version 4.0.0 Release Notes (2021-05-10)

  • Bugfixes:

    • Changed default values in wrapped MET config files to align with actual default values in MET config files (Reconcile Default Values)

    • Fix bug causing GridStat fatal error (#740)

    • Add support for comparing inputs using a mix of python embedding and non-embedding (#684)

    • Fix quick search links (#687)

    • Align the user guide with get_relativedelta() in time_util.py (#579)

    • Fix CyclonePlotter cartopy mapping issues (#850, #803)

  • Enhancements:

    • Rename master_metplus.py script to run_metplus.py (#794)

    • Update setting of environment variables for MET config files to add support for all to METPLUS_ vars (#768)

    • Add support for many commonly changed MET config variables (#779, #755, #621, #620)

    • Add support for a UserScript wrapper (#723)

    • Create use case subdirectories (#751)

    • Implement [INIT/VALID]EXCLUDE for time looping (#307)

    • Add files to allow installation of METplus wrappers as a Python package (beta) (#282)

    • Generate PDF of User’s Guide (#551)

    • Add support for MET tc_gen changes in METplus (#871, (#801)

    • Add support for 2 fields with same name and different levels in SeriesBy cases (#852)

    • Enhance PCPCombine wrapper to be able to process multiple fields in one command (#718)

    • Update TCStat config options and wrappers to filter data by excluding strings (#857)

    • Support METplus to run from a driver script (#569)

    • Refactor field info parsing to read once then substitute time info for each run time (#880)

    • Enhance Python embedding logic to allow multiple level values (#719)

    • Enhance Python embedding logic to allow multiple fcst and obs variable levels (#708)

    • Add support for a group of files covering multiple run times for a single analysis in GridDiag (#733)

    • Enhance ascii2nc python embedding script for TC dropsonde data (#734, #731)

    • Support additional configuration variables in EnsembleStat (#748)

    • Ensure backwards compatibility for MET config environment variables (#760)

    • Combine configuration file sections into single config section (#777)

    • Add support for skipping existing output files for all wrappers (#711)

    • Add support for multiple instance of the same tool in the process list (#670)

    • Add GFDL build support in build_components (#614)

    • Decouple PCPCombine, RegridDataPlane, and GridStat wrappers behavior (#602)

    • StatAnalysis run without filtering or config file (#625)

    • Enhance User Diagnostic Feature Relative use case to Run Multiple Diagnostics (#536)

    • Enhance PyEmbedIngest to run RegridDataPlane over Multiple Fields in One Call (#549)

    • Filename templates that have other arguments besides a filename for python embedding fails (#581)

    • Add more logging to tc_gen_wrapper (#576)

    • Prevent crash when improperly formatted filename template is used (#674)

  • New Wrappers:

    • PlotDataPlane

    • UserScript

    • METdbLoad

  • New Use Cases:

    • Air Quality and Comp: EnsembleStat_fcstICAP_obsMODIS_aod

    • Medium Range: UserScript_fcstGEFS_Difficulty_Index

    • Convection Allowing Models: MODE_fcstFV3_obsGOES_BrightnessTemp

    • Convection Allowing Models: MODE_fcstFV3_obsGOES_BrightnessTempObjs

    • Convection Allowing Models: GridStat_fcstFV3_obsGOES_BrightnessTempDmap

    • Data Assimilation: StatAnalysis_fcstHAFS_obsPrepBufr_JEDI_IODA_interface

    • Medium Range: SeriesAnalysis_fcstGFS_obsGFS_FeatureRelative_SeriesByLead_PyEmbed_Multiple_Diagnostics

    • Precipitation: EnsembleStat_fcstWOFS_obsWOFS

    • Seasonal to Subseasonal: TCGen_fcstGFSO_obsBDECKS_GDF_TDF

    • Seasonal to Subseasonal: UserScript_fcstGFS_obsERA_Blocking

    • Seasonal to Subseasonal: UserScript_obsERA_obsOnly_Blocking

    • Seasonal to Subseasonal: UserScript_obsERA_obsOnly_WeatherRegime

    • Seasonal to Subseasonal: UserScript_obsPrecip_obsOnly_Hovmoeller

    • Seasonal to Subseasonal: UserScript_obsPrecip_obsOnly_CrossSpectraPlot

    • TC and Extra TC: CyclonePlotter_fcstGFS_obsGFS_OPC

    • TC and Extra TC: UserScript_ASCII2NC_PointStat_fcstHAFS_obsFRD_NetCDF

    • TC and Extra TC: GridStat_fcstHAFS_obsTDR_NetCDF

    • Marine and Coastal: PlotDataPlane_obsHYCOM_coordTripolar

    • MET Tool Wrapper: METdbLoad/METdbLoad

    • MET Tool Wrapper: PlotDataPlane/PlotDataPlane_grib1

    • MET Tool Wrapper: PlotDataPlane/PlotDataPlane_netcdf

    • MET Tool Wrapper: PlotDataPlane/PlotDataPlane_python_embedding

    • MET Tool Wrapper: GridStat/GridStat_python_embedding

    • MET Tool Wrapper: PointStat/PointStat_python_embedding

    • MET Tool Wrapper: MODE/MODE_python_embedding

    • MET Tool Wrapper: PyEmbedIngest_multi_field_one_file

  • Internal:

    • Append semi-colon to end of _OPTIONS variables if not found (#707)

    • Ensure all wrappers follow the same conventions (#76)

    • Refactor SeriesBy and ExtractTiles wrappers (#310)

    • Refactor SeriesByLead wrapper (#671, #76)

    • Add the pull request approval process steps to the Contributor’s Guide (#429)

    • Remove jlogger and postmsg (#470)

    • Add unit tests for set_met_config_X functions in CommandBuilder (#682)

    • Define a common set of GitHub labels that apply to all of the METplus component repos (#690)

    • Transition from using Travis CI to GitHub Actions (#721)

    • Improve workflow formatting in Contributers Guide (#688)

    • Change INPUT_BASE to optional (#679)

    • Refactor TCStat and ExtractTiles wrappers to conform to current standards

    • Automate release date (#665)

    • Add documentation for input verification datasets (#662)

    • Add timing tests for Travis/Docker (#649)

    • Set up encrypted credentials in Travis to push to DockerHub (#634)

    • Add to User’s Guide: using environment variables in METplus configuration files (#594)

    • Cleanup version info (#651)

    • Fix Travis tests for pull requests from forks (#659)

    • Enhance the build_docker_images.sh script to support TravisCI updates (#636)

    • Reorganize use case tests so users can add new cases easily (#648)

    • Investigate how to add version selector to documentation (#653)

    • Docker push pull image repository (#639)

    • Tutorial Proofreading (#534)

    • Update METplus data container logic to pull tarballs from dtcenter.org instead of GitHub release assets (#613)

    • Convert Travis Docker files (automated builds) to use Dockerhub data volumes instead of tarballs (#597)

    • Migrate from travis-ci.org to travis-ci.com (#618)

    • Migrate Docker run commands to the METplus ci/jobs scripts/files (#607)

    • Add stage to Travis to update or create data volumes when new sample data is available (#633)

    • Docker data caching (#623)

    • Tutorial testing on supported platforms (#468)

    • Add additional Branch support to the Travis CI pipeline (#478)

    • Change $DOCKER_WORK_DIR from /metplus to /root to be consistent with METplus tutorial (#595)

    • Add all use_cases to automated tests (eg Travis) (#571)

    • Add support to run METplus tests against multiple version of Python (#483)

    • Enhanced testing to use Docker data volumes to supply truth data for output comparisons (#567)

    • Update manage externals for beta5 versions (#832)

    • Create a new METplus GitHub issue template for “New Use Case” (#726)

1.7. Future development plans

METplus Wrappers is an evolving application. New capabilities are planned in controlled, successive version releases that are synchronized with MET releases. Software bugs and user-identified problems will be documented using GitHub issues and fixed either in the next bugfix or official release. Future METplus Wrappers development plans are based on several contributing factors, including the needs of both the operational and research community. Issues that are in the development queue detailed in the “Issues” section of the GitHub repository. Please create a post in the METplus GitHub Discussions Forum with any questions.

1.8. Code support

Support for METplus Wrappers is provided through the METplus GitHub Discussions Forum. We will endeavor to respond to requests for help in a timely fashion. In addition, information about METplus Wrappers and tools that can be used with MET are provided on the MET Users web page.

We welcome comments and suggestions for improvements to METplus Wrappers, especially information regarding errors. Comments may be submitted using the MET Feedback form available on the MET website. In addition, comments on this document would be greatly appreciated. While we cannot promise to incorporate all suggested changes, we will certainly take all suggestions into consideration.

METplus Wrappers is a “living” set of wrappers and configuration files. Our goal is to continually enhance it and add to its capabilities. Because our time, resources, and talents can at times be limited, we welcome contributed code for future versions of METplus. These contributions may represent new use cases or new plotting functions. For more information on contributing code to METplus Wrappers, please create a post in the METplus GitHub Discussions Forum.