Gridpp 0.7.0
A post-processing library for gridded weather forecasts
gridpp.h
Go to the documentation of this file.
1 #ifndef GRIDPP_API_H
2 #define GRIDPP_API_H
3 #include <vector>
4 #include <string>
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>
11 #ifdef _OPENMP
12  #include <omp.h>
13 #endif
14 #include <exception>
15 
16 #define GRIDPP_VERSION "0.7.0"
17 #define __version__ GRIDPP_VERSION
18 
19 namespace gridpp {
23  // Preferred vector types
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;
36 
37  // Only use these when double is required
39  typedef std::vector<double> dvec;
41  typedef std::vector<dvec> dvec2;
49  static const float MV = NAN;
51  static const float MV_CML = -999;
53  static const float pi = 3.14159265;
55  static const double radius_earth = 6.378137e6;
57  static const float lapse_rate=0.0065;
59  static const float standard_surface_temperature = 288.15;
61  static const float gravit = 9.80665;
63  static const float molar_mass = 0.0289644;
65  static const float gas_constant_mol = 8.31447;
67  static const float gas_constant_si = 287.05;
70  class KDTree;
71  class Points;
72  class Grid;
73  class Point;
74  class Nearest;
75  class StructureFunction;
76  class Transform;
77 
80  OneToOne = 0,
81  MeanSlope = 10,
82  NearestSlope = 20,
83  Zero = 30,
84  Unchanged = 40,
85  };
86 
88  enum Statistic {
89  Mean = 0,
90  Min = 10,
91  Median = 20,
92  Max = 30,
93  Quantile = 40,
94  Std = 50,
95  Variance = 60,
96  Sum = 70,
97  Count = 80,
98  RandomChoice = 90,
99  Unknown = -1
100  };
101 
103  enum Metric {
104  Ets = 0,
105  Ts = 1,
106  Kss = 20,
107  Pc = 30,
108  Bias = 40,
109  Hss = 50,
110  };
111 
114  Qq = 0,
116  Additive = 20,
117  };
118 
121  Geodetic = 0,
122  Cartesian = 1,
123  };
124 
127  MinMax = 0,
129  };
130 
132  enum Downscaler {
133  Nearest = 0,
134  Bilinear = 1,
135  };
136 
139  Lt = 0,
140  Leq = 10,
141  Gt = 20,
142  Geq = 30,
143  };
144 
162  vec2 optimal_interpolation(const Grid& bgrid,
163  const vec2& background,
164  const Points& obs_points,
165  const vec& obs,
166  const vec& variance_ratios,
167  const vec& background_at_points,
168  const StructureFunction& structure,
169  int max_points,
170  bool allow_extrapolation=true);
171 
184  vec optimal_interpolation(const Points& bpoints,
185  const vec& background,
186  const Points& obs_points,
187  const vec& obs,
188  const vec& variance_ratios,
189  const vec& background_at_points,
190  const StructureFunction& structure,
191  int max_points,
192  bool allow_extrapolation=true);
193 
209  vec2 optimal_interpolation_full(const Grid& bgrid,
210  const vec2& background,
211  const vec2& bvariance,
212  const Points& obs_points,
213  const vec& obs,
214  const vec& obs_variance,
215  const vec& background_at_points,
216  const vec& bvariance_at_points,
217  const StructureFunction& structure,
218  int max_points,
219  vec2& analysis_variance,
220  bool allow_extrapolation=true);
221 
237  vec optimal_interpolation_full(const Points& bpoints,
238  const vec& background,
239  const vec& bvariance,
240  const Points& obs_points,
241  const vec& obs,
242  const vec& obs_variance,
243  const vec& background_at_points,
244  const vec& bvariance_at_points,
245  const StructureFunction& structure,
246  int max_points,
247  vec& analysis_variance,
248  bool allow_extrapolation=true);
249 
263  vec3 optimal_interpolation_ensi(const Grid& bgrid,
264  const vec3& background,
265  const Points& obs_points,
266  const vec& obs,
267  const vec& obs_standard_deviations,
268  const vec2& background_at_points,
269  const StructureFunction& structure,
270  int max_points,
271  bool allow_extrapolation=true);
272 
286  vec2 optimal_interpolation_ensi(const Points& bpoints,
287  const vec2& background,
288  const Points& obs_points,
289  const vec& obs,
290  const vec& obs_standard_deviations,
291  const vec2& background_at_points,
292  const StructureFunction& structure,
293  int max_points,
294  bool allow_extrapolation=true);
295 
309  vec2 local_distribution_correction(const Grid& bgrid,
310  const vec2& background,
311  const Points& obs_points,
312  const vec& obs,
313  const vec& background_at_points,
314  const StructureFunction& structure,
315  float min_quantile,
316  float max_quantile,
317  int min_points=0);
318 
333  vec2 local_distribution_correction(const Grid& bgrid,
334  const vec2& background,
335  const Points& obs_points,
336  const vec2& obs,
337  const vec2& background_at_points,
338  const StructureFunction& structure,
339  float min_quantile,
340  float max_quantile,
341  int min_points=0);
342 
352  vec2 fill(const Grid& igrid,
353  const vec2& input,
354  const Points& points,
355  const vec& radii,
356  float value,
357  bool outside);
358 
368  vec2 doping_square(const Grid& igrid,
369  const vec2& background,
370  const Points& points,
371  const vec& observations,
372  const ivec& halfwidths,
373  float max_elev_diff=gridpp::MV);
374 
384  vec2 doping_circle(const Grid& igrid,
385  const vec2& background,
386  const Points& points,
387  const vec& observations,
388  const vec& radii,
389  float max_elev_diff=gridpp::MV);
390 
402  vec gamma_inv(const vec& levels, const vec& shape, const vec& scale);
403 
417  vec2 neighbourhood(const vec2& input, int halfwidth, Statistic statistic);
418 
426  vec2 neighbourhood(const vec3& input, int halfwidth, Statistic statistic);
427 
434  vec2 neighbourhood_quantile(const vec2& input, float quantile, int halfwidth);
435 
442  vec2 neighbourhood_quantile(const vec3& input, float quantile, int halfwidth);
443 
451  vec2 neighbourhood_quantile_fast(const vec2& input, float quantile, int halfwidth, const vec& thresholds);
452 
460  vec2 neighbourhood_quantile_fast(const vec3& input, float quantile, int halfwidth, const vec& thresholds);
461 
469  vec2 neighbourhood_quantile_fast(const vec2& input, const vec2& quantile, int halfwidth, const vec& thresholds);
470 
478  vec2 neighbourhood_quantile_fast(const vec3& input, const vec2& quantile, int halfwidth, const vec& thresholds);
479 
486  vec2 neighbourhood_brute_force(const vec2& input, int halfwidth, Statistic statistic);
487 
494  vec2 neighbourhood_brute_force(const vec3& input, int halfwidth, Statistic statistic);
495 
501  vec get_neighbourhood_thresholds(const vec2& input, int num_thresholds);
502 
508  vec get_neighbourhood_thresholds(const vec3& input, int num_thresholds);
509 
520  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);
521 
535  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());
536 
539  vec2 neighbourhood_ens(const vec3& input, int halfwidth, Statistic statistic);
542  vec2 neighbourhood_quantile_ens(const vec3& input, float quantile, int halfwidth);
545  vec2 neighbourhood_quantile_ens_fast(const vec3& input, float quantile, int radius, const vec& thresholds);
560  vec quantile_mapping_curve(const vec& ref, const vec& fcst, vec& output_fcst, vec quantiles=vec());
561 
570  vec metric_optimizer_curve(const vec& ref, const vec& fcst, const vec& thresholds, Metric metric, vec& output_fcst);
571 
580  float apply_curve(float fcst, const vec& curve_ref, const vec& curve_fcst, Extrapolation policy_below, Extrapolation policy_above);
581 
590  vec apply_curve(const vec& fcst, const vec& curve_ref, const vec& curve_fcst, Extrapolation policy_below, Extrapolation policy_above);
591 
600  vec2 apply_curve(const vec2& fcst, const vec& curve_ref, const vec& curve_fcst, Extrapolation policy_below, Extrapolation policy_above);
601 
610  vec2 apply_curve(const vec2& fcst, const vec3& curve_ref, const vec3& curve_fcst, Extrapolation policy_below, Extrapolation policy_above);
611 
618  vec monotonize_curve(vec curve_ref, vec curve_fcst, vec& output_fcst);
619 
627  float get_optimal_threshold(const vec& curve_ref, const vec& curve_fcst, float threshold, Metric metric);
628 
637  float calc_score(float a, float b, float c, float d, Metric metric);
638 
646  float calc_score(const vec& ref, const vec& fcst, float threshold, Metric metric);
647 
657  float calc_score(const vec& ref, const vec& fcst, float threshold, float fthreshold, Metric metric);
658 
673  vec2 downscaling(const Grid& igrid, const Grid& ogrid, const vec2& ivalues, Downscaler downscaler);
674 
682  vec3 downscaling(const Grid& igrid, const Grid& ogrid, const vec3& ivalues, Downscaler downscaler);
683 
691  vec downscaling(const Grid& igrid, const Points& opoints, const vec2& ivalues, Downscaler downscaler);
692 
700  vec2 downscaling(const Grid& igrid, const Points& opoints, const vec3& ivalues, Downscaler downscaler);
701 
708  vec2 nearest(const Grid& igrid, const Grid& ogrid, const vec2& ivalues);
709 
716  vec3 nearest(const Grid& igrid, const Grid& ogrid, const vec3& ivalues);
717 
724  vec nearest(const Grid& igrid, const Points& opoints, const vec2& ivalues);
725 
732  vec2 nearest(const Grid& igrid, const Points& opoints, const vec3& ivalues);
733 
740  vec nearest(const Points& ipoints, const Points& opoints, const vec& ivalues);
741 
748  vec2 nearest(const Points& ipoints, const Points& opoints, const vec2& ivalues);
749 
756  vec2 nearest(const Points& ipoints, const Grid& ogrid, const vec& ivalues);
757 
764  vec3 nearest(const Points& ipoints, const Grid& ogrid, const vec2& ivalues);
765 
774  vec2 downscale_probability(const Grid& igrid, const Grid& ogrid, const vec3& ivalues, const vec2& threshold, const ComparisonOperator& comparison_operator);
775 
789  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);
790 
804  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);
805 
812  vec2 bilinear(const Grid& igrid, const Grid& ogrid, const vec2& ivalues);
813 
820  vec3 bilinear(const Grid& igrid, const Grid& ogrid, const vec3& ivalues);
821 
828  vec bilinear(const Grid& igrid, const Points& opoints, const vec2& ivalues);
829 
836  vec2 bilinear(const Grid& igrid, const Points& opoints, const vec3& ivalues);
837 
846  vec2 simple_gradient(const Grid& igrid, const Grid& ogrid, const vec2& ivalues, float elev_gradient, Downscaler downscaler=Nearest);
847 
856  vec3 simple_gradient(const Grid& igrid, const Grid& ogrid, const vec3& ivalues, float elev_gradient, Downscaler downscaler=Nearest);
857 
866  vec simple_gradient(const Grid& igrid, const Points& opoints, const vec2& ivalues, float elev_gradient, Downscaler downscaler=Nearest);
867 
876  vec2 simple_gradient(const Grid& igrid, const Points& opoints, const vec3& ivalues, float elev_gradient, Downscaler downscaler=Nearest);
877 
894  vec2 full_gradient(const Grid& igrid, const Grid& ogrid, const vec2& ivalues, const vec2& elev_gradient, const vec2& laf_gradient=vec2(), Downscaler downscaler=Nearest);
895 
905  vec3 full_gradient(const Grid& igrid, const Grid& ogrid, const vec3& ivalues, const vec3& elev_gradient, const vec3& laf_gradient, Downscaler downscaler=Nearest);
906 
916  vec full_gradient(const Grid& igrid, const Points& opoints, const vec2& ivalues, const vec2& elev_gradient, const vec2& laf_gradient, Downscaler downscaler=Nearest);
917 
927  vec2 full_gradient(const Grid& igrid, const Points& opoints, const vec3& ivalues, const vec3& elev_gradient, const vec3& laf_gradient, Downscaler downscaler=Nearest);
928 
929  /* Elevation and land area fraction downscaling with debug output fields. For debugging only,
930  */
931  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);
932 
941  vec2 smart(const Grid& igrid, const Grid& ogrid, const vec2& ivalues, int num, const StructureFunction& structure);
955  vec count(const Grid& grid, const Points& points, float radius);
956 
963  vec2 count(const Grid& igrid, const Grid& ogrid, float radius);
964 
971  vec2 count(const Points& points, const Grid& grid, float radius);
972 
979  vec count(const Points& ipoints, const Points& opoints, float radius);
980 
987  vec distance(const Grid& grid, const Points& points, int num=1);
988 
995  vec2 distance(const Grid& igrid, const Grid& ogrid, int num=1);
996 
1003  vec2 distance(const Points& points, const Grid& grid, int num=1);
1004 
1011  vec distance(const Points& ipoints, const Points& opoint, int num=1);
1012 
1017  vec2 fill_missing(const vec2& values);
1018 
1028  vec2 gridding(const Grid& grid, const Points& points, const vec& values, float radius, int min_num, Statistic statistic);
1029 
1039  vec gridding(const Points& opoints, const Points& ipoints, const vec& values, float radius, int min_num, Statistic statistic);
1040 
1050  vec2 gridding_nearest(const Grid& grid, const Points& points, const vec& values, int min_num, gridpp::Statistic statistic);
1051 
1061  vec gridding_nearest(const Points& opoints, const Points& ipoints, const vec& values, int min_num, gridpp::Statistic statistic);
1062 
1064  vec2 neighbourhood_score(const Grid& grid, const Points& points, const vec2& fcst, const vec& ref, int half_width, gridpp::Metric metric, float threshold);
1065 
1078  float dewpoint(float temperature, float relative_humidity);
1079 
1085  vec dewpoint(const vec& temperature, const vec& relative_humidity);
1086 
1094  float pressure(float ielev, float oelev, float ipressure, float itemperature=288.15);
1095 
1103  vec pressure(const vec& ielev, const vec& oelev, const vec& ipressure, const vec& itemperature);
1104 
1113  float sea_level_pressure(float ps, float altitude, float temperature, float rh=gridpp::MV, float dewpoint=gridpp::MV);
1114 
1123  vec sea_level_pressure(const vec& ps, const vec& altitude, const vec& temperature, const vec& rh, const vec& dewpoint);
1124 
1130  float qnh(float pressure, float altitude);
1131 
1137  vec qnh(const vec& pressure, const vec& altitude);
1138 
1144  float relative_humidity(float temperature, float dewpoint);
1145 
1151  vec relative_humidity(const vec& temperature, const vec& dewpoint);
1152 
1159  float wetbulb(float temperature, float pressure, float relative_humidity);
1160 
1167  vec wetbulb(const vec& temperature, const vec& pressure, const vec& relative_humidity);
1168 
1174  float wind_speed(float xwind, float ywind);
1175 
1181  vec wind_speed(const vec& xwind, const vec& ywind);
1182 
1189  float wind_direction(float xwind, float ywind);
1190 
1196  vec wind_direction(const vec& xwind, const vec& ywind);
1197 
1207  void set_omp_threads(int num);
1208 
1212  int get_omp_threads();
1213 
1215  void initialize_omp();
1216 
1221  // ivec regression(const vec& x, const vec& y);
1222 
1226  void set_debug_level(int level);
1227 
1228  static int _debug_level = 0;
1229 
1233  int get_debug_level();
1234 
1239  Statistic get_statistic(std::string name);
1240 
1244  std::string version();
1245 
1249  double clock();
1250 
1254  void debug(std::string string);
1255 
1259  void warning(std::string string);
1260 
1264  void error(std::string string);
1265 
1270  void future_deprecation_warning(std::string function, std::string other="");
1271 
1276  bool is_valid(float value);
1277 
1283  float calc_statistic(const vec& array, Statistic statistic);
1284 
1290  float calc_quantile(const vec& array, float quantile_level);
1291 
1297  vec calc_statistic(const vec2& array, Statistic statistic);
1298 
1304  vec calc_quantile(const vec2& array, float quantile=MV);
1305 
1311  vec2 calc_quantile(const vec3& array, const vec2& quantile_levels);
1312 
1321  bool convert_coordinates(const vec& lats, const vec& lons, CoordinateType type, vec& x_coords, vec& y_coords, vec& z_coords);
1322 
1331  bool convert_coordinates(float lat, float lon, CoordinateType type, float& x_coord, float& y_coord, float& z_coord);
1332 
1338  bool is_valid_lat(float lat, CoordinateType type);
1339 
1345  bool is_valid_lon(float lon, CoordinateType type);
1346 
1351  int num_missing_values(const vec2& iArray);
1352 
1358  int get_lower_index(float iX, const vec& iValues);
1359 
1365  int get_upper_index(float iX, const vec& iValues);
1366 
1378  float interpolate(float x, const vec& iX, const vec& iY);
1379 
1386  vec interpolate(const vec& x, const vec& iX, const vec& iY);
1387 
1394  ivec2 init_ivec2(int Y, int X, int value);
1395 
1402  vec2 init_vec2(int Y, int X, float value=MV);
1403 
1411  ivec3 init_ivec3(int Y, int X, int E, int value);
1412 
1420  vec3 init_vec3(int Y, int X, int E, float value=MV);
1421 
1429  vec calc_even_quantiles(const vec& values, int num);
1430 
1440  vec2 window(const vec2& array, int length, gridpp::Statistic statistic, bool before=false, bool keep_missing=false, bool missing_edges=true);
1441 
1447  bool compatible_size(const Grid& grid, const vec2& v);
1448 
1454  bool compatible_size(const Grid& grid, const vec3& v);
1455 
1461  bool compatible_size(const Points& points, const vec& v);
1462 
1468  bool compatible_size(const Points& points, const vec2& v);
1469 
1475  bool compatible_size(const vec2& a, const vec2& b);
1476 
1482  bool compatible_size(const vec2& a, const vec3& b);
1483 
1489  bool compatible_size(const vec3& a, const vec3& b);
1490 
1500  bool point_in_rectangle(const Point& A, const Point& B, const Point& C, const Point& D, const Point& m );
1501 
1507  float* test_array(float* v, int n);
1509  float test_vec_input(const vec& input);
1511  int test_ivec_input(const ivec& input);
1513  float test_vec2_input(const vec2& input);
1515  float test_vec3_input(const vec3& input);
1517  vec test_vec_output();
1518  ivec test_ivec_output();
1520  vec2 test_vec2_output();
1521  ivec2 test_ivec2_output();
1523  vec3 test_vec3_output();
1524  ivec3 test_ivec3_output();
1525 
1527  float test_vec_argout(vec& distances);
1529  float test_vec2_argout(vec2& distances);
1530 
1532 
1534  static const float swig_default_value = -1;
1535 
1539  class Point {
1540  public:
1548  Point(float lat, float lon, float elev=MV, float laf=MV, CoordinateType type=Geodetic);
1549 
1560  Point(float lat, float lon, float elev, float laf, CoordinateType type, float x, float y, float z);
1561  float lat;
1562  float lon;
1563  float elev;
1564  float laf;
1566  float x;
1567  float y;
1568  float z;
1569  };
1570 
1572  class KDTree {
1573  public:
1574  KDTree(vec lats, vec lons, CoordinateType type=Geodetic);
1575  KDTree& operator=(KDTree other);
1576  KDTree(const KDTree& other);
1578 
1583  int get_nearest_neighbour(float lat, float lon, bool include_match=true) const;
1584 
1590  ivec get_neighbours(float lat, float lon, float radius, bool include_match=true) const;
1591 
1598  ivec get_neighbours_with_distance(float lat, float lon, float radius, vec& distances, bool include_match=true) const;
1599 
1605  int get_num_neighbours(float lat, float lon, float radius, bool include_match=true) const;
1606 
1612  ivec get_closest_neighbours(float lat, float lon, int num, bool include_match=true) const;
1613 
1614  static float deg2rad(float deg);
1615  static float rad2deg(float deg);
1616 
1625  static float calc_distance(float lat1, float lon1, float lat2, float lon2, CoordinateType type=Geodetic);
1626 
1637  static float calc_straight_distance(float x0, float y0, float z0, float x1, float y1, float z1);
1638 
1644  static float calc_distance(const Point& p1, const Point& p2);
1645 
1652  static float calc_straight_distance(const Point& p1, const Point& p2);
1653 
1662  static float calc_distance_fast(float lat1, float lon1, float lat2, float lon2, CoordinateType type=Geodetic);
1663 
1664  vec get_lats() const;
1665  vec get_lons() const;
1666  int size() const;
1667  CoordinateType get_coordinate_type() const;
1668  const vec& get_x() const;
1669  const vec& get_y() const;
1670  const vec& get_z() const;
1671  protected:
1672  typedef boost::geometry::model::point<float, 3, boost::geometry::cs::cartesian> point;
1673  typedef std::pair<point, unsigned> value;
1674  typedef boost::geometry::model::box<point> box;
1675  boost::geometry::index::rtree< value, boost::geometry::index::quadratic<16> > mTree;
1676  vec mLats;
1677  vec mLons;
1678  vec mX;
1679  vec mY;
1680  vec mZ;
1682 
1683  struct within_radius {
1684  public:
1685  within_radius(point p, float radius, bool include_match);
1686  bool operator()(value const& v) const;
1687  private:
1688  float radius;
1689  point p;
1690  bool include_match;
1691  };
1692  struct is_not_equal {
1693  public:
1694  is_not_equal(point p);
1695  bool operator()(value const& v) const;
1696  private:
1697  point p;
1698  };
1699  };
1700 
1702  class Points {
1703  public:
1704  Points();
1712  Points(vec lats, vec lons, vec elevs=vec(), vec lafs=vec(), CoordinateType type=Geodetic);
1713  Points(KDTree tree, vec elevs=vec(), vec lafs=vec());
1714  Points& operator=(Points other);
1715  Points(const Points& other);
1716 
1717  /* Get the index of the nearest neighbour
1718  * @param lat Lookup latitude (or y-axis value)
1719  * @param lon Lookup longitude (or x-axis value)
1720  * @param include_match Return matching points. If false, don't use this point.
1721  * @returns Index of nearest neighbour (-1 if there are no neighbours).
1722  */
1723  int get_nearest_neighbour(float lat, float lon, bool include_match=true) const;
1724 
1725  /* Get the indices of all neighbours within a search radius
1726  * @param lat Lookup latitude (or y-axis value)
1727  * @param lon Lookup longitude (or x-axis value)
1728  * @param radius Neighbourhood radius [m]
1729  * @param include_match Return matching points. If false, don't use this point.
1730  * @returns 1D vector of indices of neighbours within radius
1731  */
1732  ivec get_neighbours(float lat, float lon, float radius, bool include_match=true) const;
1733 
1734  /* Get the indices and distances to all neighbours within a search radius
1735  * @param lat Lookup latitude (or y-axis value)
1736  * @param lon Lookup longitude (or x-axis value)
1737  * @param radius Neighbourhood radius [m]
1738  * @param distances 1D output vector of distances to each point [m]
1739  * @param include_match Return matching points. If false, don't use this point.
1740  * @returns 1D vector of indices of neighbours within radius
1741  */
1742  ivec get_neighbours_with_distance(float lat, float lon, float radius, vec& distances, bool include_match=true) const;
1743 
1744  /* Get the number of neighbouring points within a search radius
1745  * @param lat Lookup latitude (or y-axis value)
1746  * @param lon Lookup longitude (or x-axis value)
1747  * @param radius Neighbourhood radius [m]
1748  * @param include_match Return matching points. If false, don't use this point.
1749  * @returns the number of neighbours within radius
1750  */
1751  int get_num_neighbours(float lat, float lon, float radius, bool include_match=true) const;
1752 
1753  /* Get the N nearest neighbouring points
1754  * @param lat Lookup latitude (or y-axis value)
1755  * @param lon Lookup longitude (or x-axis value)
1756  * @param num Number of nearest neighbours
1757  * @param include_match Return matching points. If false, don't use this point.
1758  * @returns 1D vector of indices of neighbours
1759  */
1760  ivec get_closest_neighbours(float lat, float lon, int num, bool include_match=true) const;
1761 
1762  vec get_lats() const;
1763  vec get_lons() const;
1764  vec get_elevs() const;
1765  vec get_lafs() const;
1766 
1767  int size() const;
1768 
1773  ivec get_in_domain_indices(const Grid& grid) const;
1774 
1779  Points get_in_domain(const Grid& grid) const;
1780  CoordinateType get_coordinate_type() const;
1781  Point get_point(int index) const;
1782 
1787  Points subset(const ivec& indices) const;
1788  private:
1789  KDTree mTree;
1790  vec mLats;
1791  vec mLons;
1792  vec mElevs;
1793  vec mLafs;
1794  };
1795 
1797  class Grid {
1798  public:
1799  Grid();
1800 
1808  Grid(vec2 lats, vec2 lons, vec2 elevs=vec2(), vec2 lafs=vec2(), CoordinateType type=Geodetic);
1809 
1810  /* Get the index of the nearest neighbour
1811  * @param lat Lookup latitude (or y-axis value)
1812  * @param lon Lookup longitude (or x-axis value)
1813  * @param include_match Return matching points. If false, don't use this point.
1814  * @returns 1D vector of (x, y) index (empty vector if no neighbours)
1815  */
1816  ivec get_nearest_neighbour(float lat, float lon, bool include_match=true) const;
1817 
1818  /* Get the indices of all neighbours within a search radius
1819  * @param lat Lookup latitude (or y-axis value)
1820  * @param lon Lookup longitude (or x-axis value)
1821  * @param radius Neighbourhood radius [m]
1822  * @param include_match Return matching points. If false, don't use this point.
1823  * @returns 2D vector (Point, 2) of x,y-indices of neighbours within radius
1824  */
1825  ivec2 get_neighbours(float lat, float lon, float radius, bool include_match=true) const;
1826 
1827  /* Get the indices and distances to all neighbours within a search radius
1828  * @param lat Lookup latitude (or y-axis value)
1829  * @param lon Lookup longitude (or x-axis value)
1830  * @param radius Neighbourhood radius [m]
1831  * @param distances 1D output vector of distances to each point [m]
1832  * @param include_match Return matching points. If false, don't use this point.
1833  * @returns 2D vector (Point, 2) of x,y-indices of neighbours within radius
1834  */
1835  ivec2 get_neighbours_with_distance(float lat, float lon, float radius, vec& distances, bool include_match=true) const;
1836 
1837  /* Get the number of neighbouring points within a search radius
1838  * @param lat Lookup latitude (or y-axis value)
1839  * @param lon Lookup longitude (or x-axis value)
1840  * @param radius Neighbourhood radius [m]
1841  * @param include_match Return matching points. If false, don't use this point.
1842  * @returns the number of neighbours within radius
1843  */
1844  int get_num_neighbours(float lat, float lon, float radius, bool include_match=true) const;
1845 
1846  /* Get the N nearest neighbouring points
1847  * @param lat Lookup latitude (or y-axis value)
1848  * @param lon Lookup longitude (or x-axis value)
1849  * @param num Number of nearest neighbours
1850  * @param include_match Return matching points. If false, don't use this point.
1851  * @returns 2D vector (Point, 2) of x,y-indices of neighbours
1852  */
1853  ivec2 get_closest_neighbours(float lat, float lon, int num, bool include_match=true) const;
1854 
1855  /* Get the N nearest neighbouring points
1856  * @param lat Lookup latitude (or y-axis value)
1857  * @param lon Lookup longitude (or x-axis value)
1858  * @param Y1_out Number of nearest neighbours
1859  * @param include_match Return matching points. If false, don't use this point.
1860  * @returns 2D vector (Point, 2) of x,y-indices of neighbours
1861  */
1862  bool get_box(float lat, float lon, int& Y1_out, int& X1_out, int& Y2_out, int& X2_out) const;
1863 
1867  Points to_points() const;
1868 
1869  vec2 get_lats() const;
1870  vec2 get_lons() const;
1871  vec2 get_elevs() const;
1872  vec2 get_lafs() const;
1873  ivec size() const;
1874  CoordinateType get_coordinate_type() const;
1875  Point get_point(int y_index, int x_index) const;
1876  private:
1877  KDTree mTree;
1878  int mX;
1879  vec2 get_2d(vec input) const;
1880  ivec get_indices(int index) const;
1881  ivec2 get_indices(ivec indices) const;
1882  vec2 mLats;
1883  vec2 mLons;
1884  vec2 mElevs;
1885  vec2 mLafs;
1886  };
1887  class not_implemented_exception: public std::logic_error
1888  {
1889  public:
1890  not_implemented_exception() : std::logic_error("Function not yet implemented") { };
1891  };
1892 
1895  public:
1896  StructureFunction(float localization_distance=0);
1902  virtual float corr(const Point& p1, const Point& p2) const = 0;
1903 
1909  virtual float corr_background(const Point& p1, const Point& p2) const;
1910 
1914  virtual float localization_distance(const Point& p) const;
1915  virtual StructureFunction* clone() const = 0;
1916  static const float default_min_rho;
1917  protected:
1923  float barnes_rho(float dist, float length) const;
1924 
1930  float cressman_rho(float dist, float length) const;
1932  };
1934  public:
1940  MultipleStructure(const StructureFunction& structure_h, const StructureFunction& structure_v, const StructureFunction& structure_w);
1941  float corr(const Point& p1, const Point& p2) const;
1942  StructureFunction* clone() const;
1943  float localization_distance(const Point& p) const;
1944  private:
1945  StructureFunction* m_structure_h;
1946  StructureFunction* m_structure_v;
1947  StructureFunction* m_structure_w;
1948  };
1951  public:
1958  BarnesStructure(float h, float v=0, float w=0, float hmax=MV);
1959 
1967  BarnesStructure(Grid grid, vec2 h, vec2 v, vec2 w, float min_rho=StructureFunction::default_min_rho);
1968  float corr(const Point& p1, const Point& p2) const;
1969  StructureFunction* clone() const;
1970  float localization_distance(const Point& p) const;
1971  private:
1972  Grid m_grid;
1973  vec2 mH;
1974  vec2 mV;
1975  vec2 mW;
1976  float m_min_rho;
1977  bool m_is_spatial;
1978  };
1979 
1982  public:
1983  CressmanStructure(float h, float v=0, float w=0);
1984  float corr(const Point& p1, const Point& p2) const;
1985  StructureFunction* clone() const;
1986  private:
1987  float mH;
1988  float mV;
1989  float mW;
1990  };
1991 
1993  public:
1997  CrossValidation(StructureFunction& structure, float dist=MV);
1998  float corr(const Point& p1, const Point& p2) const;
1999  float corr_background(const Point& p1, const Point& p2) const;
2000  StructureFunction* clone() const;
2001  float localization_distance(const Point& p) const;
2002  private:
2003  StructureFunction* m_structure;
2004  float m_dist;
2005  };
2006 
2007  class Transform {
2008  public:
2009  // Note these cannot be pure virtual, otherwise SWIG does not expose
2010  // the vector functions (with the same name) in python. Therefore, make sure these
2011  // functions are overloaded in the subclass implementation
2012  virtual float forward(float value) const;
2013  virtual float backward(float value) const;
2014 
2019  vec forward(const vec& input) const;
2020 
2025  vec backward(const vec& input) const;
2026 
2031  vec2 forward(const vec2& input) const;
2032 
2037  vec2 backward(const vec2& input) const;
2038 
2043  vec3 forward(const vec3& input) const;
2044 
2049  vec3 backward(const vec3& input) const;
2050  };
2052  class Identity : public Transform {
2053  public:
2054  // SWIG requires these "using" statements to enable the vectorized versions in the
2055  // subclasses
2056  using Transform::forward;
2057  using Transform::backward;
2058  float forward(float value) const;
2059  float backward(float value) const;
2060  };
2062  class Log : public Transform {
2063  public:
2064  using Transform::forward;
2065  using Transform::backward;
2066  float forward(float value) const;
2067  float backward(float value) const;
2068  };
2070  class BoxCox : public Transform {
2071  public:
2075  BoxCox(float threshold);
2076  using Transform::forward;
2077  using Transform::backward;
2078  float forward(float value) const;
2079  float backward(float value) const;
2080  private:
2081  float mThreshold;
2082  };
2085  class Gamma : public Transform {
2086  public:
2093  Gamma(float shape, float scale, float tolerance=0.01);
2094  using Transform::forward;
2095  using Transform::backward;
2096  float forward(float value) const;
2097  float backward(float value) const;
2098  private:
2099  float m_tolerance;
2100  boost::math::gamma_distribution<> m_gamma_dist;
2101  boost::math::normal m_norm_dist;
2102  };
2103 };
2104 #endif
ComparisonOperator
Types of comparison operators.
Definition: gridpp.h:138
Definition: gridpp.h:1887
float test_vec2_input(const vec2 &input)
Testing function for 2D input vector.
Definition: swig.cpp:25
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
std::string version()
The gridpp version.
Definition: gridpp.cpp:8
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
Definition: gridpp.h:1683
Bias.
Definition: gridpp.h:108
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
float m_localization_distance
Definition: gridpp.h:1931
float laf
Definition: gridpp.h:1564
Greater or equal than, >=.
Definition: gridpp.h:142
static const float MV_CML
Missing value indicator in gridpp command-line tool.
Definition: gridpp.h:51
Helper class for Grid and Points representing a tree of points.
Definition: gridpp.h:1572
void test_not_implemented_exception()
Definition: swig.cpp:98
vec2 bilinear(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues)
Bilinear downscaling grid to grid for a deterministic field.
Definition: bilinear.cpp:27
static const float standard_surface_temperature
Temperature at surface in standard atmosphere [K].
Definition: gridpp.h:59
Minimum of values.
Definition: gridpp.h:90
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
Maximum of values.
Definition: gridpp.h:92
Randomly pick a non-nan value.
Definition: gridpp.h:98
float wind_speed(float xwind, float ywind)
Diagnose wind speed from its components.
Definition: wind.cpp:6
Identity transform, i.e.
Definition: gridpp.h:2052
CorrectionType
Method for statistical correction.
Definition: gridpp.h:113
std::vector< int > ivec
1D integer vector
Definition: gridpp.h:31
ivec2 test_ivec2_output()
Definition: swig.cpp:69
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.1002/qj.3646)
Definition: oi_ensi.cpp:33
ivec test_ivec_output()
Definition: swig.cpp:65
vec2 test_vec2_output()
Testing function for 2D output vector.
Definition: swig.cpp:49
Unknown statistic.
Definition: gridpp.h:99
bool is_valid_lat(float lat, CoordinateType type)
Checks that a lat-coordinate is valid (based on the coordinate type)
Definition: util.cpp:588
Metric
Binary verification metrics.
Definition: gridpp.h:103
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
Simple structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:1950
virtual float forward(float value) const
Definition: transform.cpp:6
GradientType
Types of methods to calculate the gradient.
Definition: gridpp.h:126
Definition: gridpp.h:1992
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
float z
Definition: gridpp.h:1568
vec distance(const Grid &grid, const Points &points, int num=1)
For each point, calculates the distance to nearest gridpoint.
Definition: distance.cpp:6
double clock()
The current time.
Definition: util.cpp:256
static const float gas_constant_mol
Universal Gas Constant [kg*m^2*s^-2/(K*mol)].
Definition: gridpp.h:65
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
Extrapolation
Methods for extrapolating outside a curve.
Definition: gridpp.h:79
float test_vec_argout(vec &distances)
Testing function for 1D vector treated as output.
Definition: swig.cpp:86
void set_debug_level(int level)
Set the verbosity of debug messages.
Definition: gridpp.cpp:70
float y
Definition: gridpp.h:1567
CoordinateType type
Definition: gridpp.h:1565
not_implemented_exception()
Definition: gridpp.h:1890
bool is_valid_lon(float lon, CoordinateType type)
Checks that a lon-coordinate is valid (based on the coordinate type)
Definition: util.cpp:593
static const float gas_constant_si
Universal Gas Constant [J/(kg*K)].
Definition: gridpp.h:67
Proportion correct.
Definition: gridpp.h:107
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
Population variance of values.
Definition: gridpp.h:95
Point(float lat, float lon, float elev=MV, float laf=MV, CoordinateType type=Geodetic)
Constructor.
Definition: point.cpp:5
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
void set_omp_threads(int num)
Set the number of OpenMP threads to use.
Definition: gridpp.cpp:57
float relative_humidity(float temperature, float dewpoint)
Calculate relative humidity from temperature and dewpoint temperature.
Definition: humidity.cpp:33
ivec3 test_ivec3_output()
Definition: swig.cpp:76
Statistic get_statistic(std::string name)
Convert name of a statistic enums.
Definition: gridpp.cpp:11
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:313
vec2 neighbourhood_quantile(const vec2 &input, float quantile, int halfwidth)
Computes a quantile in a sliding square neighbourhood.
Definition: neighbourhood.cpp:534
boost::geometry::model::point< float, 3, boost::geometry::cs::cartesian > point
Definition: gridpp.h:1672
Threat score.
Definition: gridpp.h:105
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
Represents a vector of locations and their metadata.
Definition: gridpp.h:1702
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
vec2 neighbourhood_quantile_fast(const vec2 &input, float quantile, int halfwidth, const vec &thresholds)
Fast and approximate neighbourhood quantile.
Definition: neighbourhood.cpp:296
std::pair< point, unsigned > value
Definition: gridpp.h:1673
std::vector< ivec2 > ivec3
3D integer vector
Definition: gridpp.h:35
static const float molar_mass
Molar Mass of Dry Air [kg/mol].
Definition: gridpp.h:63
Definition: gridpp.h:2007
Keep values the way they were.
Definition: gridpp.h:84
Greater than, >
Definition: gridpp.h:141
Definition: gridpp.h:1692
vec2 neighbourhood_brute_force(const vec2 &input, int halfwidth, Statistic statistic)
Spatial neighbourhood filter without any shortcuts.
Definition: neighbourhood.cpp:528
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:467
std::vector< vec > vec2
2D float vector
Definition: gridpp.h:27
Latitude and longitude.
Definition: gridpp.h:121
Represents a 2D grid of locations and their metadata.
Definition: gridpp.h:1797
static int _debug_level
Definition: gridpp.h:1228
Simple structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:1981
vec2 neighbourhood(const vec2 &input, int halfwidth, Statistic statistic)
Spatial neighbourhood filter, computing a statistic for a sliding square window.
Definition: neighbourhood.cpp:28
Covariance structure function.
Definition: gridpp.h:1894
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:554
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:332
Heidke skill score.
Definition: gridpp.h:109
Continue past the end-points using the mean slope of the curve.
Definition: gridpp.h:81
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
void debug(std::string string)
Writes a debug message to standard out.
Definition: util.cpp:227
void initialize_omp()
Sets the number of OpenMP threads to 1 if OMP_NUM_THREADS undefined.
Definition: gridpp.cpp:45
static const float swig_default_value
Default value used to fill array in SWIG testing functions.
Definition: gridpp.h:1534
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
Lower than, <.
Definition: gridpp.h:139
Continue past the end-points using the slope of the two lowermost or uppermost points in the curve...
Definition: gridpp.h:82
boost::geometry::model::box< point > box
Definition: gridpp.h:1674
vec mX
Definition: gridpp.h:1678
float test_vec2_argout(vec2 &distances)
Testing function for 2D vector treated as output.
Definition: swig.cpp:91
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:53
float test_vec_input(const vec &input)
Testing function for 1D input vector.
Definition: swig.cpp:12
CoordinateType
Types of coordinates for position of points.
Definition: gridpp.h:120
vec test_vec_output()
Testing function for 1D output vector.
Definition: swig.cpp:45
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
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:458
vec mLats
Definition: gridpp.h:1676
Definition: gridpp.h:1933
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:542
float wetbulb(float temperature, float pressure, float relative_humidity)
Calculate wetbulb temperature from temperature, pressure, and relative humidity.
Definition: humidity.cpp:91
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
std::vector< double > dvec
1D double vector
Definition: gridpp.h:39
int num_missing_values(const vec2 &iArray)
Count the number of missing values in a vector.
Definition: util.cpp:218
float lon
Definition: gridpp.h:1562
std::vector< dvec > dvec2
2D double vector
Definition: gridpp.h:41
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
Mean of values.
Definition: gridpp.h:91
Statistic
Statistical operations to reduce a vector to a scalar.
Definition: gridpp.h:88
int test_ivec_input(const ivec &input)
Testing function for 1D input vector.
Definition: swig.cpp:18
vec mLons
Definition: gridpp.h:1677
bool is_valid(float value)
Checks if a value is valid.
Definition: util.cpp:20
CoordinateType mType
Definition: gridpp.h:1681
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
Definition: gridpp.h:19
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:446
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:263
vec2 neighbourhood_ens(const vec3 &input, int halfwidth, Statistic statistic)
Deprecated: Compute neighbourhood statistic on ensemble field.
Definition: neighbourhood.cpp:541
A quantile from values.
Definition: gridpp.h:93
float elev
Definition: gridpp.h:1563
float x
Definition: gridpp.h:1566
static const float pi
Mathematical constant pi.
Definition: gridpp.h:53
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
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
static const float default_min_rho
Definition: gridpp.h:1916
virtual float backward(float value) const
Definition: transform.cpp:9
Nearest neighour downscaler.
Definition: gridpp.h:133
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:351
Multiplicative.
Definition: gridpp.h:115
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:452
float qnh(float pressure, float altitude)
Diagnose QNH from pressure and altitude.
Definition: qnh.cpp:6
Standard deviation of values.
Definition: gridpp.h:94
Definition: gridpp.h:127
static const float MV
Missing value indicator.
Definition: gridpp.h:49
Definition: gridpp.h:128
Downscaler
Types of simple downscaling methods.
Definition: gridpp.h:132
vec get_neighbourhood_thresholds(const vec2 &input, int num_thresholds)
Calculate appropriate approximation thresholds for fast neighbourhood quantile.
Definition: neighbourhood.cpp:243
float calc_quantile(const vec &array, float quantile_level)
Compute a quantile from a 1D vector.
Definition: util.cpp:115
float pressure(float ielev, float oelev, float ipressure, float itemperature=288.15)
Calculate pressure at a new elevation.
Definition: pressure.cpp:5
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
float wind_direction(float xwind, float ywind)
Diagnose wind direction from its components.
Definition: wind.cpp:20
X and Y.
Definition: gridpp.h:122
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:129
vec gamma_inv(const vec &levels, const vec &shape, const vec &scale)
Extract quantiles from a gamma distribution.
Definition: distribution.cpp:5
vec3 test_vec3_output()
Testing function for 3D output vector.
Definition: swig.cpp:55
float calc_statistic(const vec &array, Statistic statistic)
Compute a statistic on a 1D vector.
Definition: util.cpp:23
float test_vec3_input(const vec3 &input)
Testing function for 3D input vector.
Definition: swig.cpp:34
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:326
void future_deprecation_warning(std::string function, std::string other="")
Writes an deprecation warning to standard out.
Definition: util.cpp:248
boost::geometry::index::rtree< value, boost::geometry::index::quadratic< 16 > > mTree
Definition: gridpp.h:1675
vec2 neighbourhood_quantile_ens(const vec3 &input, float quantile, int halfwidth)
Deprecated: Compute neighbourhood quantiles on ensemble field.
Definition: neighbourhood.cpp:545
Represents a single point in some coordinate system.
Definition: gridpp.h:1539
Mean of values.
Definition: gridpp.h:89
void warning(std::string string)
Writes a warning message to standard out.
Definition: util.cpp:231
int get_omp_threads()
Get the number of OpenMP threads currently set.
Definition: gridpp.cpp:63
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
Lower or equal than, <=.
Definition: gridpp.h:140
Additive.
Definition: gridpp.h:116
vec2 fill_missing(const vec2 &values)
Fill in missing values based on nearby values.
Definition: fill.cpp:43
static const float lapse_rate
Constant Lapse Rate moist air standard atmosphere [K/m].
Definition: gridpp.h:57
vec mZ
Definition: gridpp.h:1680
static const float gravit
Gravitational acceleration [m/s^2].
Definition: gridpp.h:61
float * test_array(float *v, int n)
Special function whose presense is needed for SWIG.
Definition: swig.cpp:6
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
vec2 downscaling(const Grid &igrid, const Grid &ogrid, const vec2 &ivalues, Downscaler downscaler)
Downscale a gridded field.
Definition: downscaling.cpp:21
Continue past the end-points using a slope of 0.
Definition: gridpp.h:83
Continue past the end-points using a slope of 1.
Definition: gridpp.h:80
Bilinear downscaler.
Definition: gridpp.h:134
std::vector< float > vec
1D float vector
Definition: gridpp.h:25
int get_debug_level()
Get the currently set level of debug messagess.
Definition: gridpp.cpp:74
bool compatible_size(const Grid &grid, const vec2 &v)
Check if the grid is the same size as the 2D vector.
Definition: util.cpp:398
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
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
Hannsen-Kuiper skill score.
Definition: gridpp.h:106
Count of values.
Definition: gridpp.h:97
float lat
Definition: gridpp.h:1561
Equitable threat score.
Definition: gridpp.h:104
Sum of values.
Definition: gridpp.h:96
static const double radius_earth
Radius of the earth [m].
Definition: gridpp.h:55
Log transformation: output = log(input)
Definition: gridpp.h:2062
vec mY
Definition: gridpp.h:1679
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
Box-Cox transformation.
Definition: gridpp.h:2070
Gamma transformation.
Definition: gridpp.h:2085
void error(std::string string)
Writes an error message to standard out.
Definition: util.cpp:235
Quantile mapping.
Definition: gridpp.h:114
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
KDTree(CoordinateType type=Geodetic)
Definition: gridpp.h:1577
std::vector< ivec > ivec2
2D integer vector
Definition: gridpp.h:33
std::vector< vec2 > vec3
3D float vector
Definition: gridpp.h:29