]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PYTHIA8/AliDecayerPythia8.cxx
AliDecayers will return particles coordinates,time in cm,sec. Generators
[u/mrichter/AliRoot.git] / PYTHIA8 / AliDecayerPythia8.cxx
... / ...
CommitLineData
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
18// Implementation of AliDecayer using Pythia8
19// Author: andreas.morsch@cern.ch
20#include <TMath.h>
21#include <TPDGCode.h>
22#include <TLorentzVector.h>
23#include <TClonesArray.h>
24#include <TParticle.h>
25#include "AliTPythia8.h"
26#include "AliDecayerPythia8.h"
27#include "ParticleData.h"
28
29ClassImp(AliDecayerPythia8)
30
31Bool_t AliDecayerPythia8::fgInit = kFALSE;
32
33AliDecayerPythia8::AliDecayerPythia8():
34 TVirtualMCDecayer(),
35 fPythia8(AliTPythia8::Instance()),
36 fDebug(0),
37 fDecay(kAll),
38 fHeavyFlavour(kTRUE)
39{
40 // Constructor
41 fPythia8->Pythia8()->readString("SoftQCD:elastic = on");
42 fPythia8->Pythia8()->init();
43}
44
45//___________________________________________________________________________
46void AliDecayerPythia8::Decay(Int_t pdg, TLorentzVector* p)
47{
48 // Decay a single particle
49 ClearEvent();
50 AppendParticle(pdg, p);
51 Int_t idPart = fPythia8->Pythia8()->event[0].id();
52 fPythia8->Pythia8()->particleData.mayDecay(idPart,kTRUE);
53 fPythia8->Pythia8()->moreDecays();
54 if (fDebug > 0) fPythia8->EventListing();
55}
56
57//___________________________________________________________________________
58Int_t AliDecayerPythia8::ImportParticles(TClonesArray *particles)
59{
60 //import the decay products into particles array
61 const Float_t kconvT=0.001/2.999792458e8; // mm/c to seconds conversion
62 const Float_t kconvL=1./10; // mm to cm conversion
63 int np = fPythia8->ImportParticles(particles, "All");
64 // pythia assigns decay time in mm/c, convert to seconds
65 for (int ip=1;ip<np;ip++) {
66 TParticle* prod = (TParticle*)particles->At(ip);
67 if (!prod) continue;
68 prod->SetProductionVertex(prod->Vx()*kconvL,prod->Vy()*kconvL,prod->Vz()*kconvL,kconvT*prod->T());
69 }
70 return np;
71}
72
73
74void AliDecayerPythia8::Init()
75{
76// Initialisation
77//
78 if (!fgInit) {
79 fgInit = kTRUE;
80 // fPythia->SetDecayTable();
81 }
82
83// Switch on heavy flavor decays
84
85 Int_t j;
86 Int_t heavy[14] = {411, 421, 431, 4122, 4132, 4232, 4332, 511, 521, 531, 5122, 5132, 5232, 5332};
87// fPythia->ResetDecayTable();
88 for (j=0; j < 14; j++) {
89 if (fDecay == kNoDecayHeavy) {
90 fPythia8->ReadString(Form("%d:onMode = off", heavy[j]));
91 } else {
92 fPythia8->ReadString(Form("%d:onMode = on", heavy[j]));
93 }
94 }
95
96
97//...Switch off decay of pi0, K0S, Lambda, Sigma+-, Xi0-, Omega-.
98
99 if (fDecay != kNeutralPion) {
100 fPythia8->ReadString("111:onMode = off");
101 } else {
102 fPythia8->ReadString("111:onMode = on");
103 }
104
105 fPythia8->ReadString("310:onMode = off");
106 fPythia8->ReadString("3112:onMode = off");
107 fPythia8->ReadString("3212:onMode = off");
108 fPythia8->ReadString("3222:onMode = off");
109 fPythia8->ReadString("3312:onMode = off");
110 fPythia8->ReadString("3322:onMode = off");
111 fPythia8->ReadString("3334:onMode = off");
112// .. Force decay channels
113 ForceDecay();
114}
115
116void AliDecayerPythia8::ForceDecay()
117{
118//
119// Force a particle decay mode
120// Switch heavy flavour production off if requested
121 if (!fHeavyFlavour) SwitchOffHeavyFlavour();
122//
123 Decay_t decay = fDecay;
124 fPythia8->ReadString("HadronLevel:Decay = on");
125
126 if (decay == kNoDecayHeavy) return;
127
128//
129// select mode
130 switch (decay)
131 {
132 case kHardMuons:
133// B0 -> mu X
134 fPythia8->ReadString("511:onMode = off");
135 fPythia8->ReadString("511:onIfAny = 13 443 100443");
136// B+/- -> mu X
137 fPythia8->ReadString("521:onMode = off");
138 fPythia8->ReadString("521:onIfAny = 13 443 100443");
139// Bs -> mu X
140 fPythia8->ReadString("531:onMode = off");
141 fPythia8->ReadString("531:onIfAny = 13 443 100443");
142// Lambda_b -> mu X
143 fPythia8->ReadString("5122:onMode = off");
144 fPythia8->ReadString("5122:onIfAny = 13 443 100443");
145// Sigma_b- -> mu X
146 fPythia8->ReadString("5132:onMode = off");
147 fPythia8->ReadString("5132:onIfAny = 13 443 100443");
148// Sigma_b0 -> mu X
149 fPythia8->ReadString("5232:onMode = off");
150 fPythia8->ReadString("5232:onIfAny = 13 443 100443");
151// Omega_b -> mu X
152 fPythia8->ReadString("5332:onMode = off");
153 fPythia8->ReadString("5332:onIfAny = 13 443 100443");
154// Psi' -> mu+ mu-
155 fPythia8->ReadString("100443:onMode = off");
156 fPythia8->ReadString("100443:onIfAny = 443");
157// Psi -> mu+ mu-
158 fPythia8->ReadString("443:onMode = off");
159 fPythia8->ReadString("443:onIfAll = 13 13");
160// D+/- -> mu X
161 fPythia8->ReadString("411:onMode = off");
162 fPythia8->ReadString("411:onIfAll = 13");
163// D0 -> mu X
164 fPythia8->ReadString("421:onMode = off");
165 fPythia8->ReadString("421:onIfAll = 13");
166// D_s -> mu X
167 fPythia8->ReadString("431:onMode = off");
168 fPythia8->ReadString("431:onIfAll = 13");
169// Lambda_c -> mu X
170 fPythia8->ReadString("4122:onMode = off");
171 fPythia8->ReadString("4122:onIfAll = 13");
172// Sigma_c -> mu X
173 fPythia8->ReadString("4132:onMode = off");
174 fPythia8->ReadString("4132:onIfAll = 13");
175// Sigma_c+ -> mu X
176 fPythia8->ReadString("4232:onMode = off");
177 fPythia8->ReadString("4232:onIfAll = 13");
178// Omega_c -> mu X
179 fPythia8->ReadString("4332:onMode = off");
180 fPythia8->ReadString("4332:onIfAll = 13");
181
182 break;
183 case kChiToJpsiGammaToMuonMuon:
184// Chi_1c -> J/Psi Gamma
185 fPythia8->ReadString("20443:onMode = off");
186 fPythia8->ReadString("20443:onIfAll = 443 22");
187// Chi_2c -> J/Psi Gamma
188 fPythia8->ReadString("445:onMode = off");
189 fPythia8->ReadString("445:onIfAll = 443 22");
190// J/Psi -> mu+ mu-
191 fPythia8->ReadString("443:onMode = off");
192 fPythia8->ReadString("443:onIfAll = 13 13");
193 break;
194 case kChiToJpsiGammaToElectronElectron:
195// Chi_1c -> J/Psi Gamma
196 fPythia8->ReadString("20443:onMode = off");
197 fPythia8->ReadString("20443:onIfAll = 443 22");
198// Chi_2c -> J/Psi Gamma
199 fPythia8->ReadString("445:onMode = off");
200 fPythia8->ReadString("445:onIfAll = 443 22");
201// J/Psi -> e+ e-
202 fPythia8->ReadString("443:onMode = off");
203 fPythia8->ReadString("443:onIfAll = 11 11");
204 break;
205
206 case kBSemiMuonic:
207// B0 -> mu X
208 fPythia8->ReadString("511:onMode = off");
209 fPythia8->ReadString("511:onIfAny = 13");
210// B+/- -> mu X
211 fPythia8->ReadString("521:onMode = off");
212 fPythia8->ReadString("521:onIfAny = 13");
213// B_s -> mu X
214 fPythia8->ReadString("531:onMode = off");
215 fPythia8->ReadString("531:onIfAny = 13");
216// Lambda_b -> mu X
217 fPythia8->ReadString("5122:onMode = off");
218 fPythia8->ReadString("5122:onIfAny = 13");
219// Sigma_b -> mu X
220 fPythia8->ReadString("5132:onMode = off");
221 fPythia8->ReadString("5132:onIfAny = 13");
222// Sigma_b0 -> mu X
223 fPythia8->ReadString("5232:onMode = off");
224 fPythia8->ReadString("5232:onIfAny = 13");
225// Omega_b -> mu X
226 fPythia8->ReadString("5332:onMode = off");
227 fPythia8->ReadString("5332:onIfAny = 13");
228 break;
229 case kSemiMuonic:
230// D+- -> mu X
231 fPythia8->ReadString("411:onMode = off");
232 fPythia8->ReadString("411:onIfAll = 13");
233// D0 -> mu X
234 fPythia8->ReadString("421:onMode = off");
235 fPythia8->ReadString("421:onIfAll = 13");
236// D_s -> mu X
237 fPythia8->ReadString("431:onMode = off");
238 fPythia8->ReadString("431:onIfAll = 13");
239// Lambda_c -> mu X
240 fPythia8->ReadString("4122:onMode = off");
241 fPythia8->ReadString("4122:onIfAll = 13");
242// Sigma_c -> mu X
243 fPythia8->ReadString("4132:onMode = off");
244 fPythia8->ReadString("4132:onIfAll = 13");
245// Sigma -> mu X
246 fPythia8->ReadString("4232:onMode = off");
247 fPythia8->ReadString("4232:onIfAll = 13");
248// Omega_c -> mu X
249 fPythia8->ReadString("4332:onMode = off");
250 fPythia8->ReadString("4332:onIfAll = 13");
251// B0 -> mu X
252 fPythia8->ReadString("511:onMode = off");
253 fPythia8->ReadString("511:onIfAny = 13");
254// B+/- -> mu X
255 fPythia8->ReadString("521:onMode = off");
256 fPythia8->ReadString("521:onIfAny = 13");
257// B_s -> mu X
258 fPythia8->ReadString("531:onMode = off");
259 fPythia8->ReadString("531:onIfAny = 13");
260// Lambda_c -> mu X
261 fPythia8->ReadString("5122:onMode = off");
262 fPythia8->ReadString("5122:onIfAny = 13");
263// Sigma_c -> mu X
264 fPythia8->ReadString("5132:onMode = off");
265 fPythia8->ReadString("5132:onIfAny = 13");
266// Sigma_c -> mu X
267 fPythia8->ReadString("5232:onMode = off");
268 fPythia8->ReadString("5232:onIfAny = 13");
269// Omega_c -> mu X
270 fPythia8->ReadString("5332:onMode = off");
271 fPythia8->ReadString("5332:onIfAny = 13");
272
273 break;
274 case kJpsiDiMuon:
275// J/Psi-> mu+ mu-
276 fPythia8->ReadString("443:onMode = off");
277 fPythia8->ReadString("443:onIfAll = 13 13");
278 break;
279 case kDiMuon:
280// Rho -> mu+ mu-
281 fPythia8->ReadString("113:onMode = off");
282 fPythia8->ReadString("113:onIfAll = 13 13");
283// Eta-> mu+ mu-
284 fPythia8->ReadString("221:onMode = off");
285 fPythia8->ReadString("221:onIfAll = 13 13");
286// omega-> mu+ mu-
287 fPythia8->ReadString("223:onMode = off");
288 fPythia8->ReadString("223:onIfAll = 13 13");
289// phi-> mu+ mu-
290 fPythia8->ReadString("333:onMode = off");
291 fPythia8->ReadString("333:onIfAll = 13 13");
292// J/Psi-> mu+ mu-
293 fPythia8->ReadString("443:onMode = off");
294 fPythia8->ReadString("443:onIfAll = 13 13");
295// Psi'-> mu+ mu-
296 fPythia8->ReadString("100443:onMode = off");
297 fPythia8->ReadString("100443:onIfAll = 13 13");
298// Ups-> mu+ mu-
299 fPythia8->ReadString("553:onMode = off");
300 fPythia8->ReadString("553:onIfAll = 13 13");
301// Ups'-> mu+ mu-
302 fPythia8->ReadString("100553:onMode = off");
303 fPythia8->ReadString("100553:onIfAll = 13 13");
304// Ups''-> mu+ mu-
305 fPythia8->ReadString("200553:onMode = off");
306 fPythia8->ReadString("200553:onIfAll = 13 13");
307 break;
308 case kBSemiElectronic:
309// B0 - > e+ e-
310 fPythia8->ReadString("511:onMode = off");
311 fPythia8->ReadString("511:onIfAny = 11");
312// B+- -> e+ e-
313 fPythia8->ReadString("521:onMode = off");
314 fPythia8->ReadString("521:onIfAny = 11");
315// B_s -> e+ e-
316 fPythia8->ReadString("531:onMode = off");
317 fPythia8->ReadString("531:onIfAny = 11");
318// Lambda_b -> e+ e-
319 fPythia8->ReadString("5122:onMode = off");
320 fPythia8->ReadString("5122:onIfAny = 11");
321// Sigma_b -> e+ e-
322 fPythia8->ReadString("5132:onMode = off");
323 fPythia8->ReadString("5132:onIfAny = 11");
324// Sigma_b -> e+ e-
325 fPythia8->ReadString("5232:onMode = off");
326 fPythia8->ReadString("5232:onIfAny = 11");
327// Omega_b ->e+ e-
328 fPythia8->ReadString("5332:onMode = off");
329 fPythia8->ReadString("5332:onIfAny = 11");
330 break;
331 case kSemiElectronic:
332// D+/- -> e X
333 fPythia8->ReadString("411:onMode = off");
334 fPythia8->ReadString("411:onIfAll = 11");
335// D0 -> e X
336 fPythia8->ReadString("421:onMode = off");
337 fPythia8->ReadString("421:onIfAll = 11");
338// D_s ->e X
339 fPythia8->ReadString("431:onMode = off");
340 fPythia8->ReadString("431:onIfAll = 11");
341// Lambda_c -> e X
342 fPythia8->ReadString("4122:onMode = off");
343 fPythia8->ReadString("4122:onIfAll = 11");
344// Sigma_c -> e X
345 fPythia8->ReadString("4132:onMode = off");
346 fPythia8->ReadString("4132:onIfAll = 11");
347// Sigma_c -> e X
348 fPythia8->ReadString("4232:onMode = off");
349 fPythia8->ReadString("4232:onIfAll = 11");
350// Omega_c -> e X
351 fPythia8->ReadString("4332:onMode = off");
352 fPythia8->ReadString("4332:onIfAll = 11");
353// B0 -> e X
354 fPythia8->ReadString("511:onMode = off");
355 fPythia8->ReadString("511:onIfAny = 11");
356// B+/- -> e X
357 fPythia8->ReadString("521:onMode = off");
358 fPythia8->ReadString("521:onIfAny = 11");
359// B_s -> e X
360 fPythia8->ReadString("531:onMode = off");
361 fPythia8->ReadString("531:onIfAny = 11");
362// Lambda_b -> e X
363 fPythia8->ReadString("5122:onMode = off");
364 fPythia8->ReadString("5122:onIfAny = 11");
365// Sigma_b -> e X
366 fPythia8->ReadString("5132:onMode = off");
367 fPythia8->ReadString("5132:onIfAny = 11");
368// Sigma_b -> e X
369 fPythia8->ReadString("5232:onMode = off");
370 fPythia8->ReadString("5232:onIfAny = 11");
371// Omega_b -> e X
372 fPythia8->ReadString("5332:onMode = off");
373 fPythia8->ReadString("5332:onIfAny = 11");
374 break;
375 case kDiElectron:
376// Rho -> e+e-
377 fPythia8->ReadString("113:onMode = off");
378 fPythia8->ReadString("113:onIfAll = 11 11");
379// Eta -> e+e-
380 fPythia8->ReadString("221:onMode = off");
381 fPythia8->ReadString("221:onIfAll = 11 11");
382// omega -> e+e-
383 fPythia8->ReadString("223:onMode = off");
384 fPythia8->ReadString("223:onIfAll = 11 11");
385// phi -> e+e-
386 fPythia8->ReadString("333:onMode = off");
387 fPythia8->ReadString("333:onIfAll = 11 11");
388// J/Psi -> e+e-
389 fPythia8->ReadString("443:onMode = off");
390 fPythia8->ReadString("443:onIfAll = 11 11");
391// Psi' -> e+e-
392 fPythia8->ReadString("100443:onMode = off");
393 fPythia8->ReadString("100443:onIfAll = 11 11");
394// Ups -> e+e-
395 fPythia8->ReadString("553:onMode = off");
396 fPythia8->ReadString("553:onIfAll = 11 11");
397// Ups' -> e+e-
398 fPythia8->ReadString("100553:onMode = off");
399 fPythia8->ReadString("100553:onIfAll = 11 11");
400// Ups'' -> e+e-
401 fPythia8->ReadString("200553:onMode = off");
402 fPythia8->ReadString("200553:onIfAll = 11 11");
403 break;
404 case kBJpsiDiMuon:
405// B0 -> J/Psi (Psi') X
406 fPythia8->ReadString("511:onMode = off");
407 fPythia8->ReadString("511:onIfAny = 443 100443");
408// B+/- -> J/Psi (Psi') X
409 fPythia8->ReadString("521:onMode = off");
410 fPythia8->ReadString("521:onIfAny = 443 100443");
411// B_s -> J/Psi (Psi') X
412 fPythia8->ReadString("531:onMode = off");
413 fPythia8->ReadString("531:onIfAny = 443 100443");
414// Lambda_b -> J/Psi (Psi') X
415 fPythia8->ReadString("5122:onMode = off");
416 fPythia8->ReadString("5122:onIfAny = 443 100443");
417//
418// J/Psi -> mu+ mu-
419 fPythia8->ReadString("443:onMode = off");
420 fPythia8->ReadString("443:onIfAll = 13 13");
421// Psi' -> mu+ mu-
422 fPythia8->ReadString("100443:onMode = off");
423 fPythia8->ReadString("100443:onIfAll = 13 13");
424 break;
425 case kBPsiPrimeDiMuon:
426// B0 -> Psi' X
427 fPythia8->ReadString("511:onMode = off");
428 fPythia8->ReadString("511:onIfAny = 100443");
429// B+/- -> Psi' X
430 fPythia8->ReadString("521:onMode = off");
431 fPythia8->ReadString("521:onIfAny = 100443");
432// B_s -> Psi' X
433 fPythia8->ReadString("531:onMode = off");
434 fPythia8->ReadString("531:onIfAny = 100443");
435// Lambda_b -> Psi' X
436 fPythia8->ReadString("5122:onMode = off");
437 fPythia8->ReadString("5122:onIfAny = 100443");
438//
439// Psi' -> mu+ mu-
440 fPythia8->ReadString("100443:onMode = off");
441 fPythia8->ReadString("100443:onIfAll = 13 13");
442 break;
443 case kBJpsiDiElectron:
444// B0 -> Psi X
445 fPythia8->ReadString("511:onMode = off");
446 fPythia8->ReadString("511:onIfAny = 443");
447// B+/- -> Psi X
448 fPythia8->ReadString("521:onMode = off");
449 fPythia8->ReadString("521:onIfAny = 443");
450// B_s -> Psi X
451 fPythia8->ReadString("531:onMode = off");
452 fPythia8->ReadString("531:onIfAny = 443");
453// Lambda_b -> Psi X
454 fPythia8->ReadString("5122:onMode = off");
455 fPythia8->ReadString("5122:onIfAny = 443");
456//
457// Psi -> mu+ mu-
458 fPythia8->ReadString("443:onMode = off");
459 fPythia8->ReadString("443:onIfAll = 11 11");
460
461 break;
462 case kBJpsi:
463// B0 -> Psi X
464 fPythia8->ReadString("511:onMode = off");
465 fPythia8->ReadString("511:onIfAny = 443");
466// B+/- -> Psi X
467 fPythia8->ReadString("521:onMode = off");
468 fPythia8->ReadString("521:onIfAny = 443");
469// B_s -> Psi X
470 fPythia8->ReadString("531:onMode = off");
471 fPythia8->ReadString("531:onIfAny = 443");
472// Lambda_b -> Psi X
473 fPythia8->ReadString("5122:onMode = off");
474 fPythia8->ReadString("5122:onIfAny = 443");
475 break;
476 case kBPsiPrimeDiElectron:
477// B0 -> Psi' X
478 fPythia8->ReadString("511:onMode = off");
479 fPythia8->ReadString("511:onIfAny = 100443");
480// B+/- -> Psi' X
481 fPythia8->ReadString("521:onMode = off");
482 fPythia8->ReadString("521:onIfAny = 100443");
483// B_s -> Psi' X
484 fPythia8->ReadString("531:onMode = off");
485 fPythia8->ReadString("531:onIfAny = 100443");
486// Lambda_b -> Psi' X
487 fPythia8->ReadString("5122:onMode = off");
488 fPythia8->ReadString("5122:onIfAny = 100443");
489//
490// Psi' -> mu+ mu-
491 fPythia8->ReadString("100443:onMode = off");
492 fPythia8->ReadString("100443:onIfAll = 11 11");
493 break;
494 case kPiToMu:
495// pi -> mu nu
496 fPythia8->ReadString("211:onMode = off");
497 fPythia8->ReadString("211:onIfAny = 13");
498 break;
499 case kKaToMu:
500// K -> mu nu
501 fPythia8->ReadString("321:onMode = off");
502 fPythia8->ReadString("321:onIfAny = 13");
503 break;
504 case kAllMuonic:
505// pi/K -> mu
506 fPythia8->ReadString("211:onMode = off");
507 fPythia8->ReadString("211:onIfAny = 13");
508 fPythia8->ReadString("321:onMode = off");
509 fPythia8->ReadString("321:onIfAny = 13");
510 break;
511 case kWToMuon:
512// W -> mu X
513 fPythia8->ReadString("24:onMode = off");
514 fPythia8->ReadString("24:onIfAny = 13");
515 break;
516 case kWToCharm:
517// W -> c X
518 fPythia8->ReadString("24:onMode = off");
519 fPythia8->ReadString("24:onIfAny = 4");
520 break;
521 case kWToCharmToMuon:
522// W -> c X
523 fPythia8->ReadString("24:onMode = off");
524 fPythia8->ReadString("24:onIfAny = 4");
525// D+- -> mu X
526 fPythia8->ReadString("411:onMode = off");
527 fPythia8->ReadString("411:onIfAll = 13");
528// D0 -> mu X
529 fPythia8->ReadString("421:onMode = off");
530 fPythia8->ReadString("421:onIfAll = 13");
531// D_s -> mu X
532 fPythia8->ReadString("431:onMode = off");
533 fPythia8->ReadString("431:onIfAll = 13");
534// Lambda_c -> mu X
535 fPythia8->ReadString("4122:onMode = off");
536 fPythia8->ReadString("4122:onIfAll = 13");
537// Sigma_c -> mu X
538 fPythia8->ReadString("4132:onMode = off");
539 fPythia8->ReadString("4132:onIfAll = 13");
540// Sigma_c -> mu X
541 fPythia8->ReadString("4232:onMode = off");
542 fPythia8->ReadString("4232:onIfAll = 13");
543// Omega_c -> mu X
544 fPythia8->ReadString("4332:onMode = off");
545 fPythia8->ReadString("4332:onIfAll = 13");
546 break;
547 case kZDiMuon:
548// Z -> mu+ mu-
549 fPythia8->ReadString("23:onMode = off");
550 fPythia8->ReadString("23:onIfAll = 13 13");
551 break;
552 case kZDiElectron:
553// Z -> e+ e-
554 fPythia8->ReadString("23:onMode = off");
555 fPythia8->ReadString("23:onIfAll = 11 11");
556 break;
557 case kHadronicD:
558 ForceHadronicD(1);
559 break;
560 case kHadronicDWithout4Bodies:
561 ForceHadronicD(0);
562 break;
563 case kPhiKK:
564 // Phi-> K+ K-
565 fPythia8->ReadString("333:onMode = off");
566 fPythia8->ReadString("333:onIfAll = 321 321");
567 break;
568 case kOmega:
569 // Omega -> Lambda K
570 fPythia8->ReadString("3334:onMode = off");
571 fPythia8->ReadString("3334:onIfAll = 3122 321 ");
572 break;
573 case kLambda:
574 // Lambda -> p pi-
575 fPythia8->ReadString("3122:onMode = off");
576 fPythia8->ReadString("3122:onIfAll = 2212 211 ");
577 break;
578 case kBeautyUpgrade:
579 fPythia8->ReadString("5122:onMode = off");
580 fPythia8->ReadString("4122:onMode = off");
581 fPythia8->ReadString("5122:onIfAll = 4122");
582 fPythia8->ReadString("4122:onIfAll = 3122");
583 break;
584 case kAll:
585 break;
586 case kNoDecay:
587 fPythia8->ReadString("HadronLevel:Decay = off");
588 break;
589 case kNoDecayHeavy:
590 case kNoDecayBeauty:
591 case kNeutralPion:
592 case kPsiPrimeJpsiDiElectron:
593 case kElectronEM:
594 case kGammaEM:
595 case kDiElectronEM:
596 break;
597 }
598}
599
600Float_t AliDecayerPythia8::GetPartialBranchingRatio(Int_t ipart)
601{
602 // Get the partial branching ration for the forced decay channels
603
604 Pythia8::Pythia* thePythia = fPythia8->Pythia8();
605 Pythia8::ParticleData & table = thePythia->particleData;
606 Pythia8::ParticleDataEntry* pd = table.particleDataEntryPtr(ipart);
607
608 Int_t nc = pd->sizeChannels();
609 Float_t br = 0.;
610//
611// Loop over decay channels
612 for (Int_t ic = 0; ic < nc; ic++) {
613 Pythia8::DecayChannel& decCh = pd->channel(ic);
614 for (Int_t i = 0; i < decCh.multiplicity(); i++) {
615 br += decCh.bRatio();
616 }
617 }
618 return (br);
619}
620
621
622Float_t AliDecayerPythia8::GetLifetime(Int_t kf)
623{
624 // Return lifetime of particle
625 Pythia8::Pythia* thePythia = fPythia8->Pythia8();
626 Pythia8::ParticleData& table = thePythia->particleData;
627 Float_t tau = table.tau0(kf);
628 return (tau);
629}
630
631void AliDecayerPythia8::SwitchOffHeavyFlavour()
632{
633 // Switch off heavy flavour production
634 //
635// Maximum number of quark flavours used in pdf
636 fPythia8->ReadString("PDFinProcess:nQuarkIn = 3");
637// Maximum number of flavors that can be used in showers
638 fPythia8->ReadString("SpaceShower:nQuarkIn = 3");
639 fPythia8->ReadString("TimeShower:nGammaToQuark = 3");
640 fPythia8->ReadString("TimeShower:nGluonToQuark = 3");
641}
642
643
644void AliDecayerPythia8::ForceHadronicD(Int_t optUse4Bodies)
645{
646//
647// Force golden D decay modes
648//
649 // K* -> K pi
650 fPythia8->ReadString("313:onMode = off");
651 fPythia8->ReadString("313:onIfAll = 321 211");
652 // for Ds -> Phi pi+
653 fPythia8->ReadString("333:onMode = off");
654 fPythia8->ReadString("333:onIfAll = 321 321");
655 // for D0 -> rho0 pi+ k-
656 fPythia8->ReadString("113:onMode = off");
657 fPythia8->ReadString("113:onIfAll = 211 211");
658 // for Lambda_c -> Delta++ K-
659 fPythia8->ReadString("2224:onMode = off");
660 fPythia8->ReadString("2224:onIfAll = 2212 211");
661 // for Lambda_c -> Lambda(1520) K-
662 fPythia8->ReadString("3124:onMode = off");
663 fPythia8->ReadString("3124:onIfAll = 2212 321");
664
665
666 fPythia8->ReadString("411:onMode = off");
667 fPythia8->ReadString("421:onMode = off");
668 fPythia8->ReadString("431:onMode = off");
669 fPythia8->ReadString("4112:onMode = off");
670 fPythia8->ReadString("4122:onMode = off");
671
672 // D+/- -> K pi pi
673 fPythia8->ReadString("411:onIfMatch = 321 211 211");
674 // D+/- -> K* pi
675 fPythia8->ReadString("411:onIfMatch = 313 211");
676 // D0 -> K pi
677 fPythia8->ReadString("421:onIfMatch = 321 211");
678
679 if (optUse4Bodies) {
680 // D0 -> K pi pi pi
681 fPythia8->ReadString("421:onIfMatch = 321 211 211 211");
682 // D0 -> K pi rho
683 fPythia8->ReadString("421:onIfMatch = 321 211 113");
684 // D0 -> K*0 pi pi
685 fPythia8->ReadString("421:onIfMatch = 313 211 211");
686 }
687
688 // D_s -> K K*
689 fPythia8->ReadString("431:onIfMatch = 321 313");
690 // D_s -> Phi pi
691 fPythia8->ReadString("431:onIfMatch = 333 211");
692
693 // Lambda_c -> p K*
694 fPythia8->ReadString("4122:onIfMatch = 2212 313");
695 // Lambda_c -> Delta K
696 fPythia8->ReadString("4122:onIfMatch = 2224 321");
697 // Lambda_c -> Lambda(1520) pi
698 fPythia8->ReadString("4122:onIfMatch = 3124 211");
699 // Lambda_c -> p K pi
700 fPythia8->ReadString("4122:onIfMatch = 2212 321 211");
701 // Lambda_c -> Lambda pi
702 fPythia8->ReadString("4122:onIfMatch = 3122 211");
703
704}
705
706//___________________________________________________________________________
707void AliDecayerPythia8::ReadDecayTable()
708{
709 //to read a decay table (not yet implemented)
710}
711
712
713//___________________________________________________________________________
714void AliDecayerPythia8::AppendParticle(Int_t pdg, TLorentzVector* p)
715{
716 // Append a particle to the stack
717 fPythia8->Pythia8()->event.append(pdg, 11, 0, 0, p->Px(), p->Py(), p->Pz(), p->E(), p->M());
718}
719
720
721//___________________________________________________________________________
722void AliDecayerPythia8::ClearEvent()
723{
724 // Clear the event stack
725 fPythia8->Pythia8()->event.clear();
726}
727