5 #include <boost/geometry.hpp> 6 #include <boost/geometry/geometries/point.hpp> 7 #include <boost/geometry/geometries/box.hpp> 8 #include <boost/geometry/index/rtree.hpp> 14 #define GRIDPP_VERSION "0.6.0.dev4" 15 #define __version__ GRIDPP_VERSION 22 typedef std::vector<float>
vec;
23 typedef std::vector<vec>
vec2;
24 typedef std::vector<vec2>
vec3;
25 typedef std::vector<int>
ivec;
26 typedef std::vector<ivec>
ivec2;
27 typedef std::vector<ivec2>
ivec3;
30 typedef std::vector<double>
dvec;
31 typedef std::vector<dvec>
dvec2;
39 static const float MV = NAN;
43 static const float pi = 3.14159265;
122 const vec& pbackground,
125 bool allow_extrapolation=
true);
143 const vec& pbackground,
146 bool allow_extrapolation=
true);
163 const vec2& bvariance,
166 const vec& obs_variance,
167 const vec& background_at_points,
168 const vec& bvariance_at_points,
171 vec2& analysis_variance,
172 bool allow_extrapolation=
true);
189 const vec& bvariance,
192 const vec& obs_variance,
193 const vec& background_at_points,
194 const vec& bvariance_at_points,
197 vec& analysis_sigmas,
198 bool allow_extrapolation=
true);
213 const vec2& pbackground,
216 bool allow_extrapolation=
true);
223 const vec2& pbackground,
226 bool allow_extrapolation=
true);
244 const vec& pbackground,
254 const vec2& pbackground,
266 vec2
fill(
const Grid& igrid,
const vec2& input,
const Points& points,
const vec& radii,
float value,
bool outside);
267 vec2
doping(
const Grid& igrid,
const vec2& input,
const Points& points,
const vec& values,
int half_width,
float max_elev_diff=
gridpp::MV);
448 float calc_score(
const vec& ref,
const vec& fcst,
float threshold,
Metric metric);
449 float calc_score(
const vec& ref,
const vec& fcst,
float threshold,
float fthreshold,
Metric metric);
451 vec2
correction(
const Grid& rgrid,
const vec2& rvalues,
const Points& npoints,
const vec& nvalues,
float mean_radius,
float outer_radius,
float inner_radius,
int min_num,
int max_num,
CorrectionType type, ivec2&
count);
453 vec2
correction(
const Grid& rgrid,
const vec3& rvalues,
const Points& npoints,
const vec2& nvalues,
const vec2& apply_values,
float mean_radius,
float outer_radius,
float inner_radius,
int min_num,
int max_num,
CorrectionType type, ivec2&
count);
468 vec2
nearest(
const Grid& igrid,
const Grid& ogrid,
const vec2& ivalues);
469 vec3
nearest(
const Grid& igrid,
const Grid& ogrid,
const vec3& ivalues);
622 float pressure(
float ielev,
float oelev,
float ipressure,
float itemperature=288.15);
631 vec
pressure(
const vec& ielev,
const vec& oelev,
const vec& ipressure,
const vec& itemperature);
689 vec
wind_speed(
const vec& xwind,
const vec& ywind);
734 void debug(std::string
string);
735 void warning(std::string
string);
736 void error(std::string
string);
777 float interpolate(
float x,
const std::vector<float>& iX,
const std::vector<float>& iY);
781 vec2
init_vec2(
int Y,
int X,
float value=MV);
784 ivec3
init_ivec3(
int Y,
int X,
int E,
int value);
785 vec3
init_vec3(
int Y,
int X,
int E,
float value=MV);
804 vec2
calc_gradient(
const Grid& grid,
const vec2& base,
const vec2& values,
int radius,
int min_num=2,
float min_range=0,
float default_gradient=0);
883 virtual float corr(
const Point& p1,
const Point& p2)
const = 0;
884 virtual float corr_background(
const Point& p1,
const Point& p2)
const;
888 float localization_distance()
const;
895 float barnes_rho(
float dist,
float length)
const;
901 float cressman_rho(
float dist,
float length)
const;
913 float corr(
const Point& p1,
const Point& p2)
const;
930 float corr(
const Point& p1,
const Point& p2)
const;
942 float corr(
const Point& p1,
const Point& p2)
const;
956 float corr(
const Point& p1,
const Point& p2)
const;
957 float corr_background(
const Point& p1,
const Point& p2)
const;
969 virtual float forward(
float value)
const;
970 virtual float backward(
float value)
const;
972 vec forward(
const vec& input)
const;
973 vec backward(
const vec& input)
const;
974 vec2 forward(
const vec2& input)
const;
975 vec2 backward(
const vec2& input)
const;
976 vec3 forward(
const vec3& input)
const;
977 vec3 backward(
const vec3& input)
const;
985 float forward(
float value)
const;
986 float backward(
float value)
const;
992 float forward(
float value)
const;
993 float backward(
float value)
const;
1000 float forward(
float value)
const;
1001 float backward(
float value)
const;
1018 int get_nearest_neighbour(
float lat,
float lon,
bool include_match=
true)
const;
1025 ivec get_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1033 ivec get_neighbours_with_distance(
float lat,
float lon,
float radius, vec& distances,
bool include_match=
true)
const;
1040 int get_num_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1047 ivec get_closest_neighbours(
float lat,
float lon,
int num,
bool include_match=
true)
const;
1057 bool convert_coordinates(
const vec& lats,
const vec& lons, vec& x_coords, vec& y_coords, vec& z_coords)
const;
1066 bool convert_coordinates(
float lat,
float lon,
float& x_coord,
float& y_coord,
float& z_coord)
const;
1067 static float deg2rad(
float deg);
1068 static float rad2deg(
float deg);
1070 static float calc_distance(
float x0,
float y0,
float z0,
float x1,
float y1,
float z1);
1072 static float calc_distance_fast(
const Point& p1,
const Point& p2);
1073 vec get_lats()
const;
1074 vec get_lons()
const;
1078 typedef boost::geometry::model::point<float, 3, boost::geometry::cs::cartesian>
point;
1079 typedef std::pair<point, unsigned>
value;
1080 typedef boost::geometry::model::box<point>
box;
1081 boost::geometry::index::rtree< value, boost::geometry::index::quadratic<16> >
mTree;
1089 bool operator()(value
const& v)
const;
1098 bool operator()(value
const& v)
const;
1120 int get_nearest_neighbour(
float lat,
float lon,
bool include_match=
true)
const;
1121 ivec get_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1122 ivec get_neighbours_with_distance(
float lat,
float lon,
float radius, vec& distances,
bool include_match=
true)
const;
1123 int get_num_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1124 ivec get_closest_neighbours(
float lat,
float lon,
int num,
bool include_match=
true)
const;
1126 vec get_lats()
const;
1127 vec get_lons()
const;
1128 vec get_elevs()
const;
1129 vec get_lafs()
const;
1131 ivec get_in_domain_indices(
const Grid& grid)
const;
1132 Points get_in_domain(
const Grid& grid)
const;
1134 Point get_point(
int index)
const;
1157 ivec get_nearest_neighbour(
float lat,
float lon,
bool include_match=
true)
const;
1158 ivec2 get_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1159 ivec2 get_neighbours_with_distance(
float lat,
float lon,
float radius, vec& distances,
bool include_match=
true)
const;
1160 int get_num_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1161 ivec2 get_closest_neighbours(
float lat,
float lon,
int num,
bool include_match=
true)
const;
1163 bool get_box(
float lat,
float lon,
int& Y1_out,
int& X1_out,
int& Y2_out,
int& X2_out)
const;
1166 Points to_points()
const;
1168 vec2 get_lats()
const;
1169 vec2 get_lons()
const;
1170 vec2 get_elevs()
const;
1171 vec2 get_lafs()
const;
1174 Point get_point(
int y_index,
int x_index)
const;
1178 vec2 get_2d(vec input)
const;
1179 ivec get_indices(
int index)
const;
1180 ivec2 get_indices(ivec indices)
const;
Definition: gridpp.h:1186
float test_vec2_input(const vec2 &input)
Testing function for 2D input vector.
vec subset(const vec &array, const ivec &indices)
Definition: util.cpp:172
vec2 nearest(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues)
Nearest neighbour dowscaling grid to grid.
std::string version()
The gridpp version.
Definition: gridpp.h:1086
Bias.
Definition: gridpp.h:84
vec2 neighbourhood_quantile_ens_fast(const vec3 &input, float quantile, int radius, const vec &thresholds)
Deprecated: Compute neighbourhood quantiles fast on ensemble field.
float laf
Definition: gridpp.h:875
vec2 optimal_interpolation(const Grid &bgrid, const vec2 &background, const Points &points, const vec &pobs, const vec &pratios, const vec &pbackground, const StructureFunction &structure, int max_points, bool allow_extrapolation=true)
Optimal interpolation for a deterministic gridded field.
static const float MV_CML
Missing value indicator in gridpp command-line tool.
Definition: gridpp.h:41
Helper class for Grid and Points.
Definition: gridpp.h:1007
void test_not_implemented_exception()
vec2 bilinear(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues)
Bilinear downscaling grid to grid.
Minimum of values.
Definition: gridpp.h:68
float dewpoint(float temperature, float relative_humidity)
Calculate dewpoint temperature from temperature and relative humidity.
Statistic get_statistic(std::string name)
Convert name of a statistic enum.
Maximum of values.
Definition: gridpp.h:70
float wind_speed(float xwind, float ywind)
Diagnose wind speed from its components.
CorrectionType
Method for statistical correction.
Definition: gridpp.h:89
std::vector< int > ivec
Definition: gridpp.h:25
ivec2 test_ivec2_output()
vec2 test_vec2_output()
Testing function for 2D output vector.
Unknown statistic.
Definition: gridpp.h:75
Metric
Binary verification metrics.
Definition: gridpp.h:79
Simple structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:921
vec2 metric_optimizer_curve(const vec &ref, const vec &fcst, const vec &thresholds, Metric metric)
Create calibration curve that optimizes a metric.
vec background(const vec &elevs, const vec &values, int num_min_prof, float min_elev_diff, float value_minp, float value_maxp, BackgroundType background_type, const vec &external_background_values, const ivec &indices_global_outer, bool debug)
Background (first guess) calculations at observation locations.
Definition: background.cpp:35
vec distance(const Grid &grid, const Points &points, int num=1)
For each point, calculates the distance to nearest gridpoint.
Extrapolation
Methods for extrapolating outside a curve.
Definition: gridpp.h:57
float test_vec_argout(vec &distances)
Testing function for 1D vector treated as output.
CoordinateType type
Definition: gridpp.h:876
not_implemented_exception()
Definition: gridpp.h:1189
Proportion correct.
Definition: gridpp.h:83
bool convert_coordinates(const vec &lats, const vec &lons, vec &x_coords, vec &y_coords, vec &z_coords)
Convert lat/lons to 3D cartesian coordinates with the centre of the earth as the origin.
Definition: util.cpp:59
Population variance of values.
Definition: gridpp.h:73
Point(float lat, float lon, float elev=MV, float laf=MV, CoordinateType type=Geodetic)
Constructor.
vec2 smart(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues, int num, const StructureFunction &structure)
Smart neighbour downscaling grid to grid.
void set_omp_threads(int num)
Set the number of OpenMP threads to use.
float relative_humidity(float temperature, float dewpoint)
Calculate relative humidity from temperature and dewpoint temperature.
ivec3 test_ivec3_output()
vec2 correction(const Grid &rgrid, const vec2 &rvalues, const Points &npoints, const vec &nvalues, float mean_radius, float outer_radius, float inner_radius, int min_num, int max_num, CorrectionType type, ivec2 &count)
vec2 local_distribution_correction(const Grid &bgrid, const vec2 &background, const Points &points, const vec &pobs, const vec &pbackground, const StructureFunction &structure, float min_quantile, float max_quantile, int min_points=0)
Correction of a gridded field ensuring the distribution of values nearby match that of observations...
vec2 neighbourhood_quantile(const vec2 &input, float quantile, int halfwidth)
Computes a quantile in a sliding square neighbourhood.
boost::geometry::model::point< float, 3, boost::geometry::cs::cartesian > point
Definition: gridpp.h:1078
Threat score.
Definition: gridpp.h:81
vec2 doping(const Grid &igrid, const vec2 &input, const Points &points, const vec &values, int half_width, float max_elev_diff=gridpp::MV)
vec2 fill(const Grid &igrid, const vec2 &input, const Points &points, const vec &radii, float value, bool outside)
Fill in values inside or outside a set of circles.
Represents a vector of locations and their metadata.
Definition: gridpp.h:1105
vec2 neighbourhood_quantile_fast(const vec2 &input, float quantile, int halfwidth, const vec &thresholds)
Fast and approximate neighbourhood quantile.
std::pair< point, unsigned > value
Definition: gridpp.h:1079
std::vector< ivec2 > ivec3
Definition: gridpp.h:27
Keep values the way they were.
Definition: gridpp.h:62
Definition: gridpp.h:1095
vec2 neighbourhood_brute_force(const vec2 &input, int halfwidth, Statistic statistic)
Spatial neighbourhood filter without any shortcuts.
ivec3 init_ivec3(int Y, int X, int E, int value)
Initialize a vector of size Y, X, E, with a given value.
std::vector< vec > vec2
Definition: gridpp.h:23
Latitude and longitude.
Definition: gridpp.h:97
Represents a 2D grid of locations and their metadata.
Definition: gridpp.h:1145
Simple structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:939
vec2 neighbourhood(const vec2 &input, int halfwidth, Statistic statistic)
Spatial neighbourhood filter, computing a statistic for a sliding square window.
Covariance structure function.
Definition: gridpp.h:879
Heidke skill score.
Definition: gridpp.h:85
Continue past the end-points using the mean slope of the curve.
Definition: gridpp.h:59
void debug(std::string string)
void initialize_omp()
Sets the number of OpenMP threads to 1 if OMP_NUM_THREADS undefined.
float get_optimal_threshold(const vec &ref, const vec &fcst, float threshold, Metric metric)
static const float swig_default_value
Default value used to fill array in SWIG testing functions.
Definition: gridpp.h:857
vec count(const Grid &grid, const Points &points, float radius)
For each point, counts the number of gridpoints within the radius.
int get_upper_index(float iX, const std::vector< float > &iValues)
Find the index in a vector that is equal or just above a value.
Continue past the end-points using the slope of the two lowermost or uppermost points in the curve...
Definition: gridpp.h:60
vec2 optimal_interpolation_full(const Grid &bgrid, const vec2 &background, const vec2 &bvariance, const Points &points, const vec &obs, const vec &obs_variance, const vec &background_at_points, const vec &bvariance_at_points, const StructureFunction &structure, int max_points, vec2 &analysis_variance, bool allow_extrapolation=true)
Optimal interpolation for a deterministic gridded field including analysis variance.
boost::geometry::model::box< point > box
Definition: gridpp.h:1080
float test_vec2_argout(vec2 &distances)
Testing function for 2D vector treated as output.
float test_vec_input(const vec &input)
Testing function for 1D input vector.
CoordinateType
Types of coordinates for position of points.
Definition: gridpp.h:96
vec test_vec_output()
Testing function for 1D output vector.
float interpolate(float x, const std::vector< float > &iX, const std::vector< float > &iY)
Piecewise linear interpolation If x is outside the range of iX, then the min/max value of iY is used...
vec quantile_mapping_curve(const vec &ref, const vec &fcst, vec &output_fcst, vec quantiles=vec())
Create quantile mapping calibration curve.
vec3 init_vec3(int Y, int X, int E, float value=MV)
vec mLats
Definition: gridpp.h:1082
bool point_in_rectangle(const Point &A, const Point &B, const Point &C, const Point &D, const Point &m)
Checks if a point is located inside a rectangle formed by 4 points.
float wetbulb(float temperature, float pressure, float relative_humidity)
Calculate wetbulb temperature from temperature, pressure, and relative humidity.
std::vector< double > dvec
Definition: gridpp.h:30
int num_missing_values(const vec2 &iArray)
float lon
Definition: gridpp.h:873
std::vector< dvec > dvec2
Definition: gridpp.h:31
vec2 gridding(const Grid &grid, const Points &points, const vec &values, float radius, int min_num, Statistic statistic)
Aggregate points onto a grid.
Mean of values.
Definition: gridpp.h:69
Statistic
Statistical operations to reduce a vector to a scalar.
Definition: gridpp.h:66
int test_ivec_input(const ivec &input)
Testing function for 1D input vector.
vec mLons
Definition: gridpp.h:1083
bool is_valid(float value)
CoordinateType mType
Definition: gridpp.h:1084
vec2 init_vec2(int Y, int X, float value=MV)
vec calc_even_quantiles(const vec &values, int num)
Get reasonably spaced quantiles from a vector of values, ignoring duplicate values but including the ...
vec2 neighbourhood_ens(const vec3 &input, int halfwidth, Statistic statistic)
Deprecated: Compute neighbourhood statistic on ensemble field.
A quantile from values.
Definition: gridpp.h:71
float elev
Definition: gridpp.h:874
vec2 calc_gradient(const Grid &grid, const vec2 &base, const vec2 &values, int radius, int min_num=2, float min_range=0, float default_gradient=0)
Computes gradients based on values in neighbourhood.
vec3 optimal_interpolation_ensi(const Grid &bgrid, const vec3 &background, const Points &points, const vec &pobs, const vec &psigmas, const vec2 &pbackground, const StructureFunction &structure, int max_points, bool allow_extrapolation=true)
Optimal interpolation using a structure function based on an ensemble See Lussana et al 2019 (DOI: 10...
static const float pi
Mathematical constant pi.
Definition: gridpp.h:43
float apply_curve(float fcst, const vec &curve_ref, const vec &curve_fcst, Extrapolation policy_below, Extrapolation policy_above)
Apply arbitrary calibration curve to a single value.
int get_lower_index(float iX, const std::vector< float > &iValues)
Find the index in a vector that is equal or just below a value.
KDTree()
Definition: gridpp.h:1012
float calc_quantile(const vec &array, float quantile)
Multiplicative.
Definition: gridpp.h:91
ivec2 init_ivec2(int Y, int X, int value)
Initialize a vector of size Y, X, with a given value.
float qnh(float pressure, float altitude)
Diagnose QNH from pressure and altitude.
Standard deviation of values.
Definition: gridpp.h:72
static const float MV
Missing value indicator.
Definition: gridpp.h:39
vec get_neighbourhood_thresholds(const vec2 &input, int num_thresholds)
Calculate appropriate approximation thresholds for neighbourhood quantile.
float pressure(float ielev, float oelev, float ipressure, float itemperature=288.15)
Calculate pressure at a new elevation.
float calc_score(float a, float b, float c, float d, Metric metric)
float wind_direction(float xwind, float ywind)
Diagnose wind direction from its components.
X and Y.
Definition: gridpp.h:98
vec monotonize_curve(vec curve_ref, vec curve_fcst, vec &output_fcst)
Ensure calibration curve is monotonic, by removing points.
vec3 test_vec3_output()
Testing function for 3D output vector.
float calc_statistic(const vec &array, Statistic statistic)
float test_vec3_input(const vec3 &input)
Testing function for 3D input vector.
void future_deprecation_warning(std::string function, std::string other="")
boost::geometry::index::rtree< value, boost::geometry::index::quadratic< 16 > > mTree
Definition: gridpp.h:1081
vec2 neighbourhood_quantile_ens(const vec3 &input, float quantile, int halfwidth)
Deprecated: Compute neighbourhood quantiles on ensemble field.
Represents a single point in some coordinate system.
Definition: gridpp.h:862
Mean of values.
Definition: gridpp.h:67
void warning(std::string string)
float mLocalizationDistance
Definition: gridpp.h:902
Additive.
Definition: gridpp.h:92
vec2 fill_missing(const vec2 &values)
Fill in missing values based on nearby values.
float * test_array(float *v, int n)
Special function whose presense is needed for SWIG.
float deg2rad(float deg)
Definition: util.cpp:108
Continue past the end-points using a slope of 0.
Definition: gridpp.h:61
Continue past the end-points using a slope of 1.
Definition: gridpp.h:58
vec2 simple_gradient(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues, float elev_gradient)
std::vector< float > vec
Definition: gridpp.h:22
bool compatible_size(const Grid &grid, const vec2 &v)
Check if the grid is the same size as the 2D vector.
Hannsen-Kuiper skill score.
Definition: gridpp.h:82
float lat
Definition: gridpp.h:872
Equitable threat score.
Definition: gridpp.h:80
Sum of values.
Definition: gridpp.h:74
static const double radius_earth
Radius of the earth [m].
Definition: gridpp.h:45
void error(std::string string)
Quantile mapping.
Definition: gridpp.h:90
float calc_distance(float lat1, float lon1, float lat2, float lon2)
Definition: util.cpp:83
std::vector< ivec > ivec2
Definition: gridpp.h:26
std::vector< vec2 > vec3
Definition: gridpp.h:24