Probability.h
Go to the documentation of this file.
1 #ifndef _utl_Probability_h_
2 #define _utl_Probability_h_
3 
14 #include <utl/Vector.h>
15 #include <utl/Singleton.h>
16 
17 #include <TRandom3.h>
18 #include <TVector3.h>
19 
20 
21 namespace utl {
22 
32  class Probability : public Singleton<Probability> {
33 
34  public:
35  // optionally set seed of random generator, by default the seed is chosen
36  // randomly, so use this option only if you want a reproducible result
37  void SetSeed(const unsigned int seed);
38 
40  static double GetRayleighPDF(const double x, const double sigma);
41 
43  static double GetRayleighCDF(const double x, const double sigma);
44 
45  // evaluates the normal pdf with mu and sigma at position x
46  static double GetNormalPDF(const double x, const double mu, const double sigma);
47 
48  /* Evaluates the von Mises pdf with kappa at position x
49  * κ is a measure of concentration (a reciprocal measure of dispersion, so 1/κ is analogous to σ^2).
50  * If κ is zero, the distribution is uniform, and for small κ, it is close to uniform.
51  * If κ is large, the distribution becomes very concentrated about the angle μ
52  * with κ being a measure of the concentration. In fact, as κ increases,
53  * the distribution approaches a normal distribution in x with mean μ and variance 1/κ.
54  */
55  static long double GetVonMisesPDF(const double x, const double mu, const double kappa);
56 
57  // evaluates the Fisher pdf with kappa at position x
58  static double GetFisherPDF(const double x, const double kappa);
59 
60  // evaluates the Fisher CDF with kappa at position x
61  static double GetFisherCDF(const double x, const double kappa);
62 
64  double GetRandomRayleigh(const double sigma);
65 
67  double GetRandomFisher(const double k);
68 
71  utl::Vector GetRandomFisher(const utl::Vector& meanDirection, const double k);
72 
74  utl::Vector GetFisher(const utl::Vector& meanDirection, const double alpha);
75 
76  private:
77  Probability();
78 
79  TVector3 GetRandomVectorOnSphere();
80 
81  TRandom3 fRand;
82 
83  friend class Singleton<Probability>;
84 
85  };
86 
87 }
88 
89 
90 #endif
TRandom3 fRand
Definition: Probability.h:81
double GetRandomFisher(const double k)
returns a Fisher distributed random variable
Definition: Probability.cc:89
static double GetRayleighCDF(const double x, const double sigma)
evaluates the Rayleigh CDF of sigma at position x
Definition: Probability.cc:41
static double GetNormalPDF(const double x, const double mu, const double sigma)
Definition: Probability.cc:50
utl::Vector GetFisher(const utl::Vector &meanDirection, const double alpha)
returns a random vector that has an angle alpha wrt the given vector
Definition: Probability.cc:104
TVector3 GetRandomVectorOnSphere()
Definition: Probability.cc:122
static double GetFisherPDF(const double x, const double kappa)
Definition: Probability.cc:67
Utility class to provide often used probability distributions in radio reconstruction. In addition this singleton class can return random variables. Currently only Fisher is implemented.
Definition: Probability.h:32
double GetRandomRayleigh(const double sigma)
returns a Rayleigh distributed random variable
Definition: Probability.cc:82
Vector object.
Definition: Vector.h:30
static double GetFisherCDF(const double x, const double kappa)
Definition: Probability.cc:74
static double GetRayleighPDF(const double x, const double sigma)
evaluates the Rayleigh PDF of sigma at position x
Definition: Probability.cc:31
void SetSeed(const unsigned int seed)
Definition: Probability.cc:23
static long double GetVonMisesPDF(const double x, const double mu, const double kappa)
Definition: Probability.cc:58
Curiously Recurring Template Pattern (CRTP) for Meyers singleton.
Definition: Singleton.h:36

, generated on Tue Sep 26 2023.