Note
Go to the end to download the full example code.
Grid-Stat, Stat-Analysis, Data-Ingest: CREDIT and GFS statistics and Data Download
model_applications/medium_range/GridStat_fcstCREDIT_GFS_obsGFS_6hrRealtime.conf
Scientific Objective
This use case is an example for verification within RAL to illustrate how to compare two models and also how to download data automatically. The use case was originally designed to be run in real-time using the now keyword in VALID_BEG and VALID_END. However, a specified date is used in this example for our automated testing. The case demonstrates how to run statistics comparing two models, NSF NCAR Community Research Earth Digital Intelligence Twin (CREDIT) and GFS for both the surface and upper air evaluation. Surface and upper air statistics are run separately since they are stored in separate observation files.
Version Added
METplus version 6.2
Datasets
Forecast: CREDIT ~0.28 degree model and GFS 0.25 degree model
Observation: GFS Analysis
Climatology: None
Location: The CREDIT model data required for this use case can be found in a sample data tarball. Each use case category will have one or more sample data tarballs. It is only necessary to download the tarball with the use case’s dataset and not the entire collection of sample data. Click here to access the METplus releases page and download sample data for the appropriate release: https://github.com/dtcenter/METplus/releases This tarball should be unpacked into the directory that you will set the value of INPUT_BASE. See Running METplus section for more information.
The GFS model data and GDAS observations are downloaded automatically. Make sure you have an internet connection.
METplus Components
This use case calls DataIngest once, GridStat 4 times and StatAnalysis once. GridStat has 4 calls, 2 for the CREDIT model and 2 for the GFS using surface and upper air observations respectively.
METplus Workflow
Beginning time (VALID_BEG): 2025-09-24 00Z
End time (VALID_END): 2025-09-24 06Z
Increment between beginning and end times (VALID_INCREMENT): 6 hours
Sequence of forecast leads to process (LEAD_SEQ): 6, 12
The DataIngest and GridStat tools are run for each time, whereas StatAnalysis is run once. This example loops by valid time. It processes 2 lead times for 2 valid times with a total of 4 runs. The times are listed below.
METplus Configuration
METplus first loads all of the configuration files found in parm/metplus_config, then it loads any configuration files passed to METplus via the command line, e.g. parm/use_cases/model_applications/medium_range/GridStat_fcstCREDIT_GFS_obsGFS_6hrRealtime.conf
[config]
# For additional information, please see the METplus Users Guide.
# https://metplus.readthedocs.io/en/latest/Users_Guide
###
# Processes to run
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#process-list
###
PROCESS_LIST = DataIngest, GridStat(credit_surface), GridStat(credit_upper_air), GridStat(gfs_surface), GridStat(gfs_upper_air), StatAnalysis
###
# Time Info
# LOOP_BY options are INIT, VALID, RETRO, and REALTIME
# If set to INIT or RETRO:
# INIT_TIME_FMT, INIT_BEG, INIT_END, and INIT_INCREMENT must also be set
# If set to VALID or REALTIME:
# VALID_TIME_FMT, VALID_BEG, VALID_END, and VALID_INCREMENT must also be set
# LEAD_SEQ is the list of forecast leads to process
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#timing-control
###
LOOP_BY = VALID
VALID_TIME_FMT = %Y%m%d%H
VALID_BEG = 2025092400
VALID_END = 2025092406
VALID_INCREMENT = 6H
LEAD_SEQ = begin_end_incr(6, 12, 6)
###
# DataIngest File I/O for DataIngets, PB2NC, and GridStat
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info
###
DATA_INGEST_1_INPUT_TEMPLATE = https://dtcenter.ucar.edu/dfiles/code/METplus/DataIngest_input/GFS_analysis/{valid?fmt=%Y%m%d}/gfs_anal_{valid?fmt=%Y%m%d%H}.sfcanl.nc
DATA_INGEST_1_OUTPUT_TEMPLATE = {OUTPUT_BASE}/data_ingest/GFS_analysis/{valid?fmt=%Y%m%d}/gfs_anal_{valid?fmt=%Y%m%d%H}.sfcanl.nc
DATA_INGEST_1_SKIP_IF_OUTPUT_EXISTS = True
DATA_INGEST_1_AUTO_DECOMPRESS = False
DATA_INGEST_2_INPUT_TEMPLATE = https://dtcenter.ucar.edu/dfiles/code/METplus/DataIngest_input/GFS_analysis/{valid?fmt=%Y%m%d}/gfs.{valid?fmt=%Y%m%d%H}.pgrb2.0p25.anl
DATA_INGEST_2_OUTPUT_TEMPLATE = {OUTPUT_BASE}/data_ingest/GFS_analysis/{valid?fmt=%Y%m%d}/gfs.{valid?fmt=%Y%m%d%H}.pgrb2.0p25.anl
DATA_INGEST_2_SKIP_IF_OUTPUT_EXISTS = True
DATA_INGEST_2_AUTO_DECOMPRESS = False
DATA_INGEST_3_INPUT_TEMPLATE = https://dtcenter.ucar.edu/dfiles/code/METplus/DataIngest_input/GFS/{init?fmt=%Y%m%d%H}/gfs.t{init?fmt=%H}z.sfluxgrbf{lead?fmt=%HHH}.grib2
DATA_INGEST_3_OUTPUT_TEMPLATE = {OUTPUT_BASE}/data_ingest/GFS/{init?fmt=%Y%m%d%H}/gfs.t{init?fmt=%H}z.sfluxgrbf{lead?fmt=%HHH}.grib2
DATA_INGEST_3_SKIP_IF_OUTPUT_EXISTS = True
DATA_INGEST_3_AUTO_DECOMPRESS = False
DATA_INGEST_4_INPUT_TEMPLATE = https://dtcenter.ucar.edu/dfiles/code/METplus/DataIngest_input/GFS/{init?fmt=%Y%m%d%H}/gfs.t{init?fmt=%H}z.pgrb2.0p25.f{lead?fmt=%HHH}
DATA_INGEST_4_OUTPUT_TEMPLATE = {OUTPUT_BASE}/data_ingest/GFS/{init?fmt=%Y%m%d%H}/gfs.t{init?fmt=%H}z.pgrb2.0p25.f{lead?fmt=%HHH}
DATA_INGEST_4_SKIP_IF_OUTPUT_EXISTS = True
DATA_INGEST_4_AUTO_DECOMPRESS = False
SURFACE_OBS_INPUT_DIR =
SURFACE_OBS_INPUT_TEMPLATE = {DATA_INGEST_1_OUTPUT_TEMPLATE}
UA_OBS_INPUT_DIR =
UA_OBS_INPUT_TEMPLATE = {DATA_INGEST_2_OUTPUT_TEMPLATE}
CREDIT_DIR = {INPUT_BASE}/model_applications/medium_range/PointStat_fcstCREDIT_GFS_obsGDAS_6hrRealtime/creditout/6h
CREDIT_TEMPLATE = {init?fmt=%Y%m%d%H}/{init?fmt=%Y-%m-%dT%H}Z/pred_{init?fmt=%Y-%m-%dT%H}Z_{lead?fmt=%HHH}.nc
###
# GridStat Common Settings
# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#gridstat
###
OBTYPE = GFS
FCST_IS_PROB = false
GRID_STAT_ONCE_PER_FIELD = False
GRID_STAT_CONFIG_FILE ={PARM_BASE}/met_config/GridStatConfig_wrapped
# CREDIT Grid because it's the coarsest
#GRID_STAT_REGRID_TO_GRID = /glade/derecho/scratch/jimenez/creditout/demo_nrt/6h/2025092400/2025-09-24T00Z/pred_2025-09-24T00Z_006.nc
GRID_STAT_REGRID_TO_GRID = "latlon 1280 640 -89.784877 0.000000 0.278674 0.281250"
GRID_STAT_REGRID_METHOD = BILIN
GRID_STAT_REGRID_WIDTH = 2
GRID_STAT_OUTPUT_FLAG_CTC = STAT
GRID_STAT_OUTPUT_FLAG_CTS = STAT
GRID_STAT_OUTPUT_FLAG_CNT = STAT
GRID_STAT_OUTPUT_FLAG_SL1L2 = STAT
GRID_STAT_NC_PAIRS_FLAG_LATLON = FALSE
GRID_STAT_NC_PAIRS_FLAG_RAW = FALSE
GRID_STAT_NC_PAIRS_FLAG_DIFF = FALSE
GRID_STAT_NC_PAIRS_FLAG_CLIMO = FALSE
#GRID_STAT_NC_PAIRS_FLAG_CLIMO_CDP = FALSE
#GRID_STAT_NC_PAIRS_FLAG_WEIGHT = FALSE
#GRID_STAT_NC_PAIRS_FLAG_NBRHD = FALSE
#GRID_STAT_NC_PAIRS_FLAG_FOURIER = FALSE
#GRID_STAT_NC_PAIRS_FLAG_GRADIENT = FALSE
#GRID_STAT_NC_PAIRS_FLAG_DISTANCE_MAP = FALSE
GRID_STAT_NC_PAIRS_FLAG_APPLY_MASK = FALSE
#GRID_STAT_NC_PAIRS_FLAG_SEEPS =
# StatAnalysis Common Settings
###
# StatAnalysis File I/O
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info
###
MODEL1_STAT_ANALYSIS_LOOKIN_DIR = {OUTPUT_BASE}/grid_stat/CREDIT/6h
MODEL2_STAT_ANALYSIS_LOOKIN_DIR = {OUTPUT_BASE}/grid_stat/GFS
STAT_ANALYSIS_OUTPUT_DIR = {OUTPUT_BASE}/StatAnalysis/6h
MODEL1_STAT_ANALYSIS_OUT_STAT_TEMPLATE = {model?fmt=%s}_GFS_{fcst_valid_beg?fmt=%Y%m%d%H}_{fcst_valid_end?fmt=%Y%m%d%H}_allleads
MODEL2_STAT_ANALYSIS_OUT_STAT_TEMPLATE = {MODEL1_STAT_ANALYSIS_OUT_STAT_TEMPLATE}
###
# StatAnalysis Settings
# https://metplus.readthedocs.io/en/latest/Users_Guide/wrappers.html#statanalysis
###
STAT_ANALYSIS_CONFIG_FILE = {PARM_BASE}/met_config/STATAnalysisConfig_wrapped
MODEL1 = CREDIT
MODEL2 = GFS
# Stat-Analysis Jobs
STAT_ANALYSIS_JOB1 = -job aggregate_stat -line_type SL1L2 -out_line_type CNT -by FCST_VAR,FCST_LEAD,VX_MASK -out_stat [out_stat_file]_allValidHours_CNT.stat
STAT_ANALYSIS_JOB2 = -job aggregate_stat -line_type CTC -out_line_type CTS -by FCST_VAR,VX_MASK,FCST_LEAD,FCST_THRESH -out_stat [out_stat_file]_allValidHours_CTS.stat
MODEL_LIST = {MODEL1},{MODEL2}
GROUP_LIST_ITEMS =
LOOP_LIST_ITEMS = MODEL_LIST
[credit_surface]
###
# GridStat File I/O
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info
###
FCST_GRID_STAT_INPUT_DIR = {CREDIT_DIR}
FCST_GRID_STAT_INPUT_TEMPLATE = {CREDIT_TEMPLATE}
OBS_GRID_STAT_INPUT_DIR = {SURFACE_OBS_INPUT_DIR}
OBS_GRID_STAT_INPUT_TEMPLATE = {SURFACE_OBS_INPUT_TEMPLATE}
GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE}/grid_stat/CREDIT/6h
GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}
GRID_STAT_OUTPUT_PREFIX = CREDIT_surface
###
# GridStat Field Info
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#field-info
###
OBS_GRID_STAT_FILE_TYPE = NETCDF_NCCF
FCST_GRID_STAT_VAR1_NAME = t2m
FCST_GRID_STAT_VAR1_LEVELS = "(0,*,*)"
FCST_GRID_STAT_VAR1_THRESH = >273
FCST_GRID_STAT_VAR1_OPTIONS = set_attr_lead = "{lead?fmt=%HH}"; set_attr_name = "TMP";
OBS_GRID_STAT_VAR1_NAME = tmp2m
OBS_GRID_STAT_VAR1_LEVELS = "(0,*,*)"
OBS_GRID_STAT_VAR1_THRESH = >273
OBS_GRID_STAT_VAR1_OPTIONS = set_attr_name = "TMP";
FCST_GRID_STAT_VAR2_NAME = Q
FCST_GRID_STAT_VAR2_LEVELS = "(0,15,*,*)"
FCST_GRID_STAT_VAR2_OPTIONS = set_attr_lead = "{lead?fmt=%HH}"; set_attr_name = "SPFH";
OBS_GRID_STAT_VAR2_NAME = spfh2m
OBS_GRID_STAT_VAR2_LEVELS = "(0,*,*)"
OBS_GRID_STAT_VAR2_OPTIONS = set_attr_name = "SPFH";
MODEL = CREDIT
[credit_upper_air]
###
# GridStat File I/O
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info
###
FCST_GRID_STAT_INPUT_DIR = {CREDIT_DIR}
FCST_GRID_STAT_INPUT_TEMPLATE = {CREDIT_TEMPLATE}
OBS_GRID_STAT_INPUT_DIR = {UA_OBS_INPUT_DIR}
OBS_GRID_STAT_INPUT_TEMPLATE = {UA_OBS_INPUT_TEMPLATE}
GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE}/grid_stat/CREDIT/6h
GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}
GRID_STAT_OUTPUT_PREFIX = CREDIT_upper_air
###
# GridStat Field Info
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#field-info
###
FCST_GRID_STAT_VAR1_NAME = Z500
FCST_GRID_STAT_VAR1_LEVELS = "(0,*,*)"
FCST_GRID_STAT_VAR1_OPTIONS = convert(x) = x / 9.81; set_attr_lead = "{lead?fmt=%HH}"; set_attr_units = "gpm";
OBS_GRID_STAT_VAR1_NAME = HGT
OBS_GRID_STAT_VAR1_LEVELS = P500
OBS_GRID_STAT_VAR1_OPTIONS = set_attr_name = "Z500";
FCST_GRID_STAT_VAR2_NAME = T500
FCST_GRID_STAT_VAR2_LEVELS = "(0,*,*)"
FCST_GRID_STAT_VAR2_OPTIONS = set_attr_lead = "{lead?fmt=%HH}";
OBS_GRID_STAT_VAR2_NAME = TMP
OBS_GRID_STAT_VAR2_LEVELS = P500
OBS_GRID_STAT_VAR2_OPTIONS = set_attr_name = "T500";
MODEL = CREDIT
[gfs_surface]
###
# GridStat File I/O
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info
###
FCST_GRID_STAT_INPUT_DIR =
FCST_GRID_STAT_INPUT_TEMPLATE = {DATA_INGEST_3_OUTPUT_TEMPLATE}
OBS_GRID_STAT_INPUT_DIR = {SURFACE_OBS_INPUT_DIR}
OBS_GRID_STAT_INPUT_TEMPLATE = {SURFACE_OBS_INPUT_TEMPLATE}
GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE}/grid_stat/GFS
GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}
GRID_STAT_OUTPUT_PREFIX = GFS_surface
###
# GridStat Field Info
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#field-info
###
OBS_GRID_STAT_FILE_TYPE = NETCDF_NCCF
FCST_GRID_STAT_VAR1_NAME = TMP
FCST_GRID_STAT_VAR1_LEVELS = Z2
FCST_GRID_STAT_VAR1_THRESH = >273
OBS_GRID_STAT_VAR1_NAME = tmp2m
OBS_GRID_STAT_VAR1_LEVELS = "(0,*,*)"
OBS_GRID_STAT_VAR1_THRESH = >273
OBS_GRID_STAT_VAR1_OPTIONS = set_attr_name = "TMP";
FCST_GRID_STAT_VAR2_NAME = SPFH
FCST_GRID_STAT_VAR2_LEVELS = Z2
OBS_GRID_STAT_VAR2_NAME = spfh2m
OBS_GRID_STAT_VAR2_LEVELS = "(0,*,*)"
OBS_GRID_STAT_VAR2_OPTIONS = set_attr_name = "SPFH";
MODEL = GFS
[gfs_upper_air]
###
# GridStat File I/O
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#directory-and-filename-template-info
###
FCST_GRID_STAT_INPUT_DIR =
FCST_GRID_STAT_INPUT_TEMPLATE = {DATA_INGEST_4_OUTPUT_TEMPLATE}
OBS_GRID_STAT_INPUT_DIR = {UA_OBS_INPUT_DIR}
OBS_GRID_STAT_INPUT_TEMPLATE = {UA_OBS_INPUT_TEMPLATE}
GRID_STAT_OUTPUT_DIR = {OUTPUT_BASE}/grid_stat/GFS
GRID_STAT_OUTPUT_TEMPLATE = {init?fmt=%Y%m%d%H}
GRID_STAT_OUTPUT_PREFIX = GFS_upper_air
###
# GridStat Field Info
# https://metplus.readthedocs.io/en/latest/Users_Guide/systemconfiguration.html#field-info
###
FCST_GRID_STAT_VAR1_NAME = HGT
FCST_GRID_STAT_VAR1_LEVELS = P500
FCST_GRID_STAT_VAR1_OPTIONS = set_attr_name = "Z500";
OBS_GRID_STAT_VAR1_NAME = HGT
OBS_GRID_STAT_VAR1_LEVELS = P500
OBS_GRID_STAT_VAR1_OPTIONS = set_attr_name = "Z500";
FCST_GRID_STAT_VAR2_NAME = TMP
FCST_GRID_STAT_VAR2_LEVELS = P500
FCST_GRID_STAT_VAR2_OPTIONS = set_attr_name = "T500";
OBS_GRID_STAT_VAR2_NAME = TMP
OBS_GRID_STAT_VAR2_LEVELS = P500
OBS_GRID_STAT_VAR2_OPTIONS = set_attr_name = "T500";
MODEL = GFS
MET Configuration
METplus sets environment variables based on user settings in the METplus configuration file. See How METplus controls MET config file settings for more details.
YOU SHOULD NOT SET ANY OF THESE ENVIRONMENT VARIABLES YOURSELF! THEY WILL BE OVERWRITTEN BY METPLUS WHEN IT CALLS THE MET TOOLS!
If there is a setting in the MET configuration file that is currently not supported by METplus you’d like to control, please refer to: Overriding Unsupported MET config file settings
GridStatConfig_wrapped
////////////////////////////////////////////////////////////////////////////////
//
// Grid-Stat configuration file.
//
// For additional information, see the MET_BASE/config/README file.
//
////////////////////////////////////////////////////////////////////////////////
//
// Output model name to be written
//
// model =
${METPLUS_MODEL}
//
// Output description to be written
// May be set separately in each "obs.field" entry
//
// desc =
${METPLUS_DESC}
//
// Output observation type to be written
//
// obtype =
${METPLUS_OBTYPE}
////////////////////////////////////////////////////////////////////////////////
//
// Verification grid
//
// regrid = {
${METPLUS_REGRID_DICT}
////////////////////////////////////////////////////////////////////////////////
//censor_thresh =
${METPLUS_CENSOR_THRESH}
//censor_val =
${METPLUS_CENSOR_VAL}
//cat_thresh =
${METPLUS_CAT_THRESH}
cnt_thresh = [ NA ];
cnt_logic = UNION;
wind_thresh = [ NA ];
wind_logic = UNION;
eclv_points = 0.05;
//nc_pairs_var_name =
${METPLUS_NC_PAIRS_VAR_NAME}
nc_pairs_var_suffix = "";
//hss_ec_value =
${METPLUS_HSS_EC_VALUE}
rank_corr_flag = FALSE;
//
// Forecast and observation fields to be verified
//
fcst = {
${METPLUS_FCST_FILE_TYPE}
${METPLUS_FCST_FIELD}
${METPLUS_FCST_CLIMO_MEAN_DICT}
${METPLUS_FCST_CLIMO_STDEV_DICT}
}
obs = {
${METPLUS_OBS_FILE_TYPE}
${METPLUS_OBS_FIELD}
${METPLUS_OBS_CLIMO_MEAN_DICT}
${METPLUS_OBS_CLIMO_STDEV_DICT}
}
////////////////////////////////////////////////////////////////////////////////
//
// Climatology mean data
//
//climo_mean = {
${METPLUS_CLIMO_MEAN_DICT}
//climo_stdev = {
${METPLUS_CLIMO_STDEV_DICT}
//
// May be set separately in each "obs.field" entry
//
//climo_cdf = {
${METPLUS_CLIMO_CDF_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Verification masking regions
//
// mask = {
${METPLUS_MASK_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Confidence interval settings
//
ci_alpha = [ 0.05 ];
boot = {
interval = PCTILE;
rep_prop = 1.0;
n_rep = 0;
rng = "mt19937";
seed = "";
}
////////////////////////////////////////////////////////////////////////////////
//
// Data smoothing methods
//
//interp = {
${METPLUS_INTERP_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Neighborhood methods
//
nbrhd = {
field = BOTH;
// shape =
${METPLUS_NBRHD_SHAPE}
// width =
${METPLUS_NBRHD_WIDTH}
// cov_thresh =
${METPLUS_NBRHD_COV_THRESH}
vld_thresh = 1.0;
}
////////////////////////////////////////////////////////////////////////////////
//
// Fourier decomposition
// May be set separately in each "obs.field" entry
//
//fourier = {
${METPLUS_FOURIER_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Gradient statistics
// May be set separately in each "obs.field" entry
//
//gradient = {
${METPLUS_GRADIENT_DICT}
////////////////////////////////////////////////////////////////////////////////
//
// Distance Map statistics
// May be set separately in each "obs.field" entry
//
//distance_map = {
${METPLUS_DISTANCE_MAP_DICT}
////////////////////////////////////////////////////////////////////////////////
// Threshold for SEEPS p1 (Probability of being dry)
//seeps_p1_thresh =
${METPLUS_SEEPS_P1_THRESH}
////////////////////////////////////////////////////////////////////////////////
//
// Statistical output types
//
//output_flag = {
${METPLUS_OUTPUT_FLAG_DICT}
//
// NetCDF matched pairs output file
// May be set separately in each "obs.field" entry
//
// nc_pairs_flag = {
${METPLUS_NC_PAIRS_FLAG_DICT}
////////////////////////////////////////////////////////////////////////////////
//ugrid_dataset =
${METPLUS_UGRID_DATASET}
//ugrid_max_distance_km =
${METPLUS_UGRID_MAX_DISTANCE_KM}
//ugrid_coordinates_file =
${METPLUS_UGRID_COORDINATES_FILE}
////////////////////////////////////////////////////////////////////////////////
//grid_weight_flag =
${METPLUS_GRID_WEIGHT_FLAG}
tmp_dir = "${MET_TMP_DIR}";
// output_prefix =
${METPLUS_OUTPUT_PREFIX}
////////////////////////////////////////////////////////////////////////////////
${METPLUS_TIME_OFFSET_WARNING}
${METPLUS_MET_CONFIG_OVERRIDES}
StatAnalysisConfig_wrapped
////////////////////////////////////////////////////////////////////////////////
//
// STAT-Analysis configuration file.
//
// For additional information, see the MET_BASE/config/README file.
//
////////////////////////////////////////////////////////////////////////////////
//
// Filtering input STAT lines by the contents of each column
//
//model = [
${METPLUS_MODEL}
//desc = [
${METPLUS_DESC}
//fcst_lead = [
${METPLUS_FCST_LEAD}
//obs_lead = [
${METPLUS_OBS_LEAD}
//fcst_valid_beg =
${METPLUS_FCST_VALID_BEG}
//fcst_valid_end =
${METPLUS_FCST_VALID_END}
fcst_valid_inc = [];
fcst_valid_exc = [];
//fcst_valid_hour = [
${METPLUS_FCST_VALID_HOUR}
//obs_valid_beg =
${METPLUS_OBS_VALID_BEG}
//obs_valid_end =
${METPLUS_OBS_VALID_END}
obs_valid_inc = [];
obs_valid_exc = [];
//obs_valid_hour = [
${METPLUS_OBS_VALID_HOUR}
//fcst_init_beg =
${METPLUS_FCST_INIT_BEG}
//fcst_init_end =
${METPLUS_FCST_INIT_END}
fcst_init_inc = [];
fcst_init_exc = [];
//fcst_init_hour = [
${METPLUS_FCST_INIT_HOUR}
//obs_init_beg =
${METPLUS_OBS_INIT_BEG}
//obs_init_end =
${METPLUS_OBS_INIT_END}
obs_init_inc = [];
obs_init_exc = [];
//obs_init_hour = [
${METPLUS_OBS_INIT_HOUR}
//fcst_var = [
${METPLUS_FCST_VAR}
//obs_var = [
${METPLUS_OBS_VAR}
//fcst_units = [
${METPLUS_FCST_UNITS}
//obs_units = [
${METPLUS_OBS_UNITS}
//fcst_lev = [
${METPLUS_FCST_LEVEL}
//obs_lev = [
${METPLUS_OBS_LEVEL}
//obtype = [
${METPLUS_OBTYPE}
//vx_mask = [
${METPLUS_VX_MASK}
//interp_mthd = [
${METPLUS_INTERP_MTHD}
//interp_pnts = [
${METPLUS_INTERP_PNTS}
//fcst_thresh = [
${METPLUS_FCST_THRESH}
//obs_thresh = [
${METPLUS_OBS_THRESH}
//cov_thresh = [
${METPLUS_COV_THRESH}
//alpha = [
${METPLUS_ALPHA}
//line_type = [
${METPLUS_LINE_TYPE}
//column = [
${METPLUS_COLUMN}
//weight = [
${METPLUS_WEIGHT}
////////////////////////////////////////////////////////////////////////////////
//
// Array of STAT-Analysis jobs to be performed on the filtered data
//
//jobs = [
${METPLUS_JOBS}
////////////////////////////////////////////////////////////////////////////////
//
// Confidence interval settings
//
out_alpha = 0.05;
boot = {
interval = PCTILE;
rep_prop = 1.0;
n_rep = 0;
rng = "mt19937";
seed = "";
}
////////////////////////////////////////////////////////////////////////////////
//
// WMO mean computation logic
//
wmo_sqrt_stats = [ "CNT:FSTDEV", "CNT:OSTDEV", "CNT:ESTDEV",
"CNT:RMSE", "CNT:RMSFA", "CNT:RMSOA",
"VCNT:FS_RMS", "VCNT:OS_RMS", "VCNT:RMSVE",
"VCNT:FSTDEV", "VCNT:OSTDEV" ];
wmo_fisher_stats = [ "CNT:PR_CORR", "CNT:SP_CORR",
"CNT:KT_CORR", "CNT:ANOM_CORR" ];
////////////////////////////////////////////////////////////////////////////////
//
// Skill score index options
//
//ss_index_name =
${METPLUS_SS_INDEX_NAME}
//ss_index_vld_thresh =
${METPLUS_SS_INDEX_VLD_THRESH}
////////////////////////////////////////////////////////////////////////////////
//hss_ec_value =
${METPLUS_HSS_EC_VALUE}
rank_corr_flag = FALSE;
vif_flag = FALSE;
tmp_dir = "${MET_TMP_DIR}";
//version = "V10.0";
${METPLUS_MET_CONFIG_OVERRIDES}
Python Embedding
This use case does not use Python embedding.
User Scripting
This user case does not call a user-defined script.
Running METplus
Pass the use case configuration file to the run_metplus.py script along with any user-specific system configuration files if desired:
run_metplus.py /path/to/METplus/parm/use_cases/model_applications/medium_range/GridStat_fcstCREDIT_GFS_obsGFS_6hrRealtime.conf /path/to/user_system.conf
See Running METplus for more information.
Expected Output
A successful run will output the following both to the screen and to the logfile:
INFO: METplus has successfully finished running.
Refer to the value set for OUTPUT_BASE to find where the output data was generated. Output for this use case will be found in {OUTPUT_BASE}/model_applications/medium_range/GridStat_fcstCREDIT_GFS_obsGFS_6hrRealtime.conf. There will be 3 directories, data_ingest which contains the downloaded data, grid_stat which contains the output statistics, and StatAnalysis which contains the aggregated statistics. The data_ingest directory will contain 2 subdirectories, GFS and GFS_analysis, each with the downloaded data. The data inside the GFS directory is sorted by model initialization time and contains both surface and upper air data. These files have the format, where II is the model initialzation hours and HHH is the lead time in hours:
gfs.tIIz.pgrb2.0p25.fHHH
gfs.tIIz.sfluxgrbfHHH.grib2
The GFS_analysis directory contains one subdirectory 20250924 with 4 files:
gfs.2025092400.pgrb2.0p25.anl
gfs.2025092406.pgrb2.0p25.anl
gfs_anal_2025092400.sfcanl.nc
gfs_anal_2025092406.sfcanl.nc
Inside the grid_stat directory, there are also 2 subdirectories, CREDIT/6h and GFS. The files output to CREDIT/6h are also stored in subdirectories dated with model initialization time in the format of YYYYMMDDHH. These files have the following format, where the dates labeled are lead time, valid year, month, and day, and valid hour, minute, and second:
grid_stat_CREDIT_surface_HHMMSSL_YYYYMMDD_HHMMSSV.stat
grid_stat_CREDIT_upper_air_HHMMSSL_YYYYMMDD_HHMMSSV.stat
The files output to the GFS directory are also stored in subdirectories dated with model initialization time in the format of YYYYMMDDHH. These files have the same format as above where the dates labeled are lead time, valid year, month, and day, and valid hour, minute, and second:
grid_stat_GFS_surface_HHMMSSL_YYYYMMDD_HHMMSSV.stat
grid_stat_GFS_upper_air_HHMMSSL_YYYYMMDD_HHMMSSV.stat
The StatAnalysis directory contains 1 subdirectory (6h). Inside that directory are 4 output files:
CREDIT_GFS_2025092400_2025092406_allleads_allValidHours_CNT.stat
CREDIT_GFS_2025092400_2025092406_allleads_allValidHours_CTS.stat
GFS_GFS_2025092400_2025092406_allleads_allValidHours_CNT.stat
GFS_GFS_2025092400_2025092406_allleads_allValidHours_CTS.stat
Keywords
Note
DataIngestToolUseCase
GridStatToolUseCase
StatAnalysisToolUseCase
MediumRangeAppUseCase
NCAROrgUseCase
GRIB2FileUseCase
NetCDFFileUseCase
Navigate to the METplus Quick Search for Use Cases page to discover other similar use cases.
sphinx_gallery_thumbnail_path = ‘_static/medium_range-GridStat_fcstCREDIT_GFS_obsGFS_6hrRealtime.png’