Skip to content

Commit

Permalink
[develop] Verification upgrades and bug fixes (#973)
Browse files Browse the repository at this point in the history
This update cleans up and simplifies the verification tasks in the SRW App. Main changes:
* For each METplus tool that is run on APCP, combine APCP01h and APCPgt01h METplus configuration (conf) files into one so that different behavior/code/scripts are not required for 01h vs. >01h.
* For APCP01h verification, use the NetCDF files generated by the PcpCombine_[fcst|obs] tasks instead of the original GRIB2 files. Note that for 01h accumulation, all that the the PcpCombine_[fcst|obs] tasks do is convert from GRIB2 to NetCDF format (unlike for >01h, for which the 01hr accumulations must be summed to obtain 03h, 06h, etc accumulations). This must be done because currently, even though the NetCDF files for APCP01h are created by the PcpCombine_[fcst|obs] tasks, they are not actually used by downstream tasks such as GridStat.
* Change thresholds in METplus conf files to use "ge", "gt", etc as opposed to "<=", "<", etc. This is so that thresholds can also easily be used in file and variable names.
* For clarity, change SFC and UPA verification field group names into ADPSFC and ADPUPA, respectively.
* Change behavior of ASNOW verification to be more similar to that of APCP.
* Bug fix in GridStat_ensprob_ASNOW.conf. There is an inadvertent shift in the threshold values used in the forecast field array names with respect to the threshold values specified for the observations. Fix to make thresholds for forecast and obs match.
* Add METplus logging level control in the main SRW App config file.
* For clarity, rename some verification variables as needed (in the main SRW App config file, in the rocoto workflow xml, in ex-scripts, etc).
* Clean up comments in METplus config files and make these files more similar to each other where possible.
  • Loading branch information
gsketefian authored Jan 16, 2024
1 parent fa04c12 commit bbe78ca
Show file tree
Hide file tree
Showing 58 changed files with 1,376 additions and 4,150 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,15 @@ ENSEMBLE_STAT_DESC = NA
# Name to identify observation data in output.
#
OBTYPE = {{obtype}}

# The METplus EnsembleStat logging level
# 0 quiet to 5 loud, Verbosity setting for METplus EnsembleStat output, 2 is default.
# This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf
LOG_ENSEMBLE_STAT_VERBOSITY = 3

#
# Verbosity of MET logging output. 0 to 5; 0 is quiet, 5 is loud.
#
LOG_{{METPLUS_TOOL_NAME}}_VERBOSITY = {{metplus_verbosity_level}}
#
# Observation data time window(s).
#
OBS_WINDOW_BEGIN = -1799
OBS_WINDOW_END = 1800

OBS_ENSEMBLE_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN}
OBS_ENSEMBLE_STAT_WINDOW_END = {OBS_WINDOW_END}

Expand All @@ -93,14 +93,12 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05
# ens.vld_thresh value in the MET config file
ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0

FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}}

ENSEMBLE_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA
#ENSEMBLE_STAT_OBS_QUALITY_EXC =

# ENSEMBLE_STAT_MET_OBS_ERR_TABLE is not required.
# If the variable is not defined, or the value is not set
# than the MET default is used.
# If the variable is not defined, or the value is not set, then the MET
# default is used.
ENSEMBLE_STAT_MET_OBS_ERR_TABLE = {MET_BASE}/table_files/obs_error_table.txt


Expand All @@ -114,11 +112,9 @@ ENSEMBLE_STAT_REGRID_TO_GRID = NONE
ENSEMBLE_STAT_CENSOR_THRESH =
ENSEMBLE_STAT_CENSOR_VAL =

ENSEMBLE_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}

ENSEMBLE_STAT_MESSAGE_TYPE = {{fieldname_in_met_filedir_names}}
ENSEMBLE_STAT_DUPLICATE_FLAG = NONE
ENSEMBLE_STAT_SKIP_CONST = FALSE

ENSEMBLE_STAT_OBS_ERROR_FLAG = FALSE

