Simpact Cyan
Population based event driven simulation using mNRM
discretedistribution2d.h
1 #ifndef DISCRETEDISTRIBUTION2D_H
2 
3 #define DISCRETEDISTRIBUTION2D_H
4 
6 #include "discretedistribution.h"
7 #include "discretedistributionfast.h"
8 #include "polygon2d.h"
9 #include <vector>
10 
11 class TIFFDensityFile;
12 
13 //#define OLDTEST
14 
15 class DiscreteDistribution2D : public ProbabilityDistribution2D
16 {
17 public:
18  DiscreteDistribution2D(double xOffset, double yOffset, double xSize, double ySize,
19  const TIFFDensityFile &density, GslRandomNumberGenerator *pRngGen,
20  const Polygon2D &filter = Polygon2D()
21  );
22  ~DiscreteDistribution2D();
23 
24  Point2D pickPoint() const;
25 
26  double pickMarginalX() const;
27  double pickMarginalY() const;
28  double pickConditionalOnX(double x) const;
29  double pickConditionalOnY(double y) const;
30 
31  double getXOffset() const { return m_xOffset; }
32  double getYOffset() const { return m_yOffset; }
33  double getXSize() const { return m_xSize; }
34  double getYSize() const { return m_ySize; }
35 
36  bool isYFlipped() const { return m_flippedY; }
37 private:
38  static void generateConditionalsAndMarginal(double xOffset, double yOffset, double xSize, double ySize,
39  const TIFFDensityFile &density, GslRandomNumberGenerator *pRngGen,
40  const Polygon2D &filter, bool transpose,
41 #ifdef OLDTEST
42  std::vector<DiscreteDistribution *> &conditionals,
43  DiscreteDistribution **ppMarginal
44 #else
45  std::vector<DiscreteDistributionFast *> &conditionals,
46  DiscreteDistributionFast **ppMarginal
47 #endif
48  );
49 #ifdef OLDTEST
50  DiscreteDistribution *m_pMarginalXDist;
51  DiscreteDistribution *m_pMarginalYDist;
52  std::vector<DiscreteDistribution *> m_conditionalXDists;
53  std::vector<DiscreteDistribution *> m_conditionalYDists;
54 #else
55  DiscreteDistributionFast *m_pMarginalXDist;
56  DiscreteDistributionFast *m_pMarginalYDist;
57  std::vector<DiscreteDistributionFast *> m_conditionalXDists;
58  std::vector<DiscreteDistributionFast *> m_conditionalYDists;
59 #endif
60  double m_xOffset, m_yOffset;
61  double m_xSize, m_ySize;
62  int m_width, m_height; // discrete size (pixels)
63  bool m_flippedY;
64 };
65 
66 #endif // DISCRETEDISTRIBUTION2D_H
virtual Point2D pickPoint() const =0
Pick a point according to a specific distrubution, specified in a subclass of ProbabilityDistribution...
Helper class to generate random numbers based on some kind of discrete distribution.
Definition: discretedistribution.h:20
This class allows you to generate random numbers, and uses the GNU Scientific Library for this...
Definition: gslrandomnumbergenerator.h:16
Abstract base class for 2D probability distribution implementations so that they can be used intercha...
Definition: probabilitydistribution2d.h:17
This class can be used to represent a polygon.
Definition: polygon2d.h:10