From ab0f2c6893996b6ac9a2d069fe7b09ca8394b915 Mon Sep 17 00:00:00 2001 From: johnhg Date: Fri, 26 Feb 2021 09:26:18 -0700 Subject: [PATCH 01/28] Per #1429, enhance error message from DataLine::get_item(). (#1682) --- met/src/basic/vx_util/data_line.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/met/src/basic/vx_util/data_line.cc b/met/src/basic/vx_util/data_line.cc index ab16353db1..1853449b65 100644 --- a/met/src/basic/vx_util/data_line.cc +++ b/met/src/basic/vx_util/data_line.cc @@ -253,7 +253,11 @@ const char * DataLine::get_item(int k) const if ( (k < 0) || (k >= N_items) ) { - mlog << Error << "\nDataLine::get_item(int) -> range check error\n\n"; + ConcatString filename = (get_file() ? get_file()->filename() : ""); + + mlog << Error << "\nDataLine::get_item(int) -> " + << "range check error while reading item number " << k+1 + << " from file \"" << filename << "\"\n\n"; exit ( 1 ); @@ -640,7 +644,8 @@ LineDataFile::LineDataFile(const LineDataFile &) { -mlog << Error << "\nLineDataFile::LineDataFile(const LineDataFile &) -> should never be called!\n\n"; +mlog << Error << "\nLineDataFile::LineDataFile(const LineDataFile &) -> " + << "should never be called!\n\n"; exit ( 1 ); @@ -654,7 +659,8 @@ LineDataFile & LineDataFile::operator=(const LineDataFile &) { -mlog << Error << "\nLineDataFile::operator=(const LineDataFile &) -> should never be called!\n\n"; +mlog << Error << "\nLineDataFile::operator=(const LineDataFile &) -> " + << "should never be called!\n\n"; exit ( 1 ); @@ -698,7 +704,8 @@ in = new ifstream; if ( !in ) { - mlog << Error << "\nLineDataFile::open(const char *) -> can't allocate input stream\n\n"; + mlog << Error << "\nLineDataFile::open(const char *) -> " + << "can't allocate input stream\n\n"; exit ( 1 ); From b2754b405d8f2212fd24f29245faed5be4f873d9 Mon Sep 17 00:00:00 2001 From: johnhg Date: Fri, 26 Feb 2021 10:17:01 -0700 Subject: [PATCH 02/28] Feature 1429 tc_log second try (#1686) * Per #1429, enhance error message from DataLine::get_item(). * Per #1429, I realize that the line number actually is readily available in the DataLine class... so include it in the error message. --- met/src/basic/vx_util/data_line.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/met/src/basic/vx_util/data_line.cc b/met/src/basic/vx_util/data_line.cc index 1853449b65..da012b9a0a 100644 --- a/met/src/basic/vx_util/data_line.cc +++ b/met/src/basic/vx_util/data_line.cc @@ -253,11 +253,12 @@ const char * DataLine::get_item(int k) const if ( (k < 0) || (k >= N_items) ) { - ConcatString filename = (get_file() ? get_file()->filename() : ""); + ConcatString cs = (File ? File->filename() : ""); mlog << Error << "\nDataLine::get_item(int) -> " - << "range check error while reading item number " << k+1 - << " from file \"" << filename << "\"\n\n"; + << "range check error reading line number " << LineNumber + << ", item number " << k+1 << " of " << N_items + << " from file \"" << cs << "\"\n\n"; exit ( 1 ); From a1aead4ebcb2edc6a6deb4f225bc9f0a042aa477 Mon Sep 17 00:00:00 2001 From: johnhg Date: Fri, 26 Feb 2021 15:44:33 -0700 Subject: [PATCH 03/28] Feature 1588 ps_log (#1687) * Per #1588, updated pair_data_point.h/.cc to add detailed Debug(4) log messages, as specified in the GitHub issue. Do still need to test each of these cases to confirm that the log messages look good. * Per #1588, switch very detailed interpolation details from debug level 4 to 5. * Per #1588, remove the Debug(4) log message about duplicate obs since it's been moved up to a higher level. * Per #1588, add/update detailed log messages when processing point observations for bad data, off the grid, bad topo, big topo diffs, bad fcst value, and duplicate obs. --- met/src/basic/vx_util/interp_util.cc | 2 +- met/src/libcode/vx_statistics/pair_base.cc | 8 +- .../libcode/vx_statistics/pair_data_point.cc | 113 ++++++++++++++---- .../libcode/vx_statistics/pair_data_point.h | 7 ++ 4 files changed, 98 insertions(+), 32 deletions(-) diff --git a/met/src/basic/vx_util/interp_util.cc b/met/src/basic/vx_util/interp_util.cc index 90f3ae8c3f..9cb8a3d552 100644 --- a/met/src/basic/vx_util/interp_util.cc +++ b/met/src/basic/vx_util/interp_util.cc @@ -686,7 +686,7 @@ double interp_geog_match(const DataPlane &dp, const GridTemplate >, } if(!is_bad_data(interp_v)) { - mlog << Debug(4) + mlog << Debug(5) << "For observation value " << obs_v << " at grid (x, y) = (" << obs_x << ", " << obs_y << ") found forecast value " << interp_v << " at nearest matching geography point (" diff --git a/met/src/libcode/vx_statistics/pair_base.cc b/met/src/libcode/vx_statistics/pair_base.cc index bfcebaad0c..490037c78b 100644 --- a/met/src/libcode/vx_statistics/pair_base.cc +++ b/met/src/libcode/vx_statistics/pair_base.cc @@ -424,13 +424,7 @@ bool PairBase::add_point_obs(const char *sid, if(check_unique) { vector::iterator o_it = (*it).second.obs.begin(); for(;o_it != (*it).second.obs.end(); o_it++) { - if( (*o_it).ut == ut) { - mlog << Debug(4) - << "Skipping duplicate observation for [lat:lon:level:elevation] = [" - << obs_key << "] valid at " << unix_to_yyyymmdd_hhmmss(ut) - << " with value = " << o << "\n"; - return false; - } + if((*o_it).ut == ut) return false; } } diff --git a/met/src/libcode/vx_statistics/pair_data_point.cc b/met/src/libcode/vx_statistics/pair_data_point.cc index f5f1bc94e8..813ab5f815 100644 --- a/met/src/libcode/vx_statistics/pair_data_point.cc +++ b/met/src/libcode/vx_statistics/pair_data_point.cc @@ -603,12 +603,12 @@ void VxPairDataPoint::set_pd_size(int types, int masks, int interps) { rej_dup[i][j] = new int [n_interp]; for(k=0; kname() ) { + if(var_name != obs_info->name()) { rej_var++; return; } @@ -805,10 +805,10 @@ void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, // Check if the observation quality flag is included in the list if(obs_qty_filt.n() && strcmp(obs_qty, "")) { bool qty_match = false; - for(i=0; imagic_str() << " versus " + << obs_info->magic_str() + << ", skipping observation with bad data value:\n" + << point_obs_to_string(hdr_arr, hdr_typ_str, hdr_sid_str, + hdr_ut, obs_qty, obs_arr, var_name) + << "\n"; rej_obs++; return; } @@ -845,6 +852,15 @@ void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, // Check if the observation's lat/lon is on the grid if(x < 0 || x >= gr.nx() || y < 0 || y >= gr.ny()) { + mlog << Debug(4) + << "For " << fcst_info->magic_str() << " versus " + << obs_info->magic_str() + << ", skipping observation off the grid where (x, y) = (" + << x << ", " << y << ") and grid (nx, ny) = (" << gr.nx() + << ", " << gr.ny() << "):\n" + << point_obs_to_string(hdr_arr, hdr_typ_str, hdr_sid_str, + hdr_ut, obs_qty, obs_arr, var_name) + << "\n"; rej_grd++; return; } @@ -861,12 +877,14 @@ void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, // Skip bad topography values if(is_bad_data(hdr_elv) || is_bad_data(topo)) { mlog << Debug(4) - << "Skipping observation due to missing topography values for " - << "[msg_typ:sid:lat:lon:elevation] = [" - << hdr_typ_str << ":" << hdr_sid_str << ":" - << hdr_lat << ":" << -1.0*hdr_lon << ":" - << hdr_elv << "] and model topography = " - << topo << ".\n"; + << "For " << fcst_info->magic_str() << " versus " + << obs_info->magic_str() + << ", skipping observation due to bad topography values " + << "where observation elevation = " << hdr_elv + << " and model topography = " << topo << ":\n" + << point_obs_to_string(hdr_arr, hdr_typ_str, hdr_sid_str, + hdr_ut, obs_qty, obs_arr, var_name) + << "\n"; rej_topo++; return; } @@ -874,14 +892,16 @@ void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, // Check the topography difference threshold if(!sfc_info.topo_use_obs_thresh.check(topo - hdr_elv)) { mlog << Debug(4) - << "Skipping observation for topography difference since " + << "For " << fcst_info->magic_str() << " versus " + << obs_info->magic_str() + << ", skipping observation due to topography difference " + << "where observation elevation (" << hdr_elv + << ") minus model topography (" << topo << ") = " << topo - hdr_elv << " is not " - << sfc_info.topo_use_obs_thresh.get_str() << " for " - << "[msg_typ:sid:lat:lon:elevation] = [" - << hdr_typ_str << ":" << hdr_sid_str << ":" - << hdr_lat << ":" << -1.0*hdr_lon << ":" - << hdr_elv << "] and model topography = " - << topo << ".\n"; + << sfc_info.topo_use_obs_thresh.get_str() << ":\n" + << point_obs_to_string(hdr_arr, hdr_typ_str, hdr_sid_str, + hdr_ut, obs_qty, obs_arr, var_name) + << "\n"; rej_topo++; return; } @@ -1099,6 +1119,14 @@ void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, } if(is_bad_data(fcst_v)) { + mlog << Debug(4) + << "For " << fcst_info->magic_str() << " versus " + << obs_info->magic_str() + << ", skipping observation due to bad data in the interpolated " + << "forecast value:\n" + << point_obs_to_string(hdr_arr, hdr_typ_str, hdr_sid_str, + hdr_ut, obs_qty, obs_arr, var_name) + << "\n"; inc_count(rej_fcst, i, j, k); continue; } @@ -1113,6 +1141,13 @@ void VxPairDataPoint::add_point_obs(float *hdr_arr, const char *hdr_typ_str, hdr_lat, hdr_lon, obs_x, obs_y, hdr_ut, obs_lvl, obs_hgt, fcst_v, obs_v, obs_qty, cmn_v, csd_v, wgt_v)) { + mlog << Debug(4) + << "For " << fcst_info->magic_str() << " versus " + << obs_info->magic_str() + << ", skipping observation since it is a duplicate:\n" + << point_obs_to_string(hdr_arr, hdr_typ_str, hdr_sid_str, + hdr_ut, obs_qty, obs_arr, var_name) + << "\n"; inc_count(rej_dup, i, j, k); } @@ -1494,6 +1529,36 @@ PairDataPoint subset_climo_cdf_bin(const PairDataPoint &pd, return(out_pd); } +//////////////////////////////////////////////////////////////////////// + +// Write the point observation in the MET point format for logging +ConcatString point_obs_to_string(float *hdr_arr, const char *hdr_typ_str, + const char *hdr_sid_str, unixtime hdr_ut, + const char *obs_qty, float *obs_arr, + const char *var_name) { + ConcatString obs_cs, name; + + if((var_name != 0) && (0 < strlen(var_name))) name = var_name; + else name = obs_arr[1]; + + // + // Write the 11-column MET point format: + // Message_Type Station_ID Valid_Time(YYYYMMDD_HHMMSS) + // Lat(Deg North) Lon(Deg East) Elevation(msl) + // Var_Name(or GRIB_Code) Level Height(msl or agl) + // QC_String Observation_Value + // + obs_cs << " " + << hdr_typ_str << " " << hdr_sid_str << " " + << unix_to_yyyymmdd_hhmmss(hdr_ut) << " " + << hdr_arr[0] << " " << -1.0*hdr_arr[1] << " " + << hdr_arr[2] << " " << name << " " + << obs_arr[2] << " " << obs_arr[3] << " " + << obs_qty << " " << obs_arr[4]; + + return(obs_cs); +} + //////////////////////////////////////////////////////////////////////// // // End miscellaneous functions diff --git a/met/src/libcode/vx_statistics/pair_data_point.h b/met/src/libcode/vx_statistics/pair_data_point.h index 4c04625bd6..57ecb54aae 100644 --- a/met/src/libcode/vx_statistics/pair_data_point.h +++ b/met/src/libcode/vx_statistics/pair_data_point.h @@ -254,6 +254,13 @@ extern void subset_wind_pairs(const PairDataPoint &, extern PairDataPoint subset_climo_cdf_bin(const PairDataPoint &, const ThreshArray &, int i_bin); +// Write the point observation in the MET point format for logging +extern ConcatString point_obs_to_string( + float *hdr_arr, const char *hdr_typ_str, + const char *hdr_sid_str, unixtime hdr_ut, + const char *obs_qty, float *obs_arr, + const char *var_name); + //////////////////////////////////////////////////////////////////////// #endif // __PAIR_DATA_POINT_H__ From 2ba6cd99d40a0f276fc47522e41f4b0c061a37ef Mon Sep 17 00:00:00 2001 From: Howard Soh Date: Fri, 26 Feb 2021 16:16:23 -0700 Subject: [PATCH 04/28] #1454 Disabled plot_data_plane_CESM_SSMI_microwave and plot_data_plane_CESM_sea_ice_nc becaues of not evenly spaced --- test/xml/unit_plot_data_plane.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/xml/unit_plot_data_plane.xml b/test/xml/unit_plot_data_plane.xml index 1eb25e614c..67ecba95bf 100644 --- a/test/xml/unit_plot_data_plane.xml +++ b/test/xml/unit_plot_data_plane.xml @@ -343,6 +343,7 @@ + - - &MET_BIN;/plot_data_plane \ From 996197cff8c7272906602de8245ae26cd91549d5 Mon Sep 17 00:00:00 2001 From: johnhg Date: Mon, 1 Mar 2021 18:03:30 -0700 Subject: [PATCH 12/28] Feature 1684 bss and 1685 single reference model (#1689) * Per #1684, move an instance of the ClimoCDFInfo class into PairBase. Also define derive_climo_vals() and derive_climo_prob() utility functions. * Add to VxPairDataPoint and VxPairDataEnsemble functions to set the ClimoCDFInfo class. * Per #1684, update ensemble_stat and point_stat to set the ClimoCDFInfo object based on the contents of the config file. * Per #1684, update the vx_statistics library and stat_analysis to make calls to the new derive_climo_vals() and derive_climo_prob() functions. * Per #1684, since cdf_info is a member of PairBase class, need to handle it in the PairDataPoint and PairDataEnsemble assignment and subsetting logic. * Per #1684, during development, I ran across and then updated this log message. * Per #1684, working on log messages and figured that the regridding climo data should be moved from Debug(1) to at least Debug(2). * Per #1684 and #1685, update the logic for the derive_climo_vals() utility function. If only a single climo bin is requested, just return the climo mean. Otherwise, sample the requested number of values. * Per #1684, just fixing the format of this log message. * Per #1684, add a STATLine::get_offset() member function. * Per #1684, update parse_orank_line() logic. Rather than calling NumArray::clear() call NumArray::erase() to preserve allocated memory. Also, instead of parsing ensemble member values by column name, parse them by offset number. * Per #1684, call EnsemblePairData::extend() when parsing ORANK data to allocate one block of memory instead of bunches of litte ones. * Per #1684 and #1685, add another call to Ensemble-Stat to test computing the CRPSCL_EMP from a single climo mean instead of using the full climo distribution. * Per #1684 and #1685, update ensemble-stat docs about computing CRPSS_EMP relative to a single reference model. * Per #1684, need to update Grid-Stat to store the climo cdf info in the PairDataPoint objects. * Per #1684, remove debug print statements. * Per #1684, need to set cdf_info when aggregating MPR lines in Stat-Analysis. * Per #1684 and #1685, update PairDataEnsemble::compute_pair_vals() to print a log message indicating the climo data being used as reference: For a climo distribution defined by mean and stdev: DEBUG 3: Computing ensemble statistics relative to a 9-member climatological ensemble. For a single deterministic reference: DEBUG 3: Computing ensemble statistics relative to the climatological mean. --- met/docs/Users_Guide/ensemble-stat.rst | 6 +- met/src/libcode/vx_analysis_util/stat_line.cc | 16 +- met/src/libcode/vx_analysis_util/stat_line.h | 9 +- .../libcode/vx_statistics/compute_stats.cc | 3 +- met/src/libcode/vx_statistics/ens_stats.cc | 11 +- met/src/libcode/vx_statistics/pair_base.cc | 100 ++++++-- met/src/libcode/vx_statistics/pair_base.h | 48 ++-- .../vx_statistics/pair_data_ensemble.cc | 58 ++--- .../vx_statistics/pair_data_ensemble.h | 8 +- .../libcode/vx_statistics/pair_data_point.cc | 21 ++ .../libcode/vx_statistics/pair_data_point.h | 2 + met/src/libcode/vx_statistics/read_climo.cc | 2 +- .../tools/core/ensemble_stat/ensemble_stat.cc | 2 +- .../ensemble_stat/ensemble_stat_conf_info.cc | 4 +- met/src/tools/core/grid_stat/grid_stat.cc | 73 +++--- met/src/tools/core/point_stat/point_stat.cc | 2 +- .../core/point_stat/point_stat_conf_info.cc | 3 + .../core/stat_analysis/aggr_stat_line.cc | 45 ++-- .../tools/core/stat_analysis/aggr_stat_line.h | 1 + .../core/stat_analysis/parse_stat_line.cc | 9 +- .../tools/core/stat_analysis/stat_analysis.cc | 4 +- test/config/EnsembleStatConfig_one_cdf_bin | 237 ++++++++++++++++++ test/xml/unit_climatology.xml | 29 +++ 23 files changed, 550 insertions(+), 143 deletions(-) create mode 100644 test/config/EnsembleStatConfig_one_cdf_bin diff --git a/met/docs/Users_Guide/ensemble-stat.rst b/met/docs/Users_Guide/ensemble-stat.rst index 9a4b8f476e..cfe920c0e6 100644 --- a/met/docs/Users_Guide/ensemble-stat.rst +++ b/met/docs/Users_Guide/ensemble-stat.rst @@ -36,7 +36,11 @@ The ranked probability score (RPS) is included in the Ranked Probability Score ( Climatology data ~~~~~~~~~~~~~~~~ -The Ensemble-Stat output includes at least three statistics computed relative to external climatology data. The climatology is defined by mean and standard deviation fields, and both are required in the computation of ensemble skill score statistics. MET assumes that the climatology follows a normal distribution, defined by the mean and standard deviation at each point. When computing the CRPS skill score for (:ref:`Gneiting et al., 2004 `) the reference CRPS statistic is computed using the climatological mean and standard deviation directly. When computing the CRPS skill score for (:ref:`Hersbach, 2000 `) the reference CRPS statistic is computed by selecting equal-area-spaced values from the assumed normal climatological distribution. The number of points selected is determined by the *cdf_bins* setting in the *climo_cdf* dictionary. The reference CRPS is computed empirically from this ensemble of climatology values. The climatological distribution is also used for the RPSS. The forecast RPS statistic is computed from a probabilistic contingency table in which the probabilities are derived from the ensemble member values. In a simliar fashion, the climatogical probability for each observed value is derived from the climatological distribution. The area of the distribution to the left of the observed value is interpreted as the climatological probability. These climatological probabilities are also evaluated using a probabilistic contingency table from which the reference RPS score is computed. The skill scores are derived by comparing the forecast statistic to the reference climatology statistic. +The Ensemble-Stat output includes at least three statistics computed relative to external climatology data. The climatology is defined by mean and standard deviation fields, and typically both are required in the computation of ensemble skill score statistics. MET assumes that the climatology follows a normal distribution, defined by the mean and standard deviation at each point. + +When computing the CRPS skill score for (:ref:`Gneiting et al., 2004 `) the reference CRPS statistic is computed using the climatological mean and standard deviation directly. When computing the CRPS skill score for (:ref:`Hersbach, 2000 `) the reference CRPS statistic is computed by selecting equal-area-spaced values from the assumed normal climatological distribution. The number of points selected is determined by the *cdf_bins* setting in the *climo_cdf* dictionary. The reference CRPS is computed empirically from this ensemble of climatology values. If the number bins is set to 1, the climatological CRPS is computed using only the climatological mean value. In this way, the empirical CRPSS may be computed relative to a single model rather than a climatological distribution. + +The climatological distribution is also used for the RPSS. The forecast RPS statistic is computed from a probabilistic contingency table in which the probabilities are derived from the ensemble member values. In a simliar fashion, the climatogical probability for each observed value is derived from the climatological distribution. The area of the distribution to the left of the observed value is interpreted as the climatological probability. These climatological probabilities are also evaluated using a probabilistic contingency table from which the reference RPS score is computed. The skill scores are derived by comparing the forecast statistic to the reference climatology statistic. Ensemble observation error ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/met/src/libcode/vx_analysis_util/stat_line.cc b/met/src/libcode/vx_analysis_util/stat_line.cc index b1d66871e0..9c2dadb7e8 100644 --- a/met/src/libcode/vx_analysis_util/stat_line.cc +++ b/met/src/libcode/vx_analysis_util/stat_line.cc @@ -327,6 +327,18 @@ bool STATLine::has(const char *col_str) const { +return ( !is_bad_data(get_offset(col_str)) ); + +} + + +//////////////////////////////////////////////////////////////////////// + + +int STATLine::get_offset(const char *col_str) const + +{ + int offset = bad_data_int; int dim = bad_data_int; @@ -353,10 +365,10 @@ if ( is_bad_data(offset) ) { } // - // Return whether a valid offset value was found + // Return the offset value // -return ( !is_bad_data(offset) ); +return ( offset ); } diff --git a/met/src/libcode/vx_analysis_util/stat_line.h b/met/src/libcode/vx_analysis_util/stat_line.h index ed52829950..6362031d58 100644 --- a/met/src/libcode/vx_analysis_util/stat_line.h +++ b/met/src/libcode/vx_analysis_util/stat_line.h @@ -61,10 +61,11 @@ class STATLine : public DataLine { // retrieve values of the header columns // - bool has (const char *) const; - ConcatString get (const char *, bool check_na = true) const; - const char * get_item (const char *, bool check_na = true) const; - const char * get_item (int, bool check_na = true) const; + bool has (const char *) const; + int get_offset(const char *) const; + ConcatString get (const char *, bool check_na = true) const; + const char * get_item (const char *, bool check_na = true) const; + const char * get_item (int, bool check_na = true) const; const char * version () const; const char * model () const; diff --git a/met/src/libcode/vx_statistics/compute_stats.cc b/met/src/libcode/vx_statistics/compute_stats.cc index 7e6e74f66f..211fe9860e 100644 --- a/met/src/libcode/vx_statistics/compute_stats.cc +++ b/met/src/libcode/vx_statistics/compute_stats.cc @@ -743,7 +743,8 @@ void compute_pctinfo(const PairDataPoint &pd, bool pstd_flag, // Use input climatological probabilities or derive them if(cmn_flag) { if(cprob_in) climo_prob = *cprob_in; - else climo_prob = derive_climo_prob(pd.cmn_na, pd.csd_na, + else climo_prob = derive_climo_prob(pd.cdf_info, + pd.cmn_na, pd.csd_na, pct_info.othresh); } diff --git a/met/src/libcode/vx_statistics/ens_stats.cc b/met/src/libcode/vx_statistics/ens_stats.cc index 4748b186ac..ebfe4b5e28 100644 --- a/met/src/libcode/vx_statistics/ens_stats.cc +++ b/met/src/libcode/vx_statistics/ens_stats.cc @@ -484,10 +484,10 @@ void RPSInfo::set(const PairDataEnsemble &pd) { // Check that thresholds are actually defined if(fthresh.n() == 0) { mlog << Error << "\nRPSInfo::set(const PairDataEnsemble &) -> " - << "no thresholds provided to compute the RPS line type! " - << "Specify thresholds using the \"" - << conf_key_prob_cat_thresh - << "\" configuration file option.\n\n"; + << "no thresholds provided to compute the RPS line type!\n" + << "Specify thresholds using the \"" << conf_key_prob_cat_thresh + << "\" configuration file option or by providing climatological " + << "mean and standard deviation data.\n\n"; exit(1); } @@ -522,7 +522,8 @@ void RPSInfo::set(const PairDataEnsemble &pd) { climo_pct.zero_out(); // Derive climatological probabilities - if(cmn_flag) climo_prob = derive_climo_prob(pd.cmn_na, pd.csd_na, + if(cmn_flag) climo_prob = derive_climo_prob(pd.cdf_info, + pd.cmn_na, pd.csd_na, fthresh[i]); // Loop over the observations diff --git a/met/src/libcode/vx_statistics/pair_base.cc b/met/src/libcode/vx_statistics/pair_base.cc index 490037c78b..8066ed262f 100644 --- a/met/src/libcode/vx_statistics/pair_base.cc +++ b/met/src/libcode/vx_statistics/pair_base.cc @@ -74,6 +74,8 @@ void PairBase::clear() { interp_mthd = InterpMthd_None; interp_shape = GridTemplateFactory::GridTemplate_None; + cdf_info.clear(); + o_na.clear(); x_na.clear(); y_na.clear(); @@ -121,6 +123,8 @@ void PairBase::erase() { interp_mthd = InterpMthd_None; interp_shape = GridTemplateFactory::GridTemplate_None; + cdf_info.clear(); + o_na.erase(); x_na.erase(); y_na.erase(); @@ -267,6 +271,15 @@ void PairBase::set_interp_shape(GridTemplateFactory::GridTemplates shape) { //////////////////////////////////////////////////////////////////////// +void PairBase::set_climo_cdf_info(const ClimoCDFInfo &info) { + + cdf_info = info; + + return; +} + +//////////////////////////////////////////////////////////////////////// + void PairBase::set_fcst_ut(unixtime ut){ fcst_ut = ut; @@ -1010,11 +1023,49 @@ bool set_climo_flag(const NumArray &f_na, const NumArray &c_na) { //////////////////////////////////////////////////////////////////////// -NumArray derive_climo_prob(const NumArray &mn_na, const NumArray &sd_na, +void derive_climo_vals(const ClimoCDFInfo &cdf_info, + double m, double s, + NumArray &climo_vals) { + + // Initialize + climo_vals.erase(); + + // cdf_info.cdf_ta starts with >=0.0 and ends with >=1.0. + // The number of bins is the number of thresholds minus 1. + + // Check for bad mean value + if(is_bad_data(m) || cdf_info.cdf_ta.n() < 2) { + return; + } + // Single climo bin + else if(cdf_info.cdf_ta.n() == 2) { + climo_vals.add(m); + } + // Check for bad standard deviation value + else if(is_bad_data(s)) { + return; + } + // Extract climo distribution values + else { + + // Skip the first and last thresholds + for(int i=1; i " + mlog << Error << "\nderive_climo_prob() -> " << "climatological threshold \"" << othresh.get_str() << "\" cannot be converted to a probability!\n\n"; exit(1); @@ -1060,23 +1111,17 @@ NumArray derive_climo_prob(const NumArray &mn_na, const NumArray &sd_na, // threshold else if(n_mn > 0 && n_sd > 0) { - mlog << Debug(2) - << "Deriving normal approximation of climatological " - << "probabilities for threshold " << othresh.get_str() - << ".\n"; + // The first (>=0.0) and last (>=1.0) climo thresholds are omitted + mlog << Debug(4) + << "Deriving climatological probabilities for threshold " + << othresh.get_str() << " by sampling " << cdf_info.cdf_ta.n()-2 + << " values from the normal climatological distribution.\n"; - // Compute probability value for each point + // Compute the probability by sampling from the climo distribution + // and deriving the event frequency for(i=0; i 2) { + mlog << Debug(3) + << "Computing ensemble statistics relative to a " + << cdf_info.cdf_ta.n() - 2 + << "-member climatological ensemble.\n"; + } + else { + mlog << Debug(3) + << "No reference climatology data provided.\n"; + } + // Compute the rank for each observation for(i=0, n_pair=0, n_skip_const=0, n_skip_vld=0; i=0.0) and last (>=1.0) climo CDF thresholds - for(int i=1; igrid() == vx_grid)) { - mlog << Debug(1) + mlog << Debug(2) << "Regridding the " << cur_ut_cs << " \"" << info->magic_str() << "\" climatology field to the verification grid.\n"; diff --git a/met/src/tools/core/ensemble_stat/ensemble_stat.cc b/met/src/tools/core/ensemble_stat/ensemble_stat.cc index 31ab7b8b56..f3affe5895 100644 --- a/met/src/tools/core/ensemble_stat/ensemble_stat.cc +++ b/met/src/tools/core/ensemble_stat/ensemble_stat.cc @@ -1735,7 +1735,7 @@ void process_grid_vx() { // Initialize pd_all.clear(); pd_all.set_ens_size(n_vx_vld[i]); - pd_all.set_climo_cdf(conf_info.vx_opt[i].cdf_info); + pd_all.set_climo_cdf_info(conf_info.vx_opt[i].cdf_info); pd_all.skip_const = conf_info.vx_opt[i].vx_pd.pd[0][0][0].skip_const; // Apply the current mask to the fields and compute the pairs diff --git a/met/src/tools/core/ensemble_stat/ensemble_stat_conf_info.cc b/met/src/tools/core/ensemble_stat/ensemble_stat_conf_info.cc index 0461bc1b7f..e4361e041a 100644 --- a/met/src/tools/core/ensemble_stat/ensemble_stat_conf_info.cc +++ b/met/src/tools/core/ensemble_stat/ensemble_stat_conf_info.cc @@ -877,8 +877,8 @@ void EnsembleStatVxOpt::set_vx_pd(EnsembleStatConfInfo *conf_info) { // Define the dimensions vx_pd.set_pd_size(n_msg_typ, n_mask, n_interp); - // Store climo CDF - vx_pd.set_climo_cdf(cdf_info); + // Store the climo CDF info + vx_pd.set_climo_cdf_info(cdf_info); // Store the list of surface message types vx_pd.set_msg_typ_sfc(conf_info->msg_typ_sfc); diff --git a/met/src/tools/core/grid_stat/grid_stat.cc b/met/src/tools/core/grid_stat/grid_stat.cc index 5a90a6464f..14b09c6d5a 100644 --- a/met/src/tools/core/grid_stat/grid_stat.cc +++ b/met/src/tools/core/grid_stat/grid_stat.cc @@ -145,7 +145,8 @@ static void build_outfile_name(unixtime, int, const char *, static void process_scores(); -static void get_mask_points(const MaskPlane &, const DataPlane *, +static void get_mask_points(const GridStatVxOpt &, + const MaskPlane &, const DataPlane *, const DataPlane *, const DataPlane *, const DataPlane *, const DataPlane *, PairDataPoint &); @@ -797,7 +798,8 @@ void process_scores() { } // Apply the current mask to the current fields - get_mask_points(mask_mp, &fcst_dp_smooth, &obs_dp_smooth, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fcst_dp_smooth, &obs_dp_smooth, &cmn_dp, &csd_dp, &wgt_dp, pd); // Set the mask name @@ -981,7 +983,8 @@ void process_scores() { } // Apply the current mask to the U-wind fields - get_mask_points(mask_mp, &fu_dp_smooth, &ou_dp_smooth, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fu_dp_smooth, &ou_dp_smooth, &cmnu_dp, &csdu_dp, &wgt_dp, pd_u); // Compute VL1L2 @@ -1136,9 +1139,11 @@ void process_scores() { mask_bad_data(mask_mp, ogy_dp); // Apply the current mask to the current fields - get_mask_points(mask_mp, &fgx_dp, &ogx_dp, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fgx_dp, &ogx_dp, 0, 0, &wgt_dp, pd_gx); - get_mask_points(mask_mp, &fgy_dp, &ogy_dp, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fgy_dp, &ogy_dp, 0, 0, &wgt_dp, pd_gy); // Set the mask name @@ -1217,7 +1222,8 @@ void process_scores() { conf_info.vx_opt[i].ocat_ta.need_perc()) { // Apply the current mask - get_mask_points(mask_mp, &fcst_dp, &obs_dp, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fcst_dp, &obs_dp, &cmn_dp, 0, 0, pd); // Process percentile thresholds @@ -1271,9 +1277,11 @@ void process_scores() { // Apply the current mask to the distance map and // thresholded fields - get_mask_points(mask_mp, &fcst_dp_dmap, &obs_dp_dmap, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fcst_dp_dmap, &obs_dp_dmap, 0, 0, 0, pd); - get_mask_points(mask_mp, &fcst_dp_thresh, &obs_dp_thresh, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fcst_dp_thresh, &obs_dp_thresh, 0, 0, 0, pd_thr); dmap_info.set_options( @@ -1346,7 +1354,8 @@ void process_scores() { conf_info.vx_opt[i].ocat_ta.need_perc()) { // Apply the current mask - get_mask_points(mask_mp, &fcst_dp, &obs_dp, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fcst_dp, &obs_dp, &cmn_dp, 0, 0, pd); // Process percentile thresholds @@ -1445,9 +1454,11 @@ void process_scores() { // Apply the current mask to the fractional coverage // and thresholded fields - get_mask_points(mask_mp, &fcst_dp_smooth, &obs_dp_smooth, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fcst_dp_smooth, &obs_dp_smooth, 0, 0, &wgt_dp, pd); - get_mask_points(mask_mp, &fcst_dp_thresh, &obs_dp_thresh, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fcst_dp_thresh, &obs_dp_thresh, 0, 0, 0, pd_thr); // Store climatology values as bad data @@ -1618,7 +1629,8 @@ void process_scores() { } // Apply the current mask to the current fields - get_mask_points(mask_mp, &fcst_dp_smooth, &obs_dp_smooth, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fcst_dp_smooth, &obs_dp_smooth, &cmn_dp_smooth, &csd_dp, &wgt_dp, pd); // Set the mask name @@ -1706,7 +1718,8 @@ void process_scores() { } // Apply the current mask to the U-wind fields - get_mask_points(mask_mp, &fu_dp_smooth, &ou_dp_smooth, + get_mask_points(conf_info.vx_opt[i], mask_mp, + &fu_dp_smooth, &ou_dp_smooth, &cmnu_dp_smooth, 0, &wgt_dp, pd_u); // Compute VL1L2 @@ -1790,29 +1803,33 @@ void process_scores() { //////////////////////////////////////////////////////////////////////// -void get_mask_points(const MaskPlane &mask_mp, +void get_mask_points(const GridStatVxOpt &vx_opt, + const MaskPlane &mask_mp, const DataPlane *fcst_ptr, const DataPlane *obs_ptr, const DataPlane *cmn_ptr, const DataPlane *csd_ptr, const DataPlane *wgt_ptr, PairDataPoint &pd) { - // Initialize - pd.erase(); + // Initialize + pd.erase(); - // Apply the mask the data fields or fill with default values - apply_mask(*fcst_ptr, mask_mp, pd.f_na); - apply_mask(*obs_ptr, mask_mp, pd.o_na); - pd.n_obs = pd.o_na.n(); + // Store the climo CDF info + pd.set_climo_cdf_info(vx_opt.cdf_info); + + // Apply the mask the data fields or fill with default values + apply_mask(*fcst_ptr, mask_mp, pd.f_na); + apply_mask(*obs_ptr, mask_mp, pd.o_na); + pd.n_obs = pd.o_na.n(); - if(cmn_ptr) apply_mask(*cmn_ptr, mask_mp, pd.cmn_na); - else pd.cmn_na.add_const(bad_data_double, pd.n_obs); - if(csd_ptr) apply_mask(*csd_ptr, mask_mp, pd.csd_na); - else pd.csd_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); + if(cmn_ptr) apply_mask(*cmn_ptr, mask_mp, pd.cmn_na); + else pd.cmn_na.add_const(bad_data_double, pd.n_obs); + if(csd_ptr) apply_mask(*csd_ptr, mask_mp, pd.csd_na); + else pd.csd_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); - if(cmn_ptr && csd_ptr) pd.add_climo_cdf(); + if(cmn_ptr && csd_ptr) pd.add_climo_cdf(); - return; + return; } //////////////////////////////////////////////////////////////////////// diff --git a/met/src/tools/core/point_stat/point_stat.cc b/met/src/tools/core/point_stat/point_stat.cc index f61583f3ee..d1edfdb935 100644 --- a/met/src/tools/core/point_stat/point_stat.cc +++ b/met/src/tools/core/point_stat/point_stat.cc @@ -1762,7 +1762,7 @@ void do_hira_ens(int i_vx, const PairDataPoint *pd_ptr) { hira_pd.clear(); hira_pd.extend(pd_ptr->n_obs); hira_pd.set_ens_size(gt->size()); - hira_pd.set_climo_cdf(conf_info.vx_opt[i_vx].cdf_info); + hira_pd.set_climo_cdf_info(conf_info.vx_opt[i_vx].cdf_info); f_ens.extend(gt->size()); // Process each observation point diff --git a/met/src/tools/core/point_stat/point_stat_conf_info.cc b/met/src/tools/core/point_stat/point_stat_conf_info.cc index 0d8dd3fa43..ecd6b8b3dc 100644 --- a/met/src/tools/core/point_stat/point_stat_conf_info.cc +++ b/met/src/tools/core/point_stat/point_stat_conf_info.cc @@ -932,6 +932,9 @@ void PointStatVxOpt::set_vx_pd(PointStatConfInfo *conf_info) { // Define the dimensions vx_pd.set_pd_size(n_msg_typ, n_mask, n_interp); + // Store the climo CDF info + vx_pd.set_climo_cdf_info(cdf_info); + // Store the surface message type group cs = surface_msg_typ_group_str; if(conf_info->msg_typ_group_map.count(cs) == 0) { diff --git a/met/src/tools/core/stat_analysis/aggr_stat_line.cc b/met/src/tools/core/stat_analysis/aggr_stat_line.cc index 3bd72ae766..db7cd98ba9 100644 --- a/met/src/tools/core/stat_analysis/aggr_stat_line.cc +++ b/met/src/tools/core/stat_analysis/aggr_stat_line.cc @@ -575,7 +575,22 @@ ConcatString StatHdrInfo::get_shc_str(const ConcatString &cur_case, //////////////////////////////////////////////////////////////////////// // -// Code for AggrTimeSeriesInfo structure. +// Code for AggrENSInfo structure +// +//////////////////////////////////////////////////////////////////////// + +void AggrENSInfo::clear() { + hdr.clear(); + ens_pd.clear(); + me_na.clear(); + mse_na.clear(); + me_oerr_na.clear(); + mse_oerr_na.clear(); +} + +//////////////////////////////////////////////////////////////////////// +// +// Code for AggrTimeSeriesInfo structure // //////////////////////////////////////////////////////////////////////// @@ -2190,6 +2205,9 @@ void aggr_mpr_lines(LineDataFile &f, STATAnalysisJob &job, // if(m.count(key) == 0) { + bool center = false; + aggr.pd.cdf_info.set_cdf_ta(nint(1.0/job.out_bin_size), center); + aggr.pd.f_na.clear(); aggr.pd.o_na.clear(); aggr.pd.cmn_na.clear(); @@ -2208,6 +2226,7 @@ void aggr_mpr_lines(LineDataFile &f, STATAnalysisJob &job, aggr.fcst_var = cur.fcst_var; aggr.obs_var = cur.obs_var; aggr.hdr.clear(); + m[key] = aggr; } // @@ -2552,8 +2571,7 @@ void aggr_ecnt_lines(LineDataFile &f, STATAnalysisJob &job, // Add a new map entry, if necessary // if(m.count(key) == 0) { - aggr.ens_pd.clear(); - aggr.hdr.clear(); + aggr.clear(); m[key] = aggr; } @@ -2775,8 +2793,7 @@ void aggr_rhist_lines(LineDataFile &f, STATAnalysisJob &job, // Add a new map entry, if necessary // if(m.count(key) == 0) { - aggr.ens_pd.clear(); - aggr.hdr.clear(); + aggr.clear(); for(i=0; i::iterator it; @@ -3045,17 +3062,17 @@ void aggr_orank_lines(LineDataFile &f, STATAnalysisJob &job, // Add a new map entry, if necessary // if(m.count(key) == 0) { - aggr.ens_pd.clear(); + aggr.clear(); + bool center = false; + aggr.ens_pd.cdf_info.set_cdf_ta(nint(1.0/job.out_bin_size), center); aggr.ens_pd.obs_error_flag = !is_bad_data(cur.ens_mean_oerr); aggr.ens_pd.set_ens_size(cur.n_ens); + aggr.ens_pd.extend(cur.total); for(i=0; i " - << "the \"N_ENS\" column must remain constant. " + << "the \"N_ENS\" column must remain constant. " << "Try setting \"-column_eq N_ENS n\".\n\n"; throw(1); } @@ -3099,12 +3116,12 @@ void aggr_orank_lines(LineDataFile &f, STATAnalysisJob &job, m[key].ens_pd.v_na.add(n_valid); // Derive ensemble from climo mean and standard deviation - cur_clm = derive_climo_cdf_inv(m[key].ens_pd.cdf_info, - cur.climo_mean, cur.climo_stdev); + derive_climo_vals(m[key].ens_pd.cdf_info, + cur.climo_mean, cur.climo_stdev, climo_vals); // Store empirical CRPS stats m[key].ens_pd.crps_emp_na.add(compute_crps_emp(cur.obs, cur.ens_na)); - m[key].ens_pd.crpscl_emp_na.add(compute_crps_emp(cur.obs, cur_clm)); + m[key].ens_pd.crpscl_emp_na.add(compute_crps_emp(cur.obs, climo_vals)); // Store Gaussian CRPS stats m[key].ens_pd.crps_gaus_na.add(compute_crps_gaus(cur.obs, cur.ens_mean, cur.spread)); diff --git a/met/src/tools/core/stat_analysis/aggr_stat_line.h b/met/src/tools/core/stat_analysis/aggr_stat_line.h index 2e6ab5b72e..e8ed7809f9 100644 --- a/met/src/tools/core/stat_analysis/aggr_stat_line.h +++ b/met/src/tools/core/stat_analysis/aggr_stat_line.h @@ -152,6 +152,7 @@ struct AggrENSInfo { StatHdrInfo hdr; PairDataEnsemble ens_pd; NumArray me_na, mse_na, me_oerr_na, mse_oerr_na; + void clear(); }; struct AggrRPSInfo { diff --git a/met/src/tools/core/stat_analysis/parse_stat_line.cc b/met/src/tools/core/stat_analysis/parse_stat_line.cc index 2f79ae4c3a..14bf981ea6 100644 --- a/met/src/tools/core/stat_analysis/parse_stat_line.cc +++ b/met/src/tools/core/stat_analysis/parse_stat_line.cc @@ -461,8 +461,7 @@ void parse_relp_line(STATLine &l, RELPData &r_data) { //////////////////////////////////////////////////////////////////////// void parse_orank_line(STATLine &l, ORANKData &o_data) { - int i; - char col_str[max_str_len]; + int i, ens1; o_data.total = atoi(l.get_item("TOTAL")); o_data.index = atoi(l.get_item("INDEX")); @@ -480,10 +479,10 @@ void parse_orank_line(STATLine &l, ORANKData &o_data) { o_data.n_ens = atoi(l.get_item("N_ENS")); // Parse out ENS_i - o_data.ens_na.clear(); + o_data.ens_na.erase(); + ens1 = l.get_offset("ENS_1"); for(i=0; i + + + + echo "&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" \ + > &OUTPUT_DIR;/climatology/ensemble_stat_input_file_list; \ + &MET_BIN;/ensemble_stat + + OUTPUT_PREFIX ONE_CDF_BIN + CLIMO_MEAN_FILE_LIST "&DATA_DIR_CLIMO;/NCEP_NCAR_40YR_1.0deg/cmean_1d.19590410" + + \ + &OUTPUT_DIR;/climatology/ensemble_stat_input_file_list \ + &CONFIG_DIR;/EnsembleStatConfig_one_cdf_bin \ + -point_obs &OUTPUT_DIR;/pb2nc/ndas.20120410.t12z.prepbufr.tm00.nc \ + -grid_obs &DATA_DIR_OBS;/laps/laps_2012041012_F000.grib \ + -outdir &OUTPUT_DIR;/climatology + + + &OUTPUT_DIR;/climatology/ensemble_stat_ONE_CDF_BIN_20120410_120000V.stat + &OUTPUT_DIR;/climatology/ensemble_stat_ONE_CDF_BIN_20120410_120000V_ecnt.txt + &OUTPUT_DIR;/climatology/ensemble_stat_ONE_CDF_BIN_20120410_120000V_ens.nc + + + From 40b57af2e2124ae9bec11181cf2b2452171482ec Mon Sep 17 00:00:00 2001 From: johnhg Date: Tue, 2 Mar 2021 16:09:21 -0700 Subject: [PATCH 13/28] Per #1691, add met-10.0.0-beta4 release notes. (#1692) --- met/docs/Users_Guide/release-notes.rst | 55 +++++++++++++++++++++++++- met/docs/conf.py | 2 +- met/docs/version | 2 +- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/met/docs/Users_Guide/release-notes.rst b/met/docs/Users_Guide/release-notes.rst index 679c9e7fbf..791d657cfc 100644 --- a/met/docs/Users_Guide/release-notes.rst +++ b/met/docs/Users_Guide/release-notes.rst @@ -2,11 +2,64 @@ MET release notes _________________ When applicable, release notes are followed by the GitHub issue number which -describes the bugfix, enhancement, or new feature: `MET Git-Hub issues. `_ +describes the bugfix, enhancement, or new feature: `MET GitHub issues. `_ Version |version| release notes (|release_date|) ------------------------------------------------ +Version `10.0.0-beta4 `_ release notes (20210302) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +* Bugfixes: + + * Fix the set_attr_accum option to set the accumulation time instead of the lead time (`#1646 `_). + * Correct the time offset for tests in unit_plot_data_plane.xml (`#1677 `_). + +* Repository and build: + + * Enhance the sample plotting R-script to read output from different versions of MET (`#1653 `_). + +* Library code: + + * Miscellaneous: + + * Update GRIB1/2 table entries for the MXUPHL, MAXREF, MAXUVV, and MAXDVV variables (`#1658 `_). + * Update the Air Force GRIB tables to reflect current AF usage (`#1519 `_). + * Enhance the DataLine::get_item() error message to include the file name, line number, and column (`#1429 `_). + + * NetCDF library: + + * Add support for the NetCDF-CF conventions time bounds option (`#1657 `_). + * Error out when reading CF-compliant NetCDF data with incomplete grid definition (`#1454 `_). + * Reformat and simplify the magic_str() printed for NetCDF data files (`#1655 `_). + + * Statistics computations: + + * Add support for the Hersbach CRPS algorithm by add new columns to the ECNT line type (`#1450 `_). + * Enhance MET to derive the Hersbach CRPSCL_EMP and CRPSS_EMP statistics from a single deterministic reference model (`#1685 `_). + * Correct the climatological CRPS computation to match the NOAA/EMC VSDB method (`#1451 `_). + * Modify the climatological Brier Score computation to match the NOAA/EMC VSDB method (`#1684 `_). + +* Application code: + + * ASCII2NC and Point2Grid: + + * Enhance ascii2nc and point2grid to gracefully process zero input observations rather than erroring out (`#1630 `_). + + * Point-Stat Tool: + + * Enhance the validation of masking regions to check for non-unique masking region names (`#1439 `_). + * Print the Point-Stat rejection code reason count log messages at verbosity level 2 for zero matched pairs (`#1644 `_). + * Add detailed log messages to Point-Stat when discarding observations (`#1588 `_). + + * Stat-Analysis Tool: + + * Add -fcst_init_inc/_exc and -fcst_valid_inc/_exc job command filtering options to Stat-Analysis (`#1135 `_). + + * MODE Tool: + + * Update the MODE AREA_RATIO output column to list the forecast area divided by the observation area (`#1643 `_). + Version `10.0.0-beta3 `_ release notes (20210127) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/met/docs/conf.py b/met/docs/conf.py index 15b76ffc0b..efa6f948c9 100644 --- a/met/docs/conf.py +++ b/met/docs/conf.py @@ -24,7 +24,7 @@ verinfo = version release = f'{version}' release_year = '2021' -release_date = f'{release_year}0127' +release_date = f'{release_year}0302' copyright = f'{release_year}, {author}' # -- General configuration --------------------------------------------------- diff --git a/met/docs/version b/met/docs/version index 16c1efe0d4..2e6b7f7038 100644 --- a/met/docs/version +++ b/met/docs/version @@ -1 +1 @@ -10.0.0-beta3 +10.0.0-beta4 From 23dc482ac49af3fef1103ef46585c488cf5b8f6d Mon Sep 17 00:00:00 2001 From: "Julie.Prestopnik" Date: Wed, 3 Mar 2021 10:11:09 -0700 Subject: [PATCH 14/28] Updated Python documentation --- met/docs/Users_Guide/appendixF.rst | 6 +++--- met/docs/requirements.txt | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 met/docs/requirements.txt diff --git a/met/docs/Users_Guide/appendixF.rst b/met/docs/Users_Guide/appendixF.rst index aa4d1f84aa..e122d6a560 100644 --- a/met/docs/Users_Guide/appendixF.rst +++ b/met/docs/Users_Guide/appendixF.rst @@ -13,11 +13,11 @@ ________________________ In order to use Python embedding, the user's local Python installation must have the C-language Python header files and libraries. Sometimes when Python is installed locally, these header files and libraries are deleted at the end of the installation process, leaving only the binary executable and run-time shared object files. But the Python header files and libraries must be present to compile support in MET for Python embedding. Assuming the requisite Python files are present, and that Python embedding is enabled when building MET (which is done by passing the **--enable-python** option to the **configure** command line), the MET C++ code will use these in the compilation process to link directly to the Python libraries. -In addition to the **configure** option mentioned above, two variables, **MET_PYTHON_CC** and **MET_PYTHON_LD**, must also be set for the configuration process. These may either be set as environment variables or as command line options to **configure**. These constants are passed as compiler command line options when building MET to enable the compiler to find the requisite Python header files and libraries in the user's local filesystem. Fortunately, Python provides a way to set these variables properly. This frees the user from the necessity of having any expert knowledge of the compiling and linking process. Along with the **Python** executable, there should be another executable called **python-config**, whose output can be used to set these environment variables as follows: +In addition to the **configure** option mentioned above, two variables, **MET_PYTHON_CC** and **MET_PYTHON_LD**, must also be set for the configuration process. These may either be set as environment variables or as command line options to **configure**. These constants are passed as compiler command line options when building MET to enable the compiler to find the requisite Python header files and libraries in the user's local filesystem. Fortunately, Python provides a way to set these variables properly. This frees the user from the necessity of having any expert knowledge of the compiling and linking process. Along with the **Python** executable, there should be another executable called **python3-config**, whose output can be used to set these environment variables as follows: -• On the command line, run “**python-config --cflags**”. Set the value of **MET_PYTHON_CC** to the output of that command. +• On the command line, run “**python3-config --cflags**”. Set the value of **MET_PYTHON_CC** to the output of that command. -• Again on the command line, run “**python-config --ldflags**”. Set the value of **MET_PYTHON_LD** to the output of that command. +• Again on the command line, run “**python3-config --ldflags**”. Set the value of **MET_PYTHON_LD** to the output of that command. Make sure that these are set as environment variables or that you have included them on the command line prior to running **configure**. diff --git a/met/docs/requirements.txt b/met/docs/requirements.txt new file mode 100644 index 0000000000..f6bdb82841 --- /dev/null +++ b/met/docs/requirements.txt @@ -0,0 +1,11 @@ +sphinx +sphinx-gallery +sphinx-rtd-theme +sphinxcontrib-applehelp +sphinxcontrib-bibtex +sphinxcontrib-devhelp +sphinxcontrib-htmlhelp +sphinxcontrib-jsmath +sphinxcontrib-qthelp +sphinxcontrib-serializinghtml + From 9c9c54cef62a8e726ac3b52ee911a0684d693a6b Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Thu, 4 Mar 2021 16:11:13 -0700 Subject: [PATCH 15/28] Per #1694, add VarInfo::magic_str_attr() to construct a field summary string from the name_attr() and level_attr() functions. --- met/src/libcode/vx_data2d/var_info.cc | 13 +++++++++++++ met/src/libcode/vx_data2d/var_info.h | 1 + 2 files changed, 14 insertions(+) diff --git a/met/src/libcode/vx_data2d/var_info.cc b/met/src/libcode/vx_data2d/var_info.cc index e72a761096..aa4449d2e5 100644 --- a/met/src/libcode/vx_data2d/var_info.cc +++ b/met/src/libcode/vx_data2d/var_info.cc @@ -434,6 +434,19 @@ void VarInfo::set_magic(const ConcatString &nstr, const ConcatString &lstr) { /////////////////////////////////////////////////////////////////////////////// +ConcatString VarInfo::magic_str_attr() const { + ConcatString mstr(name_attr()); + ConcatString lstr(level_attr()); + + // Format as {name}/{level} or {name}{level} + if(lstr.nonempty() && lstr[0] != '(') mstr << "/"; + mstr << lstr; + + return(mstr); +} + +/////////////////////////////////////////////////////////////////////////////// + void VarInfo::set_dict(Dictionary &dict) { ThreshArray ta; NumArray na; diff --git a/met/src/libcode/vx_data2d/var_info.h b/met/src/libcode/vx_data2d/var_info.h index b9d7c501af..f2801a49c0 100644 --- a/met/src/libcode/vx_data2d/var_info.h +++ b/met/src/libcode/vx_data2d/var_info.h @@ -135,6 +135,7 @@ class VarInfo RegridInfo regrid() const; + ConcatString magic_str_attr() const; ConcatString name_attr() const; ConcatString units_attr() const; ConcatString level_attr() const; From a16bebc778370626234142d8e177b17e8c2e8f4c Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Thu, 4 Mar 2021 16:44:48 -0700 Subject: [PATCH 16/28] Per #1694, fixing 2 issues here. There was a bug in the computation of the max value. Had a less-than sign that should have been greater-than. Also, switch from tracking data by it's magic_str() to simply using VAR_i and VAR_j strings. We *could* have just used the i, j integers directly, but constructing the ij joint histogram integer could have been tricky since we start numbering with 0 instead of 1. i=0, j=1 would result in 01 which is the same as integer of 1. If we do want to switch to integers, we just need to make them 1-based and add +1 all over the place. --- met/src/tools/other/grid_diag/grid_diag.cc | 100 ++++++++++++--------- 1 file changed, 60 insertions(+), 40 deletions(-) diff --git a/met/src/tools/other/grid_diag/grid_diag.cc b/met/src/tools/other/grid_diag/grid_diag.cc index 2fe311e0b2..b9f4f2d12a 100644 --- a/met/src/tools/other/grid_diag/grid_diag.cc +++ b/met/src/tools/other/grid_diag/grid_diag.cc @@ -16,6 +16,7 @@ // ---- ---- ---- ----------- // 000 10/01/19 Fillmore New // 001 07/28/20 Halley Gotway Updates for #1391. +// 002 03/04/21 Halley Gotway Bugfix #1694. // //////////////////////////////////////////////////////////////////////// @@ -228,6 +229,7 @@ void process_series(void) { StringArray *cur_files; GrdFileType *cur_ftype; Grid cur_grid; + ConcatString i_var_str, j_var_str, ij_var_str; // List the lengths of the series options mlog << Debug(1) @@ -245,6 +247,8 @@ void process_series(void) { // Process the 1d histograms for(int i_var=0; i_varmagic_str() + << "Reading field " << data_info->magic_str_attr() << " data from file: " << (*cur_files)[i_series] << "\n"; @@ -268,7 +272,7 @@ void process_series(void) { // Regrid, if necessary if(!(cur_grid == grid)) { mlog << Debug(2) - << "Regridding field " << data_info->magic_str() + << "Regridding field " << data_info->magic_str_attr() << " to the verification grid.\n"; data_dp[i_var] = met_regrid(data_dp[i_var], cur_grid, grid, @@ -311,38 +315,40 @@ void process_series(void) { if(is_bad_data(var_mins[i_var]) || min < var_mins[i_var]) { var_mins[i_var] = min; } - if(is_bad_data(var_maxs[i_var]) || max < var_maxs[i_var]) { + if(is_bad_data(var_maxs[i_var]) || max > var_maxs[i_var]) { var_maxs[i_var] = max; } - + // Update partial sums - update_pdf(bin_mins[data_info->magic_str()][0], - bin_deltas[data_info->magic_str()], - histograms[data_info->magic_str()], + update_pdf(bin_mins[i_var_str][0], + bin_deltas[i_var_str], + histograms[i_var_str], data_dp[i_var], conf_info.mask_area); } // end for i_var // Process the 2d joint histograms for(int i_var=0; i_varmagic_str(); - joint_str.add("_"); - joint_str.add(joint_info->magic_str()); + ij_var_str << cs_erase << i_var_str << "_" << j_var_str; // Update joint partial sums update_joint_pdf(data_info->n_bins(), joint_info->n_bins(), - bin_mins[data_info->magic_str()][0], - bin_mins[joint_info->magic_str()][0], - bin_deltas[data_info->magic_str()], - bin_deltas[joint_info->magic_str()], - joint_histograms[joint_str], + bin_mins[i_var_str][0], + bin_mins[j_var_str][0], + bin_deltas[i_var_str], + bin_deltas[j_var_str], + joint_histograms[ij_var_str], data_dp[i_var], data_dp[j_var], conf_info.mask_area); } // end for j_var @@ -355,7 +361,7 @@ void process_series(void) { VarInfo *data_info = conf_info.data_info[i_var]; mlog << Debug(2) - << "Processed " << data_info->magic_str() + << "Processed " << data_info->magic_str_attr() << " data with range (" << var_mins[i_var] << ", " << var_maxs[i_var] << ") into bins with range (" << data_info->range()[0] << ", " @@ -364,7 +370,7 @@ void process_series(void) { if(var_mins[i_var] < data_info->range()[0] || var_maxs[i_var] > data_info->range()[1]) { mlog << Warning << "\nprocess_series() -> " - << "the range of the " << data_info->magic_str() + << "the range of the " << data_info->magic_str_attr() << " data (" << var_mins[i_var] << ", " << var_maxs[i_var] << ") falls outside the configuration file range (" << data_info->range()[0] << ", " @@ -378,9 +384,12 @@ void process_series(void) { //////////////////////////////////////////////////////////////////////// void setup_histograms(void) { + ConcatString i_var_str; for(int i_var=0; i_varmagic_str()] = bin_min; - bin_maxs[data_info->magic_str()] = bin_max; - bin_mids[data_info->magic_str()] = bin_mid; - bin_deltas[data_info->magic_str()] = delta; + bin_mins[i_var_str] = bin_min; + bin_maxs[i_var_str] = bin_max; + bin_mids[i_var_str] = bin_mid; + bin_deltas[i_var_str] = delta; // Initialize histograms mlog << Debug(2) - << "Initializing " << data_info->magic_str() + << "Initializing " << data_info->magic_str_attr() << " histogram with " << n_bins << " bins from " << min << " to " << max << ".\n"; - histograms[data_info->magic_str()] = vector(); - init_pdf(n_bins, histograms[data_info->magic_str()]); + histograms[i_var_str] = vector(); + init_pdf(n_bins, histograms[i_var_str]); } // for i_var } //////////////////////////////////////////////////////////////////////// void setup_joint_histograms(void) { + ConcatString i_var_str, j_var_str, ij_var_str; for(int i_var=0; i_varn_bins(); for(int j_var=i_var+1; j_varn_bins(); - ConcatString joint_str = data_info->magic_str(); - joint_str.add("_"); - joint_str.add(joint_info->magic_str()); + ij_var_str << cs_erase << i_var_str << "_" << j_var_str; + mlog << Debug(2) - << "Initializing " << joint_str << " joint histogram with " - << n_bins << " x " << n_joint_bins << " bins.\n"; - joint_histograms[joint_str] = vector(); + << "Initializing " << data_info->magic_str_attr() << "_" + << joint_info->magic_str_attr() << " joint histogram with " + << n_bins << " x " << n_joint_bins << " bins.\n"; + joint_histograms[ij_var_str] = vector(); init_joint_pdf(n_bins, n_joint_bins, - joint_histograms[joint_str]); + joint_histograms[ij_var_str]); } // end for j_var } // end for i_var } @@ -453,7 +467,7 @@ void setup_joint_histograms(void) { //////////////////////////////////////////////////////////////////////// void setup_nc_file(void) { - ConcatString cs; + ConcatString cs, i_var_str; // Create NetCDF file nc_out = open_ncfile(out_file.c_str(), true); @@ -494,6 +508,8 @@ void setup_nc_file(void) { for(int i_var=0; i_var < conf_info.get_n_data(); i_var++) { + i_var_str << cs_erase << "VAR" << i_var; + VarInfo *data_info = conf_info.data_info[i_var]; // Set variable NetCDF name @@ -534,9 +550,9 @@ void setup_nc_file(void) { add_var_att_local(&var_mid, "units", data_info->units_attr()); // Write bin values - var_min.putVar(bin_mins[data_info->magic_str()].data()); - var_max.putVar(bin_maxs[data_info->magic_str()].data()); - var_mid.putVar(bin_mids[data_info->magic_str()].data()); + var_min.putVar(bin_mins[i_var_str].data()); + var_max.putVar(bin_maxs[i_var_str].data()); + var_mid.putVar(bin_mids[i_var_str].data()); } // Define histograms @@ -625,13 +641,16 @@ void add_var_att_local(NcVar *var, const char *att_name, //////////////////////////////////////////////////////////////////////// void write_histograms(void) { + ConcatString i_var_str; for(int i_var=0; i_var < conf_info.get_n_data(); i_var++) { + i_var_str << cs_erase << "VAR" << i_var; + VarInfo *data_info = conf_info.data_info[i_var]; NcVar hist_var = hist_vars[i_var]; - int *hist = histograms[data_info->magic_str()].data(); + int *hist = histograms[i_var_str].data(); hist_var.putVar(hist); } @@ -642,6 +661,7 @@ void write_histograms(void) { void write_joint_histograms(void) { vector offsets; vector counts; + ConcatString var_cs; int i_hist=0; for(int i_var=0; i_varmagic_str(); - joint_str.add("_"); - joint_str.add(joint_info->magic_str()); + var_cs << cs_erase + << "VAR" << i_var << "_" + << "VAR" << j_var; - int *hist = joint_histograms[joint_str].data(); + int *hist = joint_histograms[var_cs].data(); offsets.clear(); counts.clear(); From 21e3eb7d5f046d353acc32db942d16554f61f1fc Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Thu, 4 Mar 2021 17:26:34 -0700 Subject: [PATCH 17/28] Per #1694, just switching to consistent variable name. --- met/src/tools/other/grid_diag/grid_diag.cc | 66 +++++++++++----------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/met/src/tools/other/grid_diag/grid_diag.cc b/met/src/tools/other/grid_diag/grid_diag.cc index b9f4f2d12a..7cc2f6c0ef 100644 --- a/met/src/tools/other/grid_diag/grid_diag.cc +++ b/met/src/tools/other/grid_diag/grid_diag.cc @@ -318,7 +318,7 @@ void process_series(void) { if(is_bad_data(var_maxs[i_var]) || max > var_maxs[i_var]) { var_maxs[i_var] = max; } - + // Update partial sums update_pdf(bin_mins[i_var_str][0], bin_deltas[i_var_str], @@ -510,34 +510,34 @@ void setup_nc_file(void) { i_var_str << cs_erase << "VAR" << i_var; - VarInfo *data_info = conf_info.data_info[i_var]; + VarInfo *data_info = conf_info.data_info[i_var]; + + // Set variable NetCDF name + ConcatString var_name = data_info->name_attr(); + var_name.add("_"); + var_name.add(data_info->level_attr()); - // Set variable NetCDF name - ConcatString var_name = data_info->name_attr(); - var_name.add("_"); - var_name.add(data_info->level_attr()); - - // Define histogram dimensions - NcDim var_dim = add_dim(nc_out, var_name, - (long) data_info->n_bins()); - data_var_dims.push_back(var_dim); - - // Define histogram bins - ConcatString var_min_name = var_name; - ConcatString var_max_name = var_name; - ConcatString var_mid_name = var_name; - var_min_name.add("_min"); - var_max_name.add("_max"); - var_mid_name.add("_mid"); - NcVar var_min = add_var(nc_out, var_min_name, ncFloat, var_dim, - deflate_level); - NcVar var_max = add_var(nc_out, var_max_name, ncFloat, var_dim, - deflate_level); - NcVar var_mid = add_var(nc_out, var_mid_name, ncFloat, var_dim, - deflate_level); - - // Add variable attributes - cs << cs_erase << "Minimum value of " << var_name << " bin"; + // Define histogram dimensions + NcDim var_dim = add_dim(nc_out, var_name, + (long) data_info->n_bins()); + data_var_dims.push_back(var_dim); + + // Define histogram bins + ConcatString var_min_name = var_name; + ConcatString var_max_name = var_name; + ConcatString var_mid_name = var_name; + var_min_name.add("_min"); + var_max_name.add("_max"); + var_mid_name.add("_mid"); + NcVar var_min = add_var(nc_out, var_min_name, ncFloat, var_dim, + deflate_level); + NcVar var_max = add_var(nc_out, var_max_name, ncFloat, var_dim, + deflate_level); + NcVar var_mid = add_var(nc_out, var_mid_name, ncFloat, var_dim, + deflate_level); + + // Add variable attributes + cs << cs_erase << "Minimum value of " << var_name << " bin"; add_var_att_local(&var_min, "long_name", cs); add_var_att_local(&var_min, "units", data_info->units_attr()); @@ -661,7 +661,7 @@ void write_histograms(void) { void write_joint_histograms(void) { vector offsets; vector counts; - ConcatString var_cs; + ConcatString ij_var_str; int i_hist=0; for(int i_var=0; i_var Date: Thu, 4 Mar 2021 17:29:39 -0700 Subject: [PATCH 18/28] Just consistent spacing. --- met/src/tools/other/grid_diag/grid_diag.cc | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/met/src/tools/other/grid_diag/grid_diag.cc b/met/src/tools/other/grid_diag/grid_diag.cc index 7cc2f6c0ef..6199ba408f 100644 --- a/met/src/tools/other/grid_diag/grid_diag.cc +++ b/met/src/tools/other/grid_diag/grid_diag.cc @@ -440,27 +440,27 @@ void setup_joint_histograms(void) { i_var_str << cs_erase << "VAR" << i_var; - VarInfo *data_info = conf_info.data_info[i_var]; - int n_bins = data_info->n_bins(); + VarInfo *data_info = conf_info.data_info[i_var]; + int n_bins = data_info->n_bins(); - for(int j_var=i_var+1; j_varn_bins(); + VarInfo *joint_info = conf_info.data_info[j_var]; + int n_joint_bins = joint_info->n_bins(); ij_var_str << cs_erase << i_var_str << "_" << j_var_str; - mlog << Debug(2) - << "Initializing " << data_info->magic_str_attr() << "_" + mlog << Debug(2) + << "Initializing " << data_info->magic_str_attr() << "_" << joint_info->magic_str_attr() << " joint histogram with " - << n_bins << " x " << n_joint_bins << " bins.\n"; - joint_histograms[ij_var_str] = vector(); + << n_bins << " x " << n_joint_bins << " bins.\n"; + joint_histograms[ij_var_str] = vector(); - init_joint_pdf(n_bins, n_joint_bins, - joint_histograms[ij_var_str]); - } // end for j_var + init_joint_pdf(n_bins, n_joint_bins, + joint_histograms[ij_var_str]); + } // end for j_var } // end for i_var } From 922484461f32a35b15591817a9c4e06539bb9ff9 Mon Sep 17 00:00:00 2001 From: "Julie.Prestopnik" Date: Fri, 5 Mar 2021 15:49:53 -0700 Subject: [PATCH 19/28] Adding files for ReadTheDocs --- met/docs/requirements.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/met/docs/requirements.txt b/met/docs/requirements.txt index f6bdb82841..b323295f77 100644 --- a/met/docs/requirements.txt +++ b/met/docs/requirements.txt @@ -1,11 +1,11 @@ -sphinx -sphinx-gallery -sphinx-rtd-theme -sphinxcontrib-applehelp +sphinx==2.4.4 +sphinx-gallery==0.7.0 +sphinx-rtd-theme==0.4.3 +sphinxcontrib-applehelp==1.0.2 sphinxcontrib-bibtex -sphinxcontrib-devhelp -sphinxcontrib-htmlhelp -sphinxcontrib-jsmath -sphinxcontrib-qthelp -sphinxcontrib-serializinghtml +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==1.0.3 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.4 From 1b41a0aab645933595c1cd6d1240011ad23a8f7c Mon Sep 17 00:00:00 2001 From: "Julie.Prestopnik" Date: Fri, 5 Mar 2021 15:53:00 -0700 Subject: [PATCH 20/28] Adding .yaml file for ReadTheDocs --- .readthedocs.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000000..c6dfdc81d4 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,22 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Build all formats (htmlzip, pdf, epub) +formats: all + +# Optionally set the version of Python and requirements required to build your +# docs +python: + version: 3.7 + install: + - requirements: docs/requirements.txt + +# Configuration for Sphinx documentation (this is the default documentation +# type) +sphinx: + builder: html + configuration: conf.py \ No newline at end of file From 8382b33bb8662876a62ea5e8c9b2788df87a70fd Mon Sep 17 00:00:00 2001 From: "Julie.Prestopnik" Date: Fri, 5 Mar 2021 16:07:20 -0700 Subject: [PATCH 21/28] Updated path to requirements.txt file --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index c6dfdc81d4..751fd6e5e6 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -13,7 +13,7 @@ formats: all python: version: 3.7 install: - - requirements: docs/requirements.txt + - requirements: met/docs/requirements.txt # Configuration for Sphinx documentation (this is the default documentation # type) From 0303f1f3740c59dee3a959ea7deaad32abaec90d Mon Sep 17 00:00:00 2001 From: "Julie.Prestopnik" Date: Fri, 5 Mar 2021 16:12:21 -0700 Subject: [PATCH 22/28] Updated path to conf.py file --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 751fd6e5e6..36014c884e 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -19,4 +19,4 @@ python: # type) sphinx: builder: html - configuration: conf.py \ No newline at end of file + configuration: met/docs/conf.py \ No newline at end of file From 99a63631a6828b6f0a37e4becd7820cd1511136c Mon Sep 17 00:00:00 2001 From: "Julie.Prestopnik" Date: Fri, 5 Mar 2021 16:35:47 -0700 Subject: [PATCH 23/28] Removing ReadTheDocs files and working in separate branch --- .readthedocs.yaml | 22 ---------------------- met/docs/requirements.txt | 11 ----------- 2 files changed, 33 deletions(-) delete mode 100644 .readthedocs.yaml delete mode 100644 met/docs/requirements.txt diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index 36014c884e..0000000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# .readthedocs.yaml -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -# Required -version: 2 - -# Build all formats (htmlzip, pdf, epub) -formats: all - -# Optionally set the version of Python and requirements required to build your -# docs -python: - version: 3.7 - install: - - requirements: met/docs/requirements.txt - -# Configuration for Sphinx documentation (this is the default documentation -# type) -sphinx: - builder: html - configuration: met/docs/conf.py \ No newline at end of file diff --git a/met/docs/requirements.txt b/met/docs/requirements.txt deleted file mode 100644 index b323295f77..0000000000 --- a/met/docs/requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -sphinx==2.4.4 -sphinx-gallery==0.7.0 -sphinx-rtd-theme==0.4.3 -sphinxcontrib-applehelp==1.0.2 -sphinxcontrib-bibtex -sphinxcontrib-devhelp==1.0.2 -sphinxcontrib-htmlhelp==1.0.3 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 -sphinxcontrib-serializinghtml==1.1.4 - From 592c93714f9c9b4b8d3bcb00eadca58c2c8edd56 Mon Sep 17 00:00:00 2001 From: jprestop Date: Mon, 8 Mar 2021 18:15:41 -0700 Subject: [PATCH 24/28] Trying different options for formats (#1702) --- .readthedocs.yaml | 23 +++++++++++++++++++++++ met/docs/requirements.txt | 10 ++++++++++ 2 files changed, 33 insertions(+) create mode 100644 .readthedocs.yaml create mode 100644 met/docs/requirements.txt diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000000..e148a2aad0 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,23 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Build all formats (htmlzip, pdf, epub) +#formats: all +formats: [] + +# Optionally set the version of Python and requirements required to build your +# docs +python: + version: 3.7 + install: + - requirements: met/docs/requirements.txt + +# Configuration for Sphinx documentation (this is the default documentation +# type) +sphinx: + builder: html + configuration: met/docs/conf.py \ No newline at end of file diff --git a/met/docs/requirements.txt b/met/docs/requirements.txt new file mode 100644 index 0000000000..87ac8f9656 --- /dev/null +++ b/met/docs/requirements.txt @@ -0,0 +1,10 @@ +sphinx==2.4.4 +sphinx-gallery==0.7.0 +sphinx-rtd-theme==0.4.3 +sphinxcontrib-applehelp==1.0.2 +sphinxcontrib-bibtex +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==1.0.3 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.4 From d80aafa54c59e69d63f9f97bb30c508545a4ef2f Mon Sep 17 00:00:00 2001 From: johnhg Date: Wed, 10 Mar 2021 10:56:52 -0700 Subject: [PATCH 25/28] Per #1706, add bugfix to the develop branch. Also add a new job to unit_stat_analysis.xml to test out the aggregation of the ECNT line type. This will add new unit test output and cause the NB to fail. (#1708) --- .../tools/core/stat_analysis/aggr_stat_line.cc | 1 + test/xml/unit_stat_analysis.xml | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/met/src/tools/core/stat_analysis/aggr_stat_line.cc b/met/src/tools/core/stat_analysis/aggr_stat_line.cc index db7cd98ba9..bb9819634f 100644 --- a/met/src/tools/core/stat_analysis/aggr_stat_line.cc +++ b/met/src/tools/core/stat_analysis/aggr_stat_line.cc @@ -2597,6 +2597,7 @@ void aggr_ecnt_lines(LineDataFile &f, STATAnalysisJob &job, m[key].ens_pd.var_oerr_na.add(square(cur.spread_oerr)); m[key].ens_pd.var_plus_oerr_na.add(square(cur.spread_plus_oerr)); m[key].ens_pd.wgt_na.add(cur.total); + m[key].ens_pd.skip_ba.add(false); // // Store the summary statistics diff --git a/test/xml/unit_stat_analysis.xml b/test/xml/unit_stat_analysis.xml index 0d5fa6edc4..799011f8a6 100644 --- a/test/xml/unit_stat_analysis.xml +++ b/test/xml/unit_stat_analysis.xml @@ -74,6 +74,22 @@ + + &MET_BIN;/stat_analysis + \ + -lookin &OUTPUT_DIR;/ensemble_stat/ensemble_stat_SKIP_CONST_20120410_120000V.stat \ + -job aggregate -line_type ECNT -by FCST_VAR -obs_thresh NA -vx_mask NWC,GRB \ + -dump_row &OUTPUT_DIR;/stat_analysis/AGG_ECNT_dump.stat \ + -out_stat &OUTPUT_DIR;/stat_analysis/AGG_ECNT_out.stat \ + -set_hdr VX_MASK NWC_AND_GRB \ + -v 1 + + + &OUTPUT_DIR;/stat_analysis/AGG_ECNT_dump.stat + &OUTPUT_DIR;/stat_analysis/AGG_ECNT_out.stat + + + &MET_BIN;/stat_analysis \ From 6ed8fc4fa40497da5dad10836b0738945a66ce5c Mon Sep 17 00:00:00 2001 From: johnhg Date: Wed, 10 Mar 2021 14:55:23 -0700 Subject: [PATCH 26/28] Feature 1471 python_grid (#1704) * Per #1471, defined a parse_grid_string() function in the vx_statistics library and then updated vx_data2d_python to call that function. However, this creates a circular dependency because vx_data2d_python now depends on vx_statistics. * Per #1471, because of the change in dependencies, I had to modify many, many Makefile.am files to link to the -lvx_statistics after -lvx_data2d_python. This is not great, but I didn't find a better solution. * Per #1471, add a sanity check to make sure the grid and data dimensions actually match. * Per #1471, add 3 new unit tests to demonstrate setting the python grid as a named grid, grid specification string, or a gridded data file. * Per #1471, document python grid changes in appendix F. * Per #1471, just spacing. * Per #1471, lots of Makefile.am changes to get this code to compile on kiowa. Worringly, it compiled and linked fine on my Mac laptop but not on kiowa. Must be some large differences in the linker logic. Co-authored-by: John Halley Gotway --- met/docs/Users_Guide/appendixF.rst | 30 +++++++-- met/internal_tests/basic/vx_util/Makefile.am | 30 ++++++--- .../libcode/vx_data2d_factory/Makefile.am | 11 +++- .../libcode/vx_nc_util/Makefile.am | 29 ++++++--- .../libcode/vx_tc_util/Makefile.am | 63 +++++++++++++------ .../tools/other/mode_time_domain/Makefile.am | 2 + met/scripts/python/Makefile.am | 1 + met/scripts/python/read_ascii_numpy_grid.py | 53 ++++++++++++++++ .../dataplane_from_numpy_array.cc | 39 +++++++++++- .../libcode/vx_python3_utils/python3_dict.cc | 19 ++++-- .../libcode/vx_python3_utils/python3_dict.h | 2 +- met/src/libcode/vx_statistics/apply_mask.cc | 45 +++++++++++++ met/src/libcode/vx_statistics/apply_mask.h | 2 + met/src/tools/core/ensemble_stat/Makefile.am | 1 + met/src/tools/core/grid_stat/Makefile.am | 1 + met/src/tools/core/mode/Makefile.am | 1 + met/src/tools/core/mode_analysis/Makefile.am | 13 ++-- met/src/tools/core/pcp_combine/Makefile.am | 2 + met/src/tools/core/point_stat/Makefile.am | 1 + .../tools/core/series_analysis/Makefile.am | 1 + met/src/tools/core/stat_analysis/Makefile.am | 9 +-- met/src/tools/core/wavelet_stat/Makefile.am | 1 + met/src/tools/dev_utils/Makefile.am | 1 + met/src/tools/other/ascii2nc/Makefile.am | 1 + met/src/tools/other/gen_vx_mask/Makefile.am | 2 + met/src/tools/other/grid_diag/Makefile.am | 1 + met/src/tools/other/gsi_tools/Makefile.am | 33 +++++----- met/src/tools/other/ioda2nc/Makefile.am | 1 + met/src/tools/other/lidar2nc/Makefile.am | 1 + met/src/tools/other/madis2nc/Makefile.am | 1 + met/src/tools/other/mode_graphics/Makefile.am | 1 + .../tools/other/mode_time_domain/Makefile.am | 1 + met/src/tools/other/modis_regrid/Makefile.am | 2 + met/src/tools/other/pb2nc/Makefile.am | 1 + .../tools/other/plot_data_plane/Makefile.am | 2 + .../tools/other/plot_point_obs/Makefile.am | 1 + met/src/tools/other/point2grid/Makefile.am | 1 + .../tools/other/regrid_data_plane/Makefile.am | 1 + .../tools/other/shift_data_plane/Makefile.am | 1 + met/src/tools/other/wwmca_tool/Makefile.am | 1 + .../tools/tc_utils/rmw_analysis/Makefile.am | 1 + met/src/tools/tc_utils/tc_gen/Makefile.am | 1 + met/src/tools/tc_utils/tc_pairs/Makefile.am | 1 + met/src/tools/tc_utils/tc_rmw/Makefile.am | 1 + met/src/tools/tc_utils/tc_stat/Makefile.am | 1 + test/xml/unit_python.xml | 62 ++++++++++++++++++ 46 files changed, 394 insertions(+), 82 deletions(-) create mode 100755 met/scripts/python/read_ascii_numpy_grid.py diff --git a/met/docs/Users_Guide/appendixF.rst b/met/docs/Users_Guide/appendixF.rst index e122d6a560..a5e34df338 100644 --- a/met/docs/Users_Guide/appendixF.rst +++ b/met/docs/Users_Guide/appendixF.rst @@ -65,7 +65,9 @@ The data must be loaded into a 2D NumPy array named **met_data**. In addition th 'long_name': 'FooBar', 'level': 'Surface', 'units': 'None', - + + # Define 'grid' as a string or a dictionary + 'grid': { 'type': 'Lambert Conformal', 'hemisphere': 'N', @@ -83,12 +85,32 @@ The data must be loaded into a 2D NumPy array named **met_data**. In addition th 'ny': 129, } - } + } + + +In the dictionary, valid time, initialization time, lead time and accumulation time (if any) must be indicated by strings. Valid and initialization times must be given in YYYYMMDD[_HH[MMSS]] format, and lead and accumulation times must be given in HH[MMSS] format, where the square brackets indicate optional elements. The dictionary must also include strings for the name, long_name, level, and units to describe the data. The rest of the **attrs** dictionary gives the grid size and projection information in the same format that is used in the netCDF files written out by the MET tools. Those entries are also listed below. Note that the **grid** entry in the **attrs** dictionary can either be defined as a string or as a dictionary itself. + +If specified as a string, **grid** can be defined as follows: + +• As a named grid: + +.. code-block:: none + 'grid': 'G212' + +• As a grid specification string, as described in :ref:`appendixB`: + +.. code-block:: none + + 'grid': 'lambert 185 129 12.19 -133.459 -95 40.635 6371.2 25 25 N' + +• As the path to an existing gridded data file: + +.. code-block:: none -In the dictionary, valid time, initialization time, lead time and accumulation time (if any) must be indicated by strings. Valid and initialization times must be given in YYYYMMDD[_HH[MMSS]] format, and lead and accumulation times must be given in HH[MMSS] format, where the square brackets indicate optional elements. The dictionary must also include strings for the name, long_name, level, and units to describe the data. The rest of the **attrs** dictionary gives the grid size and projection information in the same format that is used in the netCDF files written out by the MET tools. Those entries are also listed below. Note that the **grid** entry in the **attrs** dictionary is itself a dictionary. + 'grid': '/path/to/sample_data.grib' -The supported grid **type** strings are described below: +When specified as a dictionary, the contents of the **grid** dictionary vary based on the grid **type** string. The entries for the supported grid types are described below: • **Lambert Conformal** grid dictionary entries: diff --git a/met/internal_tests/basic/vx_util/Makefile.am b/met/internal_tests/basic/vx_util/Makefile.am index 364b846a0b..96afff9e82 100644 --- a/met/internal_tests/basic/vx_util/Makefile.am +++ b/met/internal_tests/basic/vx_util/Makefile.am @@ -82,18 +82,30 @@ endif test_ascii_header_SOURCES = test_ascii_header.cc test_ascii_header_CPPFLAGS = ${MET_CPPFLAGS} test_ascii_header_LDFLAGS = -L. ${MET_LDFLAGS} -test_ascii_header_LDADD = -lvx_util \ +test_ascii_header_LDADD = -lvx_stat_out \ + -lvx_statistics \ + -lvx_shapedata \ + -lvx_gsl_prob \ + -lvx_analysis_util \ + -lvx_shapedata \ + -lvx_util \ + $(PYTHON_LIBS) \ + -lvx_statistics \ + -lvx_data2d_factory \ + -lvx_data2d_nc_met \ + -lvx_data2d_nc_pinterp \ + $(PYTHON_LIBS) \ + -lvx_data2d_nccf \ + -lvx_data2d_grib $(GRIB2_LIBS) \ + -lvx_data2d \ + -lvx_nc_util \ + -lvx_regrid \ + -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ -lvx_cal \ -lvx_util \ -lvx_math \ + -lvx_color \ -lvx_log \ - -lgsl -lgslcblas - -if ENABLE_PYTHON -test_ascii_header_LDADD += $(MET_PYTHON_LD) -lvx_data2d_python -lvx_python3_utils -lvx_data2d_python -lvx_python3_utils -lvx_math -test_ascii_header_LDADD += -lvx_data2d_python -lvx_python3_utils -lvx_data2d_python -lvx_python3_utils -test_ascii_header_LDADD += -lvx_math -lvx_grid -lvx_util -lvx_data2d -lvx_config -lvx_gsl_prob -lvx_cal -lvx_math -lvx_util -endif - + -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas -lvx_util diff --git a/met/internal_tests/libcode/vx_data2d_factory/Makefile.am b/met/internal_tests/libcode/vx_data2d_factory/Makefile.am index b1d31b3aa4..04a31968c0 100644 --- a/met/internal_tests/libcode/vx_data2d_factory/Makefile.am +++ b/met/internal_tests/libcode/vx_data2d_factory/Makefile.am @@ -25,20 +25,27 @@ test_is_grib_LDADD = -lvx_data2d_factory \ test_factory_SOURCES = test_factory.cc test_factory_CPPFLAGS = ${MET_CPPFLAGS} test_factory_LDFLAGS = -L. ${MET_LDFLAGS} -test_factory_LDADD = -lvx_data2d_factory \ +test_factory_LDADD = -lvx_stat_out \ + -lvx_statistics \ + -lvx_shapedata \ + -lvx_gsl_prob \ + -lvx_analysis_util \ + -lvx_data2d_factory \ -lvx_data2d_nc_met \ -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ + -lvx_regrid \ -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ + -lvx_cal \ -lvx_util \ -lvx_math \ -lvx_color \ - -lvx_cal \ -lvx_log \ -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas diff --git a/met/internal_tests/libcode/vx_nc_util/Makefile.am b/met/internal_tests/libcode/vx_nc_util/Makefile.am index 13bf6c2bc0..ff40235a5c 100644 --- a/met/internal_tests/libcode/vx_nc_util/Makefile.am +++ b/met/internal_tests/libcode/vx_nc_util/Makefile.am @@ -19,21 +19,32 @@ noinst_PROGRAMS = test_pressure_levels test_pressure_levels_SOURCES = test_pressure_levels.cc test_pressure_levels_CPPFLAGS = ${MET_CPPFLAGS} test_pressure_levels_LDFLAGS = -L. ${MET_LDFLAGS} -test_pressure_levels_LDADD = -lvx_tc_util \ +test_pressure_levels_LDADD = -lvx_stat_out \ + -lvx_statistics \ + -lvx_shapedata \ + -lvx_gsl_prob \ + -lvx_analysis_util \ + -lvx_tc_util \ + -lvx_shapedata \ + -lvx_util \ + $(PYTHON_LIBS) \ + -lvx_statistics \ + -lvx_data2d_factory \ + -lvx_data2d_nc_met \ + -lvx_data2d_nc_pinterp \ + $(PYTHON_LIBS) \ + -lvx_data2d_nccf \ + -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d \ -lvx_nc_util \ + -lvx_regrid \ + -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ -lvx_cal \ -lvx_util \ -lvx_math \ + -lvx_color \ -lvx_log \ - -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas + -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas -lvx_util -if ENABLE_PYTHON -test_pressure_levels_LDADD += $(MET_PYTHON_LD) -test_pressure_levels_LDADD += -lvx_data2d_python -lvx_python3_utils -test_pressure_levels_LDADD += -lvx_data2d_python -lvx_python3_utils -test_pressure_levels_LDADD += -lvx_grid -lvx_util -lvx_config -test_pressure_levels_LDADD += -lvx_data2d -lvx_gsl_prob -lvx_util -lvx_math -lvx_cal -lvx_config -endif diff --git a/met/internal_tests/libcode/vx_tc_util/Makefile.am b/met/internal_tests/libcode/vx_tc_util/Makefile.am index 2b71de8a9f..a5fc96c5d0 100644 --- a/met/internal_tests/libcode/vx_tc_util/Makefile.am +++ b/met/internal_tests/libcode/vx_tc_util/Makefile.am @@ -20,39 +20,64 @@ noinst_PROGRAMS = test_read \ test_read_SOURCES = test_read.cc test_read_CPPFLAGS = ${MET_CPPFLAGS} test_read_LDFLAGS = -L. ${MET_LDFLAGS} -test_read_LDADD = -lvx_tc_util \ +test_read_LDADD = -lvx_stat_out \ + -lvx_statistics \ + -lvx_shapedata \ + -lvx_gsl_prob \ + -lvx_analysis_util \ + -lvx_tc_util \ + -lvx_shapedata \ + -lvx_util \ + $(PYTHON_LIBS) \ + -lvx_statistics \ + -lvx_data2d_factory \ + -lvx_data2d_nc_met \ + -lvx_data2d_nc_pinterp \ + $(PYTHON_LIBS) \ + -lvx_data2d_nccf \ + -lvx_data2d_grib $(GRIB2_LIBS) \ + -lvx_data2d \ + -lvx_nc_util \ + -lvx_regrid \ + -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ -lvx_cal \ -lvx_util \ -lvx_math \ + -lvx_color \ -lvx_log \ - -lgsl -lgslcblas - -if ENABLE_PYTHON -test_read_LDADD += $(MET_PYTHON_LD) -test_read_LDADD += -lvx_data2d_python -lvx_python3_utils -test_read_LDADD += -lvx_data2d_python -lvx_python3_utils -test_read_LDADD += -lvx_grid -lvx_util -lvx_config -test_read_LDADD += -lvx_data2d -lvx_gsl_prob -lvx_util -lvx_math -lvx_cal -lvx_config -endif + -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas -lvx_util test_read_prob_SOURCES = test_read_prob.cc test_read_prob_CPPFLAGS = ${MET_CPPFLAGS} test_read_prob_LDFLAGS = -L. ${MET_LDFLAGS} -test_read_prob_LDADD = -lvx_tc_util \ +test_read_prob_LDADD = -lvx_stat_out \ + -lvx_statistics \ + -lvx_shapedata \ + -lvx_gsl_prob \ + -lvx_analysis_util \ + -lvx_tc_util \ + -lvx_shapedata \ + -lvx_util \ + $(PYTHON_LIBS) \ + -lvx_statistics \ + -lvx_data2d_factory \ + -lvx_data2d_nc_met \ + -lvx_data2d_nc_pinterp \ + $(PYTHON_LIBS) \ + -lvx_data2d_nccf \ + -lvx_data2d_grib $(GRIB2_LIBS) \ + -lvx_data2d \ + -lvx_nc_util \ + -lvx_regrid \ + -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ -lvx_cal \ -lvx_util \ -lvx_math \ + -lvx_color \ -lvx_log \ - -lgsl -lgslcblas + -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas -lvx_util -if ENABLE_PYTHON -test_read_prob_LDADD += $(MET_PYTHON_LD) -test_read_prob_LDADD += -lvx_data2d_python -lvx_python3_utils -test_read_prob_LDADD += -lvx_data2d_python -lvx_python3_utils -test_read_prob_LDADD += -lvx_grid -lvx_util -lvx_config -test_read_prob_LDADD += -lvx_data2d -lvx_gsl_prob -lvx_util -lvx_math -lvx_cal -lvx_config -endif diff --git a/met/internal_tests/tools/other/mode_time_domain/Makefile.am b/met/internal_tests/tools/other/mode_time_domain/Makefile.am index 2b62114046..693d9de44c 100644 --- a/met/internal_tests/tools/other/mode_time_domain/Makefile.am +++ b/met/internal_tests/tools/other/mode_time_domain/Makefile.am @@ -56,6 +56,7 @@ test_velocity_LDADD = \ -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d_nccf \ -lvx_data2d \ -lvx_nc_util \ @@ -69,3 +70,4 @@ test_velocity_LDADD = \ -lvx_color \ -lvx_log \ -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas -lz + diff --git a/met/scripts/python/Makefile.am b/met/scripts/python/Makefile.am index b980d2e4ab..78dc7d88bc 100644 --- a/met/scripts/python/Makefile.am +++ b/met/scripts/python/Makefile.am @@ -27,6 +27,7 @@ pythonscriptsdir = $(pkgdatadir)/python pythonscripts_DATA = \ read_ascii_numpy.py \ + read_ascii_numpy_grid.py \ read_ascii_xarray.py \ read_ascii_point.py \ read_ascii_mpr.py diff --git a/met/scripts/python/read_ascii_numpy_grid.py b/met/scripts/python/read_ascii_numpy_grid.py new file mode 100755 index 0000000000..88d868a2ad --- /dev/null +++ b/met/scripts/python/read_ascii_numpy_grid.py @@ -0,0 +1,53 @@ +from __future__ import print_function + +import numpy as np +import os +import sys + +########################################### + +print('Python Script:\t', sys.argv[0]) + + ## + ## input file specified on the command line + ## load the data into the numpy array + ## + +if len(sys.argv) == 3: + # Read the input file as the first argument + input_file = os.path.expandvars(sys.argv[1]) + data_name = sys.argv[2] + try: + # Print some output to verify that this script ran + print("Input File:\t" + repr(input_file)) + print("Data Name:\t" + repr(data_name)) + met_data = np.loadtxt(input_file) + print("Data Shape:\t" + repr(met_data.shape)) + print("Data Type:\t" + repr(met_data.dtype)) + except NameError: + print("Can't find the input file") +else: + print("ERROR: read_ascii_numpy.py -> Must specify exactly one input file and a name for the data.") + sys.exit(1) + +########################################### + + ## + ## create the metadata dictionary + ## + +attrs = { + + 'valid': '20050807_120000', + 'init': '20050807_000000', + 'lead': '120000', + 'accum': '120000', + + 'name': data_name, + 'long_name': data_name + '_word', + 'level': 'Surface', + 'units': 'None', + 'grid': os.path.expandvars(os.getenv('PYTHON_GRID')) +} + +print("Attributes:\t" + repr(attrs)) diff --git a/met/src/libcode/vx_data2d_python/dataplane_from_numpy_array.cc b/met/src/libcode/vx_data2d_python/dataplane_from_numpy_array.cc index 7462c20829..61f997a267 100644 --- a/met/src/libcode/vx_data2d_python/dataplane_from_numpy_array.cc +++ b/met/src/libcode/vx_data2d_python/dataplane_from_numpy_array.cc @@ -12,6 +12,7 @@ #include "string.h" #include "vx_python3_utils.h" +#include "vx_statistics.h" #include "check_endian.h" #include "data_plane.h" @@ -219,9 +220,43 @@ dp_out.set_accum(t); //////////////////// -PyObject * py_grid = attrs.lookup_dict("grid"); + // + // attempt to parse "grid" as a string + // + +s = attrs.lookup_string("grid", false); + +if ( s.nonempty() ) { + + grid_out = parse_grid_string(s.c_str()); + +} +else { + + // + // otherwise, parse "grid" as a dictionary + // + + PyObject * py_grid = attrs.lookup_dict("grid"); -grid_from_python_dict(Python3_Dict(py_grid), grid_out); + grid_from_python_dict(Python3_Dict(py_grid), grid_out); + +} + + // + // make sure the grid and data dimensions match + // + +if ( grid_out.nx() != Nx || grid_out.ny() != Ny ) { + + mlog << Error << "\ndataplane_from_numpy_array() -> " + << "the grid dimensions (" << grid_out.nx() << ", " + << grid_out.ny() << ") and data dimensions (" << Nx + << ", " << Ny << ") do not match!\n\n"; + + exit ( 1 ); + +} //////////////////// diff --git a/met/src/libcode/vx_python3_utils/python3_dict.cc b/met/src/libcode/vx_python3_utils/python3_dict.cc index 9f6036f801..6d38599aa4 100644 --- a/met/src/libcode/vx_python3_utils/python3_dict.cc +++ b/met/src/libcode/vx_python3_utils/python3_dict.cc @@ -220,7 +220,7 @@ return ( t ); //////////////////////////////////////////////////////////////////////// -ConcatString Python3_Dict::lookup_string(const char * key) const +ConcatString Python3_Dict::lookup_string(const char * key, bool error_out) const { @@ -240,14 +240,23 @@ if ( ! a ) { if ( ! PyUnicode_Check(a) ) { - mlog << Error << "\nPython3_Dict::lookup_string(const char * key) -> " - << "value for key \"" << key << "\" not a character string\n\n"; + if ( error_out ) { - exit ( 1 ); + mlog << Error << "\nPython3_Dict::lookup_string(const char * key) -> " + << "value for key \"" << key << "\" not a character string\n\n"; + + exit ( 1 ); + + } + + s.clear(); } +else { -s = PyUnicode_AsUTF8(a); + s = PyUnicode_AsUTF8(a); + +} return ( s ); diff --git a/met/src/libcode/vx_python3_utils/python3_dict.h b/met/src/libcode/vx_python3_utils/python3_dict.h index 7ce77d7b05..34cfd803de 100644 --- a/met/src/libcode/vx_python3_utils/python3_dict.h +++ b/met/src/libcode/vx_python3_utils/python3_dict.h @@ -68,7 +68,7 @@ class Python3_Dict { int lookup_int (const char * key) const; double lookup_double (const char * key) const; - ConcatString lookup_string (const char * key) const; + ConcatString lookup_string (const char * key, bool error_out = true) const; PyObject * lookup_dict (const char * key) const; PyObject * lookup_list (const char * key) const; diff --git a/met/src/libcode/vx_statistics/apply_mask.cc b/met/src/libcode/vx_statistics/apply_mask.cc index f5ea562630..b97e9272d3 100644 --- a/met/src/libcode/vx_statistics/apply_mask.cc +++ b/met/src/libcode/vx_statistics/apply_mask.cc @@ -84,6 +84,51 @@ Grid parse_vx_grid(const RegridInfo info, const Grid *fgrid, const Grid *ogrid) //////////////////////////////////////////////////////////////////////// +Grid parse_grid_string(const char *grid_str) { + Grid grid; + StringArray sa; + + // Parse as a white-space separated string + sa.parse_wsss(grid_str); + + // Search for a named grid + if(sa.n() == 1 && find_grid_by_name(sa[0].c_str(), grid)) { + mlog << Debug(3) << "Use the grid named \"" + << grid_str << "\".\n"; + } + // Parse grid definition + else if(sa.n() > 1 && parse_grid_def(sa, grid)) { + mlog << Debug(3) << "Use the grid defined by string \"" + << grid_str << "\".\n"; + } + // Extract the grid from a gridded data file + else { + mlog << Debug(3) << "Use the grid defined by file \"" + << grid_str << "\".\n"; + + Met2dDataFileFactory m_factory; + Met2dDataFile *met_ptr = (Met2dDataFile *) 0; + + // Open the data file + if(!(met_ptr = m_factory.new_met_2d_data_file(grid_str))) { + mlog << Error << "\nparse_grid_string() -> " + << "can't open file \"" << grid_str + << "\"\n\n"; + exit(1); + } + + // Store the grid + grid = met_ptr->grid(); + + // Cleanup + if(met_ptr) { delete met_ptr; met_ptr = 0; } + } + + return(grid); +} + +//////////////////////////////////////////////////////////////////////// + void parse_grid_weight(const Grid &grid, const GridWeightType t, DataPlane &wgt_dp) { int x, y; diff --git a/met/src/libcode/vx_statistics/apply_mask.h b/met/src/libcode/vx_statistics/apply_mask.h index 0ac9aac85e..5e62500d73 100644 --- a/met/src/libcode/vx_statistics/apply_mask.h +++ b/met/src/libcode/vx_statistics/apply_mask.h @@ -29,6 +29,8 @@ static const char poly_str_delim[] = "{}"; extern Grid parse_vx_grid(const RegridInfo, const Grid *, const Grid *); +extern Grid parse_grid_string(const char *); + extern void parse_grid_weight(const Grid &, const GridWeightType, DataPlane &); diff --git a/met/src/tools/core/ensemble_stat/Makefile.am b/met/src/tools/core/ensemble_stat/Makefile.am index d7cd14c178..172302f19a 100644 --- a/met/src/tools/core/ensemble_stat/Makefile.am +++ b/met/src/tools/core/ensemble_stat/Makefile.am @@ -26,6 +26,7 @@ ensemble_stat_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_obs \ -lvx_nc_util \ diff --git a/met/src/tools/core/grid_stat/Makefile.am b/met/src/tools/core/grid_stat/Makefile.am index 8db13c50bf..e1451258f0 100644 --- a/met/src/tools/core/grid_stat/Makefile.am +++ b/met/src/tools/core/grid_stat/Makefile.am @@ -26,6 +26,7 @@ grid_stat_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/core/mode/Makefile.am b/met/src/tools/core/mode/Makefile.am index b3260abef1..662dee58ef 100644 --- a/met/src/tools/core/mode/Makefile.am +++ b/met/src/tools/core/mode/Makefile.am @@ -39,6 +39,7 @@ mode_LDADD = -lvx_pxm \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/core/mode_analysis/Makefile.am b/met/src/tools/core/mode_analysis/Makefile.am index 7305ea30a9..182faf29d1 100644 --- a/met/src/tools/core/mode_analysis/Makefile.am +++ b/met/src/tools/core/mode_analysis/Makefile.am @@ -8,10 +8,6 @@ MAINTAINERCLEANFILES = Makefile.in include ${top_srcdir}/Make-include -if ENABLE_PYTHON -LDFLAGS += -lvx_python3_utils -endif - # The program bin_PROGRAMS = mode_analysis @@ -25,6 +21,9 @@ mode_analysis_LDADD = -lvx_stat_out \ -lvx_gsl_prob \ -lvx_analysis_util \ -lvx_shapedata \ + -lvx_util \ + $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d_factory \ -lvx_data2d_nc_met \ -lvx_data2d_nc_pinterp \ @@ -33,6 +32,7 @@ mode_analysis_LDADD = -lvx_stat_out \ -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d \ -lvx_nc_util \ + -lvx_regrid \ -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ @@ -43,9 +43,4 @@ mode_analysis_LDADD = -lvx_stat_out \ -lvx_log \ -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas -lvx_util -if ENABLE_PYTHON -mode_analysis_LDADD += $(MET_PYTHON_LD) -lvx_data2d_python -lvx_python3_utils -lvx_data2d_python -lvx_python3_utils -lvx_util -endif - - EXTRA_DIST = config_to_att.h diff --git a/met/src/tools/core/pcp_combine/Makefile.am b/met/src/tools/core/pcp_combine/Makefile.am index 1a07c63b71..0fa6d2ecc4 100644 --- a/met/src/tools/core/pcp_combine/Makefile.am +++ b/met/src/tools/core/pcp_combine/Makefile.am @@ -20,8 +20,10 @@ pcp_combine_LDADD = -lvx_data2d_factory \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ + -lvx_regrid \ -lvx_grid \ -lvx_config \ -lvx_cal \ diff --git a/met/src/tools/core/point_stat/Makefile.am b/met/src/tools/core/point_stat/Makefile.am index ef64c96fc8..02dbac944a 100644 --- a/met/src/tools/core/point_stat/Makefile.am +++ b/met/src/tools/core/point_stat/Makefile.am @@ -26,6 +26,7 @@ point_stat_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_obs \ -lvx_nc_util \ diff --git a/met/src/tools/core/series_analysis/Makefile.am b/met/src/tools/core/series_analysis/Makefile.am index 79a33460f0..26352e71eb 100644 --- a/met/src/tools/core/series_analysis/Makefile.am +++ b/met/src/tools/core/series_analysis/Makefile.am @@ -26,6 +26,7 @@ series_analysis_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/core/stat_analysis/Makefile.am b/met/src/tools/core/stat_analysis/Makefile.am index 909143d9f3..60ca332858 100644 --- a/met/src/tools/core/stat_analysis/Makefile.am +++ b/met/src/tools/core/stat_analysis/Makefile.am @@ -8,19 +8,13 @@ MAINTAINERCLEANFILES = Makefile.in include ${top_srcdir}/Make-include -OPT_PYTHON_SOURCES = - -if ENABLE_PYTHON -LDFLAGS += -lvx_python3_utils -endif - # The program bin_PROGRAMS = stat_analysis stat_analysis_SOURCES = stat_analysis.cc \ aggr_stat_line.cc \ parse_stat_line.cc \ - stat_analysis_job.cc $(OPT_PYTHON_SOURCES) + stat_analysis_job.cc stat_analysis_CPPFLAGS = ${MET_CPPFLAGS} stat_analysis_LDFLAGS = ${MET_LDFLAGS} stat_analysis_LDADD = -lvx_stat_out \ @@ -34,6 +28,7 @@ stat_analysis_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/core/wavelet_stat/Makefile.am b/met/src/tools/core/wavelet_stat/Makefile.am index 4f6759db27..25150834a5 100644 --- a/met/src/tools/core/wavelet_stat/Makefile.am +++ b/met/src/tools/core/wavelet_stat/Makefile.am @@ -32,6 +32,7 @@ wavelet_stat_LDADD = -lvx_pxm \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/dev_utils/Makefile.am b/met/src/tools/dev_utils/Makefile.am index 03a83fc690..9240cb48bd 100644 --- a/met/src/tools/dev_utils/Makefile.am +++ b/met/src/tools/dev_utils/Makefile.am @@ -127,6 +127,7 @@ gen_climo_bin_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/other/ascii2nc/Makefile.am b/met/src/tools/other/ascii2nc/Makefile.am index 3b4f21b46a..7fce7b81ba 100644 --- a/met/src/tools/other/ascii2nc/Makefile.am +++ b/met/src/tools/other/ascii2nc/Makefile.am @@ -39,6 +39,7 @@ ascii2nc_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ -lvx_data2d_nccf \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_obs \ -lvx_nc_util \ diff --git a/met/src/tools/other/gen_vx_mask/Makefile.am b/met/src/tools/other/gen_vx_mask/Makefile.am index 2b52cb7cb6..f8b773183b 100644 --- a/met/src/tools/other/gen_vx_mask/Makefile.am +++ b/met/src/tools/other/gen_vx_mask/Makefile.am @@ -24,6 +24,7 @@ gen_vx_mask_LDADD = -lvx_shapedata \ -lvx_data2d_nc_met \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_gis \ -lvx_nc_util \ -lvx_data2d \ @@ -39,6 +40,7 @@ gen_vx_mask_LDADD = -lvx_shapedata \ -lvx_stat_out \ -lvx_statistics \ -lvx_gsl_prob \ + -lvx_regrid \ -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ diff --git a/met/src/tools/other/grid_diag/Makefile.am b/met/src/tools/other/grid_diag/Makefile.am index 877772a982..1d30d1bce4 100644 --- a/met/src/tools/other/grid_diag/Makefile.am +++ b/met/src/tools/other/grid_diag/Makefile.am @@ -26,6 +26,7 @@ grid_diag_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/other/gsi_tools/Makefile.am b/met/src/tools/other/gsi_tools/Makefile.am index 40c550a1c1..1c94d4be2b 100644 --- a/met/src/tools/other/gsi_tools/Makefile.am +++ b/met/src/tools/other/gsi_tools/Makefile.am @@ -8,10 +8,6 @@ MAINTAINERCLEANFILES = Makefile.in include ${top_srcdir}/Make-include -if ENABLE_PYTHON -LDFLAGS += -lvx_data2d_python -lvx_python3_utils -endif - # The programs bin_PROGRAMS = gsid2mpr \ @@ -36,28 +32,31 @@ gsid2mpr_CPPFLAGS = ${MET_CPPFLAGS} gsid2mpr_LDFLAGS = ${MET_LDFLAGS} gsid2mpr_LDADD = -lvx_stat_out \ -lvx_statistics \ + -lvx_shapedata \ -lvx_gsl_prob \ + -lvx_analysis_util \ + -lvx_shapedata \ + -lvx_util \ + $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d_factory \ -lvx_data2d_nc_met \ - -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ -lvx_grid \ -lvx_config \ + -lvx_gsl_prob \ -lvx_cal \ -lvx_util \ -lvx_math \ -lvx_color \ -lvx_log \ - -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas - -if ENABLE_PYTHON -gsid2mpr_LDADD += $(MET_PYTHON_LD) -lvx_data2d_python -lvx_python3_utils -lvx_data2d_python -lvx_python3_utils -endif + -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas -lvx_util gsidens2orank_SOURCES = gsidens2orank.h \ gsi_record.h \ @@ -78,25 +77,29 @@ gsidens2orank_CPPFLAGS = ${MET_CPPFLAGS} gsidens2orank_LDFLAGS = ${MET_LDFLAGS} gsidens2orank_LDADD = -lvx_stat_out \ -lvx_statistics \ + -lvx_shapedata \ -lvx_gsl_prob \ + -lvx_analysis_util \ + -lvx_shapedata \ + -lvx_util \ + $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d_factory \ -lvx_data2d_nc_met \ - -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ -lvx_grid \ -lvx_config \ + -lvx_gsl_prob \ -lvx_cal \ -lvx_util \ -lvx_math \ -lvx_color \ -lvx_log \ - -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas + -lm -lnetcdf_c++4 -lnetcdf -lgsl -lgslcblas -lvx_util -if ENABLE_PYTHON -gsidens2orank_LDADD += $(MET_PYTHON_LD) -lvx_data2d_python -lvx_python3_utils -lvx_data2d_python -lvx_python3_utils -endif diff --git a/met/src/tools/other/ioda2nc/Makefile.am b/met/src/tools/other/ioda2nc/Makefile.am index e4067043df..83d74ba5d1 100644 --- a/met/src/tools/other/ioda2nc/Makefile.am +++ b/met/src/tools/other/ioda2nc/Makefile.am @@ -26,6 +26,7 @@ ioda2nc_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ -lvx_data2d_nccf \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_obs \ -lvx_nc_util \ diff --git a/met/src/tools/other/lidar2nc/Makefile.am b/met/src/tools/other/lidar2nc/Makefile.am index 7bf377b10a..118ea7efd4 100644 --- a/met/src/tools/other/lidar2nc/Makefile.am +++ b/met/src/tools/other/lidar2nc/Makefile.am @@ -26,6 +26,7 @@ lidar2nc_LDADD = -lvx_shapedata \ -lvx_data2d_nc_met \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_nc_obs \ -lvx_nc_util \ -lvx_data2d \ diff --git a/met/src/tools/other/madis2nc/Makefile.am b/met/src/tools/other/madis2nc/Makefile.am index f83950661e..e85cf3c975 100644 --- a/met/src/tools/other/madis2nc/Makefile.am +++ b/met/src/tools/other/madis2nc/Makefile.am @@ -25,6 +25,7 @@ madis2nc_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ -lvx_data2d_nccf \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_obs \ -lvx_nc_util \ diff --git a/met/src/tools/other/mode_graphics/Makefile.am b/met/src/tools/other/mode_graphics/Makefile.am index b360dbfb55..fc5e1f530b 100644 --- a/met/src/tools/other/mode_graphics/Makefile.am +++ b/met/src/tools/other/mode_graphics/Makefile.am @@ -27,6 +27,7 @@ plot_mode_field_LDADD = -lvx_config \ -lvx_plot_util \ -lvx_data2d_nc_met \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_grid \ -lvx_nc_util \ -lvx_ps \ diff --git a/met/src/tools/other/mode_time_domain/Makefile.am b/met/src/tools/other/mode_time_domain/Makefile.am index 9b5d9df97f..fde9fbe977 100644 --- a/met/src/tools/other/mode_time_domain/Makefile.am +++ b/met/src/tools/other/mode_time_domain/Makefile.am @@ -55,6 +55,7 @@ mtd_LDADD = -lvx_pxm \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/other/modis_regrid/Makefile.am b/met/src/tools/other/modis_regrid/Makefile.am index 843d226bbc..e63afad3f0 100644 --- a/met/src/tools/other/modis_regrid/Makefile.am +++ b/met/src/tools/other/modis_regrid/Makefile.am @@ -36,8 +36,10 @@ modis_regrid_LDADD = -lvx_pxm \ -lvx_data2d_grib $(GRIB2_LIBS) \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ + -lvx_regrid \ -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ diff --git a/met/src/tools/other/pb2nc/Makefile.am b/met/src/tools/other/pb2nc/Makefile.am index 40ed36c2d2..6eb653a1d0 100644 --- a/met/src/tools/other/pb2nc/Makefile.am +++ b/met/src/tools/other/pb2nc/Makefile.am @@ -42,6 +42,7 @@ pb2nc_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ -lvx_data2d_nccf \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_obs \ -lvx_nc_util \ diff --git a/met/src/tools/other/plot_data_plane/Makefile.am b/met/src/tools/other/plot_data_plane/Makefile.am index 5470661e67..3997aaf742 100644 --- a/met/src/tools/other/plot_data_plane/Makefile.am +++ b/met/src/tools/other/plot_data_plane/Makefile.am @@ -20,6 +20,7 @@ plot_data_plane_LDADD = -lvx_data2d_factory \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_nc_util \ -lvx_data2d \ -lvx_plot_util \ @@ -30,6 +31,7 @@ plot_data_plane_LDADD = -lvx_data2d_factory \ -lvx_afm \ -lvx_nav \ -lvx_gnomon \ + -lvx_regrid \ -lvx_grid \ -lvx_config \ -lvx_gsl_prob \ diff --git a/met/src/tools/other/plot_point_obs/Makefile.am b/met/src/tools/other/plot_point_obs/Makefile.am index 677a41a5b4..77e7c1711d 100644 --- a/met/src/tools/other/plot_point_obs/Makefile.am +++ b/met/src/tools/other/plot_point_obs/Makefile.am @@ -40,6 +40,7 @@ plot_point_obs_LDADD = -lvx_statistics \ -lvx_cal \ -lvx_util \ $(PYTHON_LIBS) \ + -lvx_statistics \ -lvx_math \ -lvx_color \ -lvx_log \ diff --git a/met/src/tools/other/point2grid/Makefile.am b/met/src/tools/other/point2grid/Makefile.am index 054a049df7..ccd38b1ac5 100644 --- a/met/src/tools/other/point2grid/Makefile.am +++ b/met/src/tools/other/point2grid/Makefile.am @@ -22,6 +22,7 @@ point2grid_LDADD = -lvx_statistics \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_nc_util \ -lvx_data2d \ -lvx_gnomon \ diff --git a/met/src/tools/other/regrid_data_plane/Makefile.am b/met/src/tools/other/regrid_data_plane/Makefile.am index 8c28e3f93f..32bbc91cea 100644 --- a/met/src/tools/other/regrid_data_plane/Makefile.am +++ b/met/src/tools/other/regrid_data_plane/Makefile.am @@ -21,6 +21,7 @@ regrid_data_plane_LDADD = -lvx_statistics \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_nc_util \ -lvx_data2d \ -lvx_gnomon \ diff --git a/met/src/tools/other/shift_data_plane/Makefile.am b/met/src/tools/other/shift_data_plane/Makefile.am index 67e02fcfea..af2d6875b8 100644 --- a/met/src/tools/other/shift_data_plane/Makefile.am +++ b/met/src/tools/other/shift_data_plane/Makefile.am @@ -21,6 +21,7 @@ shift_data_plane_LDADD = -lvx_statistics \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_nc_util \ -lvx_data2d \ -lvx_gnomon \ diff --git a/met/src/tools/other/wwmca_tool/Makefile.am b/met/src/tools/other/wwmca_tool/Makefile.am index 7972849bf4..ba4e6d5e69 100644 --- a/met/src/tools/other/wwmca_tool/Makefile.am +++ b/met/src/tools/other/wwmca_tool/Makefile.am @@ -44,6 +44,7 @@ wwmca_regrid_LDADD = -lvx_pxm \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/tc_utils/rmw_analysis/Makefile.am b/met/src/tools/tc_utils/rmw_analysis/Makefile.am index eca92181cd..61223d7f69 100644 --- a/met/src/tools/tc_utils/rmw_analysis/Makefile.am +++ b/met/src/tools/tc_utils/rmw_analysis/Makefile.am @@ -26,6 +26,7 @@ rmw_analysis_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/tc_utils/tc_gen/Makefile.am b/met/src/tools/tc_utils/tc_gen/Makefile.am index 4865e6a517..281811cd88 100644 --- a/met/src/tools/tc_utils/tc_gen/Makefile.am +++ b/met/src/tools/tc_utils/tc_gen/Makefile.am @@ -27,6 +27,7 @@ tc_gen_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/tc_utils/tc_pairs/Makefile.am b/met/src/tools/tc_utils/tc_pairs/Makefile.am index 56d6239e2f..d5d4436698 100644 --- a/met/src/tools/tc_utils/tc_pairs/Makefile.am +++ b/met/src/tools/tc_utils/tc_pairs/Makefile.am @@ -29,6 +29,7 @@ tc_pairs_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/tc_utils/tc_rmw/Makefile.am b/met/src/tools/tc_utils/tc_rmw/Makefile.am index 5aed64e561..43d075577c 100644 --- a/met/src/tools/tc_utils/tc_rmw/Makefile.am +++ b/met/src/tools/tc_utils/tc_rmw/Makefile.am @@ -26,6 +26,7 @@ tc_rmw_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/met/src/tools/tc_utils/tc_stat/Makefile.am b/met/src/tools/tc_utils/tc_stat/Makefile.am index 413d2a5141..06b56431ce 100644 --- a/met/src/tools/tc_utils/tc_stat/Makefile.am +++ b/met/src/tools/tc_utils/tc_stat/Makefile.am @@ -29,6 +29,7 @@ tc_stat_LDADD = -lvx_stat_out \ -lvx_data2d_nc_pinterp \ $(PYTHON_LIBS) \ -lvx_data2d_nccf \ + -lvx_statistics \ -lvx_data2d \ -lvx_nc_util \ -lvx_regrid \ diff --git a/test/xml/unit_python.xml b/test/xml/unit_python.xml index 58936ecbad..c204534f05 100644 --- a/test/xml/unit_python.xml +++ b/test/xml/unit_python.xml @@ -19,6 +19,68 @@ &TEST_DIR; true + + + &MET_BIN;/plot_data_plane + + PYTHON_GRID G212 + + \ + PYTHON_NUMPY \ + &OUTPUT_DIR;/python/letter_numpy_grid_name.ps \ + 'name = "&MET_BASE;/python/read_ascii_numpy_grid.py &DATA_DIR_PYTHON;/letter.txt LETTER";' \ + -plot_range 0.0 255.0 \ + -title "Grid Name: 'G212'" \ + -v 1 + + + &OUTPUT_DIR;/python/letter_numpy_grid_name.ps + + + + + + &MET_BIN;/plot_data_plane + + + PYTHON_GRID + lambert 185 129 12.19 -133.459 -95 40.635 6371.2 25 25 N + + + \ + PYTHON_NUMPY \ + &OUTPUT_DIR;/python/letter_numpy_grid_string.ps \ + 'name = "&MET_BASE;/python/read_ascii_numpy_grid.py &DATA_DIR_PYTHON;/letter.txt LETTER";' \ + -plot_range 0.0 255.0 \ + -title "Grid String: '${PYTHON_GRID}'" \ + -v 1 + + + &OUTPUT_DIR;/python/letter_numpy_grid_string.ps + + + + + + &MET_BIN;/plot_data_plane + + + PYTHON_GRID + &MET_DATA;/sample_fcst/2005080700/wrfprs_ruc13_12.tm00_G212 + + \ + PYTHON_NUMPY \ + &OUTPUT_DIR;/python/letter_numpy_grid_data_file.ps \ + 'name = "&MET_BASE;/python/read_ascii_numpy_grid.py &DATA_DIR_PYTHON;/letter.txt LETTER";' \ + -plot_range 0.0 255.0 \ + -title "Gridded Data File: 'wrfprs_ruc13_12.tm00_G212'" \ + -v 1 + + + &OUTPUT_DIR;/python/letter_numpy_grid_data_file.ps + + + &MET_BIN;/plot_data_plane From 0f08b74f6e38a07c5715a8b9732d528440702f1b Mon Sep 17 00:00:00 2001 From: MET Tools Test Account Date: Wed, 10 Mar 2021 17:03:26 -0700 Subject: [PATCH 27/28] Committing a fix for unit_python.xml directly to the develop branch. We referenced in a place where it's not defined. --- test/xml/unit_python.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/xml/unit_python.xml b/test/xml/unit_python.xml index c204534f05..1c89950159 100644 --- a/test/xml/unit_python.xml +++ b/test/xml/unit_python.xml @@ -52,7 +52,7 @@ &OUTPUT_DIR;/python/letter_numpy_grid_string.ps \ 'name = "&MET_BASE;/python/read_ascii_numpy_grid.py &DATA_DIR_PYTHON;/letter.txt LETTER";' \ -plot_range 0.0 255.0 \ - -title "Grid String: '${PYTHON_GRID}'" \ + -title "Grid String: 'lambert 185 129 12.19 -133.459 -95 40.635 6371.2 25 25 N'" \ -v 1 From 48bb90618ee3c2aaccc88c6dc8581b21f8ac8287 Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Thu, 11 Mar 2021 13:14:16 -0700 Subject: [PATCH 28/28] Add *.dSYM to the .gitignore files in the src and internal_tests directories. --- met/internal_tests/.gitignore | 1 + met/internal_tests/basic/.gitignore | 1 + met/internal_tests/basic/vx_config/.gitignore | 1 + met/internal_tests/basic/vx_log/.gitignore | 1 + met/internal_tests/basic/vx_util/.gitignore | 1 + met/internal_tests/libcode/.gitignore | 1 + met/internal_tests/libcode/vx_data2d/.gitignore | 1 + met/internal_tests/libcode/vx_data2d_factory/.gitignore | 1 + met/internal_tests/libcode/vx_data2d_grib/.gitignore | 1 + met/internal_tests/libcode/vx_data2d_nc_met/.gitignore | 1 + met/internal_tests/libcode/vx_data2d_nccf/.gitignore | 1 + met/internal_tests/libcode/vx_geodesy/.gitignore | 1 + met/internal_tests/libcode/vx_grid/.gitignore | 1 + met/internal_tests/libcode/vx_nc_util/.gitignore | 1 + met/internal_tests/libcode/vx_physics/.gitignore | 1 + met/internal_tests/libcode/vx_plot_util/.gitignore | 1 + met/internal_tests/libcode/vx_ps/.gitignore | 1 + met/internal_tests/libcode/vx_series_data/.gitignore | 1 + met/internal_tests/libcode/vx_solar/.gitignore | 1 + met/internal_tests/libcode/vx_tc_util/.gitignore | 1 + met/internal_tests/tools/.gitignore | 1 + met/internal_tests/tools/other/.gitignore | 1 + met/internal_tests/tools/other/mode_time_domain/.gitignore | 1 + met/src/.gitignore | 1 + met/src/basic/.gitignore | 1 + met/src/basic/enum_to_string/.gitignore | 1 + met/src/basic/vx_cal/.gitignore | 1 + met/src/basic/vx_config/.gitignore | 1 + met/src/basic/vx_log/.gitignore | 1 + met/src/basic/vx_math/.gitignore | 1 + met/src/basic/vx_util/.gitignore | 1 + met/src/libcode/.gitignore | 1 + met/src/libcode/vx_afm/.gitignore | 1 + met/src/libcode/vx_analysis_util/.gitignore | 1 + met/src/libcode/vx_color/.gitignore | 1 + met/src/libcode/vx_data2d/.gitignore | 1 + met/src/libcode/vx_data2d_factory/.gitignore | 1 + met/src/libcode/vx_data2d_grib/.gitignore | 1 + met/src/libcode/vx_data2d_grib2/.gitignore | 1 + met/src/libcode/vx_data2d_nc_met/.gitignore | 1 + met/src/libcode/vx_data2d_nc_pinterp/.gitignore | 1 + met/src/libcode/vx_data2d_nccf/.gitignore | 1 + met/src/libcode/vx_data2d_python/.gitignore | 1 + met/src/libcode/vx_geodesy/.gitignore | 1 + met/src/libcode/vx_gis/.gitignore | 1 + met/src/libcode/vx_gnomon/.gitignore | 1 + met/src/libcode/vx_grid/.gitignore | 1 + met/src/libcode/vx_gsl_prob/.gitignore | 1 + met/src/libcode/vx_nav/.gitignore | 1 + met/src/libcode/vx_nc_obs/.gitignore | 1 + met/src/libcode/vx_nc_util/.gitignore | 1 + met/src/libcode/vx_pb_util/.gitignore | 1 + met/src/libcode/vx_plot_util/.gitignore | 1 + met/src/libcode/vx_ps/.gitignore | 1 + met/src/libcode/vx_pxm/.gitignore | 1 + met/src/libcode/vx_regrid/.gitignore | 1 + met/src/libcode/vx_render/.gitignore | 1 + met/src/libcode/vx_shapedata/.gitignore | 1 + met/src/libcode/vx_solar/.gitignore | 1 + met/src/libcode/vx_stat_out/.gitignore | 1 + met/src/libcode/vx_statistics/.gitignore | 1 + met/src/libcode/vx_summary/.gitignore | 1 + met/src/libcode/vx_tc_util/.gitignore | 1 + met/src/libcode/vx_time_series/.gitignore | 1 + met/src/tools/.gitignore | 1 + met/src/tools/core/.gitignore | 1 + met/src/tools/core/ensemble_stat/.gitignore | 1 + met/src/tools/core/grid_stat/.gitignore | 1 + met/src/tools/core/mode/.gitignore | 1 + met/src/tools/core/mode_analysis/.gitignore | 1 + met/src/tools/core/pcp_combine/.gitignore | 1 + met/src/tools/core/point_stat/.gitignore | 1 + met/src/tools/core/series_analysis/.gitignore | 1 + met/src/tools/core/stat_analysis/.gitignore | 1 + met/src/tools/core/wavelet_stat/.gitignore | 1 + met/src/tools/dev_utils/.gitignore | 1 + met/src/tools/dev_utils/shapefiles/.gitignore | 1 + met/src/tools/other/.gitignore | 1 + met/src/tools/other/ascii2nc/.gitignore | 1 + met/src/tools/other/gen_vx_mask/.gitignore | 1 + met/src/tools/other/gis_utils/.gitignore | 1 + met/src/tools/other/grid_diag/.gitignore | 1 + met/src/tools/other/gsi_tools/.gitignore | 1 + met/src/tools/other/ioda2nc/.gitignore | 1 + met/src/tools/other/lidar2nc/.gitignore | 1 + met/src/tools/other/madis2nc/.gitignore | 1 + met/src/tools/other/mode_graphics/.gitignore | 1 + met/src/tools/other/mode_time_domain/.gitignore | 1 + met/src/tools/other/modis_regrid/.gitignore | 1 + met/src/tools/other/pb2nc/.gitignore | 1 + met/src/tools/other/plot_data_plane/.gitignore | 1 + met/src/tools/other/plot_point_obs/.gitignore | 1 + met/src/tools/other/point2grid/.gitignore | 1 + met/src/tools/other/regrid_data_plane/.gitignore | 1 + met/src/tools/other/shift_data_plane/.gitignore | 1 + met/src/tools/other/wwmca_tool/.gitignore | 1 + met/src/tools/tc_utils/.gitignore | 1 + met/src/tools/tc_utils/rmw_analysis/.gitignore | 1 + met/src/tools/tc_utils/tc_dland/.gitignore | 1 + met/src/tools/tc_utils/tc_gen/.gitignore | 1 + met/src/tools/tc_utils/tc_pairs/.gitignore | 1 + met/src/tools/tc_utils/tc_rmw/.gitignore | 1 + met/src/tools/tc_utils/tc_stat/.gitignore | 1 + 103 files changed, 103 insertions(+) diff --git a/met/internal_tests/.gitignore b/met/internal_tests/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/internal_tests/.gitignore +++ b/met/internal_tests/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/basic/.gitignore b/met/internal_tests/basic/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/internal_tests/basic/.gitignore +++ b/met/internal_tests/basic/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/basic/vx_config/.gitignore b/met/internal_tests/basic/vx_config/.gitignore index 67630fc1ad..4591eec130 100644 --- a/met/internal_tests/basic/vx_config/.gitignore +++ b/met/internal_tests/basic/vx_config/.gitignore @@ -12,3 +12,4 @@ test_config .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/basic/vx_log/.gitignore b/met/internal_tests/basic/vx_log/.gitignore index db14416cc0..ef6fcb721e 100644 --- a/met/internal_tests/basic/vx_log/.gitignore +++ b/met/internal_tests/basic/vx_log/.gitignore @@ -5,3 +5,4 @@ test_logger .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/basic/vx_util/.gitignore b/met/internal_tests/basic/vx_util/.gitignore index dc6b171d93..a495037a4e 100644 --- a/met/internal_tests/basic/vx_util/.gitignore +++ b/met/internal_tests/basic/vx_util/.gitignore @@ -8,3 +8,4 @@ test_add_rows .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/.gitignore b/met/internal_tests/libcode/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/internal_tests/libcode/.gitignore +++ b/met/internal_tests/libcode/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_data2d/.gitignore b/met/internal_tests/libcode/vx_data2d/.gitignore index 061a79d193..f7b330410a 100644 --- a/met/internal_tests/libcode/vx_data2d/.gitignore +++ b/met/internal_tests/libcode/vx_data2d/.gitignore @@ -5,3 +5,4 @@ dump_default_table .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_data2d_factory/.gitignore b/met/internal_tests/libcode/vx_data2d_factory/.gitignore index f7fee338ad..4c7f17b56a 100644 --- a/met/internal_tests/libcode/vx_data2d_factory/.gitignore +++ b/met/internal_tests/libcode/vx_data2d_factory/.gitignore @@ -5,3 +5,4 @@ test_factory .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_data2d_grib/.gitignore b/met/internal_tests/libcode/vx_data2d_grib/.gitignore index 70d0ac9de2..f285e250bc 100644 --- a/met/internal_tests/libcode/vx_data2d_grib/.gitignore +++ b/met/internal_tests/libcode/vx_data2d_grib/.gitignore @@ -4,3 +4,4 @@ test_read_grib1 .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_data2d_nc_met/.gitignore b/met/internal_tests/libcode/vx_data2d_nc_met/.gitignore index 40ab9911a0..554cb3b99e 100644 --- a/met/internal_tests/libcode/vx_data2d_nc_met/.gitignore +++ b/met/internal_tests/libcode/vx_data2d_nc_met/.gitignore @@ -4,3 +4,4 @@ test_read_nc_met .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_data2d_nccf/.gitignore b/met/internal_tests/libcode/vx_data2d_nccf/.gitignore index 9f05a5dd30..c7cba20d1c 100644 --- a/met/internal_tests/libcode/vx_data2d_nccf/.gitignore +++ b/met/internal_tests/libcode/vx_data2d_nccf/.gitignore @@ -4,3 +4,4 @@ test_read_nccf .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_geodesy/.gitignore b/met/internal_tests/libcode/vx_geodesy/.gitignore index 17fc2778c9..826fb4b0c3 100644 --- a/met/internal_tests/libcode/vx_geodesy/.gitignore +++ b/met/internal_tests/libcode/vx_geodesy/.gitignore @@ -4,3 +4,4 @@ test_spheroid .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_grid/.gitignore b/met/internal_tests/libcode/vx_grid/.gitignore index 19037db3e9..733bb6d622 100644 --- a/met/internal_tests/libcode/vx_grid/.gitignore +++ b/met/internal_tests/libcode/vx_grid/.gitignore @@ -4,3 +4,4 @@ test_grid_area .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_nc_util/.gitignore b/met/internal_tests/libcode/vx_nc_util/.gitignore index a93467f330..71ddcde80a 100644 --- a/met/internal_tests/libcode/vx_nc_util/.gitignore +++ b/met/internal_tests/libcode/vx_nc_util/.gitignore @@ -4,3 +4,4 @@ test_pressure_levels .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_physics/.gitignore b/met/internal_tests/libcode/vx_physics/.gitignore index 094a57719a..f2ec7e5a62 100644 --- a/met/internal_tests/libcode/vx_physics/.gitignore +++ b/met/internal_tests/libcode/vx_physics/.gitignore @@ -4,3 +4,4 @@ test_thermo .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_plot_util/.gitignore b/met/internal_tests/libcode/vx_plot_util/.gitignore index d570f17da2..01b5ee0c75 100644 --- a/met/internal_tests/libcode/vx_plot_util/.gitignore +++ b/met/internal_tests/libcode/vx_plot_util/.gitignore @@ -4,3 +4,4 @@ test_map_region .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_ps/.gitignore b/met/internal_tests/libcode/vx_ps/.gitignore index ebef0f4ecf..916310e94c 100644 --- a/met/internal_tests/libcode/vx_ps/.gitignore +++ b/met/internal_tests/libcode/vx_ps/.gitignore @@ -4,3 +4,4 @@ test_ps .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_series_data/.gitignore b/met/internal_tests/libcode/vx_series_data/.gitignore index a29fc045ef..44e011fc66 100644 --- a/met/internal_tests/libcode/vx_series_data/.gitignore +++ b/met/internal_tests/libcode/vx_series_data/.gitignore @@ -4,3 +4,4 @@ test_series_data .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_solar/.gitignore b/met/internal_tests/libcode/vx_solar/.gitignore index 906dd21126..326d9d0cad 100644 --- a/met/internal_tests/libcode/vx_solar/.gitignore +++ b/met/internal_tests/libcode/vx_solar/.gitignore @@ -4,3 +4,4 @@ test_ra_dec .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/libcode/vx_tc_util/.gitignore b/met/internal_tests/libcode/vx_tc_util/.gitignore index 6a46ceef48..bd2b6485c5 100644 --- a/met/internal_tests/libcode/vx_tc_util/.gitignore +++ b/met/internal_tests/libcode/vx_tc_util/.gitignore @@ -5,3 +5,4 @@ test_read .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/tools/.gitignore b/met/internal_tests/tools/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/internal_tests/tools/.gitignore +++ b/met/internal_tests/tools/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/tools/other/.gitignore b/met/internal_tests/tools/other/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/internal_tests/tools/other/.gitignore +++ b/met/internal_tests/tools/other/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/internal_tests/tools/other/mode_time_domain/.gitignore b/met/internal_tests/tools/other/mode_time_domain/.gitignore index 092c0bed05..01fa57111b 100644 --- a/met/internal_tests/tools/other/mode_time_domain/.gitignore +++ b/met/internal_tests/tools/other/mode_time_domain/.gitignore @@ -4,3 +4,4 @@ test_velocity .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/.gitignore b/met/src/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/.gitignore +++ b/met/src/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/basic/.gitignore b/met/src/basic/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/basic/.gitignore +++ b/met/src/basic/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/basic/enum_to_string/.gitignore b/met/src/basic/enum_to_string/.gitignore index 02ea333a4d..7788d23d81 100644 --- a/met/src/basic/enum_to_string/.gitignore +++ b/met/src/basic/enum_to_string/.gitignore @@ -5,3 +5,4 @@ enum_parser.cc .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/basic/vx_cal/.gitignore b/met/src/basic/vx_cal/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/basic/vx_cal/.gitignore +++ b/met/src/basic/vx_cal/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/basic/vx_config/.gitignore b/met/src/basic/vx_config/.gitignore index cd85cdb95c..24c9ca6c7e 100644 --- a/met/src/basic/vx_config/.gitignore +++ b/met/src/basic/vx_config/.gitignore @@ -7,3 +7,4 @@ config.tab.h .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/basic/vx_log/.gitignore b/met/src/basic/vx_log/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/basic/vx_log/.gitignore +++ b/met/src/basic/vx_log/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/basic/vx_math/.gitignore b/met/src/basic/vx_math/.gitignore index 92b269f31e..7e5f500d16 100644 --- a/met/src/basic/vx_math/.gitignore +++ b/met/src/basic/vx_math/.gitignore @@ -5,3 +5,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/basic/vx_util/.gitignore b/met/src/basic/vx_util/.gitignore index 92b269f31e..7e5f500d16 100644 --- a/met/src/basic/vx_util/.gitignore +++ b/met/src/basic/vx_util/.gitignore @@ -5,3 +5,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/.gitignore b/met/src/libcode/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/.gitignore +++ b/met/src/libcode/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_afm/.gitignore b/met/src/libcode/vx_afm/.gitignore index 92b269f31e..7e5f500d16 100644 --- a/met/src/libcode/vx_afm/.gitignore +++ b/met/src/libcode/vx_afm/.gitignore @@ -5,3 +5,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_analysis_util/.gitignore b/met/src/libcode/vx_analysis_util/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_analysis_util/.gitignore +++ b/met/src/libcode/vx_analysis_util/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_color/.gitignore b/met/src/libcode/vx_color/.gitignore index db5274632b..222c1f46c6 100644 --- a/met/src/libcode/vx_color/.gitignore +++ b/met/src/libcode/vx_color/.gitignore @@ -6,3 +6,4 @@ color_parser_yacc.h .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_data2d/.gitignore b/met/src/libcode/vx_data2d/.gitignore index 92b269f31e..7e5f500d16 100644 --- a/met/src/libcode/vx_data2d/.gitignore +++ b/met/src/libcode/vx_data2d/.gitignore @@ -5,3 +5,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_data2d_factory/.gitignore b/met/src/libcode/vx_data2d_factory/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_data2d_factory/.gitignore +++ b/met/src/libcode/vx_data2d_factory/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_data2d_grib/.gitignore b/met/src/libcode/vx_data2d_grib/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_data2d_grib/.gitignore +++ b/met/src/libcode/vx_data2d_grib/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_data2d_grib2/.gitignore b/met/src/libcode/vx_data2d_grib2/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_data2d_grib2/.gitignore +++ b/met/src/libcode/vx_data2d_grib2/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_data2d_nc_met/.gitignore b/met/src/libcode/vx_data2d_nc_met/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_data2d_nc_met/.gitignore +++ b/met/src/libcode/vx_data2d_nc_met/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_data2d_nc_pinterp/.gitignore b/met/src/libcode/vx_data2d_nc_pinterp/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_data2d_nc_pinterp/.gitignore +++ b/met/src/libcode/vx_data2d_nc_pinterp/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_data2d_nccf/.gitignore b/met/src/libcode/vx_data2d_nccf/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_data2d_nccf/.gitignore +++ b/met/src/libcode/vx_data2d_nccf/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_data2d_python/.gitignore b/met/src/libcode/vx_data2d_python/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_data2d_python/.gitignore +++ b/met/src/libcode/vx_data2d_python/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_geodesy/.gitignore b/met/src/libcode/vx_geodesy/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_geodesy/.gitignore +++ b/met/src/libcode/vx_geodesy/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_gis/.gitignore b/met/src/libcode/vx_gis/.gitignore index 92b269f31e..7e5f500d16 100644 --- a/met/src/libcode/vx_gis/.gitignore +++ b/met/src/libcode/vx_gis/.gitignore @@ -5,3 +5,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_gnomon/.gitignore b/met/src/libcode/vx_gnomon/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_gnomon/.gitignore +++ b/met/src/libcode/vx_gnomon/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_grid/.gitignore b/met/src/libcode/vx_grid/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_grid/.gitignore +++ b/met/src/libcode/vx_grid/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_gsl_prob/.gitignore b/met/src/libcode/vx_gsl_prob/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_gsl_prob/.gitignore +++ b/met/src/libcode/vx_gsl_prob/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_nav/.gitignore b/met/src/libcode/vx_nav/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_nav/.gitignore +++ b/met/src/libcode/vx_nav/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_nc_obs/.gitignore b/met/src/libcode/vx_nc_obs/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_nc_obs/.gitignore +++ b/met/src/libcode/vx_nc_obs/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_nc_util/.gitignore b/met/src/libcode/vx_nc_util/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_nc_util/.gitignore +++ b/met/src/libcode/vx_nc_util/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_pb_util/.gitignore b/met/src/libcode/vx_pb_util/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_pb_util/.gitignore +++ b/met/src/libcode/vx_pb_util/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_plot_util/.gitignore b/met/src/libcode/vx_plot_util/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_plot_util/.gitignore +++ b/met/src/libcode/vx_plot_util/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_ps/.gitignore b/met/src/libcode/vx_ps/.gitignore index 92b269f31e..7e5f500d16 100644 --- a/met/src/libcode/vx_ps/.gitignore +++ b/met/src/libcode/vx_ps/.gitignore @@ -5,3 +5,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_pxm/.gitignore b/met/src/libcode/vx_pxm/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_pxm/.gitignore +++ b/met/src/libcode/vx_pxm/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_regrid/.gitignore b/met/src/libcode/vx_regrid/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_regrid/.gitignore +++ b/met/src/libcode/vx_regrid/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_render/.gitignore b/met/src/libcode/vx_render/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_render/.gitignore +++ b/met/src/libcode/vx_render/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_shapedata/.gitignore b/met/src/libcode/vx_shapedata/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_shapedata/.gitignore +++ b/met/src/libcode/vx_shapedata/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_solar/.gitignore b/met/src/libcode/vx_solar/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_solar/.gitignore +++ b/met/src/libcode/vx_solar/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_stat_out/.gitignore b/met/src/libcode/vx_stat_out/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_stat_out/.gitignore +++ b/met/src/libcode/vx_stat_out/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_statistics/.gitignore b/met/src/libcode/vx_statistics/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_statistics/.gitignore +++ b/met/src/libcode/vx_statistics/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_summary/.gitignore b/met/src/libcode/vx_summary/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_summary/.gitignore +++ b/met/src/libcode/vx_summary/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_tc_util/.gitignore b/met/src/libcode/vx_tc_util/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_tc_util/.gitignore +++ b/met/src/libcode/vx_tc_util/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/libcode/vx_time_series/.gitignore b/met/src/libcode/vx_time_series/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/libcode/vx_time_series/.gitignore +++ b/met/src/libcode/vx_time_series/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/.gitignore b/met/src/tools/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/tools/.gitignore +++ b/met/src/tools/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/.gitignore b/met/src/tools/core/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/tools/core/.gitignore +++ b/met/src/tools/core/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/ensemble_stat/.gitignore b/met/src/tools/core/ensemble_stat/.gitignore index ff7e359957..536328aba8 100644 --- a/met/src/tools/core/ensemble_stat/.gitignore +++ b/met/src/tools/core/ensemble_stat/.gitignore @@ -4,3 +4,4 @@ ensemble_stat .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/grid_stat/.gitignore b/met/src/tools/core/grid_stat/.gitignore index c4d713316d..5e2bcb8f66 100644 --- a/met/src/tools/core/grid_stat/.gitignore +++ b/met/src/tools/core/grid_stat/.gitignore @@ -4,3 +4,4 @@ grid_stat .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/mode/.gitignore b/met/src/tools/core/mode/.gitignore index 3eb452874c..8216720ddb 100644 --- a/met/src/tools/core/mode/.gitignore +++ b/met/src/tools/core/mode/.gitignore @@ -4,3 +4,4 @@ mode .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/mode_analysis/.gitignore b/met/src/tools/core/mode_analysis/.gitignore index 6108dd97e6..0e3a718728 100644 --- a/met/src/tools/core/mode_analysis/.gitignore +++ b/met/src/tools/core/mode_analysis/.gitignore @@ -4,3 +4,4 @@ mode_analysis .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/pcp_combine/.gitignore b/met/src/tools/core/pcp_combine/.gitignore index 012e9dce9d..2963b459b1 100644 --- a/met/src/tools/core/pcp_combine/.gitignore +++ b/met/src/tools/core/pcp_combine/.gitignore @@ -4,3 +4,4 @@ pcp_combine .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/point_stat/.gitignore b/met/src/tools/core/point_stat/.gitignore index 42294678d5..00088797c5 100644 --- a/met/src/tools/core/point_stat/.gitignore +++ b/met/src/tools/core/point_stat/.gitignore @@ -4,3 +4,4 @@ point_stat .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/series_analysis/.gitignore b/met/src/tools/core/series_analysis/.gitignore index 4e996c7b6c..4ae6680d91 100644 --- a/met/src/tools/core/series_analysis/.gitignore +++ b/met/src/tools/core/series_analysis/.gitignore @@ -4,3 +4,4 @@ series_analysis .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/stat_analysis/.gitignore b/met/src/tools/core/stat_analysis/.gitignore index aadcccda75..bcc102842e 100644 --- a/met/src/tools/core/stat_analysis/.gitignore +++ b/met/src/tools/core/stat_analysis/.gitignore @@ -4,3 +4,4 @@ stat_analysis .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/core/wavelet_stat/.gitignore b/met/src/tools/core/wavelet_stat/.gitignore index 31f707d25d..7ed6d133d1 100644 --- a/met/src/tools/core/wavelet_stat/.gitignore +++ b/met/src/tools/core/wavelet_stat/.gitignore @@ -4,3 +4,4 @@ wavelet_stat .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/dev_utils/.gitignore b/met/src/tools/dev_utils/.gitignore index 5993a9d79d..6dff8d3ff9 100644 --- a/met/src/tools/dev_utils/.gitignore +++ b/met/src/tools/dev_utils/.gitignore @@ -12,3 +12,4 @@ chk4copyright .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/dev_utils/shapefiles/.gitignore b/met/src/tools/dev_utils/shapefiles/.gitignore index d530071029..1ef4c3e5dc 100644 --- a/met/src/tools/dev_utils/shapefiles/.gitignore +++ b/met/src/tools/dev_utils/shapefiles/.gitignore @@ -4,3 +4,4 @@ make_mapfiles .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/.gitignore b/met/src/tools/other/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/tools/other/.gitignore +++ b/met/src/tools/other/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/ascii2nc/.gitignore b/met/src/tools/other/ascii2nc/.gitignore index 14e5831fd8..46e9e4600d 100644 --- a/met/src/tools/other/ascii2nc/.gitignore +++ b/met/src/tools/other/ascii2nc/.gitignore @@ -4,3 +4,4 @@ ascii2nc .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/gen_vx_mask/.gitignore b/met/src/tools/other/gen_vx_mask/.gitignore index 014957152f..def514617d 100644 --- a/met/src/tools/other/gen_vx_mask/.gitignore +++ b/met/src/tools/other/gen_vx_mask/.gitignore @@ -4,3 +4,4 @@ gen_vx_mask .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/gis_utils/.gitignore b/met/src/tools/other/gis_utils/.gitignore index 6f5206616c..6bcc0d4e28 100644 --- a/met/src/tools/other/gis_utils/.gitignore +++ b/met/src/tools/other/gis_utils/.gitignore @@ -6,3 +6,4 @@ gis_dump_dbf .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/grid_diag/.gitignore b/met/src/tools/other/grid_diag/.gitignore index 07d1d9d55d..2ea21992a5 100644 --- a/met/src/tools/other/grid_diag/.gitignore +++ b/met/src/tools/other/grid_diag/.gitignore @@ -4,3 +4,4 @@ grid_diag .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/gsi_tools/.gitignore b/met/src/tools/other/gsi_tools/.gitignore index f98752c930..d91d7ab411 100644 --- a/met/src/tools/other/gsi_tools/.gitignore +++ b/met/src/tools/other/gsi_tools/.gitignore @@ -5,3 +5,4 @@ gsid2mpr .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/ioda2nc/.gitignore b/met/src/tools/other/ioda2nc/.gitignore index 0d392220b0..58b6d8e6cc 100644 --- a/met/src/tools/other/ioda2nc/.gitignore +++ b/met/src/tools/other/ioda2nc/.gitignore @@ -5,3 +5,4 @@ ioda2nc .dirstamp Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/lidar2nc/.gitignore b/met/src/tools/other/lidar2nc/.gitignore index 25c289c10c..6a71017f06 100644 --- a/met/src/tools/other/lidar2nc/.gitignore +++ b/met/src/tools/other/lidar2nc/.gitignore @@ -4,3 +4,4 @@ lidar2nc .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/madis2nc/.gitignore b/met/src/tools/other/madis2nc/.gitignore index 048a33b4e4..eb5b9c9238 100644 --- a/met/src/tools/other/madis2nc/.gitignore +++ b/met/src/tools/other/madis2nc/.gitignore @@ -4,3 +4,4 @@ madis2nc .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/mode_graphics/.gitignore b/met/src/tools/other/mode_graphics/.gitignore index c344a0a483..0026eae5fa 100644 --- a/met/src/tools/other/mode_graphics/.gitignore +++ b/met/src/tools/other/mode_graphics/.gitignore @@ -6,3 +6,4 @@ plot_mode_field .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/mode_time_domain/.gitignore b/met/src/tools/other/mode_time_domain/.gitignore index 16272bfe7d..15cbce0f9f 100644 --- a/met/src/tools/other/mode_time_domain/.gitignore +++ b/met/src/tools/other/mode_time_domain/.gitignore @@ -6,3 +6,4 @@ mtd .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/modis_regrid/.gitignore b/met/src/tools/other/modis_regrid/.gitignore index 5659a845bd..de709555ac 100644 --- a/met/src/tools/other/modis_regrid/.gitignore +++ b/met/src/tools/other/modis_regrid/.gitignore @@ -4,3 +4,4 @@ modis_regrid .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/pb2nc/.gitignore b/met/src/tools/other/pb2nc/.gitignore index db0fc32617..ec395e3290 100644 --- a/met/src/tools/other/pb2nc/.gitignore +++ b/met/src/tools/other/pb2nc/.gitignore @@ -5,3 +5,4 @@ pb2nc .dirstamp Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/plot_data_plane/.gitignore b/met/src/tools/other/plot_data_plane/.gitignore index fb45412645..ba23c68111 100644 --- a/met/src/tools/other/plot_data_plane/.gitignore +++ b/met/src/tools/other/plot_data_plane/.gitignore @@ -4,3 +4,4 @@ plot_data_plane .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/plot_point_obs/.gitignore b/met/src/tools/other/plot_point_obs/.gitignore index 675f1ad662..c09f77682e 100644 --- a/met/src/tools/other/plot_point_obs/.gitignore +++ b/met/src/tools/other/plot_point_obs/.gitignore @@ -4,3 +4,4 @@ plot_point_obs .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/point2grid/.gitignore b/met/src/tools/other/point2grid/.gitignore index 7fc724ecfb..c86ed97c54 100644 --- a/met/src/tools/other/point2grid/.gitignore +++ b/met/src/tools/other/point2grid/.gitignore @@ -4,3 +4,4 @@ point2grid .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/regrid_data_plane/.gitignore b/met/src/tools/other/regrid_data_plane/.gitignore index 2bddf9a131..3b5934adac 100644 --- a/met/src/tools/other/regrid_data_plane/.gitignore +++ b/met/src/tools/other/regrid_data_plane/.gitignore @@ -4,3 +4,4 @@ regrid_data_plane .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/shift_data_plane/.gitignore b/met/src/tools/other/shift_data_plane/.gitignore index 84942ecee1..b539a2f8c3 100644 --- a/met/src/tools/other/shift_data_plane/.gitignore +++ b/met/src/tools/other/shift_data_plane/.gitignore @@ -4,3 +4,4 @@ shift_data_plane .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/other/wwmca_tool/.gitignore b/met/src/tools/other/wwmca_tool/.gitignore index a144c3a35d..ebecdacf1a 100644 --- a/met/src/tools/other/wwmca_tool/.gitignore +++ b/met/src/tools/other/wwmca_tool/.gitignore @@ -7,3 +7,4 @@ wwmca_plot .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/tc_utils/.gitignore b/met/src/tools/tc_utils/.gitignore index 6c6a5a4f31..1295d44db5 100644 --- a/met/src/tools/tc_utils/.gitignore +++ b/met/src/tools/tc_utils/.gitignore @@ -3,3 +3,4 @@ .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/tc_utils/rmw_analysis/.gitignore b/met/src/tools/tc_utils/rmw_analysis/.gitignore index 077554915a..ca237511e7 100644 --- a/met/src/tools/tc_utils/rmw_analysis/.gitignore +++ b/met/src/tools/tc_utils/rmw_analysis/.gitignore @@ -4,3 +4,4 @@ rmw_analysis .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/tc_utils/tc_dland/.gitignore b/met/src/tools/tc_utils/tc_dland/.gitignore index 75c82825a6..483d24cffa 100644 --- a/met/src/tools/tc_utils/tc_dland/.gitignore +++ b/met/src/tools/tc_utils/tc_dland/.gitignore @@ -4,3 +4,4 @@ tc_dland .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/tc_utils/tc_gen/.gitignore b/met/src/tools/tc_utils/tc_gen/.gitignore index 7b8c809236..28c0ebbfe4 100644 --- a/met/src/tools/tc_utils/tc_gen/.gitignore +++ b/met/src/tools/tc_utils/tc_gen/.gitignore @@ -4,3 +4,4 @@ tc_gen .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/tc_utils/tc_pairs/.gitignore b/met/src/tools/tc_utils/tc_pairs/.gitignore index d13a56b286..d69eaeca53 100644 --- a/met/src/tools/tc_utils/tc_pairs/.gitignore +++ b/met/src/tools/tc_utils/tc_pairs/.gitignore @@ -4,3 +4,4 @@ tc_pairs .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/tc_utils/tc_rmw/.gitignore b/met/src/tools/tc_utils/tc_rmw/.gitignore index b540dddec0..4f555bc016 100644 --- a/met/src/tools/tc_utils/tc_rmw/.gitignore +++ b/met/src/tools/tc_utils/tc_rmw/.gitignore @@ -4,3 +4,4 @@ tc_rmw .deps Makefile Makefile.in +*.dSYM diff --git a/met/src/tools/tc_utils/tc_stat/.gitignore b/met/src/tools/tc_utils/tc_stat/.gitignore index d18583f8b8..8f7a38909c 100644 --- a/met/src/tools/tc_utils/tc_stat/.gitignore +++ b/met/src/tools/tc_utils/tc_stat/.gitignore @@ -4,3 +4,4 @@ tc_stat .deps Makefile Makefile.in +*.dSYM