Simpact Cyan
Population based event driven simulation using mNRM
discretedistributionwrapper2d.h
1 #ifndef DISCRETEDISTRIBUTIONWRAPPER2D_H
2 
3 #define DISCRETEDISTRIBUTIONWRAPPER2D_H
4 
6 #include "discretedistribution2d.h"
7 #include "booltype.h"
8 #include <string>
9 #include <limits>
10 
11 class DiscreteDistributionWrapper2D : public ProbabilityDistribution2D
12 {
13 public:
14  DiscreteDistributionWrapper2D(GslRandomNumberGenerator *pRng);
15  ~DiscreteDistributionWrapper2D();
16 
17  bool_t init(const std::string &densFile, const std::string &maskFile, double xOffset, double yOffset,
18  double width, double height, bool flipY, bool floor);
19 
20  Point2D pickPoint() const;
21  double pickMarginalX() const;
22  double pickMarginalY() const;
23  double pickConditionalOnX(double x) const;
24  double pickConditionalOnY(double y) const;
25 
26  std::string getDensFileName() const { return m_densFileName; }
27  std::string getMaskFileName() const { return m_maskFileName; }
28  double getXOffset() const { return m_xOffset; }
29  double getYOffset() const { return m_yOffset; }
30  double getWidth() const { return m_xSize; }
31  double getHeight() const { return m_ySize; }
32  bool isYFlipped() const { return m_flipY; }
33  bool isFloored() const { return m_floor; }
34 private:
35  static bool_t allocateGridFunction(const std::string &fileName, GridValues **pGf);
36 
37  DiscreteDistribution2D *m_pDist;
38  std::string m_densFileName, m_maskFileName;
39  double m_xOffset, m_yOffset;
40  double m_xSize, m_ySize;
41  bool m_flipY, m_floor;
42 };
43 
44 inline Point2D DiscreteDistributionWrapper2D::pickPoint() const
45 {
46  if (!m_pDist)
47  return Point2D(std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN());
48  return m_pDist->pickPoint();
49 }
50 
51 inline double DiscreteDistributionWrapper2D::pickMarginalX() const
52 {
53  if (!m_pDist)
54  return std::numeric_limits<double>::quiet_NaN();
55  return m_pDist->pickMarginalX();
56 }
57 
58 inline double DiscreteDistributionWrapper2D::pickMarginalY() const
59 {
60  if (!m_pDist)
61  return std::numeric_limits<double>::quiet_NaN();
62  return m_pDist->pickMarginalY();
63 }
64 
65 inline double DiscreteDistributionWrapper2D::pickConditionalOnX(double x) const
66 {
67  if (!m_pDist)
68  return std::numeric_limits<double>::quiet_NaN();
69  return m_pDist->pickConditionalOnX(x);
70 }
71 
72 inline double DiscreteDistributionWrapper2D::pickConditionalOnY(double y) const
73 {
74  if (!m_pDist)
75  return std::numeric_limits<double>::quiet_NaN();
76  return m_pDist->pickConditionalOnY(y);
77 }
78 
79 #endif // DISCRETEDISTRIBUTIONWRAPPER2D_H
Type to return true/false with error description.
Definition: booltype.h:25
virtual Point2D pickPoint() const =0
Pick a point according to a specific distrubution, specified in a subclass of ProbabilityDistribution...
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