ENSEMBLE_STAT_ENS_SSVAR_BIN_SIZE = 1.0
Expand Down Expand Up @@ -191,58 +187,57 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE
#
FCST_VAR1_NAME = TMP
FCST_VAR1_LEVELS = Z2
FCST_VAR1_THRESH = >=268, >=273, >=278, >=293, >=298, >=303
FCST_VAR1_THRESH = ge268, ge273, ge278, ge293, ge298, ge303
OBS_VAR1_NAME = TMP
OBS_VAR1_LEVELS = Z2
OBS_VAR1_THRESH = >=268, >=273, >=278, >=293, >=298, >=303
OBS_VAR1_THRESH = ge268, ge273, ge278, ge293, ge298, ge303
OBS_VAR1_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR2_NAME = DPT
FCST_VAR2_LEVELS = Z2
FCST_VAR2_THRESH = >=263, >=268, >=273, >=288, >=293, >=298
FCST_VAR2_THRESH = ge263, ge268, ge273, ge288, ge293, ge298
OBS_VAR2_NAME = DPT
OBS_VAR2_LEVELS = Z2
OBS_VAR2_THRESH = >=263, >=268, >=273, >=288, >=293, >=298
OBS_VAR2_THRESH = ge263, ge268, ge273, ge288, ge293, ge298
OBS_VAR2_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR3_NAME = WIND
FCST_VAR3_LEVELS = Z10
FCST_VAR3_THRESH = >=5, >=10, >=15
FCST_VAR3_OPTIONS = GRIB2_pdt = 0; ;; derive instantaneous 10-m wind from U/V components, overriding max 10-m wind
FCST_VAR3_THRESH = ge5, ge10, ge15
FCST_VAR3_OPTIONS = GRIB2_pdt = 0; ;; Derive instantaneous 10-m wind from U/V components, overriding max 10-m wind.
OBS_VAR3_NAME = WIND
OBS_VAR3_LEVELS = Z10
OBS_VAR3_THRESH = >=5, >=10, >=15
OBS_VAR3_THRESH = ge5, ge10, ge15
OBS_VAR3_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR4_NAME = TCDC
FCST_VAR4_LEVELS = L0
FCST_VAR4_THRESH = <25, >75
FCST_VAR4_OPTIONS = GRIB_lvl_typ = 200; GRIB2_ipdtmpl_index=[27]; GRIB2_ipdtmpl_val=[255]; interp = { type = [ { method = NEAREST; width = 1; } ]; }
FCST_VAR4_THRESH = lt25, gt75
FCST_VAR4_OPTIONS = GRIB_lvl_typ = 200;
GRIB2_ipdtmpl_index=[27];
GRIB2_ipdtmpl_val=[255];
interp = { type = [ { method = NEAREST; width = 1; } ]; }
OBS_VAR4_NAME = TCDC
OBS_VAR4_LEVELS = L0
OBS_VAR4_THRESH = <25, >75
OBS_VAR4_THRESH = lt25, gt75

#BOTH_VAR5_NAME = VIS
#BOTH_VAR5_LEVELS = L0
#BOTH_VAR5_THRESH = <1609, <8045, >=8045
#BOTH_VAR5_OPTIONS = interp = { type = [ { method = NEAREST; width = 1; } ]; }
FCST_VAR5_NAME = VIS
FCST_VAR5_LEVELS = L0
FCST_VAR5_THRESH = <1609, <8045, >=8045
FCST_VAR5_THRESH = lt1609, lt8045, ge8045
FCST_VAR5_OPTIONS = interp = { type = [ { method = NEAREST; width = 1; } ]; }
OBS_VAR5_NAME = VIS
OBS_VAR5_LEVELS = L0
OBS_VAR5_THRESH = <1609, <8045, >=8045
OBS_VAR5_THRESH = lt1609, lt8045, ge8045

