diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 4c1eb33e9c..4e6e3872b7 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -176,7 +176,7 @@ jobs: - jobid: 'job1' tests: 'ascii2nc_indy pb2nc_indy tc_dland tc_pairs tc_stat plot_tc tc_rmw rmw_analysis tc_diag tc_gen' - jobid: 'job2' - tests: 'met_test_scripts mode_multivar mode_graphics mtd regrid airnow gsi_tools netcdf modis series_analysis wwmca_regrid gen_vx_mask grid_weight interp_shape grid_diag grib_tables lidar2nc shift_data_plane trmm2nc aeronet wwmca_plot ioda2nc gaussian' + tests: 'met_test_scripts mode_multivar mode_graphics mtd regrid airnow gsi_tools netcdf modis series_analysis wwmca_regrid gen_vx_mask interp_shape grid_diag grib_tables lidar2nc shift_data_plane trmm2nc aeronet wwmca_plot ioda2nc gaussian' fail-fast: false steps: - uses: actions/checkout@v4 @@ -310,6 +310,8 @@ jobs: tests: 'ensemble_stat stat_analysis_es' - jobid: 'job5' tests: 'ugrid' + - jobid: 'job6' + tests: 'grid_weight point_weight' fail-fast: false steps: - uses: actions/checkout@v4 diff --git a/data/config/ConfigConstants b/data/config/ConfigConstants index 23210b6c34..15a2a8db4c 100644 --- a/data/config/ConfigConstants +++ b/data/config/ConfigConstants @@ -137,6 +137,10 @@ NONE = 1; COS_LAT = 2; AREA = 3; +// Point weight flag settings +NONE = 1; +SID = 2; + // Duplicate flag settings NONE = 1; UNIQUE = 2; diff --git a/data/config/EnsembleStatConfig_default b/data/config/EnsembleStatConfig_default index c496dd3507..c4b2463f7d 100644 --- a/data/config/EnsembleStatConfig_default +++ b/data/config/EnsembleStatConfig_default @@ -120,6 +120,8 @@ message_type_group_map = [ { key = "ONLYSF"; val = "ADPSFC,SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + // // Ensemble bin sizes // May be set separately in each "obs.field" entry @@ -266,8 +268,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = ""; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = ""; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/data/config/GridStatConfig_default b/data/config/GridStatConfig_default index 4a0c7dce44..aa4d9517b5 100644 --- a/data/config/GridStatConfig_default +++ b/data/config/GridStatConfig_default @@ -271,8 +271,9 @@ nc_pairs_flag = { //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = ""; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = ""; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/data/config/PointStatConfig_default b/data/config/PointStatConfig_default index 266c251e59..95665fe017 100644 --- a/data/config/PointStatConfig_default +++ b/data/config/PointStatConfig_default @@ -115,6 +115,8 @@ message_type_group_map = [ { key = "WATERSF"; val = "SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + //////////////////////////////////////////////////////////////////////////////// // @@ -305,8 +307,10 @@ output_flag = { //////////////////////////////////////////////////////////////////////////////// -tmp_dir = "/tmp"; -output_prefix = ""; -version = "V12.0.0"; +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = ""; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/docs/Users_Guide/config_options.rst b/docs/Users_Guide/config_options.rst index 25515fc524..b85b2d233b 100644 --- a/docs/Users_Guide/config_options.rst +++ b/docs/Users_Guide/config_options.rst @@ -667,6 +667,25 @@ used. { key = "ONLYSF"; val = "ADPSFC,SFCSHP"; } ]; +obtype_as_group_val_flag +------------------------ + +The "obtype_as_group_val_flag" entry is a boolean that controls how the +OBTYPE header column is populated for message type groups defined in +"message_type_group_map". If set to TRUE and when writing matched pair +line types (MPR, SEEPS_MPR, and ORANK), write OBTYPE as the group map +*value*, i.e. the input message type for each individual observation. +If set to FALSE (default) and for all other line types, write OBTYPE +as the group map key, i.e. the name of the message type group. + +For example, if FALSE, write the OBTYPE column in the MPR line type +as the "ANYAIR" message type group name. If TRUE, write OBTYPE as "AIRCAR" +or "AIRCFT", based on the input message type of each point observation. + +.. code-block:: none + + obtyp_as_group_val_flag = FALSE; + message_type_map ---------------- @@ -1847,15 +1866,18 @@ in the following ways: embedded within another quoted string. Any such embedded quotes must be escaped using a preceeding backslash character. -* The "sid" entry is an array of strings which define groups of - observation station ID's over which to compute statistics. Each entry - in the array is either a filename of a comma-separated list. +* The "sid" entry is an array of strings which define groups of observation station + ID's over which to compute statistics. Each station ID string can be followed by an + optional numeric weight enclosed in parenethesis and used by the "point_weight_flag" + configuration option. Each entry in the "sid" "array is either a filename or a + comma-separated list. - * For a filename, the strings are whitespace-separated. The first - string is the mask "name" and the remaining strings are the station + * For an ASCII filename, the strings contained within it are whitespace-separated. + The first string is the mask "name" and the remaining strings are the station ID's to be used. * For a comma-separated list, optionally use a colon to specify a name. - For "MY_LIST:SID1,SID2", name = MY_LIST and values = SID1 and SID2. + For "MY_LIST:SID1(WGT1),SID2(WGT2)", name = MY_LIST which consists of + two station ID's (SID1 and SID2) and optional numeric weights (WGT1 and WGT2). * For a comma-separated list of length one with no name specified, the mask "name" and value are both set to the single station ID string. For "SID1", name = SID1 and value = SID1. @@ -1865,6 +1887,7 @@ in the following ways: For "SID1,SID2", name = MASK_SID and values = SID1 and SID2. * The "name" of the station ID mask is written to the VX_MASK column of the MET output files. + * The "llpnt" entry is either a single dictionary or an array of dictionaries. Each dictionary contains three entries, the "name" for the masking region, "lat_thresh", and "lon_thresh". The latitude and @@ -2353,8 +2376,9 @@ NBRCTC), partial sums (SL1L2, SAL1L2, VL1L2, and VAL1L2), and statistics It is meant to account for grid box area distortion and is often applied to global Lat/Lon grids. It is only applied for grid-to-grid verification in Grid-Stat and Ensemble-Stat and is not applied for grid-to-point -verification. It can only be defined once at the highest level of config -file context and applies to all verification tasks for that run. +verification, which is controlled by the "point_weight_flag" option. +It can only be defined once at the highest level of config file context +and applies to all verification tasks for that run. Three grid weighting options are currently supported: @@ -2391,6 +2415,27 @@ versions of MET. grid_weight_flag = NONE; +point_weight_flag +----------------- + +The "point_weight_flag" is similar to the "grid_weight_flag", described above, +but applies to grid-to-point verification in Point-Stat and Ensemble-Stat. +It is not applied for grid-to-grid verification which is controlled by the +"grid_weight_flag" option. It can only be defined once at the highest level +of config file context and applies to all verification tasks for that run. + +While only one point weighting option is currently supported, additional +methods are planned for future versions: + +* NONE to disable point weighting using a constant weight of 1.0 (default). + +* SID to use the weights defined by the station ID masking configuration option, + "mask.sid". + +.. code-block:: none + + point_weight_flag = NONE; + hss_ec_value ------------ diff --git a/docs/Users_Guide/ensemble-stat.rst b/docs/Users_Guide/ensemble-stat.rst index 8a2502c525..1680164d70 100644 --- a/docs/Users_Guide/ensemble-stat.rst +++ b/docs/Users_Guide/ensemble-stat.rst @@ -181,14 +181,27 @@ ____________________ obs_summary = NONE; obs_perc_value = 50; message_type_group_map = [...]; + obtype_as_group_val_flag = FALSE; grid_weight_flag = NONE; + point_weight_flag = NONE; output_prefix = ""; version = "VN.N"; The configuration options listed above are common to many MET tools and are described in :numref:`config_options`. -Note that the **HIRA** interpolation method is only supported in Ensemble-Stat. +.. note:: + + The **HIRA** interpolation method is only supported in Ensemble-Stat. + +.. note:: + + The "grid_weight_flag" and "point_weight_flag" options described in + :numref:`config_options` define how matched pairs are weighted for + grid-to-grid and grid-to-point verification in Ensemble-Stat. These + weights currently only apply to the computation of probabilistic + outputs (PCT, PSTD, PJC, and PRC) but no other Ensemble-Stat output + line types. _____________________ diff --git a/docs/Users_Guide/point-stat.rst b/docs/Users_Guide/point-stat.rst index 73b7ce9a33..41e154ac8c 100644 --- a/docs/Users_Guide/point-stat.rst +++ b/docs/Users_Guide/point-stat.rst @@ -362,6 +362,8 @@ ________________________ obs_summary = NONE; obs_perc_value = 50; message_type_group_map = [...]; + obtype_as_group_val_flag = FALSE; + point_weight_flag = NONE; tmp_dir = "/tmp"; output_prefix = ""; version = "VN.N"; diff --git a/internal/test_unit/config/EnsembleStatConfig b/internal/test_unit/config/EnsembleStatConfig index 80157bed0c..59661a5fe2 100644 --- a/internal/test_unit/config/EnsembleStatConfig +++ b/internal/test_unit/config/EnsembleStatConfig @@ -226,8 +226,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_MASK_SID b/internal/test_unit/config/EnsembleStatConfig_MASK_SID index 96128cb148..28bd9899b3 100644 --- a/internal/test_unit/config/EnsembleStatConfig_MASK_SID +++ b/internal/test_unit/config/EnsembleStatConfig_MASK_SID @@ -218,8 +218,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_climo b/internal/test_unit/config/EnsembleStatConfig_climo index 06699abf0a..89abf95dd8 100644 --- a/internal/test_unit/config/EnsembleStatConfig_climo +++ b/internal/test_unit/config/EnsembleStatConfig_climo @@ -248,8 +248,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_grid_weight b/internal/test_unit/config/EnsembleStatConfig_grid_weight index 12994a3a5b..67da4d825f 100644 --- a/internal/test_unit/config/EnsembleStatConfig_grid_weight +++ b/internal/test_unit/config/EnsembleStatConfig_grid_weight @@ -240,8 +240,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = ${GRID_WEIGHT}; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = ${GRID_WEIGHT}; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_one_cdf_bin b/internal/test_unit/config/EnsembleStatConfig_one_cdf_bin index 013763c74d..3828b386e5 100644 --- a/internal/test_unit/config/EnsembleStatConfig_one_cdf_bin +++ b/internal/test_unit/config/EnsembleStatConfig_one_cdf_bin @@ -232,8 +232,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_point_weight b/internal/test_unit/config/EnsembleStatConfig_point_weight new file mode 100644 index 0000000000..2e9ad158b8 --- /dev/null +++ b/internal/test_unit/config/EnsembleStatConfig_point_weight @@ -0,0 +1,214 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Ensemble-Stat configuration file. +// +// For additional information, please see the MET User's Guide. +// +//////////////////////////////////////////////////////////////////////////////// + +// +// Output model name to be written +// +model = "FCST"; + +// +// Output description to be written +// May be set separately in each "obs.field" entry +// +desc = "${DESC}"; + +// +// Output observation type to be written +// +obtype = "ANALYS"; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Verification grid +// +regrid = { + to_grid = NONE; + method = NEAREST; + width = 1; + vld_thresh = 0.5; + shape = SQUARE; +} + +//////////////////////////////////////////////////////////////////////////////// + +// +// IDs for ensemble members +// Only set if processing a single file with all ensembles +// +ens_member_ids = []; +control_id = ""; + +// +// May be set separately in each "fcst.field" and "obs.field" entry +// +censor_thresh = []; +censor_val = []; +prob_cat_thresh = []; + +// +// May be set separately in each "fcst.field" entry +// +prob_pct_thresh = [ ==0.25 ]; + +// +// May be set separately in each "obs.field" entry +// +nc_var_str = ""; +eclv_points = 0.05; + +// +// Forecast and observation fields to be verified +// +fcst = { + ens_thresh = 0.75; + vld_thresh = 1.0; + message_type = [ "ADPSFC" ]; + obs_quality_inc = []; + obs_quality_exc = []; + + field = [ + { name = "APCP"; level = "A24"; prob_cat_thresh = [ >=2.54 ]; } + ]; +} +obs = fcst; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Point observation filtering options +// May be set separately in each "obs.field" entry +// +message_type = []; +sid_inc = []; +sid_exc = []; +obs_thresh = [ NA ]; +obs_quality_inc = []; +obs_quality_exc = []; +duplicate_flag = NONE; +obs_summary = NONE; +obs_perc_value = 50; +skip_const = FALSE; + +// +// Observation error options +// Set dist_type to NONE to use the observation error table instead +// May be set separately in each "obs.field" entry +// +obs_error = { + flag = FALSE; + dist_type = NONE; + dist_parm = []; + inst_bias_scale = 1.0; + inst_bias_offset = 0.0; + min = NA; + max = NA; +} + +// +// Ensemble bin sizes +// May be set separately in each "obs.field" entry +// +ens_ssvar_bin_size = 1.0; +ens_phist_bin_size = 0.05; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Point observation time window +// +obs_window = { + beg = -5400; + end = 5400; +} + +//////////////////////////////////////////////////////////////////////////////// + +// +// Verification masking regions +// +mask = { + grid = []; + poly = []; + sid = [ "${CONFIG_DIR}/SID_CONUS_ADPSFC_ELEV.txt" ]; + llpnt = []; +} + +//////////////////////////////////////////////////////////////////////////////// + +// +// Confidence interval settings +// +ci_alpha = [ 0.05 ]; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Interpolation methods +// +interp = { + field = BOTH; + vld_thresh = 1.0; + shape = SQUARE; + + type = [ + { + method = NEAREST; + width = 1; + } + ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +// +// Statistical output types +// May be set separately in each "obs.field" entry +// +output_flag = { + ecnt = NONE; + rps = NONE; + rhist = NONE; + phist = NONE; + orank = NONE; + ssvar = NONE; + relp = NONE; + pct = STAT; + pstd = STAT; + pjc = STAT; + prc = STAT; + eclv = STAT; +} + +//////////////////////////////////////////////////////////////////////////////// + +// +// Gridded verification output types +// May be set separately in each "obs.field" entry +// +nc_orank_flag = FALSE; + +//////////////////////////////////////////////////////////////////////////////// + +// +// Random number generator +// +rng = { + type = "mt19937"; + seed = "1"; +} + +//////////////////////////////////////////////////////////////////////////////// + +grid_weight_flag = NONE; +point_weight_flag = ${POINT_WEIGHT}; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; + +//////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_python b/internal/test_unit/config/EnsembleStatConfig_python index 4de2045664..1b32091705 100644 --- a/internal/test_unit/config/EnsembleStatConfig_python +++ b/internal/test_unit/config/EnsembleStatConfig_python @@ -119,6 +119,8 @@ message_type_group_map = [ { key = "ONLYSF"; val = "ADPSFC,SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + // // Ensemble bin sizes // May be set separately in each "obs.field" entry @@ -222,8 +224,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_qty_inc_exc b/internal/test_unit/config/EnsembleStatConfig_qty_inc_exc index 0881ff3b8d..0a0bf9b074 100644 --- a/internal/test_unit/config/EnsembleStatConfig_qty_inc_exc +++ b/internal/test_unit/config/EnsembleStatConfig_qty_inc_exc @@ -235,8 +235,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_rps_climo_bin_prob b/internal/test_unit/config/EnsembleStatConfig_rps_climo_bin_prob index af4354bfea..ea1023dc36 100644 --- a/internal/test_unit/config/EnsembleStatConfig_rps_climo_bin_prob +++ b/internal/test_unit/config/EnsembleStatConfig_rps_climo_bin_prob @@ -216,8 +216,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_single_file_grib b/internal/test_unit/config/EnsembleStatConfig_single_file_grib index 20220f82b5..ba1ec381a2 100644 --- a/internal/test_unit/config/EnsembleStatConfig_single_file_grib +++ b/internal/test_unit/config/EnsembleStatConfig_single_file_grib @@ -131,6 +131,8 @@ message_type_group_map = [ { key = "ONLYSF"; val = "ADPSFC,SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + // // Ensemble bin sizes // May be set separately in each "obs.field" entry @@ -271,8 +273,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/EnsembleStatConfig_single_file_nc b/internal/test_unit/config/EnsembleStatConfig_single_file_nc index b3faf78d95..f9d18a2129 100644 --- a/internal/test_unit/config/EnsembleStatConfig_single_file_nc +++ b/internal/test_unit/config/EnsembleStatConfig_single_file_nc @@ -137,6 +137,8 @@ message_type_group_map = [ { key = "ONLYSF"; val = "ADPSFC,SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + // // Ensemble bin sizes // May be set separately in each "obs.field" entry @@ -277,8 +279,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_APCP_regrid b/internal/test_unit/config/GridStatConfig_APCP_regrid index 74bbba5b4d..aea9adeaef 100644 --- a/internal/test_unit/config/GridStatConfig_APCP_regrid +++ b/internal/test_unit/config/GridStatConfig_APCP_regrid @@ -208,8 +208,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_GRIB_lvl_typ_val b/internal/test_unit/config/GridStatConfig_GRIB_lvl_typ_val index 64381023a8..ecce9ddfdf 100644 --- a/internal/test_unit/config/GridStatConfig_GRIB_lvl_typ_val +++ b/internal/test_unit/config/GridStatConfig_GRIB_lvl_typ_val @@ -305,8 +305,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "GRIB_lvl_typ_val"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "GRIB_lvl_typ_val"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_GRIB_set_attr b/internal/test_unit/config/GridStatConfig_GRIB_set_attr index cb2f86984c..36ab040a33 100644 --- a/internal/test_unit/config/GridStatConfig_GRIB_set_attr +++ b/internal/test_unit/config/GridStatConfig_GRIB_set_attr @@ -237,8 +237,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "GRIB_set_attr"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "GRIB_set_attr"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_GTG_latlon b/internal/test_unit/config/GridStatConfig_GTG_latlon index 90be6f2172..77edd743db 100644 --- a/internal/test_unit/config/GridStatConfig_GTG_latlon +++ b/internal/test_unit/config/GridStatConfig_GTG_latlon @@ -216,8 +216,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_GTG_lc b/internal/test_unit/config/GridStatConfig_GTG_lc index ddd8321fdd..0385bfda9e 100644 --- a/internal/test_unit/config/GridStatConfig_GTG_lc +++ b/internal/test_unit/config/GridStatConfig_GTG_lc @@ -216,8 +216,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_SEEPS b/internal/test_unit/config/GridStatConfig_SEEPS index 51bc14e2d6..808e5a10f3 100644 --- a/internal/test_unit/config/GridStatConfig_SEEPS +++ b/internal/test_unit/config/GridStatConfig_SEEPS @@ -215,8 +215,9 @@ seeps_grid_climo_name = "${SEEPS_GRID_CLIMO_NAME}"; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_WRF_pres b/internal/test_unit/config/GridStatConfig_WRF_pres index 10d46e8f94..98851dfa7b 100644 --- a/internal/test_unit/config/GridStatConfig_WRF_pres +++ b/internal/test_unit/config/GridStatConfig_WRF_pres @@ -281,8 +281,9 @@ ugrid_coordinates_file = ""; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_apply_mask b/internal/test_unit/config/GridStatConfig_apply_mask index 77af6251c0..041cae792d 100644 --- a/internal/test_unit/config/GridStatConfig_apply_mask +++ b/internal/test_unit/config/GridStatConfig_apply_mask @@ -217,8 +217,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// 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 index 8783cbd9e1..8eab6dccb0 100644 --- 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 @@ -284,8 +284,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = COS_LAT; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_climo_WMO b/internal/test_unit/config/GridStatConfig_climo_WMO index 739d122295..5e37820412 100644 --- a/internal/test_unit/config/GridStatConfig_climo_WMO +++ b/internal/test_unit/config/GridStatConfig_climo_WMO @@ -278,8 +278,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = COS_LAT; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_climo_prob b/internal/test_unit/config/GridStatConfig_climo_prob index 3f00164d86..a1d35ed9e2 100644 --- a/internal/test_unit/config/GridStatConfig_climo_prob +++ b/internal/test_unit/config/GridStatConfig_climo_prob @@ -288,8 +288,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = COS_LAT; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_climo_wrap_year b/internal/test_unit/config/GridStatConfig_climo_wrap_year index beacc6825d..d0a6296ac8 100644 --- a/internal/test_unit/config/GridStatConfig_climo_wrap_year +++ b/internal/test_unit/config/GridStatConfig_climo_wrap_year @@ -259,8 +259,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_fbias_perc_thresh b/internal/test_unit/config/GridStatConfig_fbias_perc_thresh index 9d9d544afb..cb8c1ba195 100644 --- a/internal/test_unit/config/GridStatConfig_fbias_perc_thresh +++ b/internal/test_unit/config/GridStatConfig_fbias_perc_thresh @@ -203,8 +203,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_fourier b/internal/test_unit/config/GridStatConfig_fourier index 3ec891b8dd..c1ae46bb99 100644 --- a/internal/test_unit/config/GridStatConfig_fourier +++ b/internal/test_unit/config/GridStatConfig_fourier @@ -243,8 +243,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_gen_ens_prod b/internal/test_unit/config/GridStatConfig_gen_ens_prod index 015ef3e946..653f178a52 100644 --- a/internal/test_unit/config/GridStatConfig_gen_ens_prod +++ b/internal/test_unit/config/GridStatConfig_gen_ens_prod @@ -278,8 +278,9 @@ ugrid_coordinates_file = ""; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_grid_weight b/internal/test_unit/config/GridStatConfig_grid_weight index 27b266dfa8..0ac9eb393c 100644 --- a/internal/test_unit/config/GridStatConfig_grid_weight +++ b/internal/test_unit/config/GridStatConfig_grid_weight @@ -228,8 +228,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = ${GRID_WEIGHT}; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_interp_shape b/internal/test_unit/config/GridStatConfig_interp_shape index ad250e9802..ac3179cf94 100644 --- a/internal/test_unit/config/GridStatConfig_interp_shape +++ b/internal/test_unit/config/GridStatConfig_interp_shape @@ -211,8 +211,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +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 e99405be7a..54ea06965f 100644 --- a/internal/test_unit/config/GridStatConfig_mpr_thresh +++ b/internal/test_unit/config/GridStatConfig_mpr_thresh @@ -276,8 +276,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = COS_LAT; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_no_leap b/internal/test_unit/config/GridStatConfig_no_leap index 32d05b0862..f22c8e3008 100644 --- a/internal/test_unit/config/GridStatConfig_no_leap +++ b/internal/test_unit/config/GridStatConfig_no_leap @@ -217,8 +217,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_prob_as_scalar b/internal/test_unit/config/GridStatConfig_prob_as_scalar index 0d5bdd25cb..2b8b91a0c4 100644 --- a/internal/test_unit/config/GridStatConfig_prob_as_scalar +++ b/internal/test_unit/config/GridStatConfig_prob_as_scalar @@ -238,8 +238,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_python b/internal/test_unit/config/GridStatConfig_python index 7ca801748e..14021bd14d 100644 --- a/internal/test_unit/config/GridStatConfig_python +++ b/internal/test_unit/config/GridStatConfig_python @@ -218,8 +218,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "python"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "python"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_python_mixed b/internal/test_unit/config/GridStatConfig_python_mixed index 9a39bc9533..b4c9feff07 100644 --- a/internal/test_unit/config/GridStatConfig_python_mixed +++ b/internal/test_unit/config/GridStatConfig_python_mixed @@ -222,8 +222,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "python_mixed"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "python_mixed"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_rtma b/internal/test_unit/config/GridStatConfig_rtma index ddef797d2e..fea47945db 100644 --- a/internal/test_unit/config/GridStatConfig_rtma +++ b/internal/test_unit/config/GridStatConfig_rtma @@ -218,8 +218,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_rtma_perc_thresh b/internal/test_unit/config/GridStatConfig_rtma_perc_thresh index 44ed5f564f..f468a9d1ba 100644 --- a/internal/test_unit/config/GridStatConfig_rtma_perc_thresh +++ b/internal/test_unit/config/GridStatConfig_rtma_perc_thresh @@ -221,8 +221,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_st4 b/internal/test_unit/config/GridStatConfig_st4 index 71d165e98a..1a55fc2cca 100644 --- a/internal/test_unit/config/GridStatConfig_st4 +++ b/internal/test_unit/config/GridStatConfig_st4 @@ -222,8 +222,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_st4_censor b/internal/test_unit/config/GridStatConfig_st4_censor index e1e9adb1df..bfc90cad92 100644 --- a/internal/test_unit/config/GridStatConfig_st4_censor +++ b/internal/test_unit/config/GridStatConfig_st4_censor @@ -231,8 +231,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_ugrid_mpas b/internal/test_unit/config/GridStatConfig_ugrid_mpas index d54b25de53..e61b0c2611 100644 --- a/internal/test_unit/config/GridStatConfig_ugrid_mpas +++ b/internal/test_unit/config/GridStatConfig_ugrid_mpas @@ -255,8 +255,9 @@ ugrid_coordinates_file = "${MET_TEST_INPUT}/ugrid_data/mpas/static.40962_reduced //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/GridStatConfig_ugrid_mpas_diag b/internal/test_unit/config/GridStatConfig_ugrid_mpas_diag index 9e479d0302..0655fd1aa9 100644 --- a/internal/test_unit/config/GridStatConfig_ugrid_mpas_diag +++ b/internal/test_unit/config/GridStatConfig_ugrid_mpas_diag @@ -256,8 +256,9 @@ ugrid_coordinates_file = "${MET_TEST_INPUT}/ugrid_data/mpas/static.40962_reduced //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_APCP b/internal/test_unit/config/PointStatConfig_APCP index b1df56e94b..ca381a89d4 100644 --- a/internal/test_unit/config/PointStatConfig_APCP +++ b/internal/test_unit/config/PointStatConfig_APCP @@ -135,8 +135,11 @@ output_flag = { duplicate_flag = NONE; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_APCP_HIRA b/internal/test_unit/config/PointStatConfig_APCP_HIRA index 3dc823a50b..4e965bd716 100644 --- a/internal/test_unit/config/PointStatConfig_APCP_HIRA +++ b/internal/test_unit/config/PointStatConfig_APCP_HIRA @@ -142,8 +142,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_GTG_latlon b/internal/test_unit/config/PointStatConfig_GTG_latlon index 17aba08c1f..ae84d237fd 100644 --- a/internal/test_unit/config/PointStatConfig_GTG_latlon +++ b/internal/test_unit/config/PointStatConfig_GTG_latlon @@ -161,8 +161,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_GTG_lc b/internal/test_unit/config/PointStatConfig_GTG_lc index d45c47f618..198a40dc2f 100644 --- a/internal/test_unit/config/PointStatConfig_GTG_lc +++ b/internal/test_unit/config/PointStatConfig_GTG_lc @@ -169,8 +169,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_INTERP_OPTS b/internal/test_unit/config/PointStatConfig_INTERP_OPTS index 43eb1f0708..e0e75a5b9b 100644 --- a/internal/test_unit/config/PointStatConfig_INTERP_OPTS +++ b/internal/test_unit/config/PointStatConfig_INTERP_OPTS @@ -152,8 +152,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_LAND_TOPO_MASK b/internal/test_unit/config/PointStatConfig_LAND_TOPO_MASK index 48a04ed227..49cbf781dd 100644 --- a/internal/test_unit/config/PointStatConfig_LAND_TOPO_MASK +++ b/internal/test_unit/config/PointStatConfig_LAND_TOPO_MASK @@ -81,6 +81,8 @@ message_type_group_map = [ { key = "WATERSF"; val = "SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + //////////////////////////////////////////////////////////////////////////////// climo_mean = fcst; @@ -192,8 +194,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_MASK_SID b/internal/test_unit/config/PointStatConfig_MASK_SID index a77a8f9008..253f7320a1 100644 --- a/internal/test_unit/config/PointStatConfig_MASK_SID +++ b/internal/test_unit/config/PointStatConfig_MASK_SID @@ -147,8 +147,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_MPR_OBTYPE b/internal/test_unit/config/PointStatConfig_MPR_OBTYPE new file mode 100644 index 0000000000..6aa68e9842 --- /dev/null +++ b/internal/test_unit/config/PointStatConfig_MPR_OBTYPE @@ -0,0 +1,166 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Point-Stat configuration file. +// +// For additional information, please see the MET User's Guide. +// +//////////////////////////////////////////////////////////////////////////////// + +model = "FCST"; + +// +// Output description to be written +// May be set separately in each "obs.field" entry +// +desc = "NA"; + +//////////////////////////////////////////////////////////////////////////////// + +regrid = { + to_grid = NONE; + method = NEAREST; + width = 1; +} + +//////////////////////////////////////////////////////////////////////////////// + +obs_window = { + beg = ${BEG_DS}; + end = ${END_DS}; +} + +//////////////////////////////////////////////////////////////////////////////// + +mpr_column = []; +mpr_thresh = []; +cnt_thresh = [ NA ]; +cnt_logic = UNION; +wind_thresh = [ NA ]; +wind_logic = UNION; +eclv_points = 0.05; + +// +// Mapping of message type group name to comma-separated list of values. +// +message_type_group_map = [ + { key = "SURFACE"; val = "ADPSFC,SFCSHP,MSONET"; }, + { key = "ANYAIR"; val = "AIRCAR,AIRCFT"; }, + { key = "ANYSFC"; val = "ADPSFC,SFCSHP,ADPUPA,PROFLR,MSONET"; }, + { key = "ONLYSF"; val = "ADPSFC,SFCSHP"; }, + { key = "LANDSF"; val = "ADPSFC,MSONET"; }, + { key = "WATERSF"; val = "SFCSHP"; } +]; + +obtype_as_group_val_flag = TRUE; + +fcst = { + sid_inc = []; + sid_exc = []; + obs_quality_inc = []; + obs_quality_exc = []; + + message_type = [ "SURFACE" ]; + + field = [ + { name = "TMP"; level = "Z2"; } + ]; + +} +obs = fcst; + +//////////////////////////////////////////////////////////////////////////////// + +climo_mean = fcst; +climo_mean = { + file_name = [ ${CLIMO_FILE} ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +mask = { + grid = [ "FULL" ]; + poly = []; + sid = []; + llpnt = []; +} + +//////////////////////////////////////////////////////////////////////////////// + +ci_alpha = [ 0.05 ]; + +boot = { + interval = PCTILE; + rep_prop = 1.0; + n_rep = 200; + rng = "mt19937"; + seed = "1"; +} + +//////////////////////////////////////////////////////////////////////////////// + +interp = { + vld_thresh = 1.0; + + type = [ + { + method = NEAREST; + width = 1; + } + ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +hira = { + flag = TRUE; + width = [ 3 ]; + vld_thresh = 1.0; + cov_thresh = [ ==0.25 ]; + shape = SQUARE; + prob_cat_thresh = [ >273 ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +output_flag = { + fho = NONE; + ctc = NONE; + cts = NONE; + mctc = NONE; + mcts = NONE; + cnt = STAT; + sl1l2 = STAT; + sal1l2 = STAT; + vl1l2 = NONE; + val1l2 = NONE; + vcnt = NONE; + pct = STAT; + pstd = NONE; + pjc = NONE; + prc = NONE; + ecnt = STAT; + rps = NONE; + orank = STAT; + eclv = NONE; + mpr = STAT; + seeps = NONE; + seeps_mpr = NONE; +} + +//////////////////////////////////////////////////////////////////////////////// +// Threshold for SEEPS p1 (Probability of being dry) + +seeps_p1_thresh = NA; + +//////////////////////////////////////////////////////////////////////////////// + +duplicate_flag = NONE; +rank_corr_flag = TRUE; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; + +//////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_PHYS b/internal/test_unit/config/PointStatConfig_PHYS index 3c13262a71..6f3308f785 100644 --- a/internal/test_unit/config/PointStatConfig_PHYS +++ b/internal/test_unit/config/PointStatConfig_PHYS @@ -148,8 +148,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_PHYS_pint b/internal/test_unit/config/PointStatConfig_PHYS_pint index e246c570b3..f98f2e4102 100644 --- a/internal/test_unit/config/PointStatConfig_PHYS_pint +++ b/internal/test_unit/config/PointStatConfig_PHYS_pint @@ -143,8 +143,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_SEEPS b/internal/test_unit/config/PointStatConfig_SEEPS index 20ffa18cfb..cb7244311f 100644 --- a/internal/test_unit/config/PointStatConfig_SEEPS +++ b/internal/test_unit/config/PointStatConfig_SEEPS @@ -142,8 +142,11 @@ seeps_point_climo_name = "${SEEPS_POINT_CLIMO_NAME}"; duplicate_flag = NONE; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_WINDS b/internal/test_unit/config/PointStatConfig_WINDS index 1c87273e89..4dac7fe51e 100644 --- a/internal/test_unit/config/PointStatConfig_WINDS +++ b/internal/test_unit/config/PointStatConfig_WINDS @@ -52,6 +52,8 @@ message_type_group_map = [ { key = "USERSF"; val = "ADPSFC,SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + fcst = { sid_inc = []; sid_exc = []; @@ -163,8 +165,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_aeronet b/internal/test_unit/config/PointStatConfig_aeronet index fef6c9bb42..387a3c54a2 100644 --- a/internal/test_unit/config/PointStatConfig_aeronet +++ b/internal/test_unit/config/PointStatConfig_aeronet @@ -212,8 +212,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_airnow b/internal/test_unit/config/PointStatConfig_airnow index 4223455902..4e7cfe79ba 100644 --- a/internal/test_unit/config/PointStatConfig_airnow +++ b/internal/test_unit/config/PointStatConfig_airnow @@ -92,6 +92,8 @@ message_type_group_map = [ { key = "WATERSF"; val = "SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + //////////////////////////////////////////////////////////////////////////////// // @@ -240,8 +242,10 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// -tmp_dir = "/tmp"; -output_prefix = ""; -version = "V12.0.0"; +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = ""; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_climo b/internal/test_unit/config/PointStatConfig_climo index d7f89b3cb0..d87ff87ca5 100644 --- a/internal/test_unit/config/PointStatConfig_climo +++ b/internal/test_unit/config/PointStatConfig_climo @@ -285,8 +285,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_climo_WMO b/internal/test_unit/config/PointStatConfig_climo_WMO index 01c3f9b3de..c34dc0989e 100644 --- a/internal/test_unit/config/PointStatConfig_climo_WMO +++ b/internal/test_unit/config/PointStatConfig_climo_WMO @@ -230,8 +230,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_climo_prob b/internal/test_unit/config/PointStatConfig_climo_prob index 364c1bfe73..b69812fae5 100644 --- a/internal/test_unit/config/PointStatConfig_climo_prob +++ b/internal/test_unit/config/PointStatConfig_climo_prob @@ -232,8 +232,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_dup b/internal/test_unit/config/PointStatConfig_dup index 8fad74b0e5..ff42a31eab 100644 --- a/internal/test_unit/config/PointStatConfig_dup +++ b/internal/test_unit/config/PointStatConfig_dup @@ -165,8 +165,11 @@ seeps_p1_thresh = NA; duplicate_flag = ${DUPLICATE_FLAG}; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_mpr_thresh b/internal/test_unit/config/PointStatConfig_mpr_thresh index 675b0696c2..6b62a8df4f 100644 --- a/internal/test_unit/config/PointStatConfig_mpr_thresh +++ b/internal/test_unit/config/PointStatConfig_mpr_thresh @@ -224,8 +224,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_obs_summary b/internal/test_unit/config/PointStatConfig_obs_summary index a931ba6b21..dc5b55a67e 100644 --- a/internal/test_unit/config/PointStatConfig_obs_summary +++ b/internal/test_unit/config/PointStatConfig_obs_summary @@ -153,8 +153,11 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_obs_summary_all b/internal/test_unit/config/PointStatConfig_obs_summary_all index 384e4ada19..e5bc4dcd7a 100644 --- a/internal/test_unit/config/PointStatConfig_obs_summary_all +++ b/internal/test_unit/config/PointStatConfig_obs_summary_all @@ -222,8 +222,11 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_point_weight b/internal/test_unit/config/PointStatConfig_point_weight new file mode 100644 index 0000000000..4f9528e26e --- /dev/null +++ b/internal/test_unit/config/PointStatConfig_point_weight @@ -0,0 +1,145 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Point-Stat configuration file. +// +// For additional information, please see the MET User's Guide. +// +//////////////////////////////////////////////////////////////////////////////// + +model = "SREF"; + +// +// Output description to be written +// May be set separately in each "obs.field" entry +// +desc = "${DESC}"; + +//////////////////////////////////////////////////////////////////////////////// + +regrid = { + to_grid = NONE; + method = NEAREST; + width = 1; +} + +//////////////////////////////////////////////////////////////////////////////// + +obs_window = { + beg = -1800; + end = 1800; +} + +//////////////////////////////////////////////////////////////////////////////// + +mpr_column = []; +mpr_thresh = []; +cnt_thresh = [ NA ]; +cnt_logic = UNION; +wind_thresh = [ NA ]; +wind_logic = UNION; +eclv_points = 0.05; + +fcst = { + sid_inc = []; + sid_exc = []; + obs_quality_inc = []; + obs_quality_exc = []; + + field = [ + { name = "TMP"; level = "P850"; message_type = "ADPUPA"; cat_thresh = [ >273, >283 ]; }, + { name = "UGRD"; level = "P850"; message_type = "ADPUPA"; cat_thresh = [ >5 ]; }, + { name = "VGRD"; level = "P850"; message_type = "ADPUPA"; cat_thresh = [ >5 ]; } + ]; + +} +obs = fcst; + +//////////////////////////////////////////////////////////////////////////////// + +mask = { + grid = []; + poly = []; + sid = [ "${CONFIG_DIR}/SID_CONUS_ADPUPA_ELEV.txt" ]; + llpnt = []; +} + +//////////////////////////////////////////////////////////////////////////////// + +ci_alpha = [ 0.05 ]; + +boot = { + interval = PCTILE; + rep_prop = 1.0; + n_rep = 200; + rng = "mt19937"; + seed = "1"; +} + +//////////////////////////////////////////////////////////////////////////////// + +interp = { + vld_thresh = 1.0; + + type = [ + { + method = NEAREST; + width = 1; + } + ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +hira = { + flag = FALSE; + width = [ 2, 3, 4, 5 ]; + vld_thresh = 1.0; + cov_thresh = [ ==0.25 ]; + shape = SQUARE; + prob_cat_thresh = []; +} + +//////////////////////////////////////////////////////////////////////////////// + +output_flag = { + fho = NONE; + ctc = STAT; + cts = STAT; + mctc = STAT; + mcts = STAT; + cnt = STAT; + sl1l2 = STAT; + sal1l2 = NONE; + vl1l2 = STAT; + val1l2 = NONE; + vcnt = STAT; + pct = NONE; + pstd = NONE; + pjc = NONE; + prc = NONE; + ecnt = NONE; + orank = NONE; + rps = NONE; + eclv = STAT; + mpr = STAT; + seeps = NONE; + seeps_mpr = NONE; +} + +//////////////////////////////////////////////////////////////////////////////// +// Threshold for SEEPS p1 (Probability of being dry) + +seeps_p1_thresh = NA; + +//////////////////////////////////////////////////////////////////////////////// + +duplicate_flag = NONE; +rank_corr_flag = TRUE; + +point_weight_flag = ${POINT_WEIGHT}; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; + +//////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_prob b/internal/test_unit/config/PointStatConfig_prob index ab8067a79e..e4149c7eff 100644 --- a/internal/test_unit/config/PointStatConfig_prob +++ b/internal/test_unit/config/PointStatConfig_prob @@ -150,8 +150,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_prob_point_weight b/internal/test_unit/config/PointStatConfig_prob_point_weight new file mode 100644 index 0000000000..f083cb8807 --- /dev/null +++ b/internal/test_unit/config/PointStatConfig_prob_point_weight @@ -0,0 +1,151 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Point-Stat configuration file. +// +// For additional information, please see the MET User's Guide. +// +//////////////////////////////////////////////////////////////////////////////// + +model = "SREF"; + +// +// Output description to be written +// May be set separately in each "obs.field" entry +// +desc = "${DESC}"; + +//////////////////////////////////////////////////////////////////////////////// + +regrid = { + to_grid = NONE; + method = NEAREST; + width = 1; +} + +//////////////////////////////////////////////////////////////////////////////// + +obs_window = { + beg = -1800; + end = 1800; +} + +//////////////////////////////////////////////////////////////////////////////// + +mpr_column = []; +mpr_thresh = []; +cnt_thresh = [ NA ]; +cnt_logic = UNION; +wind_thresh = [ NA ]; +wind_logic = UNION; +eclv_points = 0.05; + +fcst = { + sid_inc = []; + sid_exc = []; + obs_quality_inc = []; + obs_quality_exc = []; + + field = [ + { name = "PROB"; level = "P850"; + prob = { name = "TMP"; thresh_hi = 273; }; + cat_thresh = ==0.25; } + ]; + +} +obs = { + message_type = "ADPUPA"; + + field = [ + { name = "TMP"; level = "P850"; cat_thresh = <273; } + ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +mask = { + grid = [ "FULL" ]; + poly = []; + sid = [ "${CONFIG_DIR}/SID_CONUS_ADPUPA_ELEV.txt" ]; + llpnt = []; +} + +//////////////////////////////////////////////////////////////////////////////// + +ci_alpha = [ 0.05 ]; + +boot = { + interval = PCTILE; + rep_prop = 1.0; + n_rep = 200; + rng = "mt19937"; + seed = "1"; +} + +//////////////////////////////////////////////////////////////////////////////// + +interp = { + vld_thresh = 1.0; + + type = [ + { + method = NEAREST; + width = 1; + } + ]; +} + +//////////////////////////////////////////////////////////////////////////////// + +hira = { + flag = FALSE; + width = [ 2, 3, 4, 5 ]; + vld_thresh = 1.0; + cov_thresh = [ ==0.25 ]; + shape = SQUARE; + prob_cat_thresh = []; +} + +//////////////////////////////////////////////////////////////////////////////// + +output_flag = { + fho = NONE; + ctc = NONE; + cts = NONE; + mctc = NONE; + mcts = NONE; + cnt = NONE; + sl1l2 = NONE; + sal1l2 = NONE; + vl1l2 = NONE; + val1l2 = NONE; + vcnt = NONE; + pct = STAT; + pstd = STAT; + pjc = STAT; + prc = STAT; + ecnt = NONE; + orank = NONE; + rps = NONE; + eclv = STAT; + mpr = STAT; + seeps = NONE; + seeps_mpr = NONE; +} + +//////////////////////////////////////////////////////////////////////////////// +// Threshold for SEEPS p1 (Probability of being dry) + +seeps_p1_thresh = NA; + +//////////////////////////////////////////////////////////////////////////////// + +duplicate_flag = NONE; +rank_corr_flag = TRUE; + +point_weight_flag = ${POINT_WEIGHT}; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; + +//////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_python b/internal/test_unit/config/PointStatConfig_python index 5116179451..3f56423d96 100644 --- a/internal/test_unit/config/PointStatConfig_python +++ b/internal/test_unit/config/PointStatConfig_python @@ -219,9 +219,12 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = ""; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = ""; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_qty_inc_exc b/internal/test_unit/config/PointStatConfig_qty_inc_exc index 1eab2b184c..2345684e7a 100644 --- a/internal/test_unit/config/PointStatConfig_qty_inc_exc +++ b/internal/test_unit/config/PointStatConfig_qty_inc_exc @@ -209,8 +209,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_sid_inc_exc b/internal/test_unit/config/PointStatConfig_sid_inc_exc index a586064f53..9ab93b7417 100644 --- a/internal/test_unit/config/PointStatConfig_sid_inc_exc +++ b/internal/test_unit/config/PointStatConfig_sid_inc_exc @@ -156,8 +156,11 @@ seeps_p1_thresh = NA; duplicate_flag = NONE; obs_summary = NEAREST; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_ugrid_mpas_diag b/internal/test_unit/config/PointStatConfig_ugrid_mpas_diag index 886c6bb301..3c1a4054a6 100644 --- a/internal/test_unit/config/PointStatConfig_ugrid_mpas_diag +++ b/internal/test_unit/config/PointStatConfig_ugrid_mpas_diag @@ -160,8 +160,11 @@ ugrid_coordinates_file = "${MET_TEST_INPUT}/ugrid_data/mpas/static.40962_reduced duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_ugrid_mpas_out b/internal/test_unit/config/PointStatConfig_ugrid_mpas_out index c16deb0f7d..dcb7afe613 100644 --- a/internal/test_unit/config/PointStatConfig_ugrid_mpas_out +++ b/internal/test_unit/config/PointStatConfig_ugrid_mpas_out @@ -160,8 +160,11 @@ ugrid_coordinates_file = "${MET_TEST_INPUT}/ugrid_data/mpas/static.40962_reduced duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/PointStatConfig_ugrid_no_dataset b/internal/test_unit/config/PointStatConfig_ugrid_no_dataset index 9c7c7f5b3a..2cc3296b6e 100644 --- a/internal/test_unit/config/PointStatConfig_ugrid_no_dataset +++ b/internal/test_unit/config/PointStatConfig_ugrid_no_dataset @@ -160,8 +160,11 @@ ugrid_coordinates_file = "${MET_TEST_INPUT}/ugrid_data/mpas/static.40962_reduced duplicate_flag = NONE; rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = "${OUTPUT_PREFIX}"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${OUTPUT_PREFIX}"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/SID_CONUS_ADPSFC_ELEV.txt b/internal/test_unit/config/SID_CONUS_ADPSFC_ELEV.txt new file mode 100644 index 0000000000..03da3d6060 --- /dev/null +++ b/internal/test_unit/config/SID_CONUS_ADPSFC_ELEV.txt @@ -0,0 +1,2109 @@ +SID_CONUS_ADPSFC_ELEV +1L2(47.07002) +3CLO3(2.57002) +AAT(1492.32002) +AATC1(318.82002) +ABCC1(1419.32002) +ABEW1(182.57002) +ABMC1(1426.07002) +ABNW1(281.32002) +ABRC1(1455.82002) +ABTM8(1348.82002) +ACLN2(1838.32002) +ACMC1(43.07002) +ACRI1(1771.07002) +ACRU1(2216.82002) +ACV(72.57002) +ADRC1(307.07002) +AFHA3(1553.32002) +AFMA3(1278.57002) +AFRA3(901.07002) +AFRC1(2086.07002) +AFRI1(1386.32002) +AFSC1(1455.82002) +AFSN2(2029.82002) +AGDO3(672.82002) +AGKO3(1514.82002) +AGPC1(2767.82002) +AGTQ1(910.82002) +AGWC1(638.57002) +AIDC1(0.57002) +AJGW1(193.32002) +AJO(306.57002) +AKEC1(1041.07002) +ALDC1(553.57002) +ALFO3(1569.32002) +ALKN2(1922.32002) +ALLN2(2004.57002) +ALMA3(563.07002) +ALPC1(671.32002) +ALRN2(1626.57002) +ALW(501.57002) +AMBC1(2004.07002) +ANAC1(106.82002) +ANDC1(494.82002) +ANEC1(654.07002) +ANIC1(0.070023) +ANRO3(1916.07002) +ANSO3(1711.57002) +APC(73.82002) +APDN2(926.07002) +APIC1(1453.57002) +APKC1(1460.07002) +APLC1(941.07002) +APSW1(457.32002) +APYC1(1361.82002) +ARAO3(55.07002) +ARAU1(1446.82002) +ARAW1(675.82002) +ARFO3(1248.07002) +ARGC1(384.82002) +ARKI1(1354.82002) +ASFA3(1807.57002) +ASHW1(944.82002) +ASMC1(354.32002) +ASRC1(655.07002) +AST(11.82002) +ASYU1(2478.82002) +ATAI1(2067.57002) +ATFO3(1461.07002) +ATHC1(1339.82002) +ATLC1(254.07002) +ATLI1(2289.32002) +ATNC1(1160.57002) +ATRC1(1088.57002) +ATSC1(1496.57002) +AUBW1(95.82002) +AURO3(67.07002) +AVLC1(1727.57002) +AVNC1(0.57002) +AVX(23.57002) +AZRQ1(1107.82002) +BAB(104.07002) +BABC1(1253.57002) +BADM8(1806.57002) +BADU1(1144.32002) +BAEI1(2204.57002) +BAFO3(1320.57002) +BAGA3(1147.82002) +BAJC1(600.82002) +BALO3(1239.32002) +BAMC1(456.57002) +BANM8(1254.32002) +BANO3(34.57002) +BARQ1(964.07002) +BARQ2(1466.57002) +BASC1(1137.82002) +BASI1(2203.57002) +BASQ1(829.32002) +BATN2(1573.32002) +BBBC1(1706.57002) +BBFO3(1239.57002) +BBRA3(1741.82002) +BBYC1(3.57002) +BCDO3(1545.82002) +BCDW1(145.07002) +BCFO3(1313.82002) +BCNC1(1598.32002) +BCRQ1(1161.32002) +BCYC1(1381.82002) +BDDA3(1294.07002) +BDFO3(319.82002) +BDMC1(1065.07002) +BDOC1(1834.82002) +BDYC1(733.32002) +BEAM8(2414.82002) +BEBC1(133.32002) +BEDO3(1542.32002) +BEFM8(1915.07002) +BENC1(242.07002) +BERN2(2213.82002) +BETC1(2246.57002) +BEUO3(1317.32002) +BEWO3(1178.07002) +BFL(183.07002) +BFRI1(1574.57002) +BFYI1(1079.32002) +BGBC1(981.32002) +BGCO3(1128.07002) +BGFO3(1380.57002) +BGRM8(1342.32002) +BGVC1(744.07002) +BHAU1(1401.07002) +BHNC1(270.32002) +BIEQ1(903.82002) +BIGN2(2094.82002) +BIH(1884.57002) +BIIC1(795.07002) +BIRQ2(1121.82002) +BISM8(1311.07002) +BKBW1(135.82002) +BKCU1(1996.82002) +BKE(1193.57002) +BKFN2(2023.82002) +BKFO3(612.32002) +BKGC1(1070.32002) +BKLC1(1314.82002) +BKRC1(2257.82002) +BKRN2(2023.82002) +BKSI1(1887.32002) +BKVN2(763.07002) +BLAO3(1066.32002) +BLBC1(80.32002) +BLBO3(551.07002) +BLCC1(2231.32002) +BLCN2(1699.57002) +BLDQ1(1185.07002) +BLEN2(1710.07002) +BLH(131.57002) +BLI(61.07002) +BLKM8(1868.32002) +BLKO3(1159.07002) +BLMC1(2163.07002) +BLOM8(2219.07002) +BLPO3(1740.57002) +BLRC1(284.07002) +BLSC1(1622.32002) +BLTM8(1135.32002) +BLTQ1(952.57002) +BLU(1381.82002) +BLUN2(1525.82002) +BMEC1(864.07002) +BMFW1(1183.82002) +BMOC1(1081.07002) +BMTC1(534.82002) +BMUC1(1538.57002) +BNCC1(186.57002) +BNCN2(1573.57002) +BNDC1(284.07002) +BNDO3(1178.07002) +BNDW1(615.07002) +BNFO3(421.32002) +BNGC1(211.57002) +BNKC1(1359.82002) +BNO(1369.82002) +BNRI1(2203.57002) +BNTC1(1001.07002) +BNVC1(422.32002) +BOCC1(2054.82002) +BOFO3(1183.07002) +BOGC1(1867.07002) +BOI(970.57002) +BOKO3(110.57002) +BOLC1(1569.82002) +BONO3(566.07002) +BOOM8(1316.82002) +BORO3(1760.32002) +BOUN2(609.57002) +BOWC1(1768.32002) +BPAW1(1158.32002) +BPFC1(1638.32002) +BPKC1(1700.32002) +BPKN2(2249.82002) +BPMC1(1700.32002) +BPNC1(1378.82002) +BPOC1(2480.07002) +BQFO3(1635.57002) +BRAQ2(1663.07002) +BRBI1(1671.57002) +BRCN2(2287.57002) +BRCQ1(2131.82002) +BRDC1(335.82002) +BRHC1(711.32002) +BRLM8(2082.57002) +BRLN2(1719.82002) +BRMO3(1136.32002) +BRNQ1(820.32002) +BROC1(846.82002) +BROQ1(1142.57002) +BRRC1(643.32002) +BRRI1(1818.57002) +BRRM8(2132.82002) +BRUO3(331.82002) +BRWC1(85.57002) +BSCM8(1981.57002) +BSCN2(1305.07002) +BSDI1(1268.82002) +BSNC1(1460.07002) +BSPM8(1931.32002) +BSTU1(1783.57002) +BTFO3(1261.82002) +BTM(1918.32002) +BTRC1(1249.82002) +BTRI1(1875.57002) +BTTC1(54.32002) +BTYO3(1454.82002) +BUBC1(186.57002) +BUCO3(1200.57002) +BUCW1(409.32002) +BUFC1(1499.32002) +BUFN2(1468.32002) +BUFO3(856.07002) +BUGC1(1181.07002) +BULI1(1830.82002) +BULO3(890.32002) +BULQ1(1326.82002) +BULQ2(1297.07002) +BUMC1(1001.07002) +BUO(1001.07002) +BUPC1(1314.82002) +BUR(400.32002) +BUSW1(695.82002) +BVAQ1(852.82002) +BVDC1(1053.82002) +BVLQ1(1408.32002) +BVRC1(167.32002) +BVRO3(1345.32002) +BWFO3(1433.32002) +BWSO3(1555.82002) +BWSQ1(2318.82002) +BYCU1(2325.07002) +BYFO3(1374.57002) +BYI(1307.82002) +BZRC1(941.57002) +CAEC1(379.32002) +CAFO3(1428.07002) +CAHC1(611.32002) +CALU1(1709.82002) +CAMI1(1163.32002) +CANO3(129.07002) +CAPC1(352.57002) +CAPN2(1838.32002) +CASN2(1044.32002) +CATN2(1799.82002) +CAWN2(615.57002) +CAZC1(779.32002) +CBFI1(2468.07002) +CBRA3(206.57002) +CBUC1(1715.57002) +CCCC1(794.57002) +CCCQ1(1301.57002) +CCDI1(1551.82002) +CCEC1(804.07002) +CCEN2(637.82002) +CCHC1(402.07002) +CCR(86.07002) +CCRN2(1826.32002) +CCRO3(180.57002) +CCUN2(1877.57002) +CCZC1(123.32002) +CDAW1(717.32002) +CDCU1(2042.07002) +CDEC1(1110.57002) +CDGC1(561.32002) +CDLC1(463.32002) +CDMU1(1612.57002) +CEC(62.82002) +CECU1(2011.82002) +CEDN2(2100.57002) +CEDW1(575.82002) +CEEC1(295.07002) +CEFO3(1330.32002) +CEKC1(856.57002) +CENW1(145.07002) +CESC1(1699.82002) +CFCC1(1585.82002) +CFRC1(1483.32002) +CFWC1(85.57002) +CGDN2(1001.82002) +CGFO3(1276.82002) +CGFW1(859.57002) +CGVC1(2744.57002) +CGWO3(843.57002) +CHAC1(1432.82002) +CHEA3(1392.82002) +CHFQ1(1614.82002) +CHMC1(1823.82002) +CHMQ1(979.32002) +CHMQ2(824.82002) +CHOC1(1318.57002) +CHPQ1(1568.32002) +CHRI1(2024.07002) +CHRO3(208.32002) +CHSN2(2178.57002) +CHTC1(396.07002) +CHUM8(1922.32002) +CHWC1(611.32002) +CICC1(88.07002) +CIFO3(1533.82002) +CINW1(473.07002) +CISC1(1050.07002) +CJAW1(596.82002) +CLBC1(1135.82002) +CLFC1(568.07002) +CLFO3(1475.07002) +CLFU1(1752.82002) +CLHC1(380.82002) +CLKI1(1165.32002) +CLKO3(1197.07002) +CLLC1(153.07002) +CLLO3(1136.57002) +CLM(432.57002) +CLNC1(1473.32002) +CLSC1(-0.42998) +CLSW1(152.82002) +CLVM8(2188.07002) +CMA(58.32002) +CMAC1(69.82002) +CMBM8(1785.32002) +CMFW1(1133.07002) +CMNC1(1096.07002) +CMOC1(1000.82002) +CMPQ1(1745.82002) +CMVC1(1215.57002) +CNAC1(353.57002) +CNFC1(1453.82002) +CNFO3(262.32002) +CNGC1(488.82002) +CNIC1(605.07002) +CNJC1(153.07002) +CNO(269.82002) +CNSC1(1094.32002) +CNYC1(1463.32002) +COCC1(244.57002) +CODC1(494.82002) +COE(828.07002) +COEC1(494.82002) +COGC1(581.07002) +COIN2(2005.82002) +COKC1(1728.32002) +COLO3(1365.82002) +COMN2(2082.82002) +CONM8(1755.32002) +COPM8(1864.32002) +COVC1(989.32002) +COWC1(548.07002) +COXQ1(1930.57002) +COYN2(1868.07002) +COZI1(1938.32002) +CPCM8(1809.32002) +CPFO3(1733.57002) +CPLC1(2317.32002) +CPPW1(1380.57002) +CPWA3(1660.57002) +CQFO3(1421.57002) +CQLQ2(504.07002) +CQT(87.82002) +CRAQ1(842.07002) +CRCA3(1752.32002) +CRCW1(958.32002) +CRGC1(53.57002) +CRIC1(217.07002) +CRKI1(990.82002) +CRLC1(2654.82002) +CRLO3(1711.57002) +CRMI1(1867.82002) +CROQ1(1719.07002) +CRQ(29.32002) +CRSN2(1843.32002) +CRTI1(1867.82002) +CRVC1(2594.82002) +CRVO3(95.57002) +CRWA3(308.32002) +CRWC1(1561.07002) +CRWW1(145.07002) +CRXC1(99.07002) +CRYN2(653.57002) +CRZC1(1197.82002) +CSCI1(1635.57002) +CSCO3(1553.07002) +CSDI1(1635.57002) +CSFO3(1464.32002) +CSHW1(236.32002) +CSMC1(538.32002) +CSTC1(583.57002) +CSTO3(1574.82002) +CSUC1(446.57002) +CSVC1(410.07002) +CSWC1(1238.32002) +CSXC1(783.32002) +CSZC1(1587.82002) +CTB(1155.57002) +CTLN2(2114.07002) +CTNC1(879.32002) +CTOC1(149.32002) +CUGW1(699.82002) +CUMW1(674.32002) +CUTQ1(2228.57002) +CUUC1(1457.57002) +CVAC1(38.32002) +CVBC1(335.07002) +CVFO3(671.82002) +CVSC1(1020.32002) +CVSO3(161.57002) +CWFO3(1326.07002) +CWSN2(587.32002) +CWXW1(575.82002) +CXCC1(67.57002) +CYAC1(988.32002) +CYFI1(1494.07002) +CYFW1(555.57002) +CYMC1(875.32002) +CYOC1(410.07002) +CYVC1(1786.82002) +CZFO3(1790.57002) +CZZ(971.07002) +DACC1(559.07002) +DAG(774.07002) +DALM8(1921.32002) +DANO3(1310.82002) +DARW1(786.57002) +DBCQ2(1799.57002) +DBLC1(572.32002) +DCCW1(817.32002) +DCEN2(692.07002) +DCKN2(587.32002) +DCRM8(1575.07002) +DCUC1(303.07002) +DCWC1(85.57002) +DDWC1(462.57002) +DEAI1(977.07002) +DECC1(1031.07002) +DEDN2(1336.82002) +DEEM8(1716.82002) +DEFO3(828.32002) +DEHI1(1377.57002) +DEIC1(683.07002) +DEMC1(1070.32002) +DENC1(1013.07002) +DERM8(1780.07002) +DESC1(734.07002) +DESN2(1602.57002) +DEVC1(539.32002) +DEW(710.32002) +DGFC1(1118.82002) +DGRC1(291.82002) +DHDI1(2190.07002) +DHLM8(2060.57002) +DIAO3(1643.32002) +DIDN2(926.07002) +DIVM8(2339.57002) +DIXO3(126.07002) +DKFC1(1050.07002) +DKYC1(2509.57002) +DLBQ1(1262.82002) +DLCC1(1732.57002) +DLN(1711.07002) +DLS(362.07002) +DLTU1(1439.82002) +DLVC1(476.57002) +DMLC1(1737.07002) +DMRA3(1642.32002) +DNPC1(1544.57002) +DNRC1(2091.32002) +DNVC1(1511.57002) +DOGC1(1949.07002) +DOGQ1(1956.32002) +DOTW1(284.57002) +DOUW1(740.82002) +DPHC1(1381.82002) +DPKI1(1763.82002) +DPSA3(1472.07002) +DPYM8(1611.07002) +DRBM8(1755.57002) +DRBN2(2007.57002) +DRCN2(2111.07002) +DRYN2(1809.07002) +DRYW1(987.57002) +DSNC1(117.32002) +DUCC1(1508.57002) +DUCN2(692.07002) +DUDC1(864.07002) +DUIC1(1047.07002) +DUNO3(119.32002) +DVLO3(246.82002) +DVOC1(984.07002) +DVRC1(159.07002) +DVSC1(1766.07002) +DVT(476.32002) +DWAI1(818.82002) +DWRN2(1586.57002) +DYCN2(1777.32002) +DYLC1(1555.82002) +DYNN2(2159.32002) +EACQ2(1800.57002) +EAT(754.32002) +EBTC1(2394.32002) +ECHO3(209.32002) +ECKC1(832.82002) +ECSC1(556.82002) +EDOC1(433.32002) +EDW(732.32002) +EED(351.57002) +EELC1(989.32002) +EEPC1(1286.82002) +EGCC1(1578.82002) +EGKO3(213.32002) +EGLC1(520.07002) +EIMO3(1608.07002) +EKA(127.82002) +EKAN2(2042.07002) +EKO(1704.82002) +EKRI1(945.07002) +ELBI1(1045.57002) +ELCC1(-20.17998) +ELDA3(726.82002) +ELEW1(714.57002) +ELJC1(176.82002) +ELKC1(879.57002) +ELKQ2(858.32002) +ELN(835.07002) +ELRN2(2205.07002) +ELRQ1(1547.82002) +ELSQ2(659.07002) +ELXC1(43.32002) +ELY(2205.07002) +EMCM8(1324.32002) +EMFO3(1388.57002) +EMIO3(1200.57002) +EMRC1(897.32002) +EMTI1(945.32002) +ENCQ1(829.07002) +ENCW1(409.32002) +ENFO3(1243.32002) +ENMW1(259.07002) +ENTU1(1798.57002) +ENUW1(409.32002) +ENV(1440.82002) +ENVI1(1047.82002) +EORC1(552.82002) +EPH(429.82002) +EPKC1(628.32002) +ERAW1(740.57002) +ERCC1(422.07002) +ESCC1(258.32002) +ESEC1(514.57002) +ESOC1(258.32002) +ESPC1(822.07002) +ESRC1(348.07002) +EUG(165.07002) +EUL(728.57002) +EURM8(1327.32002) +EVAQ1(2190.32002) +EVFO3(699.57002) +EXQC1(242.82002) +EZRI1(2087.07002) +FADO3(378.07002) +FAFI1(1604.07002) +FAFO3(1193.57002) +FALN2(1196.82002) +FALQ1(1641.57002) +FAT(74.32002) +FBOC1(450.82002) +FBSC1(814.82002) +FCHC1(311.57002) +FCKO3(1761.57002) +FCRM8(2060.07002) +FEFO3(964.57002) +FERI1(1202.57002) +FFFO3(1454.82002) +FFXW1(695.82002) +FGFO3(1512.32002) +FGMC1(514.32002) +FGRC1(781.07002) +FHCC1(117.57002) +FHDC1(1733.32002) +FHFI1(1408.07002) +FHLC1(448.82002) +FHR(6.07002) +FIFW1(567.82002) +FINQ1(820.57002) +FISN2(1825.82002) +FISO3(1361.07002) +FISW1(1437.07002) +FKFO3(1401.57002) +FLAC1(1773.82002) +FLEI1(2262.57002) +FLFC1(2136.07002) +FLFI1(1594.57002) +FLFO3(1524.32002) +FMFO3(1386.82002) +FMLQR(968.57002) +FMNQ1(1929.57002) +FMOC1(1062.82002) +FMRC1(1406.57002) +FNWC1(1011.57002) +FNWO3(161.57002) +FNXA3(374.82002) +FOGO3(258.07002) +FOIC1(2086.07002) +FOSO3(385.57002) +FOXN2(1742.32002) +FPRO3(178.07002) +FPWU1(1060.82002) +FRAW1(281.07002) +FRCC1(216.07002) +FRCW1(1004.32002) +FRGC1(47.57002) +FRHM8(1917.32002) +FRIC1(238.32002) +FRIW1(259.07002) +FRKW1(197.07002) +FRLO3(1545.82002) +FRMM8(1202.57002) +FRSO3(145.82002) +FRTC1(1140.57002) +FSHC1(1180.82002) +FSLC1(140.82002) +FSNC1(56.82002) +FSSO3(238.07002) +FTAW1(817.82002) +FTDC1(204.32002) +FTFW1(961.32002) +FTMM8(1759.57002) +FTNC1(581.82002) +FTSC1(607.57002) +FUL(27.07002) +FVVN2(1477.82002) +FWFW1(1071.32002) +FWNN2(653.57002) +FWSC1(1706.57002) +FWSN2(653.57002) +FZWA3(1881.82002) +GAAM8(1989.57002) +GALN2(2015.32002) +GARI1(2175.07002) +GARW1(817.82002) +GASC1(486.57002) +GASO3(190.82002) +GAVI1(1554.57002) +GBDA3(282.57002) +GBRC1(870.32002) +GCAW1(668.57002) +GCDC1(493.82002) +GCHA3(1354.82002) +GCKQ1(1783.82002) +GCN(1863.82002) +GCRA3(1672.57002) +GDFO3(1022.82002) +GDLC1(1788.82002) +GDPN2(1100.07002) +GDRO3(356.07002) +GDRQ2(730.82002) +GDTA3(143.32002) +GDTC1(142.57002) +GECU1(1945.57002) +GEG(700.82002) +GEOC1(810.32002) +GERW1(349.32002) +GGDA3(300.07002) +GGRC1(418.07002) +GHDQ1(1684.07002) +GHFW1(883.57002) +GILO3(1089.82002) +GISC1(960.07002) +GKSC1(1508.57002) +GLAW1(930.32002) +GLDO3(1668.32002) +GLEQ1(898.82002) +GLFM8(1308.82002) +GLNI1(2600.32002) +GLSI1(2600.32002) +GMFW1(906.57002) +GMTC1(880.82002) +GNFC1(2143.82002) +GNLC1(2143.57002) +GNLW1(768.07002) +GNNC1(1126.07002) +GNSC1(265.82002) +GNTC1(1113.07002) +GODW1(1157.57002) +GOLW1(483.07002) +GOSC1(760.57002) +GOYC1(241.57002) +GPEN2(2015.32002) +GPFO3(212.57002) +GPI(1061.32002) +GPRM8(1772.82002) +GQEC1(486.57002) +GRBO3(1554.32002) +GRCA3(1672.57002) +GRCM8(1621.32002) +GRCW1(1108.07002) +GRFW1(734.07002) +GRHC1(348.07002) +GRMO3(140.57002) +GRNQ2(1708.57002) +GRNW1(1081.57002) +GROQ2(1410.57002) +GRRC1(1461.82002) +GRSC1(1757.32002) +GRSI1(2191.32002) +GRVN2(2024.07002) +GRWA3(1651.32002) +GRZO3(1067.32002) +GSFO3(1336.07002) +GSGN2(1310.82002) +GSKI1(1861.57002) +GSNM8(1719.07002) +GSPC1(745.82002) +GSTC1(36.07002) +GSTO3(1554.32002) +GSVC1(770.07002) +GTCC1(167.32002) +GTMC1(1137.82002) +GTOC1(475.32002) +GTOM8(1825.82002) +GVPC1(1070.32002) +GVYC1(2090.07002) +GWFW1(1146.57002) +GWWW1(349.32002) +GZFC1(1009.07002) +HABC1(1530.57002) +HAIC1(607.07002) +HAMA3(639.82002) +HANM8(1377.82002) +HATC1(1158.32002) +HAWM8(1442.32002) +HAYI1(828.07002) +HBFI1(1452.32002) +HBRC1(1777.82002) +HCNC1(1646.57002) +HCPC1(442.57002) +HCTC1(349.32002) +HDLC1(944.32002) +HDLI1(1332.32002) +HDZC1(740.07002) +HEMI1(1238.32002) +HESC1(1060.07002) +HFLC1(1041.07002) +HGFW1(1036.82002) +HHAI1(1963.07002) +HHDW1(674.32002) +HHFO3(975.07002) +HHR(13.32002) +HIBW1(791.07002) +HIDC1(187.07002) +HIMN2(2010.07002) +HIO(145.82002) +HIRO3(1172.07002) +HJO(58.82002) +HKFW1(284.57002) +HLCC1(1023.07002) +HLKC1(1656.32002) +HLLC1(1773.07002) +HLMO3(879.57002) +HLTI1(2393.82002) +HMGC1(1545.57002) +HMS(255.82002) +HNAO3(677.82002) +HNBO3(898.32002) +HNDO3(898.32002) +HNEO3(734.32002) +HNFO3(968.32002) +HNGC1(856.57002) +HNGO3(734.32002) +HNHO3(968.32002) +HNIO3(968.32002) +HNJO3(1185.82002) +HNSW1(259.07002) +HNTC1(1770.07002) +HNYM8(1181.07002) +HOAC1(830.57002) +HODO3(485.82002) +HOHU1(1687.57002) +HOMI1(758.07002) +HONC1(357.57002) +HOOM8(1596.32002) +HOTM8(1151.32002) +HOTN2(1305.57002) +HOWO3(1421.07002) +HOXO3(485.82002) +HPDC1(524.57002) +HPEC1(220.07002) +HPFI1(2544.07002) +HPRC1(803.32002) +HPRO3(898.32002) +HPWO3(1365.07002) +HQM(44.57002) +HQSI1(1016.57002) +HRHW1(351.32002) +HRI(212.57002) +HRLO3(1512.82002) +HRWM8(1348.32002) +HRZC1(664.57002) +HSEC1(331.07002) +HSFO3(763.82002) +HSGC1(819.07002) +HSKO3(341.57002) +HSPC1(67.57002) +HSQC1(2740.07002) +HTRC1(1377.07002) +HTSC1(1022.32002) +HUFW1(300.07002) +HUGI1(1369.57002) +HUSQ1(896.82002) +HUZI1(1748.57002) +HVSA3(312.32002) +HWCI1(1637.57002) +HWD(103.32002) +HWKC1(377.07002) +HWRW1(389.07002) +HYFC1(1034.57002) +HYFO3(900.82002) +HYNI1(2486.07002) +HYSC1(1879.57002) +ICKC1(2047.32002) +ICPC1(2047.32002) +IDA(1494.82002) +IDAC1(818.57002) +IDKC1(1357.82002) +IDOC1(338.32002) +IDPC1(2203.32002) +IDWC1(1406.82002) +IGM(1229.82002) +ILLQ2(1445.32002) +IMHO3(1278.07002) +IMTW1(1231.07002) +IMWN2(1889.82002) +INDI1(1864.32002) +INTC1(1166.57002) +IPL(-25.67998) +IPLC1(38.32002) +IRFO3(1380.82002) +ISPQ1(896.57002) +ISWC1(484.82002) +IWLC1(1068.57002) +IZA(402.07002) +JAPN2(2033.32002) +JBGC1(508.57002) +JBLC1(434.57002) +JCUN2(2033.32002) +JEAN2(1075.07002) +JER(1144.57002) +JESN2(1130.32002) +JETM8(1021.82002) +JKPI1(1925.07002) +JLNQ2(826.07002) +JNLC1(661.32002) +JOJO3(961.57002) +JPRC1(1704.82002) +JRFO3(1395.32002) +JRHQ1(1699.32002) +JRMA3(1379.07002) +JRMI1(1081.32002) +JSDC1(810.32002) +JSNC1(1564.32002) +JSPN2(1723.57002) +JSPU1(1827.07002) +JTAC1(1461.07002) +JUFW1(205.57002) +JULC1(1065.82002) +JUMQ2(654.32002) +JWBC1(1297.32002) +KADW1(1063.82002) +KBFO3(1309.07002) +KBNC1(1290.82002) +KCFW1(640.32002) +KCPC1(701.57002) +KCYC1(286.57002) +KEDW1(1140.82002) +KEEO3(1425.57002) +KELC1(575.07002) +KESC1(363.57002) +KFAW1(840.82002) +KFLW1(840.82002) +KIMO3(733.57002) +KLS(195.57002) +KMFW1(632.32002) +KMRO3(1515.32002) +KNNC1(454.82002) +KNSN2(1484.32002) +KNWC1(1179.32002) +KOSW1(645.07002) +KRCI1(1881.07002) +KRCM8(1661.07002) +KRKC1(1640.57002) +KRNC1(1508.07002) +KRTC1(1457.57002) +KSPC1(2283.07002) +KTLC1(230.07002) +KTLW1(840.82002) +KTTC1(109.57002) +KUSW1(770.82002) +KYCN2(1758.32002) +L13(11.32002) +LADN2(2014.07002) +LAFC1(1670.07002) +LAFN2(552.32002) +LAGC1(25.07002) +LAGO3(1095.32002) +LAHC1(179.82002) +LALN2(552.32002) +LAS(692.07002) +LAX(47.07002) +LAYC1(596.32002) +LBBM8(1124.32002) +LBCO3(935.57002) +LBDC1(129.82002) +LBFO3(1413.07002) +LBIC1(8.07002) +LBRW1(470.32002) +LCBC1(35.82002) +LCFW1(1113.57002) +LCHN2(1818.57002) +LDOI1(2287.57002) +LDRC1(1432.07002) +LDWM8(1151.82002) +LEBC1(1355.07002) +LECW1(954.82002) +LEFW1(946.07002) +LEGC1(459.07002) +LEGW1(201.32002) +LENN2(2023.82002) +LESQ1(2054.32002) +LEXC1(313.57002) +LFDQ1(892.07002) +LFRM8(1132.57002) +LGB(2.32002) +LGD(1105.82002) +LGFO3(698.32002) +LGRC1(207.32002) +LGWN2(535.07002) +LHCA3(428.57002) +LIBM8(1118.57002) +LICC1(72.32002) +LIDW1(446.32002) +LIMQ1(1592.32002) +LINM8(1754.82002) +LINQR(919.57002) +LKCC1(410.07002) +LKCO3(1706.32002) +LKN(1704.82002) +LKNC1(1292.07002) +LKSO3(615.07002) +LKTI1(1369.57002) +LKWA3(1426.57002) +LLEC1(931.32002) +LLFW1(1055.82002) +LLJ(2024.07002) +LMCN2(1746.57002) +LMCO3(1680.82002) +LMDN2(1001.82002) +LMDO3(996.07002) +LMHM8(2112.32002) +LMLN2(2125.57002) +LMRM8(2148.82002) +LMRN2(1001.82002) +LMT(1346.82002) +LNBW1(353.82002) +LNCM8(1754.82002) +LOAC1(201.07002) +LOBC1(2497.82002) +LOFO3(259.07002) +LOIN2(1958.82002) +LOKC1(1494.57002) +LOL(1286.07002) +LONN2(1940.82002) +LOSC1(129.82002) +LOSO3(865.32002) +LPAC1(153.07002) +LPC(152.07002) +LPDC1(981.07002) +LPFI1(1852.57002) +LPOC1(624.82002) +LPOW1(865.32002) +LPRC1(620.32002) +LPRU1(1974.32002) +LPSI1(1735.57002) +LPSW1(1075.32002) +LPTC1(1507.82002) +LPWO3(509.32002) +LPZC1(639.07002) +LRCM8(1755.57002) +LRLC1(889.32002) +LRRM8(2199.82002) +LSFW1(954.82002) +LSGC1(312.82002) +LSHC1(735.07002) +LSLC1(327.57002) +LSNC1(1249.82002) +LSPC1(1715.57002) +LSRC1(150.07002) +LSTC1(1126.07002) +LSV(704.82002) +LTAI1(1554.57002) +LTHC1(1029.07002) +LTJC1(605.07002) +LTLC1(984.07002) +LTRC1(205.82002) +LUBM8(1436.32002) +LUFI1(1109.57002) +LUKO3(1197.57002) +LUNN2(2077.82002) +LVGQ1(1881.07002) +LVK(246.82002) +LVMC1(165.32002) +LVPN2(587.32002) +LVTC1(2722.57002) +LVYN2(1973.32002) +LWDC1(422.07002) +LWDI1(2604.32002) +LWNW1(1214.07002) +LWS(597.82002) +MADC1(1039.57002) +MAE(86.57002) +MAEC1(487.57002) +MAFC1(236.57002) +MAMC1(2671.82002) +MANM8(1812.57002) +MANW1(809.32002) +MAPC1(603.57002) +MARW1(824.32002) +MAYI1(1925.32002) +MBBC1(951.57002) +MBCA3(628.07002) +MBCC1(123.32002) +MBMW1(824.32002) +MBUC1(129.07002) +MCCC1(1347.07002) +MCDO3(1538.82002) +MCDW1(261.82002) +MCE(40.57002) +MCFC1(1017.57002) +MCGC1(274.32002) +MCGN2(2217.32002) +MCKI1(1136.07002) +MCPA3(1150.57002) +MCUC1(1081.57002) +MDAC1(222.57002) +MDDC1(939.57002) +MDFI1(1785.07002) +MDFO3(636.82002) +MDHC1(1317.82002) +MDLA3(1073.32002) +MDLI1(2400.07002) +MDMI1(1306.57002) +MDRW1(709.07002) +MEAA3(1087.32002) +MEEC1(71.82002) +MEFO3(1123.32002) +MEFW1(1219.82002) +MFDU1(1857.07002) +MFDW1(222.32002) +MFLC1(1031.07002) +MFR(531.82002) +MGCA3(628.07002) +MGFO3(1204.32002) +MGMI1(1857.82002) +MGSW1(872.07002) +MHBC1(93.32002) +MHEC1(502.32002) +MHLA3(1162.57002) +MHMC1(589.82002) +MHS(1579.32002) +MHSI1(1858.32002) +MHSW1(1033.07002) +MHV(854.07002) +MHWO3(1816.07002) +MHYC1(2135.57002) +MIAC1(1017.57002) +MIDI1(2081.82002) +MIDW1(709.07002) +MIGC1(157.57002) +MILW1(799.07002) +MIPW1(148.07002) +MISI1(966.07002) +MITW1(730.57002) +MJBN2(1472.57002) +MJCC1(875.07002) +MKBI1(2332.07002) +MKEC1(2179.57002) +MKZO3(1345.32002) +MLCC1(1154.32002) +MLFO3(565.57002) +MLGC1(1052.82002) +MLHN2(776.32002) +MLKI1(2356.57002) +MLLO3(256.57002) +MLNC1(1052.82002) +MLP(1392.82002) +MMCW1(824.32002) +MMFO3(708.57002) +MMIA3(402.07002) +MMKC1(1335.32002) +MMRO3(708.82002) +MMTA3(1073.32002) +MMTC1(2246.82002) +MMV(79.82002) +MMWA3(572.82002) +MNAC1(1603.32002) +MNCC1(1230.07002) +MNCN2(2014.07002) +MNGC1(1483.32002) +MNHC1(1819.57002) +MNLC1(1124.07002) +MNNA3(1347.82002) +MNRN2(2015.32002) +MNSI1(2367.32002) +MNTN2(1659.07002) +MOAN2(703.07002) +MOD(14.07002) +MOFI1(1656.57002) +MOGN2(1805.82002) +MOIC1(377.82002) +MOKI1(2017.07002) +MOLC1(541.32002) +MOMN2(2123.57002) +MORN2(1633.07002) +MORQ1(846.32002) +MOSI1(866.32002) +MOSO3(1423.32002) +MOUC1(903.32002) +MOWC1(1625.32002) +MPEC1(76.82002) +MPLO3(203.57002) +MPOC1(535.82002) +MPSW1(1021.32002) +MRDC1(1483.32002) +MRFO3(1228.32002) +MRGI1(2231.57002) +MRIC1(535.82002) +MRKI1(1647.32002) +MRLN2(1973.32002) +MRNC1(422.07002) +MRSC1(452.57002) +MRSO3(747.07002) +MRWA3(470.07002) +MRY(19.57002) +MRYM8(1764.57002) +MRYN2(1185.82002) +MSAC1(1579.32002) +MSCI1(878.82002) +MSEC1(244.07002) +MSFO3(1358.07002) +MSJC1(1107.32002) +MSLQ1(1013.07002) +MSO(1372.82002) +MSPM8(1311.07002) +MSQN2(855.07002) +MSRC1(1579.32002) +MSRU1(1816.32002) +MSVA3(572.82002) +MSYC1(1090.82002) +MTAW1(874.07002) +MTCW1(897.57002) +MTHI1(833.07002) +MTHN2(2139.82002) +MTHO3(1177.57002) +MTIC1(377.82002) +MTKM8(1922.32002) +MTMC1(188.07002) +MTMI1(1739.32002) +MTQC1(840.57002) +MTR(19.57002) +MTRO3(1187.32002) +MTSC1(2103.32002) +MTSN2(1341.82002) +MTTC1(2090.07002) +MTZC1(600.32002) +MUDC1(981.32002) +MUDW1(171.82002) +MULM8(2247.82002) +MUO(833.07002) +MVDC1(1233.07002) +MVDN2(1712.82002) +MVEW1(100.32002) +MVLC1(1376.82002) +MWH(392.82002) +MWSA3(783.07002) +MYF(76.82002) +MYL(1746.07002) +MYMA3(321.07002) +MYRC1(2228.07002) +MYRI1(1217.57002) +MYV(22.32002) +MZTC1(1625.32002) +NADC1(168.82002) +NAPC1(254.07002) +NBKO3(318.32002) +NBRC1(75.07002) +NCKC1(1016.07002) +NCLO3(1594.32002) +NCSW1(1115.07002) +NEFW1(766.57002) +NEIQ1(1161.57002) +NFEM8(1524.82002) +NFFI1(2566.57002) +NFFW1(213.82002) +NFJM8(1673.32002) +NFKC1(1544.57002) +NFL(1250.57002) +NFRC1(854.57002) +NFRO3(698.32002) +NHPC1(446.57002) +NHRU1(1995.32002) +NID(850.07002) +NINM8(1348.82002) +NIPC1(384.82002) +NISW1(944.82002) +NKSW1(61.07002) +NKX(76.82002) +NLC(50.57002) +NLSC1(791.57002) +NLSN2(575.82002) +NMPI1(809.82002) +NMSC1(342.57002) +NOIM8(1320.82002) +NPFO3(798.07002) +NPXC1(1180.57002) +NRAC1(100.82002) +NRDC1(1031.82002) +NRKW1(173.57002) +NTCC1(562.82002) +NTDN2(1618.82002) +NTPO3(1709.57002) +NTRC1(1861.82002) +NUCI1(1300.32002) +NUQ(157.07002) +NUW(0.82002) +NVRM8(1714.07002) +NWRA3(901.07002) +NWRC1(27.82002) +NXP(715.57002) +NYAN2(1873.57002) +NYL(166.07002) +NYSO3(717.32002) +NZAC1(1279.32002) +NZCM8(1965.32002) +OAGW1(718.07002) +OAK(29.07002) +OAMC1(31.57002) +OASN2(1923.82002) +OBRC1(532.57002) +OCFW1(1255.32002) +OCHO3(1167.32002) +OCMO3(1415.07002) +OCNC1(63.07002) +OCTC1(259.07002) +OCWO3(1408.57002) +ODBN2(926.07002) +ODLC1(28.82002) +ODSW1(502.82002) +OGD(1454.82002) +OGDC1(949.07002) +OGOC1(616.07002) +OGVC1(1180.57002) +OHOI1(2151.32002) +OICC1(1010.07002) +OITC1(417.57002) +OJAC1(561.32002) +OJIC1(561.32002) +OKB(63.07002) +OKFO3(1515.57002) +OKNC1(1194.82002) +OKPC1(354.32002) +OLDQ1(1015.82002) +OLNM8(1374.32002) +OMFO3(613.07002) +OMFW1(1016.82002) +OMK(792.57002) +OMTC1(828.82002) +OMWW1(1021.32002) +ONCC1(2046.07002) +ONO(708.57002) +ONOC1(120.82002) +ONSC1(823.57002) +ONT(559.07002) +ONYC1(1312.32002) +OOFO3(1648.57002) +OORC1(1651.57002) +OPCA3(532.57002) +OPLC1(875.07002) +ORCO3(72.82002) +ORDC1(266.82002) +ORIC1(96.07002) +ORWN2(1356.57002) +OTOW1(313.82002) +OTTC1(119.07002) +OURC1(830.82002) +OVE(96.82002) +OVNM8(1549.07002) +OVRC1(2064.07002) +OWDC1(133.32002) +OWFO3(1061.07002) +OWNC1(2132.07002) +OWYN2(1817.07002) +OXR(58.32002) +OXSI1(1699.82002) +OYFO3(1607.57002) +P68(1960.07002) +P69(1202.57002) +PACW1(1036.82002) +PAE(39.82002) +PAFO3(594.32002) +PAHN2(1302.82002) +PALW1(446.57002) +PAMC1(937.32002) +PANN2(1759.32002) +PASQ1(1977.32002) +PBCC1(1310.32002) +PBFW1(100.32002) +PBUI1(1571.32002) +PCEC1(434.82002) +PCIC1(476.57002) +PCKC1(1277.57002) +PCKI1(1751.82002) +PCLC1(410.07002) +PCON2(1698.57002) +PCQC1(671.82002) +PCRW1(1591.82002) +PCYO3(1535.82002) +PDEC1(508.57002) +PDGC1(457.07002) +PDT(411.07002) +PDX(87.57002) +PEAC1(348.57002) +PEFO3(291.57002) +PEFW1(974.07002) +PELQR(1600.32002) +PEOW1(976.82002) +PEPC1(2030.57002) +PESW1(961.57002) +PFHC1(1397.57002) +PFRC1(278.07002) +PFTC1(414.57002) +PGRC1(600.32002) +PHGM8(1989.32002) +PHRC1(955.32002) +PHX(368.32002) +PIBC1(162.57002) +PIBN2(587.32002) +PICM8(1771.07002) +PIDC1(1031.82002) +PIEC1(1624.32002) +PIEI1(1096.57002) +PIFC1(1362.82002) +PIFW1(977.82002) +PIH(1370.57002) +PIHC1(982.57002) +PION2(1798.82002) +PIPA3(1543.82002) +PIRI1(1096.57002) +PISC1(80.57002) +PITC1(789.82002) +PIVC1(1426.07002) +PKCC1(680.07002) +PKFC1(537.07002) +PKFO3(819.32002) +PKSQ1(1594.57002) +PLAM8(1179.32002) +PLCC1(433.32002) +PLEC1(165.07002) +PLFI1(1057.32002) +PLIC1(877.07002) +PLKI1(1151.57002) +PLLC1(1530.57002) +PLMC1(29.32002) +PLRC1(924.82002) +PLTC1(307.07002) +PLVM8(1337.07002) +PMD(950.57002) +PMFW1(966.07002) +PMNM8(1294.57002) +PNCC1(2143.57002) +PNCQR(1110.32002) +PNFI1(1419.82002) +PNGO3(485.82002) +PNKW1(935.32002) +PNRI1(1034.07002) +PNTM8(1515.32002) +POEM8(1519.32002) +POLM8(1514.57002) +POMC1(389.57002) +PORQ1(1387.57002) +POSC1(1823.82002) +POTC1(762.32002) +POTI1(874.32002) +POWC1(213.82002) +POWO3(502.07002) +PPDN2(692.07002) +PPHC1(1055.32002) +PPPC1(842.82002) +PPRC1(442.57002) +PPRW1(1356.07002) +PPSC1(307.57002) +PRAI1(1557.82002) +PRB(350.82002) +PRBC1(350.82002) +PRBQ1(1576.07002) +PRC(1651.32002) +PRCI1(1175.07002) +PRCO3(1473.32002) +PRDM8(1302.82002) +PRFO3(741.07002) +PRGC1(1675.32002) +PRHC1(461.07002) +PRIQ1(1259.07002) +PRKA3(230.32002) +PRLI1(1820.32002) +PRMC1(937.32002) +PROO3(875.32002) +PRPC1(828.82002) +PRSN2(2211.57002) +PSAC1(291.82002) +PSC(182.07002) +PSCC1(2163.07002) +PSP(794.57002) +PSPC1(1721.57002) +PSQC1(258.32002) +PSRC1(2097.82002) +PSTA3(1651.32002) +PSTC1(1748.32002) +PSTM8(1481.07002) +PTEC1(231.57002) +PTFO3(1498.32002) +PTHC1(1095.07002) +PTHW1(1409.82002) +PTNM8(2195.32002) +PTPC1(19.57002) +PTV(193.82002) +PUGC1(119.07002) +PUW(835.82002) +PVRO3(1027.82002) +PWYC1(213.82002) +PYFO3(1003.32002) +PYLC1(1131.07002) +PYNC1(1193.32002) +PYPC1(566.32002) +PYTI1(729.32002) +QBAA3(1828.07002) +QBMA3(1816.82002) +QBRA3(1443.82002) +QBYQ2(1429.57002) +QCAC1(58.32002) +QCCO3(737.32002) +QCKA3(1214.57002) +QCNW1(289.07002) +QDPA3(2360.07002) +QFSA3(1933.57002) +QGDA3(1326.57002) +QGSA3(1711.57002) +QHAA3(351.57002) +QHBA3(1070.07002) +QHQA3(726.57002) +QHUA3(1535.57002) +QISA3(1651.32002) +QLGA3(1715.07002) +QMBA3(1292.32002) +QMLA3(1715.07002) +QMMA3(1291.57002) +QNFA3(1715.07002) +QNYC1(1504.57002) +QOKA3(1282.82002) +QPFO3(569.07002) +QRMO3(1703.32002) +QRTA3(1572.32002) +QSPA3(1214.57002) +QSTA3(1042.57002) +QTCW1(566.07002) +QTUA3(1863.82002) +QTWA3(1466.32002) +QTZC1(1234.57002) +QUEQ1(925.07002) +QUPA3(628.07002) +QWSA3(2150.82002) +QYJA3(1641.32002) +QYRC1(1504.57002) +RAL(309.57002) +RAWN2(1395.07002) +RAYQ1(956.82002) +RBG(319.32002) +RBL(108.82002) +RBTN2(1664.82002) +RBVN2(2048.57002) +RBYC1(370.07002) +RBYM8(1907.82002) +RCCW1(193.32002) +RCEC1(2297.32002) +RCFC1(47.57002) +RCHC1(846.82002) +RCPC1(1286.82002) +RCRO3(1587.57002) +RCSO3(1590.57002) +RDD(155.82002) +RDKI1(2303.32002) +RDLO3(478.07002) +RDM(929.07002) +RDOC1(0.32002) +RDVC1(667.32002) +REDO3(1123.07002) +REEO3(83.82002) +RENI1(1220.57002) +REO(1261.57002) +RFCN2(653.57002) +RFSC1(363.57002) +RFTI1(1347.82002) +RGTC1(984.07002) +RIV(457.07002) +RJSC1(395.32002) +RKBC1(277.07002) +RKHO3(287.32002) +RKPM8(1992.07002) +RLFO3(1389.57002) +RLGW1(1181.57002) +RLKC1(990.07002) +RLKN2(2027.57002) +RLYO3(1393.32002) +RMFO3(110.57002) +RMNC1(475.32002) +RMTC1(1179.32002) +RNDC1(1477.07002) +RNDN2(1723.32002) +RNFO3(1485.82002) +RNM(475.32002) +RNO(1777.32002) +RNT(54.82002) +ROCI1(1315.82002) +ROLC1(712.07002) +RONM8(1080.32002) +RORO3(1281.07002) +ROSQ1(762.57002) +ROVC1(1031.82002) +RPSA3(171.32002) +RRAC1(155.82002) +RRFI1(1704.57002) +RRKN2(1305.07002) +RRMC1(1592.32002) +RROO3(1333.82002) +RRRC1(520.57002) +RSBU1(1657.32002) +RSCN2(1826.57002) +RSFW1(159.82002) +RSHC1(1497.07002) +RSPC1(508.07002) +RTFO3(1374.57002) +RTHN2(2138.57002) +RTLC1(1440.07002) +RUBC1(2136.07002) +RUSC1(1113.32002) +RVDC1(1716.82002) +RVYC1(324.32002) +RWCC1(111.32002) +RWDN2(575.82002) +RXFO3(1092.07002) +RYNC1(549.07002) +RZVW1(562.82002) +SABC1(2896.07002) +SAC(-4.42998) +SAFO3(1148.32002) +SAHN2(575.82002) +SAN(56.82002) +SAPC1(-5.92998) +SARC1(75.07002) +SAUC1(558.32002) +SAYC1(410.07002) +SBA(142.57002) +SBFO3(880.32002) +SBIC1(0.070023) +SBKW1(76.82002) +SBMW1(677.57002) +SBP(318.82002) +SBPC1(318.82002) +SBTC1(1166.82002) +SBVC1(244.07002) +SBYC1(745.82002) +SCAQ1(2022.82002) +SCCN2(575.82002) +SCCQ1(2190.07002) +SCDO3(190.82002) +SCFI1(1328.57002) +SCFO3(1481.32002) +SCHC1(313.57002) +SCHI1(2118.82002) +SCHO3(1417.32002) +SCK(-4.17998) +SCKC1(0.32002) +SCOO3(190.82002) +SCRN2(1851.57002) +SCSC1(508.32002) +SCTI1(1774.82002) +SCWW1(278.07002) +SDB(1131.07002) +SDDC1(363.82002) +SDFO3(1570.82002) +SDLC1(796.82002) +SDM(179.82002) +SDMM8(1981.57002) +SDMO3(393.07002) +SDMW1(315.07002) +SDOC1(416.07002) +SDRC1(1128.82002) +SEA(76.82002) +SENW1(1094.82002) +SERC1(1940.57002) +SETC1(973.07002) +SEW(37.82002) +SEXC1(208.57002) +SEYC1(1762.32002) +SFBC1(1748.32002) +SFBO3(495.57002) +SFF(705.32002) +SFKC1(532.57002) +SFKO3(477.32002) +SFNW1(205.82002) +SFO(24.07002) +SFOC1(2.82002) +SFXC1(64.82002) +SGEC1(438.07002) +SGFO3(879.57002) +SGGU1(1359.32002) +SGHQ1(1781.82002) +SGNW1(1145.07002) +SGPC1(1180.82002) +SGQC1(396.07002) +SGRU1(1101.82002) +SGUU1(1050.07002) +SGX(258.32002) +SGYC1(962.32002) +SHDC1(364.82002) +SHFO3(1392.82002) +SHHC1(653.57002) +SHIC1(801.57002) +SHLQ2(1300.57002) +SHMC1(1483.32002) +SHN(70.57002) +SHNC1(669.82002) +SHPW1(817.57002) +SHQC1(746.82002) +SHRO3(1182.82002) +SHRQ1(1725.82002) +SHVC1(1642.82002) +SHWI1(1061.57002) +SIAN2(1673.32002) +SIDW1(638.57002) +SIGU1(2386.57002) +SIY(970.32002) +SJBC1(207.07002) +SJC(198.57002) +SKAM8(1843.07002) +SKFI1(1924.82002) +SKKW1(1143.82002) +SKLA3(1611.07002) +SKMW1(200.07002) +SKNC1(551.82002) +SKOQ1(2292.82002) +SKOW1(663.82002) +SKYW1(982.82002) +SLAC1(739.32002) +SLE(66.57002) +SLFC1(735.07002) +SLFO3(1415.07002) +SLKO3(1701.57002) +SLMC1(2231.32002) +SLON2(704.82002) +SLPC1(1020.82002) +SLRC1(175.82002) +SLTC1(1247.07002) +SLTO3(1370.32002) +SLVO3(1715.32002) +SLWC1(23.07002) +SMBA3(691.32002) +SMBC1(1007.32002) +SMDC1(1949.07002) +SMF(-5.92998) +SMFO3(1762.07002) +SMGC1(318.82002) +SMIO3(263.57002) +SMLO3(1565.07002) +SMN(1853.32002) +SMNN2(1422.07002) +SMNQ2(540.82002) +SMO(47.07002) +SMOC1(23.07002) +SMPC1(307.32002) +SMPN2(926.07002) +SMPW1(1063.82002) +SMRC1(364.82002) +SMRO3(1701.57002) +SMRQ1(1080.32002) +SMSC1(1148.32002) +SMTC1(10.57002) +SMTI1(1695.07002) +SMTM8(1580.82002) +SMVC1(354.32002) +SMWN2(1422.07002) +SMX(103.57002) +SMYI1(1853.32002) +SNA(100.82002) +SNFW1(516.07002) +SNS(168.82002) +SNSI1(1309.82002) +SNT(2352.07002) +SNWC1(1140.32002) +SOAC1(904.07002) +SOAO3(898.32002) +SOBO3(898.32002) +SOCO3(898.32002) +SODO3(898.32002) +SOEO3(898.32002) +SOFO3(898.32002) +SOGO3(898.32002) +SOUI1(1054.57002) +SOX(306.57002) +SPAI1(1559.57002) +SPB(127.57002) +SPCC1(2179.57002) +SPCW1(668.57002) +SPEW1(246.57002) +SPGC1(1728.32002) +SPGN2(1616.07002) +SPGW1(1299.57002) +SPLW1(1121.32002) +SPMN2(1956.82002) +SPMW1(1071.57002) +SPNQ1(1798.82002) +SPSO3(1200.57002) +SPWC1(1020.32002) +SPXC1(142.57002) +SQFO3(1127.32002) +SQLW1(473.07002) +SQPM8(1356.57002) +SQPW1(1036.32002) +SQSC1(932.32002) +SRAC1(2722.57002) +SRBN2(1001.82002) +SRBW1(476.07002) +SRCQ1(1787.32002) +SRFI1(1497.57002) +SRGM8(1348.07002) +SRIC1(24.32002) +SRMO3(631.07002) +SRTC1(712.32002) +SRUC1(398.32002) +SRXC1(607.07002) +SRYM8(1764.57002) +SSCN2(2178.57002) +SSPW1(927.07002) +STAC1(100.82002) +STAM8(1480.57002) +STAN2(2028.32002) +STCQ1(1379.32002) +STDQ1(882.82002) +STEC1(176.82002) +STFC1(624.07002) +STFO3(1623.82002) +STGM8(1348.07002) +STHC1(275.32002) +STKM8(1499.57002) +STMN2(1994.07002) +STMQR(1764.57002) +STNI1(2352.07002) +STPC1(1949.07002) +STQC1(1651.57002) +STRO3(1525.07002) +STRQ1(932.32002) +STRW1(1555.32002) +STS(206.57002) +STSM8(1263.07002) +STTM8(1454.07002) +STUC1(1748.32002) +STVM8(1521.32002) +STWO3(1598.57002) +STYC1(1105.32002) +SUAM8(1931.32002) +SUMM8(1771.07002) +SUNN2(1812.57002) +SUNQ1(2034.07002) +SVCO3(1629.57002) +SVFI1(1654.07002) +SVFO3(584.32002) +SVMO3(1556.57002) +SVNW1(1236.32002) +SVPI1(1787.57002) +SVRQ2(1122.82002) +SWAC1(697.82002) +SWBC1(1342.82002) +SWCW1(920.32002) +SWDC1(11.32002) +SWIC1(161.32002) +SWLC1(118.07002) +SWNN2(653.57002) +SWPI1(2391.82002) +SXT(599.07002) +SYDC1(354.32002) +SYNO3(229.32002) +SYSC1(999.82002) +SZKQ2(947.32002) +TABC1(351.57002) +TACA3(131.32002) +TACN2(1975.57002) +TANC1(841.32002) +TAPC1(1359.82002) +TAYI1(2006.32002) +TBRC1(1455.07002) +TBSU1(2418.32002) +TCAC1(944.32002) +TCFI1(1440.07002) +TCFO3(583.57002) +TCFW1(1023.07002) +TCKC1(628.32002) +TCLC1(671.82002) +TCM(36.07002) +TCMO3(1430.82002) +TCNC1(442.57002) +TCRA3(1343.57002) +TEKC1(924.82002) +TEKW1(834.07002) +TENQR(1728.82002) +TEPM8(2006.82002) +TERC1(261.07002) +TEXN2(1613.07002) +TFRU1(1778.07002) +TGCC1(2091.82002) +TGFI1(1741.57002) +THAM8(1298.57002) +THBW1(1494.32002) +THDC1(267.32002) +THFI1(2051.07002) +THLN2(1777.32002) +THMI1(1956.57002) +THRQ1(875.07002) +TIGC1(973.32002) +TIJC1(37.82002) +TILO3(711.32002) +TILQ1(2241.57002) +TILW1(473.07002) +TIW(28.82002) +TIXC1(38.32002) +TLHC1(903.32002) +TLMO3(300.07002) +TLRW1(297.82002) +TLYO3(1027.82002) +TMCM8(1866.07002) +TMFO3(1600.57002) +TMKO3(300.07002) +TMNC1(1306.57002) +TMRO3(1355.07002) +TNRC1(203.82002) +TOFO3(1349.82002) +TOHW1(1222.57002) +TOPI1(1758.57002) +TORC1(295.82002) +TPEO3(1482.07002) +TPFW1(973.07002) +TPGC1(311.07002) +TPH(1745.07002) +TPHC1(1306.57002) +TQIN2(2066.82002) +TRCM8(1184.82002) +TRFO3(513.57002) +TRFW1(1121.32002) +TRGW1(1060.82002) +TRHC1(944.32002) +TRII1(1680.07002) +TRM(238.32002) +TRMC1(590.07002) +TRMI1(1784.82002) +TRNW1(720.82002) +TROM8(1218.07002) +TRON2(926.32002) +TRTC1(2086.07002) +TRUC1(2108.32002) +TRVQ1(919.07002) +TSCC1(502.32002) +TSDC1(1357.82002) +TSHC1(1238.32002) +TSOW1(1088.07002) +TSP(1359.82002) +TTD(138.82002) +TTRC1(338.57002) +TUFO3(1224.32002) +TUSN2(1975.57002) +TVL(2128.57002) +TVWU1(1660.32002) +TWBI1(1064.82002) +TWCC1(1359.82002) +TWDC1(402.07002) +TWDN2(855.07002) +TWF(1307.57002) +TWLM8(1864.57002) +TWMC1(485.57002) +TWRW1(720.82002) +TYBO3(1545.07002) +TYEC1(940.57002) +TYLO3(1457.82002) +U24(1439.82002) +UAO(55.07002) +UCCC1(1048.57002) +UCLC1(167.32002) +UCRC1(363.32002) +UDWC1(930.32002) +UFDN2(926.32002) +UHLC1(1564.32002) +UIL(79.82002) +UKIO3(1290.57002) +ULVN2(1044.32002) +UMCQ2(1488.57002) +UMNC1(312.82002) +UMTO3(175.07002) +UNYO3(1447.82002) +UPSO3(780.82002) +UPWW1(1060.82002) +USEA3(906.57002) +VABC1(1653.57002) +VAMA3(609.07002) +VAQC1(231.57002) +VBPC1(1949.07002) +VCB(67.82002) +VCFO3(283.57002) +VDBC1(131.07002) +VDBN2(755.82002) +VDCA3(1423.32002) +VDPA3(1438.57002) +VENO3(373.57002) +VENU1(1796.57002) +VGAC1(2548.07002) +VGRC1(1054.07002) +VGT(755.82002) +VICC1(463.82002) +VICQ1(1745.82002) +VIOC1(1624.57002) +VIS(61.07002) +VKOC1(2950.57002) +VLCC1(563.32002) +VLKC1(588.07002) +VLYC1(1235.57002) +VNCU1(1903.32002) +VNNI1(2462.82002) +VNOC1(240.57002) +VNY(312.82002) +VOFN2(597.82002) +VSTC1(167.07002) +VTUC1(208.57002) +VUO(87.57002) +VVDN2(575.82002) +WAGI1(1912.32002) +WAHI1(850.57002) +WALC1(2288.07002) +WARO3(1291.32002) +WASC1(82.57002) +WATC1(1306.57002) +WATQ1(1796.07002) +WBA(1973.82002) +WBRI1(1641.57002) +WCGU1(1657.07002) +WCLN2(1851.57002) +WCWO3(898.32002) +WDEC1(311.07002) +WEAC1(975.07002) +WEDC1(96.07002) +WEEC1(1230.32002) +WEFI1(1396.07002) +WEHC1(561.32002) +WEIN2(718.07002) +WESC1(304.82002) +WFHC1(1379.82002) +WFSW1(162.32002) +WGRM8(1333.82002) +WGVN2(1532.82002) +WGWC1(1031.82002) +WHDI1(1700.82002) +WHHM8(1656.57002) +WHLA3(2070.82002) +WHSW1(872.57002) +WHTW1(1465.07002) +WIKA3(983.57002) +WIMQ1(946.07002) +WIWO3(1423.07002) +WJF(753.32002) +WKFO3(320.57002) +WKPA3(735.07002) +WLBC1(1010.07002) +WLCI1(2005.57002) +WLDN2(896.82002) +WLFQ2(990.32002) +WLKC1(-0.67998) +WLLM8(1381.32002) +WLLO3(959.57002) +WLMO3(741.07002) +WLYC1(442.57002) +WMC(1532.82002) +WMFO3(1044.32002) +WMSC1(856.82002) +WNDN2(831.07002) +WODI1(1614.07002) +WODM8(1915.07002) +WPKO3(770.32002) +WPOC1(344.57002) +WPRW1(680.82002) +WRIC1(1347.82002) +WRKC1(1359.82002) +WRMM8(2064.07002) +WRNQ1(936.32002) +WRPM8(1427.57002) +WRRC1(320.07002) +WRRU1(1359.32002) +WRSC1(450.82002) +WRSM8(2222.07002) +WRTN2(994.57002) +WSBO3(539.57002) +WSDC1(377.07002) +WSFM8(1925.32002) +WSFO3(1102.57002) +WSHC1(2118.57002) +WSJN2(926.32002) +WSPC1(512.57002) +WSRO3(737.57002) +WSTQ1(1803.32002) +WTFO3(1462.57002) +WTHC1(145.82002) +WTPC1(898.82002) +WTRC1(124.82002) +WTSO3(300.07002) +WUPA3(983.57002) +WVAA3(1488.82002) +WVI(149.32002) +WVTC1(2063.57002) +WWAC1(1016.07002) +WWDC1(1636.07002) +WWNC1(1729.32002) +WWRC1(1995.07002) +WYDW1(389.07002) +WYTC1(733.32002) +XXXC1(2379.07002) +YALW1(434.07002) +YBCA3(1672.57002) +YBGA3(1672.57002) +YBLC1(216.07002) +YCGN2(1345.57002) +YCPA3(1379.07002) +YCPC1(1335.32002) +YCVA3(1535.07002) +YCWA3(1659.07002) +YEFO3(695.32002) +YFCA3(1672.57002) +YFFI1(2410.82002) +YKA(844.07002) +YKAM8(1409.57002) +YKM(409.82002) +YLCA3(1659.07002) +YLPO3(1514.57002) +YMNA3(1403.57002) +YNFO3(273.32002) +YOBC1(1198.07002) +YPWA3(1651.32002) +YRKC1(404.07002) +YRV(1352.82002) +YSAC1(999.82002) +YSMA3(1672.57002) +YSUA3(1897.32002) +YTBA3(1672.57002) +YTPA3(1672.57002) +YUCA3(879.57002) +YUGA3(1672.57002) +YVR(1.82002) +YVVC1(1453.82002) +YWAC1(1729.32002) +YWPA3(1640.82002) +YWSA3(1672.57002) +YXC(1142.07002) +YXX(60.07002) +YYC(1065.07002) +YYF(1119.82002) +YYVC1(2450.32002) +ZBHA3(806.07002) +ZENC1(753.82002) +ZFWA3(744.82002) +ZIOU1(1600.57002) +ZONM8(1151.82002) diff --git a/internal/test_unit/config/SID_CONUS_ADPUPA_ELEV.txt b/internal/test_unit/config/SID_CONUS_ADPUPA_ELEV.txt new file mode 100644 index 0000000000..42eb4fd1fb --- /dev/null +++ b/internal/test_unit/config/SID_CONUS_ADPUPA_ELEV.txt @@ -0,0 +1,98 @@ +SID_CONUS_ADPUPA_ELEV +72206(4.07002) +72520(316.07002) +72597(531.82002) +72518(137.82002) +71600(0.070023) +71722(214.57002) +72764(541.57002) +71836(14.82002) +71908(729.57002) +71867(261.32002) +71913(0.070023) +71945(374.82002) +72250(4.82002) +72208(6.07002) +72632(307.07002) +74001(204.32002) +72403(115.82002) +72572(1486.57002) +72662(1025.82002) +72712(182.82002) +71845(355.57002) +76644(8.82002) +76595(2.32002) +72201(0.070023) +76225(1572.07002) +72230(169.57002) +72388(926.32002) +72318(640.32002) +72440(374.32002) +72528(201.82002) +72645(222.57002) +72776(1057.82002) +71934(220.07002) +72393(57.32002) +72305(2.82002) +72493(131.32002) +72456(300.32002) +72476(1638.57002) +72426(308.57002) +72501(17.57002) +72649(277.57002) +72786(670.57002) +72261(324.32002) +72364(1244.82002) +72340(103.57002) +72317(251.07002) +72451(770.32002) +74002(12.32002) +72562(887.82002) +72681(970.57002) +72694(66.57002) +72634(400.57002) +76743(12.82002) +72558(363.07002) +72797(79.82002) +71203(868.57002) +70398(22.57002) +78073(0.070023) +72210(3.82002) +72251(12.57002) +72240(2.07002) +72265(855.82002) +72327(169.82002) +72768(688.07002) +74455(210.82002) +71603(11.57002) +72659(395.82002) +71811(3.07002) +71816(74.82002) +76458(12.82002) +72202(1.57002) +72274(883.32002) +72235(103.07002) +78016(0.070023) +72402(3.32002) +71815(38.57002) +72747(346.82002) +71119(718.57002) +78526(42.07002) +72248(60.82002) +72215(263.32002) +72357(359.82002) +74560(189.07002) +74494(1.82002) +74389(77.32002) +71906(62.82002) +ASDE04(0.070023) +76394(433.07002) +72233(7.07002) +72214(25.82002) +72249(190.57002) +72293(76.82002) +74004(136.07002) +72363(1078.82002) +71109(97.82002) +71823(334.57002) +71907(5.32002) diff --git a/internal/test_unit/config/ref_config/GridStatConfig_03h b/internal/test_unit/config/ref_config/GridStatConfig_03h index 0a3daba7a1..278acf3be0 100644 --- a/internal/test_unit/config/ref_config/GridStatConfig_03h +++ b/internal/test_unit/config/ref_config/GridStatConfig_03h @@ -198,8 +198,9 @@ nc_pairs_flag = FALSE; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${MODEL}_F${FCST_TIME}_03h"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${MODEL}_F${FCST_TIME}_03h"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/ref_config/GridStatConfig_24h b/internal/test_unit/config/ref_config/GridStatConfig_24h index 8804e2d708..2d0c263303 100644 --- a/internal/test_unit/config/ref_config/GridStatConfig_24h +++ b/internal/test_unit/config/ref_config/GridStatConfig_24h @@ -198,8 +198,9 @@ nc_pairs_flag = FALSE; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "${MODEL}_F${FCST_TIME}_24h"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "${MODEL}_F${FCST_TIME}_24h"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/ref_config/PointStatConfig_ADPUPA b/internal/test_unit/config/ref_config/PointStatConfig_ADPUPA index 226be944df..2d98af4d87 100644 --- a/internal/test_unit/config/ref_config/PointStatConfig_ADPUPA +++ b/internal/test_unit/config/ref_config/PointStatConfig_ADPUPA @@ -182,8 +182,11 @@ output_flag = { duplicate_flag = NONE; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${MODEL}_F${FCST_TIME}_ADPUPA"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${MODEL}_F${FCST_TIME}_ADPUPA"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/ref_config/PointStatConfig_ONLYSF b/internal/test_unit/config/ref_config/PointStatConfig_ONLYSF index 9667c95b10..3f8a2a6367 100644 --- a/internal/test_unit/config/ref_config/PointStatConfig_ONLYSF +++ b/internal/test_unit/config/ref_config/PointStatConfig_ONLYSF @@ -192,8 +192,11 @@ output_flag = { duplicate_flag = NONE; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${MODEL}_F${FCST_TIME}_ONLYSF"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${MODEL}_F${FCST_TIME}_ONLYSF"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/config/ref_config/PointStatConfig_WINDS b/internal/test_unit/config/ref_config/PointStatConfig_WINDS index 87fe9c01bd..ffb0a2f06f 100644 --- a/internal/test_unit/config/ref_config/PointStatConfig_WINDS +++ b/internal/test_unit/config/ref_config/PointStatConfig_WINDS @@ -175,8 +175,11 @@ output_flag = { duplicate_flag = NONE; rank_corr_flag = FALSE; -tmp_dir = "/tmp"; -output_prefix = "${MODEL}_F${FCST_TIME}_WINDS"; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = "${MODEL}_F${FCST_TIME}_WINDS"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/internal/test_unit/t b/internal/test_unit/t deleted file mode 100755 index 8df021c329..0000000000 --- a/internal/test_unit/t +++ /dev/null @@ -1,114 +0,0 @@ -export 'CLIMO_MEAN_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cmean_1d.19790410' -export 'DESC=NO_WEIGHT' -export 'GRID_WEIGHT=NONE' -export 'OUTPUT_PREFIX=NO_WEIGHT' -/d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../share/met/../../bin/grid_stat \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib2/gfs/gfs_2012040900_F024.grib2 \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib2/gfsanl/gfsanl_4_20120410_0000_000.grb2 \ - /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/config/GridStatConfig_grid_weight \ - -outdir /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../test_output/grid_weight -v 1 -unset CLIMO_MEAN_FILE -unset DESC -unset GRID_WEIGHT -unset OUTPUT_PREFIX - - -export 'CLIMO_MEAN_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cmean_1d.19790410' -export 'DESC=COS_LAT_WEIGHT' -export 'GRID_WEIGHT=COS_LAT' -export 'OUTPUT_PREFIX=COS_LAT_WEIGHT' -/d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../share/met/../../bin/grid_stat \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib2/gfs/gfs_2012040900_F024.grib2 \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib2/gfsanl/gfsanl_4_20120410_0000_000.grb2 \ - /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/config/GridStatConfig_grid_weight \ - -outdir /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../test_output/grid_weight -v 1 -unset CLIMO_MEAN_FILE -unset DESC -unset GRID_WEIGHT -unset OUTPUT_PREFIX - - -export 'CLIMO_MEAN_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cmean_1d.19790410' -export 'DESC=AREA_WEIGHT' -export 'GRID_WEIGHT=AREA' -export 'OUTPUT_PREFIX=AREA_WEIGHT' -/d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../share/met/../../bin/grid_stat \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib2/gfs/gfs_2012040900_F024.grib2 \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib2/gfsanl/gfsanl_4_20120410_0000_000.grb2 \ - /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/config/GridStatConfig_grid_weight \ - -outdir /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../test_output/grid_weight -v 1 -unset CLIMO_MEAN_FILE -unset DESC -unset GRID_WEIGHT -unset OUTPUT_PREFIX - - -export 'CLIMO_MEAN_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cmean_1d.19790410' -export 'CLIMO_STDEV_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cstdv_1d.19790410' -export 'DESC=NO_WEIGHT' -export 'GRID_WEIGHT=NONE' -export 'OUTPUT_PREFIX=NO_WEIGHT' -/d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../share/met/../../bin/ensemble_stat \ - 6 \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-fer-gep1/arw-fer-gep1_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-fer-gep5/arw-fer-gep5_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-sch-gep2/arw-sch-gep2_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-sch-gep6/arw-sch-gep6_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-tom-gep3/arw-tom-gep3_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-tom-gep7/arw-tom-gep7_2012040912_F024.grib \ - /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/config/EnsembleStatConfig_grid_weight \ - -grid_obs /d1/projects/MET/MET_test_data/unit_test/obs_data/laps/laps_2012041012_F000.grib \ - -outdir /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../test_output/grid_weight -v 1 -unset CLIMO_MEAN_FILE -unset CLIMO_STDEV_FILE -unset DESC -unset GRID_WEIGHT -unset OUTPUT_PREFIX - - -export 'CLIMO_MEAN_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cmean_1d.19790410' -export 'CLIMO_STDEV_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cstdv_1d.19790410' -export 'DESC=COS_LAT_WEIGHT' -export 'GRID_WEIGHT=COS_LAT' -export 'OUTPUT_PREFIX=COS_LAT_WEIGHT' -/d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../share/met/../../bin/ensemble_stat \ - 6 \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-fer-gep1/arw-fer-gep1_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-fer-gep5/arw-fer-gep5_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-sch-gep2/arw-sch-gep2_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-sch-gep6/arw-sch-gep6_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-tom-gep3/arw-tom-gep3_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-tom-gep7/arw-tom-gep7_2012040912_F024.grib \ - /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/config/EnsembleStatConfig_grid_weight \ - -grid_obs /d1/projects/MET/MET_test_data/unit_test/obs_data/laps/laps_2012041012_F000.grib \ - -outdir /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../test_output/grid_weight -v 1 -unset CLIMO_MEAN_FILE -unset CLIMO_STDEV_FILE -unset DESC -unset GRID_WEIGHT -unset OUTPUT_PREFIX - - -export 'CLIMO_MEAN_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cmean_1d.19790410' -export 'CLIMO_STDEV_FILE=${MET_TEST_INPUT}/climatology_data/NCEP_1.0deg/cstdv_1d.19790410' -export 'DESC=AREA_WEIGHT' -export 'GRID_WEIGHT=AREA' -export 'OUTPUT_PREFIX=AREA_WEIGHT' -/d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../share/met/../../bin/ensemble_stat \ - 6 \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-fer-gep1/arw-fer-gep1_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-fer-gep5/arw-fer-gep5_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-sch-gep2/arw-sch-gep2_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-sch-gep6/arw-sch-gep6_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-tom-gep3/arw-tom-gep3_2012040912_F024.grib \ - /d1/projects/MET/MET_test_data/unit_test/model_data/grib1/arw-tom-gep7/arw-tom-gep7_2012040912_F024.grib \ - /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/config/EnsembleStatConfig_grid_weight \ - -grid_obs /d1/projects/MET/MET_test_data/unit_test/obs_data/laps/laps_2012041012_F000.grib \ - -outdir /d1/personal/johnhg/MET/MET_development/MET-feature_2887_categorical_weights/internal/test_unit/../../test_output/grid_weight -v 1 -unset CLIMO_MEAN_FILE -unset CLIMO_STDEV_FILE -unset DESC -unset GRID_WEIGHT -unset OUTPUT_PREFIX - - diff --git a/internal/test_unit/xml/unit_point_stat.xml b/internal/test_unit/xml/unit_point_stat.xml index 2c90567c80..8e798e03ec 100644 --- a/internal/test_unit/xml/unit_point_stat.xml +++ b/internal/test_unit/xml/unit_point_stat.xml @@ -72,6 +72,26 @@ + + &MET_BIN;/point_stat + + BEG_DS -300 + END_DS 300 + OUTPUT_PREFIX GRIB1_NAM_GDAS_MPR_OBTYPE + CONFIG_DIR &CONFIG_DIR; + CLIMO_FILE "&DATA_DIR_MODEL;/grib1/gfs/gfs_2012040900_F012_gNam.grib" + + \ + &DATA_DIR_MODEL;/grib1/nam/nam_2012040900_F012.grib \ + &OUTPUT_DIR;/pb2nc/gdas1.20120409.t12z.prepbufr.nc \ + &CONFIG_DIR;/PointStatConfig_MPR_OBTYPE \ + -outdir &OUTPUT_DIR;/point_stat -v 1 + + + &OUTPUT_DIR;/point_stat/point_stat_GRIB1_NAM_GDAS_MPR_OBTYPE_120000L_20120409_120000V.stat + + + &MET_BIN;/point_stat diff --git a/internal/test_unit/xml/unit_point_weight.xml b/internal/test_unit/xml/unit_point_weight.xml new file mode 100644 index 0000000000..b034b54a3a --- /dev/null +++ b/internal/test_unit/xml/unit_point_weight.xml @@ -0,0 +1,148 @@ + + + + + + + + + + +]> + + + + + + &TEST_DIR; + true + + + &MET_BIN;/point_stat + + OUTPUT_PREFIX NO_WEIGHT + DESC NO_WEIGHT + POINT_WEIGHT NONE + CONFIG_DIR &CONFIG_DIR; + + \ + &DATA_DIR_MODEL;/grib2/sref_mn/sref_mean_2012040821_F015.grib2 \ + &OUTPUT_DIR;/pb2nc/gdas1.20120409.t12z.prepbufr.nc \ + &CONFIG_DIR;/PointStatConfig_point_weight \ + -outdir &OUTPUT_DIR;/point_weight -v 1 + + + &OUTPUT_DIR;/point_weight/point_stat_NO_WEIGHT_150000L_20120409_120000V.stat + + + + + &MET_BIN;/point_stat + + OUTPUT_PREFIX SID_WEIGHT + DESC SID_WEIGHT + POINT_WEIGHT SID + CONFIG_DIR &CONFIG_DIR; + + \ + &DATA_DIR_MODEL;/grib2/sref_mn/sref_mean_2012040821_F015.grib2 \ + &OUTPUT_DIR;/pb2nc/gdas1.20120409.t12z.prepbufr.nc \ + &CONFIG_DIR;/PointStatConfig_point_weight \ + -outdir &OUTPUT_DIR;/point_weight -v 1 + + + &OUTPUT_DIR;/point_weight/point_stat_SID_WEIGHT_150000L_20120409_120000V.stat + + + + + &MET_BIN;/point_stat + + OUTPUT_PREFIX PROB_NO_WEIGHT + DESC NO_WEIGHT + POINT_WEIGHT NONE + CONFIG_DIR &CONFIG_DIR; + + \ + &DATA_DIR_MODEL;/grib2/sref_pr/sref_prob_2012040821_F015.grib2 \ + &OUTPUT_DIR;/pb2nc/gdas1.20120409.t12z.prepbufr.nc \ + &CONFIG_DIR;/PointStatConfig_prob_point_weight \ + -outdir &OUTPUT_DIR;/point_weight -v 1 + + + &OUTPUT_DIR;/point_weight/point_stat_PROB_NO_WEIGHT_150000L_20120409_120000V.stat + + + + + &MET_BIN;/point_stat + + OUTPUT_PREFIX PROB_SID_WEIGHT + DESC SID_WEIGHT + POINT_WEIGHT SID + CONFIG_DIR &CONFIG_DIR; + + \ + &DATA_DIR_MODEL;/grib2/sref_pr/sref_prob_2012040821_F015.grib2 \ + &OUTPUT_DIR;/pb2nc/gdas1.20120409.t12z.prepbufr.nc \ + &CONFIG_DIR;/PointStatConfig_prob_point_weight \ + -outdir &OUTPUT_DIR;/point_weight -v 1 + + + &OUTPUT_DIR;/point_weight/point_stat_PROB_SID_WEIGHT_150000L_20120409_120000V.stat + + + + + &MET_BIN;/ensemble_stat + + OUTPUT_PREFIX NO_WEIGHT + DESC NO_WEIGHT + POINT_WEIGHT NONE + CONFIG_DIR &CONFIG_DIR; + + \ + 6 \ + &DATA_DIR_MODEL;/grib1/arw-fer-gep1/arw-fer-gep1_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-fer-gep5/arw-fer-gep5_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-sch-gep2/arw-sch-gep2_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-sch-gep6/arw-sch-gep6_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-tom-gep3/arw-tom-gep3_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-tom-gep7/arw-tom-gep7_2012040912_F024.grib \ + &CONFIG_DIR;/EnsembleStatConfig_point_weight \ + -point_obs &OUTPUT_DIR;/ascii2nc/gauge_2012041012_24hr.nc \ + -outdir &OUTPUT_DIR;/point_weight -v 1 + + + &OUTPUT_DIR;/point_weight/ensemble_stat_NO_WEIGHT_20120410_120000V.stat + + + + + &MET_BIN;/ensemble_stat + + OUTPUT_PREFIX SID_WEIGHT + DESC SID_WEIGHT + POINT_WEIGHT SID + CONFIG_DIR &CONFIG_DIR; + + \ + 6 \ + &DATA_DIR_MODEL;/grib1/arw-fer-gep1/arw-fer-gep1_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-fer-gep5/arw-fer-gep5_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-sch-gep2/arw-sch-gep2_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-sch-gep6/arw-sch-gep6_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-tom-gep3/arw-tom-gep3_2012040912_F024.grib \ + &DATA_DIR_MODEL;/grib1/arw-tom-gep7/arw-tom-gep7_2012040912_F024.grib \ + &CONFIG_DIR;/EnsembleStatConfig_point_weight \ + -point_obs &OUTPUT_DIR;/ascii2nc/gauge_2012041012_24hr.nc \ + -outdir &OUTPUT_DIR;/point_weight -v 1 + + + &OUTPUT_DIR;/point_weight/ensemble_stat_SID_WEIGHT_20120410_120000V.stat + + + + + diff --git a/scripts/config/EnsembleStatConfig b/scripts/config/EnsembleStatConfig index bc84b81d8e..5353c92579 100644 --- a/scripts/config/EnsembleStatConfig +++ b/scripts/config/EnsembleStatConfig @@ -124,6 +124,8 @@ message_type_group_map = [ { key = "ONLYSF"; val = "ADPSFC,SFCSHP"; } ]; +obtype_as_group_val_flag = FALSE; + // // Ensemble bin sizes // May be set separately in each "obs.field" entry @@ -272,8 +274,10 @@ rng = { //////////////////////////////////////////////////////////////////////////////// -grid_weight_flag = NONE; -output_prefix = ""; -version = "V12.0.0"; +grid_weight_flag = NONE; +point_weight_flag = NONE; + +output_prefix = ""; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/scripts/config/GridStatConfig_APCP_12 b/scripts/config/GridStatConfig_APCP_12 index 2358000a81..3cbc179064 100644 --- a/scripts/config/GridStatConfig_APCP_12 +++ b/scripts/config/GridStatConfig_APCP_12 @@ -217,8 +217,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "APCP_12"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "APCP_12"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/scripts/config/GridStatConfig_APCP_24 b/scripts/config/GridStatConfig_APCP_24 index 39eaa7d220..383efc78c5 100644 --- a/scripts/config/GridStatConfig_APCP_24 +++ b/scripts/config/GridStatConfig_APCP_24 @@ -227,8 +227,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "APCP_24"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "APCP_24"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/scripts/config/GridStatConfig_POP_12 b/scripts/config/GridStatConfig_POP_12 index 6fb4775939..974a3a79b7 100644 --- a/scripts/config/GridStatConfig_POP_12 +++ b/scripts/config/GridStatConfig_POP_12 @@ -226,8 +226,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = "POP_12"; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = "POP_12"; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/scripts/config/GridStatConfig_all b/scripts/config/GridStatConfig_all index a165ef836d..f39e7e90cf 100644 --- a/scripts/config/GridStatConfig_all +++ b/scripts/config/GridStatConfig_all @@ -257,8 +257,9 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// grid_weight_flag = NONE; -tmp_dir = "/tmp"; -output_prefix = ""; -version = "V12.0.0"; + +tmp_dir = "/tmp"; +output_prefix = ""; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/scripts/config/PointStatConfig b/scripts/config/PointStatConfig index 3c79f15262..1f4140de1e 100644 --- a/scripts/config/PointStatConfig +++ b/scripts/config/PointStatConfig @@ -216,8 +216,11 @@ seeps_p1_thresh = NA; //////////////////////////////////////////////////////////////////////////////// rank_corr_flag = TRUE; -tmp_dir = "/tmp"; -output_prefix = ""; -version = "V12.0.0"; + +point_weight_flag = NONE; + +tmp_dir = "/tmp"; +output_prefix = ""; +version = "V12.0.0"; //////////////////////////////////////////////////////////////////////////////// diff --git a/scripts/python/examples/read_ascii_numpy.py b/scripts/python/examples/read_ascii_numpy.py index 342121f2ff..061e1aa250 100644 --- a/scripts/python/examples/read_ascii_numpy.py +++ b/scripts/python/examples/read_ascii_numpy.py @@ -85,7 +85,6 @@ def set_dataplane_attrs(): user_fill_value = float(sys.argv[3]) except: log(f"{SCRIPT_NAME} Ignored argument {sys.argv[3]}") - pass log(f"{SCRIPT_NAME} Input File:\t{repr(input_file)}") log(f"{SCRIPT_NAME} Data Name:\t{repr(data_name)}") diff --git a/scripts/python/met/dataplane.py b/scripts/python/met/dataplane.py index a28661b365..4d94c0e712 100644 --- a/scripts/python/met/dataplane.py +++ b/scripts/python/met/dataplane.py @@ -25,6 +25,9 @@ def call_python(argv): sys.exit(1) met_base.log_message(f"User python command:\t{repr(' '.join(argv[1:]))}") + if not argv[1] or not argv[1].strip(): + met_base.quit_msg(f"User python command is empty") + sys.exit(1) # argv[1] contains the user defined python script pyembed_module_name = argv[1] @@ -178,7 +181,11 @@ def validate_met_data(met_data, fill_value=None): met_base.quit(f"{method_name} The met_data is None") sys.exit(1) - nx, ny = met_data.shape + if hasattr(met_data, 'shape'): + nx, ny = met_data.shape + else: + met_base.quit(f"{method_name} The met_data does not have the shape property") + sys.exit(1) met_fill_value = met_base.MET_FILL_VALUE if dataplane.is_xarray_dataarray(met_data): diff --git a/scripts/python/met/logger.py b/scripts/python/met/logger.py index a85de36d1f..1e7b30a798 100644 --- a/scripts/python/met/logger.py +++ b/scripts/python/met/logger.py @@ -25,10 +25,6 @@ def error_message(msg): for a_msg in msgs: logger.log_message(logger.append_error_prompt(a_msg)) - #@staticmethod - #def get_met_fill_value(): - # return logger.MET_FILL_VALUE - @staticmethod def info_message(msg): print(f'{logger.PROMPT} {logger.INFO_P} {msg}') @@ -78,8 +74,8 @@ def log_msg(self, msg): @staticmethod def get_numpy_filename(tmp_filename): - return logger.replace_extension(tmp_filename, "json", "npy") if tmp_filename.endswith(".json") else \ - logger.replace_extension(tmp_filename, "nc", "npy") if tmp_filename.endswith(".nc") else f'{tmp_filename}.npy' + file_ext = os.path.splitext(tmp_filename)[1] + return logger.replace_extension(tmp_filename, file_ext, ".npy") if file_ext else f'{tmp_filename}.npy' def is_debug_enabled(self, component_name=""): return met_base_tools.is_debug_enabled(component_name) @@ -99,22 +95,27 @@ class met_base_tools(object): ENV_MET_PYTHON_DEBUG = "MET_PYTHON_DEBUG" ENV_MET_PYTHON_TMP_FORMAT = "MET_PYTHON_TMP_FORMAT" + @staticmethod + def convert_byte_type_to_array(ndarray_data): + array_data = [] + if isinstance(ndarray_data[0], (np.ma.MaskedArray, np.ma.core.MaskedArray)): + for byte_data in ndarray_data: + array_data.append(byte_data.tobytes(fill_value=' ').decode('utf-8').rstrip()) + else: + for byte_data in ndarray_data: + array_data.append(byte_data.decode("utf-8").rstrip()) + return array_data + @staticmethod def convert_to_array(ndarray_data): is_byte_type = False if 0 < len(ndarray_data): is_byte_type = isinstance(ndarray_data[0], (bytes, np.bytes_)) - if isinstance(ndarray_data[0], np.ndarray): - if 0 < len(ndarray_data[0]): - is_byte_type = isinstance(ndarray_data[0][0], (bytes, np.bytes_)) + if not is_byte_type and isinstance(ndarray_data[0], np.ndarray) \ + and 0 < len(ndarray_data[0]): + is_byte_type = isinstance(ndarray_data[0][0], (bytes, np.bytes_)) if is_byte_type: - array_data = [] - if isinstance(ndarray_data[0], (np.ma.MaskedArray, np.ma.core.MaskedArray)): - for byte_data in ndarray_data: - array_data.append(byte_data.tobytes(fill_value=' ').decode('utf-8').rstrip()) - else: - for byte_data in ndarray_data: - array_data.append(byte_data.decode("utf-8").rstrip()) + array_data = met_base_tools.convert_byte_type_to_array(ndarray_data) elif isinstance(ndarray_data, (np.ma.MaskedArray, np.ma.core.MaskedArray)): array_data = ndarray_data.filled(fill_value=-9999).tolist() elif isinstance(ndarray_data, np.ndarray): diff --git a/scripts/python/met/mprbase.py b/scripts/python/met/mprbase.py index 0615171313..40cc36f7fb 100644 --- a/scripts/python/met/mprbase.py +++ b/scripts/python/met/mprbase.py @@ -6,6 +6,7 @@ class mpr_data(): # Read a text file with N columns and returns the list of N column data # Skip first "col_start" columns if col_start is not 0. + @staticmethod def read_mpr(input_file, col_last, col_start = 0, header=None, delim_whitespace=True, keep_default_na=False, skiprows=1, dtype='string'): diff --git a/scripts/python/met/point.py b/scripts/python/met/point.py index 05e3054ba3..46576c8e59 100644 --- a/scripts/python/met/point.py +++ b/scripts/python/met/point.py @@ -181,9 +181,6 @@ def check_point_data(self): if self.use_var_id: self.check_data_member_string(self.obs_var_table,'obs_var_table') - #def convert_to_numpy(self, value_list): - # return met_point_tools.convert_to_ndarray(value_list) - def dump(self): met_point_tools.print_point_data(self.get_point_data()) @@ -346,7 +343,7 @@ def write_point_data(self, tmp_filename): nc_point_obs.write_nc_file(tmp_filename, self) if met_base_tools.is_debug_enabled("point"): - met_base.log_message(f"Save to a temporary NetCDF file (point)") + met_base.log_message("Save to a temporary NetCDF file (point)") else: self.write_point_data_json_numpy(tmp_filename) @@ -417,8 +414,8 @@ def __init__(self, point_data): def check_csv_record(self, csv_point_data, index): method_name = f"{self.__class__.__name__}.check_csv_record()" error_msgs = [] - # names=['typ', 'sid', 'vld', 'lat', 'lon', 'elv', 'var', 'lvl', 'hgt', 'qc', 'obs'] - # dtype={'typ':'str', 'sid':'str', 'vld':'str', 'var':'str', 'qc':'str'} + # names: ['typ', 'sid', 'vld', 'lat', 'lon', 'elv', 'var', 'lvl', 'hgt', 'qc', 'obs'] + # dtype: {'typ':'str', 'sid':'str', 'vld':'str', 'var':'str', 'qc':'str'} if 11 > len(csv_point_data): error_msgs.append(f"{method_name} {index}-th data: missing columns. should be 11 columns, not {len(csv_point_data)} columns") elif 11 < len(csv_point_data): @@ -488,7 +485,7 @@ def convert_point_data(self): self.use_var_id = not self.is_grib_code() index = 0 - #names=['typ', 'sid', 'vld', 'lat', 'lon', 'elv', 'var', 'lvl', 'hgt', 'qc', 'obs'] + #name: ['typ', 'sid', 'vld', 'lat', 'lon', 'elv', 'var', 'lvl', 'hgt', 'qc', 'obs'] for csv_point_record in self.point_data: # Build header map. hdr_typ_str = csv_point_record[0] @@ -539,7 +536,7 @@ def convert_point_data(self): obs_qty_map[qc_str] = qc_id qc_cnt += 1 - # names=['typ', 'sid', 'vld', 'lat', 'lon', 'elv', 'var', 'lvl', 'hgt', 'qc', 'obs'] + # names: ['typ', 'sid', 'vld', 'lat', 'lon', 'elv', 'var', 'lvl', 'hgt', 'qc', 'obs'] self.obs_vid[index] = var_id self.obs_hid[index] = hdr_idx self.obs_lvl[index] = self.get_num_value(csv_point_record[7]) @@ -627,21 +624,21 @@ def read_data(self, args): # - set self.input_name # # Here is a template - ''' - if isinstance(args, dict): - in_filename = args.get('in_name',None) - elif isinstance(args, list): - in_filename = args[0] - else: - in_filename = args - self.input_name = in_filename - ''' + # + # if isinstance(args, dict): + # in_filename = args.get('in_name',None) + # elif isinstance(args, list): + # in_filename = args[0] + # else: + # in_filename = args + # self.input_name = in_filename pass class dummy_point_obs(met_point_obs): def read_data(self, args): + # Do nothing to return an empty point_obs pass @@ -689,7 +686,7 @@ def print_data(key, data_array, show_count=COUNT_SHOW): @staticmethod def print_point_data(met_point_data, print_subset=True): - method_name = f"met_point_tools.print_point_data()" + method_name = "met_point_tools.print_point_data()" print(' === MET point data by python embedding ===') if print_subset: met_point_tools.print_data('nhdr',met_point_data['nhdr']) @@ -714,26 +711,26 @@ def print_point_data(met_point_data, print_subset=True): met_point_tools.print_data('obs_val',met_point_data['obs_val']) else: print(f'{method_name} All',met_point_data) - print(f" nhdr: met_point_data['nhdr']") - print(f" nobs: met_point_data['nobs']") - print(f" use_var_id: met_point_data['use_var_id']") - print(f" hdr_typ: met_point_data['hdr_typ']") - print(f"hdr_typ_table: met_point_data['hdr_typ_table']") - print(f" hdr_sid: met_point_data['hdr_sid']") - print(f"hdr_sid_table: met_point_data['hdr_sid_table']") - print(f" hdr_vld: met_point_data['hdr_vld']") - print(f"hdr_vld_table: met_point_data['hdr_vld_table']") - print(f" hdr_lat: met_point_data['hdr_lat']") - print(f" hdr_lon: met_point_data['hdr_lon']") - print(f" hdr_elv: met_point_data['hdr_elv']") - print(f" obs_hid: met_point_data['obs_hid']") - print(f" obs_vid: met_point_data['obs_vid']") - print(f"obs_var_table: met_point_data['obs_var_table']") - print(f" obs_qty: met_point_data['obs_qty']") - print(f"obs_qty_table: met_point_data['obs_qty_table']") - print(f" obs_lvl: met_point_data['obs_lvl']") - print(f" obs_hgt: met_point_data['obs_hgt']") - print(f" obs_val: met_point_data['obs_val']") + print(" nhdr: met_point_data['nhdr']") + print(" nobs: met_point_data['nobs']") + print(" use_var_id: met_point_data['use_var_id']") + print(" hdr_typ: met_point_data['hdr_typ']") + print("hdr_typ_table: met_point_data['hdr_typ_table']") + print(" hdr_sid: met_point_data['hdr_sid']") + print("hdr_sid_table: met_point_data['hdr_sid_table']") + print(" hdr_vld: met_point_data['hdr_vld']") + print("hdr_vld_table: met_point_data['hdr_vld_table']") + print(" hdr_lat: met_point_data['hdr_lat']") + print(" hdr_lon: met_point_data['hdr_lon']") + print(" hdr_elv: met_point_data['hdr_elv']") + print(" obs_hid: met_point_data['obs_hid']") + print(" obs_vid: met_point_data['obs_vid']") + print("obs_var_table: met_point_data['obs_var_table']") + print(" obs_qty: met_point_data['obs_qty']") + print("obs_qty_table: met_point_data['obs_qty_table']") + print(" obs_lvl: met_point_data['obs_lvl']") + print(" obs_hgt: met_point_data['obs_hgt']") + print(" obs_val: met_point_data['obs_val']") print(' === MET point data by python embedding ===') diff --git a/src/basic/vx_config/config_constants.h b/src/basic/vx_config/config_constants.h index 7bba9e759e..9f1366a681 100644 --- a/src/basic/vx_config/config_constants.h +++ b/src/basic/vx_config/config_constants.h @@ -462,6 +462,17 @@ enum class GridWeightType { //////////////////////////////////////////////////////////////////////// +// +// Enumeration for point_weight_flag configuration parameter +// + +enum class PointWeightType { + None, // Apply no point weighting + SID // Apply station ID weighting +}; + +//////////////////////////////////////////////////////////////////////// + // // Enumeration for grid_decomp_flag configuration parameter // @@ -538,6 +549,7 @@ static const char conf_key_model[] = "model"; static const char conf_key_desc[] = "desc"; static const char conf_key_obtype[] = "obtype"; static const char conf_key_output_flag[] = "output_flag"; +static const char conf_key_obtype_as_group_val_flag[] = "obtype_as_group_val_flag"; static const char conf_key_obs_window[] = "obs_window"; static const char conf_key_beg[] = "beg"; static const char conf_key_end[] = "end"; @@ -753,6 +765,7 @@ static const char conf_key_topo_mask[] = "topo_mask"; static const char conf_key_topo_mask_flag[] = "topo_mask.flag"; static const char conf_key_use_obs_thresh[] = "use_obs_thresh"; static const char conf_key_interp_fcst_thresh[] = "interp_fcst_thresh"; +static const char conf_key_point_weight_flag[] = "point_weight_flag"; // // Grid-Stat specific parameter key names @@ -1300,6 +1313,9 @@ static const char conf_val_bca[] = "BCA"; static const char conf_val_cos_lat[] = "COS_LAT"; static const char conf_val_area[] = "AREA"; +// Point weight flag values +static const char conf_val_sid[] = "SID"; + // Duplicate flag values static const char conf_val_unique[] = "UNIQUE"; diff --git a/src/basic/vx_config/config_util.cc b/src/basic/vx_config/config_util.cc index 5cce67dfcb..a4323a23b1 100644 --- a/src/basic/vx_config/config_util.cc +++ b/src/basic/vx_config/config_util.cc @@ -600,16 +600,14 @@ StringArray parse_conf_message_type(Dictionary *dict, bool error_out) { /////////////////////////////////////////////////////////////////////////////// StringArray parse_conf_sid_list(Dictionary *dict, const char *conf_key) { - StringArray sa, cur, sid_sa; - ConcatString mask_name; + StringArray sid_sa; const char *method_name = "parse_conf_sid_list() -> "; - sa = parse_conf_string_array(dict, conf_key, method_name); + StringArray sa(parse_conf_string_array(dict, conf_key, method_name)); - // Parse station ID's to exclude from each entry + // Append to the list of station ID's for(int i=0; i " + mlog << Debug(4) << method_name << "parsing station ID masking file \"" << tmp_file << "\"\n"; // Open the mask station id file specified + ifstream in; in.open(tmp_file.c_str()); if(!in) { - mlog << Error << "\nparse_sid_mask() -> " + mlog << Error << "\n" << method_name << "Can't open the station ID masking file \"" << tmp_file << "\".\n\n"; exit(1); @@ -665,7 +659,7 @@ void parse_sid_mask(const ConcatString &mask_sid_str, // Store the first entry as the name of the mask in >> sid_str; - mask_name = sid_str; + mask_sid.set_name(sid_str); // Store the rest of the entries as masking station ID's while(in >> sid_str) mask_sid.add(sid_str.c_str()); @@ -673,9 +667,9 @@ void parse_sid_mask(const ConcatString &mask_sid_str, // Close the input file in.close(); - mlog << Debug(4) << "parse_sid_mask() -> " + mlog << Debug(4) << method_name << "parsed " << mask_sid.n() << " station ID's for the \"" - << mask_name << "\" mask from file \"" << tmp_file << "\"\n"; + << mask_sid.name() << "\" mask from file \"" << tmp_file << "\"\n"; } // Process list of strings else { @@ -683,19 +677,19 @@ void parse_sid_mask(const ConcatString &mask_sid_str, // Print a warning if the string contains a dot which suggests // the user was trying to specify a file name. if(check_reg_exp("[.]", mask_sid_str.c_str())) { - mlog << Warning << "\nparse_sid_mask() -> " + mlog << Warning << "\n" << method_name << "unable to process \"" << mask_sid_str << "\" as a file name and processing it as a single " << "station ID mask instead.\n\n"; } - mlog << Debug(4) << "parse_sid_mask() -> " + mlog << Debug(4) << method_name << "storing single station ID mask \"" << mask_sid_str << "\"\n"; // Check for embedded whitespace or slashes if(check_reg_exp(ws_reg_exp, mask_sid_str.c_str()) || check_reg_exp("[/]", mask_sid_str.c_str())) { - mlog << Error << "\nparse_sid_mask() -> " + mlog << Error << "\n" << method_name << "masking station ID string can't contain whitespace or " << "slashes \"" << mask_sid_str << "\".\n\n"; exit(1); @@ -708,15 +702,16 @@ void parse_sid_mask(const ConcatString &mask_sid_str, // One elements means no colon was specified if(sa.n() == 1) { mask_sid.add_css(sa[0]); - mask_name = ( mask_sid.n() == 1 ? mask_sid[0] : "MASK_SID" ); + mask_sid.set_name((mask_sid.n() == 1 ? + mask_sid.sid_map().begin()->first : "MASK_SID")); } // Two elements means one colon was specified else if(sa.n() == 2) { - mask_name = sa[0]; mask_sid.add_css(sa[1]); + mask_sid.set_name(sa[0]); } else { - mlog << Error << "\nparse_sid_mask() -> " + mlog << Error << "\n" << method_name << "masking station ID string may contain at most one colon to " << "specify the mask name \"" << mask_sid_str << "\".\n\n"; exit(1); @@ -724,14 +719,26 @@ void parse_sid_mask(const ConcatString &mask_sid_str, } - // Sort the mask_sid's - mask_sid.sort(); - - return; + return mask_sid; } /////////////////////////////////////////////////////////////////////////////// +StringArray parse_sid_mask_as_list(const ConcatString &mask_sid_str) { + + MaskSID ms = parse_sid_mask(mask_sid_str); + + StringArray sa; + for(const auto &pair : ms.sid_map()) sa.add(pair.first); + + return sa; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Code for MaskLatLon struct +// +/////////////////////////////////////////////////////////////////////////////// void MaskLatLon::clear() { name.clear(); @@ -764,7 +771,6 @@ MaskLatLon &MaskLatLon::operator=(const MaskLatLon &a) noexcept { return *this; } - /////////////////////////////////////////////////////////////////////////////// vector parse_conf_llpnt_mask(Dictionary *dict) { @@ -2189,9 +2195,10 @@ HiRAInfo parse_conf_hira(Dictionary *dict) { GridWeightType parse_conf_grid_weight_flag(Dictionary *dict) { GridWeightType t = GridWeightType::None; int v; + const char *method_name = "parse_conf_grid_weight_flag() -> "; if(!dict) { - mlog << Error << "\nparse_conf_grid_weight_flag() -> " + mlog << Error << "\n" << method_name << "empty dictionary!\n\n"; exit(1); } @@ -2204,7 +2211,7 @@ GridWeightType parse_conf_grid_weight_flag(Dictionary *dict) { else if(v == conf_const.lookup_int(conf_val_cos_lat)) t = GridWeightType::Cos_Lat; else if(v == conf_const.lookup_int(conf_val_area)) t = GridWeightType::Area; else { - mlog << Error << "\nparse_conf_grid_weight_flag() -> " + mlog << Error << "\n" << method_name << "Unexpected config file value of " << v << " for \"" << conf_key_grid_weight_flag << "\".\n\n"; exit(1); @@ -2215,6 +2222,35 @@ GridWeightType parse_conf_grid_weight_flag(Dictionary *dict) { /////////////////////////////////////////////////////////////////////////////// +PointWeightType parse_conf_point_weight_flag(Dictionary *dict) { + PointWeightType t = PointWeightType::None; + int v; + const char *method_name = "parse_conf_point_weight_flag() -> "; + + if(!dict) { + mlog << Error << "\n" << method_name + << "empty dictionary!\n\n"; + exit(1); + } + + // Get the integer flag value for the current entry + v = dict->lookup_int(conf_key_point_weight_flag); + + // Convert integer to enumerated GridWeightType + if(v == conf_const.lookup_int(conf_val_none)) t = PointWeightType::None; + else if(v == conf_const.lookup_int(conf_val_sid)) t = PointWeightType::SID; + else { + mlog << Error << "\n" << method_name + << "Unexpected config file value of " << v << " for \"" + << conf_key_point_weight_flag << "\".\n\n"; + exit(1); + } + + return t; +} + +/////////////////////////////////////////////////////////////////////////////// + DuplicateType parse_conf_duplicate_flag(Dictionary *dict) { DuplicateType t = DuplicateType::None; int v; diff --git a/src/basic/vx_config/config_util.h b/src/basic/vx_config/config_util.h index 15de1e00f0..885fa6fb2e 100644 --- a/src/basic/vx_config/config_util.h +++ b/src/basic/vx_config/config_util.h @@ -55,10 +55,8 @@ extern StringArray parse_conf_message_type( extern StringArray parse_conf_sid_list( Dictionary *dict, const char *); -extern void parse_sid_mask( - const ConcatString &, - StringArray &, - ConcatString &); +extern MaskSID parse_sid_mask(const ConcatString &); +extern StringArray parse_sid_mask_as_list(const ConcatString &); extern std::vector parse_conf_llpnt_mask(Dictionary *dict); extern StringArray parse_conf_obs_qty_inc(Dictionary *dict); @@ -105,6 +103,7 @@ extern InterpInfo parse_conf_interp(Dictionary *dict, const char *); extern NbrhdInfo parse_conf_nbrhd(Dictionary *dict, const char *); extern HiRAInfo parse_conf_hira(Dictionary *dict); extern GridWeightType parse_conf_grid_weight_flag(Dictionary *dict); +extern PointWeightType parse_conf_point_weight_flag(Dictionary *dict); extern DuplicateType parse_conf_duplicate_flag(Dictionary *dict); extern ObsSummary parse_conf_obs_summary(Dictionary *dict); extern ConcatString parse_conf_tmp_dir(Dictionary *dict); diff --git a/src/basic/vx_math/hist.cc b/src/basic/vx_math/hist.cc index d0bcd924e1..c5d2c89133 100644 --- a/src/basic/vx_math/hist.cc +++ b/src/basic/vx_math/hist.cc @@ -51,7 +51,7 @@ Histogram::~Histogram() { -if ( Count ) { delete [] Count; Count = (int *) nullptr; } +Count.clear(); } @@ -93,7 +93,7 @@ void Histogram::init_from_scratch() { -Count = (int *) nullptr; +Count.clear(); Nbins = 0; @@ -120,9 +120,7 @@ void Histogram::clear() { -int j; - -for (j=0; j #include @@ -28,7 +29,7 @@ class Histogram { private: - int * Count; + std::vector Count; int Nbins; diff --git a/src/basic/vx_math/legendre.cc b/src/basic/vx_math/legendre.cc index 6a7b78e269..f04741135f 100644 --- a/src/basic/vx_math/legendre.cc +++ b/src/basic/vx_math/legendre.cc @@ -117,9 +117,9 @@ void Legendre::init_from_scratch() { -P = 0; +P.clear(); -PP = 0; +PP.clear(); clear(); @@ -135,9 +135,9 @@ void Legendre::clear() { -if ( P ) { delete [] P; P = nullptr; } +P.clear(); -if ( PP ) { delete [] PP; PP = nullptr; } +PP.clear(); X = 0.0; @@ -201,9 +201,9 @@ clear(); MaxDegree = N; -P = new double [N + 1]; +P.resize(N + 1); -PP = new double [N + 1]; +PP.resize(N + 1); calc(0.0); diff --git a/src/basic/vx_math/legendre.h b/src/basic/vx_math/legendre.h index 4d0265801f..b9af82db02 100644 --- a/src/basic/vx_math/legendre.h +++ b/src/basic/vx_math/legendre.h @@ -19,6 +19,10 @@ #define __VX_LEGENDRE_H__ +//////////////////////////////////////////////////////////////////////// + +#include + //////////////////////////////////////////////////////////////////////// @@ -37,9 +41,9 @@ class Legendre { double X; // last x value - double * P; // allocated + std::vector P; // allocated - double * PP; // allocated + std::vector PP; // allocated public: diff --git a/src/basic/vx_math/ptile.cc b/src/basic/vx_math/ptile.cc index e3253631f6..3618ae9ad4 100644 --- a/src/basic/vx_math/ptile.cc +++ b/src/basic/vx_math/ptile.cc @@ -215,11 +215,10 @@ if ( n <= 1 ) return 0; int i, j, ties_current, ties_total, tie_rank_start = 0, tie_rank_end; double tie_rank_mean; RankInfo *rank_info = (RankInfo *) nullptr; -double *ordered_array = (double *) nullptr; +vector ordered_array(n); double prev_v, v; rank_info = new RankInfo [n]; -ordered_array = new double [n]; // Each RankInfo structure contains a index value from 0 to n-1 and a pointer // to the data to be ranked @@ -296,7 +295,6 @@ if(ties_current != 0) { } if(rank_info) { delete [] rank_info; rank_info = (RankInfo *) nullptr; } -if(ordered_array) { delete [] ordered_array; ordered_array = (double *) nullptr; } return ties_total; diff --git a/src/basic/vx_util/Makefile.am b/src/basic/vx_util/Makefile.am index b0daa451e9..db0896bbd6 100644 --- a/src/basic/vx_util/Makefile.am +++ b/src/basic/vx_util/Makefile.am @@ -61,6 +61,7 @@ libvx_util_a_SOURCES = ascii_table.cc ascii_table.h \ empty_string.h \ polyline.h polyline.cc \ mask_poly.h mask_poly.cc \ + mask_sid.h mask_sid.cc \ read_fortran_binary.h read_fortran_binary.cc \ met_buffer.h met_buffer.cc \ smart_buffer.h smart_buffer.cc \ diff --git a/src/basic/vx_util/Makefile.in b/src/basic/vx_util/Makefile.in index 4c05def519..2a7015be79 100644 --- a/src/basic/vx_util/Makefile.in +++ b/src/basic/vx_util/Makefile.in @@ -129,13 +129,14 @@ am__libvx_util_a_SOURCES_DIST = ascii_table.cc ascii_table.h \ interp_util.h two_to_one.cc two_to_one.h get_filenames.cc \ get_filenames.h util_constants.h bool_to_string.h \ empty_string.h polyline.h polyline.cc mask_poly.h mask_poly.cc \ - read_fortran_binary.h read_fortran_binary.cc met_buffer.h \ - met_buffer.cc smart_buffer.h smart_buffer.cc vx_util.h \ - CircularTemplate.h CircularTemplate.cc GridTemplate.h \ - GridTemplate.cc GridPoint.h GridPoint.cc GridOffset.h \ - GridOffset.cc observation.h observation.cc stat_column_defs.h \ - handle_openmp.h handle_openmp.cc RectangularTemplate.h \ - RectangularTemplate.cc python_line.h python_line.cc + mask_sid.h mask_sid.cc read_fortran_binary.h \ + read_fortran_binary.cc met_buffer.h met_buffer.cc \ + smart_buffer.h smart_buffer.cc vx_util.h CircularTemplate.h \ + CircularTemplate.cc GridTemplate.h GridTemplate.cc GridPoint.h \ + GridPoint.cc GridOffset.h GridOffset.cc observation.h \ + observation.cc stat_column_defs.h handle_openmp.h \ + handle_openmp.cc RectangularTemplate.h RectangularTemplate.cc \ + python_line.h python_line.cc @ENABLE_PYTHON_TRUE@am__objects_1 = \ @ENABLE_PYTHON_TRUE@ libvx_util_a-python_line.$(OBJEXT) am__objects_2 = $(am__objects_1) @@ -172,6 +173,7 @@ am_libvx_util_a_OBJECTS = libvx_util_a-ascii_table.$(OBJEXT) \ libvx_util_a-get_filenames.$(OBJEXT) \ libvx_util_a-polyline.$(OBJEXT) \ libvx_util_a-mask_poly.$(OBJEXT) \ + libvx_util_a-mask_sid.$(OBJEXT) \ libvx_util_a-read_fortran_binary.$(OBJEXT) \ libvx_util_a-met_buffer.$(OBJEXT) \ libvx_util_a-smart_buffer.$(OBJEXT) \ @@ -230,6 +232,7 @@ am__depfiles_remade = ./$(DEPDIR)/libvx_util_a-CircularTemplate.Po \ ./$(DEPDIR)/libvx_util_a-main.Po \ ./$(DEPDIR)/libvx_util_a-make_path.Po \ ./$(DEPDIR)/libvx_util_a-mask_poly.Po \ + ./$(DEPDIR)/libvx_util_a-mask_sid.Po \ ./$(DEPDIR)/libvx_util_a-memory.Po \ ./$(DEPDIR)/libvx_util_a-met_buffer.Po \ ./$(DEPDIR)/libvx_util_a-normalize.Po \ @@ -508,6 +511,7 @@ libvx_util_a_SOURCES = ascii_table.cc ascii_table.h \ empty_string.h \ polyline.h polyline.cc \ mask_poly.h mask_poly.cc \ + mask_sid.h mask_sid.cc \ read_fortran_binary.h read_fortran_binary.cc \ met_buffer.h met_buffer.cc \ smart_buffer.h smart_buffer.cc \ @@ -602,6 +606,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvx_util_a-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvx_util_a-make_path.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvx_util_a-mask_poly.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvx_util_a-mask_sid.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvx_util_a-memory.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvx_util_a-met_buffer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvx_util_a-normalize.Po@am__quote@ # am--include-marker @@ -1128,6 +1133,20 @@ libvx_util_a-mask_poly.obj: mask_poly.cc @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvx_util_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvx_util_a-mask_poly.obj `if test -f 'mask_poly.cc'; then $(CYGPATH_W) 'mask_poly.cc'; else $(CYGPATH_W) '$(srcdir)/mask_poly.cc'; fi` +libvx_util_a-mask_sid.o: mask_sid.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvx_util_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvx_util_a-mask_sid.o -MD -MP -MF $(DEPDIR)/libvx_util_a-mask_sid.Tpo -c -o libvx_util_a-mask_sid.o `test -f 'mask_sid.cc' || echo '$(srcdir)/'`mask_sid.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvx_util_a-mask_sid.Tpo $(DEPDIR)/libvx_util_a-mask_sid.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mask_sid.cc' object='libvx_util_a-mask_sid.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvx_util_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvx_util_a-mask_sid.o `test -f 'mask_sid.cc' || echo '$(srcdir)/'`mask_sid.cc + +libvx_util_a-mask_sid.obj: mask_sid.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvx_util_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvx_util_a-mask_sid.obj -MD -MP -MF $(DEPDIR)/libvx_util_a-mask_sid.Tpo -c -o libvx_util_a-mask_sid.obj `if test -f 'mask_sid.cc'; then $(CYGPATH_W) 'mask_sid.cc'; else $(CYGPATH_W) '$(srcdir)/mask_sid.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvx_util_a-mask_sid.Tpo $(DEPDIR)/libvx_util_a-mask_sid.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mask_sid.cc' object='libvx_util_a-mask_sid.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvx_util_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libvx_util_a-mask_sid.obj `if test -f 'mask_sid.cc'; then $(CYGPATH_W) 'mask_sid.cc'; else $(CYGPATH_W) '$(srcdir)/mask_sid.cc'; fi` + libvx_util_a-read_fortran_binary.o: read_fortran_binary.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libvx_util_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libvx_util_a-read_fortran_binary.o -MD -MP -MF $(DEPDIR)/libvx_util_a-read_fortran_binary.Tpo -c -o libvx_util_a-read_fortran_binary.o `test -f 'read_fortran_binary.cc' || echo '$(srcdir)/'`read_fortran_binary.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libvx_util_a-read_fortran_binary.Tpo $(DEPDIR)/libvx_util_a-read_fortran_binary.Po @@ -1440,6 +1459,7 @@ distclean: distclean-am -rm -f ./$(DEPDIR)/libvx_util_a-main.Po -rm -f ./$(DEPDIR)/libvx_util_a-make_path.Po -rm -f ./$(DEPDIR)/libvx_util_a-mask_poly.Po + -rm -f ./$(DEPDIR)/libvx_util_a-mask_sid.Po -rm -f ./$(DEPDIR)/libvx_util_a-memory.Po -rm -f ./$(DEPDIR)/libvx_util_a-met_buffer.Po -rm -f ./$(DEPDIR)/libvx_util_a-normalize.Po @@ -1531,6 +1551,7 @@ maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libvx_util_a-main.Po -rm -f ./$(DEPDIR)/libvx_util_a-make_path.Po -rm -f ./$(DEPDIR)/libvx_util_a-mask_poly.Po + -rm -f ./$(DEPDIR)/libvx_util_a-mask_sid.Po -rm -f ./$(DEPDIR)/libvx_util_a-memory.Po -rm -f ./$(DEPDIR)/libvx_util_a-met_buffer.Po -rm -f ./$(DEPDIR)/libvx_util_a-normalize.Po diff --git a/src/basic/vx_util/mask_sid.cc b/src/basic/vx_util/mask_sid.cc new file mode 100644 index 0000000000..7c888bfda3 --- /dev/null +++ b/src/basic/vx_util/mask_sid.cc @@ -0,0 +1,161 @@ +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +// ** Copyright UCAR (c) 1992 - 2024 +// ** University Corporation for Atmospheric Research (UCAR) +// ** National Center for Atmospheric Research (NCAR) +// ** Research Applications Lab (RAL) +// ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* + +/////////////////////////////////////////////////////////////////////////////// + +#include "vx_util.h" + +#include "mask_sid.h" + +using namespace std; + +/////////////////////////////////////////////////////////////////////////////// +// +// Code for MaskSID struct +// +/////////////////////////////////////////////////////////////////////////////// + +MaskSID::MaskSID() { + init_from_scratch(); +} + +//////////////////////////////////////////////////////////////////////// + +MaskSID::~MaskSID() { + clear(); +} + +//////////////////////////////////////////////////////////////////////// + +MaskSID::MaskSID(const MaskSID &m) { + + init_from_scratch(); + + assign(m); +} + +//////////////////////////////////////////////////////////////////////// + +MaskSID & MaskSID::operator=(const MaskSID &m) noexcept { + + if(this == &m) return *this; + + assign(m); + + return *this; +} + +//////////////////////////////////////////////////////////////////////// + +void MaskSID::init_from_scratch() { + + clear(); + + return; +} + +//////////////////////////////////////////////////////////////////////// + +void MaskSID::clear() { + Name.clear(); + HasWeights = false; + SIDMap.clear(); +} + +//////////////////////////////////////////////////////////////////////// + +void MaskSID::assign(const MaskSID & m) { + Name = m.Name; + HasWeights = m.HasWeights; + SIDMap = m.SIDMap; + + return; +} + +/////////////////////////////////////////////////////////////////////////////// + +bool MaskSID::operator==(const MaskSID &m) const { + bool match = true; + + if(!(Name == m.Name ) || + !(SIDMap == m.SIDMap)) { + match = false; + } + + return match; +} + +/////////////////////////////////////////////////////////////////////////////// + +const std::map & MaskSID::sid_map() const { + return SIDMap; +} + +/////////////////////////////////////////////////////////////////////////////// + +void MaskSID::set_name(const string &s) { + Name = s; + + return; +} + +/////////////////////////////////////////////////////////////////////////////// + +void MaskSID::add(const string &text) { + ConcatString sid(text); + + // Default weight value of 1.0 + double weight = 1.0; + + // Check for optional weight + StringArray sa(sid.split("(")); + if(sa.n() > 1) { + sid = sa[0]; + weight = stod(sa[1]); + HasWeights = true; + } + + // Add station ID map entry + if(SIDMap.count(sid) == 0) SIDMap[sid] = weight; + + return; +} + +/////////////////////////////////////////////////////////////////////////////// + +void MaskSID::add_css(const string &text) { + StringArray sa; + sa.add_css(text); + for(int i=0; i 0; +} + +/////////////////////////////////////////////////////////////////////////////// + +bool MaskSID::has_sid(const string &s, double &weight) const { + bool found = false; + + if(SIDMap.count(s) == 0) { + weight = bad_data_double; + } + else { + found = true; + weight = SIDMap.at(s); + } + + return found; +} + +/////////////////////////////////////////////////////////////////////////////// + diff --git a/src/basic/vx_util/mask_sid.h b/src/basic/vx_util/mask_sid.h new file mode 100644 index 0000000000..81b7071f37 --- /dev/null +++ b/src/basic/vx_util/mask_sid.h @@ -0,0 +1,71 @@ +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +// ** Copyright UCAR (c) 1992 - 2024 +// ** University Corporation for Atmospheric Research (UCAR) +// ** National Center for Atmospheric Research (NCAR) +// ** Research Applications Lab (RAL) +// ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA +// *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* +//////////////////////////////////////////////////////////////////////// + +#ifndef __MASK_SID_H__ +#define __MASK_SID_H__ + +#include "vx_util.h" + +//////////////////////////////////////////////////////////////////////// +// +// Class to store masking station id information +// +//////////////////////////////////////////////////////////////////////// + +class MaskSID { + + void init_from_scratch(); + + void assign(const MaskSID &); + + // Mask name + ConcatString Name; + + // Boolean for non-default weights + bool HasWeights; + + // Mapping of SID name to weight value + std::map SIDMap; + + public: + + MaskSID(); + ~MaskSID(); + MaskSID(const MaskSID &); + MaskSID & operator=(const MaskSID &) noexcept; + + void clear(); + bool operator==(const MaskSID &) const; + + int n() const; + std::string name() const; + bool has_weights() const; + const std::map & sid_map() const; + + void set_name(const std::string &); + + // Formatted as: station_name(numeric_weight) + void add(const std::string &); + void add_css(const std::string &); + bool has_sid(const std::string &) const ; + bool has_sid(const std::string &, double &) const; +}; + +//////////////////////////////////////////////////////////////////////// + +inline int MaskSID::n() const { return (int) SIDMap.size(); } +inline std::string MaskSID::name() const { return Name; } +inline bool MaskSID::has_weights() const { return HasWeights; } + +//////////////////////////////////////////////////////////////////////// + +#endif // __MASK_SID_H__ + +//////////////////////////////////////////////////////////////////////// + diff --git a/src/basic/vx_util/num_array.cc b/src/basic/vx_util/num_array.cc index cb5046c8a6..06452934f3 100644 --- a/src/basic/vx_util/num_array.cc +++ b/src/basic/vx_util/num_array.cc @@ -123,7 +123,7 @@ void NumArray::init_from_scratch() { clear(); - + return; } @@ -171,7 +171,7 @@ void NumArray::assign(const NumArray & a) clear(); e = a.e; - + Sorted = a.Sorted; return; @@ -209,7 +209,7 @@ void NumArray::dump(ostream & out, int depth) const int j; for (j=0; j data (n); + vector data_loc (n); + vector data_rank (n); + if ( data.size() < n || data_loc.size() < n || data_rank.size() < n) { + mlog << Error << "\nint NumArray::rank_array() -> " << "memory allocation error\n\n"; - + exit ( 1 ); - + } // @@ -679,20 +677,13 @@ int NumArray::rank_array(int &ties) // Compute the rank of the data and store the ranks in the data_rank array // Keep track of the number of ties in the ranks. // - ties = do_rank(data, data_rank, n_vld); + ties = do_rank(data.data(), data_rank.data(), n_vld); // // Store the data_rank values // for(i=0; i time_values(tim_buf_size); - if( get_nc_data(nc_time_var, time_values) ) { + if( get_nc_data(nc_time_var, time_values.data()) ) { bool no_leap_year = get_att_no_leap_year(valid_time_var); if( time_dim_count > 1 ) { double latest_time = bad_data_double; @@ -381,7 +381,6 @@ bool NcCfFile::open(const char * filepath) } } else ValidTime.add(0); //Initialize - delete [] time_values; } NcVar init_time_var = get_var(_ncFile, "forecast_reference_time"); @@ -504,14 +503,13 @@ bool NcCfFile::open(const char * filepath) if (IS_VALID_NC_P(z_var)) { int z_count = get_data_size(z_var); - auto z_values = new double[z_count]; + vector z_values(z_count); - if( get_nc_data(z_var, z_values) ) { + if( get_nc_data(z_var, z_values.data()) ) { for(int i=0; i d(plane_size); size_t dim_size; LongArray offsets; @@ -1125,7 +1123,7 @@ bool NcCfFile::getData(NcVar * v, const LongArray & a, DataPlane & plane) const offsets[y_slot] = 0; lengths[y_slot] = ny; - get_nc_data(v, d, lengths, offsets); + get_nc_data(v, d.data(), lengths, offsets); int offset = 0; if( x_slot > y_slot ) { @@ -1163,8 +1161,6 @@ bool NcCfFile::getData(NcVar * v, const LongArray & a, DataPlane & plane) const } /* for x */ } - delete [] d; - // done mlog << Debug(6) << method_name << "took " << get_exe_duration(start_clock) << " seconds\n"; diff --git a/src/libcode/vx_data2d_nc_met/get_met_grid.cc b/src/libcode/vx_data2d_nc_met/get_met_grid.cc index 90a6cd798b..0c428c6ab2 100644 --- a/src/libcode/vx_data2d_nc_met/get_met_grid.cc +++ b/src/libcode/vx_data2d_nc_met/get_met_grid.cc @@ -699,10 +699,9 @@ void get_semilatlon_var(NcFile *ncfile, const char * var_name, NumArray &out_na) // Store the requested data in the specified NumArray object long count = get_data_size(&nc_var); - double * data_values = new double[ count ]; - get_nc_data(&nc_var, data_values); + vector data_values(count); + get_nc_data(&nc_var, data_values.data()); for(int i=0; i data_array(cell_count); + vector double_array(cell_count); clock_time = clock(); - get_nc_data(v, double_array, dim, cur); - copy_nc_data_as_double(data_array, double_array, x_slot, y_slot, Nx, Ny, + get_nc_data(v, double_array.data(), dim, cur); + copy_nc_data_as_double(data_array.data(), double_array.data(), x_slot, y_slot, Nx, Ny, missing_value, fill_value); nc_time = clock(); if (mlog.verbosity_level() >= 7) { double duration_sec = (double)(nc_time - clock_time)/CLOCKS_PER_SEC; - check_nc_data_2d(data_array, Nx, Ny, missing_value); + check_nc_data_2d(data_array.data(), Nx, Ny, missing_value); mlog << Debug(7) << method_name_short << "took " << duration_sec << " seconds to read NetCDF data\n"; } - plane.set_block(data_array, Nx, Ny); + plane.set_block(data_array.data(), Nx, Ny); if (mlog.verbosity_level() >= 7) { double duration_sec = (double)(clock() - nc_time)/CLOCKS_PER_SEC; @@ -612,9 +612,6 @@ plane.set_size(Nx, Ny); << " seconds to fill data plane\n"; } - if (data_array) delete[] data_array; - if (double_array) delete[] double_array; - // // done // diff --git a/src/libcode/vx_data2d_nc_wrf/wrf_file.cc b/src/libcode/vx_data2d_nc_wrf/wrf_file.cc index 5279ca49f7..56820aea09 100644 --- a/src/libcode/vx_data2d_nc_wrf/wrf_file.cc +++ b/src/libcode/vx_data2d_nc_wrf/wrf_file.cc @@ -849,7 +849,7 @@ plane.set_size(Nx, Ny); // // get the data // -double d[Ny]; +vector d(Ny); LongArray offsets; LongArray lengths; @@ -863,7 +863,7 @@ lengths[y_slot] = Ny; int type_id = GET_NC_TYPE_ID_P(v); for (x=0; x time_values(tim_buf_size); if(2 == time_dim_count) { for(int i=0; i 1 ) { double latest_time = bad_data_double; @@ -396,7 +396,6 @@ bool UGridFile::open_metadata(const char * filepath) } } else ValidTime.add(0); //Initialize - delete [] time_values; } // Pull out the grid. This must be done after pulling out the dimension @@ -440,14 +439,13 @@ bool UGridFile::open_metadata(const char * filepath) if (IS_VALID_NC_P(z_var)) { int z_count = (int) get_data_size(z_var); - double *z_values = new double[z_count]; + vector z_values(z_count); - if( get_nc_data(z_var, z_values) ) { + if( get_nc_data(z_var, z_values.data()) ) { for(int i=0; i d(plane_size); int length; size_t dim_size; @@ -726,7 +724,7 @@ bool UGridFile::getData(NcVar * v, const LongArray & a, DataPlane & plane) const } } - get_nc_data(v, d, lengths, offsets); + get_nc_data(v, d.data(), lengths, offsets); double min_value = 10e10; double max_value = -min_value; @@ -744,8 +742,6 @@ bool UGridFile::getData(NcVar * v, const LongArray & a, DataPlane & plane) const } // for x - if (nullptr != d) delete [] d; - // done ConcatString log_message; for (int idx=0; idx _lat(face_count); + vector _lon(face_count); if (IS_INVALID_NC_P(_latVar)) { mlog << Error << "\n" << method_name << "latitude variable is missing\n\n"; exit(1); } - else if (!get_nc_data(_latVar,_lat)) { + else if (!get_nc_data(_latVar,_lat.data())) { mlog << Error << "\n" << method_name << "fail to read latitude values\n\n"; exit(1); } @@ -922,7 +918,7 @@ void UGridFile::read_netcdf_grid() mlog << Error << "\n" << method_name << "longitude variable is missing\n\n"; exit(1); } - else if (!get_nc_data(_lonVar,_lon)) { + else if (!get_nc_data(_lonVar,_lon.data())) { mlog << Error << "\n" << method_name << "fail to read latitude values\n\n"; exit(1); } @@ -943,7 +939,7 @@ void UGridFile::read_netcdf_grid() // Convert longitude from degrees east to west for (int idx=0; idx hdr_typ_idx_block(buf_size); + vector hdr_sid_idx_block(buf_size); + vector hdr_vld_idx_block(buf_size); + vector hdr_lat_block(buf_size); + vector hdr_lon_block(buf_size); + vector hdr_elv_block(buf_size); LongArray offsets; // = { 0, 0 }; LongArray lengths; // = { 1, 1 }; @@ -685,7 +685,7 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { else { // Get the corresponding header message type (index, not string) if(!get_nc_data(&hdr_typ_var, - hdr_typ_idx_block, lengths_1D, offsets_1D)) { + hdr_typ_idx_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_typ\n\n"; exit(1); @@ -693,7 +693,7 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { // Get the corresponding header station id (index, not string) if(!get_nc_data(&hdr_sid_var, - hdr_sid_idx_block, lengths_1D, offsets_1D)) { + hdr_sid_idx_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_sid\n\n"; exit(1); @@ -701,7 +701,7 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { // Get the corresponding header valid time (index, not string) if(!get_nc_data(&hdr_vld_var, - hdr_vld_idx_block, lengths_1D, offsets_1D)) { + hdr_vld_idx_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_vld\n\n"; exit(1); @@ -711,19 +711,19 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { // Get the header for this observation // if(!get_nc_data(&hdr_lat_var, - hdr_lat_block, lengths_1D, offsets_1D)) { + hdr_lat_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_lat\n\n"; exit(1); } if(!get_nc_data(&hdr_lon_var, - hdr_lon_block, lengths_1D, offsets_1D)) { + hdr_lon_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_lon\n\n"; exit(1); } if(!get_nc_data(&hdr_elv_var, - hdr_elv_block, lengths_1D, offsets_1D)) { + hdr_elv_block.data(), lengths_1D, offsets_1D)) { mlog << Error << "\n" << method_name << "trouble getting hdr_elv\n\n"; exit(1); @@ -739,13 +739,6 @@ void NetcdfObsVars::read_header_data(MetPointHeader &hdr_data) { } } - delete[] hdr_typ_idx_block; - delete[] hdr_sid_idx_block; - delete[] hdr_vld_idx_block; - delete[] hdr_lat_block; - delete[] hdr_lon_block; - delete[] hdr_elv_block; - if (!has_array_vars) { int tmp_dim_size; @@ -860,40 +853,40 @@ bool NetcdfObsVars::read_obs_data(int buf_size, int offset, } } else { - int *obs_hid_buf = new int[buf_size]; - int *obs_vid_buf = new int[buf_size]; - float *obs_lvl_buf = new float[buf_size]; - float *obs_hgt_buf = new float[buf_size]; - float *obs_val_buf = new float[buf_size]; + vector obs_hid_buf(buf_size); + vector obs_vid_buf(buf_size); + vector obs_lvl_buf(buf_size); + vector obs_hgt_buf(buf_size); + vector obs_val_buf(buf_size); lengths[1] = 1; - if(!get_nc_data(&obs_hid_var, obs_hid_buf, lengths, offsets)) { + if(!get_nc_data(&obs_hid_var, obs_hid_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record for observation " << "index " << offset << "\n\n"; result = false; } if(!get_nc_data((IS_INVALID_NC(obs_gc_var) ? &obs_vid_var : &obs_gc_var), - obs_vid_buf, lengths, offsets)) { + obs_vid_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record (vid or gc) for observation " << "index " << offset << "\n\n"; result = false; } - if(!get_nc_data(&obs_lvl_var, obs_lvl_buf, lengths, offsets)) { + if(!get_nc_data(&obs_lvl_var, obs_lvl_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record (lvl) for observation " << "index " << offset << "\n\n"; result = false; } - if(!get_nc_data(&obs_hgt_var, obs_hgt_buf, lengths, offsets)) { + if(!get_nc_data(&obs_hgt_var, obs_hgt_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record (hgt) for observation " << "index " << offset << "\n\n"; result = false; } - if(!get_nc_data(&obs_val_var, obs_val_buf, lengths, offsets)) { + if(!get_nc_data(&obs_val_var, obs_val_buf.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "can't read the record (val) for observation " << "index " << offset << "\n\n"; @@ -918,11 +911,6 @@ bool NetcdfObsVars::read_obs_data(int buf_size, int offset, } } - delete[] obs_hid_buf; - delete[] obs_vid_buf; - delete[] obs_lvl_buf; - delete[] obs_hgt_buf; - delete[] obs_val_buf; } return result; } @@ -955,9 +943,9 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { // Read PB report type int buf_size = ((pb_hdr_count > NC_BUFFER_SIZE_32K) ? NC_BUFFER_SIZE_32K : pb_hdr_count); - int *hdr_prpt_typ_block = new int[buf_size]; - int *hdr_irpt_typ_block = new int[buf_size]; - int *hdr_inst_typ_block = new int[buf_size]; + vector hdr_prpt_typ_block(buf_size); + vector hdr_irpt_typ_block(buf_size); + vector hdr_inst_typ_block(buf_size); for(int i_start=0; i_start NC_BUFFER_SIZE_32K) buf_size2 = NC_BUFFER_SIZE_32K; @@ -967,7 +955,7 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { if (has_hdr_prpt_typ_var) { // Get the corresponding header PB message type (string) if(!get_nc_data(&hdr_prpt_typ_var, - hdr_prpt_typ_block, lengths, offsets)) { + hdr_prpt_typ_block.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "trouble getting hdr_prpt_typ\n\n"; exit(1); @@ -977,7 +965,7 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { if (has_hdr_irpt_typ_var) { // Get the corresponding header In message type (string) if(!get_nc_data(&hdr_irpt_typ_var, - hdr_irpt_typ_block, lengths, offsets)) { + hdr_irpt_typ_block.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "trouble getting hdr_irpt_typ\n\n"; exit(1); @@ -987,7 +975,7 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { if (has_hdr_inst_typ_var) { // Get the corresponding header instrument type (string) if(!get_nc_data(&hdr_inst_typ_var, - hdr_inst_typ_block, lengths, offsets)) { + hdr_inst_typ_block.data(), lengths, offsets)) { mlog << Error << "\n" << method_name << "trouble getting hdr_inst_typ\n\n"; exit(1); @@ -1001,10 +989,6 @@ void NetcdfObsVars::read_pb_hdr_data(MetPointHeader &hdr_data) { } } - delete[] hdr_prpt_typ_block; - delete[] hdr_irpt_typ_block; - delete[] hdr_inst_typ_block; - } /////////////////////////////////////////////////////////////////////////////// diff --git a/src/libcode/vx_nc_util/nc_utils.cc b/src/libcode/vx_nc_util/nc_utils.cc index f773d5178b..36b71cd509 100644 --- a/src/libcode/vx_nc_util/nc_utils.cc +++ b/src/libcode/vx_nc_util/nc_utils.cc @@ -240,10 +240,9 @@ double get_att_value_double(const NcAtt *att) { void get_att_value_doubles(const NcAtt *att, NumArray &value) { value.erase(); - double *values = new double[att->getAttLength()]; - att->getValues(values); + vector values(att->getAttLength()); + att->getValues(values.data()); for(unsigned int i=0; i<=att->getAttLength(); i++) value.add(values[i]); - if(values) { delete [] values; values = 0; } return; } @@ -1397,8 +1396,8 @@ bool get_nc_data(NcVar *var, float *data) { switch ( type_id ) { case NcType::nc_DOUBLE: { - double *packed_data = new double[cell_count]; - if (get_nc_data_t(var, packed_data)) { + vector packed_data(cell_count); + if (get_nc_data_t(var, packed_data.data())) { double fill_value; bool has_fill_value = get_var_fill_value(var, fill_value); for (int idx=0; idx packed_data(cell_count, (long long)bad_data_int); - var->getVar(packed_data); - copy_nc_data_(var, data, packed_data, cell_count, + var->getVar(packed_data.data()); + copy_nc_data_(var, data, packed_data.data(), cell_count, "int64", add_offset, scale_factor); - delete [] packed_data; } break; case NcType::nc_INT: { - int *packed_data = new int[cell_count]; + vector packed_data(cell_count); - var->getVar(packed_data); - copy_nc_data_(var, data, packed_data, cell_count, + var->getVar(packed_data.data()); + copy_nc_data_(var, data, packed_data.data(), cell_count, "int", add_offset, scale_factor); - delete [] packed_data; } break; case NcType::nc_SHORT: { short missing_value; bool has_missing = get_var_fill_value(var, missing_value); - short *packed_data = new short[cell_count]; + vector packed_data(cell_count); - var->getVar(packed_data); + var->getVar(packed_data.data()); if (unsigned_value) { - unsigned short *ushort_data = new unsigned short[cell_count]; + vector ushort_data(cell_count); for (int idx=0; idx packed_data(cell_count); - var->getVar(packed_data); - copy_nc_data_(var, data, packed_data, cell_count, + var->getVar(packed_data.data()); + copy_nc_data_(var, data, packed_data.data(), cell_count, "unsigned short", add_offset, scale_factor); - delete [] packed_data; } break; case NcType::nc_BYTE: { ncbyte missing_value; bool has_missing = get_var_fill_value(var, missing_value); - ncbyte *packed_data = new ncbyte[cell_count]; + vector packed_data(cell_count); - var->getVar(packed_data); + var->getVar(packed_data.data()); if (unsigned_value) { - unsigned char *ubyte_data = new unsigned char[cell_count]; + vector ubyte_data(cell_count); for (int idx=0; idx packed_data(cell_count); - var->getVar(packed_data); - copy_nc_data_(var, data, packed_data, cell_count, + var->getVar(packed_data.data()); + copy_nc_data_(var, data, packed_data.data(), cell_count, "unsigned char", add_offset, scale_factor); - delete [] packed_data; } break; default: @@ -1601,9 +1590,9 @@ bool get_nc_data(NcVar *var, double *data) { switch ( type_id ) { case NcType::nc_FLOAT: { - float *packed_data = new float[cell_count]; + vector packed_data(cell_count); - var->getVar(packed_data); + var->getVar(packed_data.data()); float fill_value; bool has_fill_value = get_var_fill_value(var, fill_value); @@ -1612,96 +1601,87 @@ bool get_nc_data(NcVar *var, double *data) { data[idx] = bad_data_double; else data[idx] = (double)packed_data[idx]; } - delete [] packed_data; } break; case NcType::nc_INT64: { - long long *packed_data = new long long[cell_count]; + vector packed_data(cell_count); - var->getVar(packed_data); - copy_nc_data_(var, data, packed_data, cell_count, + var->getVar(packed_data.data()); + copy_nc_data_(var, data, packed_data.data(), cell_count, "int64", add_offset, scale_factor); - delete [] packed_data; } break; case NcType::nc_INT: { - int *packed_data = new int[cell_count]; + vector packed_data(cell_count); - var->getVar(packed_data); - copy_nc_data_(var, data, packed_data, cell_count, + var->getVar(packed_data.data()); + copy_nc_data_(var, data, packed_data.data(), cell_count, "int", add_offset, scale_factor); - delete [] packed_data; } break; case NcType::nc_SHORT: { short missing_value; bool has_missing = get_var_fill_value(var, missing_value); - short *packed_data = new short[cell_count]; - var->getVar(packed_data); + vector packed_data(cell_count); + var->getVar(packed_data.data()); if (unsigned_value) { - unsigned short *ushort_data = new unsigned short[cell_count]; + vector ushort_data(cell_count); for (int idx=0; idx packed_data(cell_count); - var->getVar(packed_data); - copy_nc_data_(var, data, packed_data, cell_count, + var->getVar(packed_data.data()); + copy_nc_data_(var, data, packed_data.data(), cell_count, "ushort", add_offset, scale_factor); - delete [] packed_data; } break; case NcType::nc_BYTE: { ncbyte missing_value; bool has_missing = get_var_fill_value(var, missing_value); - ncbyte *packed_data = new ncbyte[cell_count]; + vector packed_data(cell_count); - var->getVar(packed_data); + var->getVar(packed_data.data()); if (unsigned_value) { - unsigned char *ubyte_data = new unsigned char[cell_count]; + vector ubyte_data(cell_count); for (int idx=0; idx packed_data(cell_count); - var->getVar(packed_data); - copy_nc_data_(var, data, packed_data, cell_count, + var->getVar(packed_data.data()); + copy_nc_data_(var, data, packed_data.data(), cell_count, "ncubyte", add_offset, scale_factor); - delete [] packed_data; } break; default: @@ -1770,14 +1750,13 @@ bool get_nc_data(NcVar *var, uchar *data, bool allow_conversion) { << "INFO: Unexpected conversion from 'ncbyte' for variable \"" << GET_NC_NAME_P(var) << "\".\n\n"; } - ncbyte *signed_data = new ncbyte[cell_count]; - return_status = get_nc_data_t(var, signed_data); + vector signed_data(cell_count); + return_status = get_nc_data_t(var, signed_data.data()); if (return_status) { for (int idx=0; idx short_data(cell_count); + if (return_status = get_nc_data_t(var, short_data.data())) { for (int idx=0; idx values(data_size); - if (get_nc_data(var, values)) { + if (get_nc_data(var, values.data())) { unixtime ut; int sec_per_unit; bool no_leap_year = get_att_no_leap_year(var); @@ -1943,7 +1921,6 @@ int get_index_at_nc_data(NcVar *var, double value, const string dim_name, bool i } } } - if (values) delete [] values; ConcatString value_str; if (is_time && (value > 10000000.)) value_str << unix_to_yyyymmdd_hhmmss(value); @@ -2818,65 +2795,45 @@ void copy_nc_atts(NcVar *var_from, NcVar *var_to, const bool all_attrs) { void copy_nc_data_char(NcVar *var_from, NcVar *var_to, int data_size) { //const string method_name = "copy_nc_data_char"; - char *data = new char[data_size]; - var_from->getVar(data); - var_to->putVar(data); - // mlog << Error << "\n" << method_name << " -> error writing the variable " - // << GET_NC_NAME_P(var_to) << " to the netCDF file\n\n"; - // exit(1); - delete[] data; + vector data(data_size); + var_from->getVar(data.data()); + var_to->putVar(data.data()); } //////////////////////////////////////////////////////////////////////// void copy_nc_data_double(NcVar *var_from, NcVar *var_to, int data_size) { //const string method_name = "copy_nc_data_double"; - double *data = new double[data_size]; - var_from->getVar(data); - var_to->putVar(data); - // mlog << Error << "\n" << method_name << " -> error writing the variable " - // << GET_NC_NAME_P(var_to) << " to the netCDF file\n\n"; - // exit(1); - delete[] data; + vector data(data_size); + var_from->getVar(data.data()); + var_to->putVar(data.data()); } //////////////////////////////////////////////////////////////////////// void copy_nc_data_float(NcVar *var_from, NcVar *var_to, int data_size) { //const string method_name = "copy_nc_data_float"; - float *data = new float[data_size]; - var_from->getVar(data); - var_to->putVar(data); - // mlog << Error << "\n" << method_name << " -> error writing the variable " - // << GET_NC_NAME_P(var_to) << " to the netCDF file\n\n"; - // exit(1); - delete[] data; + vector data(data_size); + var_from->getVar(data.data()); + var_to->putVar(data.data()); } //////////////////////////////////////////////////////////////////////// void copy_nc_data_int(NcVar *var_from, NcVar *var_to, int data_size) { //const string method_name = "copy_nc_data_int"; - int *data = new int[data_size]; - var_from->getVar(data); - var_to->putVar(data); - // mlog << Error << "\n" << method_name << " -> error writing the variable " - // << GET_NC_NAME_P(var_to) << " to the netCDF file\n\n"; - // exit(1); - delete[] data; + vector data(data_size); + var_from->getVar(data.data()); + var_to->putVar(data.data()); } //////////////////////////////////////////////////////////////////////// void copy_nc_data_short(NcVar *var_from, NcVar *var_to, int data_size) { //const string method_name = "copy_nc_data_double"; - short *data = new short[data_size]; - var_from->getVar(data); - var_to->putVar(data); - // mlog << Error << "\n" << method_name << " -> error writing the variable " - // << GET_NC_NAME_P(var_to) << " to the netCDF file\n\n"; - // exit(1); - delete[] data; + vector data(data_size); + var_from->getVar(data.data()); + var_to->putVar(data.data()); } //////////////////////////////////////////////////////////////////////// @@ -2886,9 +2843,6 @@ void copy_nc_data_string(NcVar *var_from, NcVar *var_to, int data_size) { string *data = new string[data_size]; var_from->getVar(data); var_to->putVar(data); - // mlog << Error << "\n" << method_name << " -> error writing the variable " - // << GET_NC_NAME_P(var_to) << " to the netCDF file\n\n"; - // exit(1); delete[] data; } diff --git a/src/libcode/vx_nc_util/write_netcdf.cc b/src/libcode/vx_nc_util/write_netcdf.cc index 6a747cf7df..e156f85ce7 100644 --- a/src/libcode/vx_nc_util/write_netcdf.cc +++ b/src/libcode/vx_nc_util/write_netcdf.cc @@ -113,8 +113,8 @@ void write_netcdf_latlon_1d(NcFile *f_out, NcDim *lat_dim, NcDim *lon_dim, NcVar lat_var; NcVar lon_var; // Allocate space for lat/lon values - float *lat_data = new float [grid.ny()]; - float *lon_data = new float [grid.nx()]; + vector lat_data(grid.ny()); + vector lon_data(grid.nx()); // Define Variables lat_var = f_out->addVar("lat", ncFloat, *lat_dim); @@ -142,13 +142,10 @@ void write_netcdf_latlon_1d(NcFile *f_out, NcDim *lat_dim, NcDim *lon_dim, } // Write the lat data - put_nc_data(&lat_var, &lat_data[0], lat_dim->getSize(), 0); + put_nc_data(&lat_var, lat_data.data(), lat_dim->getSize(), 0); // Write the lon data - put_nc_data(&lon_var, &lon_data[0], lon_dim->getSize(), 0); - - if ( lat_data ) { delete [] lat_data; lat_data = nullptr; } - if ( lon_data ) { delete [] lon_data; lon_data = nullptr; } + put_nc_data(&lon_var, lon_data.data(), lon_dim->getSize(), 0); return; } @@ -164,8 +161,8 @@ void write_netcdf_latlon_2d(NcFile *f_out, NcDim *lat_dim, NcDim *lon_dim, long counts[2] = {grid.ny(), grid.nx()}; long offsets[2] = {0 , 0}; // Allocate space for lat/lon values - float *lat_data = new float [grid.nx()*grid.ny()]; - float *lon_data = new float [grid.nx()*grid.ny()]; + vector lat_data(grid.nx()*grid.ny()); + vector lon_data(grid.nx()*grid.ny()); // Define Variables dims.push_back(*lat_dim); @@ -196,13 +193,10 @@ void write_netcdf_latlon_2d(NcFile *f_out, NcDim *lat_dim, NcDim *lon_dim, } // Write the lat data - put_nc_data(&lat_var, &lat_data[0], counts, offsets); + put_nc_data(&lat_var, lat_data.data(), counts, offsets); // Write the lon data - put_nc_data(&lon_var, &lon_data[0], counts, offsets); - - if ( lat_data ) { delete [] lat_data; lat_data = nullptr; } - if ( lon_data ) { delete [] lon_data; lon_data = nullptr; } + put_nc_data(&lon_var, lon_data.data(), counts, offsets); return; } @@ -216,7 +210,7 @@ void write_netcdf_grid_weight(NcFile *f_out, NcDim *lat_dim, NcDim *lon_dim, vector dims; vector count; // Allocate space for weight values - float *wgt_data = new float [wgt_dp.nx()*wgt_dp.ny()]; + vector wgt_data(wgt_dp.nx()*wgt_dp.ny()); // Define Variables dims.push_back(*lat_dim); @@ -256,10 +250,9 @@ void write_netcdf_grid_weight(NcFile *f_out, NcDim *lat_dim, NcDim *lon_dim, // Write the weights count.push_back(wgt_dp.ny()); count.push_back(wgt_dp.nx()); - put_nc_data_with_dims(&wgt_var, &wgt_data[0], wgt_dp.ny(), wgt_dp.nx()); + put_nc_data_with_dims(&wgt_var, wgt_data.data(), wgt_dp.ny(), wgt_dp.nx()); // Clean up - if(wgt_data) { delete [] wgt_data; wgt_data = (float *) nullptr; } return; } diff --git a/src/libcode/vx_python3_utils/wchar_argv.cc b/src/libcode/vx_python3_utils/wchar_argv.cc index a51eea0675..ff26b0d215 100644 --- a/src/libcode/vx_python3_utils/wchar_argv.cc +++ b/src/libcode/vx_python3_utils/wchar_argv.cc @@ -13,11 +13,11 @@ //////////////////////////////////////////////////////////////////////// +#include #include #include #include #include -#include #include "wchar_argv.h" #include "concat_string.h" @@ -96,9 +96,9 @@ void Wchar_Argv::init_from_scratch() { -W_Buf = 0; +W_Buf = nullptr; -W_Argv = 0; +W_Argv = nullptr; return; @@ -132,33 +132,27 @@ void Wchar_Argv::set(const StringArray & a) { -int j, k, N; -int len; -char * s = nullptr; -char ** av = nullptr; +int k = 0; +int len = 0; ConcatString c; const char *method_name = "Wchar_Argv::set() -> "; -len = 0; - -for (j=0; j<(a.n()); ++j) { +for (int j=0; j<(a.n()); ++j) { len += a.length(j); } -N = len + a.n(); +int N = len + a.n(); -s = new char [N]; +char * s = new char [N]; -av = new char * [a.n()]; +char ** av = new char * [a.n()]; memset(s, 0, N); -k = 0; - -for (j=0; j<(a.n()); ++j) { +for (int j=0; j<(a.n()); ++j) { av[j] = s + k; @@ -196,27 +190,24 @@ void Wchar_Argv::set(int _argc, char ** _argv) clear(); -int j, k; -int argv_len; -int * len = nullptr; +int k; +int *len = new int [_argc]; Argc = _argc; -len = new int [Argc]; - - // // total length of the argument string ... // -argv_len = 0; +int argv_len = 0; -for (j=0; j<_argc; ++j) { +for (int j=0; j<_argc; ++j) { - len[j] = m_strlen(_argv[j]); // we're using the len array here because - // we don't want to call m_strlen more than - // once on each argv value + // we're using the len array here because + // we don't want to call m_strlen more than + // once on each argv value + len[j] = (_argv == nullptr) ? 0 : len[j] = m_strlen(_argv[j]); argv_len += len[j]; @@ -235,7 +226,7 @@ for (j=0; j<_argc; ++j) { W_Buf = new wchar_t [argv_len]; -for (j=0; j " << "mbstowcs failed for string \"" << _argv[j] << "\"\n\n"; @@ -273,7 +264,7 @@ W_Argv = new wchar_t * [Argc]; k = 0; -for (j=0; j val(Nxy); // Compute the requested percentile of intensity for(int i=0; i Index(2*data.ny()); - if ( !Index ) { + if ( Index.size() < 2*data.ny() ) { mlog << Error << "\nShapedata::convex_hull() -> " << "memory allocation error\n\n"; @@ -889,8 +884,6 @@ Polyline ShapeData::convex_hull_old() const // done // - delete [] Index; Index = (int *) nullptr; - return hull; } @@ -1898,7 +1891,7 @@ void ShapeData::threshold(SingleThresh t) { /////////////////////////////////////////////////////////////////////////////// -void ShapeData::set_to_1_or_0() +void ShapeData::set_to_1_or_0() { int j; double v; diff --git a/src/libcode/vx_stat_out/stat_columns.cc b/src/libcode/vx_stat_out/stat_columns.cc index ac8530f6a5..c805d447fd 100644 --- a/src/libcode/vx_stat_out/stat_columns.cc +++ b/src/libcode/vx_stat_out/stat_columns.cc @@ -1548,6 +1548,7 @@ void write_mpr_row(StatHdrColumns &shc, const PairDataPoint *pd_ptr, STATOutputType out_type, AsciiTable &stat_at, int &stat_row, AsciiTable &txt_at, int &txt_row, + bool update_obtype, bool update_thresh) { // MPR line type @@ -1567,6 +1568,9 @@ void write_mpr_row(StatHdrColumns &shc, const PairDataPoint *pd_ptr, // Write a line for each matched pair for(int i=0; in_obs; i++) { + // MET #2893 write individual obs message type + if(update_obtype) shc.set_obtype(pd_ptr->typ_sa[i].c_str()); + // Set the observation valid time shc.set_obs_valid_beg(pd_ptr->vld_ta[i]); shc.set_obs_valid_end(pd_ptr->vld_ta[i]); @@ -1645,6 +1649,7 @@ void write_seeps_mpr_row(StatHdrColumns &shc, const PairDataPoint *pd_ptr, STATOutputType out_type, AsciiTable &stat_at, int &stat_row, AsciiTable &txt_at, int &txt_row, + bool update_obtype, bool update_thresh) { // SEEPS line type @@ -1668,6 +1673,9 @@ void write_seeps_mpr_row(StatHdrColumns &shc, const PairDataPoint *pd_ptr, if(!pd_ptr->seeps_mpr[i] || is_bad_data(pd_ptr->seeps_mpr[i]->score)) continue; + // MET #2893 write individual obs message type + if(update_obtype) shc.set_obtype(pd_ptr->typ_sa[i].c_str()); + // Set the observation valid time shc.set_obs_valid_beg(pd_ptr->vld_ta[i]); shc.set_obs_valid_end(pd_ptr->vld_ta[i]); @@ -1899,7 +1907,8 @@ void write_phist_row(StatHdrColumns &shc, const PairDataEnsemble *pd_ptr, void write_orank_row(StatHdrColumns &shc, const PairDataEnsemble *pd_ptr, STATOutputType out_type, AsciiTable &stat_at, int &stat_row, - AsciiTable &txt_at, int &txt_row) { + AsciiTable &txt_at, int &txt_row, + bool update_obtype) { // Observation Rank line type shc.set_line_type(stat_orank_str); @@ -1913,6 +1922,9 @@ void write_orank_row(StatHdrColumns &shc, const PairDataEnsemble *pd_ptr, // Write a line for each ensemble pair for(int i=0; in_obs; i++) { + // MET #2893 write individual obs message type + if(update_obtype) shc.set_obtype(pd_ptr->typ_sa[i].c_str()); + // Set the observation valid time shc.set_obs_valid_beg(pd_ptr->vld_ta[i]); shc.set_obs_valid_end(pd_ptr->vld_ta[i]); diff --git a/src/libcode/vx_stat_out/stat_columns.h b/src/libcode/vx_stat_out/stat_columns.h index 7eb21c6fa0..e8998e1fa4 100644 --- a/src/libcode/vx_stat_out/stat_columns.h +++ b/src/libcode/vx_stat_out/stat_columns.h @@ -106,13 +106,13 @@ extern void write_dmap_row (StatHdrColumns &, const DMAPInfo &, STATOutputType, AsciiTable &, int &, AsciiTable &, int &); extern void write_mpr_row (StatHdrColumns &, const PairDataPoint *, STATOutputType, AsciiTable &, int &, AsciiTable &, int &, - bool update_thresh = true); + bool update_obtype, bool update_thresh = true); extern void write_seeps_row (StatHdrColumns &, const SeepsAggScore *, STATOutputType, AsciiTable &, int &, AsciiTable &, int &, bool update_thresh = true); extern void write_seeps_mpr_row (StatHdrColumns &, const PairDataPoint *, STATOutputType, AsciiTable &, int &, AsciiTable &, int &, - bool update_thresh = true); + bool update_obtype, bool update_thresh = true); extern void write_isc_row (StatHdrColumns &, const ISCInfo &, STATOutputType, AsciiTable &, int &, AsciiTable &, int &); extern void write_ecnt_row (StatHdrColumns &, const ECNTInfo &, STATOutputType, @@ -124,7 +124,8 @@ extern void write_rhist_row (StatHdrColumns &, const PairDataEnsemble *, STATOut extern void write_phist_row (StatHdrColumns &, const PairDataEnsemble *, STATOutputType, AsciiTable &, int &, AsciiTable &, int &); extern void write_orank_row (StatHdrColumns &, const PairDataEnsemble *, STATOutputType, - AsciiTable &, int &, AsciiTable &, int &); + AsciiTable &, int &, AsciiTable &, int &, + bool update_obtype = false); extern void write_ssvar_row (StatHdrColumns &, const PairDataEnsemble *, double, STATOutputType, AsciiTable &, int &, AsciiTable &, int &); extern void write_relp_row (StatHdrColumns &, const PairDataEnsemble *, STATOutputType, diff --git a/src/libcode/vx_statistics/apply_mask.cc b/src/libcode/vx_statistics/apply_mask.cc index c299d8d3d0..3777adc5f0 100644 --- a/src/libcode/vx_statistics/apply_mask.cc +++ b/src/libcode/vx_statistics/apply_mask.cc @@ -138,7 +138,7 @@ void parse_grid_weight(const Grid &grid, const GridWeightType t, w = grid.calc_area(x, y); } else { - w = default_grid_weight; + w = default_weight; } // Store the current weight diff --git a/src/libcode/vx_statistics/contable.h b/src/libcode/vx_statistics/contable.h index ebdbf2d454..0227e90146 100644 --- a/src/libcode/vx_statistics/contable.h +++ b/src/libcode/vx_statistics/contable.h @@ -85,7 +85,7 @@ class ContingencyTable { void set_entry(int row, int col, double value); // Increment table entries - void inc_entry(int row, int col, double weight=1.0); + void inc_entry(int row, int col, double weight=default_weight); // Get values double total() const; @@ -160,8 +160,8 @@ class Nx2ContingencyTable : public ContingencyTable { double threshold(int index) const; // 0 <= index <= Nrows // Increment table entries - void inc_event (double value, double weight=1.0); - void inc_nonevent (double value, double weight=1.0); + void inc_event (double value, double weight=default_weight); + void inc_nonevent (double value, double weight=default_weight); // Get table entries double event_total_by_thresh(double) const; @@ -237,11 +237,11 @@ class TTContingencyTable : public ContingencyTable { void set_fy_oy(double); // Increment table entries - void inc_fn_on(double weight=1.0); - void inc_fy_on(double weight=1.0); + void inc_fn_on(double weight=default_weight); + void inc_fy_on(double weight=default_weight); - void inc_fn_oy(double weight=1.0); - void inc_fy_oy(double weight=1.0); + void inc_fn_oy(double weight=default_weight); + void inc_fy_oy(double weight=default_weight); // Get table entries double fn_on() const; diff --git a/src/libcode/vx_statistics/pair_base.cc b/src/libcode/vx_statistics/pair_base.cc index c26d2d3459..a3b383f9fa 100644 --- a/src/libcode/vx_statistics/pair_base.cc +++ b/src/libcode/vx_statistics/pair_base.cc @@ -81,9 +81,9 @@ void PairBase::clear() { IsPointVx = false; mask_name.clear(); - mask_area_ptr = (MaskPlane *) nullptr; // Not allocated - mask_sid_ptr = (StringArray *) nullptr; // Not allocated - mask_llpnt_ptr = (MaskLatLon *) nullptr; // Not allocated + mask_area_ptr = (MaskPlane *) nullptr; // Not allocated + mask_sid_ptr = (MaskSID *) nullptr; // Not allocated + mask_llpnt_ptr = (MaskLatLon *) nullptr; // Not allocated cdf_info_ptr = (const ClimoCDFInfo *) nullptr; // Not allocated @@ -104,6 +104,7 @@ void PairBase::clear() { ocsd_na.clear(); ocdf_na.clear(); + typ_sa.clear(); sid_sa.clear(); lat_na.clear(); lon_na.clear(); @@ -133,9 +134,9 @@ void PairBase::erase() { IsPointVx = false; mask_name.erase(); - mask_area_ptr = (MaskPlane *) nullptr; // Not allocated - mask_sid_ptr = (StringArray *) nullptr; // Not allocated - mask_llpnt_ptr = (MaskLatLon *) nullptr; // Not allocated + mask_area_ptr = (MaskPlane *) nullptr; // Not allocated + mask_sid_ptr = (MaskSID *) nullptr; // Not allocated + mask_llpnt_ptr = (MaskLatLon *) nullptr; // Not allocated cdf_info_ptr = (const ClimoCDFInfo *) nullptr; // Not allocated @@ -155,6 +156,7 @@ void PairBase::erase() { ocsd_na.erase(); ocdf_na.erase(); + typ_sa.clear(); // no erase option sid_sa.clear(); // no erase option lat_na.erase(); lon_na.erase(); @@ -205,9 +207,9 @@ void PairBase::extend(int n) { //////////////////////////////////////////////////////////////////////// -void PairBase::set_mask_name(const char *c) { +void PairBase::set_mask_name(const string &s) { - mask_name = c; + mask_name = s; return; } @@ -223,9 +225,9 @@ void PairBase::set_mask_area_ptr(MaskPlane *mp_ptr) { //////////////////////////////////////////////////////////////////////// -void PairBase::set_mask_sid_ptr(StringArray *sid_ptr) { +void PairBase::set_mask_sid_ptr(MaskSID *ms_ptr) { - mask_sid_ptr = sid_ptr; + mask_sid_ptr = ms_ptr; return; } @@ -427,7 +429,7 @@ void PairBase::compute_climo_cdf() { //////////////////////////////////////////////////////////////////////// -bool PairBase::add_point_obs(const char *sid, +bool PairBase::add_point_obs(const char *typ, const char *sid, double lat, double lon, double x, double y, unixtime ut, double lvl, double elv, double o, const char *qc, @@ -476,6 +478,7 @@ bool PairBase::add_point_obs(const char *sid, } else { station_values_t val; + val.typ = string(typ); val.sid = string(sid); val.lat = lat; val.lon = lon; @@ -497,6 +500,7 @@ bool PairBase::add_point_obs(const char *sid, } if(obs_summary == ObsSummary::None) { + typ_sa.add(typ); sid_sa.add(sid); lat_na.add(lat); lon_na.add(lon); @@ -520,7 +524,7 @@ bool PairBase::add_point_obs(const char *sid, //////////////////////////////////////////////////////////////////////// -void PairBase::set_point_obs(int i_obs, const char *sid, +void PairBase::set_point_obs(int i_obs, const char *typ, const char *sid, double lat, double lon, double x, double y, unixtime ut, double lvl, double elv, double o, const char *qc, @@ -534,6 +538,7 @@ void PairBase::set_point_obs(int i_obs, const char *sid, exit(1); } + typ_sa.set(i_obs, typ); sid_sa.set(i_obs, sid); lat_na.set(i_obs, lat); lon_na.set(i_obs, lon); @@ -751,6 +756,7 @@ void PairBase::calc_obs_summary(){ // Store summarized value in the map svt.summary_val = ob.val; + typ_sa.add (svt.typ.c_str()); sid_sa.add (svt.sid.c_str()); lat_na.add (svt.lat); lon_na.add (svt.lon); @@ -775,6 +781,49 @@ void PairBase::calc_obs_summary(){ //////////////////////////////////////////////////////////////////////// +void PairBase::set_point_weight(const PointWeightType wgt_flag) { + + const char *method_name = "PairBase::set_point_weight() -> "; + + if(!IsPointVx || wgt_flag == PointWeightType::None) return; + + // Apply the SID point weight type + if(wgt_flag == PointWeightType::SID && + mask_sid_ptr != nullptr) { + + mlog << Debug(4) + << "Applying point weights for the \"" + << mask_sid_ptr->name() << "\" station ID masking region.\n"; + + // Print warning if no weights are provided + if(!mask_sid_ptr->has_weights()) { + mlog << Warning << "\n" << method_name + << "station ID point weighting requested but no weights " + << "were defined in the \"" << mask_sid_ptr->name() + << "\" station ID mask. Using default weights of " + << default_weight << ".\n\n"; + } + + // Loop through the point observations + for(int i_obs=0; i_obshas_sid(sid_sa[i_obs], wgt)) { + wgt_na.set(i_obs, wgt); + } + else { + mlog << Warning << "\n" << method_name + << "no match found for station id: " + << sid_sa[i_obs] << "\n\n"; + } + } + } + + return; +} + +//////////////////////////////////////////////////////////////////////// + void PairBase::add_grid_obs(double o, const ClimoPntInfo &cpi, double wgt) { @@ -1293,13 +1342,15 @@ void VxPairBase::set_mask_area(int i_mask, const char *name, //////////////////////////////////////////////////////////////////////// void VxPairBase::set_mask_sid(int i_mask, const char *name, - StringArray *sid_ptr) { + MaskSID *ms_ptr) { + + if(!ms_ptr) return; for(int i_msg_typ=0; i_msg_typset_mask_name(name); - pb_ptr[n]->set_mask_sid_ptr(sid_ptr); + pb_ptr[n]->set_mask_sid_ptr(ms_ptr); } } @@ -1511,6 +1562,20 @@ void VxPairBase::calc_obs_summary() { //////////////////////////////////////////////////////////////////////// +void VxPairBase::set_point_weight(const PointWeightType wgt_flag) { + + if(n_vx == 0) { + mlog << Warning << "\nVxPairBase::set_point_weight() -> " + << "set_size() has not been called yet!\n\n"; + } + + for(auto &x : pb_ptr) x->set_point_weight(wgt_flag); + + return; +} + +//////////////////////////////////////////////////////////////////////// + bool VxPairBase::is_keeper_sid( const char *pnt_obs_str, const char *hdr_sid_str) { bool keep = true; @@ -1864,7 +1929,7 @@ bool VxPairBase::is_keeper_mask( } // Otherwise, check for the masking SID list else if( pb_ptr[n]->mask_sid_ptr != nullptr && - !pb_ptr[n]->mask_sid_ptr->has(hdr_sid_str)) { + !pb_ptr[n]->mask_sid_ptr->has_sid(hdr_sid_str)) { if(mlog.verbosity_level() >= REJECT_DEBUG_LEVEL) { mlog << Debug(REJECT_DEBUG_LEVEL) diff --git a/src/libcode/vx_statistics/pair_base.h b/src/libcode/vx_statistics/pair_base.h index af92385f5c..a734d1af31 100644 --- a/src/libcode/vx_statistics/pair_base.h +++ b/src/libcode/vx_statistics/pair_base.h @@ -36,6 +36,7 @@ struct station_values_t { void clear(); + std::string typ; std::string sid; double lat; double lon; @@ -75,10 +76,10 @@ class PairBase { ////////////////////////////////////////////////////////////////// // Masking area applied to the forecast and climo fields - ConcatString mask_name; + ConcatString mask_name; MaskPlane *mask_area_ptr; // Pointer to the masking MaskPlane // which is not allocated - StringArray *mask_sid_ptr; // Pointer to masking station ID list + MaskSID *mask_sid_ptr; // Pointer to masking station ID list // which is not allocated MaskLatLon *mask_llpnt_ptr; // Pointer to Lat/Lon thresholds // which is not allocated @@ -110,6 +111,7 @@ class PairBase { NumArray ocdf_na; // Observation climatology cumulative distribution function [n_obs] // Point Observation Information + StringArray typ_sa; // Message type [n_obs] StringArray sid_sa; // Station ID [n_obs] NumArray lat_na; // Latitude [n_obs] NumArray lon_na; // Longitude [n_obs] @@ -137,9 +139,9 @@ class PairBase { bool is_point_vx() const; - void set_mask_name(const char *); + void set_mask_name(const std::string &); void set_mask_area_ptr(MaskPlane *); - void set_mask_sid_ptr(StringArray *); + void set_mask_sid_ptr(MaskSID *); void set_mask_llpnt_ptr(MaskLatLon *); void set_climo_cdf_info_ptr(const ClimoCDFInfo *); @@ -168,17 +170,21 @@ class PairBase { ob_val_t compute_median(std::string sng_key); ob_val_t compute_percentile(std::string sng_key, int perc); - bool add_point_obs(const char *, double, double, double, double, + bool add_point_obs(const char *, const char *, + double, double, double, double, unixtime, double, double, double, const char *, const ClimoPntInfo &, double); - void set_point_obs(int, const char *, double, double, double, double, + void set_point_obs(int, const char *, const char *, + double, double, double, double, unixtime, double, double, double, const char *, const ClimoPntInfo &, double); - void add_grid_obs(double, const ClimoPntInfo &, double); + void add_grid_obs(double, + const ClimoPntInfo &, double); - void add_grid_obs(double, double, double, const ClimoPntInfo &, double); + void add_grid_obs(double, double, double, + const ClimoPntInfo &, double); void add_climo(double, const ClimoPntInfo &); @@ -192,6 +198,7 @@ class PairBase { void calc_obs_summary(); + void set_point_weight(const PointWeightType); }; //////////////////////////////////////////////////////////////////////// @@ -349,7 +356,7 @@ class VxPairBase { void set_msg_typ(int, const char *); void set_msg_typ_vals(int, const StringArray &); void set_mask_area(int, const char *, MaskPlane *); - void set_mask_sid(int, const char *, StringArray *); + void set_mask_sid(int, const char *, MaskSID *); void set_mask_llpnt(int, const char *, MaskLatLon *); void set_interp(int i_interp, const char *interp_mthd_str, int width, @@ -375,6 +382,7 @@ class VxPairBase { void print_obs_summary() const; void calc_obs_summary(); + void set_point_weight(const PointWeightType); bool is_keeper_sid(const char *, const char *); bool is_keeper_var(const char *, const char *, int); diff --git a/src/libcode/vx_statistics/pair_data_ensemble.cc b/src/libcode/vx_statistics/pair_data_ensemble.cc index af9f80de15..0d80abce1a 100644 --- a/src/libcode/vx_statistics/pair_data_ensemble.cc +++ b/src/libcode/vx_statistics/pair_data_ensemble.cc @@ -1170,8 +1170,7 @@ void VxPairDataEnsemble::add_point_obs(float *hdr_arr, int *hdr_typ_arr, const char *hdr_sid_str, unixtime hdr_ut, const char *obs_qty, float *obs_arr, - Grid &gr, const char *var_name, - const DataPlane *wgt_dp) { + const Grid &gr, const char *var_name) { // Check the observation VarInfo file type if(obs_info->file_type() != FileType_Gb1) { @@ -1303,17 +1302,13 @@ void VxPairDataEnsemble::add_point_obs(float *hdr_arr, int *hdr_typ_arr, gr, obs_x, obs_y, obs_v, obs_lvl, obs_hgt, cpi)) continue; - // Compute weight for current point - double wgt_v = (wgt_dp == nullptr ? - default_grid_weight : - wgt_dp->get(x, y)); - // Add the observation value // Weight is from the nearest grid point int n = three_to_one(i_msg_typ, i_mask, i_interp); - if(!pd[n].add_point_obs(hdr_sid_str, hdr_lat, hdr_lon, - obs_x, obs_y, hdr_ut, obs_lvl, obs_hgt, - obs_v, obs_qty, cpi, wgt_v)) { + if(!pd[n].add_point_obs(hdr_typ_str, hdr_sid_str, + hdr_lat, hdr_lon, obs_x, obs_y, + hdr_ut, obs_lvl, obs_hgt, + obs_v, obs_qty, cpi, default_weight)) { if(mlog.verbosity_level() >= REJECT_DEBUG_LEVEL) { mlog << Debug(REJECT_DEBUG_LEVEL) diff --git a/src/libcode/vx_statistics/pair_data_ensemble.h b/src/libcode/vx_statistics/pair_data_ensemble.h index f621c23abf..6f14825b11 100644 --- a/src/libcode/vx_statistics/pair_data_ensemble.h +++ b/src/libcode/vx_statistics/pair_data_ensemble.h @@ -216,8 +216,8 @@ class VxPairDataEnsemble : public VxPairBase { void set_skip_const(bool); void add_point_obs(float *, int *, const char *, const char *, - unixtime, const char *, float *, Grid &, - const char * = 0, const DataPlane * = 0); + unixtime, const char *, float *, const Grid &, + const char *); void add_ens(int, bool mn, Grid &); }; diff --git a/src/libcode/vx_statistics/pair_data_point.cc b/src/libcode/vx_statistics/pair_data_point.cc index a22194a297..85595d69d3 100644 --- a/src/libcode/vx_statistics/pair_data_point.cc +++ b/src/libcode/vx_statistics/pair_data_point.cc @@ -156,7 +156,8 @@ void PairDataPoint::assign(const PairDataPoint &pd) { ClimoPntInfo cpi(pd.fcmn_na[i], pd.fcsd_na[i], pd.ocmn_na[i], pd.ocsd_na[i]); - if(add_point_pair(pd.sid_sa[i].c_str(), pd.lat_na[i], pd.lon_na[i], + if(add_point_pair(pd.typ_sa[i].c_str(), pd.sid_sa[i].c_str(), + pd.lat_na[i], pd.lon_na[i], pd.x_na[i], pd.y_na[i], pd.vld_ta[i], pd.lvl_na[i], pd.elv_na[i], pd.f_na[i], pd.o_na[i], pd.o_qc_sa[i].c_str(), @@ -176,13 +177,14 @@ void PairDataPoint::assign(const PairDataPoint &pd) { //////////////////////////////////////////////////////////////////////// -bool PairDataPoint::add_point_pair(const char *sid, double lat, double lon, +bool PairDataPoint::add_point_pair(const char *typ, const char *sid, + double lat, double lon, double x, double y, unixtime ut, double lvl, double elv, double f, double o, const char *qc, const ClimoPntInfo &cpi, double wgt) { - if(!add_point_obs(sid, lat, lon, x, y, ut, lvl, elv, o, qc, + if(!add_point_obs(typ, sid, lat, lon, x, y, ut, lvl, elv, o, qc, cpi, wgt)) return false; f_na.add(f); @@ -233,7 +235,8 @@ void PairDataPoint::set_seeps_score(SeepsScore *seeps, int index) { //////////////////////////////////////////////////////////////////////// -void PairDataPoint::set_point_pair(int i_obs, const char *sid, +void PairDataPoint::set_point_pair(int i_obs, + const char *typ, const char *sid, double lat, double lon, double x, double y, unixtime ut, double lvl, double elv, @@ -248,7 +251,7 @@ void PairDataPoint::set_point_pair(int i_obs, const char *sid, exit(1); } - set_point_obs(i_obs, sid, lat, lon, x, y, ut, lvl, elv, + set_point_obs(i_obs, typ, sid, lat, lon, x, y, ut, lvl, elv, o, qc, cpi, wgt); f_na.set(i_obs, f); @@ -380,8 +383,8 @@ PairDataPoint PairDataPoint::subset_pairs_cnt_thresh( // Handle point data if(is_point_vx()) { - if(out_pd.add_point_pair(sid_sa[i].c_str(), lat_na[i], - lon_na[i], x_na[i], y_na[i], + if(out_pd.add_point_pair(typ_sa[i].c_str(), sid_sa[i].c_str(), + lat_na[i], lon_na[i], x_na[i], y_na[i], vld_ta[i], lvl_na[i], elv_na[i], f_na[i], o_na[i], o_qc_sa[i].c_str(), cpi, wgt_na[i])) { @@ -503,8 +506,7 @@ void VxPairDataPoint::set_size(int types, int masks, int interps) { void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, const char *hdr_sid_str, unixtime hdr_ut, const char *obs_qty, float *obs_arr, - Grid &gr, const char *var_name, - const DataPlane *wgt_dp) { + const Grid &gr, const char *var_name) { // Increment the number of tries count n_try++; @@ -553,11 +555,7 @@ void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, obs_info->is_specific_humidity(); bool precip_flag = fcst_info->is_precipitation() && obs_info->is_precipitation(); - int precip_interval = bad_data_int; - if(precip_flag) { - if(wgt_dp) precip_interval = wgt_dp->accum(); - else precip_interval = fcst_dpa[0].accum(); - } + int precip_interval = fcst_dpa[0].accum(); bool has_seeps = false; SeepsScore *seeps = nullptr; @@ -623,17 +621,12 @@ void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, continue; } - // Compute weight for current point - double wgt_v = (wgt_dp == nullptr ? - default_grid_weight : - wgt_dp->get(x, y)); - // Add the forecast, climatological, and observation data // Weight is from the nearest grid point int n = three_to_one(i_msg_typ, i_mask, i_interp); - if(!pd[n].add_point_pair(hdr_sid_str, + if(!pd[n].add_point_pair(hdr_typ_str, hdr_sid_str, hdr_lat, hdr_lon, obs_x, obs_y, hdr_ut, obs_lvl, - obs_hgt, fcst_v, obs_v, obs_qty, cpi, wgt_v)) { + obs_hgt, fcst_v, obs_v, obs_qty, cpi, default_weight)) { if(mlog.verbosity_level() >= REJECT_DEBUG_LEVEL) { mlog << Debug(REJECT_DEBUG_LEVEL) @@ -954,7 +947,7 @@ void subset_wind_pairs(const PairDataPoint &pd_u, const PairDataPoint &pd_v, // Loop over the pairs for(i=0; i track_lat_data(track.n_points()); + vector track_lon_data(track.n_points()); for(int i = 0; i < track.n_points(); i++) { mlog << Debug(5) << track[i].serialize() << "\n"; @@ -71,11 +71,9 @@ void write_tc_track_lat_lon(NcFile* nc_out, vector counts; counts.push_back(track.n_points()); - track_lat_var.putVar(offsets, counts, track_lat_data); - track_lon_var.putVar(offsets, counts, track_lon_data); + track_lat_var.putVar(offsets, counts, track_lat_data.data()); + track_lon_var.putVar(offsets, counts, track_lon_data.data()); - delete[] track_lat_data; - delete[] track_lon_data; } //////////////////////////////////////////////////////////////////////// @@ -139,7 +137,7 @@ void write_tc_rmw(NcFile* nc_out, add_att(&track_mrd_var, "units", "nautical_miles"); add_att(&track_mrd_var, "standard_name", "radius_max_wind"); - double* track_mrd_data = new double[track.n_points()]; + vector track_mrd_data(track.n_points()); for(int i = 0; i < track.n_points(); i++) { track_mrd_data[i] = track[i].mrd(); @@ -151,9 +149,8 @@ void write_tc_rmw(NcFile* nc_out, vector counts; counts.push_back(track.n_points()); - track_mrd_var.putVar(offsets, counts, track_mrd_data); + track_mrd_var.putVar(offsets, counts, track_mrd_data.data()); - delete[] track_mrd_data; } //////////////////////////////////////////////////////////////////////// @@ -281,7 +278,7 @@ void def_tc_pressure(NcFile* nc_out, NcVar pressure_var; - double* pressure_data = new double[pressure_levels.size()]; + vector pressure_data(pressure_levels.size()); // Define variable pressure_var = nc_out->addVar("pressure", ncDouble, pressure_dim); @@ -300,10 +297,7 @@ void def_tc_pressure(NcFile* nc_out, k--; } - put_nc_data(&pressure_var, &pressure_data[0]); - - // Cleanup - if(pressure_data) { delete [] pressure_data; pressure_data = (double *) 0; } + put_nc_data(&pressure_var, pressure_data.data()); return; } @@ -317,8 +311,8 @@ void def_tc_range_azimuth(NcFile* nc_out, NcVar range_var; NcVar azimuth_var; - double* range_data = new double[grid.range_n()]; - double* azimuth_data = new double[grid.azimuth_n()]; + vector range_data(grid.range_n()); + vector azimuth_data(grid.azimuth_n()); // Define variables range_var = nc_out->addVar("range", ncDouble, range_dim); @@ -352,12 +346,8 @@ void def_tc_range_azimuth(NcFile* nc_out, } // Write coordinates - put_nc_data(&range_var, &range_data[0]); - put_nc_data(&azimuth_var, &azimuth_data[0]); - - // Cleanup - if(range_data) { delete [] range_data; range_data = (double *) 0; } - if(azimuth_data) { delete [] azimuth_data; azimuth_data = (double *) 0; } + put_nc_data(&range_var, range_data.data()); + put_nc_data(&azimuth_var, azimuth_data.data()); return; } @@ -669,8 +659,7 @@ void write_tc_data_rev(NcFile* nc_out, const TcrmwGrid& grid, vector offsets; vector counts; - - double* data_rev; + vector data_rev(grid.range_n() * grid.azimuth_n()); offsets.clear(); offsets.push_back(i_point); @@ -682,9 +671,6 @@ void write_tc_data_rev(NcFile* nc_out, const TcrmwGrid& grid, counts.push_back(grid.range_n()); counts.push_back(grid.azimuth_n()); - data_rev = new double[ - grid.range_n() * grid.azimuth_n()]; - for(int ir = 0; ir < grid.range_n(); ir++) { for(int ia = 0; ia < grid.azimuth_n(); ia++) { int i = ir * grid.azimuth_n() + ia; @@ -693,9 +679,8 @@ void write_tc_data_rev(NcFile* nc_out, const TcrmwGrid& grid, } } - var.putVar(offsets, counts, data_rev); + var.putVar(offsets, counts, data_rev.data()); - delete[] data_rev; } //////////////////////////////////////////////////////////////////////// @@ -706,8 +691,8 @@ void write_tc_azi_mean_data(NcFile* nc_out, const TcrmwGrid& grid, vector offsets; vector counts; - double* data_rev; - double* data_azi_mean; + vector data_rev(grid.range_n() * grid.azimuth_n()); + vector data_azi_mean(grid.range_n(), 0.0); offsets.clear(); offsets.push_back(i_point); @@ -717,10 +702,6 @@ void write_tc_azi_mean_data(NcFile* nc_out, const TcrmwGrid& grid, counts.push_back(1); counts.push_back(grid.range_n()); - data_rev = new double[ - grid.range_n() * grid.azimuth_n()]; - data_azi_mean = new double[grid.range_n()]; - for(int ir = 0; ir < grid.range_n(); ir++) { data_azi_mean[ir] = 0.; for(int ia = 0; ia < grid.azimuth_n(); ia++) { @@ -735,10 +716,8 @@ void write_tc_azi_mean_data(NcFile* nc_out, const TcrmwGrid& grid, data_azi_mean[ir] /= grid.azimuth_n(); } - var.putVar(offsets, counts, data_azi_mean); + var.putVar(offsets, counts, data_azi_mean.data()); - delete[] data_rev; - delete[] data_azi_mean; } //////////////////////////////////////////////////////////////////////// @@ -761,8 +740,7 @@ extern void write_tc_pressure_level_data( vector offsets_3d; vector counts_3d; - - double* data_rev; + vector data_rev(grid.range_n() * grid.azimuth_n()); offsets_3d.clear(); offsets_3d.push_back(i_point); @@ -776,9 +754,6 @@ extern void write_tc_pressure_level_data( counts_3d.push_back(grid.range_n()); counts_3d.push_back(grid.azimuth_n()); - data_rev = new double[ - grid.range_n() * grid.azimuth_n()]; - for(int ir = 0; ir < grid.range_n(); ir++) { for(int ia = 0; ia < grid.azimuth_n(); ia++) { int i = ir * grid.azimuth_n() + ia; @@ -787,9 +762,8 @@ extern void write_tc_pressure_level_data( } } - var.putVar(offsets_3d, counts_3d, data_rev); + var.putVar(offsets_3d, counts_3d, data_rev.data()); - delete[] data_rev; } //////////////////////////////////////////////////////////////////////// diff --git a/src/tools/core/ensemble_stat/ensemble_stat.cc b/src/tools/core/ensemble_stat/ensemble_stat.cc index 475a1bd52a..68cfe50cc1 100644 --- a/src/tools/core/ensemble_stat/ensemble_stat.cc +++ b/src/tools/core/ensemble_stat/ensemble_stat.cc @@ -77,6 +77,8 @@ // 044 06/17/24 Halley Gotway MET #2856 Reinitialize climo_cdf pointer // 045 07/05/24 Halley Gotway MET #2924 Support forecast climatology. // 046 10/08/24 Halley Gotway MET #2887 Compute weighted contingency tables. +// 047 10/14/24 Halley Gotway MET #2279 Add point_weight_flag option. +// 048 10/15/24 Halley Gotway MET #2893 Write individual pair OBTYPE. // //////////////////////////////////////////////////////////////////////// @@ -825,10 +827,11 @@ void process_point_vx() { // Process each point observation NetCDF file for(i=0; i obs_v (nxy, bad_data_float); + vector obs_rank (nxy, bad_data_int ); + vector obs_pit (nxy, bad_data_float); + vector ens_vld (nxy, bad_data_int ); + vector ens_mean (nxy, bad_data_float); // Loop over all the pairs for(i=0; i msg_typ_group_map; StringArray msg_typ_sfc; + bool obtype_as_group_val_flag; // Mapping of mask names to MaskPlanes std::map mask_area_map; // Mapping of mask names to Station ID lists - std::map mask_sid_map; + std::map mask_sid_map; gsl_rng *rng_ptr; // GSL random number generator (allocated) - GridWeightType grid_weight_flag; // Grid weighting flag - ConcatString tmp_dir; // Directory for temporary files + GridWeightType grid_weight_flag; // Grid weighting flag + PointWeightType point_weight_flag; // Point weighting flag + ConcatString output_prefix; // String to customize output file name ConcatString version; // Config file version diff --git a/src/tools/core/grid_stat/grid_stat.cc b/src/tools/core/grid_stat/grid_stat.cc index f3013e4091..45afc74615 100644 --- a/src/tools/core/grid_stat/grid_stat.cc +++ b/src/tools/core/grid_stat/grid_stat.cc @@ -2088,7 +2088,7 @@ void get_mask_points(const GridStatVxOpt &vx_opt, if(ocsd_ptr) apply_mask(*ocsd_ptr, mask_mp, pd.ocsd_na); else pd.ocsd_na.add_const(bad_data_double, pd.n_obs); if(wgt_ptr) apply_mask(*wgt_ptr, mask_mp, pd.wgt_na); - else pd.wgt_na.add_const(default_grid_weight, pd.n_obs); + else pd.wgt_na.add_const(default_weight, pd.n_obs); if(ocmn_ptr && ocsd_ptr) pd.compute_climo_cdf(); @@ -2743,8 +2743,7 @@ void write_nc(const ConcatString &field_name, const DataPlane &dp, n_masks = (apply_mask ? conf_info.vx_opt[i_vx].get_n_mask() : 1); // Allocate memory - float *data = (float *) nullptr; - data = new float [grid.nxy()]; + vector data(grid.nxy()); // Set the NetCDF compression level int deflate_level = compress_level; @@ -3001,7 +3000,7 @@ void write_nc(const ConcatString &field_name, const DataPlane &dp, } // end for x // Write out the data - if(!put_nc_data_with_dims(&nc_var, &data[0], grid.ny(), grid.nx())) { + if(!put_nc_data_with_dims(&nc_var, data.data(), grid.ny(), grid.nx())) { mlog << Error << "\nwrite_nc() -> " << "error writing NetCDF variable name " << var_name << "\n\n"; @@ -3010,9 +3009,6 @@ void write_nc(const ConcatString &field_name, const DataPlane &dp, } // end for i - // Deallocate and clean up - if(data) { delete [] data; data = (float *) nullptr; } - return; } @@ -3046,9 +3042,6 @@ void write_nbrhd_nc(const DataPlane &fcst_dp, const DataPlane &obs_dp, // Store the apply_mask option apply_mask = conf_info.vx_opt[i_vx].nc_info.do_apply_mask; - float *fcst_data = (float *) nullptr; - float *obs_data = (float *) nullptr; - NcVar fcst_var; NcVar obs_var; @@ -3081,8 +3074,8 @@ void write_nbrhd_nc(const DataPlane &fcst_dp, const DataPlane &obs_dp, if(!fcst_flag && !obs_flag) return; // Allocate memory for the forecast and observation fields - fcst_data = new float [grid.nxy()]; - obs_data = new float [grid.nxy()]; + vector fcst_data(grid.nxy()); + vector obs_data (grid.nxy()); // Add the forecast variable if(fcst_flag) { @@ -3161,7 +3154,7 @@ void write_nbrhd_nc(const DataPlane &fcst_dp, const DataPlane &obs_dp, // Write out the forecast field if(fcst_flag) { - if(!put_nc_data_with_dims(&fcst_var, &fcst_data[0], grid.ny(), grid.nx())) { + if(!put_nc_data_with_dims(&fcst_var, fcst_data.data(), grid.ny(), grid.nx())) { mlog << Error << "\nwrite_nbrhd_nc() -> " << "error with the fcst_var->put for forecast variable " << fcst_var_name << "\n\n"; @@ -3171,7 +3164,7 @@ void write_nbrhd_nc(const DataPlane &fcst_dp, const DataPlane &obs_dp, // Write out the observation field if(obs_flag) { - if(!put_nc_data_with_dims(&obs_var, &obs_data[0], grid.ny(), grid.nx())) { + if(!put_nc_data_with_dims(&obs_var, obs_data.data(), grid.ny(), grid.nx())) { mlog << Error << "\nwrite_nbrhd_nc() -> " << "error with the obs_var->put for observation variable " << obs_var_name << "\n\n"; @@ -3179,10 +3172,6 @@ void write_nbrhd_nc(const DataPlane &fcst_dp, const DataPlane &obs_dp, } } - // Deallocate and clean up - if(fcst_data) { delete [] fcst_data; fcst_data = (float *) nullptr; } - if(obs_data) { delete [] obs_data; obs_data = (float *) nullptr; } - return; } diff --git a/src/tools/core/mode/mode_exec.cc b/src/tools/core/mode/mode_exec.cc index 2463b97ab9..db43b97ebe 100644 --- a/src/tools/core/mode/mode_exec.cc +++ b/src/tools/core/mode/mode_exec.cc @@ -2378,7 +2378,8 @@ void ModeExecutive::write_poly_netcdf(NcFile *f_out, ObjPolyType poly_type) // // Store the points for each polyline // - for(i=0, n_pts=0; iocmn_na[j], pd_ptr->ocsd_na[j]); // Store the observation value - hira_pd.add_point_obs(pd_ptr->sid_sa[j].c_str(), + hira_pd.add_point_obs( + pd_ptr->typ_sa[j].c_str(), pd_ptr->sid_sa[j].c_str(), pd_ptr->lat_na[j], pd_ptr->lon_na[j], pd_ptr->x_na[j], pd_ptr->y_na[j], pd_ptr->vld_ta[j], pd_ptr->lvl_na[j], pd_ptr->elv_na[j], @@ -1965,7 +1978,11 @@ void do_hira_ens(int i_vx, const PairDataPoint *pd_ptr) { write_orank_row(shc, &hira_pd, conf_info.vx_opt[i_vx].output_flag[i_orank], stat_at, i_stat_row, - txt_at[i_orank], i_txt_row[i_orank]); + txt_at[i_orank], i_txt_row[i_orank], + conf_info.obtype_as_group_val_flag); + + // Reset the obtype column + shc.set_obtype(pd_ptr->msg_typ.c_str()); // Reset the observation valid time shc.set_obs_valid_beg(conf_info.vx_opt[i_vx].vx_pd.beg_ut); @@ -2107,7 +2124,9 @@ void do_hira_prob(int i_vx, const PairDataPoint *pd_ptr) { } // Store the fractional coverage pair - hira_pd.add_point_pair(pd_ptr->sid_sa[k].c_str(), + hira_pd.add_point_pair( + pd_ptr->typ_sa[k].c_str(), + pd_ptr->sid_sa[k].c_str(), pd_ptr->lat_na[k], pd_ptr->lon_na[k], pd_ptr->x_na[k], pd_ptr->y_na[k], pd_ptr->vld_ta[k], pd_ptr->lvl_na[k], pd_ptr->elv_na[k], @@ -2155,7 +2174,12 @@ void do_hira_prob(int i_vx, const PairDataPoint *pd_ptr) { write_mpr_row(shc, &hira_pd, conf_info.vx_opt[i_vx].output_flag[i_mpr], stat_at, i_stat_row, - txt_at[i_mpr], i_txt_row[i_mpr], false); + txt_at[i_mpr], i_txt_row[i_mpr], + conf_info.obtype_as_group_val_flag, + false); + + // Reset the obtype column + shc.set_obtype(pd_ptr->msg_typ.c_str()); // Reset the observation valid time shc.set_obs_valid_beg(conf_info.vx_opt[i_vx].vx_pd.beg_ut); diff --git a/src/tools/core/point_stat/point_stat_conf_info.cc b/src/tools/core/point_stat/point_stat_conf_info.cc index c8ea7c4f70..cfd5e10432 100644 --- a/src/tools/core/point_stat/point_stat_conf_info.cc +++ b/src/tools/core/point_stat/point_stat_conf_info.cc @@ -69,8 +69,10 @@ void PointStatConfInfo::clear() { topo_use_obs_thresh.clear(); topo_interp_fcst_thresh.clear(); msg_typ_group_map.clear(); + obtype_as_group_val_flag = false; mask_area_map.clear(); mask_sid_map.clear(); + point_weight_flag = PointWeightType::None; tmp_dir.clear(); output_prefix.clear(); version.clear(); @@ -151,6 +153,9 @@ void PointStatConfInfo::process_config(GrdFileType ftype) { // Conf: model model = parse_conf_string(&conf, conf_key_model); + // Conf: point_weight_flag + point_weight_flag = parse_conf_point_weight_flag(&conf); + // Conf: tmp_dir tmp_dir = parse_conf_tmp_dir(&conf); @@ -174,6 +179,10 @@ void PointStatConfInfo::process_config(GrdFileType ftype) { // Conf: message_type_group_map msg_typ_group_map = parse_conf_message_type_group_map(&conf); + // Conf: obtype_as_group_val_flag + obtype_as_group_val_flag = + conf.lookup_bool(conf_key_obtype_as_group_val_flag); + // Conf: fcst.field and obs.field fdict = conf.lookup_array(conf_key_fcst_field); odict = conf.lookup_array(conf_key_obs_field); @@ -378,7 +387,6 @@ void PointStatConfInfo::process_flags() { void PointStatConfInfo::process_masks(const Grid &grid) { int i, j; MaskPlane mp; - StringArray sid; ConcatString name; mlog << Debug(2) @@ -444,9 +452,9 @@ void PointStatConfInfo::process_masks(const Grid &grid) { mlog << Debug(3) << "Processing station ID mask: " << vx_opt[i].mask_sid[j] << "\n"; - parse_sid_mask(vx_opt[i].mask_sid[j], sid, name); - sid_map[vx_opt[i].mask_sid[j]] = name; - mask_sid_map[name] = sid; + MaskSID ms = parse_sid_mask(vx_opt[i].mask_sid[j]); + sid_map[vx_opt[i].mask_sid[j]] = ms.name(); + mask_sid_map[ms.name()] = ms; } // Store the name for the current station ID mask diff --git a/src/tools/core/point_stat/point_stat_conf_info.h b/src/tools/core/point_stat/point_stat_conf_info.h index 95bf59a7a7..9db3081dd7 100644 --- a/src/tools/core/point_stat/point_stat_conf_info.h +++ b/src/tools/core/point_stat/point_stat_conf_info.h @@ -235,12 +235,15 @@ class PointStatConfInfo { // Message type groups that should be processed together std::map msg_typ_group_map; + bool obtype_as_group_val_flag; // Mapping of mask names to DataPlanes std::map mask_area_map; // Mapping of mask names to Station ID lists - std::map mask_sid_map; + std::map mask_sid_map; + + PointWeightType point_weight_flag; // Point weighting flag ConcatString tmp_dir; // Directory for temporary files ConcatString output_prefix; // String to customize output file name diff --git a/src/tools/core/series_analysis/series_analysis.cc b/src/tools/core/series_analysis/series_analysis.cc index fa2d4a8ef7..e5c3a62fe8 100644 --- a/src/tools/core/series_analysis/series_analysis.cc +++ b/src/tools/core/series_analysis/series_analysis.cc @@ -970,7 +970,7 @@ void process_scores() { (ocsd_flag ? ocsd_dp(x, y) : bad_data_double)); pd_block[i].add_grid_pair(fcst_dp(x, y), obs_dp(x, y), - cpi, default_grid_weight); + cpi, default_weight); } // end for i } // end for i_series @@ -2273,7 +2273,7 @@ void write_stat_data() { if(deflate_level < 0) deflate_level = conf_info.get_compression_level(); // Allocate memory to store data values for each grid point - float *data = new float [grid.nx()*grid.ny()]; + vector data(grid.nx()*grid.ny()); // Write output for each stat_data map entry for(auto &key : stat_data_keys) { @@ -2300,7 +2300,7 @@ void write_stat_data() { } // end for x // Write out the data - if(!put_nc_data_with_dims(&nc_var, &data[0], grid.ny(), grid.nx())) { + if(!put_nc_data_with_dims(&nc_var, data.data(), grid.ny(), grid.nx())) { mlog << Error << "\nwrite_stat_data() -> " << R"(error writing ")" << key << R"(" data to the output file.)" << "\n\n"; @@ -2308,9 +2308,6 @@ void write_stat_data() { } } - // Clean up - if(data) { delete [] data; data = (float *) nullptr; } - return; } diff --git a/src/tools/core/stat_analysis/aggr_stat_line.cc b/src/tools/core/stat_analysis/aggr_stat_line.cc index 3c6dcd3f22..98df91caad 100644 --- a/src/tools/core/stat_analysis/aggr_stat_line.cc +++ b/src/tools/core/stat_analysis/aggr_stat_line.cc @@ -1728,8 +1728,8 @@ void aggr_wind_lines(LineDataFile &f, STATAnalysisJob &job, // Append the unit vectors with no climatological values // ClimoPntInfo cpi; - m[key].pd_u.add_grid_pair(uf, uo, cpi, default_grid_weight); - m[key].pd_v.add_grid_pair(vf, vo, cpi, default_grid_weight); + m[key].pd_u.add_grid_pair(uf, uo, cpi, default_weight); + m[key].pd_v.add_grid_pair(vf, vo, cpi, default_weight); // // Keep track of the unique header column entries @@ -1837,8 +1837,8 @@ void aggr_mpr_wind_lines(LineDataFile &f, STATAnalysisJob &job, aggr.hdr_sa.add(hdr); ClimoPntInfo u_cpi(ufcmn, ufcsd, uocmn, uocsd); ClimoPntInfo v_cpi(vfcmn, vfcsd, vocmn, vocsd); - aggr.pd_u.add_grid_pair(uf, uo, u_cpi, default_grid_weight); - aggr.pd_v.add_grid_pair(vf, vo, v_cpi, default_grid_weight); + aggr.pd_u.add_grid_pair(uf, uo, u_cpi, default_weight); + aggr.pd_v.add_grid_pair(vf, vo, v_cpi, default_weight); // // Add the new map entry @@ -1903,8 +1903,8 @@ void aggr_mpr_wind_lines(LineDataFile &f, STATAnalysisJob &job, m[key].hdr_sa.add(hdr); ClimoPntInfo u_cpi(ufcmn, ufcsd, uocmn, uocsd); ClimoPntInfo v_cpi(vfcmn, vfcsd, vocmn, vocsd); - m[key].pd_u.add_grid_pair(uf, uo, u_cpi, default_grid_weight); - m[key].pd_v.add_grid_pair(vf, vo, v_cpi, default_grid_weight); + m[key].pd_u.add_grid_pair(uf, uo, u_cpi, default_weight); + m[key].pd_v.add_grid_pair(vf, vo, v_cpi, default_weight); } } @@ -2053,8 +2053,8 @@ void aggr_mpr_wind_lines(LineDataFile &f, STATAnalysisJob &job, double vo; convert_u_v_to_unit(it->second.pd_u.o_na[i], it->second.pd_v.o_na[i], uo, vo); - aggr.pd_u.add_grid_pair(uf, uo, cpi, default_grid_weight); - aggr.pd_v.add_grid_pair(vf, vo, cpi, default_grid_weight); + aggr.pd_u.add_grid_pair(uf, uo, cpi, default_weight); + aggr.pd_v.add_grid_pair(vf, vo, cpi, default_weight); } // @@ -2135,7 +2135,7 @@ void aggr_mpr_lines(LineDataFile &f, STATAnalysisJob &job, aggr.pd.ocmn_na.add(cur.obs_climo_mean); aggr.pd.ocsd_na.add(cur.obs_climo_stdev); aggr.pd.ocdf_na.add(cur.obs_climo_cdf); - aggr.pd.wgt_na.add(default_grid_weight); + aggr.pd.wgt_na.add(default_weight); aggr.fcst_var = cur.fcst_var; aggr.obs_var = cur.obs_var; @@ -2166,7 +2166,7 @@ void aggr_mpr_lines(LineDataFile &f, STATAnalysisJob &job, m[key].pd.ocmn_na.add(cur.obs_climo_mean); m[key].pd.ocsd_na.add(cur.obs_climo_stdev); m[key].pd.ocdf_na.add(cur.obs_climo_cdf); - m[key].pd.wgt_na.add(default_grid_weight); + m[key].pd.wgt_na.add(default_weight); // // Only aggregate consistent variable names @@ -3049,7 +3049,7 @@ void aggr_orank_lines(LineDataFile &f, STATAnalysisJob &job, // ClimoPntInfo cpi(cur.fcst_climo_mean, cur.fcst_climo_stdev, cur.obs_climo_mean, cur.obs_climo_stdev); - m[key].ens_pd.add_grid_obs(cur.obs, cpi, default_grid_weight); + m[key].ens_pd.add_grid_obs(cur.obs, cpi, default_weight); m[key].ens_pd.skip_ba.add(false); m[key].ens_pd.n_pair++; m[key].ens_pd.r_na.add(cur.rank); diff --git a/src/tools/core/stat_analysis/parse_stat_line.cc b/src/tools/core/stat_analysis/parse_stat_line.cc index 3e3c5ae1f3..80a4dd7102 100644 --- a/src/tools/core/stat_analysis/parse_stat_line.cc +++ b/src/tools/core/stat_analysis/parse_stat_line.cc @@ -61,7 +61,6 @@ void parse_fho_ctable(STATLine &l, TTContingencyTable &ct) { double h_rate = atof(l.get_item("H_RATE")); double o_rate = atof(l.get_item("O_RATE")); - // MET #2887: JHG multiple by the sum of the weights here instead? double fy = n_pairs * f_rate; double fy_oy = n_pairs * h_rate; double oy = n_pairs * o_rate; diff --git a/src/tools/core/wavelet_stat/wavelet_stat.cc b/src/tools/core/wavelet_stat/wavelet_stat.cc index 70f55ed870..89d05ce6ae 100644 --- a/src/tools/core/wavelet_stat/wavelet_stat.cc +++ b/src/tools/core/wavelet_stat/wavelet_stat.cc @@ -953,13 +953,6 @@ int get_tile_tot_count() { void do_intensity_scale(const NumArray &f_na, const NumArray &o_na, ISCInfo *&isc_info, int i_vx, int i_tile) { - double *f_dat = (double *) nullptr; // Raw and thresholded binary fields - double *o_dat = (double *) nullptr; // Raw and thresholded binary fields - double *f_dwt = (double *) nullptr; // Discrete wavelet transformations - double *o_dwt = (double *) nullptr; // Discrete wavelet transformations - double *f_scl = (double *) nullptr; // Binary field decomposed by scale - double *o_scl = (double *) nullptr; // Binary field decomposed by scale - double *diff = (double *) nullptr; // Difference field double mse, fen, oen, mad; int n, ns, n_isc; int bnd, row, col; @@ -999,13 +992,13 @@ void do_intensity_scale(const NumArray &f_na, const NumArray &o_na, } // Allocate space - f_dat = new double [n]; - o_dat = new double [n]; - f_dwt = new double [n]; - o_dwt = new double [n]; - f_scl = new double [n]; - o_scl = new double [n]; - diff = new double [n]; + vector f_dat(n); // Raw and thresholded binary fields + vector o_dat(n); // Raw and thresholded binary fields + vector f_dwt(n); // Discrete wavelet transformations + vector o_dwt(n); // Discrete wavelet transformations + vector f_scl(n); // Binary field decomposed by scale + vector o_scl(n); // Binary field decomposed by scale + vector diff (n); // Difference field // Initialize f_dat and o_dat for(i=0; i data(n); dp.data_range(dmin, dmax); mlog << Debug(2) @@ -319,7 +319,7 @@ void write_nc_bin(const DataPlane &dp, int i_cdf, double cdf_y) { } // Write out the gridded field of CDF X-values - if(!put_nc_data(&cdf_x_var, &data[0], lengths, offsets)) { + if(!put_nc_data(&cdf_x_var, data.data(), lengths, offsets)) { mlog << Error << "\nwrite_nc_bin() -> " << "error writing NetCDF variable name \"" << var_name << "\" for the " << i_cdf @@ -327,9 +327,6 @@ void write_nc_bin(const DataPlane &dp, int i_cdf, double cdf_y) { exit(1); } - // Deallocate and clean up - if(data) { delete [] data; data = (float *) nullptr; } - return; } diff --git a/src/tools/other/ascii2nc/ascii2nc.cc b/src/tools/other/ascii2nc/ascii2nc.cc index 940e12cedf..c8fb632dda 100644 --- a/src/tools/other/ascii2nc/ascii2nc.cc +++ b/src/tools/other/ascii2nc/ascii2nc.cc @@ -743,18 +743,18 @@ void set_mask_poly(const StringArray & a) { //////////////////////////////////////////////////////////////////////// void set_mask_sid(const StringArray & a) { - ConcatString mask_name; // List the station ID mask mlog << Debug(1) << "Station ID Mask: " << a[0] << "\n"; - parse_sid_mask(a[0], mask_sid, mask_name); + MaskSID ms = parse_sid_mask(a[0]); + for(const auto &pair : ms.sid_map()) mask_sid.add(pair.first); // List the length of the station ID mask mlog << Debug(2) - << "Parsed Station ID Mask: " << mask_name - << " containing " << mask_sid.n_elements() << " points\n"; + << "Parsed Station ID Mask (" << ms.name() + << ") containing " << mask_sid.n() << " stations\n"; } //////////////////////////////////////////////////////////////////////// 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 9f36c55ad3..d552e90405 100644 --- a/src/tools/other/gen_ens_prod/gen_ens_prod.cc +++ b/src/tools/other/gen_ens_prod/gen_ens_prod.cc @@ -821,14 +821,14 @@ void write_ens_nc(GenEnsProdVarInfo *ens_info, int n_ens_vld, DataPlane prob_dp, nbrhd_dp; // Allocate memory for storing ensemble data - float *ens_mean = new float [nxy]; - float *ens_stdev = new float [nxy]; - float *ens_minus = new float [nxy]; - float *ens_plus = new float [nxy]; - float *ens_min = new float [nxy]; - float *ens_max = new float [nxy]; - float *ens_range = new float [nxy]; - int *ens_vld = new int [nxy]; + vector ens_mean (nxy); + vector ens_stdev (nxy); + vector ens_minus (nxy); + vector ens_plus (nxy); + vector ens_min (nxy); + vector ens_max (nxy); + vector ens_range (nxy); + vector ens_vld (nxy); // Store the threshold for the ratio of valid data points t = conf_info.vld_data_thresh; @@ -865,56 +865,56 @@ void write_ens_nc(GenEnsProdVarInfo *ens_info, int n_ens_vld, // Add the ensemble mean, if requested if(ens_info->nc_info.do_mean) { - write_ens_var_float(ens_info, ens_mean, ens_dp, + write_ens_var_float(ens_info, ens_mean.data(), ens_dp, "ENS_MEAN", "Ensemble Mean"); } // Add the ensemble standard deviation, if requested if(ens_info->nc_info.do_stdev) { - write_ens_var_float(ens_info, ens_stdev, ens_dp, + write_ens_var_float(ens_info, ens_stdev.data(), ens_dp, "ENS_STDEV", "Ensemble Standard Deviation"); } // Add the ensemble mean minus one standard deviation, if requested if(ens_info->nc_info.do_minus) { - write_ens_var_float(ens_info, ens_minus, ens_dp, + write_ens_var_float(ens_info, ens_minus.data(), ens_dp, "ENS_MINUS", "Ensemble Mean Minus 1 Standard Deviation"); } // Add the ensemble mean plus one standard deviation, if requested if(ens_info->nc_info.do_plus) { - write_ens_var_float(ens_info, ens_plus, ens_dp, + write_ens_var_float(ens_info, ens_plus.data(), ens_dp, "ENS_PLUS", "Ensemble Mean Plus 1 Standard Deviation"); } // Add the ensemble minimum value, if requested if(ens_info->nc_info.do_min) { - write_ens_var_float(ens_info, ens_min, ens_dp, + write_ens_var_float(ens_info, ens_min.data(), ens_dp, "ENS_MIN", "Ensemble Minimum"); } // Add the ensemble maximum value, if requested if(ens_info->nc_info.do_max) { - write_ens_var_float(ens_info, ens_max, ens_dp, + write_ens_var_float(ens_info, ens_max.data(), ens_dp, "ENS_MAX", "Ensemble Maximum"); } // Add the ensemble range, if requested if(ens_info->nc_info.do_range) { - write_ens_var_float(ens_info, ens_range, ens_dp, + write_ens_var_float(ens_info, ens_range.data(), ens_dp, "ENS_RANGE", "Ensemble Range"); } // Add the ensemble valid data count, if requested if(ens_info->nc_info.do_vld) { - write_ens_var_int(ens_info, ens_vld, ens_dp, + write_ens_var_int(ens_info, ens_vld.data(), ens_dp, "ENS_VLD", "Ensemble Valid Data Count"); } @@ -1061,16 +1061,6 @@ void write_ens_nc(GenEnsProdVarInfo *ens_info, int n_ens_vld, } // end for it } - // Deallocate and clean up - if(ens_mean) { delete [] ens_mean; ens_mean = (float *) nullptr; } - if(ens_stdev) { delete [] ens_stdev; ens_stdev = (float *) nullptr; } - if(ens_minus) { delete [] ens_minus; ens_minus = (float *) nullptr; } - if(ens_plus) { delete [] ens_plus; ens_plus = (float *) nullptr; } - if(ens_min) { delete [] ens_min; ens_min = (float *) nullptr; } - if(ens_max) { delete [] ens_max; ens_max = (float *) nullptr; } - if(ens_range) { delete [] ens_range; ens_range = (float *) nullptr; } - if(ens_vld) { delete [] ens_vld; ens_vld = (int *) nullptr; } - return; } diff --git a/src/tools/other/gen_vx_mask/gen_vx_mask.cc b/src/tools/other/gen_vx_mask/gen_vx_mask.cc index 98b15a212a..83fe7cc568 100644 --- a/src/tools/other/gen_vx_mask/gen_vx_mask.cc +++ b/src/tools/other/gen_vx_mask/gen_vx_mask.cc @@ -401,9 +401,8 @@ void get_data_plane(const ConcatString &file_name, } // Attempt to open the data file - Met2dDataFileFactory mtddf_factory; - Met2dDataFile *mtddf_ptr = (Met2dDataFile *) nullptr; - mtddf_ptr = mtddf_factory.new_met_2d_data_file(file_name.c_str(), ftype); + Met2dDataFile *mtddf_ptr = Met2dDataFileFactory::new_met_2d_data_file( + file_name.c_str(), ftype); if(!mtddf_ptr) { mlog << Error << "\nget_data_plane() -> " << "can't open input file \"" << file_name << "\"\n\n"; @@ -423,9 +422,7 @@ void get_data_plane(const ConcatString &file_name, if(local_cs.length() > 0) { // Allocate new VarInfo object - VarInfoFactory vi_factory; - VarInfo *vi_ptr = (VarInfo *) nullptr; - vi_ptr = vi_factory.new_var_info(mtddf_ptr->file_type()); + VarInfo *vi_ptr = VarInfoFactory::new_var_info(mtddf_ptr->file_type()); if(!vi_ptr) { mlog << Error << "\nget_data_plane() -> " << "can't allocate new VarInfo pointer.\n\n"; @@ -444,7 +441,8 @@ void get_data_plane(const ConcatString &file_name, } // Dump the range of data values read - double dmin, dmax; + double dmin; + double dmax; dp.data_range(dmin, dmax); mlog << Debug(3) << "Read field \"" << vi_ptr->magic_str() << "\" from \"" @@ -471,7 +469,6 @@ bool get_gen_vx_mask_config_str(MetNcMetDataFile *mnmdf_ptr, ConcatString &config_str) { bool status = false; ConcatString tool; - int i; // Check for null pointer if(!mnmdf_ptr) return status; @@ -483,7 +480,7 @@ bool get_gen_vx_mask_config_str(MetNcMetDataFile *mnmdf_ptr, if(tool != program_name) return status; // Loop through the NetCDF variables - for(i=0; iMetNc->Nvars; i++) { + for(int i=0; iMetNc->Nvars; i++) { // Skip the lat/lon variables if(mnmdf_ptr->MetNc->Var[i].name == "lat" || @@ -515,7 +512,7 @@ void get_shapefile_strings() { << dbf_filename << "\n"; // Open the database file - if(!(f.open(dbf_filename.c_str()))) { + if(!f.open(dbf_filename.c_str())) { mlog << Error << "\nget_shapefile_strings() -> " << "unable to open database file \"" << dbf_filename << "\"\n\n"; @@ -582,7 +579,7 @@ void get_shapefile_records() { } // Open shapefile - if(!(f.open(shape_filename))) { + if(!f.open(shape_filename)) { mlog << Error << "\nget_shapefile_records() -> " << "unable to open shape file \"" << shape_filename << "\"\n\n"; @@ -667,13 +664,14 @@ bool is_shape_str_match(const int i_shape, const StringArray &names, const Strin //////////////////////////////////////////////////////////////////////// void apply_poly_mask(DataPlane & dp) { - int x, y, n_in; + int n_in = 0; bool inside; - double lat, lon; + double lat; + double lon; // Check the Lat/Lon of each grid point being inside the polyline - for(x=0,n_in=0; x::const_iterator poly_it; for(poly_it = poly_list.begin(); @@ -1285,7 +1295,7 @@ void apply_shape_mask(DataPlane & dp) { DataPlane combine(const DataPlane &dp_data, const DataPlane &dp_mask, SetLogic logic) { - int x, y, n_in; + int n_in = 0; bool v_data, v_mask; double v; DataPlane dp; @@ -1309,8 +1319,8 @@ DataPlane combine(const DataPlane &dp_data, const DataPlane &dp_mask, dp.set_size(grid.nx(), grid.ny()); // Process each point - for(x=0,n_in=0; x mask_data(grid.nx()*grid.ny()); // Loop through each grid point - for(x=0; x " << "error with mask_var->put\n\n"; - // Delete allocated memory - if(mask_data) { delete[] mask_data; mask_data = (float *) nullptr; } exit(1); } - // Delete allocated memory - if(mask_data) { delete[] mask_data; mask_data = (float *) nullptr; } - delete f_out; f_out = (NcFile *) nullptr; diff --git a/src/tools/other/gsi_tools/gsidens2orank.cc b/src/tools/other/gsi_tools/gsidens2orank.cc index 39edb87cc5..d7d4b5bee4 100644 --- a/src/tools/other/gsi_tools/gsidens2orank.cc +++ b/src/tools/other/gsi_tools/gsidens2orank.cc @@ -269,9 +269,9 @@ void process_conv_data(ConvData &d, int i_mem) { // Store the current observation info ClimoPntInfo cpi(bad_data_double, bad_data_double, bad_data_double, bad_data_double); - ens_pd.add_point_obs(d.sid.c_str(), d.lat, d.lon, + ens_pd.add_point_obs(d.obtype.c_str(), d.sid.c_str(), d.lat, d.lon, bad_data_double, bad_data_double, d.obs_ut, d.prs, - d.elv, d.obs, na_str, cpi, default_grid_weight); + d.elv, d.obs, na_str, cpi, default_weight); // Initialize ensemble members and mean to bad data for(i=0; i hdr_lat_arr (nlocs); + vector hdr_lon_arr (nlocs); + vector hdr_elv_arr (nlocs); + vector obs_pres_arr (nlocs); + vector obs_hght_arr (nlocs); + vector hdr_time_arr (nlocs); char *hdr_vld_block = new char[nlocs*ndatetime]; char *hdr_msg_types = nullptr; char *hdr_station_ids = nullptr; @@ -592,9 +592,9 @@ void process_ioda_file(int i_pb) { for (int i=0; i ibuf(n_data, 0); mlog << Debug(2) << "Processing Lidar points\t= " << n_data << "\n"; @@ -379,17 +379,13 @@ mlog << Debug(2) << "Processing Lidar points\t= " << n_data << "\n"; // populate the hdr_typ variable // -memset(ibuf, 0, n_data*sizeof(int)); - -obs_vars->hdr_typ_var.putVar(ibuf); +obs_vars->hdr_typ_var.putVar(ibuf.data()); // // populate the hdr_sid variable // -memset(ibuf, 0, n_data*sizeof(int)); - -obs_vars->hdr_sid_var.putVar(ibuf); +obs_vars->hdr_sid_var.putVar(ibuf.data()); nc_point_obs.add_header_strings(hdr_typ_string, na_str); // @@ -401,13 +397,9 @@ nc_point_obs.add_header_strings(hdr_typ_string, na_str); float ff[2]; -float *fhdr_lat_buf = new float[n_data]; -float *fhdr_lon_buf = new float[n_data]; -float *fhdr_elv_buf = new float[n_data]; - -memset(fhdr_lat_buf, 0, n_data * sizeof(float)); -memset(fhdr_lon_buf, 0, n_data * sizeof(float)); -memset(fhdr_elv_buf, 0, n_data * sizeof(float)); +vector fhdr_lat_buf(n_data, 0.0); +vector fhdr_lon_buf(n_data, 0.0); +vector fhdr_elv_buf(n_data, 0.0); for (j=0; jhdr_lat_var.putVar(fhdr_lat_buf); -obs_vars->hdr_lon_var.putVar(fhdr_lon_buf); -obs_vars->hdr_elv_var.putVar(fhdr_elv_buf); +obs_vars->hdr_lat_var.putVar(fhdr_lat_buf.data()); +obs_vars->hdr_lon_var.putVar(fhdr_lon_buf.data()); +obs_vars->hdr_elv_var.putVar(fhdr_elv_buf.data()); -delete [] fhdr_lat_buf; -delete [] fhdr_lon_buf; -delete [] fhdr_elv_buf; - // // populate the hdr_vld variable // @@ -441,8 +429,6 @@ unixtime t; get_hdf_var_info(hdf_sd_id, hdf_time_name, info); -memset(ibuf, 0, n_data*sizeof(int)); - for (j=0; jhdr_vld_var.putVar(ibuf); +obs_vars->hdr_vld_var.putVar(ibuf.data()); -delete[] ibuf; - // // populate the obs_arr variable // @@ -585,7 +569,7 @@ void write_nc_record(const float * f, int qc_value) snprintf(junk, sizeof(junk), "%d", qc_value); nc_point_obs.write_observation(f, junk); } - + return; } diff --git a/src/tools/other/madis2nc/madis2nc.cc b/src/tools/other/madis2nc/madis2nc.cc index 63626c6908..8831dde2aa 100644 --- a/src/tools/other/madis2nc/madis2nc.cc +++ b/src/tools/other/madis2nc/madis2nc.cc @@ -3737,18 +3737,18 @@ void set_mask_poly(const StringArray & a) { //////////////////////////////////////////////////////////////////////// void set_mask_sid(const StringArray & a) { - ConcatString mask_name; // List the station ID mask mlog << Debug(1) << "Station ID Mask: " << a[0] << "\n"; - parse_sid_mask(a[0], mask_sid, mask_name); + MaskSID ms = parse_sid_mask(a[0]); + for(const auto &pair : ms.sid_map()) mask_sid.add(pair.first); // List the length of the station ID mask mlog << Debug(2) - << "Parsed Station ID Mask: " << mask_name - << " containing " << mask_sid.n_elements() << " points\n"; + << "Parsed Station ID Mask (" << ms.name() + << ") containing " << mask_sid.n() << " stations\n"; } //////////////////////////////////////////////////////////////////////// diff --git a/src/tools/other/mode_time_domain/mtd_nc_output.cc b/src/tools/other/mode_time_domain/mtd_nc_output.cc index 351dac497e..4d8190771f 100644 --- a/src/tools/other/mode_time_domain/mtd_nc_output.cc +++ b/src/tools/other/mode_time_domain/mtd_nc_output.cc @@ -215,11 +215,11 @@ NcVar lon_var = add_var(&out, lon_name, ncFloat, ny_dim, nx_dim); add_att(&lat_var, "long_name", "Latitude"); add_att(&lon_var, "long_name", "Longitude"); -float * lat_data = new float [nx*ny]; -float * lon_data = new float [nx*ny]; +vector lat_data(nx*ny); +vector lon_data(nx*ny); -Lat = lat_data; -Lon = lon_data; +Lat = lat_data.data(); +Lon = lon_data.data(); for (y=0; y out_data(n3); const string name = ( is_fcst ? fcst_clus_id_name : obs_clus_id_name ); @@ -363,7 +357,7 @@ add_att(&var, "_FillValue", bad_data_int); const int n_objects = ( is_fcst ? (e.n_fcst_simples()) : (e.n_obs_simples()) ); -remap = new int [n_objects + 1]; +vector remap(n_objects + 1); remap[0] = 0; @@ -378,26 +372,20 @@ for (j=1; j<=n_objects; ++j) { } -op = out_data; - for (j=0; j " << "error writing data to the output file.\n\n"; exit(1); @@ -1726,7 +1726,7 @@ void write_nc_data_int(const DataPlane &dp, const Grid &grid, NcVar *data_var) { } // end for x // Write out the data - if(!put_nc_data_with_dims(data_var, &data.data()[0], grid.ny(), grid.nx())) { + if(!put_nc_data_with_dims(data_var, data.data(), grid.ny(), grid.nx())) { mlog << Error << "\nwrite_nc_data_int() -> " << "error writing data to the output file.\n\n"; exit(1); diff --git a/src/tools/other/regrid_data_plane/regrid_data_plane.cc b/src/tools/other/regrid_data_plane/regrid_data_plane.cc index 28ec4704ea..0306c670a6 100644 --- a/src/tools/other/regrid_data_plane/regrid_data_plane.cc +++ b/src/tools/other/regrid_data_plane/regrid_data_plane.cc @@ -390,7 +390,7 @@ void open_nc(const Grid &grid, ConcatString run_cs) { void write_nc_data(const DataPlane &dp, const Grid &grid, NcVar *data_var) { // Allocate memory to store data values for each grid point - float *data = new float [grid.nx()*grid.ny()]; + vector data(grid.nx()*grid.ny()); // Store the data int grid_nx = grid.nx(); @@ -403,15 +403,12 @@ void write_nc_data(const DataPlane &dp, const Grid &grid, NcVar *data_var) { } // end for x // Write out the data - if(!put_nc_data_with_dims(data_var, &data[0], grid.ny(), grid.nx())) { + if(!put_nc_data_with_dims(data_var, data.data(), grid.ny(), grid.nx())) { mlog << Error << "\nwrite_nc_data() -> " << "error writing data to the output file.\n\n"; exit(1); } - // Clean up - if(data) { delete [] data; data = (float *) nullptr; } - return; } diff --git a/src/tools/other/shift_data_plane/shift_data_plane.cc b/src/tools/other/shift_data_plane/shift_data_plane.cc index 40e2f742bc..7f5e56da5b 100644 --- a/src/tools/other/shift_data_plane/shift_data_plane.cc +++ b/src/tools/other/shift_data_plane/shift_data_plane.cc @@ -336,7 +336,7 @@ void write_netcdf(const DataPlane &dp, const Grid &grid, add_att(&data_var, "smoothing_shape", gtf.enum2String(Shape)); // Allocate memory to store data values for each grid point - float *data = new float [grid.nx()*grid.ny()]; + vector data(grid.nx()*grid.ny()); // Store the data for(int x=0; x " << "error writing data to the output file.\n\n"; exit(1); } // Clean up - if(data) { delete [] data; data = (float *) nullptr; } if(f_out) { delete f_out; f_out = (NcFile *) nullptr; } diff --git a/src/tools/tc_utils/tc_diag/tc_diag.cc b/src/tools/tc_utils/tc_diag/tc_diag.cc index c4b76a7cdd..1644333772 100644 --- a/src/tools/tc_utils/tc_diag/tc_diag.cc +++ b/src/tools/tc_utils/tc_diag/tc_diag.cc @@ -1331,14 +1331,11 @@ void copy_time_vars(NcFile *to_nc, NcFile *from_nc, int i_time) { } // Allocate buffer - double *buf = new double[buf_size]; + vector buf(buf_size); // Copy the data for this time slice - get_nc_data(&from_var, buf); - to_var.putVar(offsets, counts, buf); - - // Cleanup - if(buf) { delete[] buf; buf = (double *) nullptr; } + get_nc_data(&from_var, buf.data()); + to_var.putVar(offsets, counts, buf.data()); } // end for i @@ -1665,7 +1662,7 @@ void OutFileInfo::write_nc_diag() { // Allocate space int n_prs_data = vld_dim.getSize() * prs_dim.getSize(); - float *prs_data = new float [n_prs_data]; + vector prs_data(n_prs_data); ConcatString diag_name; // Loop over the pressure diagnostic names @@ -1698,7 +1695,7 @@ void OutFileInfo::write_nc_diag() { } // end for j // Write the data - write_nc_diag_prs_vals(prs_diag[i], prs_data); + write_nc_diag_prs_vals(prs_diag[i], prs_data.data()); } // end for i @@ -1708,9 +1705,6 @@ void OutFileInfo::write_nc_diag() { write_nc_diag_vals(*it, diag_custom_map.at(*it)); } - // Clean up - if(prs_data) { delete [] prs_data; prs_data = (float *) nullptr; } - return; } @@ -2198,8 +2192,8 @@ void TmpFileInfo::setup_nc_file(const DomainInfo &di, // Define latitude and longitude arrays TcrmwData d = di.data; int nra = d.range_n * d.azimuth_n; - double *lat_arr = new double[nra]; - double *lon_arr = new double[nra]; + vector lat_arr(nra); + vector lon_arr(nra); // Set grid center d.lat_center = pnt_ptr->lat(); @@ -2262,19 +2256,15 @@ void TmpFileInfo::setup_nc_file(const DomainInfo &di, lat_var, lon_var); // Compute lat and lon coordinate arrays - compute_lat_lon(ra_grid, lat_arr, lon_arr); + compute_lat_lon(ra_grid, lat_arr.data(), lon_arr.data()); // Write coordinate arrays - write_tc_data(tmp_out, ra_grid, 0, lat_var, lat_arr); - write_tc_data(tmp_out, ra_grid, 0, lon_var, lon_arr); + write_tc_data(tmp_out, ra_grid, 0, lat_var, lat_arr.data()); + write_tc_data(tmp_out, ra_grid, 0, lon_var, lon_arr.data()); // Write track point values write_tc_track_point(tmp_out, vld_dim, *pnt_ptr); - // Clean up - if(lat_arr) { delete[] lat_arr; lat_arr = (double *) nullptr; } - if(lon_arr) { delete[] lon_arr; lon_arr = (double *) nullptr; } - return; } diff --git a/src/tools/tc_utils/tc_dland/tc_dland.cc b/src/tools/tc_utils/tc_dland/tc_dland.cc index 0a563b5e30..97c1e21d25 100644 --- a/src/tools/tc_utils/tc_dland/tc_dland.cc +++ b/src/tools/tc_utils/tc_dland/tc_dland.cc @@ -203,7 +203,6 @@ void process_land_data() { void process_distances() { int n, x, y, c, npts, nlog, imin; double lat, lon; - float *dland = (float *) nullptr; // Instantiate the grid Grid grid(GridData); @@ -250,7 +249,7 @@ void process_distances() { add_att(&dland_var, "_FillValue", bad_data_float); // Allocate memory to store the data values for each grid point - dland = new float [grid.nx()*grid.ny()]; + vector dland(grid.nx()*grid.ny()); // Dump out grid info mlog << Debug(2) @@ -294,16 +293,13 @@ void process_distances() { // Write the computed distances to the output file mlog << Debug(3) << "Writing distance to land variable.\n"; - if(!put_nc_data_with_dims(&dland_var, &dland[0], grid.ny(), grid.nx())) { - if(dland) { delete [] dland; dland = (float *) nullptr; } + if(!put_nc_data_with_dims(&dland_var, dland.data(), grid.ny(), grid.nx())) { + delete f_out; mlog << Error << "\nprocess_distances() -> " << "error with dland_var->put\n\n"; exit(1); } - // Delete allocated memory - if(dland) { delete [] dland; dland = (float *) nullptr; } - // Close the output NetCDF file delete f_out; f_out = (NcFile *) nullptr; diff --git a/src/tools/tc_utils/tc_gen/tc_gen.cc b/src/tools/tc_utils/tc_gen/tc_gen.cc index 7c6a44c16e..c02f65e9b4 100644 --- a/src/tools/tc_utils/tc_gen/tc_gen.cc +++ b/src/tools/tc_utils/tc_gen/tc_gen.cc @@ -2412,10 +2412,9 @@ void write_nc(GenCTCInfo &gci) { unixtime valid_end = (unixtime) 0; // Allocate memory - float *data = (float *) nullptr; int nx = gci.NcOutGrid->nx(); int ny = gci.NcOutGrid->ny(); - data = new float [nx*ny]; + vector data(nx*ny, 0.0); // Loop over vector of output types for(i=0; i " << "error writing NetCDF variable name " << var_name << "\n\n"; @@ -2543,9 +2539,6 @@ void write_nc(GenCTCInfo &gci) { } } - // Deallocate and clean up - if(data) { delete [] data; data = (float *) nullptr; } - return; }