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 **************************************************************************/
18 Revision 1.1 2005/08/01 16:11:18 pavlinov
24 #include "AliEMCALGeneratorFactory.h"
25 #include "AliGenerator.h"
26 #include "AliGenFixed.h"
27 #include "AliGenBox.h"
28 #include "AliGenHIJINGpara.h"
29 #include "AliGenHIJINGparaBa.h"
30 #include "AliGenHijing.h"
31 #include "AliGenCocktail.h"
32 #include "AliGenPythia.h"
34 //*-- Authors: Aleksei Pavlinov (WSU)
35 //* Initial variant is in Config.C for EMCAL production.
36 ClassImp(AliEMCALGeneratorFactory)
38 AliEMCALGeneratorFactory::AliEMCALGeneratorFactory(PprRunFact_t run, PprRadFact_t rad)
40 fGenerator = fBgGenerator = fSignalGenerator = 0;
46 if (rad == kNoGluonRadiation) isw = 0;
47 Float_t thmin=0, thmax=0;
51 AliGenHIJINGparaBa *genHijParaB=0, *bg=0;
52 AliGenHIJINGpara *genHijPara=0;
53 AliGenHijing *genHij=0;
54 AliGenCocktail *genCoct=0;
55 AliGenPythia *genPy=0, *jets=0;
56 // AliPythia *aliPy = 0;
58 fComment = new TString;
62 genGG = new AliGenFixed(1);
63 genGG->SetMomentum(100.);
66 genGG->SetPart(kGamma);
67 fGenerator = (AliGenerator*)genGG;
71 genB = new AliGenBox(100);
72 genB->SetMomentumRange(100., 100.1);
73 genB->SetPhiRange(0,360);
74 genB->SetThetaRange(45., 135.);
75 genB->SetPart(kGamma);
76 fGenerator = (AliGenerator*)genB;
80 genHijParaB = new AliGenHIJINGparaBa(50);
81 genHijParaB->SetMomentumRange(0, 999999.);
82 genHijParaB->SetPhiRange(-180., 180.);
83 // Set pseudorapidity range from -8 to 8.
84 thmin = EtaToTheta(8); // theta min. <---> eta max
85 thmax = EtaToTheta(-8); // theta max. <---> eta min
86 genHijParaB->SetThetaRange(thmin,thmax);
87 fGenerator = (AliGenerator*)genHijParaB;
91 //coment= fComment.Append(":HIJINGparam N=8000");
92 genHijPara = new AliGenHIJINGpara(86030);
93 genHijPara->SetMomentumRange(0, 999999.);
94 genHijPara->SetPhiRange(-180., 180.);
95 // Set pseudorapidity range from -8 to 8.
96 thmin = EtaToTheta(8); // theta min. <---> eta max
97 thmax = EtaToTheta(-8); // theta max. <---> eta min
98 genHijPara->SetThetaRange(thmin,thmax);
99 fGenerator = (AliGenerator*)genHijPara;
102 genHijPara = new AliGenHIJINGpara(43015);
103 genHijPara->SetMomentumRange(0, 999999.);
104 genHijPara->SetPhiRange(-180., 180.);
105 // Set pseudorapidity range from -8 to 8.
106 thmin = EtaToTheta(8); // theta min. <---> eta max
107 thmax = EtaToTheta(-8); // theta max. <---> eta min
108 genHijPara->SetThetaRange(thmin,thmax);
109 fGenerator = (AliGenerator*)genHijPara;
112 (*fComment) = "HIJINGparam N=2000";
113 genHijPara = new AliGenHIJINGpara(21507);
114 genHijPara->SetMomentumRange(0, 999999.);
115 genHijPara->SetPhiRange(-180., 180.);
116 // Set pseudorapidity range from -8 to 8.
117 thmin = EtaToTheta(8); // theta min. <---> eta max
118 thmax = EtaToTheta(-8); // theta max. <---> eta min
119 genHijPara->SetThetaRange(thmin,thmax);
120 fGenerator = (AliGenerator*)genHijPara;
123 case kParam_8000_Ecal:
124 genHijParaB = new AliGenHIJINGparaBa(82534);
125 genHijParaB->SetMomentumRange(0, 999999.);
126 genHijParaB->SetPhiRange(-180., 180.);
127 // Set pseudorapidity range from -8 to 8.
128 thmin = EtaToTheta( 5); // theta min. <---> eta max
129 thmax = EtaToTheta(-5); // theta max. <---> eta min
130 genHijParaB->SetThetaRange(thmin,thmax);
131 fGenerator = (AliGenerator*)genHijParaB;
134 case kParam_4000_Ecal:
135 genHijParaB = new AliGenHIJINGparaBa(82534/2);
136 genHijParaB->SetMomentumRange(0, 999999.);
137 genHijParaB->SetPhiRange(-180., 180.);
138 // Set pseudorapidity range from -8 to 8.
139 thmin = EtaToTheta( 5); // theta min. <---> eta max
140 thmax = EtaToTheta(-5); // theta max. <---> eta min
141 genHijParaB->SetThetaRange(thmin,thmax);
142 fGenerator = (AliGenerator*)genHijParaB;
148 genHij = HijingStandard();
149 // impact parameter range
150 genHij->SetImpactParameterRange(0., 5.);
151 fGenerator = (AliGenerator*)genHij;
154 genHij = HijingStandard();
155 // impact parameter range
156 genHij->SetImpactParameterRange(0., 2.);
157 fGenerator = (AliGenerator*)genHij;
163 genHij = HijingStandard();
164 // impact parameter range
165 genHij->SetImpactParameterRange(5., 8.6);
166 fGenerator = (AliGenerator*)genHij;
169 //coment= comment.Append("HIJING per2");
170 genHij = HijingStandard();
171 // impact parameter range
172 genHij->SetImpactParameterRange(8.6, 11.2);
173 fGenerator = (AliGenerator*)genHij;
176 genHij = HijingStandard();
177 // impact parameter range
178 genHij->SetImpactParameterRange(11.2, 13.2);
179 fGenerator = (AliGenerator*)genHij;
182 genHij = HijingStandard();
183 // impact parameter range
184 genHij->SetImpactParameterRange(13.2, 15.);
185 fGenerator = (AliGenerator*)genHij;
188 //coment= comment.Append("HIJING per5");
189 genHij = HijingStandard();
190 // impact parameter range
191 genHij->SetImpactParameterRange(15., 100.);
192 fGenerator = (AliGenerator*)genHij;
198 //coment= comment.Append("HIJING Jet 25 GeV");
199 genHij = HijingStandard();
200 // impact parameter range
201 genHij->SetImpactParameterRange(0., 5.);
203 genHij->SetTrigger(1);
204 genHij->SetPtJet(25.);
205 genHij->SetSimpleJets(1);
206 genHij->SetRadiation(isw);
207 genHij->SetJetEtaRange(-0.3,0.3);
208 genHij->SetJetPhiRange(15.,105.);
209 fGenerator = (AliGenerator*)genHij;
213 //coment= comment.Append("HIJING Jet 50 GeV");
214 genHij = HijingStandard();
215 // impact parameter range
216 genHij->SetImpactParameterRange(0., 5.);
218 genHij->SetTrigger(1);
219 genHij->SetPtJet(50.);
220 genHij->SetSimpleJets(1);
221 genHij->SetRadiation(isw);
222 genHij->SetJetEtaRange(-0.3,0.3);
223 genHij->SetJetPhiRange(15.,105.);
224 fGenerator = (AliGenerator*)genHij;
228 //coment= comment.Append("HIJING Jet 75 GeV");
229 genHij = HijingStandard();
230 // impact parameter range
231 genHij->SetImpactParameterRange(0., 5.);
233 genHij->SetTrigger(1);
234 genHij->SetPtJet(75.);
235 genHij->SetSimpleJets(1);
236 genHij->SetRadiation(isw);
237 genHij->SetJetEtaRange(-0.3,0.3);
238 genHij->SetJetPhiRange(15.,105.);
239 fGenerator = (AliGenerator*)genHij;
243 //coment= comment.Append("HIJING Jet 100 GeV");
244 genHij = HijingStandard();
245 // impact parameter range
246 genHij->SetImpactParameterRange(0., 5.);
248 genHij->SetTrigger(1);
249 genHij->SetPtJet(100.);
250 genHij->SetSimpleJets(1);
251 genHij->SetRadiation(isw);
252 genHij->SetJetEtaRange(-0.3,0.3);
253 genHij->SetJetPhiRange(15.,105.);
254 fGenerator = (AliGenerator*)genHij;
258 //coment= comment.Append("HIJING Jet 125 GeV");
259 genHij = HijingStandard();
260 // impact parameter range
261 genHij->SetImpactParameterRange(0., 5.);
263 genHij->SetTrigger(1);
264 genHij->SetPtJet(125.);
265 genHij->SetSimpleJets(1);
266 genHij->SetRadiation(isw);
267 genHij->SetJetEtaRange(-0.3,0.3);
268 genHij->SetJetPhiRange(15.,105.);
269 fGenerator = (AliGenerator*)genHij;
275 //coment= comment.Append("HIJING Gamma 25 GeV");
276 genHij = HijingStandard();
277 // impact parameter range
278 genHij->SetImpactParameterRange(0., 5.);
280 genHij->SetTrigger(2);
281 genHij->SetPtJet(25.);
282 genHij->SetSimpleJets(1);
283 genHij->SetRadiation(isw);
284 genHij->SetJetEtaRange(-0.3,0.3);
285 genHij->SetJetPhiRange(15.,105.);
286 fGenerator = (AliGenerator*)genHij;
290 //coment= comment.Append("HIJING Gamma 50 GeV");
291 genHij = HijingStandard();
292 // impact parameter range
293 genHij->SetImpactParameterRange(0., 5.);
295 genHij->SetTrigger(2);
296 genHij->SetPtJet(50.);
297 genHij->SetSimpleJets(1);
298 genHij->SetRadiation(isw);
299 genHij->SetJetEtaRange(-0.3,0.3);
300 genHij->SetJetPhiRange(15.,105.);
301 fGenerator = (AliGenerator*)genHij;
305 //coment= comment.Append("HIJING Gamma 75 GeV");
306 genHij = HijingStandard();
307 // impact parameter range
308 genHij->SetImpactParameterRange(0., 5.);
310 genHij->SetTrigger(2);
311 genHij->SetPtJet(75.);
312 genHij->SetSimpleJets(1);
313 genHij->SetRadiation(isw);
314 genHij->SetJetEtaRange(-0.3,0.3);
315 genHij->SetJetPhiRange(15.,105.);
316 fGenerator = (AliGenerator*)genHij;
320 //coment= comment.Append("HIJING Gamma 100 GeV");
321 genHij = HijingStandard();
322 // impact parameter range
323 genHij->SetImpactParameterRange(0., 5.);
325 genHij->SetTrigger(2);
326 genHij->SetPtJet(100.);
327 genHij->SetSimpleJets(1);
328 genHij->SetRadiation(isw);
329 genHij->SetJetEtaRange(-0.3,0.3);
330 genHij->SetJetPhiRange(15.,105.);
331 fGenerator = (AliGenerator*)genHij;
335 //coment= comment.Append("HIJING Gamma 125 GeV");
336 genHij = HijingStandard();
337 // impact parameter range
338 genHij->SetImpactParameterRange(0., 5.);
340 genHij->SetTrigger(2);
341 genHij->SetPtJet(125.);
342 genHij->SetSimpleJets(1);
343 genHij->SetRadiation(isw);
344 genHij->SetJetEtaRange(-0.3,0.3);
345 genHij->SetJetPhiRange(15.,105.);
346 fGenerator = (AliGenerator*)genHij;
349 genCoct = new AliGenCocktail();
350 genCoct->SetMomentumRange(0, 999999.);
351 genCoct->SetPhiRange(-180., 180.);
352 // Set pseudorapidity range from -8 to 8.
353 thmin = EtaToTheta( 5.); // theta min. <---> eta max
354 thmax = EtaToTheta(-5.); // theta max. <---> eta min
355 genCoct->SetThetaRange(thmin,thmax);
360 // AliGenHIJINGparaBa *bg = new AliGenHIJINGparaBa(82534);
361 bg = new AliGenHIJINGparaBa(10);
362 fBgGenerator = (AliGenerator*)bg;
366 jets = new AliGenPythia(-1);
367 fSignalGenerator = (AliGenerator*)jets;
368 // Centre of mass energy
369 jets->SetEnergyCMS(5500.);
371 jets->SetProcess(kPyJets);
372 // final state kinematic cuts
373 jets->SetJetEtaRange(-0.3, 0.3);
374 jets->SetJetPhiRange(15., 105.);
375 // Structure function
376 jets->SetStrucFunc(kGRVLO98);
378 // Pt transfer of the hard scattering
379 jets->SetPtHard(100.,100.1);
380 // Decay type (semielectronic, semimuonic, nodecay)
381 jets->SetForceDecay(kAll);
383 // Add all to cockail ...
385 genCoct->AddGenerator(jets,"Jets",1);
386 genCoct->AddGenerator(bg,"Underlying Event", 1);
387 fGenerator = (AliGenerator*)genCoct;
391 genCoct = new AliGenCocktail();
392 genCoct->SetMomentumRange(0, 999999.);
393 genCoct->SetPhiRange(-180., 180.);
394 // Set pseudorapidity range from -8 to 8.
395 thmin = EtaToTheta( 5.); // theta min. <---> eta max
396 thmax = EtaToTheta(-5.); // theta max. <---> eta min
397 genCoct->SetThetaRange(thmin,thmax);
401 bg = new AliGenHIJINGparaBa(82534);
402 fBgGenerator = (AliGenerator*)bg;
406 jets = new AliGenPythia(-1);
407 fSignalGenerator = (AliGenerator*)jets;
408 // Centre of mass energy
409 jets->SetEnergyCMS(5500.);
411 jets->SetProcess(kPyDirectGamma);
412 // final state kinematic cuts
413 jets->SetJetEtaRange(-0.3, 0.3);
414 jets->SetJetPhiRange(15., 105.);
415 jets->SetGammaEtaRange(-0.12, 0.12);
416 jets->SetGammaPhiRange(220., 320.);
417 // Structure function
418 jets->SetStrucFunc(kGRVLO98);
420 // Pt transfer of the hard scattering
421 jets->SetPtHard(100.,100.1);
422 // Decay type (semielectronic, semimuonic, nodecay)
423 jets->SetForceDecay(kAll);
425 // Add all to cockail ...
427 genCoct->AddGenerator(jets,"Jets",1);
428 genCoct->AddGenerator(bg,"Underlying Event", 1);
429 fGenerator = (AliGenerator*)genCoct;
434 genPy = PythiaJets(50.);
435 fGenerator = (AliGenerator*)genPy;
439 genPy = PythiaJets(75.);
440 fGenerator = (AliGenerator*)genPy;
444 genPy = PythiaJets(100.);
445 fGenerator = (AliGenerator*)genPy;
449 genPy = PythiaJets(200.);
450 fGenerator = (AliGenerator*)genPy;
454 // 100 GeV Jets with radiation on - 22-mar-2002
455 // See AliPythia.cxx for default
456 genPy = PythiaJets(100.);
457 // genPy->SetKeyPartonJets(1); // for jet partons
458 // genPy->DefineParametersForPartonsJets();
460 fGenerator = (AliGenerator*)genPy;
464 // 50 GeV Jets + Gamma
465 genPy = PythiaJets(-1);
466 genPy->SetEnergyCMS(5500.);
467 genPy->SetProcess(kPyDirectGamma);
468 genPy->SetJetEtaRange(-0.3,+0.3);
469 genPy->SetJetPhiRange(15.,105.);
470 genPy->SetGammaEtaRange(-0.12, 0.12);
471 genPy->SetGammaPhiRange(220., 320.);
472 genPy->SetStrucFunc(kGRVLO98);
473 genPy->SetPtHard(50.,50.001);
474 genPy->SetForceDecay(kAll);
475 fGenerator = (AliGenerator*)genPy;
478 // 75 GeV Jets + Gamma
479 genPy = PythiaJets(-1);
480 genPy->SetEnergyCMS(5500.);
481 genPy->SetProcess(kPyDirectGamma);
482 genPy->SetJetEtaRange(-0.3,+0.3);
483 genPy->SetJetPhiRange(15.,105.);
484 genPy->SetGammaEtaRange(-0.12, 0.12);
485 genPy->SetGammaPhiRange(220., 320.);
486 genPy->SetStrucFunc(kGRVLO98);
487 genPy->SetPtHard(75.,75.001);
488 genPy->SetForceDecay(kAll);
489 fGenerator = (AliGenerator*)genPy;
492 // 100 GeV Jets + Gamma
493 genPy = PythiaJets(-1);
494 genPy->SetEnergyCMS(5500.);
495 genPy->SetProcess(kPyDirectGamma);
496 genPy->SetJetEtaRange(-0.3,+0.3);
497 genPy->SetJetPhiRange(15.,105.);
498 genPy->SetGammaEtaRange(-0.12, 0.12);
499 genPy->SetGammaPhiRange(220., 320.);
500 genPy->SetStrucFunc(kGRVLO98);
501 genPy->SetPtHard(100.,100.001);
502 genPy->SetForceDecay(kAll);
503 fGenerator = (AliGenerator*)genPy;
506 // 200 GeV Jets + Gamma
507 genPy = PythiaJets(-1);
508 genPy->SetEnergyCMS(5500.);
509 genPy->SetProcess(kPyDirectGamma);
510 genPy->SetJetEtaRange(-0.3,+0.3);
511 genPy->SetJetPhiRange(15.,105.);
512 genPy->SetGammaEtaRange(-0.12, 0.12);
513 genPy->SetGammaPhiRange(220., 320.);
514 genPy->SetStrucFunc(kGRVLO98);
515 genPy->SetPtHard(200.,200.001);
516 genPy->SetForceDecay(kAll);
517 fGenerator = (AliGenPythia*)genPy;
520 // 250 GeV Jets + Gamma
521 genPy = PythiaJets(-1);
522 genPy->SetEnergyCMS(5500.);
523 genPy->SetProcess(kPyDirectGamma);
524 genPy->SetJetEtaRange(-0.3,+0.3);
525 genPy->SetJetPhiRange(15.,105.);
526 genPy->SetGammaEtaRange(-0.12, 0.12);
527 genPy->SetGammaPhiRange(220., 320.);
528 genPy->SetStrucFunc(kGRVLO98);
529 genPy->SetPtHard(250.,250.001);
530 genPy->SetForceDecay(kAll);
531 fGenerator = (AliGenerator*)genPy;
534 // 300 GeV Jets + Gamma
535 genPy = PythiaJets(-1);
536 genPy->SetEnergyCMS(5500.);
537 genPy->SetProcess(kPyDirectGamma);
538 genPy->SetJetEtaRange(-0.3,+0.3);
539 genPy->SetJetPhiRange(15.,105.);
540 genPy->SetGammaEtaRange(-0.12, 0.12);
541 genPy->SetGammaPhiRange(220., 320.);
542 genPy->SetStrucFunc(kGRVLO98);
543 genPy->SetPtHard(300.,300.001);
544 genPy->SetForceDecay(kAll);
545 fGenerator = (AliGenerator*)genPy;
548 printf("<I> wrong parameter for generator run %i rad %i\n", run, rad);
551 if(fGenerator) fGenerator->SetPtRange(0.,1.e10); // discard the limit on pT
555 AliEMCALGeneratorFactory::AliEMCALGeneratorFactory(PprRunFact_t run, Float_t p)
557 fGenerator = fBgGenerator = fSignalGenerator = 0;
565 genB = OneParticleWithFixedEnergy(kGamma, p);
568 genB = OneParticleWithFixedEnergy(kPi0, p);
571 printf("<I> wrong parameter for generator run %i \n",run);
574 if(genB) fGenerator = (AliGenerator*)genB;
575 // if(fGenerator) fGenerator->SetPtRange(0.,1.e10); // discard the limit on pT - 23-aug-04
578 AliGenHijing* AliEMCALGeneratorFactory::HijingStandard()
580 AliGenHijing *gener = new AliGenHijing(-1);
581 // centre of mass energy
582 gener->SetEnergyCMS(5500.);
584 gener->SetReferenceFrame("CMS");
586 gener->SetProjectile("A", 208, 82);
587 gener->SetTarget ("A", 208, 82);
588 // tell hijing to keep the full parent child chain
589 gener->KeepFullEvent();
590 // enable jet quenching
591 gener->SetJetQuenching(1);
593 gener->SetShadowing(1);
594 // neutral pion and heavy particle decays switched off
595 gener->SetDecaysOff(1);
596 // Don't track spectators
597 gener->SetSpectators(0);
598 // kinematic selection
599 gener->SetSelectAll(0);
603 AliGenPythia* AliEMCALGeneratorFactory::PythiaJets(Float_t energy)
605 AliGenPythia *gener = new AliGenPythia(-1);
606 // Centre of mass energy
607 gener->SetEnergyCMS(5500.);
609 gener->SetProcess(kPyJets);
610 // final state kinematic cuts
611 gener->SetJetEtaRange(-0.3, 0.3);
612 gener->SetJetPhiRange(15., 105.);
613 // Structure function
614 gener->SetStrucFunc(kGRVLO98);
616 // Pt transfer of the hard scattering
617 gener->SetPtHard(energy, energy+0.1);
618 // Decay type (semielectronic, semimuonic, nodecay)
619 gener->SetForceDecay(kAll);
625 AliGenPythia* AliEMCALGeneratorFactory::PythiaGamma(Float_t energy)
627 AliGenPythia *gener = new AliGenPythia(-1);
628 // Centre of mass energy
629 gener->SetEnergyCMS(5500.);
631 gener->SetProcess(kPyDirectGamma);
632 // final state kinematic cuts
633 gener->SetJetEtaRange(-0.3, 0.3);
634 gener->SetJetPhiRange(15., 105.);
635 gener->SetGammaEtaRange(-0.12, 0.12);
636 gener->SetGammaPhiRange(220., 320.);
637 // Structure function
638 gener->SetStrucFunc(kGRVLO98);
640 // Pt transfer of the hard scattering
641 gener->SetPtHard(energy, energy+0.1);
642 // Decay type (semielectronic, semimuonic, nodecay)
643 gener->SetForceDecay(kAll);
649 // Staff of Aleksei Pavlinov.
651 AliGenBox* AliEMCALGeneratorFactory::OneParticleWithFixedEnergy(Int_t type, Float_t p)
652 {// one particle in EMCAL acceptance
653 Float_t thmin = EtaToTheta(0.7), thmax = EtaToTheta(-0.7);
654 Float_t phimin=0, phimax=120;
655 Float_t pmin=p, pmax=p+0.01;
657 AliGenBox *gen = new AliGenBox(1);
659 gen->SetNumberParticles(1);
660 gen->SetThetaRange(thmin, thmax);
661 gen->SetPhiRange(phimin, phimax);
662 gen->SetMomentumRange(pmin, pmax);
664 printf("<I> AliEMCALGeneratorFactory::OneParticleWithFixedEnergy \n");
665 printf(" type of particle -> %i \n", type);
666 printf(" %6.4f < eta < %6.4f\n", thmin, thmax);
667 printf(" %6.4f < phi < %6.4f\n", phimin, phimax);
668 printf(" %7.2f < Momentum < %7.2f\n", pmin, pmax);
669 printf(" TestBit(kPtRange) %i | TestBit(kMomentumRange) %i\n",
670 gen->TestBit(BIT(17)), gen->TestBit(BIT(19)));