FCST_VAR6_NAME = HGT
FCST_VAR6_LEVELS = L0
FCST_VAR6_THRESH = <152, <1520, >=914
FCST_VAR6_OPTIONS = GRIB_lvl_typ = 215; desc = "CEILING";
FCST_VAR6_THRESH = lt152, lt1520, ge914
FCST_VAR6_OPTIONS = GRIB_lvl_typ = 215;
desc = "CEILING";
OBS_VAR6_NAME = CEILING
OBS_VAR6_LEVELS = L0
#OBS_VAR6_OPTIONS = GRIB_lvl_typ = 215; interp = { type = [ { method = NEAREST; width = 1; } ]; }
OBS_VAR6_THRESH = lt152, lt305, ge914
OBS_VAR6_OPTIONS = GRIB_lvl_typ = 215
OBS_VAR6_THRESH = <152, <305, >=914

[dir]
#
Expand Down Expand Up @@ -295,7 +290,7 @@ OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = {{obs_input_fn_template}}
#
OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE =
#
# Template for forecast input to EnsembleStat relative to
# Template for forecast input to EnsembleStat relative to
# FCST_ENSEMBLE_STAT_INPUT_DIR.
#
# Note that this can be a comma separated list of ensemble members
Expand All @@ -306,7 +301,7 @@ FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}}
# Template for output from EnsembleStat relative to ENSEMBLE_STAT_OUTPUT_DIR.
#
ENSEMBLE_STAT_OUTPUT_TEMPLATE =
ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE}_{lead?fmt=%H%M%S}L
ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE}_{lead?fmt=%H%M%S}L
#
# Template for climatology input to EnsembleStat relative to
# ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,15 @@ ENSEMBLE_STAT_DESC = NA
# Name to identify observation data in output.
#
OBTYPE = {{obtype}}

# The METplus EnsembleStat logging level
# 0 quiet to 5 loud, Verbosity setting for METplus EnsembleStat output, 2 is default.
# This takes precendence over the general LOG_MET_VERBOSITY set in metplus_logging.conf
LOG_ENSEMBLE_STAT_VERBOSITY = 3

#
# Verbosity of MET logging output. 0 to 5; 0 is quiet, 5 is loud.
#
LOG_{{METPLUS_TOOL_NAME}}_VERBOSITY = {{metplus_verbosity_level}}
#
# Observation data time window(s).
#
OBS_WINDOW_BEGIN = -1799
OBS_WINDOW_END = 1800

OBS_ENSEMBLE_STAT_WINDOW_BEGIN = {OBS_WINDOW_BEGIN}
OBS_ENSEMBLE_STAT_WINDOW_END = {OBS_WINDOW_END}

Expand All @@ -93,14 +93,12 @@ ENSEMBLE_STAT_ENS_THRESH = 0.05
# ens.vld_thresh value in the MET config file
ENSEMBLE_STAT_ENS_VLD_THRESH = 1.0

FIELDNAME_IN_MET_FILEDIR_NAMES = {{fieldname_in_met_filedir_names}}

ENSEMBLE_STAT_OBS_QUALITY_INC = 0, 1, 2, 3, 9, NA
#ENSEMBLE_STAT_OBS_QUALITY_EXC =

# ENSEMBLE_STAT_MET_OBS_ERR_TABLE is not required.
# If the variable is not defined, or the value is not set
# than the MET default is used.
# If the variable is not defined, or the value is not set, then the MET
# default is used.
ENSEMBLE_STAT_MET_OBS_ERR_TABLE = {MET_BASE}/table_files/obs_error_table.txt


Expand All @@ -114,11 +112,9 @@ ENSEMBLE_STAT_REGRID_TO_GRID = NONE
ENSEMBLE_STAT_CENSOR_THRESH =
ENSEMBLE_STAT_CENSOR_VAL =

ENSEMBLE_STAT_MESSAGE_TYPE = ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}

ENSEMBLE_STAT_MESSAGE_TYPE = {{fieldname_in_met_filedir_names}}
ENSEMBLE_STAT_DUPLICATE_FLAG = NONE
ENSEMBLE_STAT_SKIP_CONST = FALSE

