61 void testStringAPI() {
63 TH1D *
h1 =
new TH1D(
"h1G",
"gaussian distribution from Unuran",100,-10,10);
64 TH1D * h2 =
new TH1D(
"h2G",
"gaussian distribution from TRandom",100,-10,10);
66 cout <<
"\nTest using UNURAN string API \n\n";
70 if (! unr.
Init(
"normal()",
"method=arou") ) {
71 cout <<
"Error initializing unuran" << endl;
79 for (
int i = 0; i <
n; ++i) {
85 cout <<
"Time using Unuran method " << unr.
MethodName() <<
"\t=\t " << w.
CpuTime() << endl;
90 for (
int i = 0; i <
n; ++i) {
96 cout <<
"Time using TRandom::Gaus \t=\t " << w.
CpuTime() << endl;
108 double distr(
double *x,
double *p) {
112 double cdf(
double *x,
double *p) {
119 cout <<
"\nTest 1D Continous distributions\n\n";
121 TH1D * h1 =
new TH1D(
"h1BW",
"Breit-Wigner distribution from Unuran",100,-10,10);
122 TH1D * h2 =
new TH1D(
"h2BW",
"Breit-Wigner distribution from GetRandom",100,-10,10);
126 TF1 *
f =
new TF1(
"distrFunc",distr,-10,10,2);
127 double par[2] = {1,0};
141 std::string method =
"tdr";
150 cout <<
"Error initializing unuran" << endl;
160 for (
int i = 0; i <
n; ++i) {
166 cout <<
"Time using Unuran method " << unr.
MethodName() <<
"\t=\t " << w.
CpuTime() << endl;
169 for (
int i = 0; i <
n; ++i) {
175 cout <<
"Time using TF1::GetRandom() \t=\t " << w.
CpuTime() << endl;
183 std::cout <<
" chi2 test of UNURAN vs GetRandom generated histograms: " << std::endl;
189 double gaus3d(
double *x,
double *p) {
191 double sigma_x = p[0];
192 double sigma_y = p[1];
193 double sigma_z = p[2];
195 double u = x[0] / sigma_x ;
196 double v = x[1] / sigma_y ;
197 double w = x[2] / sigma_z ;
198 double c = 1 - rho*rho ;
200 *
exp (-(u * u - 2 * rho * u * v + v * v + w*w) / (2 * c));
205 void testDistrMultiDim() {
207 cout <<
"\nTest Multidimensional distributions\n\n";
209 TH3D * h1 =
new TH3D(
"h13D",
"gaussian 3D distribution from Unuran",50,-10,10,50,-10,10,50,-10,10);
210 TH3D * h2 =
new TH3D(
"h23D",
"gaussian 3D distribution from GetRandom",50,-10,10,50,-10,10,50,-10,10);
215 double par[3] = {2,2,0.5};
225 std::string method =
"hitro";
227 cout <<
"Error initializing unuran" << endl;
235 for (
int i = 0; i < NGEN; ++i) {
237 h1->
Fill(x[0],x[1],x[2]);
241 cout <<
"Time using Unuran method " << unr.
MethodName() <<
"\t=\t\t " << w.
CpuTime() << endl;
255 for (
int i = 0; i < NGEN; ++i) {
257 h2->
Fill(x[0],x[1],x[2]);
261 cout <<
"Time using TF1::GetRandom \t\t=\t " << w.
CpuTime() << endl;
267 std::cout <<
" chi2 test of UNURAN vs GetRandom generated histograms: " << std::endl;
275 double poisson(
double * x,
double * p) {
279 void testDiscDistr() {
281 cout <<
"\nTest Discrete distributions\n\n";
283 TH1D * h1 =
new TH1D(
"h1PS",
"Unuran Poisson prob",20,0,20);
284 TH1D * h2 =
new TH1D(
"h2PS",
"Poisson dist from TRandom",20,0,20);
288 TF1 * f =
new TF1(
"fps",poisson,1,0,1);
297 bool ret = unr.
Init(dist2,
"dari");
304 for (
int i = 0; i <
n; ++i) {
306 h1->
Fill(
double(k) );
310 cout <<
"Time using Unuran method " << unr.
MethodName() <<
"\t=\t\t " << w.
CpuTime() << endl;
313 for (
int i = 0; i <
n; ++i) {
316 cout <<
"Time using TRandom::Poisson " <<
"\t=\t\t " << w.
CpuTime() << endl;
323 std::cout <<
" chi2 test of UNURAN vs TRandom generated histograms: " << std::endl;
332 void testEmpDistr() {
335 cout <<
"\nTest Empirical distributions using smoothing\n\n";
339 const int Ndata = 1000;
341 for (
int i = 0; i < Ndata; ++i) {
348 TH1D * h0 =
new TH1D(
"h0Ref",
"Starting data",100,-10,10);
349 TH1D * h1 =
new TH1D(
"h1Unr",
"Unuran unbin Generated data",100,-10,10);
350 TH1D * h1b =
new TH1D(
"h1bUnr",
"Unuran bin Generated data",100,-10,10);
351 TH1D * h2 =
new TH1D(
"h2GR",
"Data from TH1::GetRandom",100,-10,10);
353 h0->
FillN(Ndata,x,0,1);
364 for (
int i = 0; i <
n; ++i) {
369 cout <<
"Time using Unuran unbin " << unr.
MethodName() <<
"\t=\t\t " << w.
CpuTime() << endl;
374 if (!unr.
Init(binDist))
return;
375 for (
int i = 0; i <
n; ++i) {
379 cout <<
"Time using Unuran bin " << unr.
MethodName() <<
"\t=\t\t " << w.
CpuTime() << endl;
382 for (
int i = 0; i <
n; ++i) {
385 cout <<
"Time using TH1::GetRandom " <<
"\t=\t\t " << w.
CpuTime() << endl;
410 c1 =
new TCanvas(
"c1_unuranMulti",
"Multidimensional distribution",10,10,1000,1000);
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
double dist(Rotation3D const &r1, Rotation3D const &r2)
virtual void SetParameters(const Double_t *params)
virtual Double_t GetRandom()
Return a random number following this function shape.
void SetProbSum(double sum)
set the value of the sum of the probabilities in the given domain
virtual void SetNpx(Int_t npx=100)
Set the number of points used to draw the function.
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
double Sample()
Sample 1D distribution User is responsible for having previously correctly initialized with TUnuran::...
virtual Double_t Gaus(Double_t mean=0, Double_t sigma=1)
Samples a random number from the standard Normal (Gaussian) Distribution with the given mean and sigm...
Random number generator class based on the maximally quidistributed combined Tausworthe generator by ...
R__EXTERN TStyle * gStyle
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad.
void SetMode(int mode)
set the mode of the distribution (location of maximum probability)
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
Double_t CpuTime()
Stop the stopwatch (if it is running) and return the cputime (in seconds) passed between the start an...
int SampleDiscr()
Sample discrete distributions User is responsible for having previously correctly initialized with TU...
bool SampleMulti(double *x)
Sample multidimensional distributions User is responsible for having previously correctly initialized...
static struct mg_connection * fc(struct mg_context *ctx)
void Stop()
Stop the stopwatch.
double gaus3d(double *x, double *p)
virtual Double_t Chi2Test(const TH1 *h2, Option_t *option="UU", Double_t *res=0) const
test for comparing weighted and unweighted histograms
double cdf(double *x, double *p)
TUnuranDiscrDist class for one dimensional discrete distribution.
double breitwigner_pdf(double x, double gamma, double x0=0)
Probability density function of Breit-Wigner distribution, which is similar, just a different definit...
TUnuranEmpDist class for describing empiral distributions.
double breitwigner_cdf(double x, double gamma, double x0=0)
Cumulative distribution function (lower tail) of the Breit_Wigner distribution and it is similar (jus...
virtual void SetLineColor(Color_t lcolor)
Set the line color.
THist< 3, double, THistStatContent, THistStatUncertainty > TH3D
R__EXTERN TSystem * gSystem
virtual void Draw(Option_t *option="")
Draw this histogram with options.
tomato 3-D histogram with a double per channel (see TH1 documentation)}
A 3-Dim function with parameters.
void SetOptFit(Int_t fit=1)
The type of information about fit parameters printed in the histogram statistics box can be selected ...
virtual void SetNpy(Int_t npy=100)
Set the number of points used to draw the function.
virtual void GetRandom3(Double_t &xrandom, Double_t &yrandom, Double_t &zrandom)
Return 3 random numbers following this function shape.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Int_t Fill(Double_t)
Invalid Fill method.
TUnuranMultiContDist class describing multi dimensional continuous distributions. ...
R__EXTERN TRandom * gRandom
tomato 1-D histogram with a double per channel (see TH1 documentation)}
double poisson_pdf(unsigned int n, double mu)
Probability density function of the Poisson distribution.
const std::string & MethodName() const
used Unuran method
TUnuranContDist class describing one dimensional continuous distribution.
virtual void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0)
Automatic pad generation by division.
virtual void FillN(Int_t ntimes, const Double_t *x, const Double_t *w, Int_t stride=1)
Fill this histogram with an array x and weights w.
bool Init(const std::string &distr, const std::string &method)
initialize with Unuran string interface
THist< 1, double, THistStatContent, THistStatUncertainty > TH1D
virtual void SetParameter(Int_t param, Double_t value)
virtual Int_t Poisson(Double_t mean)
Generates a random integer N according to a Poisson law.
virtual void Update()
Update canvas pad buffers.
virtual Double_t GetRandom() const
Return a random number distributed according the histogram bin contents.
virtual void SetNpz(Int_t npz=30)
Set the number of points used to draw the function.