diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml
index 1fccc357fa..4c1eb33e9c 100644
--- a/.github/workflows/testing.yml
+++ b/.github/workflows/testing.yml
@@ -360,6 +360,8 @@ jobs:
- jobid: 'job3'
tests: 'climatology_2.5deg'
- jobid: 'job4'
+ tests: 'climatology_mixed'
+ - jobid: 'job5'
tests: 'python point2grid plot_data_plane mode mode_analysis perc_thresh hira plot_point_obs quality_filter obs_summary duplicate_flag'
fail-fast: false
steps:
diff --git a/data/table_files/met_header_columns_V12.0.txt b/data/table_files/met_header_columns_V12.0.txt
index 3d98f02206..5a7f27978e 100644
--- a/data/table_files/met_header_columns_V12.0.txt
+++ b/data/table_files/met_header_columns_V12.0.txt
@@ -5,7 +5,7 @@ V12.0 : STAT : FHO : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID
V12.0 : STAT : ISC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL TILE_DIM TILE_XLL TILE_YLL NSCALE ISCALE MSE ISC FENERGY2 OENERGY2 BASER FBIAS
V12.0 : STAT : MCTC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL (N_CAT) F[0-9]*_O[0-9]* EC_VALUE
V12.0 : STAT : MCTS : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_CAT ACC ACC_NCL ACC_NCU ACC_BCL ACC_BCU HK HK_BCL HK_BCU HSS HSS_BCL HSS_BCU GER GER_BCL GER_BCU HSS_EC HSS_EC_BCL HSS_EC_BCU EC_VALUE
-V12.0 : STAT : MPR : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL INDEX OBS_SID OBS_LAT OBS_LON OBS_LVL OBS_ELV FCST OBS OBS_QC CLIMO_MEAN CLIMO_STDEV CLIMO_CDF
+V12.0 : STAT : MPR : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL INDEX OBS_SID OBS_LAT OBS_LON OBS_LVL OBS_ELV FCST OBS OBS_QC OBS_CLIMO_MEAN OBS_CLIMO_STDEV OBS_CLIMO_CDF FCST_CLIMO_MEAN FCST_CLIMO_STDEV
V12.0 : STAT : SEEPS : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL S12 S13 S21 S23 S31 S32 PF1 PF2 PF3 PV1 PV2 PV3 MEAN_FCST MEAN_OBS SEEPS
V12.0 : STAT : SEEPS_MPR : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE OBS_SID OBS_LAT OBS_LON FCST OBS OBS_QC FCST_CAT OBS_CAT P1 P2 T1 T2 SEEPS
V12.0 : STAT : NBRCNT : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL FBS FBS_BCL FBS_BCU FSS FSS_BCL FSS_BCU AFSS AFSS_BCL AFSS_BCU UFSS UFSS_BCL UFSS_BCU F_RATE F_RATE_BCL F_RATE_BCU O_RATE O_RATE_BCL O_RATE_BCU
@@ -13,7 +13,7 @@ V12.0 : STAT : NBRCTC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID
V12.0 : STAT : NBRCTS : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL BASER BASER_NCL BASER_NCU BASER_BCL BASER_BCU FMEAN FMEAN_NCL FMEAN_NCU FMEAN_BCL FMEAN_BCU ACC ACC_NCL ACC_NCU ACC_BCL ACC_BCU FBIAS FBIAS_BCL FBIAS_BCU PODY PODY_NCL PODY_NCU PODY_BCL PODY_BCU PODN PODN_NCL PODN_NCU PODN_BCL PODN_BCU POFD POFD_NCL POFD_NCU POFD_BCL POFD_BCU FAR FAR_NCL FAR_NCU FAR_BCL FAR_BCU CSI CSI_NCL CSI_NCU CSI_BCL CSI_BCU GSS GSS_BCL GSS_BCU HK HK_NCL HK_NCU HK_BCL HK_BCU HSS HSS_BCL HSS_BCU ODDS ODDS_NCL ODDS_NCU ODDS_BCL ODDS_BCU LODDS LODDS_NCL LODDS_NCU LODDS_BCL LODDS_BCU ORSS ORSS_NCL ORSS_NCU ORSS_BCL ORSS_BCU EDS EDS_NCL EDS_NCU EDS_BCL EDS_BCU SEDS SEDS_NCL SEDS_NCU SEDS_BCL SEDS_BCU EDI EDI_NCL EDI_NCU EDI_BCL EDI_BCU SEDI SEDI_NCL SEDI_NCU SEDI_BCL SEDI_BCU BAGSS BAGSS_BCL BAGSS_BCU
V12.0 : STAT : GRAD : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL FGBAR OGBAR MGBAR EGBAR S1 S1_OG FGOG_RATIO DX DY
V12.0 : STAT : DMAP : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL FY OY FBIAS BADDELEY HAUSDORFF MED_FO MED_OF MED_MIN MED_MAX MED_MEAN FOM_FO FOM_OF FOM_MIN FOM_MAX FOM_MEAN ZHU_FO ZHU_OF ZHU_MIN ZHU_MAX ZHU_MEAN G GBETA BETA_VALUE
-V12.0 : STAT : ORANK : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL INDEX OBS_SID OBS_LAT OBS_LON OBS_LVL OBS_ELV OBS PIT RANK N_ENS_VLD (N_ENS) ENS_[0-9]* OBS_QC ENS_MEAN CLIMO_MEAN SPREAD ENS_MEAN_OERR SPREAD_OERR SPREAD_PLUS_OERR CLIMO_STDEV
+V12.0 : STAT : ORANK : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL INDEX OBS_SID OBS_LAT OBS_LON OBS_LVL OBS_ELV OBS PIT RANK N_ENS_VLD (N_ENS) ENS_[0-9]* OBS_QC ENS_MEAN OBS_CLIMO_MEAN SPREAD ENS_MEAN_OERR SPREAD_OERR SPREAD_PLUS_OERR OBS_CLIMO_STDEV FCST_CLIMO_MEAN FCST_CLIMO_STDEV
V12.0 : STAT : PCT : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL (N_THRESH) THRESH_[0-9]* OY_[0-9]* ON_[0-9]*
V12.0 : STAT : PJC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL (N_THRESH) THRESH_[0-9]* OY_TP_[0-9]* ON_TP_[0-9]* CALIBRATION_[0-9]* REFINEMENT_[0-9]* LIKELIHOOD_[0-9]* BASER_[0-9]*
V12.0 : STAT : PRC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL (N_THRESH) THRESH_[0-9]* PODY_[0-9]* POFD_[0-9]*
diff --git a/docs/Users_Guide/config_options.rst b/docs/Users_Guide/config_options.rst
index de538bd7cb..beb5b2cbc7 100644
--- a/docs/Users_Guide/config_options.rst
+++ b/docs/Users_Guide/config_options.rst
@@ -158,15 +158,15 @@ The configuration file language supports the following data types:
.. note::
- Prior to MET version 12.0.0, forecast climatological inputs were not
- supported. The observation climatological inputs were used to process
- threshold types named "SCP" and "CDP".
+ Prior to MET version 12.0.0, forecast climatological inputs were not
+ supported. The observation climatological inputs were used to process
+ threshold types named "SCP" and "CDP".
- For backward compatibility, the "SCP" threshold type is processed the same
- as "SOCP" and "CDP" the same as "OCDP".
+ For backward compatibility, the "SCP" threshold type is processed the same
+ as "SOCP" and "CDP" the same as "OCDP".
- Users are encouraged to replace the deprecated "SCP" and "CDP" threshold
- types with the updated "SOCP" and "OCDP" types, respectively.
+ Users are encouraged to replace the deprecated "SCP" and "CDP" threshold
+ types with the updated "SOCP" and "OCDP" types, respectively.
* Piecewise-Linear Function (currently used only by MODE):
@@ -324,8 +324,10 @@ To run this utility:
-e EXISTING_FILE, --existing=EXISTING_FILE
Save the text into the named file (optional, default: ../../../data/table_files/ndbc_stations.xml)
-NOTE: The downloaded files are written to a subdirectory ndbc_temp_data which
-can be deleted once the final output file is created.
+.. note::
+
+ The downloaded files are written to a subdirectory ndbc_temp_data which
+ can be deleted once the final output file is created.
MET_BASE
--------
@@ -1508,8 +1510,11 @@ the climatology file names and fields to be used.
with 6 and 12 being common choices. Use "NA" if the timing of the
climatology data should not be checked.
-* The "day_interval" and "hour_interval" entries replace the deprecated
- entries "match_month", "match_day", and "time_step".
+.. note::
+
+ As of MET version 11.0.0, the "day_interval" and "hour_interval" entries
+ replace the "match_month", "match_day", and "time_step" entries, which are
+ now deprecated.
.. code-block:: none
@@ -1563,6 +1568,27 @@ over the "climo_mean" setting and then updating the "file_name" entry.
file_name = [ "/path/to/climatological/standard/deviation/files" ];
}
+Prior to MET version 12.0.0, forecast climatological inputs were not supported.
+If the "climo_mean" and "climo_stdev" dictionaries are defined at the top-level
+configuration file context, the same data is used for both the forecast and
+observation climatologies. To specify separate forecast and observation
+climatologies, define "climo_mean" and "climo_stdev" inside the "fcst" and "obs"
+dictionaries, as shown below.
+
+.. code-block:: none
+
+ fcst = {
+ field = [ ... ];
+ climo_mean = { ... };
+ climo_stdev = { ... };
+ }
+
+ obs = {
+ field = [ ... ];
+ climo_mean = { ... };
+ climo_stdev = { ... };
+ }
+
climo_cdf
---------
@@ -2269,8 +2295,10 @@ For example:
| nc_pairs_var_suffix = "FREEZING"; (for the freezing level height)
|
-NOTE: This option was previously named "nc_pairs_var_str", which is
-now deprecated.
+.. note::
+
+ Prior to MET version 9.0.0, this option was named "nc_pairs_var_str",'
+ which is now deprecated.
.. code-block:: none
diff --git a/docs/Users_Guide/grid-diag.rst b/docs/Users_Guide/grid-diag.rst
index f2fd55e78c..59bbb38616 100644
--- a/docs/Users_Guide/grid-diag.rst
+++ b/docs/Users_Guide/grid-diag.rst
@@ -27,7 +27,9 @@ The following sections describe the usage statement, required arguments, and opt
[-v level]
[-compress level]
- NOTE: The "-data" option can be used once to read all fields from each input file or once for each field to be processed.
+.. note::
+
+ The "-data" option can be used once to read all fields from each input file or once for each field to be processed.
grid_diag has required arguments and can accept several optional arguments.
diff --git a/docs/Users_Guide/mode.rst b/docs/Users_Guide/mode.rst
index 491b452002..bb59cfee3e 100644
--- a/docs/Users_Guide/mode.rst
+++ b/docs/Users_Guide/mode.rst
@@ -913,7 +913,7 @@ The contents of the columns in this ASCII file are summarized in :numref:`MODE_o
* - 50
- AREA_RATIO
- The forecast object area divided by the observation object area (unitless) :raw-html:`
`
- **NOTE:** Prior to met-10.0.0, defined as the lesser of the two object areas divided by the greater of the two
+ **NOTE:** Prior to MET version 10.0.0, the AREA_RATIO was defined as the lesser of the two object areas divided by the greater of the two.
* - 51
- INTERSECTION :raw-html:`
` \_AREA
- Intersection area of two objects (in grid squares)
diff --git a/internal/test_unit/bin/unit_test.sh b/internal/test_unit/bin/unit_test.sh
index 0e2579464d..e3bc29e181 100755
--- a/internal/test_unit/bin/unit_test.sh
+++ b/internal/test_unit/bin/unit_test.sh
@@ -86,6 +86,7 @@ UNIT_XML="unit_ascii2nc.xml \
unit_climatology_1.0deg.xml \
unit_climatology_1.5deg.xml \
unit_climatology_2.5deg.xml \
+ unit_climatology_mixed.xml \
unit_grib_tables.xml \
unit_grid_weight.xml \
unit_netcdf.xml \
diff --git a/internal/test_unit/config/GridStatConfig_climo_FCST_NCEP_1.0DEG_OBS_WMO_1.5DEG b/internal/test_unit/config/GridStatConfig_climo_FCST_NCEP_1.0DEG_OBS_WMO_1.5DEG
new file mode 100644
index 0000000000..ab1cdd8362
--- /dev/null
+++ b/internal/test_unit/config/GridStatConfig_climo_FCST_NCEP_1.0DEG_OBS_WMO_1.5DEG
@@ -0,0 +1,277 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Grid-Stat configuration file.
+//
+// For additional information, please see the MET User's Guide.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Output model name to be written
+//
+model = "GFS";
+
+//
+// Output description to be written
+// May be set separately in each "obs.field" entry
+//
+desc = "NA";
+
+//
+// Output observation type to be written
+//
+obtype = "GFSANL";
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Verification grid
+//
+regrid = {
+ to_grid = "${OBS_CLIMO_DIR}/mslp_mean.grib";
+ method = BILIN;
+ width = 2;
+ vld_thresh = 0.5;
+ shape = SQUARE;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// May be set separately in each "field" entry
+//
+censor_thresh = [];
+censor_val = [];
+mpr_column = [];
+mpr_thresh = [];
+cat_thresh = [];
+cnt_thresh = [ NA ];
+cnt_logic = UNION;
+wind_thresh = [ NA ];
+wind_logic = UNION;
+eclv_points = 0.05;
+nc_pairs_var_name = "";
+nc_pairs_var_suffix = "";
+hss_ec_value = NA;
+rank_corr_flag = FALSE;
+
+//
+// Forecast and observation fields to be verified
+//
+
+field_list = [
+ { name = "TMP"; level = [ "P500" ]; },
+ { name = "UGRD"; level = [ "P500" ]; },
+ { name = "VGRD"; level = [ "P500" ]; },
+ { name = "TMP"; level = [ "P850" ]; cat_thresh = [ >FCDP75, >OCDP75 ]; },
+ { name = "UGRD"; level = [ "P850" ]; cat_thresh = [ >FCDP75, >OCDP75 ]; },
+ { name = "VGRD"; level = [ "P850" ]; cat_thresh = [ >FCDP75, >OCDP75 ]; }
+];
+
+fcst = {
+
+ field = field_list;
+
+ climo_mean = {
+ field = field_list;
+ file_name = [ "${FCST_CLIMO_DIR}/cmean_1d.19590410" ];
+ };
+
+ climo_stdev = {
+ field = field_list;
+ file_name = [ "${FCST_CLIMO_DIR}/cstdv_1d.19590410" ];
+ };
+
+ time_interp_method = DW_MEAN;
+ day_interval = 1;
+ hour_interval = 6;
+}
+
+obs = {
+
+ field = field_list;
+
+ climo_mean = {
+ field = field_list;
+ file_name = [ "${OBS_CLIMO_DIR}/t500hPa_mean.grib",
+ "${OBS_CLIMO_DIR}/t850hPa_mean.grib",
+ "${OBS_CLIMO_DIR}/u500hPa_mean.grib",
+ "${OBS_CLIMO_DIR}/u850hPa_mean.grib",
+ "${OBS_CLIMO_DIR}/v500hPa_mean.grib",
+ "${OBS_CLIMO_DIR}/v850hPa_mean.grib" ];
+ };
+
+ climo_stdev = {
+ field = field_list;
+ file_name = [ "${OBS_CLIMO_DIR}/t850hPa_stdev.grib",
+ "${OBS_CLIMO_DIR}/u850hPa_stdev.grib",
+ "${OBS_CLIMO_DIR}/v850hPa_stdev.grib" ];
+ };
+
+ time_interp_method = DW_MEAN;
+ day_interval = 1;
+ hour_interval = 12;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// May be set separately in each "obs.field" entry
+//
+climo_cdf = {
+ cdf_bins = 1;
+ center_bins = TRUE;
+ write_bins = FALSE;
+ direct_prob = FALSE;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Verification masking regions
+//
+mask = {
+ grid = [ "FULL" ];
+ poly = [];
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Confidence interval settings
+//
+ci_alpha = [ 0.05 ];
+
+boot = {
+ interval = PCTILE;
+ rep_prop = 1.0;
+ n_rep = 0;
+ rng = "mt19937";
+ seed = "";
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Data smoothing methods
+//
+interp = {
+ field = BOTH;
+ vld_thresh = 1.0;
+ shape = SQUARE;
+
+ type = [
+ {
+ method = NEAREST;
+ width = 1;
+ }
+ ];
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Neighborhood methods
+//
+nbrhd = {
+ width = [ 1 ];
+ cov_thresh = [ >=0.5 ];
+ vld_thresh = 1.0;
+ shape = SQUARE;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Fourier decomposition
+//
+fourier = {
+ wave_1d_beg = [];
+ wave_1d_end = [];
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Gradient statistics
+// May be set separately in each "obs.field" entry
+//
+gradient = {
+ dx = [];
+ dy = [];
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Distance Map statistics
+// May be set separately in each "obs.field" entry
+//
+distance_map = {
+ baddeley_p = 2;
+ baddeley_max_dist = NA;
+ fom_alpha = 0.1;
+ zhu_weight = 0.5;
+ beta_value(n) = n * n / 2.0;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+//
+// Statistical output types
+//
+output_flag = {
+ fho = NONE;
+ ctc = NONE;
+ cts = NONE;
+ mctc = NONE;
+ mcts = NONE;
+ cnt = STAT;
+ sl1l2 = STAT;
+ sal1l2 = STAT;
+ vl1l2 = STAT;
+ val1l2 = STAT;
+ vcnt = STAT;
+ pct = NONE;
+ pstd = NONE;
+ pjc = NONE;
+ prc = NONE;
+ eclv = NONE;
+ nbrctc = NONE;
+ nbrcts = NONE;
+ nbrcnt = NONE;
+ grad = NONE;
+ dmap = NONE;
+ seeps = NONE;
+}
+
+//
+// NetCDF matched pairs output file
+//
+nc_pairs_flag = {
+ latlon = TRUE;
+ raw = TRUE;
+ diff = TRUE;
+ climo = TRUE;
+ climo_cdp = TRUE;
+ weight = TRUE;
+ nbrhd = FALSE;
+ fourier = FALSE;
+ gradient = FALSE;
+ distance_map = FALSE;
+ apply_mask = FALSE;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Threshold for SEEPS p1 (Probability of being dry)
+
+seeps_p1_thresh = NA;
+
+////////////////////////////////////////////////////////////////////////////////
+
+grid_weight_flag = COS_LAT;
+tmp_dir = "/tmp";
+output_prefix = "${OUTPUT_PREFIX}";
+version = "V12.0.0";
+
+////////////////////////////////////////////////////////////////////////////////
diff --git a/internal/test_unit/config/GridStatConfig_mpr_thresh b/internal/test_unit/config/GridStatConfig_mpr_thresh
index 01a9037fd0..e99405be7a 100644
--- a/internal/test_unit/config/GridStatConfig_mpr_thresh
+++ b/internal/test_unit/config/GridStatConfig_mpr_thresh
@@ -79,32 +79,18 @@ fcst = {
desc = "ABS_OBS_FCST_DIFF";
nc_pairs_var_suffix = desc;
},
-// MET #2924 Replace this section
-// {
-// mpr_column = [ "ABS(OBS-OBS_CLIMO_MEAN)" ];
-// mpr_thresh = [ <=5 ];
-// desc = "ABS_OBS_CLIMO_MEAN_DIFF";
-// nc_pairs_var_suffix = desc;
-// },
-// {
-// mpr_column = [ "OBS_CLIMO_CDF" ];
-// mpr_thresh = [ >=0.25&&<=0.75 ];
-// desc = "OBS_CLIMO_CDF_IQR";
-// nc_pairs_var_suffix = desc;
-// }
{
- mpr_column = [ "ABS(OBS-CLIMO_MEAN)" ];
+ mpr_column = [ "ABS(OBS-OBS_CLIMO_MEAN)" ];
mpr_thresh = [ <=5 ];
desc = "ABS_OBS_CLIMO_MEAN_DIFF";
nc_pairs_var_suffix = desc;
},
{
- mpr_column = [ "CLIMO_CDF" ];
+ mpr_column = [ "OBS_CLIMO_CDF" ];
mpr_thresh = [ >=0.25&&<=0.75 ];
- desc = "CLIMO_CDF_IQR";
+ desc = "OBS_CLIMO_CDF_IQR";
nc_pairs_var_suffix = desc;
}
-// MET #2924 End replace
];
}
obs = fcst;
diff --git a/internal/test_unit/config/PointStatConfig_mpr_thresh b/internal/test_unit/config/PointStatConfig_mpr_thresh
index e0d54b9219..675b0696c2 100644
--- a/internal/test_unit/config/PointStatConfig_mpr_thresh
+++ b/internal/test_unit/config/PointStatConfig_mpr_thresh
@@ -68,28 +68,16 @@ fcst = {
mpr_thresh = [ <=5 ];
desc = "ABS_OBS_FCST_DIFF";
},
-// MET #2924 Replace this section
-// {
-// mpr_column = [ "ABS(OBS-OBS_CLIMO_MEAN)" ];
-// mpr_thresh = [ <=5 ];
-// desc = "ABS_OBS_CLIMO_MEAN_DIFF";
-// },
-// {
-// mpr_column = [ "OBS_CLIMO_CDF" ];
-// mpr_thresh = [ >=0.25&&<=0.75 ];
-// desc = "OBS_CLIMO_CDF_IQR";
-// }
{
- mpr_column = [ "ABS(OBS-CLIMO_MEAN)" ];
+ mpr_column = [ "ABS(OBS-OBS_CLIMO_MEAN)" ];
mpr_thresh = [ <=5 ];
desc = "ABS_OBS_CLIMO_MEAN_DIFF";
},
{
- mpr_column = [ "CLIMO_CDF" ];
+ mpr_column = [ "OBS_CLIMO_CDF" ];
mpr_thresh = [ >=0.25&&<=0.75 ];
- desc = "CLIMO_CDF_IQR";
+ desc = "OBS_CLIMO_CDF_IQR";
}
-// MET #2924 End replace
];
}
obs = fcst;
diff --git a/internal/test_unit/hdr/met_12_0.hdr b/internal/test_unit/hdr/met_12_0.hdr
index b7d835c72c..f3785b7b48 100644
--- a/internal/test_unit/hdr/met_12_0.hdr
+++ b/internal/test_unit/hdr/met_12_0.hdr
@@ -5,7 +5,7 @@ FHO : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_L
ISC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL TILE_DIM TILE_XLL TILE_YLL NSCALE ISCALE MSE ISC FENERGY2 OENERGY2 BASER FBIAS
MCTC : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_CAT _VAR_
MCTS : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL N_CAT ACC ACC_NCL ACC_NCU ACC_BCL ACC_BCU HK HK_BCL HK_BCU HSS HSS_BCL HSS_BCU GER GER_BCL GER_BCU HSS_EC HSS_EC_BCL HSS_EC_BCU EC_VALUE
-MPR : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL INDEX OBS_SID OBS_LAT OBS_LON OBS_LVL OBS_ELV FCST OBS OBS_QC CLIMO_MEAN CLIMO_STDEV CLIMO_CDF
+MPR : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL INDEX OBS_SID OBS_LAT OBS_LON OBS_LVL OBS_ELV FCST OBS OBS_QC OBS_CLIMO_MEAN OBS_CLIMO_STDEV OBS_CLIMO_CDF FCST_CLIMO_MEAN FCST_CLIMO_STDEV
SEEPS : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL S12 S13 S21 S23 S31 S32 PF1 PF2 PF3 PV1 PV2 PV3 MEAN_FCST MEAN_OBS SEEPS
SEEPS_MPR : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE OBS_SID OBS_LAT OBS_LON FCST OBS OBS_QC FCST_CAT OBS_CAT P1 P2 T1 T2 SEEPS
NBRCNT : VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL FBS FBS_BCL FBS_BCU FSS FSS_BCL FSS_BCU AFSS AFSS_BCL AFSS_BCU UFSS UFSS_BCL UFSS_BCU F_RATE F_RATE_BCL F_RATE_BCU O_RATE O_RATE_BCL O_RATE_BCU
diff --git a/internal/test_unit/xml/unit_climatology_1.5deg.xml b/internal/test_unit/xml/unit_climatology_1.5deg.xml
index 278df4a8be..de22d95673 100644
--- a/internal/test_unit/xml/unit_climatology_1.5deg.xml
+++ b/internal/test_unit/xml/unit_climatology_1.5deg.xml
@@ -82,19 +82,11 @@
OUTPUT_DIR &OUTPUT_DIR;/climatology_1.5deg
-
- \
- -lookin &OUTPUT_DIR;/climatology_1.5deg/point_stat_WMO_CLIMO_1.5DEG_120000L_20120409_120000V.stat \
- -job filter -line_type MPR -column_thresh CLIMO_CDF 'lt0.1||gt0.9' \
- -dump_row &OUTPUT_DIR;/climatology_1.5deg/stat_analysis_WMO_1.5DEG_FILTER_CDF_dump.stat
-
-
diff --git a/internal/test_unit/xml/unit_climatology_mixed.xml b/internal/test_unit/xml/unit_climatology_mixed.xml
new file mode 100644
index 0000000000..0433b39e8d
--- /dev/null
+++ b/internal/test_unit/xml/unit_climatology_mixed.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+ &TEST_DIR;
+ true
+
+
+ &MET_BIN;/grid_stat
+
+ OUTPUT_PREFIX FCST_NCEP_1.0DEG_OBS_WMO_1.5DEG
+ FCST_CLIMO_DIR &DATA_DIR_CLIMO;/NCEP_NCAR_40YR_1.0deg
+ OBS_CLIMO_DIR &DATA_DIR_CLIMO;/ERA_DAILY_1.5deg
+
+ \
+ &DATA_DIR_MODEL;/grib2/gfs/gfs_2012040900_F024.grib2 \
+ &DATA_DIR_MODEL;/grib2/gfsanl/gfsanl_4_20120410_0000_000.grb2 \
+ &CONFIG_DIR;/GridStatConfig_climo_FCST_NCEP_1.0DEG_OBS_WMO_1.5DEG \
+ -outdir &OUTPUT_DIR;/climatology_mixed -v 2
+
+
+
+
diff --git a/src/basic/vx_config/threshold.cc b/src/basic/vx_config/threshold.cc
index bfff7a0089..cbf0a3cb7d 100644
--- a/src/basic/vx_config/threshold.cc
+++ b/src/basic/vx_config/threshold.cc
@@ -103,9 +103,8 @@ for (auto const& x : perc_thresh_info_map) {
}
//
- // MET #2924: For backward compatibility support SCP and CDP
- // threshold types
- //
+ // MET #2924 Backward compatible support for SCP and CDP types
+ //
if ( !match &&
(search_cs.startswith(scp_perc_thresh_type_str.c_str()) ||
diff --git a/src/basic/vx_util/stat_column_defs.h b/src/basic/vx_util/stat_column_defs.h
index 5ae3a64b1a..a7b5427143 100644
--- a/src/basic/vx_util/stat_column_defs.h
+++ b/src/basic/vx_util/stat_column_defs.h
@@ -197,7 +197,6 @@ static const char * const eclv_columns [] = {
"N_PNT", "CL_", "VALUE_"
};
-/* MET #2924 Replace this change
static const char * const mpr_columns [] = {
"TOTAL", "INDEX", "OBS_SID",
"OBS_LAT", "OBS_LON", "OBS_LVL",
@@ -206,17 +205,6 @@ static const char * const mpr_columns [] = {
"OBS_CLIMO_MEAN", "OBS_CLIMO_STDEV", "OBS_CLIMO_CDF",
"FCST_CLIMO_MEAN", "FCST_CLIMO_STDEV"
};
-*/
-
-static const char * const mpr_columns [] = {
- "TOTAL", "INDEX", "OBS_SID",
- "OBS_LAT", "OBS_LON", "OBS_LVL",
- "OBS_ELV", "FCST", "OBS",
- "OBS_QC",
- "CLIMO_MEAN", "CLIMO_STDEV", "CLIMO_CDF"
-};
-
-// MET #2924 End replace
static const char * const nbrctc_columns [] = {
"TOTAL", "FY_OY", "FY_ON",
@@ -308,7 +296,6 @@ static const char * const phist_columns [] = {
"BIN_"
};
-/* MET #2924 Replace this section
static const char * const orank_columns [] = {
"TOTAL", "INDEX", "OBS_SID",
"OBS_LAT", "OBS_LON", "OBS_LVL",
@@ -319,19 +306,6 @@ static const char * const orank_columns [] = {
"SPREAD_OERR", "SPREAD_PLUS_OERR", "OBS_CLIMO_STDEV",
"FCST_CLIMO_MEAN", "FCST_CLIMO_STDEV"
};
-*/
-
-static const char * const orank_columns [] = {
- "TOTAL", "INDEX", "OBS_SID",
- "OBS_LAT", "OBS_LON", "OBS_LVL",
- "OBS_ELV", "OBS", "PIT",
- "RANK", "N_ENS_VLD", "N_ENS",
- "ENS_", "OBS_QC", "ENS_MEAN",
- "CLIMO_MEAN", "SPREAD", "ENS_MEAN_OERR",
- "SPREAD_OERR", "SPREAD_PLUS_OERR", "CLIMO_STDEV"
-};
-
-// MET #2924 End replace
static const char * const ssvar_columns [] = {
"TOTAL", "N_BIN", "BIN_i",
diff --git a/src/libcode/vx_data2d_grib/data2d_grib_utils.cc b/src/libcode/vx_data2d_grib/data2d_grib_utils.cc
index f948b26253..cc3e81f82c 100644
--- a/src/libcode/vx_data2d_grib/data2d_grib_utils.cc
+++ b/src/libcode/vx_data2d_grib/data2d_grib_utils.cc
@@ -669,7 +669,8 @@ void read_pds(const GribRecord &r, int &bms_flag,
//
// Set the valid and accumulation times based on the
- // contents of the time range indicator
+ // contents of the time range indicator in GRIB1 Table 5:
+ // https://www.nco.ncep.noaa.gov/pmb/docs/on388/table5.html
//
switch((int) pds->tri) {
@@ -725,6 +726,11 @@ void read_pds(const GribRecord &r, int &bms_flag,
accum = 0;
break;
+ case 123: // Average of N uninitialized analyses, starting at the reference time, at intervals of P2.
+ valid_ut = init_ut;
+ accum = 0;
+ break;
+
case 136: // Climatological Standard Deviation
valid_ut = init_ut;
accum = 0;
diff --git a/src/libcode/vx_stat_out/stat_columns.cc b/src/libcode/vx_stat_out/stat_columns.cc
index 35a2fe7ba0..51992d7b50 100644
--- a/src/libcode/vx_stat_out/stat_columns.cc
+++ b/src/libcode/vx_stat_out/stat_columns.cc
@@ -488,10 +488,8 @@ void write_orank_header_row(int hdr_flag, int n_ens, AsciiTable &at,
at.set_entry(r, c+17+n_ens, (string)orank_columns[18]);
at.set_entry(r, c+18+n_ens, (string)orank_columns[19]);
at.set_entry(r, c+19+n_ens, (string)orank_columns[20]);
- /* MET #2924 Uncomment this section
at.set_entry(r, c+20+n_ens, (string)orank_columns[21]);
at.set_entry(r, c+21+n_ens, (string)orank_columns[22]);
- */
return;
}
@@ -4126,13 +4124,11 @@ void write_mpr_cols(const PairDataPoint *pd_ptr, int i,
at.set_entry(r, c+12, // Observation Climatological CDF Value
pd_ptr->ocdf_na[i]);
-/* MET #2924 Uncomment this section
at.set_entry(r, c+13, // Forecast Climatological Mean Value
pd_ptr->fcmn_na[i]);
at.set_entry(r, c+14, // Forecast Climatological Standard Deviation Value
pd_ptr->fcsd_na[i]);
-*/
return;
}
@@ -4589,7 +4585,6 @@ void write_orank_cols(const PairDataEnsemble *pd_ptr, int i,
at.set_entry(r, c+19+pd_ptr->n_ens,
pd_ptr->ocsd_na[i]);
-/* MET #2924 Uncomment this section
// Forecast climatology mean values
at.set_entry(r, c+20+pd_ptr->n_ens,
pd_ptr->fcmn_na[i]);
@@ -4597,7 +4592,6 @@ void write_orank_cols(const PairDataEnsemble *pd_ptr, int i,
// Forecast climatology standard deviation values
at.set_entry(r, c+21+pd_ptr->n_ens,
pd_ptr->fcsd_na[i]);
-*/
return;
}
diff --git a/src/libcode/vx_statistics/pair_data_point.cc b/src/libcode/vx_statistics/pair_data_point.cc
index 0d29dda9ed..0e7f6203e7 100644
--- a/src/libcode/vx_statistics/pair_data_point.cc
+++ b/src/libcode/vx_statistics/pair_data_point.cc
@@ -820,7 +820,6 @@ double get_mpr_column_value(double f, double o, const ClimoPntInfo &cpi,
const char *s) {
double v;
-/* #MET #2924 Replace this section
if(strcasecmp(s, "FCST") == 0) v = f;
else if(strcasecmp(s, "OBS") == 0) v = o;
else if(strcasecmp(s, "FCST_CLIMO_MEAN") == 0) v = cpi.fcmn;
@@ -831,16 +830,6 @@ double get_mpr_column_value(double f, double o, const ClimoPntInfo &cpi,
v = (is_bad_data(cpi.ocmn) || is_bad_data(cpi.ocsd) ?
bad_data_double : normal_cdf(o, cpi.ocmn, cpi.ocsd));
}
-*/
- if(strcasecmp(s, "FCST") == 0) v = f;
- else if(strcasecmp(s, "OBS") == 0) v = o;
- else if(strcasecmp(s, "CLIMO_MEAN") == 0) v = cpi.ocmn;
- else if(strcasecmp(s, "CLIMO_STDEV") == 0) v = cpi.ocsd;
- else if(strcasecmp(s, "CLIMO_CDF") == 0) {
- v = (is_bad_data(cpi.ocmn) || is_bad_data(cpi.ocsd) ?
- bad_data_double : normal_cdf(o, cpi.ocmn, cpi.ocsd));
- }
-// MET #2924 End replace
else {
mlog << Error << "\nget_mpr_column_value() -> "
<< "unsupported matched pair column name requested in \""
diff --git a/src/libcode/vx_statistics/read_climo.cc b/src/libcode/vx_statistics/read_climo.cc
index 8e43749a8d..f5a0f2db71 100644
--- a/src/libcode/vx_statistics/read_climo.cc
+++ b/src/libcode/vx_statistics/read_climo.cc
@@ -29,7 +29,7 @@ using namespace std;
static void read_climo_file(
const char *, GrdFileType, Dictionary *, unixtime,
int, int, const Grid &, const RegridInfo &,
- DataPlaneArray &dpa);
+ DataPlaneArray &dpa, const char *);
static DataPlaneArray climo_time_interp(
const DataPlaneArray &, int, unixtime, InterpMthd);
@@ -40,7 +40,8 @@ static DataPlane climo_hms_interp(
////////////////////////////////////////////////////////////////////////
DataPlane read_climo_data_plane(Dictionary *dict, int i_vx,
- unixtime vld_ut, const Grid &vx_grid) {
+ unixtime vld_ut, const Grid &vx_grid,
+ const char *desc) {
DataPlane dp;
DataPlaneArray dpa;
@@ -48,13 +49,13 @@ DataPlane read_climo_data_plane(Dictionary *dict, int i_vx,
if(!dict) return dp;
// Read array of climatology fields
- dpa = read_climo_data_plane_array(dict, i_vx, vld_ut, vx_grid);
+ dpa = read_climo_data_plane_array(dict, i_vx, vld_ut, vx_grid, desc);
// Check for multiple matches
if(dpa.n_planes() > 1) {
mlog << Warning << "\nread_climo_data_plane() -> "
- << "Found " << dpa.n_planes() << " matching climatology "
- << "fields. Using the first match found.\n\n";
+ << "Found " << dpa.n_planes() << " matching " << desc
+ << " fields. Using the first match found.\n\n";
}
// Store the first match found
@@ -67,7 +68,8 @@ DataPlane read_climo_data_plane(Dictionary *dict, int i_vx,
DataPlaneArray read_climo_data_plane_array(Dictionary *dict, int i_vx,
unixtime vld_ut,
- const Grid &vx_grid) {
+ const Grid &vx_grid,
+ const char *desc) {
DataPlaneArray dpa;
StringArray climo_files;
RegridInfo regrid_info;
@@ -100,7 +102,7 @@ DataPlaneArray read_climo_data_plane_array(Dictionary *dict, int i_vx,
// Range check day_interval
if(!is_bad_data(day_interval) && day_interval < 1) {
mlog << Error << "\nread_climo_data_plane_array() -> "
- << "The \"" << conf_key_day_interval << "\" entry ("
+ << "The " << conf_key_day_interval << " entry ("
<< day_interval << ") can be set to " << na_str
<< " or a value of at least 1.\n\n";
exit(1);
@@ -113,7 +115,7 @@ DataPlaneArray read_climo_data_plane_array(Dictionary *dict, int i_vx,
if(!is_bad_data(hour_interval) &&
(hour_interval <= 0 || hour_interval > 24)) {
mlog << Error << "\nread_climo_data_plane_array() -> "
- << "The \"" << conf_key_hour_interval << "\" entry ("
+ << "The " << conf_key_hour_interval << " entry ("
<< hour_interval << ") can be set to " << na_str
<< " or a value between 0 and 24.\n\n";
exit(1);
@@ -131,14 +133,15 @@ DataPlaneArray read_climo_data_plane_array(Dictionary *dict, int i_vx,
// Search the files for the requested records
for(i=0; i "
- << "Trouble reading climatology file \""
- << climo_file << "\"\n\n";
+ << "Trouble reading climatology file "
+ << climo_file << "\n\n";
return;
}
@@ -191,21 +194,21 @@ void read_climo_file(const char *climo_file, GrdFileType ctype,
// Check the day time step
if(!is_bad_data(day_ts) && abs(day_diff_sec) >= day_ts) {
- mlog << Debug(3) << "Skipping " << clm_ut_cs << " \"" << info->magic_str()
- << "\" climatology field with " << day_diff_sec / sec_per_day
+ mlog << Debug(3) << "Skipping " << clm_ut_cs << " " << info->magic_str()
+ << " climatology field with " << day_diff_sec / sec_per_day
<< " day offset (" << conf_key_day_interval << " = "
- << day_ts / sec_per_day << ") from file \""
- << climo_file << "\".\n";
+ << day_ts / sec_per_day << ") from file "
+ << climo_file << ".\n";
continue;
}
// Check the hour time step
if(!is_bad_data(hour_ts) && abs(hms_diff_sec) >= hour_ts) {
- mlog << Debug(3) << "Skipping " << clm_ut_cs << " \"" << info->magic_str()
- << "\" climatology field with " << (double) hms_diff_sec / sec_per_hour
+ mlog << Debug(3) << "Skipping " << clm_ut_cs << " " << info->magic_str()
+ << " climatology field with " << (double) hms_diff_sec / sec_per_hour
<< " hour offset (" << conf_key_hour_interval << " = "
- << hour_ts / sec_per_hour << ") from file \""
- << climo_file << "\".\n";
+ << hour_ts / sec_per_hour << ") from file "
+ << climo_file << ".\n";
continue;
}
@@ -213,17 +216,17 @@ void read_climo_file(const char *climo_file, GrdFileType ctype,
unixtime clm_vld_ut = vld_ut + day_diff_sec + hms_diff_sec;
// Print log message for matching record
- mlog << Debug(3) << "Storing " << clm_ut_cs << " \"" << info->magic_str()
- << "\" climatology field with " << day_diff_sec / sec_per_day
+ mlog << Debug(3) << "Storing " << clm_ut_cs << " " << info->magic_str()
+ << " climatology field with " << day_diff_sec / sec_per_day
<< " day, " << (double) hms_diff_sec / sec_per_hour << " hour offset as time "
- << unix_to_yyyymmdd_hhmmss(clm_vld_ut) << " from file \""
- << climo_file << "\".\n";
+ << unix_to_yyyymmdd_hhmmss(clm_vld_ut) << " from file "
+ << climo_file << ".\n";
// Regrid, if needed
if(!(mtddf->grid() == vx_grid)) {
- mlog << Debug(2) << "Regridding " << clm_ut_cs << " \""
- << info->magic_str()
- << "\" climatology field to the verification grid.\n";
+ mlog << Debug(2) << "Regridding " << clm_ut_cs << " "
+ << desc << " field " << info->magic_str()
+ << " to the verification grid.\n";
dp = met_regrid(clm_dpa[i], mtddf->grid(), vx_grid,
regrid_info);
}
@@ -343,8 +346,8 @@ DataPlaneArray climo_time_interp(const DataPlaneArray &dpa, int day_ts,
// This should only occur when day_interval > 1.
if(day_ts <= 3600*24) {
mlog << Error << "\nclimo_time_interp() -> "
- << "Expecting 1 or 2 climatology fields when \""
- << conf_key_day_interval << "\" <= 1 but found "
+ << "Expecting 1 or 2 climatology fields when "
+ << conf_key_day_interval << " <= 1 but found "
<< it->second.n() << "\n\n";
exit(1);
}
diff --git a/src/libcode/vx_statistics/read_climo.h b/src/libcode/vx_statistics/read_climo.h
index a017df6388..362efa3fce 100644
--- a/src/libcode/vx_statistics/read_climo.h
+++ b/src/libcode/vx_statistics/read_climo.h
@@ -19,10 +19,12 @@
////////////////////////////////////////////////////////////////////////
extern DataPlane read_climo_data_plane(Dictionary *, int,
- unixtime, const Grid &);
+ unixtime, const Grid &,
+ const char *);
extern DataPlaneArray read_climo_data_plane_array(Dictionary *, int,
- unixtime, const Grid &);
+ unixtime, const Grid &,
+ const char *);
////////////////////////////////////////////////////////////////////////
diff --git a/src/tools/core/ensemble_stat/ensemble_stat.cc b/src/tools/core/ensemble_stat/ensemble_stat.cc
index 3dedd76ef5..826b8eaf7a 100644
--- a/src/tools/core/ensemble_stat/ensemble_stat.cc
+++ b/src/tools/core/ensemble_stat/ensemble_stat.cc
@@ -784,18 +784,22 @@ void process_point_vx() {
// Read forecast climatology data
fcmn_dpa = read_climo_data_plane_array(
conf_info.conf.lookup_array(conf_key_fcst_climo_mean_field, false),
- i, ens_valid_ut, grid);
+ i, ens_valid_ut, grid,
+ "forecast climatology mean");
fcsd_dpa = read_climo_data_plane_array(
- conf_info.conf.lookup_array(conf_key_fcst_climo_stdev_field, false),
- i, ens_valid_ut, grid);
+ conf_info.conf.lookup_array(conf_key_fcst_climo_stdev_field, false),
+ i, ens_valid_ut, grid,
+ "forecast climatology standard deviation");
// Read observation climatology data
ocmn_dpa = read_climo_data_plane_array(
conf_info.conf.lookup_array(conf_key_obs_climo_mean_field, false),
- i, ens_valid_ut, grid);
+ i, ens_valid_ut, grid,
+ "observation climatology mean");
ocsd_dpa = read_climo_data_plane_array(
- conf_info.conf.lookup_array(conf_key_obs_climo_stdev_field, false),
- i, ens_valid_ut, grid);
+ conf_info.conf.lookup_array(conf_key_obs_climo_stdev_field, false),
+ i, ens_valid_ut, grid,
+ "observation climatology standard deviation");
mlog << Debug(3)
<< "For " << conf_info.vx_opt[i].vx_pd.fcst_info->magic_str() << ", found "
@@ -1424,18 +1428,22 @@ void process_grid_vx() {
// Read forecast climatology data
fcmn_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_mean_field, false),
- i, ens_valid_ut, grid);
+ i, ens_valid_ut, grid,
+ "forecast climatology mean");
fcsd_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_stdev_field, false),
- i, ens_valid_ut, grid);
+ i, ens_valid_ut, grid,
+ "forecast climatology standard deviation");
// Read observation climatology data
ocmn_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_mean_field, false),
- i, ens_valid_ut, grid);
+ i, ens_valid_ut, grid,
+ "observation climatology mean");
ocsd_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_stdev_field, false),
- i, ens_valid_ut, grid);
+ i, ens_valid_ut, grid,
+ "observation climatology standard deviation");
mlog << Debug(3)
<< "For " << conf_info.vx_opt[i].vx_pd.fcst_info->magic_str() << ", found "
diff --git a/src/tools/core/grid_stat/grid_stat.cc b/src/tools/core/grid_stat/grid_stat.cc
index fcd0bc33a9..33f3e14dfc 100644
--- a/src/tools/core/grid_stat/grid_stat.cc
+++ b/src/tools/core/grid_stat/grid_stat.cc
@@ -196,8 +196,8 @@ static void clean_up();
static void usage();
static void set_outdir(const StringArray &);
static void set_compress(const StringArray &);
-static bool read_data_plane(VarInfo* info, DataPlane& dp, Met2dDataFile* mtddf,
- const ConcatString &filename);
+static bool read_data_plane(VarInfo *info, DataPlane &dp, Met2dDataFile *mtddf,
+ const ConcatString &filename, const char *desc);
#ifdef WITH_UGRID
static void set_ugrid_config(const StringArray &);
#endif
@@ -725,7 +725,8 @@ void process_scores() {
// Read the gridded data from the input forecast file
if(!read_data_plane(conf_info.vx_opt[i].fcst_info,
- fcst_dp, fcst_mtddf, fcst_file)) continue;
+ fcst_dp, fcst_mtddf, fcst_file,
+ "forecast")) continue;
mlog << Debug(3)
<< "Reading forecast data for "
@@ -740,7 +741,8 @@ void process_scores() {
// Read the gridded data from the input observation file
if(!read_data_plane(conf_info.vx_opt[i].obs_info,
- obs_dp, obs_mtddf, obs_file)) continue;
+ obs_dp, obs_mtddf, obs_file,
+ "observation")) continue;
mlog << Debug(3)
<< "Reading observation data for "
@@ -790,18 +792,22 @@ void process_scores() {
// Read forecast climatology data
fcmn_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_mean_field, false),
- i, fcst_dp.valid(), grid);
+ i, fcst_dp.valid(), grid,
+ "forecast climatology mean");
fcsd_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_stdev_field, false),
- i, fcst_dp.valid(), grid);
+ i, fcst_dp.valid(), grid,
+ "forecast climatology standard deviation");
// Read observation climatology data
ocmn_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_mean_field, false),
- i, fcst_dp.valid(), grid);
+ i, fcst_dp.valid(), grid,
+ "observation climatology mean");
ocsd_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_stdev_field, false),
- i, fcst_dp.valid(), grid);
+ i, fcst_dp.valid(), grid,
+ "observation climatology standard deviation");
mlog << Debug(3)
<< "For " << conf_info.vx_opt[i].fcst_info->magic_str() << ", found "
@@ -1048,27 +1054,33 @@ void process_scores() {
// Read forecast data for UGRD
if(!read_data_plane(conf_info.vx_opt[ui].fcst_info,
- fu_dp, fcst_mtddf, fcst_file)) continue;
+ fu_dp, fcst_mtddf, fcst_file,
+ "U-wind forecast")) continue;
// Read observation data for UGRD
if(!read_data_plane(conf_info.vx_opt[ui].obs_info,
- ou_dp, obs_mtddf, obs_file)) continue;
+ ou_dp, obs_mtddf, obs_file,
+ "U-wind observation")) continue;
// Read the forecast climatology data for UGRD
fcmnu_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_mean_field, false),
- ui, fcst_dp.valid(), grid);
+ ui, fcst_dp.valid(), grid,
+ "forecast U-wind climatology mean");
fcsdu_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_stdev_field, false),
- ui, fcst_dp.valid(), grid);
+ ui, fcst_dp.valid(), grid,
+ "forecast U-wind climatology standard deviation");
// Read the observation climatology data for UGRD
ocmnu_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_mean_field, false),
- ui, fcst_dp.valid(), grid);
+ ui, fcst_dp.valid(), grid,
+ "observation U-wind climatology mean");
ocsdu_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_stdev_field, false),
- ui, fcst_dp.valid(), grid);
+ ui, fcst_dp.valid(), grid,
+ "observation U-wind climatology standard deviation");
// If requested in the config file, smooth the forecast
// and climatology U-wind fields
@@ -1178,7 +1190,6 @@ void process_scores() {
i, mthd, pnts,
conf_info.vx_opt[i].interp_info.field);
}
- /* MET #2924 Replace this section
if(conf_info.vx_opt[i].nc_info.do_climo &&
!fcmn_dp.is_empty()) {
write_nc((string)"FCST_CLIMO_MEAN", fcmn_dp,
@@ -1209,26 +1220,6 @@ void process_scores() {
i, mthd, pnts,
conf_info.vx_opt[i].interp_info.field);
}
- */
- if(conf_info.vx_opt[i].nc_info.do_climo &&
- !ocmn_dp.is_empty()) {
- write_nc((string)"CLIMO_MEAN", ocmn_dp,
- i, mthd, pnts,
- conf_info.vx_opt[i].interp_info.field);
- }
- if(conf_info.vx_opt[i].nc_info.do_climo &&
- !ocsd_dp.is_empty()) {
- write_nc((string)"CLIMO_STDEV", fcsd_dp,
- i, mthd, pnts,
- conf_info.vx_opt[i].interp_info.field);
- }
- if(conf_info.vx_opt[i].nc_info.do_climo &&
- !ocmn_dp.is_empty() && !ocsd_dp.is_empty()) {
- write_nc((string)"CLIMO_CDF", normal_cdf(obs_dp, ocmn_dp, ocsd_dp),
- i, mthd, pnts,
- conf_info.vx_opt[i].interp_info.field);
- }
- // MET #2924 End replace
// Write out the fields of requested climo distribution percentile threshold values
if(conf_info.vx_opt[i].nc_info.do_climo_cdp &&
@@ -1249,7 +1240,6 @@ void process_scores() {
// Process all CDP thresholds except 0 and 100
for(vector::iterator it = simp.begin();
it != simp.end(); it++) {
- /* MET #2924 Replace this section
if(it->ptype() == perc_thresh_fcst_climo_dist &&
!is_eq(it->pvalue(), 0.0) &&
!is_eq(it->pvalue(), 100.0)) {
@@ -1266,16 +1256,6 @@ void process_scores() {
i, mthd, pnts,
conf_info.vx_opt[i].interp_info.field);
}
- */
- if(it->ptype() == perc_thresh_obs_climo_dist &&
- !is_eq(it->pvalue(), 0.0) &&
- !is_eq(it->pvalue(), 100.0)) {
- cs << cs_erase << "CLIMO_CDP" << nint(it->pvalue());
- write_nc(cs, normal_cdf_inv(it->pvalue()/100.0, ocmn_dp, ocsd_dp),
- i, mthd, pnts,
- conf_info.vx_opt[i].interp_info.field);
- }
- // MET #2924 End replace
} // end for it
}
@@ -1912,19 +1892,23 @@ void process_scores() {
// Read forecast data for UGRD
if(!read_data_plane(conf_info.vx_opt[ui].fcst_info,
- fu_dp, fcst_mtddf, fcst_file)) continue;
+ fu_dp, fcst_mtddf, fcst_file,
+ "U-wind forecast")) continue;
// Read observation data for UGRD
if(!read_data_plane(conf_info.vx_opt[ui].obs_info,
- ou_dp, obs_mtddf, obs_file)) continue;
+ ou_dp, obs_mtddf, obs_file,
+ "U-wind observation")) continue;
// Read climatology data for UGRD
fcmnu_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_mean_field, false),
- ui, fcst_dp.valid(), grid);
+ ui, fcst_dp.valid(), grid,
+ "forecast U-wind climatology mean");
ocmnu_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_mean_field, false),
- ui, fcst_dp.valid(), grid);
+ ui, fcst_dp.valid(), grid,
+ "observation U-wind climatology mean");
// Apply Fourier decomposition to the U-wind fields
fu_dp_smooth = fu_dp;
@@ -2037,7 +2021,6 @@ void process_scores() {
i, shc.get_interp_mthd(),
bad_data_int, FieldType::Both);
}
- /* MET #2924 Replace this change
if(conf_info.vx_opt[i].nc_info.do_climo &&
!fcmn_dp_smooth.is_empty()) {
write_nc((string)"FCST_CLIMO_MEAN", fcmn_dp_smooth,
@@ -2050,14 +2033,6 @@ void process_scores() {
i, shc.get_interp_mthd(),
bad_data_int, FieldType::Both);
}
- */
- if(conf_info.vx_opt[i].nc_info.do_climo &&
- !ocmn_dp_smooth.is_empty()) {
- write_nc((string)"CLIMO_MEAN", ocmn_dp_smooth,
- i, shc.get_interp_mthd(),
- bad_data_int, FieldType::Both);
- }
- // MET #2924 End replace
} // end if
} // end for j
@@ -2838,7 +2813,6 @@ void write_nc(const ConcatString &field_name, const DataPlane &dp,
level_att = shc.get_fcst_lev();
units_att = conf_info.vx_opt[i_vx].fcst_info->units_attr();
}
- /* MET #2924 Replace this section
else if(field_name == "OBS_CLIMO_MEAN") {
var_name << cs_erase << field_name << "_"
<< obs_name << var_suffix << "_" << mask_str;
@@ -2895,52 +2869,6 @@ void write_nc(const ConcatString &field_name, const DataPlane &dp,
level_att = shc.get_obs_lev();
units_att = conf_info.vx_opt[i_vx].obs_info->units_attr();
}
- */
- else if(field_name == "CLIMO_MEAN") {
- var_name << cs_erase << field_name << "_"
- << obs_name << var_suffix << "_" << mask_str;
-
- // Append interpolation string for Fourier decomposition
- if(interp_str.nonempty()) {
- if(interp_str.startswith("_WV")) var_name << interp_str;
- }
- long_att << cs_erase
- << "Climatology mean for "
- << obs_long_name;
- level_att = shc.get_obs_lev();
- units_att = conf_info.vx_opt[i_vx].obs_info->units_attr();
- }
- else if(field_name == "CLIMO_STDEV") {
- var_name << cs_erase << field_name << "_"
- << obs_name << var_suffix << "_" << mask_str;
- long_att << cs_erase
- << "Climatology standard deviation for "
- << obs_long_name;
- level_att = shc.get_obs_lev();
- units_att = conf_info.vx_opt[i_vx].obs_info->units_attr();
- }
- else if(field_name == "CLIMO_CDF") {
- var_name << cs_erase << field_name << "_"
- << obs_name << var_suffix << "_" << mask_str;
- long_att << cs_erase
- << "Climatology cumulative distribution function for "
- << obs_long_name;
- level_att = shc.get_obs_lev();
- units_att = conf_info.vx_opt[i_vx].obs_info->units_attr();
- }
- else if(field_name.startswith("CLIMO_CDP")) {
- var_name << cs_erase
- << field_name << "_"
- << conf_info.vx_opt[i_vx].obs_info->name_attr() << "_"
- << conf_info.vx_opt[i_vx].obs_info->level_attr()
- << var_suffix << "_" << mask_str;
- long_att << cs_erase
- << "Climatology distribution percentile thresholds for "
- << obs_long_name;
- level_att = shc.get_obs_lev();
- units_att = conf_info.vx_opt[i_vx].obs_info->units_attr();
- }
- // MET #2924 end replace
else if(check_reg_exp("FCST_XGRAD_", field_name.c_str()) ||
check_reg_exp("FCST_YGRAD_", field_name.c_str())) {
var_name << cs_erase << field_name << "_"
@@ -3394,15 +3322,15 @@ void set_compress(const StringArray & a) {
////////////////////////////////////////////////////////////////////////
-bool read_data_plane(VarInfo* info, DataPlane& dp, Met2dDataFile* mtddf,
- const ConcatString &filename) {
+bool read_data_plane(VarInfo *info, DataPlane &dp, Met2dDataFile *mtddf,
+ const ConcatString &filename, const char *desc) {
bool status = mtddf->data_plane(*info, dp);
if(!status) {
mlog << Warning << "\nread_data_plane() -> "
<< info->magic_str()
- << " not found in file: " << filename
+ << " not found in " << desc << " file: " << filename
<< "\n\n";
return false;
}
@@ -3410,7 +3338,7 @@ bool read_data_plane(VarInfo* info, DataPlane& dp, Met2dDataFile* mtddf,
// Regrid, if necessary
if(!(mtddf->grid() == grid)) {
mlog << Debug(1)
- << "Regridding field "
+ << "Regridding " << desc << " field "
<< info->magic_str()
<< " to the verification grid.\n";
dp = met_regrid(dp, mtddf->grid(), grid, info->regrid());
diff --git a/src/tools/core/point_stat/point_stat.cc b/src/tools/core/point_stat/point_stat.cc
index 5532ea7e1d..bda41ddf26 100644
--- a/src/tools/core/point_stat/point_stat.cc
+++ b/src/tools/core/point_stat/point_stat.cc
@@ -668,18 +668,22 @@ void process_fcst_climo_files() {
// Read forecast climatology data
fcmn_dpa = read_climo_data_plane_array(
conf_info.conf.lookup_array(conf_key_fcst_climo_mean_field, false),
- i, fcst_dpa[0].valid(), grid);
+ i, fcst_dpa[0].valid(), grid,
+ "forecast climatology mean");
fcsd_dpa = read_climo_data_plane_array(
conf_info.conf.lookup_array(conf_key_fcst_climo_stdev_field, false),
- i, fcst_dpa[0].valid(), grid);
+ i, fcst_dpa[0].valid(), grid,
+ "forecast climatology standard deviation");
// Read observation climatology data
ocmn_dpa = read_climo_data_plane_array(
conf_info.conf.lookup_array(conf_key_obs_climo_mean_field, false),
- i, fcst_dpa[0].valid(), grid);
+ i, fcst_dpa[0].valid(), grid,
+ "observation climatology mean");
ocsd_dpa = read_climo_data_plane_array(
conf_info.conf.lookup_array(conf_key_obs_climo_stdev_field, false),
- i, fcst_dpa[0].valid(), grid);
+ i, fcst_dpa[0].valid(), grid,
+ "observation climatology standard deviation");
// Store data for the current verification task
conf_info.vx_opt[i].vx_pd.set_fcst_dpa(fcst_dpa);
diff --git a/src/tools/core/series_analysis/series_analysis.cc b/src/tools/core/series_analysis/series_analysis.cc
index 5622908e0d..a2e8cdf5c1 100644
--- a/src/tools/core/series_analysis/series_analysis.cc
+++ b/src/tools/core/series_analysis/series_analysis.cc
@@ -738,19 +738,25 @@ void process_scores() {
<< min(i_point + conf_info.block_size, nxy) << ".\n";
}
- // Read climatology data for the current series entry
+ // Read forecast climatology data
fcmn_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_mean_field, false),
- i_fcst, fcst_dp.valid(), grid);
+ i_fcst, fcst_dp.valid(), grid,
+ "forecast climatology mean");
fcsd_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_fcst_climo_stdev_field, false),
- i_fcst, fcst_dp.valid(), grid);
+ i_fcst, fcst_dp.valid(), grid,
+ "forecast climatology standard deviation");
+
+ // Read observation climatology data
ocmn_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_mean_field, false),
- i_fcst, fcst_dp.valid(), grid);
+ i_fcst, fcst_dp.valid(), grid,
+ "observation climatology mean");
ocsd_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_obs_climo_stdev_field, false),
- i_fcst, fcst_dp.valid(), grid);
+ i_fcst, fcst_dp.valid(), grid,
+ "observation climatology standard deviation");
bool fcmn_flag = (fcmn_dp.nx() == fcst_dp.nx() &&
fcmn_dp.ny() == fcst_dp.ny());
diff --git a/src/tools/other/gen_ens_prod/gen_ens_prod.cc b/src/tools/other/gen_ens_prod/gen_ens_prod.cc
index 368fceab6f..b088c74dcf 100644
--- a/src/tools/other/gen_ens_prod/gen_ens_prod.cc
+++ b/src/tools/other/gen_ens_prod/gen_ens_prod.cc
@@ -469,7 +469,8 @@ void get_climo_mean_stdev(GenEnsProdVarInfo *ens_info, int i_var,
cmn_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_climo_mean_field, false),
- i_var, ens_valid_ut, grid);
+ i_var, ens_valid_ut, grid,
+ "climatology mean");
mlog << Debug(4)
<< "Reading climatology standard deviation data for ensemble field \""
@@ -477,7 +478,8 @@ void get_climo_mean_stdev(GenEnsProdVarInfo *ens_info, int i_var,
csd_dp = read_climo_data_plane(
conf_info.conf.lookup_array(conf_key_climo_stdev_field, false),
- i_var, ens_valid_ut, grid);
+ i_var, ens_valid_ut, grid,
+ "climatology standard deviation");
// Unset the MET_ENS_MEMBER_ID environment variable
if(set_ens_mem_id) {
diff --git a/src/tools/other/gsi_tools/gsid2mpr.cc b/src/tools/other/gsi_tools/gsid2mpr.cc
index e5a770f8e3..d0468d3b08 100644
--- a/src/tools/other/gsi_tools/gsid2mpr.cc
+++ b/src/tools/other/gsi_tools/gsid2mpr.cc
@@ -392,10 +392,8 @@ void write_mpr_row_conv(AsciiTable &at, int row, const ConvData &d) {
at.set_entry(row, col++, na_str); // OBS_CLIMO_MEAN
at.set_entry(row, col++, na_str); // OBS_CLIMO_STDEV
at.set_entry(row, col++, na_str); // OBS_CLIMO_CDF
- /* MET #2924 Uncomment this section
at.set_entry(row, col++, na_str); // FCST_CLIMO_MEAN
at.set_entry(row, col++, na_str); // FCST_CLIMO_STDEV
- */
// Write extra columns
at.set_entry(row, col++, d.prs); // OBS_PRS
@@ -450,10 +448,8 @@ void write_mpr_row_rad(AsciiTable &at, int row, const RadData & d) {
at.set_entry(row, col++, na_str); // OBS_CLIMO_MEAN
at.set_entry(row, col++, na_str); // OBS_CLIMO_STDEV
at.set_entry(row, col++, na_str); // OBS_CLIMO_CDF
- /* MET #2924 Uncomment this section
at.set_entry(row, col++, na_str); // FCST_CLIMO_MEAN
at.set_entry(row, col++, na_str); // FCST_CLIMO_STDEV
- */
// Write extra columns
at.set_entry(row, col++, d.use); // CHAN_USE
diff --git a/src/tools/other/gsi_tools/gsidens2orank.cc b/src/tools/other/gsi_tools/gsidens2orank.cc
index fed035bd69..39edb87cc5 100644
--- a/src/tools/other/gsi_tools/gsidens2orank.cc
+++ b/src/tools/other/gsi_tools/gsidens2orank.cc
@@ -641,10 +641,8 @@ void write_orank_row_conv(AsciiTable &at, int row, int i_obs) {
at.set_entry(row, col++, bad_data_double); // SPREAD_OERR
at.set_entry(row, col++, bad_data_double); // SPREAD_PLUS_OERR
at.set_entry(row, col++, bad_data_double); // OBS_CLIMO_STDEV
- /* MET #2924 Uncomment this section
at.set_entry(row, col++, bad_data_double); // FCST_CLIMO_MEAN
at.set_entry(row, col++, bad_data_double); // FCST_CLIMO_STDEV
- */
// Write extra columns
at.set_entry(row, col++, d->n_use); // N_USE
@@ -711,10 +709,8 @@ void write_orank_row_rad(AsciiTable &at, int row, int i_obs) {
at.set_entry(row, col++, bad_data_double); // SPREAD_OERR
at.set_entry(row, col++, bad_data_double); // SPREAD_PLUS_OERR
at.set_entry(row, col++, bad_data_double); // OBS_CLIMO_STDEV
- /* MET #2924 Uncomment this section
at.set_entry(row, col++, bad_data_double); // FCST_CLIMO_MEAN
at.set_entry(row, col++, bad_data_double); // FCST_CLIMO_STDEV
- */
// Write extra columns
at.set_entry(row, col++, d->n_use); // N_USE