Pluto v6.3.0
Loading...
Searching...
No Matches
PUtils.h
Go to the documentation of this file.
1// Author: M.A. Kagarlis
2// Written: 15.12.98
3// Revised: 17.10.00 by R. Holzmann
4// Utilities Class Header
5
6#ifndef _PUTILS_H_
7#define _PUTILS_H_
8
9#include "TRandom3.h"
10#include "TMath.h"
11using namespace std;
12#include <iostream>
13#include <cstdlib>
14#include "TH1.h"
15#include "PKinematics.h"
16#include "PStaticData.h"
17
18
19//#define SEED 65539
20// set to 0 for random initialization of seed at startup
21// (this initializes TRandom3 with systime (but only a
22// granularity of 1 second)
23
24//This is the new default (IF 20.09.2009)
25#define SEED 0
26
27#define PLUTOVERSION_FOR_FAIR 1
28
29class PUtilsREngine;
32
33
34class PUtilsREngine : public TObject {
35
36 public:
38
39 Double_t sampleFlat() {
40 // Samples uniformly between 0 and 1
41 return rnd->Rndm();
42 }
43
44 Double_t sampleGaus(Double_t c, Double_t s) {
45 // Samples from a Gaussian distribution
46 return rnd->Gaus(c,s);
47 }
48
49 Int_t samplePoisson(Double_t mean) {
50 // Samples from a Poisson distribution
51 return rnd->Poisson(mean);
52 }
53
54 Int_t sampleBinomial(Int_t ntot, Float_t prob) {
55 // Samples from a binomial distribution
56 return rnd->Binomial(ntot,prob);
57 }
58
59 Double_t sampleBW(Double_t c, Double_t g) {
60 // Samples from a Breit Wigner distribution
61 if (g == 0.) return c;
62 return (c+0.5*g*TMath::Tan((2.0*rnd->Rndm()-1.0)*TMath::Pi()*0.5));
63 }
64
65 void SetSeed(UInt_t s);
66
67 Double_t lambda(double M, double m1, double m2) {
68 return PKinematics::lambda(M, m1, m2);
69 }
70
71 Double_t pcms2(double M, double m1, double m2) {
72 return PKinematics::pcms2(M, m1, m2);
73 }
74
75 Double_t pcms(double M, double m1, double m2) {
76 // cm momentum for the decay of M to m1 and m2
77 return PKinematics::pcms(M, m1, m2);
78 }
79
80
81 private:
82
83 TRandom3 *rnd;
84
85 ClassDef(PUtilsREngine, 0) //Pluto Utilities Class (random wrapper)
86};
87
88
89class PUtils : public TObject {
90
91 public:
93 cout << "seed: " << SEED << endl;
95 }
96 // create former behaviour
97
98 static void dsort(Double_t *, int);
99 // Sort in ascending order the first (int) entries of the array (Double_t *).
100 // Adapted from Ref 1
101
102 static void isort(int *i, int n) {
103 // Sort in ascending order the first (int) entries of the array (int *).
104
105 //BUGBUG: Quickersort is unstable
106 //see example:
107 //Int_t a[3]={8,9,9};
108 //PUtils::isort(a,3);
109
110 //workaround: add very small number
111
112 Double_t x[n];
113
114 for (int j=0; j<n; ++j)
115 x[j] = ((Double_t)i[j]) + ((Double_t)j)*0.00001;
116 dsort(x, n);
117 for (int j=0; j<n; ++j)
118 i[j] = (int)x[j];
119 }
120
121 static Double_t sampleFlat() {
122 // Samples uniformly between 0 and 1
123 return makePUtilsREngine()->sampleFlat();
124 }
125
126 static Double_t sampleGaus(Double_t c, Double_t s) {
127 // Samples from a Gaussian distribution
128 return makePUtilsREngine()->sampleGaus(c, s);
129 }
130
131 static int samplePoisson(Double_t mean) {
132 // Samples from a Poisson distribution
133 return makePUtilsREngine()->samplePoisson(mean);
134 }
135
136 static Int_t sampleBinomial(Int_t ntot, Float_t prob) {
137 // Samples from a binomial distribution
138 return makePUtilsREngine()->sampleBinomial(ntot, prob);
139 }
140
141 static Double_t sampleBW(Double_t c, Double_t g) {
142 // Samples from a Breit Wigner distribution
143 return makePUtilsREngine()->sampleBW(c, g);
144 }
145
146 static Double_t cgc(const int &, const int &, const int &,
147 const int &, const int &);
148 // Clebsch-Gordan coefficients (arguments are 2 x j or m)
149
150 static Double_t s3j(const Double_t &, const Double_t &, const Double_t &,
151 const Double_t &, const Double_t &, Double_t m3 = 0.);
152 // 3j-symbol, related to Clebsch-Gordan coefficient
153
154 static Double_t racah(const int &, const int &, const int &,
155 const int &, const int &, const int &);
156 // Racah coefficients (arguments are 2 x j or m)
157
158 static Double_t s6j(const Double_t &, const Double_t &, const Double_t &,
159 const Double_t &, const Double_t &, const Double_t &);
160 // 6j-symbol, related to Racah coefficient
161
162 static Int_t FindIndex(Int_t n, Double_t *a, Double_t r);
163
164 static void SetSeed(UInt_t s) { makePUtilsREngine()->SetSeed(s); }
165
166 static Bool_t Tokenize(const char *options, const char *delimiter, char **array, int *size);
167 static void remove_spaces(char **partc);
168 static Int_t remove_brackets(char **partc, char a, char b);
169 static Bool_t ValidVariableName(const char *name, unsigned int len = 0);
170 static Bool_t IsInt(const char *name);
171 static char *NewString(const char *var) {
172 char *newvar = new char[strlen(var)+1];
173 sprintf(newvar, "%s", var);
174 return newvar;
175 };
176
177 static void correct_histo(TH1 *histo);
178 static void correct(TH1 *histo);
179
180 private:
181
182 static Double_t phasef(const int &n) { return 1.- 2.*(abs(n)%2); }
183 // (-1)**n
184
185 static Double_t j123(const int &, const int &, const int &);
186 // used by racah
187
188
189 ClassDef(PUtils, 0) //Pluto Utilities Class
190};
191
192
193
194#endif // _PUTILS_H_
195
PUtilsREngine & fPUtilsREngine()
PUtilsREngine * makePUtilsREngine()
#define SEED
Definition PUtils.h:25
static double lambda(double M, double m1, double m2)
Definition PKinematics.h:14
static double pcms(double M, double m1, double m2)
Definition PKinematics.h:28
static double pcms2(double M, double m1, double m2)
Definition PKinematics.h:23
Double_t sampleGaus(Double_t c, Double_t s)
Definition PUtils.h:44
Double_t pcms(double M, double m1, double m2)
Definition PUtils.h:75
Double_t sampleBW(Double_t c, Double_t g)
Definition PUtils.h:59
Int_t sampleBinomial(Int_t ntot, Float_t prob)
Definition PUtils.h:54
Double_t sampleFlat()
Definition PUtils.h:39
Double_t lambda(double M, double m1, double m2)
Definition PUtils.h:67
Double_t pcms2(double M, double m1, double m2)
Definition PUtils.h:71
void SetSeed(UInt_t s)
Int_t samplePoisson(Double_t mean)
Definition PUtils.h:49
static void isort(int *i, int n)
Definition PUtils.h:102
static Double_t s6j(const Double_t &, const Double_t &, const Double_t &, const Double_t &, const Double_t &, const Double_t &)
static Double_t sampleGaus(Double_t c, Double_t s)
Definition PUtils.h:126
static void correct_histo(TH1 *histo)
static void remove_spaces(char **partc)
static void SetSeed(UInt_t s)
Definition PUtils.h:164
PUtils()
Definition PUtils.h:92
static int samplePoisson(Double_t mean)
Definition PUtils.h:131
static Bool_t IsInt(const char *name)
static Int_t sampleBinomial(Int_t ntot, Float_t prob)
Definition PUtils.h:136
static Bool_t ValidVariableName(const char *name, unsigned int len=0)
static void dsort(Double_t *, int)
static Double_t sampleFlat()
Definition PUtils.h:121
static Double_t sampleBW(Double_t c, Double_t g)
Definition PUtils.h:141
static Int_t FindIndex(Int_t n, Double_t *a, Double_t r)
static Double_t s3j(const Double_t &, const Double_t &, const Double_t &, const Double_t &, const Double_t &, Double_t m3=0.)
static Bool_t Tokenize(const char *options, const char *delimiter, char **array, int *size)
static Double_t cgc(const int &, const int &, const int &, const int &, const int &)
static void correct(TH1 *histo)
static char * NewString(const char *var)
Definition PUtils.h:171
static Double_t racah(const int &, const int &, const int &, const int &, const int &, const int &)
static Int_t remove_brackets(char **partc, char a, char b)
PChannel * c[]
PReaction r(c,"eta_dalitz", 3, 0, 0, 0, 1)
PProjector * m1
PParticle * s
Definition dp_mult.C:25
Int_t n
Definition etap+omeg.C:21
PParticle * g
TH1F * histo