Simpact Cyan
Population based event driven simulation using mNRM
binormaldistribution.h
1 #ifndef BINORMALDISTRIBUTION_H
2 
3 #define BINORMALDISTRIBUTION_H
4 
6 #include <limits>
7 
8 // Uses rejection sampling
9 class BinormalDistribution : public ProbabilityDistribution2D
10 {
11 public:
12  BinormalDistribution(double mu, double sigma, double rho,
13  GslRandomNumberGenerator *pRndGen,
14  double minVal = -std::numeric_limits<double>::infinity(),
15  double maxVal = std::numeric_limits<double>::infinity());
16  BinormalDistribution(double muX, double muY, double sigmaX, double sigmaY, double rho,
17  GslRandomNumberGenerator *pRndGen,
18  double minValX = -std::numeric_limits<double>::infinity(),
19  double maxValX = std::numeric_limits<double>::infinity(),
20  double minValY = -std::numeric_limits<double>::infinity(),
21  double maxValY = std::numeric_limits<double>::infinity());
22  ~BinormalDistribution();
23 
24  Point2D pickPoint() const;
25  double pickMarginalX() const;
26  double pickMarginalY() const;
27  double pickConditionalOnX(double x) const;
28  double pickConditionalOnY(double y) const;
29 
30  bool isSymmetric() const { return m_isSymm; }
31  double getMeanX() const { return m_muX; }
32  double getMeanY() const { return m_muY; }
33  double getSigmaX() const { return m_sigmaX; }
34  double getSigmaY() const { return m_sigmaY; }
35  double getMinX() const { return m_minX; }
36  double getMaxX() const { return m_maxX; }
37  double getMinY() const { return m_minY; }
38  double getMaxY() const { return m_maxY; }
39  double getRho() const { return m_rho; }
40 private:
41  double pickClippedGaussian(double mean, double sigma, double minVal, double maxVal) const;
42  double pickConditional(double val, double meanDest, double meanCond, double sigmaDest, double sigmaCond, double minVal, double maxVal) const;
43 
44  bool m_isSymm;
45  double m_muX, m_sigmaX;
46  double m_minX, m_maxX;
47  double m_muY, m_sigmaY;
48  double m_minY, m_maxY;
49  double m_rho;
50 };
51 
52 #endif // BINORMALDISTRIBUTION_H
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