]>
Commit | Line | Data |
---|---|---|
36b81802 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-2002, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | * * | |
15 | * * | |
16 | * Copyright(c) 1997, 1998, 2002, Adrian Alscher and Kai Hencken * | |
17 | * See $ALICE_ROOT/EpEmGen/diffcross.f for full Copyright notice * | |
18 | * * | |
19 | * * | |
20 | * Copyright(c) 2002 Kai Hencken, Yuri Kharlov, Serguei Sadovsky * | |
21 | * See $ALICE_ROOT/EpEmGen/epemgen.f for full Copyright notice * | |
22 | * * | |
23 | **************************************************************************/ | |
24 | ||
803d1ab0 | 25 | /* $Id$ */ |
36b81802 | 26 | |
27 | // Event generator of single e+e- pair production in ultraperipheral PbPb collisions | |
28 | // at 5.5 TeV/nucleon. | |
29 | // The generator is based on 5-dimentional differential cross section of the process. | |
30 | //% | |
31 | // References: | |
32 | // [1] "Multiple electromagnetic electron positron pair production in | |
33 | // relativistic heavy ion collisions". | |
34 | // Adrian Alscher, Kai Hencken, Dirk Trautmann, and Gerhard Baur, | |
35 | // Phys. Rev. A55 (1997) 396. | |
36 | // [2] K.Hencken, Yu.Kharlov, S.Sadovsky, Internal ALICE Note 2002-27. | |
37 | //% | |
38 | // Usage: | |
39 | // Initialization: | |
40 | // AliGenEpEmv1 *gener = new AliGenEpEmv1(); | |
41 | // gener->SetXXXRange(); // Set kinematics range | |
42 | // gener->Init(); | |
43 | // Event generation: | |
44 | // gener->Generate(); // Produce one e+e- pair with the event weight assigned | |
45 | // // to each track. The sum of event weights, divided by | |
46 | // // the total number of generated events, gives the | |
47 | // // integral cross section of the process of e+e- pair | |
48 | // // production in the above mentioned kinematics range. | |
49 | // // Sum of the selected event weights, divided by the total | |
50 | // // number of generated events, gives the integral cross | |
51 | // // section corresponded to the set of selected events | |
52 | //% | |
53 | // The generator consists of several modules: | |
54 | // 1) $ALICE_ROOT/EpEmGen/diffcross.f: | |
55 | // Exact calculation of the total differential e+ e- -pair production | |
56 | // in Relativistic Heavy Ion Collisions for a point particle in an | |
57 | // external field approach. See full comments in the mentioned file. | |
58 | // 2) $ALICE_ROOT/EpEmGen/epemgen.f: | |
59 | // Generator of e+e- pairs produced in PbPb collisions at LHC | |
60 | // it generates events according to the parametrization of the | |
61 | // differential cross section. Produces events have weights calculated | |
62 | // by the exact differential cross section calculation (diffcross.f). | |
63 | // See full comments in the mentioned file. | |
64 | // 3) Class TEpEmGen: | |
65 | // Interface from the fortran event generator to ALIROOT | |
66 | // 4) Class AliGenEpEmv1: | |
67 | // The event generator to call within ALIROOT | |
68 | //% | |
69 | // Author of this module: Yuri.Kharlov@cern.ch | |
70 | // 9 October 2002 | |
71 | ||
72 | #include "AliGenEpEmv1.h" | |
73 | #include <TParticle.h> | |
74 | #include <TParticlePDG.h> | |
75 | #include <TDatabasePDG.h> | |
76 | #include <TEpEmGen.h> | |
77 | ||
78 | ClassImp(AliGenEpEmv1) | |
79 | ||
80 | //------------------------------------------------------------ | |
81 | ||
82 | AliGenEpEmv1::AliGenEpEmv1() | |
83 | { | |
84 | // Default constructor | |
85 | // Avoid zero pt | |
86 | if (fPtMin == 0) fPtMin = 1.E-04; | |
87 | } | |
88 | ||
89 | //____________________________________________________________ | |
36b81802 | 90 | AliGenEpEmv1::~AliGenEpEmv1() |
91 | { | |
92 | // Destructor | |
93 | } | |
94 | ||
95 | //____________________________________________________________ | |
96 | void AliGenEpEmv1::Init() | |
97 | { | |
98 | // Initialisation: | |
99 | // 1) define a generator | |
100 | // 2) initialize the generator of e+e- pair production | |
101 | ||
102 | fMass = TDatabasePDG::Instance()->GetParticle(11)->Mass(); | |
103 | ||
104 | SetMC(new TEpEmGen()); | |
23a8d5be | 105 | fEpEmGen = (TEpEmGen*) fMCEvGen; |
36b81802 | 106 | fEpEmGen ->Initialize(fYMin,fYMax,fPtMin,fPtMax); |
107 | fEvent = 0; | |
108 | } | |
109 | ||
110 | //____________________________________________________________ | |
111 | void AliGenEpEmv1::Generate() | |
112 | { | |
113 | // | |
114 | // Generate one e+e- pair | |
115 | // Gaussian smearing on the vertex is done if selected. | |
116 | //% | |
117 | // Each produced e+e- pair is defined by the following variables: | |
118 | // rapidities of e-, e+ (yElectron,yPositron) | |
119 | // log10(pt in MeV/c) of e-, e+ (xElectron,xPositron) | |
120 | // azymuth angles between e- and e+ (phi12) | |
121 | //% | |
122 | // On output an event weight is given (weight) which is assigned to each track. | |
123 | // The sum of event weights, divided by the total number of generated events, | |
124 | // gives the integral cross section of the e+e- pair production in the | |
125 | // selected kinematics range. | |
126 | // | |
127 | ||
128 | Float_t polar[3]= {0,0,0}; | |
129 | Float_t origin[3]; | |
130 | Float_t p[3]; | |
131 | ||
132 | Double_t ptElectron,ptPositron, phiElectron,phiPositron, mt; | |
133 | Double_t phi12=0,xElectron=0,xPositron=0,yElectron=0,yPositron=0,weight=0; | |
134 | Int_t j, nt, id; | |
135 | Float_t random[6]; | |
136 | ||
137 | fEpEmGen->GenerateEvent(fYMin,fYMax,fPtMin,fPtMax, | |
138 | yElectron,yPositron,xElectron,xPositron,phi12,weight); | |
139 | if (fDebug == 1) | |
140 | printf("AliGenEpEmv1::Generate(): y=(%f,%f), x=(%f,%f), phi=%f\n", | |
141 | yElectron,yPositron,xElectron,xPositron,phi12); | |
142 | ||
143 | for (j=0;j<3;j++) origin[j]=fOrigin[j]; | |
144 | if(fVertexSmear==kPerEvent) { | |
145 | Rndm(random,6); | |
146 | for (j=0;j<3;j++) { | |
147 | origin[j]+=fOsigma[j]*TMath::Cos(2*random[2*j]*TMath::Pi())* | |
148 | TMath::Sqrt(-2*TMath::Log(random[2*j+1])); | |
149 | } | |
150 | } | |
151 | ||
152 | Rndm(random,1); | |
153 | ptElectron = TMath::Power(10,xElectron) * 1.e-03;; | |
154 | ptPositron = TMath::Power(10,xPositron) * 1.e-03;; | |
155 | phiElectron = fPhiMin + random[0] * (fPhiMax-fPhiMin); | |
156 | phiPositron = phiElectron + phi12; | |
157 | ||
158 | // Produce electron | |
159 | mt = TMath::Sqrt(ptElectron*ptElectron + fMass*fMass); | |
160 | p[0] = ptElectron*TMath::Cos(phiElectron); | |
161 | p[1] = ptElectron*TMath::Sin(phiElectron); | |
162 | p[2] = mt*TMath::SinH(yElectron); | |
163 | id = 11; | |
164 | if (fDebug == 2) | |
165 | printf("id=%+3d, p = (%+11.4e,%+11.4e,%+11.4e) GeV\n",id,p[0],p[1],p[2]); | |
642f15cf | 166 | PushTrack(fTrackIt,-1, id,p,origin,polar,0,kPPrimary,nt,weight); |
36b81802 | 167 | |
168 | // Produce positron | |
169 | mt = TMath::Sqrt(ptPositron*ptPositron + fMass*fMass); | |
170 | p[0] = ptPositron*TMath::Cos(phiPositron); | |
171 | p[1] = ptPositron*TMath::Sin(phiPositron); | |
172 | p[2] = mt*TMath::SinH(yPositron); | |
173 | id = -11; | |
174 | if (fDebug == 2) | |
175 | printf("id=%+3d, p = (%+11.4e,%+11.4e,%+11.4e) GeV\n",id,p[0],p[1],p[2]); | |
642f15cf | 176 | PushTrack(fTrackIt,-1, id,p,origin,polar,0,kPPrimary,nt,weight); |
36b81802 | 177 | |
178 | fEvent++; | |
179 | if (fEvent%1000 == 0) { | |
180 | printf("=====> AliGenEpEmv1::Generate(): \n Event %d, sigma=%f +- %f kb\n", | |
181 | fEvent,fEpEmGen->GetXsection(),fEpEmGen->GetDsection()); | |
182 | } | |
183 | } | |
184 |