16 : hftype(-1), fIsLego(false)
31 if (r < 0.16) type = 0;
32 else if (r < 0.32) type = 1;
33 else if (r < 0.48) type = 2;
34 else if (r < 0.64) type = 3;
35 else if (r < 0.72) type = 4;
36 else if (r < 0.80) type = 5;
56 if (t.EndsWith(
"perugia0chadr")) g=
PythiaHF(0);
57 else if (t.EndsWith(
"perugia0bchadr")) g=
PythiaHF(1);
58 else if (t.EndsWith(
"perugia0cele")) g=
PythiaHF(2);
59 else if (t.EndsWith(
"perugia0bele")) g=
PythiaHF(3);
60 else if (t.EndsWith(
"perugia0jspi2e")) g=
PythiaHF(4);
61 else if (t.EndsWith(
"perugia0btojspi2e")) g=
PythiaHF(5);
62 else if (t.BeginsWith(
"pythia")) g=
Pythia(rt);
63 else if (t.BeginsWith(
"hijing2000hf")) g=
HFCocktail(rt, b1, b2);
64 else if (t.BeginsWith(
"hijing2000")) g=
Hijing(b1, b2, rt);
65 else if (t.BeginsWith(
"hijing")) g=
Hijing(b1, b2, rt);
66 else if (t.BeginsWith(
"ampthf")) g=
HFCocktail(rt,b1,b2);
67 else if (t.BeginsWith(
"ampt")) g=
Ampt(b1, b2, rt);
68 else if (t.BeginsWith(
"dpmjet")) g=
Dpmjet(b1, b2);
69 else if (t.BeginsWith(
"phojet")) g=
Dpmjet(b1, b2);
70 else if (t.BeginsWith(
"hydjet")) g=
Hydjet(b1, b2);
71 else if (t.BeginsWith(
"epos-lhc")) g=
EposLHC(b1, b2);
72 else if (t.BeginsWith(
"epos")) g=
Epos(b1, b2);
73 else if (t.BeginsWith(
"therminator")) g=
Therminator(b1, b2);
74 else if (t.BeginsWith(
"lego")) g=
Lego(rt);
76 Fatal(
"",
"Invalid run type \"%s\" specified", t.Data());
77 AliPDG::AddParticlesToPdgDataBase();
87 if (runType.BeginsWith(
"hydjet"))
return 0;
90 TVirtualMCDecayer* decayer =
new AliDecayerPythia();
91 if (runType.EqualTo(
"hijing2000hf") && hftype < 2)
92 decayer->SetForceDecay(kHadronicD);
94 decayer->SetForceDecay(kAll);
111 if (!
grp->
IsPP()) Fatal(
"Setup",
"Pythia6 only works for pp");
113 TString tit(Form(
"Pythia6 %s(%d,%d)+%s(%d,%d) @ %5d b in[%4.1f,%4.1f]",
120 t.ReplaceAll(
"PYTHIA6",
"");
121 t.ReplaceAll(
"PYTHIA",
"");
122 Info(
"Setup",
"Making Pythia6 event generator (tune: %s)", t.Data());
124 tit.Append(Form(
" tune=%s", t.Data()));
127 AliGenPythia* pythia =
new AliGenPythia(-1);
128 pythia->SetMomentumRange(0, 999999.);
129 pythia->SetThetaRange(0., 180.);
130 pythia->SetYRange(-12.,12.);
131 pythia->SetPtRange(0,1000.);
132 pythia->SetProcess(kPyMb);
139 pythia->SetTune(109);
140 pythia->SetStrucFunc(kCTEQ6l);
142 else if (t ==
"PERUGIA0") {
145 pythia->SetTune(320);
146 pythia->UseNewMultipleInteractionsScenario();
148 else if (t ==
"ATLAS") {
152 pythia->SetTune(306);
153 pythia->SetStrucFunc(kCTEQ6l);
155 else if (t ==
"JETS") {
156 pythia->SetProcess(kPyJets);
157 pythia->SetStrucFunc(kCTEQ6l);
158 pythia->SetJetEtaRange(-1.5, 1.5);
159 pythia->SetJetEtRange(50., 800.);
160 pythia->SetPtHard(45., 1000.);
161 pythia->SetPycellParameters(2.2, 300, 432, 0., 4., 5., 0.7);
163 else if (t ==
"ATLAS_FLAT") {
166 TH1 *weight =
new TH1D(
"weight",
"weight",201,-0.5,200.5);
167 weight->SetBinContent(1,5.49443);
168 weight->SetBinContent(2,8.770816);
169 weight->SetBinContent(6,0.4568624);
170 weight->SetBinContent(7,0.2919915);
171 weight->SetBinContent(8,0.6674189);
172 weight->SetBinContent(9,0.364737);
173 weight->SetBinContent(10,0.8818444);
174 weight->SetBinContent(11,0.531885);
175 weight->SetBinContent(12,1.035197);
176 weight->SetBinContent(13,0.9394057);
177 weight->SetBinContent(14,0.9643193);
178 weight->SetBinContent(15,0.94543);
179 weight->SetBinContent(16,0.9426507);
180 weight->SetBinContent(17,0.9423649);
181 weight->SetBinContent(18,0.789456);
182 weight->SetBinContent(19,1.149026);
183 weight->SetBinContent(20,1.100491);
184 weight->SetBinContent(21,0.6350525);
185 weight->SetBinContent(22,1.351941);
186 weight->SetBinContent(23,0.03233504);
187 weight->SetBinContent(24,0.9574557);
188 weight->SetBinContent(25,0.868133);
189 weight->SetBinContent(26,1.030998);
190 weight->SetBinContent(27,1.08897);
191 weight->SetBinContent(28,1.251382);
192 weight->SetBinContent(29,0.1391099);
193 weight->SetBinContent(30,1.192876);
194 weight->SetBinContent(31,0.448944);
195 for (
Int_t i = 32; i <= 201; i++) weight->SetBinContent(i,1);
196 weight->SetEntries(526);
198 Int_t limit = weight->GetRandom();
199 pythia->SetTriggerChargedMultiplicity(limit, 1.4);
201 pythia->SetTitle(tit);
215 if (type == 6)
return Pythia(
"jets");
217 AliGenParam *jpsi = AliGenParam(1, AliGenMUONlib::kJpsi,
218 (harder?
"CDF pp 8.8":
"CDF pp 7"),
"Jpsi");
219 jpsi->SetPtRange(0.,999.);
220 jpsi->SetYRange(-1.0, 1.0);
221 jpsi->SetPhiRange(0.,360.);
222 jpsi->SetForceDecay(kDiElectron);
225 AliGenPythia* pythia =
static_cast<AliGenPythia*
>(
Pythia(
"PERUGIA0"));
228 pythia->SetProcess(kPyCharmppMNRwmi);
229 pythia->SetForceDecay(kHadronicD);
232 pythia->SetProcess(kPyBeautyppMNRwmi);
233 pythia->SetForceDecay(kHadronicD);
236 pythia->SetProcess(kPyCharmppMNRwmi);
237 pythia->SetCutOnChild(1);
238 pythia->SetPdgCodeParticleforAcceptanceCut(11);
239 pythia->SetChildYRange(-1.2,1.2);
240 pythia->SetChildPtRange(0,10000.);
243 pythia->SetProcess(kPyBeautyppMNRwmi);
244 pythia->SetCutOnChild(1);
245 pythia->SetPdgCodeParticleforAcceptanceCut(11);
246 pythia->SetChildYRange(-1.2,1.2);
247 pythia->SetChildPtRange(0,10000.);
250 pythia->SetProcess(kPyBeautyppMNRwmi);
251 pythia->SetCutOnChild(1);
252 pythia->SetPdgCodeParticleforAcceptanceCut(443);
253 pythia->SetChildYRange(-2,2);
254 pythia->SetChildPtRange(0,10000.);
285 Bool_t quench = opt.Contains(
"quench");
287 && !opt.Contains(
"nospectators"));
289 Bool_t shadow = !spec && !slow && !opt.Contains(
"noshadow");
291 Double_t ptCut = sNN < 5000 ? 2.3 : 2.8;
292 TString tit(Form(
"Hijing%s %s(%d,%d)+%s(%d,%d) @ %5d b in[%4.1f,%4.1f]",
293 (slow ?
"+SNM" :
""),
297 tit.Append(Form(
" %squench", quench ?
"" :
"no"));
298 tit.Append(Form(
" %sspectator", spec ?
"" :
"no"));
299 tit.Append(Form(
" %sshadow", shadow ?
"" :
"no"));
300 tit.Append(Form(
" ptCut=%5.2f", ptCut));
302 AliGenHijing *gener =
new AliGenHijing(-1);
304 gener->SetEnergyCMS(sNN);
306 gener->SetImpactParameterRange(minB, maxB);
308 gener->SetReferenceFrame(
"CMS");
314 gener->KeepFullEvent();
316 gener->SetJetQuenching(quench);
318 gener->SetShadowing(shadow);
320 gener->SetSpectators(spec);
322 gener->SetPtHardMin(ptCut);
335 gener->SetTitle(tit);
340 AliGenCocktail* cocktail =
new AliGenCocktail();
344 cocktail->SetName(
"HIJINGSNM");
346 AliGenSlowNucleons* gray =
new AliGenSlowNucleons(1);
347 AliCollisionGeometry* coll = gener->CollisionGeometry();
348 AliSlowNucleonModelExp* model =
new AliSlowNucleonModelExp();
351 gray->SetSlowNucleonModel(model);
353 gray->SetThetaDist(1);
354 gray->SetProtonDirection(
grp->
beam1.
IsP() ? 1 : 2);
357 gray->NeedsCollisionGeometry();
358 gray->SetCollisionGeometry(coll);
360 cocktail->AddGenerator(gener,
"Hijing pPb", 1);
361 cocktail->AddGenerator(gray,
"Gray Particles", 1);
363 tit.Append(
" + slow nucleon");
364 cocktail->SetTitle(tit);
380 AliGenDPMjet* dpmjet =
new AliGenDPMjet(-1);
381 TString tit(Form(
"DpmJet %s(%d,%d)+%s(%d,%d) @ %5d b in[%4.1f,%4.1f]",
389 dpmjet->SetImpactParameterRange(minB, maxB);
393 dpmjet->SetFragmentProd(
false);
394 dpmjet->SetSpectators(
true);
397 dpmjet->SetMomentumRange(0, 999999.);
398 dpmjet->SetThetaRange(0., 180.);
399 dpmjet->SetYRange(-12.,12.);
400 dpmjet->SetPtRange(0,1000.);
401 tit.Append(
" (Phojet)");
403 dpmjet->SetTitle(tit);
422 TString tit(Form(
"AMPT %s(%d,%d)+%s(%d,%d) @ %5d b in[%4.1f,%4.1f]",
435 Bool_t decayer = !opt.Contains(
"nodecay");
436 Bool_t screen = !opt.Contains(
"noscreen");
437 Bool_t melt = opt.Contains(
"melt");
438 Bool_t shadow = !opt.Contains(
"noshadow");
439 Bool_t spec = opt.Contains(
"spectators");
440 Bool_t quench = opt.Contains(
"quench");
441 Bool_t slow = opt.Contains(
"precise");
444 if (opt.Contains(
"nt")) {
445 Int_t st = opt.Index(
"nt");
446 Int_t en = opt.Index(
"_", st);
447 if (en == kNPOS) en = opt.Length()-1;
451 tit.Append(Form(
" %sdecay", decayer ?
"" :
"no"));
452 tit.Append(Form(
" %sscreen", screen ?
"" :
"no"));
453 tit.Append(Form(
" %smelt", melt ?
"" :
"no"));
454 tit.Append(Form(
" %sshadow", shadow ?
"" :
"no"));
455 tit.Append(Form(
" %sspectator", spec ?
"" :
"no"));
456 tit.Append(Form(
" %squench", quench ?
"" :
"no"));
458 AliGenAmpt *genHi =
new AliGenAmpt(-1);
460 genHi->SetReferenceFrame(
"CMS");
463 genHi->SetImpactParameterRange(minB,maxB);
465 genHi->SetPtHardMin (3);
467 genHi->SetJetQuenching(quench);
469 genHi->SetShadowing(shadow);
471 genHi->SetDecaysOff(decayer);
473 genHi->SetSpectators(spec);
475 genHi->KeepFullEvent();
477 genHi->SetSelectAll(0);
480 genHi->SetIsoft(melt ? 4 : 1);
482 genHi->SetStringFrag(0.5, 0.9);
486 genHi->SetBoostLHC(1);
488 genHi->SetRandomReactionPlane(
true);
490 if (screen) genHi->SetXmu(3.2264);
498 genHi->SetTitle(tit);
513 AliGenUHKM *genHi =
new AliGenUHKM(-1);
514 genHi->SetAllParametersLHC();
519 genHi->SetBmin(minB);
520 genHi->SetBmax(maxB);
521 genHi->SetPyquenPtmin(9);
523 TString tit(Form(
"Hydjet %s(%d,%d)+%s(%d,%d) @ %5d b in[%4.1f,%4.1f]",
527 genHi->SetTitle(tit);
541 AliGenEposLHC* gen =
new AliGenEposLHC(-1);
549 gen->SetImpactParameterRange(minB, maxB);
550 TString tit(Form(
"EPOS-LHC %s(%d,%d)+%s(%d,%d) @ %5d b in[%4.1f,%4.1f]",
565 AliGenEpos* gen =
new AliGenEpos();
569 TString tit(Form(
"EPOS %s(%d,%d)+%s(%d,%d) @ %5d b in[%4.1f,%4.1f]",
579 AliGenTherminator* gen =
new AliGenTherminator();
580 gen->SetFileName(
"event.out");
581 gen->SetEventNumberInFile(1);
582 gen->SetTemperature(.145);
583 gen->SetMiuI(-0.0009);
585 gen->SetMiuB(0.0008);
586 gen->SetAlfaRange(8.0);
587 gen->SetRapRange(4.0);
588 gen->SetRhoMax(7.74);
590 gen->SetModel(
"Lhyquid3D");
591 gen->SetLhyquidSet(
"LHC500C2030");
592 gen->SetTitle(
"Therminator");
611 v.ReplaceAll(
"LEGO",
"");
612 Info(
"Setup",
"Making Lego event generator (variant: %s)", v.Data());
614 AliLegoGenerator* ret = 0;
629 if (v.BeginsWith(
"X") || v.BeginsWith) {
630 const char*
c[] = { v(0),
'\0' };
631 ret =
new AliLegoGeneratorXYZ(c);
632 ret->SetCoor1Range(10,-2,2);
633 ret->SetCoor2Range(10,-10,10);
635 else if (v.BeginsWith(
"Z")) {
636 ret =
new AliLegoGeneratorXYZ(
"Z");
637 ret->SetCoor1Range(10,-2,2);
638 ret->SetCoor2Range(10,-2,2);
640 else if (v.BeginsWith(
"PHIZ")) {
641 ret =
new AliLegoGeneratorPhiZ();
642 ret->SetCoor1Range(10,-10,10);
643 ret->SetCoor2Range(360,0,360);
645 else if (v.BeginsWith(
"ETA")) {
646 ret =
new AliLegoGeneratorEta();
647 ret->SetCoor1Range(360,0,360);
650 ret->SetCoor2Range(2*aEta/dEta,-aEta,+aEta);
653 ret =
new AliLegoGenerator();
654 ret->SetCoor1Range(180,0,180);
655 ret->SetCoor1Range(360,0,360);
673 AliGenCocktail *cocktail =
new AliGenCocktail();
679 if (base.BeginsWith(
"ampt", TString::kIgnoreCase)) {
680 hi =
Ampt(minB, maxB, base);
681 cocktail->AddGenerator(hi,
"ampt",1);
684 hi =
Hijing(minB, maxB, base);
685 cocktail->AddGenerator(hi,
"hijing",1);
690 TForumla* one =
new TFormula(
"one",
"1.");
693 AliGenerator* pythia =
PythiaHF(hftype);
694 tit.Append(Form(
" + %s", pythia->GetTitle()));
697 cocktail->AddGenerator(pythia,
"pythiaJets", 1, one);
701 ->AddGenerator(pythia,
"pythiaHF", 1,
702 new TFormula(
"Signals",
703 "20.*(x<5.)+80./3.*(1.-x/20.)*(x>5.)"));
707 AliGenParam* param = 0;
710 AliGenPHOSlib *plib =
new AliGenPHOSlib();
711 Double_t lower[] = { 0, 3, 6, 9, 12, -1 };
713 for (
Int_t i = 0; i < 5; i++) {
714 param =
new AliGenParam(5, plib, AliGenPHOSlib::kPi0);
715 param->SetPhiRange(0., 360.) ;
716 param->SetYRange(-1.2, 1.2) ;
717 param->SetPtRange(lower[i], 30.) ;
718 cocktail->AddGenerator(param,Form(
"Pi0HagPt%d", i), 1., one);
722 param =
new AliGenParam(1, AliGenMUONlib::kJpsi,
"CDF pp 3.94",
"Jpsi");
723 param->SetPtRange(0.,999.);
724 param->SetYRange(-4.2, -2.3);
725 param->SetPhiRange(0.,360.);
726 param->SetForceDecay(kDiMuon);
727 param->SetCutOnChild(1);
728 param->SetChildPhiRange(0.,360.);
729 param->SetChildThetaRange(168.5,178.5);
730 cocktail->AddGenerator(param,
"Jpsi2M", 1, one);
733 Float_t thmin = (180./TMath::Pi())*2.*atan(exp(-1.2));
734 Float_t thmax = (180./TMath::Pi())*2.*atan(exp( 1.2));
735 param =
new AliGenParam(1, AliGenMUONlib::kChic,
"default",
"Chic");
736 param->SetMomentumRange(0, 999.);
737 param->SetPtRange(0, 100.);
738 param->SetYRange(-2.5, 2.5);
739 param->SetCutOnChild(1);
740 param->SetChildPhiRange(0., 360.);
742 param->SetChildThetaRange(thmin, thmax);
744 param->SetForceDecay(kChiToJpsiGammaToElectronElectron);
745 cocktail->AddGenerator(param,
"Chi_c", 1, one);
752 Int_t boxP[] = { 310, 3122, 3312, 3322,
753 (boxR==1 ?3334: boxR==2 ?-3334: -3312) };
754 Int_t boxN[] = { 1, 1, 3, 3, 1 }
755 const char* boxT[] = {
"K0s",
"Lambda",
"Xi-",
"Xi0",
756 (boxR==1 ?
"Omega-": boxR==2 ?
"Omega+":
"Xi+") };
757 for (
Int_t i = 0; i < 5; i++) {
758 box =
new AliGenBox(boxN[i]);
759 box->SetPart(boxP[i]);
760 box->SetPtRange(0,13);
761 box->SetThetaRange(45, 135);
762 cocktail->AddGenerator(box, boxT[i], 1, one);
766 TFormula* hptF =
new TFormula(
"High Pt",
767 "5.*(x<5.)+20./3.*(1.-x/20.)*(x > 5.)");
768 Int_t hptP[] = { 211, 321, 2212 };
769 const char* hptT[] = {
"pi",
"K",
"p" };
770 for (
Int_t i = 0; i < 3; i++) {
771 for (
Int_t j = -1; j <= 1; j++) {
772 box->SetPart(j*hptP[i]);
773 box->SetPtRange(2., 50.);
774 box->SetThetaRange(thmin, thmax);
775 cocktail->AddGenerator(box, Form(
"%s%c",hptT[i],(j<0,
'-',
'+')),1,hptF);
778 cocktail->SetTitle(tit);
787 ::Info(
"EGConfig",
"Creating EG factory");
static void LoadTherminator()
static const char * DeduceRunType()
AliGenerator * Therminator(Float_t, Float_t)
AliGenerator * CreateGenerator(const TString &rt, Float_t b1, Float_t b2)
TVirtualMCDecayer * CreateDecayer(const TString &runType)
AliGenerator * Pythia(const TString &tune)
AliGeneator * HFCocktail(const TString &base, Float_t minB, Float_t maxB)
AliGenerator * EposLHC(Float_t minB, Float_t maxB)
AliGenerator * Hijing(Float_t minB, Float_t maxB, const TString &rt)
virtual Bool_t IsLego() const
AliGenerator * Dpmjet(Float_t minB, Float_t maxB, Bool_t fragments=0)
static void LoadEposLHC()
AliGenerator * Lego(const TString &variant)
AliGenerator * Epos(Float_t, Float_t)
AliGenerator * PythiaHF(Int_t type, Bool_t harder=0)
AliGenerator * Ampt(Float_t minB, Float_t maxB, const TString &rt)
AliGenerator * Hydjet(Float_t minB, Float_t maxB)
static void LoadPythia(Bool_t gen=true, const char *vers="6.4.21")
Double_t BeamMomentum(UShort_t which)