Logo ROOT  
Reference Guide
Unuran

UNU.RAN, (Universal Non Uniform Random number generator for generating non uniform pseudo-random numbers) is an ANSI C library licensed under GPL.
It contains universal (also called automatic or black-box) algorithms that can generate random numbers from large classes of continuous or discrete distributions, and also from practically all standard distributions. An extensive online documentation are available at the (UNU.RAN Web Site)[http://statistik.wu-wien.ac.at/unuran/]

New classes have been introduced to use the UNU.RAN C library from ROOT and C++ from ROOT and using C++ objects. To use UNU.RAN one needs always an instance of the class TUnuran. It can then be used in two distinct ways:

TUnuran unr;
//initialize unuran to generate normal random numbers using a "arou" method
unr.Init("normal()","method=arou");
//......
// sample distributions N times (generate N random numbers)
for (int i = 0; i < N; ++i)
double x = unr.Sample();

If the derivative is not provided and the generation method requires it, then it is estimated numerically.

Some of this information is required depending on the chosen UNURAN generation method.

//1D case: create a distribution from two TF1 object pointers pdfFunc
//initialize unuran passing the distribution and a string defining the method
unr.Init(dist, "method=hinv");
// sample distribution N times (generate N random numbers)
for (int i = 0; i < N; ++i)
double x = unr.Sample();
//Multi-Dim case from a TF1 (or TF2 or TF3) object describing a multi-dimensional function
TUnuranMultiContDist dist( pdfFuncMulti);
// the recommended method for multi-dimensional function is "hitro"
unr.Init(dist, "method=hitro");
// sample distribution N times (generate N random numbers)
double x[NDIM];
for (int i = 0; i < N; ++i)
// create distribution from a vector of probabilities
double pv[NSize] = {0.1,0.2,.......};
TUnuranDiscrDist dist(pv, pv+NSize);
// the recommended method for discrete distribution is
unr.Init(dist, "method=dgt");
// sample N times (generate N random numbers)
for (int i = 0; i < N; ++i)
int k = unr.SampleDiscr();
// create distribution from a set of data 1D
// vdata is an std::vector containing the data
TUnuranEmpDist dist( vdata.begin(),vdata.end());
unr.Init(dist);
// sample N times (generate N random numbers)
for (int i = 0; i < N; ++i)
double x = unr.Sample();
// create an empirical distribution from an histogram
// if the histogram has a buffer one must use TUnuranEmpDist(h1,false)
TH1 * h1 = ... // histogram pointer
TUnuranEmpDist binDist( h1);
unr.Init(binDist);
// sample N times (generate N random numbers)
for (int i = 0; i < N; ++i)
double x = unr.Sample();

Functionality is also provided via the C++ classes for using a different random number generator by passing a TRandom pointer when constructing the TUnuran class (by default the ROOT gRandom is passed to UNURAN).

The (UNU.RAN documentation)[http://statistik.wu-wien.ac.at/unuran/doc/unuran.html#Top] provides a detailed description of all the available methods and the possible options which one can pass to UNU.RAN for the various distributions. */

Classes

class  TUnuran
 
class  TUnuranContDist
 
class  TUnuranDiscrDist
 TUnuranDiscrDist class for one dimensional discrete distribution. More...
 
class  TUnuranEmpDist
 
class  TUnuranMultiContDist
 TUnuranMultiContDist class describing multi dimensional continuous distributions. More...
 
class  TUnuranSampler
 
TUnuran::SampleDiscr
int SampleDiscr()
Sample discrete distributions User is responsible for having previously correctly initialized with TU...
Definition: TUnuran.cxx:378
N
#define N
x
Double_t x[n]
Definition: legend1.C:17
h1
TH1F * h1
Definition: legend1.C:5
ROOT::Math::gv_detail::dist
double dist(Rotation3D const &r1, Rotation3D const &r2)
Definition: 3DDistances.cxx:63
TUnuranContDist
Definition: TUnuranContDist.h:48
TUnuran::Init
bool Init(const std::string &distr, const std::string &method)
initialize with Unuran string interface
Definition: TUnuran.cxx:75
TUnuranMultiContDist
TUnuranMultiContDist class describing multi dimensional continuous distributions.
Definition: TUnuranMultiContDist.h:47
TUnuran::SampleMulti
bool SampleMulti(double *x)
Sample multidimensional distributions User is responsible for having previously correctly initialized...
Definition: TUnuran.cxx:392
TUnuranDiscrDist
TUnuranDiscrDist class for one dimensional discrete distribution.
Definition: TUnuranDiscrDist.h:51
TH1
Definition: TH1.h:57
TUnuran
Definition: TUnuran.h:79
TUnuranEmpDist
Definition: TUnuranEmpDist.h:49
TUnuran::Sample
double Sample()
Sample 1D distribution User is responsible for having previously correctly initialized with TUnuran::...
Definition: TUnuran.cxx:385