ENSEMBLE_STAT_OBS_ERROR_FLAG = FALSE

ENSEMBLE_STAT_ENS_SSVAR_BIN_SIZE = 1.0
Expand Down Expand Up @@ -191,100 +187,101 @@ ENSEMBLE_STAT_ENSEMBLE_FLAG_WEIGHT = FALSE
#
FCST_VAR1_NAME = TMP
FCST_VAR1_LEVELS = P850
FCST_VAR1_THRESH = >=288, >=293, >=298
FCST_VAR1_THRESH = ge288, ge293, ge298
OBS_VAR1_NAME = TMP
OBS_VAR1_LEVELS = P850
OBS_VAR1_THRESH = >=288, >=293, >=298
OBS_VAR1_THRESH = ge288, ge293, ge298
OBS_VAR1_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR2_NAME = TMP
FCST_VAR2_LEVELS = P700
FCST_VAR2_THRESH = >=273, >=278, >=283
FCST_VAR2_THRESH = ge273, ge278, ge283
OBS_VAR2_NAME = TMP
OBS_VAR2_LEVELS = P700
OBS_VAR2_THRESH = >=273, >=278, >=283
OBS_VAR2_THRESH = ge273, ge278, ge283
OBS_VAR2_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR3_NAME = TMP
FCST_VAR3_LEVELS = P500
FCST_VAR3_THRESH = >=258, >=263, >=268
FCST_VAR3_THRESH = ge258, ge263, ge268
OBS_VAR3_NAME = TMP
OBS_VAR3_LEVELS = P500
OBS_VAR3_THRESH = >=258, >=263, >=268
OBS_VAR3_THRESH = ge258, ge263, ge268
OBS_VAR3_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR4_NAME = DPT
FCST_VAR4_LEVELS = P850
FCST_VAR4_THRESH = >=273, >=278, >=283
FCST_VAR4_THRESH = ge273, ge278, ge283
OBS_VAR4_NAME = DPT
OBS_VAR4_LEVELS = P850
OBS_VAR4_THRESH = >=273, >=278, >=283
OBS_VAR4_THRESH = ge273, ge278, ge283
OBS_VAR4_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR5_NAME = DPT
FCST_VAR5_LEVELS = P700
FCST_VAR5_THRESH = >=263, >=286, >=273
FCST_VAR5_THRESH = ge263, ge286, ge273
OBS_VAR5_NAME = DPT
OBS_VAR5_LEVELS = P700
OBS_VAR5_THRESH = >=263, >=286, >=273
OBS_VAR5_THRESH = ge263, ge286, ge273
OBS_VAR5_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR6_NAME = WIND
FCST_VAR6_LEVELS = P850
FCST_VAR6_THRESH = >=5, >=10, >=15
FCST_VAR6_THRESH = ge5, ge10, ge15
OBS_VAR6_NAME = WIND
OBS_VAR6_LEVELS = P850
OBS_VAR6_THRESH = >=5, >=10, >=15
OBS_VAR6_THRESH = ge5, ge10, ge15
OBS_VAR6_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR7_NAME = WIND
FCST_VAR7_LEVELS = P700
FCST_VAR7_THRESH = >=10, >=15, >=20
FCST_VAR7_THRESH = ge10, ge15, ge20
OBS_VAR7_NAME = WIND
OBS_VAR7_LEVELS = P700
OBSVAR7_THRESH = >=10, >=15, >=20
OBS_VAR7_THRESH = ge10, ge15, ge20
OBS_VAR7_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR8_NAME = WIND
FCST_VAR8_LEVELS = P500
FCST_VAR8_THRESH = >=15, >=21, >=26
FCST_VAR8_THRESH = ge15, ge21, ge26
OBS_VAR8_NAME = WIND
OBS_VAR8_LEVELS = P500
OBS_VAR8_THRESH = >=15, >=21, >=26
OBS_VAR8_THRESH = ge15, ge21, ge26
OBS_VAR8_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR9_NAME = WIND
FCST_VAR9_LEVELS = P250
FCST_VAR9_THRESH = >=26, >=31, >=36, >=46, >=62
FCST_VAR9_THRESH = ge26, ge31, ge36, ge46, ge62
OBS_VAR9_NAME = WIND
OBS_VAR9_LEVELS = P250
OBS_VAR9_THRESH = >=26, >=31, >=36, >=46, >=62
OBS_VAR9_THRESH = ge26, ge31, ge36, ge46, ge62
OBS_VAR9_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR10_NAME = HGT
FCST_VAR10_LEVELS = P500
FCST_VAR10_THRESH = >=5400, >=5600, >=5880
FCST_VAR10_THRESH = ge5400, ge5600, ge5880
OBS_VAR10_NAME = HGT
OBS_VAR10_LEVELS = P500
OBS_VAR10_THRESH = >=5400, >=5600, >=5880
OBS_VAR10_THRESH = ge5400, ge5600, ge5880
OBS_VAR10_OPTIONS = obs_error = { flag = TRUE; dist_type = NONE; dist_parm = []; inst_bias_scale = 1.0; inst_bias_offset = 0.0; min = NA; max = NA; }

