Stupid bug fix in new superlight mode (from Zurich airport)
[u/mrichter/AliRoot.git] / PYTHIA8 / AliPythia8.cxx
CommitLineData
cc545eb9 1
2/**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
7 * *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
16
17/* $Id$ */
18#include <TString.h>
19#include <TVector3.h>
20#include <TMath.h>
21
22#include "AliPythia8.h"
23#include "AliLog.h"
24#include "AliStack.h"
25#include "AliPythiaRndm.h"
26
27
28ClassImp(AliPythia8)
29
30// Particles produced in string fragmentation point directly to either of the two endpoints
31// of the string (depending in the side they were generated from).
32// SetMSTU(16,2); // ????
33// String drawing almost completely minimizes string length.
34// Probability that an additional interaction gives two gluons
35// ... with color connection to nearest neighbours
36// SetPARP(85,0.9);
37// ... as closed gluon loop
38// SetPARP(86,0.95);
39// Lambda_FSR scale.
40// SetPARJ(81, 0.29);
41// Baryon production model
42// SetMSTJ(12,3);
43// String fragmentation
44// SetMSTJ(1,1);
45// sea quarks can be used for baryon formation
46// SetMSTP(88,2);
47// choice of max. virtuality for ISR
48// SetMSTP(68,1);
49// regularisation scheme of ISR
50// SetMSTP(70,2);
51// all resonance decays switched on
52// SetMSTP(41,1);
53AliPythia8* AliPythia8::fgAliPythia8=NULL;
54
55AliPythia8::AliPythia8():
b584e2f5 56 AliTPythia8(),
43ce853a 57 // AliPythiaBase(),
cc545eb9 58 fProcess(kPyMb),
59 fEcms(0.),
60 fStrucFunc(kCTEQ5L),
b062cb58 61 fCellJet(),
cc545eb9 62 fEtSeed(0.),
63 fMinEtJet(0.),
64 fRJet(0.),
b062cb58 65 fClusterJet(),
cc545eb9 66 fYScale(0.),
67 fPtScale(0.),
68 fNJetMin(0),
69 fNJetMax(0)
70{
71// Default Constructor
72//
73// Set random number
74 if (!AliPythiaRndm::GetPythiaRandom())
75 AliPythiaRndm::SetPythiaRandom(GetRandom());
76}
77
78AliPythia8::AliPythia8(const AliPythia8& pythia):
b584e2f5 79 AliTPythia8(),
43ce853a 80 // AliPythiaBase(),
cc545eb9 81 fProcess(kPyMb),
82 fEcms(0.),
83 fStrucFunc(kCTEQ5L),
b062cb58 84 fCellJet(),
cc545eb9 85 fEtSeed(0.),
86 fMinEtJet(0.),
87 fRJet(0.),
b062cb58 88 fClusterJet(),
cc545eb9 89 fYScale(0.),
90 fPtScale(0.),
91 fNJetMin(0),
92 fNJetMax(0)
93{
94 // Copy Constructor
95 pythia.Copy(*this);
96}
97
75d4f39e 98void AliPythia8::ProcInit(Process_t process, Float_t energy, StrucFunc_t strucfunc, Int_t tune)
cc545eb9 99{
100// Initialise the process to generate
101 if (!AliPythiaRndm::GetPythiaRandom())
102 AliPythiaRndm::SetPythiaRandom(GetRandom());
103
104 fProcess = process;
105 fEcms = energy;
106 fStrucFunc = strucfunc;
94f5906f 107 ReadString("111:mayDecay = on");
108//...Switch off decay of K0L, Lambda, Sigma+-, Xi0-, Omega-.
cc545eb9 109 ReadString("310:mayDecay = off");
110 ReadString("3122:mayDecay = off");
111 ReadString("3112:mayDecay = off");
112 ReadString("3212:mayDecay = off");
113 ReadString("3222:mayDecay = off");
114 ReadString("3312:mayDecay = off");
115 ReadString("3322:mayDecay = off");
116 ReadString("3334:mayDecay = off");
117 // Select structure function
831dbcb2 118 ReadString("PDF:useLHAPDF = on");
119 ReadString(Form("PDF:LHAPDFset = %s", AliStructFuncType::PDFsetName(fStrucFunc).Data()));
120 // Particles produced in string fragmentation point directly to either of the two endpoints
cc545eb9 121 // of the string (depending in the side they were generated from).
122
123// SetMSTU(16,2); // ????
124
125//
126// Pythia initialisation for selected processes//
127//
128 switch (process)
129 {
130 case kPyOldUEQ2ordered: //Old underlying events with Q2 ordered QCD processes
131// Multiple interactions on.
132 ReadString("PartonLevel:MI = on");
133// Double Gaussian matter distribution.
75d4f39e 134 ReadString("MultipartonInteractions:bProfile = 2");
135 ReadString("MultipartonInteractions:coreFraction = 0.5");
136 ReadString("MultipartonInteractions:coreRadius = 0.4");
cc545eb9 137// pT0.
75d4f39e 138 ReadString("MultipartonInteractions:pTmin = 2.0");
cc545eb9 139// Reference energy for pT0 and energy rescaling pace.
75d4f39e 140 ReadString("MultipartonInteractions:ecmRef = 1800.");
141 ReadString("MultipartonInteractions:ecmPow = 0.25");
cc545eb9 142// String drawing almost completely minimizes string length.
143// SetPARP(85,0.9);
144// SetPARP(86,0.95);
145// ISR and FSR activity.
146// Q^2 scale of the hard scattering
147 ReadString("SigmaProcess:factorMultFac = 4.");
148// Lambda_FSR scale.
149// SetPARJ(81, 0.29);
150 break;
151 case kPyOldUEQ2ordered2:
152// Old underlying events with Q2 ordered QCD processes
153// Multiple interactions on.
154 ReadString("PartonLevel:MI = on");
155// Double Gaussian matter distribution.
156 ReadString("MultipleInteractions:bProfile = 2");
157 ReadString("MultipleInteractions:coreFraction = 0.5");
158 ReadString("MultipleInteractions:coreRadius = 0.4");
159// pT0.
160 ReadString("MultipleInteractions:pTmin = 2.0");
161// Reference energy for pT0 and energy rescaling pace.
162 ReadString("MultipleInteractions:ecmRef = 1800.");
163 ReadString("MultipleInteractions:ecmPow = 0.16");
164// String drawing almost completely minimizes string length.
165// SetPARP(85,0.9);
166// SetPARP(86,0.95);
167// ISR and FSR activity.
168 ReadString("SigmaProcess:factorMultFac = 4.");
169// Lambda_FSR scale.
170// SetPARJ(81,0.29);
171 break;
172 case kPyOldPopcorn:
173// Old production mechanism: Old Popcorn
174 ReadString("HardQCD:all = on");
175// SetMSTJ(12,3);
176// (D=2) Like MSTJ(12)=2 but added prod ofthe 1er rank baryon
177// SetMSTP(88,2);
178// (D=1)see can be used to form baryons (BARYON JUNCTION)
179// SetMSTJ(1,1);
180 AtlasTuning();
181 break;
182 case kPyCharm:
183 ReadString("HardQCD:gg2ccbar = on");
184 ReadString("HardQCD:qqbar2ccbar = on");
185// heavy quark masses
186 ReadString("ParticleData:mcRun = 1.2");
187//
188// primordial pT
7d09f746 189 ReadString("BeamRemnants:primordialKT = on");
190 ReadString("BeamRemnants:primordialKTsoft = 0.");
191 ReadString("BeamRemnants:primordialKThard = 1.");
192 ReadString("BeamRemnants:halfScaleForKT = 0.");
193 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 194 break;
195 case kPyBeauty:
196 ReadString("HardQCD:gg2bbbar = on");
197 ReadString("HardQCD:qqbar2bbbar = on");
198 ReadString("ParticleData:mbRun = 4.75");
199 break;
200 case kPyJpsi:
201// gg->J/Psi g
202 ReadString("Charmonium:gg2QQbar[3S1(1)]g = on");
203 break;
204 case kPyJpsiChi:
205 ReadString("Charmonium:all = on");
206 break;
207 case kPyCharmUnforced:
208// gq->qg
209 ReadString("HardQCD:gq2qg = on");
210// gg->qq
211 ReadString("HardQCD:gg2qq = on");
212// gg->gg
213 ReadString("HardQCD:gg2gg = on");
214 break;
215 case kPyBeautyUnforced:
216// gq->qg
217 ReadString("HardQCD:gq2qg = on");
218// gg->qq
219 ReadString("HardQCD:gg2qq = on");
220// gg->gg
221 ReadString("HardQCD:gg2gg = on");
222 break;
223 case kPyMb:
224// Minimum Bias pp-Collisions
225//
226//
227// select Pythia min. bias model
228// single diffraction AB-->XB
229 ReadString("SoftQCD:minBias = on");
230 ReadString("SoftQCD:singleDiffractive = on");
231 ReadString("SoftQCD:doubleDiffractive = on");
75d4f39e 232 if (tune == -1) AtlasTuning();
cc545eb9 233 break;
234 case kPyMbDefault:
235// Minimum Bias pp-Collisions
236//
237//
238// select Pythia min. bias model
239 ReadString("SoftQCD:minBias = on");
240 ReadString("SoftQCD:singleDiffractive = on");
241 ReadString("SoftQCD:doubleDiffractive = on");
75d4f39e 242 ReadString("SoftQCD:doubleDiffractive = on");
243 if (tune > -1) ReadString(Form("Tune:pp = %3d", tune));
831dbcb2 244 ReadString("PDF:useLHAPDF = off");
cc545eb9 245 break;
246 case kPyLhwgMb:
247// Les Houches Working Group 05 Minimum Bias pp-Collisions: hep-ph/0604120
248// -> Pythia 6.3 or above is needed
249//
250 ReadString("SoftQCD:minBias = on");
251 ReadString("SoftQCD:singleDiffractive = on");
252 ReadString("SoftQCD:doubleDiffractive = on");
253 ReadString(Form("PDF:LHAPDFset = %s", AliStructFuncType::PDFsetName(kCTEQ6ll).Data()));
254
255// SetMSTP(68,1);
256// SetMSTP(70,2);
257// ReadString("PartonLevel:MI = on");
258// Double Gaussian matter distribution.
259 ReadString("MultipleInteractions:bProfile = 2");
260 ReadString("MultipleInteractions:coreFraction = 0.5");
261 ReadString("MultipleInteractions:coreRadius = 0.5");
262 ReadString("MultipleInteractions:expPow = 0.16");
263 ReadString("MultipleInteractions:pTmin = 2.3");
264// SetMSTP(88,1);
265// SetPARP(85,0.9); // Regulates gluon prod. mechanism
266 break;
267 case kPyMbNonDiffr:
268// Minimum Bias pp-Collisions
269//
270//
271// select Pythia min. bias model
272 ReadString("SoftQCD:minBias = on");
273 AtlasTuning();
274 break;
275 case kPyMbMSEL1:
276 ConfigHeavyFlavor();
277// Intrinsic <kT^2>
7d09f746 278 ReadString("BeamRemnants:primordialKT = on");
279 ReadString("BeamRemnants:primordialKTsoft = 0.");
280 ReadString("BeamRemnants:primordialKThard = 1.");
281 ReadString("BeamRemnants:halfScaleForKT = 0.");
282 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 283// Set Q-quark mass
284 ReadString("ParticleData:mcRun = 1.20");
285 ReadString("ParticleData:mbRun = 4.78");
286// Atlas Tuning
287 AtlasTuning();
288 break;
289 case kPyJets:
290//
291// QCD Jets
292//
293 ReadString("HardQCD:all = on");
294//
295// Pythia Tune A (CDF)
296//
297 ReadString("PartonLevel:MI = on");
298 ReadString("MultipleInteractions:pTmin = 2.0");
299 ReadString("MultipleInteractions:pT0Ref = 2.8");
300 ReadString("MultipleInteractions:ecmRef = 1800.");
301 ReadString("MultipleInteractions:expPow = 0.25");
302 ReadString("MultipleInteractions:bProfile = 2");
303 ReadString("MultipleInteractions:coreFraction = 0.16");
304 ReadString("MultipleInteractions:coreRadius = 0.4");
305 ReadString("SigmaProcess:factorMultFac = 2.5");
306// SetPARP(85,0.90) ; // Regulates gluon prod. mechanism
307// SetPARP(86,0.95); // Regulates gluon prod. mechanism
308 break;
309 case kPyDirectGamma:
310 ReadString("PromptPhoton:all = on");
311 break;
312 case kPyCharmPbPbMNR:
313 case kPyD0PbPbMNR:
314 case kPyDPlusPbPbMNR:
315 case kPyDPlusStrangePbPbMNR:
316 // Tuning of Pythia parameters aimed to get a resonable agreement
317 // between with the NLO calculation by Mangano, Nason, Ridolfi for the
318 // c-cbar single inclusive and double differential distributions.
319 // This parameter settings are meant to work with Pb-Pb collisions
320 // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
321 // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
322 // has to be set to 2.1GeV. Example in ConfigCharmPPR.C.
323 ConfigHeavyFlavor();
324 // Intrinsic <kT>
7d09f746 325 ReadString("BeamRemnants:primordialKT = on");
326 ReadString("BeamRemnants:primordialKTsoft = 0.");
327 ReadString("BeamRemnants:primordialKThard = 1.304");
328 ReadString("BeamRemnants:halfScaleForKT = 0.");
329 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 330 // Set c-quark mass
331 ReadString("ParticleData:mcRun = 1.20");
332 break;
333 case kPyCharmpPbMNR:
334 case kPyD0pPbMNR:
335 case kPyDPluspPbMNR:
336 case kPyDPlusStrangepPbMNR:
337 // Tuning of Pythia parameters aimed to get a resonable agreement
338 // between with the NLO calculation by Mangano, Nason, Ridolfi for the
339 // c-cbar single inclusive and double differential distributions.
340 // This parameter settings are meant to work with p-Pb collisions
341 // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
342 // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
343 // has to be set to 2.1GeV. Example in ConfigCharmPPR.C.
344 ConfigHeavyFlavor();
345 // Intrinsic <kT>
7d09f746 346 ReadString("BeamRemnants:primordialKT = on");
347 ReadString("BeamRemnants:primordialKTsoft = 0.");
348 ReadString("BeamRemnants:primordialKThard = 1.16");
349 ReadString("BeamRemnants:halfScaleForKT = 0.");
350 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 351 // Set c-quark mass
352 ReadString("ParticleData:mcRun = 1.20");
353 break;
354 case kPyCharmppMNR:
355 case kPyD0ppMNR:
356 case kPyDPlusppMNR:
357 case kPyDPlusStrangeppMNR:
7d09f746 358 case kPyLambdacppMNR:
cc545eb9 359 // Tuning of Pythia parameters aimed to get a resonable agreement
360 // between with the NLO calculation by Mangano, Nason, Ridolfi for the
361 // c-cbar single inclusive and double differential distributions.
362 // This parameter settings are meant to work with pp collisions
363 // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
364 // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
365 // has to be set to 2.1GeV. Example in ConfigCharmPPR.C.
366 ConfigHeavyFlavor();
367 // Intrinsic <kT^2>
7d09f746 368 ReadString("BeamRemnants:primordialKT = on");
369 ReadString("BeamRemnants:primordialKTsoft = 0.");
370 ReadString("BeamRemnants:primordialKThard = 1.");
371 ReadString("BeamRemnants:halfScaleForKT = 0.");
372 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 373 // Set c-quark mass
374 ReadString("ParticleData:mcRun = 1.20");
375 break;
376 case kPyCharmppMNRwmi:
377 // Tuning of Pythia parameters aimed to get a resonable agreement
378 // between with the NLO calculation by Mangano, Nason, Ridolfi for the
379 // c-cbar single inclusive and double differential distributions.
380 // This parameter settings are meant to work with pp collisions
381 // and with kCTEQ5L PDFs.
382 // Added multiple interactions according to ATLAS tune settings.
383 // To get a "reasonable" agreement with MNR results, events have to be
384 // generated with the minimum ptHard (AliGenPythia::SetPtHard)
385 // set to 2.76 GeV.
386 // To get a "perfect" agreement with MNR results, events have to be
387 // generated in four ptHard bins with the following relative
388 // normalizations:
389 // 2.76-3 GeV: 25%
390 // 3-4 GeV: 40%
391 // 4-8 GeV: 29%
392 // >8 GeV: 6%
393 ConfigHeavyFlavor();
394 // Intrinsic <kT^2>
7d09f746 395 ReadString("BeamRemnants:primordialKT = on");
396 ReadString("BeamRemnants:primordialKTsoft = 0.");
397 ReadString("BeamRemnants:primordialKThard = 1.");
398 ReadString("BeamRemnants:halfScaleForKT = 0.");
399 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 400 // Set c-quark mass
401 ReadString("ParticleData:mcRun = 1.20");
402 AtlasTuning();
403 break;
404 case kPyBeautyPbPbMNR:
405 // Tuning of Pythia parameters aimed to get a resonable agreement
406 // between with the NLO calculation by Mangano, Nason, Ridolfi for the
407 // b-bbar single inclusive and double differential distributions.
408 // This parameter settings are meant to work with Pb-Pb collisions
409 // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
410 // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
411 // has to be set to 2.75GeV. Example in ConfigBeautyPPR.C.
412 ConfigHeavyFlavor();
413 // QCD scales
414 ReadString("SigmaProcess:factorMultFac = 1.");
415 // Intrinsic <kT>
7d09f746 416 ReadString("BeamRemnants:primordialKT = on");
417 ReadString("BeamRemnants:primordialKTsoft = 0.");
418 ReadString("BeamRemnants:primordialKThard = 2.035");
419 ReadString("BeamRemnants:halfScaleForKT = 0.");
420 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 421 // Set b-quark mass
422 ReadString("ParticleData:mbRun = 4.75");
423 break;
424 case kPyBeautypPbMNR:
425 // Tuning of Pythia parameters aimed to get a resonable agreement
426 // between with the NLO calculation by Mangano, Nason, Ridolfi for the
427 // b-bbar single inclusive and double differential distributions.
428 // This parameter settings are meant to work with p-Pb collisions
429 // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
430 // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
431 // has to be set to 2.75GeV. Example in ConfigBeautyPPR.C.
432 ConfigHeavyFlavor();
433 // QCD scales
434 ReadString("SigmaProcess:factorMultFac = 1.");
435 // Intrinsic <kT>
7d09f746 436 ReadString("BeamRemnants:primordialKT = on");
437 ReadString("BeamRemnants:primordialKTsoft = 0.");
438 ReadString("BeamRemnants:primordialKThard = 1.6");
439 ReadString("BeamRemnants:halfScaleForKT = 0.");
440 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 441 // Set b-quark mass
442 ReadString("ParticleData:mbRun = 4.75");
443 break;
444 case kPyBeautyppMNR:
445 // Tuning of Pythia parameters aimed to get a resonable agreement
446 // between with the NLO calculation by Mangano, Nason, Ridolfi for the
447 // b-bbar single inclusive and double differential distributions.
448 // This parameter settings are meant to work with pp collisions
449 // (AliGenPythia::SetNuclei) and with kCTEQ4L PDFs.
450 // To get a good agreement the minimum ptHard (AliGenPythia::SetPtHard)
451 // has to be set to 2.75GeV. Example in ConfigBeautyPPR.C.
452 ConfigHeavyFlavor();
453 // QCD scales
454 ReadString("SigmaProcess:factorMultFac = 1.");
455 // Intrinsic <kT>
7d09f746 456 ReadString("BeamRemnants:primordialKT = on");
457 ReadString("BeamRemnants:primordialKTsoft = 0.");
458 ReadString("BeamRemnants:primordialKThard = 1.0");
459 ReadString("BeamRemnants:halfScaleForKT = 0.");
460 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 461 // Set b-quark mass
462 ReadString("ParticleData:mbRun = 4.75");
463 break;
464 case kPyBeautyppMNRwmi:
465 // Tuning of Pythia parameters aimed to get a resonable agreement
466 // between with the NLO calculation by Mangano, Nason, Ridolfi for the
467 // b-bbar single inclusive and double differential distributions.
468 // This parameter settings are meant to work with pp collisions
469 // and with kCTEQ5L PDFs.
470 // Added multiple interactions according to ATLAS tune settings.
471 // To get a "reasonable" agreement with MNR results, events have to be
472 // generated with the minimum ptHard (AliGenPythia::SetPtHard)
473 // set to 2.76 GeV.
474 // To get a "perfect" agreement with MNR results, events have to be
475 // generated in four ptHard bins with the following relative
476 // normalizations:
477 // 2.76-4 GeV: 5%
478 // 4-6 GeV: 31%
479 // 6-8 GeV: 28%
480 // >8 GeV: 36%
481 ConfigHeavyFlavor();
482 // QCD scales
483 ReadString("SigmaProcess:factorMultFac = 1.");
484 // Intrinsic <kT>
7d09f746 485 ReadString("BeamRemnants:primordialKT = on");
486 ReadString("BeamRemnants:primordialKTsoft = 0.");
487 ReadString("BeamRemnants:primordialKThard = 1.0");
488 ReadString("BeamRemnants:halfScaleForKT = 0.");
489 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 490 // Set b-quark mass
491 ReadString("ParticleData:mbRun = 4.75");
492 AtlasTuning();
493 break;
494 case kPyW:
495 //Inclusive production of W+/-
496 //f fbar -> W+
497 ReadString("WeakSingleBoson:ffbar2W = on");
498 // Initial/final parton shower on (Pythia default)
499 // With parton showers on we are generating "W inclusive process"
500 ReadString("PartonLevel:ISR = on");
501 ReadString("PartonLevel:FSR = on");
502 break;
503 case kPyZ:
504 //Inclusive production of Z
505 //f fbar -> Z/gamma
506 ReadString("WeakSingleBoson:ffbar2gmZ = on");
507 //only Z included, not gamma
508 ReadString("WeakZ0:gmZmode = 2");
509 // Initial/final parton shower on (Pythia default)
510 // With parton showers on we are generating "Z inclusive process"
511 ReadString("PartonLevel:ISR = on");
512 ReadString("PartonLevel:FSR = on");
df607629 513 break;
514 case kPyZgamma:
515 //Inclusive production of Z/gamma*
516 //f fbar -> Z/gamma
517 ReadString("WeakSingleBoson:ffbar2gmZ = on");
518 // Initial/final parton shower on (Pythia default)
519 // With parton showers on we are generating "Z inclusive process"
520 ReadString("PartonLevel:ISR = on");
521 ReadString("PartonLevel:FSR = on");
522 break;
9a8774a1 523 case kPyMBRSingleDiffraction:
f0240439 524 ReadString("Diffraction:PomFlux = 5");
9a8774a1 525 ReadString("SoftQCD:singleDiffractive = on");
526 break;
527 case kPyMBRDoubleDiffraction:
f0240439 528 ReadString("Diffraction:PomFlux = 5");
9a8774a1 529 ReadString("SoftQCD:doubleDiffractive = on");
530 break;
531 case kPyMBRCentralDiffraction:
f0240439 532 ReadString("Diffraction:PomFlux = 5");
9a8774a1 533 ReadString("SoftQCD:centralDiffractive = on");
534 break;
1310079f 535 case kPyMbWithDirectPhoton:
536 case kPyBeautyJets:
537 case kPyMbAtlasTuneMC09:
538 break;
cc545eb9 539 }
540//
541// Initialize PYTHIA
542// SetMSTP(41,1); // all resonance decays switched on
543 Initialize(2212, 2212, fEcms);
544}
545
546void AliPythia8::SetNuclei(Int_t /*a1*/, Int_t /*a2*/)
547{
548// Treat protons as inside nuclei with mass numbers a1 and a2
549// The MSTP array in the PYPARS common block is used to enable and
550// select the nuclear structure functions.
551// MSTP(52) : (D=1) choice of proton and nuclear structure-function library
552// =1: internal PYTHIA acording to MSTP(51)
553// =2: PDFLIB proton s.f., with MSTP(51) = 1000xNGROUP+NSET
554// If the following mass number both not equal zero, nuclear corrections of the stf are used.
555// MSTP(192) : Mass number of nucleus side 1
556// MSTP(193) : Mass number of nucleus side 2
557// SetMSTP(52,2);
558// SetMSTP(192, a1);
559// SetMSTP(193, a2);
560}
561
562
563AliPythia8* AliPythia8::Instance()
564{
565// Set random number generator
566 if (fgAliPythia8) {
567 return fgAliPythia8;
568 } else {
569 fgAliPythia8 = new AliPythia8();
570 return fgAliPythia8;
571 }
572}
573
574void AliPythia8::PrintParticles()
575{
576// Print list of particl properties
577 ReadString("Main:showAllParticleData");
578}
579
580void AliPythia8::ResetDecayTable()
581{
582// Set default values for pythia decay switches
583// Int_t i;
584// for (i = 1; i < 501; i++) SetMDCY(i,1,fDefMDCY[i]);
585// for (i = 1; i < 2001; i++) SetMDME(i,1,fDefMDME[i]);
586}
587
588void AliPythia8::SetDecayTable()
589{
590// Set default values for pythia decay switches
591//
592// Int_t i;
593// for (i = 1; i < 501; i++) fDefMDCY[i] = GetMDCY(i,1);
594// for (i = 1; i < 2001; i++) fDefMDME[i] = GetMDME(i,1);
595}
596
597void AliPythia8::Pyclus(Int_t& njet)
598{
599// Call Pythia clustering algorithm
600//
601 Bool_t ok = fClusterJet.analyze(Pythia8()->event, fYScale, fPtScale, fNJetMin, fNJetMax);
602 njet = 0;
603 if (ok) njet = fClusterJet.size();
604}
605
606void AliPythia8::Pycell(Int_t& njet)
607{
608// Call Pythia jet reconstruction algorithm
609//
610 Bool_t ok = fCellJet.analyze(Pythia8()->event, fMinEtJet, fRJet, fEtSeed);
611 njet = 0;
612 if (ok) njet = fCellJet.size();
613}
614
615void AliPythia8::GetJet(Int_t i, Float_t& px, Float_t& py, Float_t& pz, Float_t& e)
616{
617 // Get jet number i
618 Float_t et = fCellJet.eT(i);
619 px = et * TMath::Cos(fCellJet.phiWeighted(i));
620 py = et * TMath::Sin(fCellJet.phiWeighted(i));
621 pz = et * TMath::SinH(fCellJet.etaWeighted(i));
622 e = et * TMath::CosH(fCellJet.etaWeighted(i));
623}
624
625void AliPythia8::GenerateEvent()
626{
627 // Generate one event
b584e2f5 628 AliTPythia8::GenerateEvent();
cc545eb9 629}
630
631void AliPythia8::GenerateMIEvent()
632{
633 // New multiple interaction scenario
634 AliWarning("Not implemented. No event will be generated");
635}
636
637void AliPythia8::PrintStatistics()
638{
639 // End of run statistics
b584e2f5 640 AliTPythia8::PrintStatistics();
cc545eb9 641}
642
643void AliPythia8::EventListing()
644{
645 // End of run statistics
b584e2f5 646 AliTPythia8::EventListing();
cc545eb9 647}
648
649Int_t AliPythia8::ProcessCode()
650{
651 // Returns the subprocess code for the current event
60747902 652 return Pythia8()->info.code();
cc545eb9 653}
654
655void AliPythia8::ConfigHeavyFlavor()
656{
657 //
658 // Default configuration for Heavy Flavor production
659 //
660 // All QCD processes
661 //
662 ReadString("HardQCD:all = on");
663
664 // No multiple interactions
665 ReadString("PartonLevel:MI = off");
666 ReadString("MultipleInteractions:pTmin = 0.0");
667 ReadString("MultipleInteractions:pT0Ref = 0.0");
668
669 // Initial/final parton shower on (Pythia default)
670 ReadString("PartonLevel:ISR = on");
671 ReadString("PartonLevel:FSR = on");
672
673 // 2nd order alpha_s
674 ReadString("SigmaProcess:alphaSorder = 2");
675
676 // QCD scales
677 ReadString("SigmaProcess:renormScale2 = 2");
678 ReadString("SigmaProcess:renormMultFac = 1.");
679}
680
681void AliPythia8::AtlasTuning()
682{
683 //
684 // Configuration for the ATLAS tuning
685 ReadString(Form("PDF:LHAPDFset = %s", AliStructFuncType::PDFsetName(kCTEQ5L).Data()));
686 ReadString("PartonLevel:MI = on");
687 ReadString("MultipleInteractions:pTmin = 1.9");
688 ReadString("MultipleInteractions:pT0Ref = 1.8");
689 ReadString("MultipleInteractions:ecmRef = 1000.");
690 ReadString("MultipleInteractions:expPow = 0.16");
691 ReadString("MultipleInteractions:bProfile = 2");
692 ReadString("MultipleInteractions:coreFraction = 0.16");
693 ReadString("MultipleInteractions:coreRadius = 0.5");
694// SetPARP(85,0.33); // Regulates gluon prod. mechanism
695// SetPARP(86,0.66); // Regulates gluon prod. mechanism
696 ReadString("SigmaProcess:factorMultFac = 1.");
75d4f39e 697
cc545eb9 698}
699
700void AliPythia8::SetPtHardRange(Float_t ptmin, Float_t ptmax)
701{
702 // Set the pt hard range
703 ReadString(Form("PhaseSpace:pTHatMin = %13.3f", ptmin));
704 ReadString(Form("PhaseSpace:pTHatMax = %13.3f", ptmax));
705}
706
707void AliPythia8::SetYHardRange(Float_t /*ymin*/, Float_t /*ymax*/)
708{
709 // Set the y hard range
710 printf("YHardRange not implemented in Pythia8 !!!\n");
711
712}
713
714
715void AliPythia8::SetFragmentation(Int_t flag)
716{
717 // Switch fragmentation on/off
718 if (flag) {
719 ReadString("HadronLevel:Hadronize = on");
720 } else {
721 ReadString("HadronLevel:Hadronize = off");
722 }
723}
724
725void AliPythia8::SetInitialAndFinalStateRadiation(Int_t flag1, Int_t flag2)
726{
727// initial state radiation
728 if (flag1) {
729 ReadString("PartonLevel:ISR = on");
730 } else {
731 ReadString("PartonLevel:ISR = off");
732 }
733// final state radiation
734 if (flag2) {
735 ReadString("PartonLevel:FSR = on");
736 } else {
737 ReadString("PartonLevel:FSR = off");
738 }
739}
740
741void AliPythia8::SetIntrinsicKt(Float_t kt)
742{
c014d45a 743// Set the intrinsic kt
7d09f746 744 ReadString("BeamRemnants:primordialKT = on");
745 ReadString("BeamRemnants:primordialKTsoft = 0.");
746 ReadString(Form("BeamRemnants:primordialKThard = %13.3f", kt));
747 ReadString("BeamRemnants:halfScaleForKT = 0.");
748 ReadString("BeamRemnants:halfMassForKT = 0.");
cc545eb9 749}
750
751void AliPythia8::SwitchHFOff()
752{
753 // Switch off heavy flavor
754 // Maximum number of quark flavours used in pdf
755 ReadString("PDFinProcess:nQuarkIn = 3");
756 // Maximum number of flavors that can be used in showers
757 ReadString("TimeShower:nGluonToQuark = 3");
758 ReadString("SpaceShower:nQuarkIn = 3");
759
760
761}
762
763void AliPythia8::SetPycellParameters(Float_t etaMax, Int_t nEta, Int_t nPhi,
764 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
765{
766// Set pycell parameters
767 fCellJet = Pythia8::CellJet( etaMax, nEta, nPhi, 2, 0, 0., 0., thresh);
768 fEtSeed = etseed;
769 fMinEtJet = minet;
770 fRJet = r;
771}
772
773void AliPythia8::ModifiedSplitting()
774{
775//
776// We have to see how to implement this in Pythia8 !!!
777//
778 // Modified splitting probability as a model for quenching
779// SetPARJ(200, 0.8);
780// SetMSTJ(41, 1); // QCD radiation only
781// SetMSTJ(42, 2); // angular ordering
782// SetMSTJ(44, 2); // option to run alpha_s
783// SetMSTJ(47, 0); // No correction back to hard scattering element
784// SetMSTJ(50, 0); // No coherence in first branching
785// SetPARJ(82, 1.); // Cut off for parton showers
786}
787
788
789void AliPythia8::InitQuenching(Float_t /*cMin*/, Float_t /*cMax*/, Float_t /*k*/, Int_t /*iECMethod*/, Float_t /*zmax*/, Int_t /*ngmax*/)
790{
791 //
792 //
793 AliWarning("Not implemented !");
794}
795
796void AliPythia8::SwitchHadronisationOff()
797{
798 // Switch off hadronisation
799 ReadString("HadronLevel:Hadronize = off");
800}
801
802void AliPythia8::SwitchHadronisationOn()
803{
804 // Switch on hadronisarion
805 ReadString("HadronLevel:Hadronize = on");
806}
807
808
809void AliPythia8::GetXandQ(Float_t& x1, Float_t& x2, Float_t& q)
810{
811 // Get x1, x2 and Q for this event
812
813 q = Pythia8()->info.QFac();
814 x1 = Pythia8()->info.x1();
815 x2 = Pythia8()->info.x2();
816
817}
818
819Float_t AliPythia8::GetXSection()
820{
821 // Get the total cross-section
822 return Pythia8()->info.sigmaGen();
823}
824
825Float_t AliPythia8::GetPtHard()
826{
827 // Get the pT hard for this event
828 return Pythia8()->info.pTHat();
829}
830
831
832
833
834AliPythia8& AliPythia8::operator=(const AliPythia8& rhs)
835{
836// Assignment operator
837 rhs.Copy(*this);
838 return *this;
839}
840
841 void AliPythia8::Copy(TObject&) const
842{
843 //
844 // Copy
845 //
846 Fatal("Copy","Not implemented!\n");
847}
848
849//
850// To be implemented
851//
852void AliPythia8::SetNumberOfParticles(Int_t /*i*/)
853{
854 AliWarning("Not implemented");
855}
856
857void AliPythia8::EditEventList(Int_t /*i*/)
858{
859 AliWarning("Not implemented");
860}
861
862void AliPythia8::Pyquen(Double_t /*a*/, Int_t /*b*/, Double_t /*c*/)
863{
864 AliWarning("Cannot be used with Pythia8");
865}
866
867void AliPythia8::HadronizeEvent()
868{
869 // Needs access to HadronLevel ?
870 AliWarning("Not yet implemented");
871}
872
873void AliPythia8::GetQuenchingParameters(Double_t& /*xp*/, Double_t& /*yp*/, Double_t* /*z[4]*/)
874{
875 AliWarning("Not yet implemented");
876}
877
878void AliPythia8::LoadEvent(AliStack* /*stack*/, Int_t /*flag*/, Int_t /*reHadr*/)
879{
880 AliWarning("Not yet implemented");
881}