Skip to content

Commit

Permalink
Update develop-ref after #1895 (#1900)
Browse files Browse the repository at this point in the history
* Update install_met_env.kiowa

Commented out items and added text to description

* #1817 Added to_north argument at two_to_one()

* #1817 Calls two_to_one() with false for the third argument, to_north, if latitude moves north to south

* Feature 1819 automation doc warnings (#1836)

* Removing "/lib" that should not be there.

* #1508 checking stat() methoid returns no error before looking at FILE flag

* Enable PDF creation

* Modify inputenc, fontenc latex_elements

* Fix typo in conf.py

* Replace unicode with ascii

* Replace unicode exponent with math mode

* Change eqnarray to align

* Replace gif images with png for PDF

* Fix png file names

* Escape underscore in variable name in math mode

* Escape underscore in variable name in math mode

* Remove underscores from variables in math mode

* Replace bar with overline in some equations

* Test derefencing underscores in tables

* Test math changes in grid stat

* Test math formatting

* Test math formatting

* #1838 Added log message for lat/lon values

* #1838 Give warning if the first and lat lat/lon is same

* #1838 Support the double data type variable on reading float type values

* Feature 1833 develop discussions (#1849)

* Per #1833, changed references to met_help to Discussions.

* Per #1833, fixed typo and removed an unnecessary word

* #1852 Removed unused nc_buf_size. Make cur and dim to the same size (called API handles 2D or 3D)

* #1852 Check the start and count before calling NetCDF API

* Feature 1746 wavelet stat (#1851)

* For issue #1746 modified code to allow users to pass in an empty list (or NA) for forecast and observation thresholds in order to skip applying the threhsolds, but it will still compute stats with the raw fields. SL

* For issue #1746, added new unit test that uses a config file that has empty lists for the forecast and observation thresholds. SL

* For issue #1746 Added some content related to allowing users to set forecast and observation cat thresholds to an empty list in order to skip the binary masking (and consider all grid-points for stats). SL

* Per #1746, cleaning up for consistent indentation.

* Per #1746, cleaning up for consistent indentation.

* Per #1746, add a revision history note, update the plotting range in the postscript output to be [-n,n] where n is the maximum value of the maximum absolute difference and 1.0, and also fix a bug. When the NA threshold comes AFTER a real threshold, the resulting data and difference values were not being updated.

* Per #1746, change the Wavelet-Stat config file values in the the wvlt_plot dictionary by setting plot_min = plot_max = 0.0. That enables the default logic of the tool to take effect. Choose the plotting range of the wavelet plots as [-n,n], where n is the maximum of 1.0 and the maximum absolute difference.

* Per #1746, used apply_fcst_thresh where it should have been apply_obs_thresh.

* Per issue #1746, modified some content related to users being able to skip applying the categorical threhsolds by putting an empty list or NA in the configuration file. SL

* Per issue #1746 Added some warnings if the forecast threshold is set to NA but the observation threshold is not NA (a numeric threshold) and vice versa. SL

* Per #1746, fix a couple of typos and tweak wording in the wavelet-stat chapter.

* Per #1746, loop over each pair of fcst/obs thresholds to check for inconsistent use of the NA threshold type.

* Per #1746, a bit of code cleanup replacing calls to n_elements() with n() to make the code more concise.

* Per #1746, need to reinitialize apply_fcst_thresh and apply_obs_thresh to true inside the loop since the NA threshold can appear anywhere in the list of thresholds.

Co-authored-by: Seth Linden <[email protected]>
Co-authored-by: John Halley Gotway <[email protected]>

* Add sphinx.ext.pngmath to conf.py

* Fix typo in conf.py

* Add sphinx.ext.mathjax to conf.py

* Add sphinx.ext.imgmath to conf.py

* Fix typo in conf.py

* Change math formatting in Appendix C

* Temporarily disable equations with errors in Appendix C

* Remove sphinx.ext.imgmath in conf.py

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Add sphinx.ext.imgmath to conf.py

* Modify math formatting in Appendix C

* Temporarily disable equations with errors in Appendix C

* Remove sphinx.ext.imgmath in conf.py

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Temporarily disable equations with errors

* Update README.md

* Modify math formatting in Appendix C

* Add usepackage{amssymb} to conf.py

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Fix warnings in wavelet-stat.rst

* Omit Indices and tables in PDF version of User Guide

* Modify math formatting in Appendix G

* Modify math formatting in Appendix E

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Change release date in conf.py

* #1852 get_string_val: check if 2D variable. Also checking if the variable does not have dimension (#1860)

Co-authored-by: Howard Soh <[email protected]>

* Feature 1453 create pdf user guide (#1859)

* Enable PDF creation

* Modify inputenc, fontenc latex_elements

* Fix typo in conf.py

* Replace unicode with ascii

* Replace unicode exponent with math mode

* Change eqnarray to align

* Replace gif images with png for PDF

* Fix png file names

* Escape underscore in variable name in math mode

* Escape underscore in variable name in math mode

* Remove underscores from variables in math mode

* Replace bar with overline in some equations

* Test derefencing underscores in tables

* Test math changes in grid stat

* Test math formatting

* Test math formatting

* Add sphinx.ext.pngmath to conf.py

* Fix typo in conf.py

* Add sphinx.ext.mathjax to conf.py

* Add sphinx.ext.imgmath to conf.py

* Fix typo in conf.py

* Change math formatting in Appendix C

* Temporarily disable equations with errors in Appendix C

* Remove sphinx.ext.imgmath in conf.py

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Add sphinx.ext.imgmath to conf.py

* Modify math formatting in Appendix C

* Temporarily disable equations with errors in Appendix C

* Remove sphinx.ext.imgmath in conf.py

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Temporarily disable equations with errors

* Modify math formatting in Appendix C

* Add usepackage{amssymb} to conf.py

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Modify math formatting in Appendix C

* Fix warnings in wavelet-stat.rst

* Omit Indices and tables in PDF version of User Guide

* Modify math formatting in Appendix G

* Modify math formatting in Appendix E

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Modify math formatting in Appendix G

* Change release date in conf.py

Co-authored-by: John Halley Gotway <[email protected]>

* Feature 1853 rps doc (#1861)

* Per #1853, adding RPS docs from Eric.

* Per #1853, work in progress getting the formatting correct.

* Per #1853, work in progress getting the formatting correct.

* Per #1853, work in progress getting the formatting correct.

* Per #1853, work in progress getting the formatting correct.

* Per #1853, adding a manual page break after the ROC image to get it to stay in the right spot.

* Per #1853, backing out last change which didn't make the ROC image stay in the right spot.

* #1855 Removed break after return (SobarQube)

* #1855 Removed break after exit

* 1855 Added return at MetNcPointObsOut::write_to_netcdf

* #1855 Avoid releasing memory twice

* #1855 Removed unused code

* #1855 Corrected syntax error

* #1855 Changed the second call of close() to release _ncFile

* #1855 Deleted break after exit

* #1855 Chamnged while to if

* #1855 Added constructor TCLineCounts and initialized the members

* #1855 Added break statement back for case '-'

* #1855 Check the new size before extending to avoid thereference of the  null pointer

* #1855 Changed count to processed_count for log messages. Initialized variables at get_filtered_nc_data\*()

* #1855 Corected the number of memory copy

* #1855 Exit with an error message if both fgi & bgi are null

* #1855 Clear Lead_Times before extening. Formatting for error messages

* Add definition for the compilation environment on seneca.

* #1855 Extend Lead_Times for new times

* #1855 Removed break after exit

* #1855 define "c" dynamically

* #1855 Move the log message within if statement to avoid dereferencing a null pointer

* Feature 1843 scatter index (#1863)

* Added scatter index variables: SI, SI_BCL, SI_BCU to cnt columns. SL

* Per issue #1843 Added Scatter Index variables (SI, SI_BCL, SI_BCU) to the CNT stat type. SL

* Added Scatter Index (SI, SI_BCL, SI_BCU) to cnt stat type header. SL

* Per issue #1843, added Scatter Index variables to write_cnt_cols(). SL

* Per issue #1843 added Scatter Index (si) to CNTinfo class. SL

* Per issue #1843 added Scatter Index (SI, si) to CNTInfo::get_stat(). SL

* Per issue #1843 added Scatter Index (SI, si) calculation to both versions of compute_cntinfo(). SL

* Per issue #1843, forgot semi-colon after SI calculation, fixed. SL

* Added Scatter Index (si) to some of the clear() and allocate() functions. SL

* Per issue #1843, added Scatter Index (si) to compute_cnt_mean(). SL

* Per issue #1843, added Scatter Index (si) to bootstrap interval calculation and to the CNT write function. SL

* Per issue #1843 added Scatter Index (SI, SI_BCL, SI_BCU) to store_stat_cnt(). SL

* Per issue #1843, in get_stat() moved Scatterd Index (SI) line to be below RMSE for consitency. SL

* Added Scatter Index (SI) to the CNT output format table. SL

* Added Scatter Index (SI) to CNT statistics definitions. SL

* Update appendixC.rst

* Update stat_columns.cc

* Update compute_ci.cc

* Update met_stats.cc

* Per #1843, update write_cntinfo() function. Since we're READING the SI value immediately after the RMSE value when computing CI's, we also need to write SI immediately after RMSE. Otherwise, we'll be computing CI's using the wrong statistics replicates.

* Per #1843, check for divide by zero when computing SI... this could happen if comparing the same input file to itself with Grid-Stat.

* Per #1843, correct definition of SI from RMSE/ME to RMSE/OBAR.

* Per #1843, updated the SI definition to divide by OBAR instead of ME, but forgot to update the divide-by-zero check.

Co-authored-by: Seth Linden <[email protected]>
Co-authored-by: johnhg <[email protected]>

* #1855 Corected typo - compare the numnber of U and V

* #1855 Check if var_info is hull

* #1855 Avoid un-initialized variables: dt at open(), v at lat() & lon(), and local variables at data()

* #1855 Check if ldf is null pointer

* #1855 Removed break after exit

* #1855 Removed break after exit

* Update pcp_combine.cc

* Feature 1864 config urls (#1868)

* Per #1864, remove stale GitHub pages URL for the MET User's Guide.

* Per #1864, found stale GitHub IO links in the issue templates. Should make this same fix in the develop and default branches for all the METplus repos.

* Per #1864, fix stale GitHub IO link in the PR template.

* Move ROC curve in Appendix C

* Crop ROC image for better PDF formatting

* Shrink ROC image for better PDF formatting

* Modify figure alignment in conf.py

* Change text placement for ROC curve figure

* Feature 1834 faq (#1867)

* testing possible new drop-down menus for FAQ

* adding sphinx-panels to extensions to be able to use drop down menus in appendixA

* Per #1834, adding sphinx-panels to requirements.txt to see if that fixes the error

* Per #1834, added sphinx.ext to beginning of sphinx_panels to see if that fixes the error

* Per #1834, remove sphinx.ext and add trailing comma to end of extensions to see if that fixed the error

* Per #1834, added sphinx-panels to pip install command to see if that fixes the error

* Per #1834, added extra space in comment to get docs to build to see if change to documentation.yml will fix an error

* Per #1834, added return character to get rid of warning

* testing dropdown menus #1

* testing dropdown menus #2 removing lines and dotted lines

* testing #3

* testing 4

* fixing numbering, removing 2nd pulldown menu, trying to fix box width

* adding code block in dropdown

* trying to fix width

* trying to fix width with spacing

* trying to fix width with spacing 2nd dropdown

* removing panels

* solved problem, just use dropdown no panels

* adding second dropdown menu

* removing the dropdown menus and fixing the spacing.

* fixing typos

* adding in matched pairs

* adding in formating files for NetCDF and making FILE_IO a header

* fixing spacing

* time slice

* fixing spacing

* UNIX time conversion

* fixing spacing

* fixed-width

* scientific notation

* removing which per Julie P

* adding Gen_Vx_Mask section

* fixing formatting

* changing to numbers

* complex masking region

* neighborhood methods boundaries

* Neighborhood Methods to Compute Fraction

* adding Grid_Stat - How do I use Config File Setup to Read a NetCDF file

* using backticks with asterics

* one more backtick with asterics

* Grid_Stat - What would be an example of Verifying Probabilities

* fixing typos

* What is an example of using Grid-Stat with Regridding and Masking Turned On

* fixing typos

* Grid_Stat - What would be an example of Verifying Probabilities Example2

* trying to fix typos

* trying to fix code-block spacing

* Per #1834, attempting to fix warning.

* How do I use different masks in MET tools using MODE as an example

* trying to fix bullet list

* trying to fix bullet list 2

* trying to fix bullet list 2

* trying to fix bullet list 3

* Per #1834, attempting formatting changes

* Per #1834, attempting formatting changes

* Per #1834, attempting formatting changes

* Per #1834, attempting formatting changes

* Per #1834, attempting formatting changes

* Per #1834, modified formatting, including adding backslashes and removing extra returns in command line calls, and adding indentation for config file notation, and adding a return after each 'A.'

* Per #1834, changed code-block from ini to none to fix formatting

* *Pcp-Combine - What are some examples using -add

* Pcp-Combine -  How do I add and subtract with Pcp-Combine

* Pcp-Combine - How do I Combine 12-hour Accumulated Precipitation from Two Different Initialization Times

* Pcp-Combine - How Do I Correct a Precipitation Time Range

* Pcp-Combine - What Data Formats does MET Read

* Pcp-Combine - How does pass through work

* Pcp_Combine - How do I use -pcprx to run a project faster

* Pcp-Combine - How Do I Enter the Time Format Correctly

* Pcp-Combine - How do I use -subtract

* fixing formatting

* Pcp_Combine - How Do I Use -sum, -add, and -subtract to Achieve Same Accumulation Interval

* Pcp-Combine - What is the difference between -sum vs. -add

* Pcp-Combine - How Do I Select a Specific GRIB Record to Use

* fixing spacing for original text

* Plot-Data-Plane - How Do I Inspect Gen_Vx_Mask Output

* fixing typo

* Plot-Data-Plane - How Do I Specify GRIB Version

* Plot-Data-Plane - last 2 entries

* 2 misc. entries

* fixing typo

* Stat_Analysis - How does -aggregate_stat work

* Stat_Analysis - remaining entries

* fixing typo

* tc-pairs

* tc-stat

* troubleshooting area

* another stat-analysis

* another stat-analysis

* utilities

* fixing dashes

* Per #1834, trying out syntax

* Per #1834, removing added syntax

* fixing returns with bolding

* Per #1834, modified formatting

* adding italics for directories #1834

* replacing code-block ini with none to remove red lettering

* fixing questions to lower case #1834

* linking to section using numref #1834

* linking to section using numref #1834 attempt 2

* linking to section using numref #1834 attempt 3

* linking to section using numref #1834 attempt 4

* linking to section using numref #1834 attempt 5

* linking to section using numref #1834 attempt 6

* linking to section using numref #1834 attempt 7

* linking to section using numref #1834 attempt 8

* linking to anothre section #1834

* linking to another section #1834

* removing old info #1834

* grammar updates #1834

* grammar updates #1834

* fixing typos #1834

* email changes with Julie #1834

* trying to fix warning #1834

* changes #1834

* Per #1834, updating question titles and answers

* Per #1834, made updates to the content.

* Per #1834, made updates to the content

* Per #1834, made updates to the content

* Per #1834, made some major changes to the first 3 FAQ's. I don't have the time/bandwidth to review these completely at this time, but wanted to include at least these updates.

* testing some of the updates John O. suggested.

* updates John O. suggested take 2 #1834.

* updates John O. suggested take 3 #1834.

* updates John O. suggested take 4 #1834.

* updates John O. suggested take 5 #1834.

* updates John O. suggested.  Some didn't show up even though they've been removed #1834.

* trying to fix numbered list indenting #1834

* fixing numbered list indenting #1834

* cleaning up formatting #1834

* fixing broken links #1834

Co-authored-by: Julie.Prestopnik <[email protected]>
Co-authored-by: John Halley Gotway <[email protected]>

* bugfix 1872 plot_tcmpr.R -lookin directory (develop) (#1874)

* Bugfix 1875 develop memory (#1877)

* Per #1875, fix set_cdf_ta() to initialize cdf_ta prior to populating it.

* Per #1875, add debug(4) log messages whenever defining a new aggregation case in stat-analysis.

* Per #1875, switch log messages about new cases from Debug(4) to Debug(3).

* Per #1879, porting the same changes over to the develop branch. (#1881)

* Feature 1673 gbeta (#1857)

* Per #1673, add a distance_map.beta_value entry to all the Grid-Stat config files.

* Per #1673, enhance Grid-Stat to parse the new beta_value option and set its value in the library code.

* Per #1673, set the user-defined beta_value when processing the distance map scores.

* Per #1673, add 4 new DMAP columns write them. Just writing bad data values right now, still need to actually compute them! Also need to update Stat-Analysis to update the parsing/aggregation of these new values.

* Per #1673, enable beta_value to be set to a default bad data value.

* Per #1673 and @ericgilleland instruction (#1673 (comment)), strip asymmetric G-Beta (AGBETA) from the output.

* Per #1673, fix typo that was causing the code not to compile.

* Per #1673, update MET User's Guide about G/GBETA.

* Per #1673, report BETA_VALUE = TOTAL / 2 in the output instead of NA, as directed by Eric.

* Per #1673, remove descriptions of Grid-Stat-specific config options for nbrhd, fourier, gradient, and distance_map from the overview section since they belong in the Grid-Stat chapter. Also add direct links for them in the Grid-Stat chapter.

* Per #1673, do not reset the beta_value in DMAP::clear().

* Per #1673, log the DMAP options only after the beta_value has been determined.

* Per #1673, correct the default beta_value setting as N*N / 2.0.

* Per #1673, trying to format G-beta well.

* Per #1673, trying to format G-beta well.

* Per #1673, beta is formatted as \beta and not \Beta in latex.

* Per #1673, beta is formatted as \beta and not \Beta in latex.

* Per #1673, switch to defining beta_value as a function of the input grid size.

* Per #1673, push initial appendix C updates for GBETA.

* Per #1673, working on G and GBETA equations.

* Per #1673, working on G and GBETA equations.

* Per 1673, update GBETA details in appendix C.

* Per #1673, add Eric's info about selecting beta.

* Per #1673, update reference for Gilleland-2019 to Gilleland_PartI-2020 and Gilleland_PartII-2020.

* Per 1673, fix typo.

* Per #1673, making changes requested by Eric.

* Per #1673, making changes requested by Eric.

* Per #1673, update references based on Eric's feedback.

* Update appendixD.rst (#1869)

Updated this appendix.

* Update appendixD.rst

* Per #1673, making the formatting of Gilleland-2020 part I and II references consistent.

* Per #1673, update Grid-Stat docs to clarify that GBETA is only computed on the FULL verification domain and not any masking regions.

* Per #1673, add DataPlane::n_good_data() function to return a count valid data values.

* Per #1673, update vx_statistics library code to only set gbeta/beta_value to bad data for sub-domains.

* Per #1673, update grid_stat to mask out bad data between the fcst/obs fields before computing distance maps. This will change existing unit test results! Also store the count of valid data values in the full verification domain.

* Per #1673, since GBETA is only reported when VX_MASK = FULL, updating GridStatConfig_all to include the FULL masking region to make this example more meaningful.

Co-authored-by: ericgilleland <[email protected]>

* Feature 1764 point stat (#1885)

* Per #1764 added write_orank_row() to do_hera_ens(). SL

* Per issue #1764, added orank stat type for ensemble output. SL

* Per issue #1764, added code to setup_txt_files() for ORANK output. SL

* Added some comments for debuging. SL

* Per #1764, add orank to the list of outputs created by point_stat.

* Per #1764, add functions to compute the number of requested HiRA probabilities and ensemble members. Also update n_txt_row() to keep track of the number of ORANK rows to be written. Not totally sure if I'm counting these ORANK output lines correctly though.

* Per #1764, update logic in setup_txt_files() to call get_max_n_hira_prob() and get_max_n_hira_ens() functions.

* Per #1764, no real changes. Just fixing spacing.

* Per issue #1764, cleaned up print (cout) debug statements. SL

* Per issue #1764 added 'orank = NONE' to the config files for compatibility with changes to point_stat for calculating ORANK. SL

* Per issue #1764 added 'orank = STAT' to config file to produce ORANK output lines in point_stat. SL

* Per issue #1764 added content in all relevant sections for ORANK: observation rank statistic. SL

* Added 'orank = NONE' to config file for compatibility with changes to point_stant for ORANK. SL

* Added 'orank = NONE' to config file for compatibility with changes to point_stant for ORANK. SL

* Apply suggestions from code review

Co-authored-by: George McCabe <[email protected]>

* Per #1764, no real changes, just fixing indents.

* Per #1764, no real changes, just fixing indents.

* Per #1764, no real changes, just fixing indents.

* Per #1764, putting the docs for VCNT back into its logical order with the other vector line types. The order that they're listed here does not need to match their order in the enumeration in the code.

* Per #1764, fixing a vcnt typo I found in the grid-stat chapter... and making them consistent.

* Per issue #1764: After the call to write_orank_row, added lines to reset the observation begin and end times. SL

* Per #1764, no code changes, just fixing indents.

Co-authored-by: Seth Linden <[email protected]>
Co-authored-by: John Halley Gotway <[email protected]>
Co-authored-by: John Halley Gotway <[email protected]>
Co-authored-by: George McCabe <[email protected]>

* Adding Seth to the NB notification list.

* Bugfix 1886 develop grid_diag (#1888)

* Per #1886, port over the bugfixes from main_v10.0 to develop.

* Per #1886, make grid_diag error out if to_grid is set to FCST or OBS.

* Added additional default labels

* Feature 1870 realtime (#1893)

* Per #1870. add TCPairs config entries for valid_inc, valid_exc, and write_valid.

* Per #1870, removing 2 files I accidentally added.

* Per #1870, add code to parse the new tc_pairs config options.

* Per #1870, unrelated... just fixing spacing.

* Per #1870, update TrackPairInfo/Array classes and tc_pairs application code to use the write_valid option to subset the tracks by requested valid time before writing them.

* Per #1870, update the User's Guide with the new config options. Document valid_inc/valid_exc in the common TC config section and add write_valid to the TC-Pairs chapter.

* Per #1870, move the subset_write_valid() functionality to the library code and support it for both track and probability arrays.

* Per #1870, update unit_tc_pairs.xml with 2 new calls to exercise the new write_valid functionality for both tracks and probabilities.

* Per #1870, correct some typos in the docs... PROBRI and probri should be PROBRIRW and probrirw, resp.

* Per #1870, switching match_points from TRUE back to FALSE after I acciedentally committed that change.

* Per #1870, just fixing indent.

Co-authored-by: John Halley Gotway <[email protected]>

* Feature 1788 ssidx (#1892)

* Per #1788, add initial definition of the SSIDX line type.

* Per #1788, add a STAT-Analysis config file for computing the CBS Score. This is currently just a copy of the GO Index.

* Per #1788, add hooks for computing -job cbs_score.

* Per #1788, since we're adding a new SSIDX line type, the columns for that line type replace the job_ss_columns and job_go_columns arrays.

* Per #1788, rename cbs_score to cbs_index per UK Met Office instruction on 7/22/21. This convention is also consistent with the existing go_index and ss_index jobs.

* Per #1788 rename STATAnalysisConfig_CBS_Score to STATAnalysisConfig_CBS_Index

* Per #1788, update Makefile to handle name change.

* Per #1788, add support for SSIDX stat line type.

* Per #1788, define 4 output SSIDX columns.

* Per #1788, define an SSIndexInfo struct for stashing/writing SS Index values.

* Per #1788, write the SSIDX columns. However we don't need to function to write the whole row since it's only written by Stat-Analysis.

* Per #1788, create an AggrSSIndexInfo struct to keep track of unique stat header column input values.

* Per #1788, update the stat-analysis job code to make use of the new structs.

* Per #1788 fix typo.

* Per #1788, remove GO Index defintion from the code comments. That detail belongs elsewhere.

* Per #1788, since coding up the GO Index several CNT and CTC columns have been added. Adding them here to let them be included as part of the Skill Score index computations.

* Per #1788, update check_hdr_str() to print the name of the problematic header columns.

* Per #1788, add a set(one) member function to multiple array classes. This calls clear or erase on the array prior to adding a single element. Add this for StringArray, NumArray, and ThreshArray, and CRCArray.

* Per #1788, update the compute_ss_index() function in stat_analysis to make the code more concise by calling the newly adding singular set functions for arrays.

* Per #1788, add FCST_MODEL and REF_MODEL output columns to the SSIDX line type.

* Per #1788, add a new N_INIT column to the SSIDX line type to report the number of initialization times represented by this skill score. Also define the SSIDXData struct to store the skill score index job output.

* Per #1788, update STATAnalysisJob to explicitly set the job type directly rather than parsing a string.

* Per #1788, major change here adding skill_score_index_job.h/.cc to handle the computation of the skill score indices.

* Per #1788, update stat_analysis source code to make use of the new classes in skill_score_index_job.h/.cc.

* Per #1788, write a log message listing the model initialization times over which the skill score index is computed.

* Per #1788, tweak log message.

* Per #1788, compute n_term as the max lenght of the required arrays.

* Per #1788, drop in the ACTUAL definition of the GO index provide by the DTC AF project team. Also simplify the existing arrays down to lenght one if the value remains constant.

* Per #1788, correct CBS Index config file. Some parameters had 40 elements while others only had 32.

* Per #1788, do not write SSIDX output if there are no valid terms found.

* Per #1788, format the values in the skill score index log messages, replacing -9999 with NA.

* Per #1788, update the get_stat() member functions. For 0 pairs, return bad data for all statistics other than TOTAL.

* Per #1788, working on readability of the warning and error messages.

* Per #1788, define the ss_index_name directly in the STATAnalysis config file to make it really easy to modify.

* Per #1788, store the ss_index_name configuration option in the StatJob class. Also support a command line -ss_index_name option to override the config file value.

* Per #1788, change from name to ss_index_name variable to be a bit more descriptive in the variable names.

* Per #1788, since ss_index_name is in the StatJob class we no longer need to pass it around as an argument.

* Per #1788, simply the skill score index job handling logic a bit. We only need to update the default job once, not twice.:

* Revert "Per #1788, since ss_index_name is in the StatJob class we no longer need to pass it around as an argument."

This reverts commit cde0be0.

* Revert "Revert "Per #1788, since ss_index_name is in the StatJob class we no longer need to pass it around as an argument.""

This reverts commit bbfd838.

* Per #1788, I'd pruned too much code from stat_analysis.cc which caused the processing of config file jobs to fail. Fixing that here.

* Per #1788, switch Z0 to L0 to match the sample data for computing CBS Index.

* Per #1788, make it so that cbs_index and go_index work from config file.

* Per #1788, update the documentation for the skill score index changes.

* Per #1788, just move some variable definitions further down since they're only used sometimes.

* Per #1788, make job output description into a numbered section.

* Per #1788, little tweak.

* Per #1788, update the STATAnalysisConfig files to add ss_index_name and hss_ec_value, as needed.

* Per #1788, add new unit tests to exercise recent ss_index changes and update the Stat-Analysis documentation.

* Update met/docs/Users_Guide/stat-analysis.rst

Co-authored-by: jprestop <[email protected]>

* Update met/docs/Users_Guide/stat-analysis.rst

Sorry for the typos! Thanks for catching them.

Co-authored-by: jprestop <[email protected]>

* Update met/docs/Users_Guide/stat-analysis.rst

Co-authored-by: jprestop <[email protected]>

* Per #1788, fix typo in error message.

* Per #1788, fix a bug for ss_index... changing 'add' to 'set'. Also set the line_type seperately for each term, if requested.

* Per #1788, tweak the ss_index logic slightly to make it more efficient. For each input STATLine, instead of checking all the index terms, stop searching after the first match. This assumes that each input line should be used for only one of the terms... and I think that's a pretty reasonable assumption.

* Per #1788, minor tweaks to the STAT-Analysis docs.

* Per #1788, add ss_index_vld_thresh option to existing STAT-Analysis config files.

* Per #1788, add StatAnalysisJob ss_index_vld_thresh entry and parse it from the STAT-Analysis config file.

* Per #1788, update stat_analysis code to check ss_index_vld_thresh setting when computing the skill score index. Also update the Stat-Analysis chapter of the User's Guide.

* Per #1788, tweak one test to exercise a non-default ss_index_vld_thresh value.

Co-authored-by: jprestop <[email protected]>

* Bugfix 1891 gen_vx_mask (#1895)

* Per #1891, tighten up the gen_vx_mask logic a bit. Use a global config for the default NC compression level. Then read the input and mask fields using local variables instead of the global one to ensure they don't affect eachother. Also took the opportunity to refine the logic so that we only create a mtddf object in one spot, in the get_data_plane() function.

* Per #1891, add a new test in unit_gen_vx_mask.xml that fails prior to #1891 and succeeds with these changes.

* Per #1891, file name typo in unit_gen_vx_mask.xml.

Co-authored-by: jprestop <[email protected]>
Co-authored-by: Howard Soh <[email protected]>
Co-authored-by: hsoh-u <[email protected]>
Co-authored-by: Keith Searight <[email protected]>
Co-authored-by: Seth Linden <[email protected]>
Co-authored-by: Seth Linden <[email protected]>
Co-authored-by: MET Tools Test Account <[email protected]>
Co-authored-by: lisagoodrich <[email protected]>
Co-authored-by: George McCabe <[email protected]>
Co-authored-by: ericgilleland <[email protected]>
Co-authored-by: John Halley Gotway <[email protected]>
Co-authored-by: MET Tools Test Account <[email protected]>
Co-authored-by: Julie Prestopnik <[email protected]>
  • Loading branch information
14 people authored Aug 31, 2021
1 parent 875f867 commit 34fe8f5
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 105 deletions.
186 changes: 88 additions & 98 deletions met/src/tools/other/gen_vx_mask/gen_vx_mask.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
// 006 07/09/18 Bullock Add shapefile masking type.
// 007 04/08/19 Halley Gotway Add percentile thresholds.
// 008 04/06/20 Halley Gotway Generalize input_grid option.
// 009 06/01/21 Seth Linden Change -type from optional to required
// 009 06/01/21 Seth Linden Change -type from optional to required.
// 010 08/30/21 Halley Gotway MET #1891 fix input and mask fields.
//
////////////////////////////////////////////////////////////////////////

Expand Down Expand Up @@ -102,7 +103,7 @@ void process_command_line(int argc, char **argv) {
if(argc == 1) usage();

// Initialize the configuration object
config.read(replace_path(config_const_filename).c_str());
global_config.read(replace_path(config_const_filename).c_str());

// Parse the command line into tokens
cline.set(argc, argv);
Expand Down Expand Up @@ -161,15 +162,6 @@ void process_command_line(int argc, char **argv) {
////////////////////////////////////////////////////////////////////////

void process_input_grid(DataPlane &dp) {
Met2dDataFileFactory mtddf_factory;
Met2dDataFile *mtddf_ptr = (Met2dDataFile *) 0;
GrdFileType ftype = FileType_None;

// Get the gridded file type from the data config string, if present
if(input_field_str.length() > 0) {
config.read_string(input_field_str.c_str());
ftype = parse_conf_file_type(&config);
}

// Parse info.name as a white-space separated string
StringArray sa;
Expand All @@ -193,28 +185,12 @@ void process_input_grid(DataPlane &dp) {
<< "Use the grid defined by file \"" << input_gridname
<< "\".\n";

// Attempt to open the data file
mtddf_ptr = mtddf_factory.new_met_2d_data_file(input_gridname.c_str(), ftype);
if(!mtddf_ptr) {
mlog << Error << "\nprocess_input_grid() -> "
<< "can't open input file \"" << input_gridname << "\"\n\n";
exit(1);
}

// Read the input data plane, if requested
if(input_field_str.length() > 0) {
get_data_plane(mtddf_ptr, input_field_str.c_str(), dp);
}
// Check for the output of a previous call to this tool
else if(get_gen_vx_mask_data(mtddf_ptr, dp)) {
}

// Extract the grid
grid = mtddf_ptr->grid();
// Read the input grid and data plane, if requested
get_data_plane(input_gridname, input_field_str, true, dp, grid);
}

// If not yet set, fill the input data plane with zeros
if(dp.is_empty()) {
if(dp.is_empty()) {
dp.set_size(grid.nx(), grid.ny());
dp.set_constant(0.0);
}
Expand All @@ -223,18 +199,12 @@ void process_input_grid(DataPlane &dp) {
<< "Parsed Input Grid:\t" << grid.name()
<< " (" << grid.nx() << " x " << grid.ny() << ")\n";

// Clean up
if(mtddf_ptr) { delete mtddf_ptr; mtddf_ptr = (Met2dDataFile *) 0; }

return;
}

////////////////////////////////////////////////////////////////////////

void process_mask_file(DataPlane &dp) {
Met2dDataFileFactory mtddf_factory;
Met2dDataFile *mtddf_ptr = (Met2dDataFile *) 0;
GrdFileType ftype = FileType_None;

// Initialize
solar_ut = (unixtime) 0;
Expand Down Expand Up @@ -282,26 +252,10 @@ void process_mask_file(DataPlane &dp) {
// Otherwise, process the mask file as a gridded data file
else {

// Get the gridded file type from the mask config string, if present
if(mask_field_str.length() > 0) {
config.read_string(mask_field_str.c_str());
ftype = parse_conf_file_type(&config);
}

mtddf_ptr = mtddf_factory.new_met_2d_data_file(mask_filename.c_str(), ftype);
if(!mtddf_ptr) {
mlog << Error << "\nprocess_mask_file() -> "
<< "can't open gridded mask data file \"" << mask_filename << "\"\n\n";
exit(1);
}

// Read mask_field, if specified
if(mask_field_str.length() > 0) {
get_data_plane(mtddf_ptr, mask_field_str.c_str(), dp);
}

// Extract the grid
grid_mask = mtddf_ptr->grid();
// Read the mask grid and data plane, if requested
get_data_plane(mask_filename, mask_field_str,
mask_type == MaskType_Data,
dp, grid_mask);

mlog << Debug(2)
<< "Parsed Mask Grid:\t" << grid_mask.name()
Expand Down Expand Up @@ -393,70 +347,105 @@ void process_mask_file(DataPlane &dp) {
exit(1);
}

// Clean up
if(mtddf_ptr) { delete mtddf_ptr; mtddf_ptr = (Met2dDataFile *) 0; }

return;
}

////////////////////////////////////////////////////////////////////////

void get_data_plane(Met2dDataFile *mtddf_ptr,
const char *config_str, DataPlane &dp) {
VarInfoFactory vi_factory;
VarInfo *vi_ptr = (VarInfo *) 0;
double dmin, dmax;
void get_data_plane(const ConcatString &file_name,
const ConcatString &config_str,
bool read_gen_vx_mask_output,
DataPlane &dp, Grid &dp_grid) {
ConcatString local_cs = config_str;
GrdFileType ftype = FileType_None;

// Parse the config string
config.read_string(config_str);
// Initialize to the global configuration
MetConfig local_config = global_config;

// Allocate new VarInfo object
vi_ptr = vi_factory.new_var_info(mtddf_ptr->file_type());
if(!vi_ptr) {
mlog << Error << "\nget_data_plane() -> "
<< "can't allocate new VarInfo pointer.\n\n";
exit(1);
// Parse non-empty config strings
if(local_cs.length() > 0) {
local_config.read_string(local_cs.c_str());
ftype = parse_conf_file_type(&local_config);
}

// Read config into the VarInfo object
vi_ptr->set_dict(config);

// Get data plane from the file for this VarInfo object
if(!mtddf_ptr->data_plane(*vi_ptr, dp)) {
// Attempt to open the data file
Met2dDataFileFactory mtddf_factory;
Met2dDataFile *mtddf_ptr = (Met2dDataFile *) 0;
mtddf_ptr = mtddf_factory.new_met_2d_data_file(file_name.c_str(), ftype);
if(!mtddf_ptr) {
mlog << Error << "\nget_data_plane() -> "
<< "trouble reading field \"" << config_str
<< "\" from file \"" << mtddf_ptr->filename() << "\"\n\n";
<< "can't open input file \"" << file_name << "\"\n\n";
exit(1);
}

// Dump the range of data values read
dp.data_range(dmin, dmax);
mlog << Debug(3)
<< "Read field \"" << vi_ptr->magic_str() << "\" from \""
<< mtddf_ptr->filename() << "\" with data ranging from "
<< dmin << " to " << dmax << ".\n";
// Read gen_vx_mask output from a previous run
if(read_gen_vx_mask_output &&
local_cs.length() == 0 &&
mtddf_ptr->file_type() == FileType_NcMet) {
if(get_gen_vx_mask_config_str((MetNcMetDataFile *) mtddf_ptr, local_cs)) {
local_config.read_string(local_cs.c_str());
}
}

// Read data plane, if requested
if(local_cs.length() > 0) {

// Allocate new VarInfo object
VarInfoFactory vi_factory;
VarInfo *vi_ptr = (VarInfo *) 0;
vi_ptr = vi_factory.new_var_info(mtddf_ptr->file_type());
if(!vi_ptr) {
mlog << Error << "\nget_data_plane() -> "
<< "can't allocate new VarInfo pointer.\n\n";
exit(1);
}

// Read config into the VarInfo object
vi_ptr->set_dict(local_config);

// Get data plane from the file for this VarInfo object
if(!mtddf_ptr->data_plane(*vi_ptr, dp)) {
mlog << Error << "\nget_data_plane() -> "
<< "trouble reading field \"" << local_cs
<< "\" from file \"" << mtddf_ptr->filename() << "\"\n\n";
exit(1);
}

// Dump the range of data values read
double dmin, dmax;
dp.data_range(dmin, dmax);
mlog << Debug(3)
<< "Read field \"" << vi_ptr->magic_str() << "\" from \""
<< mtddf_ptr->filename() << "\" with data ranging from "
<< dmin << " to " << dmax << ".\n";

// Clean up
if(vi_ptr) { delete vi_ptr; vi_ptr = (VarInfo *) 0; }

} // end if

// Extract the grid
dp_grid = mtddf_ptr->grid();

// Clean up
if(vi_ptr) { delete vi_ptr; vi_ptr = (VarInfo *) 0; }
if(mtddf_ptr) { delete mtddf_ptr; mtddf_ptr = (Met2dDataFile *) 0; }

return;
}

////////////////////////////////////////////////////////////////////////

bool get_gen_vx_mask_data(Met2dDataFile *mtddf_ptr, DataPlane &dp) {
bool get_gen_vx_mask_config_str(MetNcMetDataFile *mnmdf_ptr,
ConcatString &config_str) {
bool status = false;
ConcatString tool, config_str;
ConcatString tool;
int i;

// Must be MET NetCDF format
if(mtddf_ptr->file_type() != FileType_NcMet) return(status);

// Cast pointer of correct type
MetNcMetDataFile *mnmdf_ptr = (MetNcMetDataFile *) mtddf_ptr;
// Check for null pointer
if(!mnmdf_ptr) return(status);

// Check for the MET_tool global attribute
if(!get_global_att(mnmdf_ptr->MetNc->Nc, (string)"MET_tool", tool)) return(status);
if(!get_global_att(mnmdf_ptr->MetNc->Nc, (string) "MET_tool", tool)) return(status);

// Check for gen_vx_mask output
if(tool != program_name) return(status);
Expand All @@ -469,8 +458,9 @@ bool get_gen_vx_mask_data(Met2dDataFile *mtddf_ptr, DataPlane &dp) {
mnmdf_ptr->MetNc->Var[i].name == "lon") continue;

// Read the first non-lat/lon variable
config_str << "'name=\"" << mnmdf_ptr->MetNc->Var[i].name << "\"; level=\"(*,*)\";'";
get_data_plane(mtddf_ptr, config_str.c_str(), dp);
config_str << cs_erase
<< "'name=\"" << mnmdf_ptr->MetNc->Var[i].name
<< "\"; level=\"(*,*)\";'";
status = true;
break;
}
Expand Down Expand Up @@ -1231,7 +1221,7 @@ void write_netcdf(const DataPlane &dp) {
}

int deflate_level = compress_level;
if (deflate_level < 0) deflate_level = config.nc_compression();
if (deflate_level < 0) deflate_level = global_config.nc_compression();

// Define Variables
mask_var = add_var(f_out, string(mask_name), ncFloat, lat_dim, lon_dim, deflate_level);
Expand Down Expand Up @@ -1444,7 +1434,7 @@ void usage() {
<< mlog.verbosity_level() << ") (optional).\n"

<< "\t\t\"-compress level\" overrides the compression level of "
<< "NetCDF variable (" << config.nc_compression()
<< "NetCDF variable (" << global_config.nc_compression()
<< ") (optional).\n\n"

<< flush;
Expand Down
17 changes: 10 additions & 7 deletions met/src/tools/other/gen_vx_mask/gen_vx_mask.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
// 000 12/09/14 Halley Gotway New
// 001 06/02/16 Halley Gotway Add box masking type.
// 002 11/15/16 Halley Gotway Add solar masking types.
// 003 06/03/21 Seth Linden Changed default mask type to MaskType_None
// 003 06/03/21 Seth Linden Changed default mask type to MaskType_None.
// 004 08/30/21 Halley Gotway MET #1891 fix input and mask fields.
//
////////////////////////////////////////////////////////////////////////

Expand All @@ -32,6 +33,7 @@ using namespace std;
#include "vx_cal.h"
#include "mask_poly.h"
#include "vx_grid.h"
#include "data2d_nc_met.h"
#include "data_plane.h"
#include "vx_data2d.h"
#include "vx_data2d_factory.h"
Expand Down Expand Up @@ -112,18 +114,19 @@ static MaskPoly poly_mask;
static Grid grid, grid_mask;

// Configuration object for reading config strings
static MetConfig config;
static MetConfig global_config;
static int compress_level = -1;

////////////////////////////////////////////////////////////////////////

static void process_command_line(int, char **);
static void process_input_grid(DataPlane &dp);
static void process_mask_file(DataPlane &dp);
static void get_data_plane(Met2dDataFile *mtddf_ptr,
const char *config_str, DataPlane &dp);
static bool get_gen_vx_mask_data(Met2dDataFile *mtddf_ptr,
DataPlane &dp);
static void get_data_plane(const ConcatString &file_name,
const ConcatString &config_str, bool,
DataPlane &dp, Grid &dp_grid);
static bool get_gen_vx_mask_config_str(MetNcMetDataFile *,
ConcatString &);
static void get_shapefile_outline(ShpPolyRecord &shape);
static void apply_poly_mask(DataPlane &dp);
static void apply_shape_mask(DataPlane &dp);
Expand All @@ -135,7 +138,7 @@ static void apply_data_mask(DataPlane &dp);
static void apply_solar_mask(DataPlane &dp);
static void apply_lat_lon_mask(DataPlane &dp);
static DataPlane combine(const DataPlane &dp_data,
const DataPlane &dp_mask, SetLogic);
const DataPlane &dp_mask, SetLogic);
static void write_netcdf(const DataPlane &dp);
static void usage();
static void set_type(const StringArray &);
Expand Down
22 changes: 22 additions & 0 deletions test/xml/unit_gen_vx_mask.xml
Original file line number Diff line number Diff line change
Expand Up @@ -438,4 +438,26 @@
</output>
</test>

<!-- -->
<!-- DATA: For MET issue #1891, use GRIB1 and GRIB2 inputs to replace -->
<!-- 2-m temperature over water with bad data. -->
<!-- -->

<test name="gen_vx_mask_DATA_TWO_FILE_TYPES">
<exec>&MET_BIN;/gen_vx_mask</exec>
<param> \
&DATA_DIR_MODEL;/grib1/gfs/gfs_2012040900_F012.grib \
&DATA_DIR_MODEL;/grib2/gfs/gfs_2012040900_F012.grib2 \
&OUTPUT_DIR;/gen_vx_mask/DATA_TWO_FILE_TYPES.nc \
-type data \
-input_field 'name="TMP"; level="Z2"; file_type=GRIB1;' \
-mask_field 'name="LAND"; level="L0";' \
-name TMP_2M_LAND \
-thresh lt0.5 -value -9999 -v 3
</param>
<output>
<grid_nc>&OUTPUT_DIR;/gen_vx_mask/DATA_TWO_FILE_TYPES.nc</grid_nc>
</output>
</test>

</met_test>

0 comments on commit 34fe8f5

Please sign in to comment.