FCST_VAR11_NAME = CAPE
FCST_VAR11_LEVELS = L0
FCST_VAR11_THRESH = le1000, gt1000&&lt2500, ge2500&&lt4000, ge2500
FCST_VAR11_OPTIONS = cnt_thresh = [ >0 ];
FCST_VAR11_THRESH = <=1000, >1000&&<2500, >=2500&&<4000, >=2500
OBS_VAR11_NAME = CAPE
OBS_VAR11_LEVELS = L0-100000
OBS_VAR11_OPTIONS = cnt_thresh = [ >0 ]; cnt_logic = UNION;
OBS_VAR11_THRESH = <=1000, >1000&&<2500, >=2500&&<4000, >=2500
OBS_VAR11_THRESH = le1000, gt1000&&lt2500, ge2500&&lt4000, ge2500
OBS_VAR11_OPTIONS = cnt_thresh = [ >0 ];
cnt_logic = UNION;

FCST_VAR12_NAME = HPBL
FCST_VAR12_LEVELS = Z0
FCST_VAR12_THRESH = <500, <1500, >1500
FCST_VAR12_THRESH = lt500, lt1500, gt1500
OBS_VAR12_NAME = PBL
OBS_VAR12_LEVELS = L0
OBS_VAR12_THRESH = lt500, lt1500, gt1500
OBS_VAR12_OPTIONS = desc = "TKE";
OBS_VAR12_THRESH = <500, <1500, >1500

[dir]
#
Expand Down Expand Up @@ -337,7 +334,7 @@ OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE = {{obs_input_fn_template}}
#
OBS_ENSEMBLE_STAT_GRID_INPUT_TEMPLATE =
#
# Template for forecast input to EnsembleStat relative to
# Template for forecast input to EnsembleStat relative to
# FCST_ENSEMBLE_STAT_INPUT_DIR.
#
# Note that this can be a comma separated list of ensemble members
Expand All @@ -348,7 +345,7 @@ FCST_ENSEMBLE_STAT_INPUT_TEMPLATE = {{fcst_input_fn_template}}
# Template for output from EnsembleStat relative to ENSEMBLE_STAT_OUTPUT_DIR.
#
ENSEMBLE_STAT_OUTPUT_TEMPLATE =
ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_ADP{FIELDNAME_IN_MET_FILEDIR_NAMES}_{OBTYPE}_{lead?fmt=%H%M%S}L
ENSEMBLE_STAT_OUTPUT_PREFIX = {MODEL}_{{fieldname_in_met_filedir_names}}_{OBTYPE}_{lead?fmt=%H%M%S}L
#
# Template for climatology input to EnsembleStat relative to
# ENSEMBLE_STAT_CLIMO_MEAN_INPUT_DIR. Not used in this example.
Expand Down
Loading

0 comments on commit bbe78ca

Please sign in to comment.