]>
Commit | Line | Data |
---|---|---|
ec852657 | 1 | #ifndef ALIGLAUBERMC_H |
2 | #define ALIGLAUBERMC_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | //////////////////////////////////////////////////////////////////////////////// | |
8 | // | |
9 | // Glauber MC | |
10 | // | |
11 | // origin: PHOBOS experiment | |
12 | // alification: Mikolaj Krzewicki, Nikhef, mikolaj.krzewicki@cern.ch | |
13 | // | |
14 | //////////////////////////////////////////////////////////////////////////////// | |
15 | ||
16 | #include "AliGlauberNucleus.h" | |
17 | ||
19f030d3 | 18 | #include <Riostream.h> |
ec852657 | 19 | class TNamed; |
20 | class TObjArray; | |
21 | class TNtuple; | |
bb442091 | 22 | class TArray; |
ec852657 | 23 | |
24 | class AliGlauberMC : public TNamed { | |
25 | private: | |
26 | AliGlauberNucleus fANucleus; //Nucleus A | |
27 | AliGlauberNucleus fBNucleus; //Nucleus B | |
28 | Double_t fXSect; //Nucleon-nucleon cross section | |
29 | TObjArray* fNucleonsA; //Array of nucleons in nucleus A | |
30 | TObjArray* fNucleonsB; //Array of nucleons in nucleus B | |
31 | Int_t fAN; //Number of nucleons in nucleus A | |
32 | Int_t fBN; //Number of nucleons in nucleus B | |
33 | TNtuple* fnt; //Ntuple for results (created, but not deleted) | |
34 | Double_t fMeanX2; //<x^2> of wounded nucleons | |
35 | Double_t fMeanY2; //<y^2> of wounded nucleons | |
36 | Double_t fMeanXY; //<xy> of wounded nucleons | |
37 | Double_t fMeanXParts; //<x> of wounded nucleons | |
bb442091 | 38 | Double_t fMeanYParts; //<y> of wounded nucleons |
39 | Double_t fMeanXColl; //<x> of binary collisions | |
40 | Double_t fMeanYColl; //<y> of binary collisions | |
41 | Double_t fMeanX2Coll; //<x^2> of binary collisions | |
42 | Double_t fMeanY2Coll; //<y^2> of binary collisions | |
43 | Double_t fMeanXYColl; //<xy> of binary collisions | |
ec852657 | 44 | Double_t fMeanXSystem; //<x> of all nucleons |
45 | Double_t fMeanYSystem; //<x> of all nucleons | |
46 | Double_t fMeanX_A; //<x> of nucleons in nucleus A | |
47 | Double_t fMeanY_A; //<x> of nucleons in nucleus A | |
48 | Double_t fMeanX_B; //<x> of nucleons in nucleus B | |
49 | Double_t fMeanY_B; //<x> of nucleons in nucleus B | |
50 | Double_t fB_MC; //Impact parameter (b) | |
51 | Int_t fEvents; //Number of events with at least one collision | |
52 | Int_t fTotalEvents; //All events within selected impact parameter range | |
53 | Double_t fBMin; //Minimum impact parameter to be generated | |
54 | Double_t fBMax; //Maximum impact parameter to be generated | |
566fc3d0 | 55 | Double_t fdNdEtaParam[2]; //Parameters: nnp, x |
56 | Double_t fdNdEtaGBWParam[3]; //Parameters: delta, lambda, snn | |
57 | Double_t fdNdEtaNBDParam[3]; //Parameters: k, nmean, beta | |
58 | Double_t fdNdEtaTwoNBDParam[6]; //Parameters: k1, nmean1, k2, nmean2, alpha, beta | |
ec852657 | 59 | Int_t fMaxNpartFound; //Largest value of Npart obtained |
60 | Int_t fNpart; //Number of wounded (participating) nucleons in current event | |
61 | Int_t fNcoll; //Number of binary collisions in current event | |
62 | Double_t fSx2; //Variance of x of wounded nucleons | |
63 | Double_t fSy2; //Variance of y of wounded nucleons | |
64 | Double_t fSxy; //Covariance of x and y of wounded nucleons | |
bb442091 | 65 | Double_t fSx2Coll; //Variance of x of binaruy collisions |
66 | Double_t fSy2Coll; //Variance of y of binaruy collisions | |
67 | Double_t fSxyColl; //Covariance of x and y of binaruy collisions | |
1b4934d5 | 68 | Double_t fX; //hard particle production fraction |
69 | Double_t fNpp; //Multiplicity normalization | |
ec852657 | 70 | Bool_t CalcResults(Double_t bgen); |
ec852657 | 71 | |
72 | public: | |
0448b9f3 | 73 | AliGlauberMC(Option_t* NA = "Pb", Option_t* NB = "Pb", Double_t xsect = 72); |
566fc3d0 | 74 | virtual ~AliGlauberMC(); |
75 | AliGlauberMC(const AliGlauberMC& in); | |
76 | AliGlauberMC& operator=(const AliGlauberMC& in); | |
ec852657 | 77 | void Draw(Option_t* option); |
bb442091 | 78 | |
79 | void Run(Int_t nevents); | |
80 | Bool_t NextEvent(Double_t bgen=-1); | |
81 | Bool_t CalcEvent(Double_t bgen); | |
82 | ||
83 | //various ways to calculate multiplicity | |
84 | Double_t GetdNdEta( Double_t nnp=8.0, | |
85 | Double_t x=0.13 ); | |
86 | Double_t GetdNdEtaGBW( Double_t delta=0.79, | |
87 | Double_t lambda=0.288, | |
88 | Double_t snn=30.25 ); | |
89 | Double_t GetdNdEtaNBD( Int_t k=3, | |
90 | Double_t nmean = 4, | |
91 | Double_t beta = 0.13 ); | |
92 | Double_t GetdNdEtaTwoNBD( Int_t k1=3, | |
93 | Double_t nmean1=4, | |
94 | Int_t k2=2, | |
95 | Double_t nmean2=11, | |
96 | Double_t alpha=0.4, | |
97 | Double_t beta=0.13 ); | |
98 | ||
1b4934d5 | 99 | Double_t GetEccentricity() const; |
bb442091 | 100 | Double_t GetEccentricityColl() const; |
101 | Double_t GetEccentricityPart() const; | |
102 | Double_t GetEccentricityPartColl() const; | |
ec852657 | 103 | Double_t GetB() const {return fB_MC;} |
104 | Double_t GetBMin() const {return fBMin;} | |
105 | Double_t GetBMax() const {return fBMax;} | |
106 | Int_t GetNcoll() const {return fNcoll;} | |
107 | Int_t GetNpart() const {return fNpart;} | |
108 | Int_t GetNpartFound() const {return fMaxNpartFound;} | |
109 | TNtuple* GetNtuple() const {return fnt;} | |
110 | TObjArray *GetNucleons(); | |
111 | Double_t GetTotXSect() const; | |
112 | Double_t GetTotXSectErr() const; | |
566fc3d0 | 113 | void Reset(); |
bb442091 | 114 | static Double_t NegativeBinomialDistribution(Int_t x, Int_t k, Double_t nmean); |
115 | Int_t NegativeBinomialRandom(Int_t k, Double_t nmean); | |
116 | Int_t DoubleNegativeBinomialRandom(Int_t k1, Double_t nmean1, Int_t k2, Double_t nmean2, Double_t alpha); | |
117 | void SetBmin(Double_t bmin) {fBMin = bmin;} | |
118 | void SetBmax(Double_t bmax) {fBMax = bmax;} | |
119 | void SetdNdEtaParam( Double_t nnp = 8., Double_t x = 0.13); | |
120 | void SetdNdEtaGBWParam( Double_t delta = 0.79, Double_t lambda = 0.288, Double_t snn = 30.25); | |
121 | void SetdNdEtaNBDParam(Double_t k=3, Double_t nmean=4, Double_t beta=0.13); | |
122 | void SetdNdEtaTwoNBDParam(Double_t alpha = 0.4, Double_t k1 = 3, Double_t nmean1 = 4., Double_t k2 = 2., Double_t nmean2 = 11., Double_t beta=0.13); | |
123 | void SetMinDistance(Double_t d) {fANucleus.SetMinDist(d); fBNucleus.SetMinDist(d);} | |
ec852657 | 124 | static void PrintVersion() {cout << "AliGlauberMC " << Version() << endl;} |
bb442091 | 125 | static const char *Version() {return "v1.2";} |
ec852657 | 126 | static void runAndSaveNtuple( Int_t n, |
127 | Option_t *sysA="Au", | |
128 | Option_t *sysB="Au", | |
129 | Double_t signn=42, | |
130 | Double_t mind=0.4, | |
131 | const char *fname="glau_auau_ntuple.root"); | |
bb442091 | 132 | void runAndSaveNucleons( Int_t n, |
133 | Option_t *sysA, | |
134 | Option_t *sysB, | |
135 | Double_t signn, | |
136 | Double_t mind, | |
137 | Bool_t verbose, | |
138 | const char *fname); | |
139 | ||
140 | ClassDef(AliGlauberMC,3) | |
ec852657 | 141 | }; |
142 | ||
143 | #endif |