TUnuranDiscrDist class for one dimensional discrete distribution.
It is used by TUnuran to generate integer random numbers according to this distribution via TUnuran::SampleDiscr().
The class can be constructed from a one-dimensional function (TF1 pointer) representing the discrete distribution (probability mesh function) (for example a TF1("f","TMath::PoissonI(x,[0])") ) or from a vector of probability, used by passing an iterator specifying the begin and the end of the vector. In the latter case the domain of the distribution will be defined by the vector, while in the first case is by default (0,+inf). a Method to set the domain of the distribution ( SetDomain ) is provided and it defines the range of the generated random numbers.
The derivatives of the pdf which are used by some UNURAN methods are estimated numerically in the Derivative() method. Some extra information (like distribution mode, cdf function, probability sum, etc..) can be set as well otherwise will be estimated internally if required.
Definition at line 51 of file TUnuranDiscrDist.h.
Public Member Functions | |
TUnuranDiscrDist (const ROOT::Math::IGenFunction &func, bool copyFunc=false) | |
Constructor from a generic function object specifying the pdf. | |
TUnuranDiscrDist (const TUnuranDiscrDist &) | |
Copy constructor. | |
template<class Iterator > | |
TUnuranDiscrDist (Iterator *begin, Iterator *end) | |
Constructor from a vector of probability. | |
TUnuranDiscrDist (TF1 *func) | |
Constructor from a TF1 objects specifying the pdf. | |
~TUnuranDiscrDist () override | |
Destructor. | |
double | Cdf (int x) const |
evaluate the integral (cdf) on the given domain | |
TUnuranDiscrDist * | Clone () const override |
Clone (required by base class) | |
bool | GetDomain (int &xmin, int &xmax) const |
check if distribution has domain and return in case its domain | |
bool | HasCdf () const |
flag to control if distribution provides also a Cdf | |
bool | HasMode () const |
flag to control if distribution provides the mode | |
bool | HasProbSum () const |
flag to control if distribution provides the total area of the probability function | |
TClass * | IsA () const override |
int | Mode () const |
get the mode (x location of function maximum) | |
TUnuranDiscrDist & | operator= (const TUnuranDiscrDist &rhs) |
Assignment operator. | |
double | Pmf (int x) const |
evaluate the distribution (probability mesh function) at the integer value x. | |
double | ProbSum () const |
return area of the pdf | |
const std::vector< double > & | ProbVec () const |
retrieve a reference to the vector of the probabilities : Prob(i) If the distribution is defined from a function (i.e. | |
void | SetCdf (const ROOT::Math::IGenFunction &cdf) |
set cdf distribution from a generic function interface. | |
void | SetCdf (TF1 *cdf) |
set cdf distribution from a TF1 pointer. | |
void | SetDomain (int xmin, int xmax) |
Set the distribution domain, by default the domain is [0,INT_MAX] If xmin >= xmax a domain is removed. | |
void | SetMode (int mode) |
set the mode of the distribution (location of maximum probability) | |
void | SetProbSum (double sum) |
set the value of the sum of the probabilities in the given domain | |
void | Streamer (TBuffer &) override |
void | StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b) |
Public Member Functions inherited from TUnuranBaseDist | |
virtual | ~TUnuranBaseDist () |
Destructor (no operations) | |
void | StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b) |
Static Public Member Functions | |
static TClass * | Class () |
static const char * | Class_Name () |
static constexpr Version_t | Class_Version () |
static const char * | DeclFileName () |
Static Public Member Functions inherited from TUnuranBaseDist | |
static TClass * | Class () |
static const char * | Class_Name () |
static constexpr Version_t | Class_Version () |
static const char * | DeclFileName () |
Private Attributes | |
const ROOT::Math::IGenFunction * | fCdf |
pointer to the cumulative distribution function | |
bool | fHasDomain |
flag to control if distribution has a defined domain (otherwise is [0,INT_MAX]) | |
bool | fHasMode |
flag to control if distribution has a pre-computed mode | |
bool | fHasSum |
flag to control if distribution has a pre-computed sum of the probabilities | |
int | fMode |
mode of the distribution | |
bool | fOwnFunc |
flag to control if distribution owns the function pointers | |
const ROOT::Math::IGenFunction * | fPmf |
pointer to a function calculating the probability | |
std::vector< double > | fPVec |
Vector of the probabilities. | |
std::vector< double > | fPVecSum |
Vector of the sum of the probabilities. | |
double | fSum |
total sum of the probabilities in the given domain | |
int | fXmax |
upper value of the domain | |
int | fXmin |
lower value of the domain | |
#include <TUnuranDiscrDist.h>
TUnuranDiscrDist::TUnuranDiscrDist | ( | const ROOT::Math::IGenFunction & | func, |
bool | copyFunc = false |
||
) |
Constructor from a generic function object specifying the pdf.
Definition at line 23 of file TUnuranDiscrDist.cxx.
TUnuranDiscrDist::TUnuranDiscrDist | ( | TF1 * | func | ) |
Constructor from a TF1 objects specifying the pdf.
Definition at line 43 of file TUnuranDiscrDist.cxx.
|
inline |
Constructor from a vector of probability.
Definition at line 69 of file TUnuranDiscrDist.h.
|
override |
Destructor.
Definition at line 96 of file TUnuranDiscrDist.cxx.
TUnuranDiscrDist::TUnuranDiscrDist | ( | const TUnuranDiscrDist & | rhs | ) |
Copy constructor.
Definition at line 59 of file TUnuranDiscrDist.cxx.
evaluate the integral (cdf) on the given domain
Definition at line 131 of file TUnuranDiscrDist.cxx.
|
static |
|
inlinestaticconstexpr |
Definition at line 216 of file TUnuranDiscrDist.h.
|
inlineoverridevirtual |
Clone (required by base class)
Implements TUnuranBaseDist.
Definition at line 101 of file TUnuranDiscrDist.h.
|
inlinestatic |
Definition at line 216 of file TUnuranDiscrDist.h.
check if distribution has domain and return in case its domain
Definition at line 143 of file TUnuranDiscrDist.h.
|
inline |
flag to control if distribution provides also a Cdf
Definition at line 174 of file TUnuranDiscrDist.h.
|
inline |
flag to control if distribution provides the mode
Definition at line 163 of file TUnuranDiscrDist.h.
|
inline |
flag to control if distribution provides the total area of the probability function
Definition at line 169 of file TUnuranDiscrDist.h.
|
inlineoverridevirtual |
Reimplemented from TUnuranBaseDist.
Definition at line 216 of file TUnuranDiscrDist.h.
|
inline |
get the mode (x location of function maximum)
Definition at line 152 of file TUnuranDiscrDist.h.
TUnuranDiscrDist & TUnuranDiscrDist::operator= | ( | const TUnuranDiscrDist & | rhs | ) |
Assignment operator.
Definition at line 68 of file TUnuranDiscrDist.cxx.
evaluate the distribution (probability mesh function) at the integer value x.
Used internally by UnuRan For integer values outside the domain the function must return 0.0
Definition at line 122 of file TUnuranDiscrDist.cxx.
|
inline |
return area of the pdf
Definition at line 157 of file TUnuranDiscrDist.h.
|
inline |
retrieve a reference to the vector of the probabilities : Prob(i) If the distribution is defined from a function (i.e.
for distribution with undefined domain) the vector is empty.
Definition at line 182 of file TUnuranDiscrDist.h.
void TUnuranDiscrDist::SetCdf | ( | const ROOT::Math::IGenFunction & | cdf | ) |
set cdf distribution from a generic function interface.
If a method requires it and is not set it is estimated numerically
Definition at line 104 of file TUnuranDiscrDist.cxx.
void TUnuranDiscrDist::SetCdf | ( | TF1 * | cdf | ) |
set cdf distribution from a TF1 pointer.
If a method requires it and is not set it is estimated numerically
Definition at line 109 of file TUnuranDiscrDist.cxx.
Set the distribution domain, by default the domain is [0,INT_MAX] If xmin >= xmax a domain is removed.
Definition at line 120 of file TUnuranDiscrDist.h.
|
inline |
set the mode of the distribution (location of maximum probability)
Definition at line 133 of file TUnuranDiscrDist.h.
|
inline |
set the value of the sum of the probabilities in the given domain
Definition at line 138 of file TUnuranDiscrDist.h.
|
overridevirtual |
Reimplemented from TUnuranBaseDist.
|
inline |
Definition at line 216 of file TUnuranDiscrDist.h.
|
private |
pointer to the cumulative distribution function
Definition at line 205 of file TUnuranDiscrDist.h.
|
private |
flag to control if distribution has a defined domain (otherwise is [0,INT_MAX])
Definition at line 211 of file TUnuranDiscrDist.h.
|
private |
flag to control if distribution has a pre-computed mode
Definition at line 212 of file TUnuranDiscrDist.h.
|
private |
flag to control if distribution has a pre-computed sum of the probabilities
Definition at line 213 of file TUnuranDiscrDist.h.
|
private |
mode of the distribution
Definition at line 208 of file TUnuranDiscrDist.h.
|
private |
flag to control if distribution owns the function pointers
Definition at line 214 of file TUnuranDiscrDist.h.
|
private |
pointer to a function calculating the probability
Definition at line 204 of file TUnuranDiscrDist.h.
|
private |
Vector of the probabilities.
Definition at line 202 of file TUnuranDiscrDist.h.
|
mutableprivate |
Vector of the sum of the probabilities.
Definition at line 203 of file TUnuranDiscrDist.h.
|
private |
total sum of the probabilities in the given domain
Definition at line 209 of file TUnuranDiscrDist.h.
|
private |
upper value of the domain
Definition at line 207 of file TUnuranDiscrDist.h.
|
private |
lower value of the domain
Definition at line 206 of file TUnuranDiscrDist.h.