1 /**************************************************************************
2 * Copyright(c) 1998-2002, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
21 #include "AliEMCALGeneratorFactory.h"
22 #include "AliGenerator.h"
23 #include "AliGenFixed.h"
24 #include "AliGenBox.h"
25 #include "AliGenHIJINGpara.h"
26 #include "AliGenHIJINGparaBa.h"
27 #include "AliGenHijing.h"
28 #include "AliGenCocktail.h"
29 #include "AliGenPythia.h"
31 //*-- Authors: Aleksei Pavlinov (WSU)
32 //* Initial variant is in Config.C for EMCAL production.
33 ClassImp(AliEMCALGeneratorFactory)
35 AliEMCALGeneratorFactory::AliEMCALGeneratorFactory(PprRunFact_t run, PprRadFact_t rad)
37 fGenerator = fBgGenerator = fSignalGenerator = 0;
43 if (rad == kNoGluonRadiation) isw = 0;
44 Float_t thmin=0, thmax=0;
48 AliGenHIJINGparaBa *genHijParaB=0, *bg=0;
49 AliGenHIJINGpara *genHijPara=0;
50 AliGenHijing *genHij=0;
51 AliGenCocktail *genCoct=0;
52 AliGenPythia *genPy=0, *jets=0;
53 // AliPythia *aliPy = 0;
55 fComment = new TString;
59 genGG = new AliGenFixed(1);
60 genGG->SetMomentum(100.);
63 genGG->SetPart(kGamma);
64 fGenerator = (AliGenerator*)genGG;
68 genB = new AliGenBox(100);
69 genB->SetMomentumRange(100., 100.1);
70 genB->SetPhiRange(0,360);
71 genB->SetThetaRange(45., 135.);
72 genB->SetPart(kGamma);
73 fGenerator = (AliGenerator*)genB;
77 genHijParaB = new AliGenHIJINGparaBa(50);
78 genHijParaB->SetMomentumRange(0, 999999.);
79 genHijParaB->SetPhiRange(-180., 180.);
80 // Set pseudorapidity range from -8 to 8.
81 thmin = EtaToTheta(8); // theta min. <---> eta max
82 thmax = EtaToTheta(-8); // theta max. <---> eta min
83 genHijParaB->SetThetaRange(thmin,thmax);
84 fGenerator = (AliGenerator*)genHijParaB;
88 //coment= fComment.Append(":HIJINGparam N=8000");
89 genHijPara = new AliGenHIJINGpara(86030);
90 genHijPara->SetMomentumRange(0, 999999.);
91 genHijPara->SetPhiRange(-180., 180.);
92 // Set pseudorapidity range from -8 to 8.
93 thmin = EtaToTheta(8); // theta min. <---> eta max
94 thmax = EtaToTheta(-8); // theta max. <---> eta min
95 genHijPara->SetThetaRange(thmin,thmax);
96 fGenerator = (AliGenerator*)genHijPara;
99 genHijPara = new AliGenHIJINGpara(43015);
100 genHijPara->SetMomentumRange(0, 999999.);
101 genHijPara->SetPhiRange(-180., 180.);
102 // Set pseudorapidity range from -8 to 8.
103 thmin = EtaToTheta(8); // theta min. <---> eta max
104 thmax = EtaToTheta(-8); // theta max. <---> eta min
105 genHijPara->SetThetaRange(thmin,thmax);
106 fGenerator = (AliGenerator*)genHijPara;
109 (*fComment) = "HIJINGparam N=2000";
110 genHijPara = new AliGenHIJINGpara(21507);
111 genHijPara->SetMomentumRange(0, 999999.);
112 genHijPara->SetPhiRange(-180., 180.);
113 // Set pseudorapidity range from -8 to 8.
114 thmin = EtaToTheta(8); // theta min. <---> eta max
115 thmax = EtaToTheta(-8); // theta max. <---> eta min
116 genHijPara->SetThetaRange(thmin,thmax);
117 fGenerator = (AliGenerator*)genHijPara;
120 case kParam_8000_Ecal:
121 genHijParaB = new AliGenHIJINGparaBa(82534);
122 genHijParaB->SetMomentumRange(0, 999999.);
123 genHijParaB->SetPhiRange(-180., 180.);
124 // Set pseudorapidity range from -8 to 8.
125 thmin = EtaToTheta( 5); // theta min. <---> eta max
126 thmax = EtaToTheta(-5); // theta max. <---> eta min
127 genHijParaB->SetThetaRange(thmin,thmax);
128 fGenerator = (AliGenerator*)genHijParaB;
131 case kParam_4000_Ecal:
132 genHijParaB = new AliGenHIJINGparaBa(82534/2);
133 genHijParaB->SetMomentumRange(0, 999999.);
134 genHijParaB->SetPhiRange(-180., 180.);
135 // Set pseudorapidity range from -8 to 8.
136 thmin = EtaToTheta( 5); // theta min. <---> eta max
137 thmax = EtaToTheta(-5); // theta max. <---> eta min
138 genHijParaB->SetThetaRange(thmin,thmax);
139 fGenerator = (AliGenerator*)genHijParaB;
145 genHij = HijingStandard();
146 // impact parameter range
147 genHij->SetImpactParameterRange(0., 5.);
148 fGenerator = (AliGenerator*)genHij;
151 genHij = HijingStandard();
152 // impact parameter range
153 genHij->SetImpactParameterRange(0., 2.);
154 fGenerator = (AliGenerator*)genHij;
160 genHij = HijingStandard();
161 // impact parameter range
162 genHij->SetImpactParameterRange(5., 8.6);
163 fGenerator = (AliGenerator*)genHij;
166 //coment= comment.Append("HIJING per2");
167 genHij = HijingStandard();
168 // impact parameter range
169 genHij->SetImpactParameterRange(8.6, 11.2);
170 fGenerator = (AliGenerator*)genHij;
173 genHij = HijingStandard();
174 // impact parameter range
175 genHij->SetImpactParameterRange(11.2, 13.2);
176 fGenerator = (AliGenerator*)genHij;
179 genHij = HijingStandard();
180 // impact parameter range
181 genHij->SetImpactParameterRange(13.2, 15.);
182 fGenerator = (AliGenerator*)genHij;
185 //coment= comment.Append("HIJING per5");
186 genHij = HijingStandard();
187 // impact parameter range
188 genHij->SetImpactParameterRange(15., 100.);
189 fGenerator = (AliGenerator*)genHij;
195 //coment= comment.Append("HIJING Jet 25 GeV");
196 genHij = HijingStandard();
197 // impact parameter range
198 genHij->SetImpactParameterRange(0., 5.);
200 genHij->SetTrigger(1);
201 genHij->SetPtJet(25.);
202 genHij->SetSimpleJets(1);
203 genHij->SetRadiation(isw);
204 genHij->SetJetEtaRange(-0.3,0.3);
205 genHij->SetJetPhiRange(15.,105.);
206 fGenerator = (AliGenerator*)genHij;
210 //coment= comment.Append("HIJING Jet 50 GeV");
211 genHij = HijingStandard();
212 // impact parameter range
213 genHij->SetImpactParameterRange(0., 5.);
215 genHij->SetTrigger(1);
216 genHij->SetPtJet(50.);
217 genHij->SetSimpleJets(1);
218 genHij->SetRadiation(isw);
219 genHij->SetJetEtaRange(-0.3,0.3);
220 genHij->SetJetPhiRange(15.,105.);
221 fGenerator = (AliGenerator*)genHij;
225 //coment= comment.Append("HIJING Jet 75 GeV");
226 genHij = HijingStandard();
227 // impact parameter range
228 genHij->SetImpactParameterRange(0., 5.);
230 genHij->SetTrigger(1);
231 genHij->SetPtJet(75.);
232 genHij->SetSimpleJets(1);
233 genHij->SetRadiation(isw);
234 genHij->SetJetEtaRange(-0.3,0.3);
235 genHij->SetJetPhiRange(15.,105.);
236 fGenerator = (AliGenerator*)genHij;
240 //coment= comment.Append("HIJING Jet 100 GeV");
241 genHij = HijingStandard();
242 // impact parameter range
243 genHij->SetImpactParameterRange(0., 5.);
245 genHij->SetTrigger(1);
246 genHij->SetPtJet(100.);
247 genHij->SetSimpleJets(1);
248 genHij->SetRadiation(isw);
249 genHij->SetJetEtaRange(-0.3,0.3);
250 genHij->SetJetPhiRange(15.,105.);
251 fGenerator = (AliGenerator*)genHij;
255 //coment= comment.Append("HIJING Jet 125 GeV");
256 genHij = HijingStandard();
257 // impact parameter range
258 genHij->SetImpactParameterRange(0., 5.);
260 genHij->SetTrigger(1);
261 genHij->SetPtJet(125.);
262 genHij->SetSimpleJets(1);
263 genHij->SetRadiation(isw);
264 genHij->SetJetEtaRange(-0.3,0.3);
265 genHij->SetJetPhiRange(15.,105.);
266 fGenerator = (AliGenerator*)genHij;
272 //coment= comment.Append("HIJING Gamma 25 GeV");
273 genHij = HijingStandard();
274 // impact parameter range
275 genHij->SetImpactParameterRange(0., 5.);
277 genHij->SetTrigger(2);
278 genHij->SetPtJet(25.);
279 genHij->SetSimpleJets(1);
280 genHij->SetRadiation(isw);
281 genHij->SetJetEtaRange(-0.3,0.3);
282 genHij->SetJetPhiRange(15.,105.);
283 fGenerator = (AliGenerator*)genHij;
287 //coment= comment.Append("HIJING Gamma 50 GeV");
288 genHij = HijingStandard();
289 // impact parameter range
290 genHij->SetImpactParameterRange(0., 5.);
292 genHij->SetTrigger(2);
293 genHij->SetPtJet(50.);
294 genHij->SetSimpleJets(1);
295 genHij->SetRadiation(isw);
296 genHij->SetJetEtaRange(-0.3,0.3);
297 genHij->SetJetPhiRange(15.,105.);
298 fGenerator = (AliGenerator*)genHij;
302 //coment= comment.Append("HIJING Gamma 75 GeV");
303 genHij = HijingStandard();
304 // impact parameter range
305 genHij->SetImpactParameterRange(0., 5.);
307 genHij->SetTrigger(2);
308 genHij->SetPtJet(75.);
309 genHij->SetSimpleJets(1);
310 genHij->SetRadiation(isw);
311 genHij->SetJetEtaRange(-0.3,0.3);
312 genHij->SetJetPhiRange(15.,105.);
313 fGenerator = (AliGenerator*)genHij;
317 //coment= comment.Append("HIJING Gamma 100 GeV");
318 genHij = HijingStandard();
319 // impact parameter range
320 genHij->SetImpactParameterRange(0., 5.);
322 genHij->SetTrigger(2);
323 genHij->SetPtJet(100.);
324 genHij->SetSimpleJets(1);
325 genHij->SetRadiation(isw);
326 genHij->SetJetEtaRange(-0.3,0.3);
327 genHij->SetJetPhiRange(15.,105.);
328 fGenerator = (AliGenerator*)genHij;
332 //coment= comment.Append("HIJING Gamma 125 GeV");
333 genHij = HijingStandard();
334 // impact parameter range
335 genHij->SetImpactParameterRange(0., 5.);
337 genHij->SetTrigger(2);
338 genHij->SetPtJet(125.);
339 genHij->SetSimpleJets(1);
340 genHij->SetRadiation(isw);
341 genHij->SetJetEtaRange(-0.3,0.3);
342 genHij->SetJetPhiRange(15.,105.);
343 fGenerator = (AliGenerator*)genHij;
346 genCoct = new AliGenCocktail();
347 genCoct->SetMomentumRange(0, 999999.);
348 genCoct->SetPhiRange(-180., 180.);
349 // Set pseudorapidity range from -8 to 8.
350 thmin = EtaToTheta( 5.); // theta min. <---> eta max
351 thmax = EtaToTheta(-5.); // theta max. <---> eta min
352 genCoct->SetThetaRange(thmin,thmax);
357 // AliGenHIJINGparaBa *bg = new AliGenHIJINGparaBa(82534);
358 bg = new AliGenHIJINGparaBa(10);
359 fBgGenerator = (AliGenerator*)bg;
363 jets = new AliGenPythia(-1);
364 fSignalGenerator = (AliGenerator*)jets;
365 // Centre of mass energy
366 jets->SetEnergyCMS(5500.);
368 jets->SetProcess(kPyJets);
369 // final state kinematic cuts
370 jets->SetJetEtaRange(-0.3, 0.3);
371 jets->SetJetPhiRange(15., 105.);
372 // Structure function
373 jets->SetStrucFunc(kGRVLO98);
375 // Pt transfer of the hard scattering
376 jets->SetPtHard(100.,100.1);
377 // Decay type (semielectronic, semimuonic, nodecay)
378 jets->SetForceDecay(kAll);
380 // Add all to cockail ...
382 genCoct->AddGenerator(jets,"Jets",1);
383 genCoct->AddGenerator(bg,"Underlying Event", 1);
384 fGenerator = (AliGenerator*)genCoct;
388 genCoct = new AliGenCocktail();
389 genCoct->SetMomentumRange(0, 999999.);
390 genCoct->SetPhiRange(-180., 180.);
391 // Set pseudorapidity range from -8 to 8.
392 thmin = EtaToTheta( 5.); // theta min. <---> eta max
393 thmax = EtaToTheta(-5.); // theta max. <---> eta min
394 genCoct->SetThetaRange(thmin,thmax);
398 bg = new AliGenHIJINGparaBa(82534);
399 fBgGenerator = (AliGenerator*)bg;
403 jets = new AliGenPythia(-1);
404 fSignalGenerator = (AliGenerator*)jets;
405 // Centre of mass energy
406 jets->SetEnergyCMS(5500.);
408 jets->SetProcess(kPyDirectGamma);
409 // final state kinematic cuts
410 jets->SetJetEtaRange(-0.3, 0.3);
411 jets->SetJetPhiRange(15., 105.);
412 jets->SetGammaEtaRange(-0.12, 0.12);
413 jets->SetGammaPhiRange(220., 320.);
414 // Structure function
415 jets->SetStrucFunc(kGRVLO98);
417 // Pt transfer of the hard scattering
418 jets->SetPtHard(100.,100.1);
419 // Decay type (semielectronic, semimuonic, nodecay)
420 jets->SetForceDecay(kAll);
422 // Add all to cockail ...
424 genCoct->AddGenerator(jets,"Jets",1);
425 genCoct->AddGenerator(bg,"Underlying Event", 1);
426 fGenerator = (AliGenerator*)genCoct;
431 genPy = PythiaJets(50.);
432 fGenerator = (AliGenerator*)genPy;
436 genPy = PythiaJets(75.);
437 fGenerator = (AliGenerator*)genPy;
441 genPy = PythiaJets(100.);
442 fGenerator = (AliGenerator*)genPy;
446 genPy = PythiaJets(200.);
447 fGenerator = (AliGenerator*)genPy;
451 // 100 GeV Jets with radiation on - 22-mar-2002
452 // See AliPythia.cxx for default
453 genPy = PythiaJets(100.);
454 // genPy->SetKeyPartonJets(1); // for jet partons
455 // genPy->DefineParametersForPartonsJets();
457 fGenerator = (AliGenerator*)genPy;
461 // 50 GeV Jets + Gamma
462 genPy = PythiaJets(-1);
463 genPy->SetEnergyCMS(5500.);
464 genPy->SetProcess(kPyDirectGamma);
465 genPy->SetJetEtaRange(-0.3,+0.3);
466 genPy->SetJetPhiRange(15.,105.);
467 genPy->SetGammaEtaRange(-0.12, 0.12);
468 genPy->SetGammaPhiRange(220., 320.);
469 genPy->SetStrucFunc(kGRVLO98);
470 genPy->SetPtHard(50.,50.001);
471 genPy->SetForceDecay(kAll);
472 fGenerator = (AliGenerator*)genPy;
475 // 75 GeV Jets + Gamma
476 genPy = PythiaJets(-1);
477 genPy->SetEnergyCMS(5500.);
478 genPy->SetProcess(kPyDirectGamma);
479 genPy->SetJetEtaRange(-0.3,+0.3);
480 genPy->SetJetPhiRange(15.,105.);
481 genPy->SetGammaEtaRange(-0.12, 0.12);
482 genPy->SetGammaPhiRange(220., 320.);
483 genPy->SetStrucFunc(kGRVLO98);
484 genPy->SetPtHard(75.,75.001);
485 genPy->SetForceDecay(kAll);
486 fGenerator = (AliGenerator*)genPy;
489 // 100 GeV Jets + Gamma
490 genPy = PythiaJets(-1);
491 genPy->SetEnergyCMS(5500.);
492 genPy->SetProcess(kPyDirectGamma);
493 genPy->SetJetEtaRange(-0.3,+0.3);
494 genPy->SetJetPhiRange(15.,105.);
495 genPy->SetGammaEtaRange(-0.12, 0.12);
496 genPy->SetGammaPhiRange(220., 320.);
497 genPy->SetStrucFunc(kGRVLO98);
498 genPy->SetPtHard(100.,100.001);
499 genPy->SetForceDecay(kAll);
500 fGenerator = (AliGenerator*)genPy;
503 // 200 GeV Jets + Gamma
504 genPy = PythiaJets(-1);
505 genPy->SetEnergyCMS(5500.);
506 genPy->SetProcess(kPyDirectGamma);
507 genPy->SetJetEtaRange(-0.3,+0.3);
508 genPy->SetJetPhiRange(15.,105.);
509 genPy->SetGammaEtaRange(-0.12, 0.12);
510 genPy->SetGammaPhiRange(220., 320.);
511 genPy->SetStrucFunc(kGRVLO98);
512 genPy->SetPtHard(200.,200.001);
513 genPy->SetForceDecay(kAll);
514 fGenerator = (AliGenPythia*)genPy;
517 // 250 GeV Jets + Gamma
518 genPy = PythiaJets(-1);
519 genPy->SetEnergyCMS(5500.);
520 genPy->SetProcess(kPyDirectGamma);
521 genPy->SetJetEtaRange(-0.3,+0.3);
522 genPy->SetJetPhiRange(15.,105.);
523 genPy->SetGammaEtaRange(-0.12, 0.12);
524 genPy->SetGammaPhiRange(220., 320.);
525 genPy->SetStrucFunc(kGRVLO98);
526 genPy->SetPtHard(250.,250.001);
527 genPy->SetForceDecay(kAll);
528 fGenerator = (AliGenerator*)genPy;
531 // 300 GeV Jets + Gamma
532 genPy = PythiaJets(-1);
533 genPy->SetEnergyCMS(5500.);
534 genPy->SetProcess(kPyDirectGamma);
535 genPy->SetJetEtaRange(-0.3,+0.3);
536 genPy->SetJetPhiRange(15.,105.);
537 genPy->SetGammaEtaRange(-0.12, 0.12);
538 genPy->SetGammaPhiRange(220., 320.);
539 genPy->SetStrucFunc(kGRVLO98);
540 genPy->SetPtHard(300.,300.001);
541 genPy->SetForceDecay(kAll);
542 fGenerator = (AliGenerator*)genPy;
545 printf("<I> wrong parameter for generator run %i rad %i\n", run, rad);
548 if(fGenerator) fGenerator->SetPtRange(0.,1.e10); // discard the limit on pT
552 AliEMCALGeneratorFactory::AliEMCALGeneratorFactory(PprRunFact_t run, Float_t p)
554 fGenerator = fBgGenerator = fSignalGenerator = 0;
562 genB = OneParticleWithFixedEnergy(kGamma, p);
565 genB = OneParticleWithFixedEnergy(kPi0, p);
568 printf("<I> wrong parameter for generator run %i \n",run);
571 if(genB) fGenerator = (AliGenerator*)genB;
572 // if(fGenerator) fGenerator->SetPtRange(0.,1.e10); // discard the limit on pT - 23-aug-04
575 AliGenHijing* AliEMCALGeneratorFactory::HijingStandard()
577 AliGenHijing *gener = new AliGenHijing(-1);
578 // centre of mass energy
579 gener->SetEnergyCMS(5500.);
581 gener->SetReferenceFrame("CMS");
583 gener->SetProjectile("A", 208, 82);
584 gener->SetTarget ("A", 208, 82);
585 // tell hijing to keep the full parent child chain
586 gener->KeepFullEvent();
587 // enable jet quenching
588 gener->SetJetQuenching(1);
590 gener->SetShadowing(1);
591 // neutral pion and heavy particle decays switched off
592 gener->SetDecaysOff(1);
593 // Don't track spectators
594 gener->SetSpectators(0);
595 // kinematic selection
596 gener->SetSelectAll(0);
600 AliGenPythia* AliEMCALGeneratorFactory::PythiaJets(Float_t energy)
602 AliGenPythia *gener = new AliGenPythia(-1);
603 // Centre of mass energy
604 gener->SetEnergyCMS(5500.);
606 gener->SetProcess(kPyJets);
607 // final state kinematic cuts
608 gener->SetJetEtaRange(-0.3, 0.3);
609 gener->SetJetPhiRange(15., 105.);
610 // Structure function
611 gener->SetStrucFunc(kGRVLO98);
613 // Pt transfer of the hard scattering
614 gener->SetPtHard(energy, energy+0.1);
615 // Decay type (semielectronic, semimuonic, nodecay)
616 gener->SetForceDecay(kAll);
622 AliGenPythia* AliEMCALGeneratorFactory::PythiaGamma(Float_t energy)
624 AliGenPythia *gener = new AliGenPythia(-1);
625 // Centre of mass energy
626 gener->SetEnergyCMS(5500.);
628 gener->SetProcess(kPyDirectGamma);
629 // final state kinematic cuts
630 gener->SetJetEtaRange(-0.3, 0.3);
631 gener->SetJetPhiRange(15., 105.);
632 gener->SetGammaEtaRange(-0.12, 0.12);
633 gener->SetGammaPhiRange(220., 320.);
634 // Structure function
635 gener->SetStrucFunc(kGRVLO98);
637 // Pt transfer of the hard scattering
638 gener->SetPtHard(energy, energy+0.1);
639 // Decay type (semielectronic, semimuonic, nodecay)
640 gener->SetForceDecay(kAll);
646 // Staff of Aleksei Pavlinov.
648 AliGenBox* AliEMCALGeneratorFactory::OneParticleWithFixedEnergy(Int_t type, Float_t p)
649 {// one particle in EMCAL acceptance
650 Float_t thmin = EtaToTheta(0.7), thmax = EtaToTheta(-0.7);
651 Float_t phimin=0, phimax=120;
652 Float_t pmin=p, pmax=p+0.01;
654 AliGenBox *gen = new AliGenBox(1);
656 gen->SetNumberParticles(1);
657 gen->SetThetaRange(thmin, thmax);
658 gen->SetPhiRange(phimin, phimax);
659 gen->SetMomentumRange(pmin, pmax);
661 printf("<I> AliEMCALGeneratorFactory::OneParticleWithFixedEnergy \n");
662 printf(" type of particle -> %i \n", type);
663 printf(" %6.4f < eta < %6.4f\n", thmin, thmax);
664 printf(" %6.4f < phi < %6.4f\n", phimin, phimax);
665 printf(" %7.2f < Momentum < %7.2f\n", pmin, pmax);
666 printf(" TestBit(kPtRange) %i | TestBit(kMomentumRange) %i\n",
667 gen->TestBit(BIT(17)), gen->TestBit(BIT(19)));