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>
9 #include <boost/math/distributions/gamma.hpp>
10 #include <boost/math/distributions/normal.hpp>
16 #define GRIDPP_VERSION "0.8.0"
17 #define __version__ GRIDPP_VERSION
25 typedef std::vector<float>
vec;
27 typedef std::vector<vec>
vec2;
29 typedef std::vector<vec2>
vec3;
31 typedef std::vector<int>
ivec;
33 typedef std::vector<ivec>
ivec2;
35 typedef std::vector<ivec2>
ivec3;
39 typedef std::vector<double>
dvec;
41 typedef std::vector<dvec>
dvec2;
49 static const float MV = NAN;
53 static const float pi = 3.14159265;
163 const vec2& background,
164 const Points& obs_points,
166 const vec& variance_ratios,
167 const vec& background_at_points,
168 const StructureFunction& structure,
170 bool allow_extrapolation=
true);
185 const vec& background,
186 const Points& obs_points,
188 const vec& variance_ratios,
189 const vec& background_at_points,
190 const StructureFunction& structure,
192 bool allow_extrapolation=
true);
210 const vec2& background,
211 const vec2& bvariance,
212 const Points& obs_points,
214 const vec& obs_variance,
215 const vec& background_at_points,
216 const vec& bvariance_at_points,
217 const StructureFunction& structure,
219 vec2& analysis_variance,
220 bool allow_extrapolation=
true);
238 const vec& background,
239 const vec& bvariance,
240 const Points& obs_points,
242 const vec& obs_variance,
243 const vec& background_at_points,
244 const vec& bvariance_at_points,
245 const StructureFunction& structure,
247 vec& analysis_variance,
248 bool allow_extrapolation=
true);
264 const vec3& background,
265 const Points& obs_points,
267 const vec& obs_standard_deviations,
268 const vec2& background_at_points,
269 const StructureFunction& structure,
271 bool allow_extrapolation=
true);
287 const vec2& background,
288 const Points& obs_points,
290 const vec& obs_standard_deviations,
291 const vec2& background_at_points,
292 const StructureFunction& structure,
294 bool allow_extrapolation=
true);
313 const vec3& background,
314 const vec3& background_corr,
315 const Points& obs_points,
318 const vec2& pbackground,
319 const vec2& pbackground_corr,
320 const StructureFunction& structure,
322 bool allow_extrapolation=
true);
339 const vec3& background,
340 const Points& obs_points,
343 const vec2& pbackground,
344 const StructureFunction& structure,
346 bool allow_extrapolation=
true);
365 const vec3& background,
366 const vec3& background_corr,
367 const Points& obs_points,
370 const vec2& pbackground,
371 const vec2& pbackground_corr,
372 const StructureFunction& structure,
374 bool allow_extrapolation=
true);
393 const vec2& background,
394 const vec2& background_corr,
395 const Points& obs_points,
398 const vec2& pbackground,
399 const vec2& pbackground_corr,
400 const StructureFunction& structure,
402 bool allow_extrapolation=
true);
419 const vec2& background,
420 const Points& obs_points,
423 const vec2& pbackground,
424 const StructureFunction& structure,
426 bool allow_extrapolation=
true);
443 const vec2& background,
444 const vec2& background_corr,
445 const Points& obs_points,
448 const vec2& pbackground,
449 const vec2& pbackground_corr,
450 const StructureFunction& structure,
452 bool allow_extrapolation=
true);
464 const StructureFunction& structure,
481 const vec2& background,
482 const Points& obs_points,
484 const vec& background_at_points,
485 const StructureFunction& structure,
505 const vec2& background,
506 const Points& obs_points,
508 const vec2& background_at_points,
509 const StructureFunction& structure,
525 const Points& points,
540 const vec2& background,
541 const Points& points,
542 const vec& observations,
543 const ivec& halfwidths,
556 const vec2& background,
557 const Points& points,
558 const vec& observations,
879 vec2 nearest(
const Grid& igrid,
const Grid& ogrid,
const vec2& ivalues);
887 vec3 nearest(
const Grid& igrid,
const Grid& ogrid,
const vec3& ivalues);
895 vec nearest(
const Grid& igrid,
const Points& opoints,
const vec2& ivalues);
903 vec2 nearest(
const Grid& igrid,
const Points& opoints,
const vec3& ivalues);
911 vec nearest(
const Points& ipoints,
const Points& opoints,
const vec& ivalues);
919 vec2 nearest(
const Points& ipoints,
const Points& opoints,
const vec2& ivalues);
927 vec2 nearest(
const Points& ipoints,
const Grid& ogrid,
const vec& ivalues);
935 vec3 nearest(
const Points& ipoints,
const Grid& ogrid,
const vec2& ivalues);
999 vec bilinear(
const Grid& igrid,
const Points& opoints,
const vec2& ivalues);
1007 vec2 bilinear(
const Grid& igrid,
const Points& opoints,
const vec3& ivalues);
1112 vec2 smart(
const Grid& igrid,
const Grid& ogrid,
const vec2& ivalues,
int num,
const StructureFunction& structure);
1126 vec count(
const Grid& grid,
const Points& points,
float radius);
1134 vec2 count(
const Grid& igrid,
const Grid& ogrid,
float radius);
1142 vec2 count(
const Points& points,
const Grid& grid,
float radius);
1150 vec count(
const Points& ipoints,
const Points& opoints,
float radius);
1158 vec distance(
const Grid& grid,
const Points& points,
int num=1);
1166 vec2 distance(
const Grid& igrid,
const Grid& ogrid,
int num=1);
1174 vec2 distance(
const Points& points,
const Grid& grid,
int num=1);
1182 vec distance(
const Points& ipoints,
const Points& opoint,
int num=1);
1199 vec2 gridding(
const Grid& grid,
const Points& points,
const vec& values,
float radius,
int min_num,
Statistic statistic);
1210 vec gridding(
const Points& opoints,
const Points& ipoints,
const vec& values,
float radius,
int min_num,
Statistic statistic);
1265 float pressure(
float ielev,
float oelev,
float ipressure,
float itemperature=288.15);
1425 void debug(std::string
string);
1430 void warning(std::string
string);
1435 void error(std::string
string);
1764 ivec get_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1779 int get_num_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1788 static float deg2rad(
float deg);
1789 static float rad2deg(
float deg);
1846 typedef boost::geometry::model::point<float, 3, boost::geometry::cs::cartesian>
point;
1847 typedef std::pair<point, unsigned>
value;
1848 typedef boost::geometry::model::box<point>
box;
1849 boost::geometry::index::rtree< value, boost::geometry::index::quadratic<16> >
mTree;
1906 ivec get_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
1925 int get_num_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
2018 int get_num_neighbours(
float lat,
float lon,
float radius,
bool include_match=
true)
const;
2036 bool get_box(
float lat,
float lon,
int& Y1_out,
int& X1_out,
int& Y2_out,
int& X2_out)
const;
2054 ivec get_indices(
int index)
const;
2078 virtual vec corr(
const Point& p1,
const std::vector<Point>& p2)
const;
2100 float barnes_rho(
float dist,
float length)
const;
2114 float soar_rho(
float dist,
float length)
const;
2121 float toar_rho(
float dist,
float length)
const;
2135 float linear_rho(
float diff,
float min_corr)
const;
2147 vec corr(
const Point& p1,
const std::vector<Point>& p2)
const;
2175 vec corr(
const Point& p1,
const std::vector<Point>& p2)
const;
2207 vec corr(
const Point& p1,
const std::vector<Point>& p2)
const;
2239 vec corr(
const Point& p1,
const std::vector<Point>& p2)
const;
2271 vec corr(
const Point& p1,
const std::vector<Point>& p2)
const;
2303 vec corr(
const Point& p1,
const std::vector<Point>& p2)
const;
2350 virtual float forward(
float value)
const;
2351 virtual float backward(
float value)
const;
2396 float forward(
float value)
const;
2404 float forward(
float value)
const;
2416 float forward(
float value)
const;
2430 float forward(
float value)
const;
2446 Gamma(
float shape,
float scale,
float tolerance=0.01);
2449 float forward(
float value)
const;
2453 boost::math::gamma_distribution<> m_gamma_dist;
2454 boost::math::normal m_norm_dist;
Simple structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:2156
StructureFunctionPtr clone() const
Definition: structure.cpp:268
BarnesStructure(float h, float v=0, float w=0, float hmax=MV)
Exponential structure function.
Definition: structure.cpp:143
float corr(const Point &p1, const Point &p2) const
Correlation between two points.
Definition: structure.cpp:185
float localization_distance(const Point &p) const
Maximum distance for which an observation can have an impact (localization)
Definition: structure.cpp:271
Box-Cox transformation.
Definition: gridpp.h:2408
BoxCox(float threshold)
Initialize Box-Cox transform.
Definition: transform.cpp:97
virtual float backward(float value) const
Definition: transform.cpp:10
virtual float forward(float value) const
Definition: transform.cpp:7
Simple structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:2317
float corr(const Point &p1, const Point &p2) const
Correlation between two points.
Definition: structure.cpp:297
CressmanStructure(float h, float v=0, float w=0)
Cressman.
Definition: structure.cpp:287
StructureFunctionPtr clone() const
Definition: structure.cpp:310
Definition: gridpp.h:2328
CrossValidation(StructureFunction &structure, float dist)
Structure function for performing cross validation experiments.
Definition: structure.cpp:910
StructureFunctionPtr clone() const
Definition: structure.cpp:939
float localization_distance(const Point &p) const
Maximum distance for which an observation can have an impact (localization)
Definition: structure.cpp:942
float corr_background(const Point &p1, const Point &p2) const
Correlation between a background point and an observation points.
Definition: structure.cpp:920
float corr(const Point &p1, const Point &p2) const
Correlation between two points.
Definition: structure.cpp:917
Gamma transformation.
Definition: gridpp.h:2438
Gamma(float shape, float scale, float tolerance=0.01)
Initialize Gamma transform.
Definition: transform.cpp:155
virtual float backward(float value) const
Definition: transform.cpp:10
virtual float forward(float value) const
Definition: transform.cpp:7
Represents a 2D grid of locations and their metadata.
Definition: gridpp.h:1971
vec2 get_elevs() const
Definition: grid.cpp:89
vec2 get_lats() const
Definition: grid.cpp:83
ivec2 get_neighbours_with_distance(float lat, float lon, float radius, vec &distances, bool include_match=true) const
Definition: grid.cpp:62
ivec2 get_closest_neighbours(float lat, float lon, int num, bool include_match=true) const
Definition: grid.cpp:72
int get_num_neighbours(float lat, float lon, float radius, bool include_match=true) const
Definition: grid.cpp:57
ivec get_nearest_neighbour(float lat, float lon, bool include_match=true) const
Definition: grid.cpp:76
vec2 get_lons() const
Definition: grid.cpp:86
ivec2 get_neighbours(float lat, float lon, float radius, bool include_match=true) const
Definition: grid.cpp:67
Point get_point(int y_index, int x_index) const
Definition: grid.cpp:232
vec2 get_lafs() const
Definition: grid.cpp:92
bool get_box(float lat, float lon, int &Y1_out, int &X1_out, int &Y2_out, int &X2_out) const
Definition: grid.cpp:149
Points to_points() const
Convert grid to a vector of points.
Definition: grid.cpp:131
CoordinateType get_coordinate_type() const
Definition: grid.cpp:146
Grid()
Definition: grid.cpp:6
ivec size() const
Definition: grid.cpp:122
Identity transform, i.e.
Definition: gridpp.h:2390
virtual float backward(float value) const
Definition: transform.cpp:10
virtual float forward(float value) const
Definition: transform.cpp:7
Helper class for Grid and Points representing a tree of points.
Definition: gridpp.h:1746
vec mX
Definition: gridpp.h:1852
ivec get_neighbours(float lat, float lon, float radius, bool include_match=true) const
Find all points with a radius.
Definition: kdtree.cpp:39
vec mLats
Definition: gridpp.h:1850
std::pair< point, unsigned > value
Definition: gridpp.h:1847
static float calc_straight_distance(float x0, float y0, float z0, float x1, float y1, float z1)
Calculate straight line distance between two 3D coordinates.
Definition: kdtree.cpp:192
int size() const
Definition: kdtree.cpp:216
boost::geometry::model::box< point > box
Definition: gridpp.h:1848
KDTree(vec lats, vec lons, CoordinateType type=Geodetic)
Definition: kdtree.cpp:6
vec mZ
Definition: gridpp.h:1854
int get_nearest_neighbour(float lat, float lon, bool include_match=true) const
Find single nearest points.
Definition: kdtree.cpp:104
KDTree(CoordinateType type=Geodetic)
Definition: gridpp.h:1751
ivec get_closest_neighbours(float lat, float lon, int num, bool include_match=true) const
Find a set of nearest points.
Definition: kdtree.cpp:82
static float calc_distance_fast(float lat1, float lon1, float lat2, float lon2, CoordinateType type=Geodetic)
Calculate an approximate distance between two coordinates.
Definition: kdtree.cpp:134
boost::geometry::model::point< float, 3, boost::geometry::cs::cartesian > point
Definition: gridpp.h:1846
CoordinateType get_coordinate_type() const
Definition: kdtree.cpp:219
KDTree & operator=(KDTree other)
Definition: kdtree.cpp:222
vec mY
Definition: gridpp.h:1853
static float calc_distance(float lat1, float lon1, float lat2, float lon2, CoordinateType type=Geodetic)
Calculate distance between two coordinates using Haversine function.
Definition: kdtree.cpp:107
vec get_lats() const
Definition: kdtree.cpp:201
ivec get_neighbours_with_distance(float lat, float lon, float radius, vec &distances, bool include_match=true) const
Find all points with a radius.
Definition: kdtree.cpp:23
static float deg2rad(float deg)
Definition: kdtree.cpp:195
vec get_lons() const
Definition: kdtree.cpp:204
CoordinateType mType
Definition: gridpp.h:1855
const vec & get_y() const
Definition: kdtree.cpp:210
const vec & get_z() const
Definition: kdtree.cpp:213
const vec & get_x() const
Definition: kdtree.cpp:207
boost::geometry::index::rtree< value, boost::geometry::index::quadratic< 16 > > mTree
Definition: gridpp.h:1849
vec mLons
Definition: gridpp.h:1851
static float rad2deg(float deg)
Definition: kdtree.cpp:198
int get_num_neighbours(float lat, float lon, float radius, bool include_match=true) const
Find the number of points within a radius.
Definition: kdtree.cpp:18
Linear structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:2284
StructureFunctionPtr clone() const
Definition: structure.cpp:890
LinearStructure(float h, float v=0, float w=0, float hmax=MV)
Exponential structure function.
Definition: structure.cpp:765
float corr(const Point &p1, const Point &p2) const
Correlation between two points.
Definition: structure.cpp:807
float localization_distance(const Point &p) const
Maximum distance for which an observation can have an impact (localization)
Definition: structure.cpp:893
Log transformation: output = log(input)
Definition: gridpp.h:2400
virtual float backward(float value) const
Definition: transform.cpp:10
virtual float forward(float value) const
Definition: transform.cpp:7
Definition: gridpp.h:2138
MultipleStructure(const StructureFunction &structure_h, const StructureFunction &structure_v, const StructureFunction &structure_w)
Different structure functions for horizontal, vertical, and land/sea.
Definition: structure.cpp:90
StructureFunctionPtr clone() const
Definition: structure.cpp:136
float localization_distance(const Point &p) const
Maximum distance for which an observation can have an impact (localization)
Definition: structure.cpp:95
float corr(const Point &p1, const Point &p2) const
Correlation between two points.
Definition: structure.cpp:98
Represents a single point in some coordinate system.
Definition: gridpp.h:1713
float lon
Definition: gridpp.h:1736
float y
Definition: gridpp.h:1741
float laf
Definition: gridpp.h:1738
CoordinateType type
Definition: gridpp.h:1739
float elev
Definition: gridpp.h:1737
Point(float lat, float lon, float elev=MV, float laf=MV, CoordinateType type=Geodetic)
Constructor.
Definition: point.cpp:5
float x
Definition: gridpp.h:1740
float lat
Definition: gridpp.h:1735
float z
Definition: gridpp.h:1742
Represents a vector of locations and their metadata.
Definition: gridpp.h:1876
vec get_lafs() const
Definition: points.cpp:71
vec get_elevs() const
Definition: points.cpp:68
vec get_lons() const
Definition: points.cpp:65
Points subset(const ivec &indices) const
Subset the points.
Definition: points.cpp:131
int size() const
Definition: points.cpp:74
Points get_in_domain(const Grid &grid) const
Get points that are inside the envelope of a grid.
Definition: points.cpp:93
vec get_lats() const
Definition: points.cpp:62
ivec get_in_domain_indices(const Grid &grid) const
Get point indices that are inside the envelope of a grid.
Definition: points.cpp:77
ivec get_neighbours_with_distance(float lat, float lon, float radius, vec &distances, bool include_match=true) const
Definition: points.cpp:44
ivec get_closest_neighbours(float lat, float lon, int num, bool include_match=true) const
Definition: points.cpp:52
int get_num_neighbours(float lat, float lon, float radius, bool include_match=true) const
Definition: points.cpp:40
Points & operator=(Points other)
Definition: points.cpp:110
Point get_point(int index) const
Definition: points.cpp:128
int get_nearest_neighbour(float lat, float lon, bool include_match=true) const
Definition: points.cpp:55
Points()
Definition: points.cpp:5
CoordinateType get_coordinate_type() const
Definition: points.cpp:125
ivec get_neighbours(float lat, float lon, float radius, bool include_match=true) const
Definition: points.cpp:48
Powerlaw structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:2252
float localization_distance(const Point &p) const
Maximum distance for which an observation can have an impact (localization)
Definition: structure.cpp:746
float corr(const Point &p1, const Point &p2) const
Correlation between two points.
Definition: structure.cpp:660
StructureFunctionPtr clone() const
Definition: structure.cpp:743
PowerlawStructure(float h, float v=0, float w=0, float hmax=MV)
Exponential structure function.
Definition: structure.cpp:618
SOAR structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:2188
SoarStructure(float h, float v=0, float w=0, float hmax=MV)
Exponential structure function.
Definition: structure.cpp:317
float localization_distance(const Point &p) const
Maximum distance for which an observation can have an impact (localization)
Definition: structure.cpp:445
float corr(const Point &p1, const Point &p2) const
Correlation between two points.
Definition: structure.cpp:359
StructureFunctionPtr clone() const
Definition: structure.cpp:442
Started Box-Cox transformation.
Definition: gridpp.h:2422
StartedBoxCox(float threshold, float scaling_factor)
Initialize started Box-Cox transform.
Definition: transform.cpp:126
virtual float backward(float value) const
Definition: transform.cpp:10
virtual float forward(float value) const
Definition: transform.cpp:7
Covariance structure function.
Definition: gridpp.h:2069
float powerlaw_rho(float dist, float length) const
Powerlaw correlation function.
Definition: structure.cpp:66
float cressman_rho(float dist, float length) const
Cressman correlation function.
Definition: structure.cpp:35
float toar_rho(float dist, float length) const
Compactly supported third-order autoregressive correlation function.
Definition: structure.cpp:56
static const float default_min_rho
Definition: gridpp.h:2093
float linear_rho(float diff, float min_corr) const
Linear correlation function.
Definition: structure.cpp:76
float m_localization_distance
Definition: gridpp.h:2136
float barnes_rho(float dist, float length) const
Barnes correlation function.
Definition: structure.cpp:26
StructureFunction(float localization_distance=0)
Definition: structure.cpp:7
virtual float corr_background(const Point &p1, const Point &p2) const
Correlation between a background point and an observation points.
Definition: structure.cpp:20
float soar_rho(float dist, float length) const
Compactly supported second-order autoregressive correlation function.
Definition: structure.cpp:46
virtual float corr(const Point &p1, const Point &p2) const =0
Correlation between two points.
virtual StructureFunctionPtr clone() const =0
virtual float localization_distance(const Point &p) const
Maximum distance for which an observation can have an impact (localization)
Definition: structure.cpp:87
TOAR structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:2220
float localization_distance(const Point &p) const
Maximum distance for which an observation can have an impact (localization)
Definition: structure.cpp:595
StructureFunctionPtr clone() const
Definition: structure.cpp:592
ToarStructure(float h, float v=0, float w=0, float hmax=MV)
Exponential structure function.
Definition: structure.cpp:467
float corr(const Point &p1, const Point &p2) const
Correlation between two points.
Definition: structure.cpp:509
Definition: gridpp.h:2062
not_implemented_exception()
Definition: gridpp.cpp:77
float sea_level_pressure(float ps, float altitude, float temperature, float rh=gridpp::MV, float dewpoint=gridpp::MV)
Convert Surface Pressure to Sea Level Pressure.
Definition: pressure.cpp:28
vec3 optimal_interpolation_ensi_multi_utem(const Grid &bgrid, const vec2 &bratios, const vec3 &background, const vec3 &background_corr, const Points &obs_points, const vec &pobs, const vec &pratios, const vec2 &pbackground, const vec2 &pbackground_corr, const StructureFunction &structure, int max_points, bool allow_extrapolation=true)
Optimal interpolation for an ensemble gridded field with ensemble-based correlations.
Definition: oi_ensi_multi.cpp:226
double clock()
The current time.
Definition: util.cpp:254
vec2 neighbourhood_quantile(const vec2 &input, float quantile, int halfwidth)
Computes a quantile in a sliding square neighbourhood.
Definition: neighbourhood.cpp:534
vec2 neighbourhood_quantile_ens_fast(const vec3 &input, float quantile, int radius, const vec &thresholds)
Deprecated: Compute neighbourhood quantiles fast on ensemble field.
Definition: neighbourhood.cpp:549
vec2 optimal_interpolation_full(const Grid &bgrid, const vec2 &background, const vec2 &bvariance, const Points &obs_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.
Definition: oi.cpp:342
std::vector< double > dvec
1D double vector
Definition: gridpp.h:39
ivec3 init_ivec3(int Y, int X, int E, int value)
Initialize a 3D integer vector of size Y, X, E, with a given value.
Definition: util.cpp:496
void initialize_omp()
Sets the number of OpenMP threads to 1 if OMP_NUM_THREADS undefined.
Definition: gridpp.cpp:45
vec2 local_distribution_correction(const Grid &bgrid, const vec2 &background, const Points &obs_points, const vec &obs, const vec &background_at_points, 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.
Definition: local_distribution_correction.cpp:18
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.
Definition: curve.cpp:6
vec2 test_vec2_output()
Testing function for 2D output vector.
Definition: swig.cpp:49
float get_optimal_threshold(const vec &curve_ref, const vec &curve_fcst, float threshold, Metric metric)
Compute the optimal threshold to remap an input threshold to.
Definition: metric_optimizer.cpp:129
std::vector< vec > vec2
2D float vector
Definition: gridpp.h:27
std::vector< ivec > ivec2
2D integer vector
Definition: gridpp.h:33
vec2 doping_circle(const Grid &igrid, const vec2 &background, const Points &points, const vec &observations, const vec &radii, float max_elev_diff=gridpp::MV)
Insert observations into gridded field using a circle.
Definition: doping.cpp:50
static const float gas_constant_mol
Universal Gas Constant [kg*m^2*s^-2/(K*mol)].
Definition: gridpp.h:65
int test_ivec_input(const ivec &input)
Testing function for 1D input vector.
Definition: swig.cpp:18
static const float MV
Missing value indicator.
Definition: gridpp.h:49
std::string version()
The gridpp version.
Definition: gridpp.cpp:8
vec2 mask_threshold_downscale_quantile(const Grid &igrid, const Grid &ogrid, const vec3 &ivalues_true, const vec3 &ivalues_false, const vec3 &theshold_values, const vec2 &threshold, const ComparisonOperator &comparison_operator, const float quantile_level)
Masked ensemble downscaling and quantile extraction.
Definition: mask_threshold_downscale_consensus.cpp:14
vec3 test_vec3_output()
Testing function for 3D output vector.
Definition: swig.cpp:55
vec2 neighbourhood_score(const Grid &grid, const Points &points, const vec2 &fcst, const vec &ref, int half_width, gridpp::Metric metric, float threshold)
Compute a score for a metric of all points within a radius.
Definition: neighbourhood_score.cpp:6
Statistic
Statistical operations to reduce a vector to a scalar.
Definition: gridpp.h:88
@ Unknown
Unknown statistic.
Definition: gridpp.h:99
@ Min
Minimum of values.
Definition: gridpp.h:90
@ Count
Count of values.
Definition: gridpp.h:97
@ Median
Mean of values.
Definition: gridpp.h:91
@ Sum
Sum of values.
Definition: gridpp.h:96
@ Std
Standard deviation of values.
Definition: gridpp.h:94
@ Variance
Population variance of values.
Definition: gridpp.h:95
@ Mean
Mean of values.
Definition: gridpp.h:89
@ RandomChoice
Randomly pick a non-nan value.
Definition: gridpp.h:98
@ Quantile
A quantile from values.
Definition: gridpp.h:93
@ Max
Maximum of values.
Definition: gridpp.h:92
vec2 neighbourhood_ens(const vec3 &input, int halfwidth, Statistic statistic)
Deprecated: Compute neighbourhood statistic on ensemble field.
Definition: neighbourhood.cpp:541
vec2 test_args_for_R(const Points &bpoints, const StructureFunction &structure, const vec2 &background)
Definition: swig.cpp:101
CoordinateType
Types of coordinates for position of points.
Definition: gridpp.h:120
@ Geodetic
Latitude and longitude.
Definition: gridpp.h:121
@ Cartesian
X and Y.
Definition: gridpp.h:122
static const float standard_surface_temperature
Temperature at surface in standard atmosphere [K].
Definition: gridpp.h:59
int get_debug_level()
Get the currently set level of debug messagess.
Definition: gridpp.cpp:74
void debug(std::string string)
Writes a debug message to standard out.
Definition: util.cpp:226
std::vector< int > ivec
1D integer vector
Definition: gridpp.h:31
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 (useful for masking)
Definition: fill.cpp:6
static const float pi
Mathematical constant pi.
Definition: gridpp.h:53
int get_omp_threads()
Get the number of OpenMP threads currently set.
Definition: gridpp.cpp:63
float test_vec3_input(const vec3 &input)
Testing function for 3D input vector.
Definition: swig.cpp:34
vec monotonize_curve(vec curve_ref, vec curve_fcst, vec &output_fcst)
Ensure calibration curve is monotonic, by removing points on the curve.
Definition: curve.cpp:134
int get_upper_index(float iX, const vec &iValues)
Find the index in a vector that is equal to or just above a value.
Definition: util.cpp:358
void set_debug_level(int level)
Set the verbosity of debug messages.
Definition: gridpp.cpp:70
vec2 mask_threshold_downscale_consensus(const Grid &igrid, const Grid &ogrid, const vec3 &ivalues_true, const vec3 &ivalues_false, const vec3 &theshold_values, const vec2 &threshold, const ComparisonOperator &comparison_operator, const Statistic &statistic)
Masked ensemble downscaling and consensus.
Definition: mask_threshold_downscale_consensus.cpp:11
void warning(std::string string)
Writes a warning message to standard out.
Definition: util.cpp:230
vec calc_even_quantiles(const vec &values, int num)
Get reasonably spaced quantile levels from a vector of values, ignoring duplicate values but includin...
Definition: util.cpp:261
vec get_neighbourhood_thresholds(const vec2 &input, int num_thresholds)
Calculate appropriate approximation thresholds for fast neighbourhood quantile.
Definition: neighbourhood.cpp:243
bool convert_coordinates(const vec &lats, const vec &lons, CoordinateType type, vec &x_coords, vec &y_coords, vec &z_coords)
Convert lats/lons or 2D x/y coordinates to 3D cartesian coordinates with the centre of the earth as t...
Definition: util.cpp:583
vec3 init_vec3(int Y, int X, int E, float value=MV)
Initialize a 3D float vector of size Y, X, E, with a given value.
Definition: util.cpp:487
Metric
Binary verification metrics.
Definition: gridpp.h:103
@ Pc
Proportion correct.
Definition: gridpp.h:107
@ Ts
Threat score.
Definition: gridpp.h:105
@ Ets
Equitable threat score.
Definition: gridpp.h:104
@ Hss
Heidke skill score.
Definition: gridpp.h:109
@ Bias
Bias.
Definition: gridpp.h:108
@ Kss
Hannsen-Kuiper skill score.
Definition: gridpp.h:106
vec2 optimal_interpolation(const Grid &bgrid, const vec2 &background, const Points &obs_points, const vec &obs, const vec &variance_ratios, const vec &background_at_points, const StructureFunction &structure, int max_points, bool allow_extrapolation=true)
Optimal interpolation for a deterministic gridded field.
Definition: oi.cpp:26
vec test_vec_output()
Testing function for 1D output vector.
Definition: swig.cpp:45
vec distance(const Grid &grid, const Points &points, int num=1)
For each point, calculates the distance to nearest gridpoint.
Definition: distance.cpp:6
vec2 downscaling(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues, Downscaler downscaler)
Downscale a gridded field.
Definition: downscaling.cpp:21
ivec2 test_ivec2_output()
Definition: swig.cpp:69
std::shared_ptr< gridpp::StructureFunction > StructureFunctionPtr
Definition: gridpp.h:2067
vec2 smart(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues, int num, const StructureFunction &structure)
Smart neighbour downscaling grid to grid for a deterministic field.
Definition: smart.cpp:12
ivec2 init_ivec2(int Y, int X, int value)
Initialize a 2D integer vector of size Y, X, with a given value.
Definition: util.cpp:481
float test_vec2_input(const vec2 &input)
Testing function for 2D input vector.
Definition: swig.cpp:25
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.
Definition: util.cpp:571
vec3 optimal_interpolation_ensi_multi_ebe(const Grid &bgrid, const vec2 &bratios, const vec3 &background, const vec3 &background_corr, const Points &obs_points, const vec2 &pobs, const vec &pratios, const vec2 &pbackground, const vec2 &pbackground_corr, const StructureFunction &structure, int max_points, bool allow_extrapolation=true)
Optimal interpolation for an ensemble gridded field with ensemble-based correlations.
Definition: oi_ensi_multi.cpp:34
float qnh(float pressure, float altitude)
Diagnose QNH from pressure and altitude.
Definition: qnh.cpp:6
float wetbulb(float temperature, float pressure, float relative_humidity)
Calculate wetbulb temperature from temperature, pressure, and relative humidity.
Definition: humidity.cpp:91
int get_lower_index(float iX, const vec &iValues)
Find the index in a vector that is equal to or just below a value.
Definition: util.cpp:339
static int debug_level
Definition: gridpp.h:1399
float calc_statistic(const vec &array, Statistic statistic)
Compute a statistic on a 1D vector.
Definition: util.cpp:19
static const float swig_default_value
Default value used to fill array in SWIG testing functions.
Definition: gridpp.h:1708
vec2 simple_gradient(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues, float elev_gradient, Downscaler downscaler=Nearest)
Elevation correction dowscaling grid to grid for a deterministic field.
Definition: simple_gradient.cpp:23
static const float lapse_rate
Constant Lapse Rate moist air standard atmosphere [K/m].
Definition: gridpp.h:57
vec quantile_mapping_curve(const vec &ref, const vec &fcst, vec &output_fcst, vec quantiles=vec())
Create quantile mapping calibration curve.
Definition: quantile_mapping.cpp:5
bool compatible_size(const Grid &grid, const vec2 &v)
Check if the grid is the same size as the 2D vector.
Definition: util.cpp:427
vec2 bilinear(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues)
Bilinear downscaling grid to grid for a deterministic field.
Definition: bilinear.cpp:27
void test_not_implemented_exception()
Definition: swig.cpp:98
Extrapolation
Methods for extrapolating outside a curve.
Definition: gridpp.h:79
@ Zero
Continue past the end-points using a slope of 0.
Definition: gridpp.h:83
@ MeanSlope
Continue past the end-points using the mean slope of the curve.
Definition: gridpp.h:81
@ OneToOne
Continue past the end-points using a slope of 1.
Definition: gridpp.h:80
@ Unchanged
Keep values the way they were.
Definition: gridpp.h:84
@ NearestSlope
Continue past the end-points using the slope of the two lowermost or uppermost points in the curve.
Definition: gridpp.h:82
std::vector< float > vec
1D float vector
Definition: gridpp.h:25
float wind_direction(float xwind, float ywind)
Diagnose wind direction from its components.
Definition: wind.cpp:20
static const float molar_mass
Molar Mass of Dry Air [kg/mol].
Definition: gridpp.h:63
float test_vec_input(const vec &input)
Testing function for 1D input vector.
Definition: swig.cpp:12
vec2 downscale_probability(const Grid &igrid, const Grid &ogrid, const vec3 &ivalues, const vec2 &threshold, const ComparisonOperator &comparison_operator)
Nearest neighbour downscaling grid to grid and probability in one.
Definition: downscale_probability.cpp:7
bool is_valid_lat(float lat, CoordinateType type)
Checks that a lat-coordinate is valid (based on the coordinate type)
Definition: util.cpp:617
void test_args_for_R_1(const StructureFunction &structure)
Definition: swig.cpp:135
vec3 full_gradient_debug(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues, const vec2 &elev_gradient, const vec2 &laf_gradient=vec2(), Downscaler downscaler=Nearest)
Definition: gradient.cpp:276
ComparisonOperator
Types of comparison operators.
Definition: gridpp.h:138
@ Lt
Lower than, <.
Definition: gridpp.h:139
@ Geq
Greater or equal than, >=.
Definition: gridpp.h:142
@ Gt
Greater than, >
Definition: gridpp.h:141
@ Leq
Lower or equal than, <=.
Definition: gridpp.h:140
std::vector< dvec > dvec2
2D double vector
Definition: gridpp.h:41
static const float MV_CML
Missing value indicator in gridpp command-line tool.
Definition: gridpp.h:51
float calc_score(float a, float b, float c, float d, Metric metric)
Compute the score for a 2x2 contingency table.
Definition: metric_optimizer.cpp:207
vec2 gridding(const Grid &grid, const Points &points, const vec &values, float radius, int min_num, Statistic statistic)
Aggregate points onto a grid.
Definition: gridding.cpp:6
ivec test_ivec_output()
Definition: swig.cpp:65
float test_vec_argout(vec &distances)
Testing function for 1D vector treated as output.
Definition: swig.cpp:86
int num_missing_values(const vec2 &iArray)
Count the number of missing values in a vector.
Definition: util.cpp:217
static const float gas_constant_si
Universal Gas Constant [J/(kg*K)].
Definition: gridpp.h:67
Statistic get_statistic(std::string name)
Convert name of a statistic enums.
Definition: gridpp.cpp:11
float * test_array(float *v, int n)
Special function whose presense is needed for SWIG.
Definition: swig.cpp:6
vec2 staticcorr_points(const Points &points, const Points &knots, const StructureFunction &structure, int max_points)
Calculate the static correlations between sets of points.
Definition: corr_points.cpp:26
vec2 nearest(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues)
Nearest neighbour dowscaling grid to grid for a deterministic field.
Definition: nearest.cpp:7
vec2 init_vec2(int Y, int X, float value=MV)
Initialize a 2D float vector of size Y, X, with a given value.
Definition: util.cpp:475
float relative_humidity(float temperature, float dewpoint)
Calculate relative humidity from temperature and dewpoint temperature.
Definition: humidity.cpp:33
vec3 optimal_interpolation_ensi(const Grid &bgrid, const vec3 &background, const Points &obs_points, const vec &obs, const vec &obs_standard_deviations, const vec2 &background_at_points, const StructureFunction &structure, int max_points, bool allow_extrapolation=true)
Optimal interpolation for an ensemble gridded field See Lussana et al 2019 (DOI: 10....
Definition: oi_ensi.cpp:33
vec gamma_inv(const vec &levels, const vec &shape, const vec &scale)
Extract quantiles from a gamma distribution.
Definition: distribution.cpp:5
void set_omp_threads(int num)
Set the number of OpenMP threads to use.
Definition: gridpp.cpp:57
std::vector< vec2 > vec3
3D float vector
Definition: gridpp.h:29
bool is_valid(float value)
Checks if a value is valid.
Definition: util.cpp:16
float pressure(float ielev, float oelev, float ipressure, float itemperature=288.15)
Calculate pressure at a new elevation.
Definition: pressure.cpp:5
CorrectionType
Method for statistical correction.
Definition: gridpp.h:113
@ Multiplicative
Multiplicative.
Definition: gridpp.h:115
@ Qq
Quantile mapping.
Definition: gridpp.h:114
@ Additive
Additive.
Definition: gridpp.h:116
float interpolate(float x, const vec &iX, const vec &iY)
Piecewise linear interpolation If x is outside the range of iX, then the min/max value of iY is used.
Definition: util.cpp:377
void error(std::string string)
Writes an error message to standard out.
Definition: util.cpp:234
vec3 optimal_interpolation_ensi_multi_ebesc(const Grid &bgrid, const vec2 &bratios, const vec3 &background, const Points &obs_points, const vec2 &pobs, const vec &pratios, const vec2 &pbackground, const StructureFunction &structure, int max_points, bool allow_extrapolation=true)
Optimal interpolation for an ensemble gridded field with static correlations.
Definition: oi_ensi_multi.cpp:137
vec2 neighbourhood(const vec2 &input, int halfwidth, Statistic statistic)
Spatial neighbourhood filter, computing a statistic for a sliding square window.
Definition: neighbourhood.cpp:28
void future_deprecation_warning(std::string function, std::string other="")
Writes an deprecation warning to standard out.
Definition: util.cpp:246
vec2 calc_gradient(const vec2 &base, const vec2 &values, GradientType gradient_type, int halfwidth, int min_num=2, float min_range=gridpp::MV, float default_gradient=0)
Computes gradients based on values in neighbourhood.
Definition: calc_gradient.cpp:6
bool is_valid_lon(float lon, CoordinateType type)
Checks that a lon-coordinate is valid (based on the coordinate type)
Definition: util.cpp:622
vec count(const Grid &grid, const Points &points, float radius)
For each point, counts the number of gridpoints within the radius.
Definition: count.cpp:6
static const float gravit
Gravitational acceleration [m/s^2].
Definition: gridpp.h:61
vec metric_optimizer_curve(const vec &ref, const vec &fcst, const vec &thresholds, Metric metric, vec &output_fcst)
Create calibration curve that optimizes a metric.
Definition: metric_optimizer.cpp:105
vec2 neighbourhood_quantile_ens(const vec3 &input, float quantile, int halfwidth)
Deprecated: Compute neighbourhood quantiles on ensemble field.
Definition: neighbourhood.cpp:545
vec2 neighbourhood_quantile_fast(const vec2 &input, float quantile, int halfwidth, const vec &thresholds)
Fast and approximate neighbourhood quantile.
Definition: neighbourhood.cpp:296
vec2 gridding_nearest(const Grid &grid, const Points &points, const vec &values, int min_num, gridpp::Statistic statistic)
Assign each point to nearest neighbour in grid and aggregate values.
Definition: gridding.cpp:63
ivec3 test_ivec3_output()
Definition: swig.cpp:76
float wind_speed(float xwind, float ywind)
Diagnose wind speed from its components.
Definition: wind.cpp:6
float test_vec2_argout(vec2 &distances)
Testing function for 2D vector treated as output.
Definition: swig.cpp:91
GradientType
Types of methods to calculate the gradient.
Definition: gridpp.h:126
@ LinearRegression
Definition: gridpp.h:128
@ MinMax
Definition: gridpp.h:127
vec2 full_gradient(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues, const vec2 &elev_gradient, const vec2 &laf_gradient=vec2(), Downscaler downscaler=Nearest)
Compute Downscale.
Definition: gradient.cpp:5
vec2 fill_missing(const vec2 &values)
Fill in missing values based on nearby values.
Definition: fill.cpp:43
float calc_quantile(const vec &array, float quantile_level)
Compute a quantile from a 1D vector.
Definition: util.cpp:111
vec2 window(const vec2 &array, int length, gridpp::Statistic statistic, bool before=false, bool keep_missing=false, bool missing_edges=true)
Compute window statistics across time, independently for each case.
Definition: window.cpp:6
float dewpoint(float temperature, float relative_humidity)
Calculate dewpoint temperature from temperature and relative humidity.
Definition: humidity.cpp:5
vec2 neighbourhood_search(const vec2 &array, const vec2 &search_array, int halfwidth, float search_target_min, float search_target_max, float search_delta, const ivec2 &apply_array=ivec2())
Find suitable value in neighbourhood that match a search criteria.
Definition: neighbourhood_search.cpp:7
Downscaler
Types of simple downscaling methods.
Definition: gridpp.h:132
@ Nearest
Nearest neighour downscaler.
Definition: gridpp.h:133
@ Bilinear
Bilinear downscaler.
Definition: gridpp.h:134
std::vector< ivec2 > ivec3
3D integer vector
Definition: gridpp.h:35
vec2 neighbourhood_brute_force(const vec2 &input, int halfwidth, Statistic statistic)
Spatial neighbourhood filter without any shortcuts.
Definition: neighbourhood.cpp:528
vec2 doping_square(const Grid &igrid, const vec2 &background, const Points &points, const vec &observations, const ivec &halfwidths, float max_elev_diff=gridpp::MV)
Insert observations into gridded field using a square box.
Definition: doping.cpp:5
static const double radius_earth
Radius of the earth [m].
Definition: gridpp.h:55
Definition: gridpp.h:1866
bool operator()(value const &v) const
Definition: kdtree.cpp:265
is_not_equal(point p)
Definition: kdtree.cpp:261
Definition: gridpp.h:1857
within_radius(point p, float radius, bool include_match)
Definition: kdtree.cpp:241
bool operator()(value const &v) const
Definition: kdtree.cpp:247