]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVGEN/AliGenMUONCocktail.cxx
Radius of PHOS equal to 460 (Y.Schutz)
[u/mrichter/AliRoot.git] / EVGEN / AliGenMUONCocktail.cxx
CommitLineData
84954c47 1/**************************************************************************
2 * Copyright(c) 1998-1999, 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/* $Id$ */
17
9538aedd 18//
84954c47 19// Classe to create the MUON coktail for physics in the Alice muon spectrometer
9538aedd 20// The followoing muons sources are included in this cocktail:
21// jpsi, upsilon, non-correlated open and beauty, and muons from pion and kaons.
22// The free parameeters are :
23// pp reaction cross-section
24// production cross-sections in pp collisions and
25// branching ratios in the muon channel
26// Hard probes are supposed to scale with Ncoll and hadronic production with (0.8Ncoll+0.2*Npart)
27// There is a primordial trigger wiche requires :
28// a minimum muon multiplicity above a pT cut in a theta acceptance cone
29//
30// Gines Martinez, jan 2004, Nantes martinez@in2p3.fr
84954c47 31
32
33//
34
9538aedd 35//#include <TList.h>
84954c47 36#include <TObjArray.h>
37#include <TF1.h>
38#include <TParticle.h>
39
40#include "AliGenParam.h"
41#include "AliGenMUONlib.h"
42#include "AliGenMUONCocktail.h"
43#include "AliGenCocktailEntry.h"
44#include "AliCollisionGeometry.h"
45#include "AliRun.h"
46#include "AliMC.h"
47#include "AliStack.h"
48
49ClassImp(AliGenMUONCocktail)
50
51
52//________________________________________________________________________
53AliGenMUONCocktail::AliGenMUONCocktail()
54 :AliGenCocktail()
55{
56// Constructor
57 fTotalRate =0;
58 fNSucceded=0;
59 fNGenerated=0;
60 fMuonMultiplicity=1;
61 fMuonPtCut= 1.;
62 fMuonThetaMinCut=171.;
63 fMuonThetaMaxCut=178.;
64 fNumberOfCollisions = 400; // Minimum bias Pb+Pb collisions
65 //
66}
67//_________________________________________________________________________
68AliGenMUONCocktail::AliGenMUONCocktail(const AliGenMUONCocktail & cocktail):
69 AliGenCocktail(cocktail)
70{
71// Copy constructor
72 fTotalRate =0;
73 fNSucceded=0;
74 fNGenerated=0;
75 fMuonMultiplicity=1;
76 fMuonPtCut= 1.;
77 fMuonThetaMinCut=171.;
78 fMuonThetaMaxCut=178.;
79 fNumberOfCollisions = 400; // Minimum bias Pb+Pb collisions
80 //
81}
82//_________________________________________________________________________
83AliGenMUONCocktail::~AliGenMUONCocktail()
84{
85// Destructor
86 delete fEntries;
87}
88
89//_________________________________________________________________________
90void AliGenMUONCocktail::Init()
91{
92 // Defining MUON physics cocktail
93
94 // Kinematical limits for particle generation
95 Float_t ptMin = fPtMin;
96 Float_t ptMax = fPtMax;
97 Float_t yMin = fYMin;;
98 Float_t yMax = fYMax;;
99 Float_t phiMin = fPhiMin*180./TMath::Pi();
100 Float_t phiMax = fPhiMax*180./TMath::Pi();
101 printf(">>> Kinematical range pT:%f:%f y:%f:%f Phi:%f:%f\n",ptMin,ptMax,yMin,yMax,phiMin,phiMax);
102
9538aedd 103 Float_t sigmaReaction = 0.072; // MINB pp at LHC energies 72 mb
88e5db43 104
84954c47 105 // Generating J/Psi Physics
9538aedd 106 AliGenParam * genjpsi = new AliGenParam(1, AliGenMUONlib::kJpsi, "Vogt", "Jpsi");
84954c47 107 // 4pi Generation
9538aedd 108 genjpsi->SetPtRange(0,100.);
109 genjpsi->SetYRange(-8.,8);
110 genjpsi->SetPhiRange(0.,360.);
111 genjpsi->SetForceDecay(kDiMuon);
112 genjpsi->SetTrackingFlag(1);
84954c47 113 // Calculation of the paritcle multiplicity per event in the muonic channel
9538aedd 114 Float_t ratiojpsi; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
115 Float_t sigmajpsi = 31.0e-6 * 0.437; // section "6.7 Quarkonia Production" table 6.5 for pp times shadowing
116 Float_t brjpsi = 0.0588; // Branching Ratio for JPsi
117 genjpsi->Init(); // Generating pT and Y parametrsation for the 4pi
118 ratiojpsi = sigmajpsi * brjpsi * fNumberOfCollisions / sigmaReaction * genjpsi->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
119 printf(">>> ratio jpsi %g et %g Ncol %g sigma %g\n",ratiojpsi,genjpsi->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax),fNumberOfCollisions, sigmajpsi );
84954c47 120 // Generation in the kinematical limits of AliGenMUONCocktail
9538aedd 121 genjpsi->SetPtRange(ptMin, ptMax);
122 genjpsi->SetYRange(yMin, yMax);
123 genjpsi->SetPhiRange(phiMin, phiMax);
124 genjpsi->Init(); // Generating pT and Y parametrsation in the desired kinematic range
84954c47 125 // Adding Generator
9538aedd 126 AddGenerator(genjpsi, "Jpsi", ratiojpsi);
127 fTotalRate+=ratiojpsi;
84954c47 128
88e5db43 129 // Generating Psi prime Physics
130 AliGenParam * genpsiP = new AliGenParam(1, AliGenMUONlib::kPsiP, "Vogt", "PsiP");
131 // 4pi Generation
132 genpsiP->SetPtRange(0,100.);
133 genpsiP->SetYRange(-8.,8);
134 genpsiP->SetPhiRange(0.,360.);
135 genpsiP->SetForceDecay(kDiMuon);
136 genpsiP->SetTrackingFlag(1);
137 // Calculation of the paritcle multiplicity per event in the muonic channel
138 Float_t ratiopsiP; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
139 Float_t sigmapsiP = 4.68e-6 * 0.437; // section "6.7 Quarkonia Production" table 6.5 for pp times shadowing
140 Float_t brpsiP = 0.0103; // Branching Ratio for PsiP
141 genpsiP->Init(); // Generating pT and Y parametrsation for the 4pi
142 ratiopsiP = sigmapsiP * brpsiP * fNumberOfCollisions / sigmaReaction * genpsiP->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
143 printf(">>> ratio psiP %g et %g Ncol %g sigma %g\n",ratiopsiP,genpsiP->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax),fNumberOfCollisions, sigmapsiP );
144 // Generation in the kinematical limits of AliGenMUONCocktail
145 genpsiP->SetPtRange(ptMin, ptMax);
146 genpsiP->SetYRange(yMin, yMax);
147 genpsiP->SetPhiRange(phiMin, phiMax);
148 genpsiP->Init(); // Generating pT and Y parametrsation in the desired kinematic range
149 // Adding Generator
150 AddGenerator(genpsiP, "PsiP", ratiopsiP);
151 fTotalRate+=ratiopsiP;
152
153
84954c47 154// Generating Upsilon Physics
9538aedd 155 AliGenParam * genupsilon = new AliGenParam(1, AliGenMUONlib::kUpsilon, "Vogt", "Upsilon");
156 genupsilon->SetPtRange(0,100.);
157 genupsilon->SetYRange(-8.,8);
158 genupsilon->SetPhiRange(0.,360.);
159 genupsilon->SetForceDecay(kDiMuon);
160 genupsilon->SetTrackingFlag(1);
161 Float_t ratioupsilon; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
162 Float_t sigmaupsilon = 0.501e-6 * 0.674; // section "6.7 Quarkonia Production" table 6.5 for pp times shadowing
163 Float_t brupsilon = 0.0248; // Branching Ratio for Upsilon
164 genupsilon->Init(); // Generating pT and Y parametrsation for the 4pi
165 ratioupsilon = sigmaupsilon * brupsilon * fNumberOfCollisions / sigmaReaction * genupsilon->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
166 printf(">>> ratio upsilon %g et %g\n",ratioupsilon, genupsilon->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax));
167 genupsilon->SetPtRange(ptMin, ptMax);
168 genupsilon->SetYRange(yMin, yMax);
169 genupsilon->SetPhiRange(phiMin, phiMax);
170 genupsilon->Init(); // Generating pT and Y parametrsation in the desired kinematic range
171 AddGenerator(genupsilon,"Upsilon", ratioupsilon);
172 fTotalRate+=ratioupsilon;
84954c47 173
88e5db43 174// Generating UpsilonP Physics
175 AliGenParam * genupsilonP = new AliGenParam(1, AliGenMUONlib::kUpsilonP, "Vogt", "UpsilonP");
176 genupsilonP->SetPtRange(0,100.);
177 genupsilonP->SetYRange(-8.,8);
178 genupsilonP->SetPhiRange(0.,360.);
179 genupsilonP->SetForceDecay(kDiMuon);
180 genupsilonP->SetTrackingFlag(1);
181 Float_t ratioupsilonP; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
182 Float_t sigmaupsilonP = 0.246e-6 * 0.674; // section "6.7 Quarkonia Production" table 6.5 for pp times shadowing
183 Float_t brupsilonP = 0.0131; // Branching Ratio for UpsilonP
184 genupsilonP->Init(); // Generating pT and Y parametrsation for the 4pi
185 ratioupsilonP = sigmaupsilonP * brupsilonP * fNumberOfCollisions / sigmaReaction * genupsilonP->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
186 printf(">>> ratio upsilonP %g et %g\n",ratioupsilonP, genupsilonP->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax));
187 genupsilonP->SetPtRange(ptMin, ptMax);
188 genupsilonP->SetYRange(yMin, yMax);
189 genupsilonP->SetPhiRange(phiMin, phiMax);
190 genupsilonP->Init(); // Generating pT and Y parametrsation in the desired kinematic range
191 AddGenerator(genupsilonP,"UpsilonP", ratioupsilonP);
192 fTotalRate+=ratioupsilonP;
193
194
195// Generating UpsilonPP Physics
196 AliGenParam * genupsilonPP = new AliGenParam(1, AliGenMUONlib::kUpsilonPP, "Vogt", "UpsilonPP");
197 genupsilonPP->SetPtRange(0,100.);
198 genupsilonPP->SetYRange(-8.,8);
199 genupsilonPP->SetPhiRange(0.,360.);
200 genupsilonPP->SetForceDecay(kDiMuon);
201 genupsilonPP->SetTrackingFlag(1);
202 Float_t ratioupsilonPP; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
203 Float_t sigmaupsilonPP = 0.100e-6 * 0.674; // section "6.7 Quarkonia Production" table 6.5 for pp times shadowing
204 Float_t brupsilonPP = 0.0181; // Branching Ratio for UpsilonPP
205 genupsilonPP->Init(); // Generating pT and Y parametrsation for the 4pi
206 ratioupsilonPP = sigmaupsilonPP * brupsilonPP * fNumberOfCollisions / sigmaReaction * genupsilonPP->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
207 printf(">>> ratio upsilonPP %g et %g\n",ratioupsilonPP, genupsilonPP->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax));
208 genupsilonPP->SetPtRange(ptMin, ptMax);
209 genupsilonPP->SetYRange(yMin, yMax);
210 genupsilonPP->SetPhiRange(phiMin, phiMax);
211 genupsilonPP->Init(); // Generating pT and Y parametrsation in the desired kinematic range
212 AddGenerator(genupsilonPP,"UpsilonPP", ratioupsilonPP);
213 fTotalRate+=ratioupsilonPP;
214
215
84954c47 216// Generating Charm Physics
9538aedd 217 AliGenParam * gencharm = new AliGenParam(1, AliGenMUONlib::kCharm, "Vogt", "Charm");
218 gencharm->SetPtRange(0,100.);
219 gencharm->SetYRange(-8.,8);
220 gencharm->SetPhiRange(0.,360.);
221 gencharm->SetForceDecay(kSemiMuonic);
222 gencharm->SetTrackingFlag(1);
223 Float_t ratiocharm; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
224 Float_t sigmacharm = 2. * 6.64e-3 * 0.65 ; //
225 Float_t brcharm = 0.12; // Branching Ratio for Charm
226 gencharm->Init(); // Generating pT and Y parametrsation for the 4pi
227 ratiocharm = sigmacharm * brcharm * fNumberOfCollisions / sigmaReaction *
228 gencharm->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
229 gencharm->SetPtRange(ptMin, ptMax);
230 gencharm->SetYRange(yMin, yMax);
231 gencharm->SetPhiRange(phiMin, phiMax);
232 gencharm->Init(); // Generating pT and Y parametrsation in the desired kinematic range
84954c47 233
9538aedd 234 printf(">>> ratio charm %f\n",ratiocharm);
235 AddGenerator(gencharm,"Charm", ratiocharm);
236 fTotalRate+=ratiocharm;
84954c47 237
238// Generating Beauty Physics "Correlated Pairs"
9538aedd 239 AliGenParam * genbeauty = new AliGenParam(2, AliGenMUONlib::kBeauty, "Vogt", "Beauty");
240 genbeauty->SetPtRange(0,100.);
241 genbeauty->SetYRange(-8.,8);
242 genbeauty->SetPhiRange(0.,360.);
243 genbeauty->SetForceDecay(kSemiMuonic);
244 genbeauty->SetTrackingFlag(1);
245 Float_t ratiobeauty; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
246 Float_t sigmabeauty = 2. * 0.210e-3 * 0.84; //
247 Float_t brbeauty = 0.15; // Branching Ratio for Beauty
248 genbeauty->Init(); // Generating pT and Y parametrsation for the 4pi
249 ratiobeauty = sigmabeauty * brbeauty * fNumberOfCollisions / sigmaReaction *
250 genbeauty->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
251 genbeauty->SetPtRange(ptMin, ptMax);
252 genbeauty->SetYRange(yMin, yMax);
253 genbeauty->SetPhiRange(phiMin, phiMax);
254 genbeauty->Init(); // Generating pT and Y parametrisation in the desired kinematic range
84954c47 255
9538aedd 256 printf(">>> ratio beauty %f\n",ratiobeauty);
257 AddGenerator(genbeauty,"Beauty", ratiobeauty);
258 fTotalRate+=ratiobeauty;
84954c47 259
260// Generating Pion Physics
9538aedd 261 AliGenParam * genpion = new AliGenParam(1, AliGenMUONlib::kPion, "Vogt", "Pion");
262 genpion->SetPtRange(0,100.);
263 genpion->SetYRange(-8.,8);
264 genpion->SetPhiRange(0.,360.);
265 genpion->SetForceDecay(kPiToMu);
266 genpion->SetTrackingFlag(1);
267 Float_t ratiopion; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
268 Float_t sigmapion = 0.93e-2; // Valerie presentation Clermont-16-jan-2004 and Alice-int-2002-06
269 Float_t brpion = 0.9999; // Branching Ratio for Pion
270 genpion->Init(); // Generating pT and Y parametrsation for the 4pi
271 ratiopion = sigmapion * brpion * (0.80*fNumberOfParticipants+0.2*fNumberOfCollisions) / sigmaReaction * genpion->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
272 genpion->SetPtRange(ptMin, ptMax);
273 genpion->SetYRange(yMin, yMax);
274 genpion->SetPhiRange(phiMin, phiMax);
275 genpion->Init(); // Generating pT and Y parametrsation in the desired kinematic range
276 printf(">>> ratio pion %f\n",ratiopion);
277 AddGenerator(genpion,"Pion", ratiopion);
278 fTotalRate+=ratiopion;
84954c47 279
280// Generating Kaon Physics
9538aedd 281 AliGenParam * genkaon = new AliGenParam(1, AliGenMUONlib::kKaon, "Vogt", "Kaon");
282 genkaon->SetPtRange(0,100.);
283 genkaon->SetYRange(-8.,8);
284 genkaon->SetPhiRange(0.,360.);
285 genkaon->SetForceDecay(kKaToMu);
286 genkaon->SetTrackingFlag(1);
287 Float_t ratiokaon; // Ratio with respect to the reaction cross-section for the muonic channel in the kinematics limit of the MUONCocktail
288 Float_t sigmakaon = 1.23e-4; // Valerie presentation Clermont-16-jan-2004 and Alice-int-2002-06
289 Float_t brkaon = 0.6351 ; // Branching Ratio for Kaon
290 genkaon->Init(); // Generating pT and Y parametrsation for the 4pi
291 ratiokaon = sigmakaon * brkaon * (0.80*fNumberOfParticipants+0.2*fNumberOfCollisions)/ sigmaReaction * genkaon->GetRelativeArea(ptMin,ptMax,yMin,yMax,phiMin,phiMax);
292 genkaon->SetPtRange(ptMin, ptMax);
293 genkaon->SetYRange(yMin, yMax);
294 genkaon->SetPhiRange(phiMin, phiMax);
295 genkaon->Init(); // Generating pT and Y parametrsation in the desired kinematic range
296 printf(">>> ratio kaon %f\n",ratiokaon);
297 AddGenerator(genkaon,"Kaon", ratiokaon);
298 fTotalRate+=ratiokaon;
84954c47 299}
300
301//_________________________________________________________________________
302void AliGenMUONCocktail::Generate()
303{
304 //
305// Generate event
306 TIter next(fEntries);
307 AliGenCocktailEntry *entry = 0;
308 AliGenCocktailEntry *preventry = 0;
309 AliGenerator* gen = 0;
310
311 TObjArray *partArray = gAlice->GetMCApp()->Particles();
312
313//
314// Generate the vertex position used by all generators
315//
316 if(fVertexSmear == kPerEvent) Vertex();
9538aedd 317 Bool_t primordialTrigger = kFALSE;
84954c47 318
9538aedd 319 while(!primordialTrigger) {
84954c47 320
321 //Reseting stack
322 AliRunLoader * runloader = gAlice->GetRunLoader();
323 if (runloader)
324 if (runloader->Stack())
325 runloader->Stack()->Reset();
326 //
327 // Loop over generators and generate events
328 Int_t igen=0;
329 Int_t npart =0;
330
331 while((entry = (AliGenCocktailEntry*)next())) {
332 gen = entry->Generator();
333 gen->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2));
334 if ( (npart = gRandom->Poisson(entry->Rate())) >0 ) {
335 igen++;
336 if (igen ==1) entry->SetFirst(0);
337 else entry->SetFirst((partArray->GetEntriesFast())+1);
338 gen->SetNumberParticles(npart);
339 gen->Generate();
340 entry->SetLast(partArray->GetEntriesFast());
341 preventry = entry;
342 }
343 }
344 next.Reset();
345
346 // Tesitng primordial trigger : Muon pair in the MUON spectrometer acceptance 171,178 and pTCut
347 Int_t iPart;
348 fNGenerated++;
349 Int_t numberOfMuons=0;
350 // printf(">>>fNGenerated is %d\n",fNGenerated);
351 for(iPart=0; iPart<partArray->GetEntriesFast(); iPart++){
352 // gAlice->GetMCApp()->Particle(iPart)->Print();
353 if ( (TMath::Abs(gAlice->GetMCApp()->Particle(iPart)->GetPdgCode())==13) &&
354 (gAlice->GetMCApp()->Particle(iPart)->Theta()*180./TMath::Pi()>fMuonThetaMinCut) &&
355 (gAlice->GetMCApp()->Particle(iPart)->Theta()*180./TMath::Pi()<fMuonThetaMaxCut) &&
356 (gAlice->GetMCApp()->Particle(iPart)->Pt()>fMuonPtCut) ) {
357 gAlice->GetMCApp()->Particle(iPart)->SetProductionVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2), 0.);
358 numberOfMuons++;
359 }
360 }
361 // printf(">>> Number of Muons is %d \n", numberOfMuons);
9538aedd 362 if (numberOfMuons >= fMuonMultiplicity ) primordialTrigger = kTRUE;
84954c47 363 }
364 //printf(">>> Trigger Accepted!!! \n");
365 fNSucceded++;
366 // Float_t Ratio = (Float_t) fNSucceded/fNGenerated;
367 // printf("Generated %d, Succeded %d and Ratio %f\n",fNGenerated, fNSucceded,Ratio);
368}
369
370
371
372
373
374