Root6-enabled version
[u/mrichter/AliRoot.git] / test / ppbench / Config.C
1 //Configuration of simulation
2
3 enum PprRun_t 
4 {
5     test50,
6     kParam_8000,   kParam_4000,  kParam_2000, 
7     kHijing_cent1, kHijing_cent2, 
8     kHijing_per1,  kHijing_per2, kHijing_per3, kHijing_per4,  kHijing_per5,
9     kHijing_jj25,  kHijing_jj50, kHijing_jj75, kHijing_jj100, kHijing_jj200, 
10     kHijing_gj25,  kHijing_gj50, kHijing_gj75, kHijing_gj100, kHijing_gj200,
11     kHijing_pA, kPythia6, 
12     kPythia6Jets20_24,   kPythia6Jets24_29,   kPythia6Jets29_35,
13     kPythia6Jets35_42,   kPythia6Jets42_50,   kPythia6Jets50_60,
14     kPythia6Jets60_72,   kPythia6Jets72_86,   kPythia6Jets86_104,
15     kPythia6Jets104_125, kPythia6Jets125_150, kPythia6Jets150_180,
16     kD0PbPb5500, kCharmSemiElPbPb5500, kBeautySemiElPbPb5500,
17     kCocktailTRD, kPyJJ, kPyGJ, 
18     kMuonCocktailCent1, kMuonCocktailPer1, kMuonCocktailPer4, 
19     kMuonCocktailCent1HighPt, kMuonCocktailPer1HighPt, kMuonCocktailPer4HighPt,
20     kMuonCocktailCent1Single, kMuonCocktailPer1Single, kMuonCocktailPer4Single,
21     kFlow_2_2000, kFlow_10_2000, kFlow_6_2000, kFlow_6_5000,
22     kHIJINGplus, kRunMax
23 };
24
25 const char* pprRunName[] = {
26     "test50",
27     "kParam_8000",   "kParam_4000",  "kParam_2000", 
28     "kHijing_cent1", "kHijing_cent2", 
29     "kHijing_per1",  "kHijing_per2", "kHijing_per3", "kHijing_per4",  
30     "kHijing_per5",
31     "kHijing_jj25",  "kHijing_jj50", "kHijing_jj75", "kHijing_jj100", 
32     "kHijing_jj200", 
33     "kHijing_gj25",  "kHijing_gj50", "kHijing_gj75", "kHijing_gj100", 
34     "kHijing_gj200", "kHijing_pA", "kPythia6", 
35     "kPythia6Jets20_24",   "kPythia6Jets24_29",   "kPythia6Jets29_35",
36     "kPythia6Jets35_42",   "kPythia6Jets42_50",   "kPythia6Jets50_60",
37     "kPythia6Jets60_72",   "kPythia6Jets72_86",   "kPythia6Jets86_104",
38     "kPythia6Jets104_125", "kPythia6Jets125_150", "kPythia6Jets150_180",
39     "kD0PbPb5500", "kCharmSemiElPbPb5500", "kBeautySemiElPbPb5500",
40     "kCocktailTRD", "kPyJJ", "kPyGJ", 
41     "kMuonCocktailCent1", "kMuonCocktailPer1", "kMuonCocktailPer4",  
42     "kMuonCocktailCent1HighPt", "kMuonCocktailPer1HighPt", "kMuonCocktailPer4HighPt",
43     "kMuonCocktailCent1Single", "kMuonCocktailPer1Single", "kMuonCocktailPer4Single",
44     "kFlow_2_2000", "kFlow_10_2000", "kFlow_6_2000", "kFlow_6_5000", "kHIJINGplus"
45 };
46
47 enum PprRad_t
48 {
49     kGluonRadiation, kNoGluonRadiation
50 };
51
52 enum PprTrigConf_t
53 {
54     kDefaultPPTrig, kDefaultPbPbTrig
55 };
56
57 const char * pprTrigConfName[] = {
58     "p-p","Pb-Pb"
59 };
60
61 // This part for configuration    
62
63 static PprRun_t srun = kPythia6;
64 static PprRad_t srad = kGluonRadiation;
65 static AliMagF::BMap_t smag = AliMagF::k5kG;
66 static Int_t    sseed = 12345; //Set 0 to use the current time
67 static PprTrigConf_t strig = kDefaultPPTrig; // default pp trigger configuration
68
69 // Comment line 
70 static TString  comment;
71
72 // Functions
73 Float_t EtaToTheta(Float_t arg);
74 AliGenerator* GeneratorFactory(PprRun_t srun);
75 AliGenHijing* HijingStandard();
76 AliGenGeVSim* GeVSimStandard(Float_t, Float_t);
77 void ProcessEnvironmentVars();
78
79 void Config()
80 {
81     // ThetaRange is (0., 180.). It was (0.28,179.72) 7/12/00 09:00
82     // Theta range given through pseudorapidity limits 22/6/2001
83
84     // Get settings from environment variables
85     ProcessEnvironmentVars();
86
87     // Set Random Number seed
88     gRandom->SetSeed(sseed);
89     cout<<"Seed for random number generation= "<<gRandom->GetSeed()<<endl; 
90
91
92    // libraries required by geant321 and Pythia: loaded in sim.C
93
94     new     TGeant3TGeo("C++ Interface to Geant3");
95
96   // Output every 100 tracks
97
98     TVirtualMC * vmc = TVirtualMC::GetMC();
99
100   ((TGeant3*)vmc)->SetSWIT(4,100);
101
102     AliRunLoader* rl=0x0;
103
104     AliLog::Message(AliLog::kInfo, "Creating Run Loader", "", "", "Config()"," ConfigPPR.C", __LINE__);
105
106     rl = AliRunLoader::Open("galice.root",
107                             AliConfig::GetDefaultEventFolderName(),
108                             "recreate");
109     if (rl == 0x0)
110       {
111         gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
112         return;
113       }
114     rl->SetCompressionLevel(2);
115     rl->SetNumberOfEventsPerFile(100);
116     gAlice->SetRunLoader(rl);
117
118     // Set the trigger configuration
119     AliSimulation::Instance()->SetTriggerConfig(pprTrigConfName[strig]);
120     cout<<"Trigger configuration is set to  "<<pprTrigConfName[strig]<<endl;
121
122     //
123     // Set External decayer
124     AliDecayer *decayer = new AliDecayerPythia();
125
126
127     switch (srun) {
128     case kD0PbPb5500:
129       decayer->SetForceDecay(kHadronicD);
130       break;
131     case kCharmSemiElPbPb5500:
132       decayer->SetForceDecay(kSemiElectronic);
133       break;
134     case kBeautySemiElPbPb5500:
135       decayer->SetForceDecay(kSemiElectronic);
136       break;
137     default:
138       decayer->SetForceDecay(kAll);
139       break;
140     }
141     decayer->Init();
142     vmc->SetExternalDecayer(decayer);
143     //
144     //
145     //=======================================================================
146     //
147     //=======================================================================
148     // ************* STEERING parameters FOR ALICE SIMULATION **************
149     // --- Specify event type to be tracked through the ALICE setup
150     // --- All positions are in cm, angles in degrees, and P and E in GeV
151
152     vmc->SetProcess("DCAY",1);
153     vmc->SetProcess("PAIR",1);
154     vmc->SetProcess("COMP",1);
155     vmc->SetProcess("PHOT",1);
156     vmc->SetProcess("PFIS",0);
157     vmc->SetProcess("DRAY",0);
158     vmc->SetProcess("ANNI",1);
159     vmc->SetProcess("BREM",1);
160     vmc->SetProcess("MUNU",1);
161     vmc->SetProcess("CKOV",1);
162     vmc->SetProcess("HADR",1);
163     vmc->SetProcess("LOSS",2);
164     vmc->SetProcess("MULS",1);
165     vmc->SetProcess("RAYL",1);
166
167     Float_t cut = 1.e-3;        // 1MeV cut by default
168     Float_t tofmax = 1.e10;
169
170     vmc->SetCut("CUTGAM", cut);
171     vmc->SetCut("CUTELE", cut);
172     vmc->SetCut("CUTNEU", cut);
173     vmc->SetCut("CUTHAD", cut);
174     vmc->SetCut("CUTMUO", cut);
175     vmc->SetCut("BCUTE",  cut); 
176     vmc->SetCut("BCUTM",  cut); 
177     vmc->SetCut("DCUTE",  cut); 
178     vmc->SetCut("DCUTM",  cut); 
179     vmc->SetCut("PPCUTM", cut);
180     vmc->SetCut("TOFMAX", tofmax); 
181
182     // Generator Configuration
183     AliGenerator* gener = GeneratorFactory(srun);
184     gener->SetOrigin(0, 0, 0);    // vertex position
185     gener->SetSigma(0, 0, 5.3);   // Sigma in (X,Y,Z) (cm) on IP position
186     gener->SetCutVertexZ(1.);     // Truncate at 1 sigma
187     gener->SetVertexSmear(kPerEvent); 
188     gener->SetTrackingFlag(1);
189     gener->Init();
190     
191     if (smag == AliMagF::k2kG) {
192         comment = comment.Append(" | L3 field 0.2 T");
193     } else if (smag == AliMagF::k5kG) {
194         comment = comment.Append(" | L3 field 0.5 T");
195     }
196     
197     
198     if (srad == kGluonRadiation)
199     {
200         comment = comment.Append(" | Gluon Radiation On");
201         
202     } else {
203         comment = comment.Append(" | Gluon Radiation Off");
204     }
205
206     printf("\n \n Comment: %s \n \n", comment.Data());
207     
208     
209 // Field
210     TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", -1., -1., smag));
211
212     rl->CdGAFile();
213 //
214     Int_t   iABSO   = 1;
215     Int_t   iDIPO   = 1;
216     Int_t   iFMD    = 1;
217     Int_t   iFRAME  = 1;
218     Int_t   iHALL   = 1;
219     Int_t   iITS    = 1;
220     Int_t   iMAG    = 1;
221     Int_t   iMUON   = 1;
222     Int_t   iPHOS   = 1;
223     Int_t   iPIPE   = 1;
224     Int_t   iPMD    = 1;
225     Int_t   iHMPID  = 1;
226     Int_t   iSHIL   = 1;
227     Int_t   iT0     = 1;
228     Int_t   iTOF    = 1;
229     Int_t   iTPC    = 1;
230     Int_t   iTRD    = 1;
231     Int_t   iZDC    = 1;
232     Int_t   iEMCAL  = 1;
233     Int_t   iVZERO  = 1;
234     Int_t   iACORDE = 1;
235
236     //=================== Alice BODY parameters =============================
237     AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
238
239
240     if (iMAG)
241     {
242         //=================== MAG parameters ============================
243         // --- Start with Magnet since detector layouts may be depending ---
244         // --- on the selected Magnet dimensions ---
245         AliMAG *MAG = new AliMAG("MAG", "Magnet");
246     }
247
248
249     if (iABSO)
250     {
251         //=================== ABSO parameters ============================
252         AliABSO *ABSO = new AliABSOv3("ABSO", "Muon Absorber");
253     }
254
255     if (iDIPO)
256     {
257         //=================== DIPO parameters ============================
258
259         AliDIPO *DIPO = new AliDIPOv3("DIPO", "Dipole version 3");
260     }
261
262     if (iHALL)
263     {
264         //=================== HALL parameters ============================
265
266         AliHALL *HALL = new AliHALLv3("HALL", "Alice Hall");
267     }
268
269
270     if (iFRAME)
271     {
272         //=================== FRAME parameters ============================
273
274         AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
275         FRAME->SetHoles(1);
276     }
277
278     if (iSHIL)
279     {
280         //=================== SHIL parameters ============================
281
282         AliSHIL *SHIL = new AliSHILv3("SHIL", "Shielding Version 3");
283     }
284
285
286     if (iPIPE)
287     {
288         //=================== PIPE parameters ============================
289
290         AliPIPE *PIPE = new AliPIPEv3("PIPE", "Beam Pipe");
291     }
292  
293     if (iITS)
294     {
295         //=================== ITS parameters ============================
296
297         AliITS *ITS  = new AliITSv11("ITS","ITS v11");
298     }
299
300     if (iTPC)
301     {
302       //============================ TPC parameters =====================
303         AliTPC *TPC = new AliTPCv2("TPC", "Default");
304     }
305
306
307     if (iTOF) {
308         //=================== TOF parameters ============================
309         AliTOF *TOF = new AliTOFv6T0("TOF", "normal TOF");
310     }
311
312
313     if (iHMPID)
314     {
315         //=================== HMPID parameters ===========================
316         AliHMPID *HMPID = new AliHMPIDv3("HMPID", "normal HMPID");
317
318     }
319
320
321     if (iZDC)
322     {
323         //=================== ZDC parameters ============================
324
325         AliZDC *ZDC = new AliZDCv4("ZDC", "normal ZDC");
326     }
327
328     if (iTRD)
329     {
330         //=================== TRD parameters ============================
331
332         AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator");
333     }
334
335     if (iFMD)
336     {
337         //=================== FMD parameters ============================
338         AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
339    }
340
341     if (iMUON)
342     {
343         //=================== MUON parameters ===========================
344         // New MUONv1 version (geometry defined via builders)
345         AliMUON *MUON = new AliMUONv1("MUON", "default");
346     }
347     //=================== PHOS parameters ===========================
348
349     if (iPHOS)
350     {
351         AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP");
352     }
353
354
355     if (iPMD)
356     {
357         //=================== PMD parameters ============================
358         AliPMD *PMD = new AliPMDv1("PMD", "normal PMD");
359     }
360
361     if (iT0)
362     {
363         //=================== T0 parameters ============================
364         AliT0 *T0 = new AliT0v1("T0", "T0 Detector");
365     }
366
367     if (iEMCAL)
368     {
369         //=================== EMCAL parameters ============================
370         AliEMCAL *EMCAL = new AliEMCALv2("EMCAL", "EMCAL_COMPLETEV1");
371     }
372
373      if (iACORDE)
374     {
375         //=================== ACORDE parameters ============================
376         AliACORDE *ACORDE = new AliACORDEv1("ACORDE", "normal ACORDE");
377     }
378
379      if (iVZERO)
380     {
381         //=================== VZERO parameters ============================
382         AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO");
383     }
384  
385              
386 }
387
388 Float_t EtaToTheta(Float_t arg){
389   return (180./TMath::Pi())*2.*atan(exp(-arg));
390 }
391
392
393
394 AliGenerator* GeneratorFactory(PprRun_t srun) {
395     Int_t isw = 3;
396     if (srad == kNoGluonRadiation) isw = 0;
397     
398
399     AliGenerator * gGener = 0x0;
400     switch (srun) {
401     case test50:
402       {
403         comment = comment.Append(":HIJINGparam test 50 particles");
404         AliGenHIJINGpara *gener = new AliGenHIJINGpara(50);
405         gener->SetMomentumRange(0, 999999.);
406         gener->SetPhiRange(0., 360.);
407         // Set pseudorapidity range from -8 to 8.
408         Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
409         Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
410         gener->SetThetaRange(thmin,thmax);
411         gGener=gener;
412       }
413       break;
414     case kParam_8000:
415       {
416         comment = comment.Append(":HIJINGparam N=8000");
417         AliGenHIJINGpara *gener = new AliGenHIJINGpara(86030);
418         gener->SetMomentumRange(0, 999999.);
419         gener->SetPhiRange(0., 360.);
420         // Set pseudorapidity range from -8 to 8.
421         Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
422         Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
423         gener->SetThetaRange(thmin,thmax);
424         gGener=gener;
425       }
426       break;
427     case kParam_4000:
428       {
429         comment = comment.Append("HIJINGparam N=4000");
430         AliGenHIJINGpara *gener = new AliGenHIJINGpara(43015);
431         gener->SetMomentumRange(0, 999999.);
432         gener->SetPhiRange(0., 360.);
433         // Set pseudorapidity range from -8 to 8.
434         Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
435         Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
436         gener->SetThetaRange(thmin,thmax);
437         gGener=gener;
438       }
439         break;
440     case kParam_2000:
441       {
442         comment = comment.Append("HIJINGparam N=2000");
443         AliGenHIJINGpara *gener = new AliGenHIJINGpara(21507);
444         gener->SetMomentumRange(0, 999999.);
445         gener->SetPhiRange(0., 360.);
446         // Set pseudorapidity range from -8 to 8.
447         Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
448         Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
449         gener->SetThetaRange(thmin,thmax);
450         gGener=gener;
451       }
452       break;
453 //
454 //  Hijing Central
455 //
456     case kHijing_cent1:
457       {
458         comment = comment.Append("HIJING cent1");
459         AliGenHijing *gener = HijingStandard();
460 // impact parameter range
461         gener->SetImpactParameterRange(0., 5.);
462         gGener=gener;
463       }
464       break;
465     case kHijing_cent2:
466       {
467         comment = comment.Append("HIJING cent2");
468         AliGenHijing *gener = HijingStandard();
469 // impact parameter range
470         gener->SetImpactParameterRange(0., 2.);
471         gGener=gener;
472       }
473       break;
474 //
475 // Hijing Peripheral 
476 //
477     case kHijing_per1:
478       {
479         comment = comment.Append("HIJING per1");
480         AliGenHijing *gener = HijingStandard();
481 // impact parameter range
482         gener->SetImpactParameterRange(5., 8.6);
483         gGener=gener;
484       }
485       break;
486     case kHijing_per2:
487       {
488         comment = comment.Append("HIJING per2");
489         AliGenHijing *gener = HijingStandard();
490 // impact parameter range
491         gener->SetImpactParameterRange(8.6, 11.2);
492         gGener=gener;
493       }
494       break;
495     case kHijing_per3:
496       {
497         comment = comment.Append("HIJING per3");
498         AliGenHijing *gener = HijingStandard();
499 // impact parameter range
500         gener->SetImpactParameterRange(11.2, 13.2);
501         gGener=gener;
502       }
503       break;
504     case kHijing_per4:
505       {
506         comment = comment.Append("HIJING per4");
507         AliGenHijing *gener = HijingStandard();
508 // impact parameter range
509         gener->SetImpactParameterRange(13.2, 15.);
510         gGener=gener;
511       }
512       break;
513     case kHijing_per5:
514       {
515         comment = comment.Append("HIJING per5");
516         AliGenHijing *gener = HijingStandard();
517 // impact parameter range
518         gener->SetImpactParameterRange(15., 100.);
519         gGener=gener;
520       }
521       break;
522 //
523 //  Jet-Jet
524 //
525     case kHijing_jj25:
526       {
527         comment = comment.Append("HIJING Jet 25 GeV");
528         AliGenHijing *gener = HijingStandard();
529 // impact parameter range
530         gener->SetImpactParameterRange(0., 5.);
531         // trigger
532         gener->SetTrigger(1);
533         gener->SetPtJet(25.);
534         gener->SetRadiation(isw);
535         gener->SetSimpleJets(!isw);
536         gener->SetJetEtaRange(-0.3,0.3);
537         gener->SetJetPhiRange(75., 165.);   
538         gGener=gener;
539       }
540       break;
541
542     case kHijing_jj50:
543       {
544         comment = comment.Append("HIJING Jet 50 GeV");
545         AliGenHijing *gener = HijingStandard();
546 // impact parameter range
547         gener->SetImpactParameterRange(0., 5.);
548         // trigger
549         gener->SetTrigger(1);
550         gener->SetPtJet(50.);
551         gener->SetRadiation(isw);
552         gener->SetSimpleJets(!isw);
553         gener->SetJetEtaRange(-0.3,0.3);
554         gener->SetJetPhiRange(75., 165.);   
555         gGener=gener;
556       }
557         break;
558
559     case kHijing_jj75:
560       {
561         comment = comment.Append("HIJING Jet 75 GeV");
562         AliGenHijing *gener = HijingStandard();
563 // impact parameter range
564         gener->SetImpactParameterRange(0., 5.);
565         // trigger
566         gener->SetTrigger(1);
567         gener->SetPtJet(75.);
568         gener->SetRadiation(isw);
569         gener->SetSimpleJets(!isw);
570         gener->SetJetEtaRange(-0.3,0.3);
571         gener->SetJetPhiRange(75., 165.);   
572         gGener=gener;
573       }
574       break;
575
576     case kHijing_jj100:
577       {
578         comment = comment.Append("HIJING Jet 100 GeV");
579         AliGenHijing *gener = HijingStandard();
580 // impact parameter range
581         gener->SetImpactParameterRange(0., 5.);
582         // trigger
583         gener->SetTrigger(1);
584         gener->SetPtJet(100.);
585         gener->SetRadiation(isw);
586         gener->SetSimpleJets(!isw);
587         gener->SetJetEtaRange(-0.3,0.3);
588         gener->SetJetPhiRange(75., 165.);   
589         gGener=gener;
590       }
591       break;
592
593     case kHijing_jj200:
594       {
595         comment = comment.Append("HIJING Jet 200 GeV");
596         AliGenHijing *gener = HijingStandard();
597 // impact parameter range
598         gener->SetImpactParameterRange(0., 5.);
599         // trigger
600         gener->SetTrigger(1);
601         gener->SetPtJet(200.);
602         gener->SetRadiation(isw);
603         gener->SetSimpleJets(!isw);
604         gener->SetJetEtaRange(-0.3,0.3);
605         gener->SetJetPhiRange(75., 165.);   
606         gGener=gener;
607       }
608       break;
609 //
610 // Gamma-Jet
611 //
612     case kHijing_gj25:
613       {
614         comment = comment.Append("HIJING Gamma 25 GeV");
615         AliGenHijing *gener = HijingStandard();
616 // impact parameter range
617         gener->SetImpactParameterRange(0., 5.);
618         // trigger
619         gener->SetTrigger(2);
620         gener->SetPtJet(25.);
621         gener->SetRadiation(isw);
622         gener->SetSimpleJets(!isw);
623         gener->SetJetEtaRange(-0.12, 0.12);
624         gener->SetJetPhiRange(220., 320.);
625         gGener=gener;
626       }
627       break;
628
629     case kHijing_gj50:
630       {
631         comment = comment.Append("HIJING Gamma 50 GeV");
632         AliGenHijing *gener = HijingStandard();
633 // impact parameter range
634         gener->SetImpactParameterRange(0., 5.);
635         // trigger
636         gener->SetTrigger(2);
637         gener->SetPtJet(50.);
638         gener->SetRadiation(isw);
639         gener->SetSimpleJets(!isw);
640         gener->SetJetEtaRange(-0.12, 0.12);
641         gener->SetJetPhiRange(220., 320.);
642         gGener=gener;
643       }
644       break;
645
646     case kHijing_gj75:
647       {
648         comment = comment.Append("HIJING Gamma 75 GeV");
649         AliGenHijing *gener = HijingStandard();
650 // impact parameter range
651         gener->SetImpactParameterRange(0., 5.);
652         // trigger
653         gener->SetTrigger(2);
654         gener->SetPtJet(75.);
655         gener->SetRadiation(isw);
656         gener->SetSimpleJets(!isw);
657         gener->SetJetEtaRange(-0.12, 0.12);
658         gener->SetJetPhiRange(220., 320.);
659         gGener=gener;
660       }
661       break;
662
663     case kHijing_gj100:
664       {
665         comment = comment.Append("HIJING Gamma 100 GeV");
666         AliGenHijing *gener = HijingStandard();
667 // impact parameter range
668         gener->SetImpactParameterRange(0., 5.);
669         // trigger
670         gener->SetTrigger(2);
671         gener->SetPtJet(100.);
672         gener->SetRadiation(isw);
673         gener->SetSimpleJets(!isw);
674         gener->SetJetEtaRange(-0.12, 0.12);
675         gener->SetJetPhiRange(220., 320.);
676         gGener=gener;
677       }
678       break;
679
680     case kHijing_gj200:
681       {
682         comment = comment.Append("HIJING Gamma 200 GeV");
683         AliGenHijing *gener = HijingStandard();
684 // impact parameter range
685         gener->SetImpactParameterRange(0., 5.);
686         // trigger
687         gener->SetTrigger(2);
688         gener->SetPtJet(200.);
689         gener->SetRadiation(isw);
690         gener->SetSimpleJets(!isw);
691         gener->SetJetEtaRange(-0.12, 0.12);
692         gener->SetJetPhiRange(220., 320.);
693         gGener=gener;
694       }
695       break;
696     case kHijing_pA:
697       {
698         comment = comment.Append("HIJING pA");
699
700         AliGenCocktail *gener  = new AliGenCocktail();
701
702         AliGenHijing   *hijing = new AliGenHijing(-1);
703 // centre of mass energy 
704         hijing->SetEnergyCMS(TMath::Sqrt(82./208.) * 14000.);
705 // impact parameter range
706         hijing->SetImpactParameterRange(0., 15.);
707 // reference frame
708         hijing->SetReferenceFrame("CMS");
709         hijing->SetBoostLHC(1);
710 // projectile
711         hijing->SetProjectile("P", 1, 1);
712         hijing->SetTarget    ("A", 208, 82);
713 // tell hijing to keep the full parent child chain
714         hijing->KeepFullEvent();
715 // enable jet quenching
716         hijing->SetJetQuenching(0);
717 // enable shadowing
718         hijing->SetShadowing(1);
719 // Don't track spectators
720         hijing->SetSpectators(0);
721 // kinematic selection
722         hijing->SetSelectAll(0);
723 //
724         AliGenSlowNucleons*  gray    = new AliGenSlowNucleons(1);
725         AliSlowNucleonModel* model   = new AliSlowNucleonModelExp();
726         gray->SetSlowNucleonModel(model);
727         gray->SetDebug(1);
728         gener->AddGenerator(hijing,"Hijing pPb", 1);
729         gener->AddGenerator(gray,  "Gray Particles",1);
730         gGener=gener;
731       }
732       break;
733       case kPythia6:
734       {
735         comment = comment.Append(":Pythia p-p @ 14 TeV");
736         AliGenPythia *gener = new AliGenPythia(-1); 
737         gener->SetMomentumRange(0,999999);
738         gener->SetThetaRange(0., 180.);
739         gener->SetYRange(-12,12);
740         gener->SetPtRange(0,1000);
741         gener->SetProcess(kPyMb);
742         gener->SetEnergyCMS(14000.);
743         gener->SetProjectile("p", 1, 1) ; 
744         gener->SetTarget("p", 1, 1) ; 
745         gGener=gener;
746       }
747         break;
748       case kPythia6Jets20_24:
749       {
750         comment = comment.Append(":Pythia jets 20-24 GeV @ 5.5 TeV");
751         AliGenPythia * gener = new AliGenPythia(-1);
752         gener->SetEnergyCMS(5500.);//        Centre of mass energy
753         gener->SetProcess(kPyJets);//        Process type
754         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
755         gener->SetJetPhiRange(0., 360.);
756         gener->SetJetEtRange(10., 1000.);
757         gener->SetGluonRadiation(1,1);
758         //    gener->SetPtKick(0.);
759         //   Structure function
760         gener->SetStrucFunc(kCTEQ4L);
761         gener->SetPtHard(20., 24.);// Pt transfer of the hard scattering
762         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
763         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
764         gener->SetProjectile("p", 1, 1) ; 
765         gener->SetTarget("p", 1, 1) ; 
766         gGener=gener;
767       }
768         break;
769       case kPythia6Jets24_29:
770       {
771         comment = comment.Append(":Pythia jets 24-29 GeV @ 5.5 TeV");
772         AliGenPythia * gener = new AliGenPythia(-1);
773         gener->SetEnergyCMS(5500.);//        Centre of mass energy
774         gener->SetProcess(kPyJets);//        Process type
775         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
776         gener->SetJetPhiRange(0., 360.);
777         gener->SetJetEtRange(10., 1000.);
778         gener->SetGluonRadiation(1,1);
779         //    gener->SetPtKick(0.);
780         //   Structure function
781         gener->SetStrucFunc(kCTEQ4L);
782         gener->SetPtHard(24., 29.);// Pt transfer of the hard scattering
783         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
784         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
785         gener->SetProjectile("p", 1, 1) ; 
786         gener->SetTarget("p", 1, 1) ; 
787         gGener=gener;
788       }
789         break;
790       case kPythia6Jets29_35:
791       {
792         comment = comment.Append(":Pythia jets 29-35 GeV @ 5.5 TeV");
793         AliGenPythia * gener = new AliGenPythia(-1);
794         gener->SetEnergyCMS(5500.);//        Centre of mass energy
795         gener->SetProcess(kPyJets);//        Process type
796         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
797         gener->SetJetPhiRange(0., 360.);
798         gener->SetJetEtRange(10., 1000.);
799         gener->SetGluonRadiation(1,1);
800         //    gener->SetPtKick(0.);
801         //   Structure function
802         gener->SetStrucFunc(kCTEQ4L);
803         gener->SetPtHard(29., 35.);// Pt transfer of the hard scattering
804         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
805         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
806         gener->SetProjectile("p", 1, 1) ; 
807         gener->SetTarget("p", 1, 1) ; 
808         gGener=gener;
809       }
810         break;
811       case kPythia6Jets35_42:
812       {
813         comment = comment.Append(":Pythia jets 35-42 GeV @ 5.5 TeV");
814         AliGenPythia * gener = new AliGenPythia(-1);
815         gener->SetEnergyCMS(5500.);//        Centre of mass energy
816         gener->SetProcess(kPyJets);//        Process type
817         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
818         gener->SetJetPhiRange(0., 360.);
819         gener->SetJetEtRange(10., 1000.);
820         gener->SetGluonRadiation(1,1);
821         //    gener->SetPtKick(0.);
822         //   Structure function
823         gener->SetStrucFunc(kCTEQ4L);
824         gener->SetPtHard(35., 42.);// Pt transfer of the hard scattering
825         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
826         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
827         gener->SetProjectile("p", 1, 1) ; 
828         gener->SetTarget("p", 1, 1) ; 
829         gGener=gener;
830       }
831         break;
832       case kPythia6Jets42_50:
833       {
834         comment = comment.Append(":Pythia jets 42-50 GeV @ 5.5 TeV");
835         AliGenPythia * gener = new AliGenPythia(-1);
836         gener->SetEnergyCMS(5500.);//        Centre of mass energy
837         gener->SetProcess(kPyJets);//        Process type
838         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
839         gener->SetJetPhiRange(0., 360.);
840         gener->SetJetEtRange(10., 1000.);
841         gener->SetGluonRadiation(1,1);
842         //    gener->SetPtKick(0.);
843         //   Structure function
844         gener->SetStrucFunc(kCTEQ4L);
845         gener->SetPtHard(42., 50.);// Pt transfer of the hard scattering
846         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
847         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
848         gener->SetProjectile("p", 1, 1) ; 
849         gener->SetTarget("p", 1, 1) ; 
850         gGener=gener;
851       }
852       break;
853       case kPythia6Jets50_60:
854       {
855         comment = comment.Append(":Pythia jets 50-60 GeV @ 5.5 TeV");
856         AliGenPythia * gener = new AliGenPythia(-1);
857         gener->SetEnergyCMS(5500.);//        Centre of mass energy
858         gener->SetProcess(kPyJets);//        Process type
859         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
860         gener->SetJetPhiRange(0., 360.);
861         gener->SetJetEtRange(10., 1000.);
862         gener->SetGluonRadiation(1,1);
863         //    gener->SetPtKick(0.);
864         //   Structure function
865         gener->SetStrucFunc(kCTEQ4L);
866         gener->SetPtHard(50., 60.);// Pt transfer of the hard scattering
867         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
868         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
869         gGener=gener;
870       }
871         break;
872       case kPythia6Jets60_72:
873       {
874         comment = comment.Append(":Pythia jets 60-72 GeV @ 5.5 TeV");
875         AliGenPythia * gener = new AliGenPythia(-1);
876         gener->SetEnergyCMS(5500.);//        Centre of mass energy
877         gener->SetProcess(kPyJets);//        Process type
878         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
879         gener->SetJetPhiRange(0., 360.);
880         gener->SetJetEtRange(10., 1000.);
881         gener->SetGluonRadiation(1,1);
882         //    gener->SetPtKick(0.);
883         //   Structure function
884         gener->SetStrucFunc(kCTEQ4L);
885         gener->SetPtHard(60., 72.);// Pt transfer of the hard scattering
886         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
887         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
888         gener->SetProjectile("p", 1, 1) ; 
889         gener->SetTarget("p", 1, 1) ; 
890         gGener=gener;
891       }
892         break;
893       case kPythia6Jets72_86:
894       {
895         comment = comment.Append(":Pythia jets 72-86 GeV @ 5.5 TeV");
896         AliGenPythia * gener = new AliGenPythia(-1);
897         gener->SetEnergyCMS(5500.);//        Centre of mass energy
898         gener->SetProcess(kPyJets);//        Process type
899         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
900         gener->SetJetPhiRange(0., 360.);
901         gener->SetJetEtRange(10., 1000.);
902         gener->SetGluonRadiation(1,1);
903         //    gener->SetPtKick(0.);
904         //   Structure function
905         gener->SetStrucFunc(kCTEQ4L);
906         gener->SetPtHard(72., 86.);// Pt transfer of the hard scattering
907         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
908         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
909         gener->SetProjectile("p", 1, 1) ; 
910         gener->SetTarget("p", 1, 1) ; 
911         gGener=gener;
912       }
913       break;
914       case kPythia6Jets86_104:
915       {
916         comment = comment.Append(":Pythia jets 86-104 GeV @ 5.5 TeV");
917         AliGenPythia * gener = new AliGenPythia(-1);
918         gener->SetEnergyCMS(5500.);//        Centre of mass energy
919         gener->SetProcess(kPyJets);//        Process type
920         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
921         gener->SetJetPhiRange(0., 360.);
922         gener->SetJetEtRange(10., 1000.);
923         gener->SetGluonRadiation(1,1);
924         //    gener->SetPtKick(0.);
925         //   Structure function
926         gener->SetStrucFunc(kCTEQ4L);
927         gener->SetPtHard(86., 104.);// Pt transfer of the hard scattering
928         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
929         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
930         gener->SetProjectile("p", 1, 1) ; 
931         gener->SetTarget("p", 1, 1) ; 
932         gGener=gener;
933       }
934       break;
935     case kPythia6Jets104_125:
936       {
937         comment = comment.Append(":Pythia jets 105-125 GeV @ 5.5 TeV");
938         AliGenPythia * gener = new AliGenPythia(-1);
939         gener->SetEnergyCMS(5500.);//        Centre of mass energy
940         gener->SetProcess(kPyJets);//        Process type
941         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
942         gener->SetJetPhiRange(0., 360.);
943         gener->SetJetEtRange(10., 1000.);
944         gener->SetGluonRadiation(1,1);
945         //    gener->SetPtKick(0.);
946         //   Structure function
947         gener->SetStrucFunc(kCTEQ4L);
948         gener->SetPtHard(104., 125.);// Pt transfer of the hard scattering
949         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
950         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
951         gener->SetProjectile("p", 1, 1) ; 
952         gener->SetTarget("p", 1, 1) ; 
953         gGener=gener;
954       }
955         break;
956       case kPythia6Jets125_150:
957       {
958         comment = comment.Append(":Pythia jets 125-150 GeV @ 5.5 TeV");
959         AliGenPythia * gener = new AliGenPythia(-1);
960         gener->SetEnergyCMS(5500.);//        Centre of mass energy
961         gener->SetProcess(kPyJets);//        Process type
962         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
963         gener->SetJetPhiRange(0., 360.);
964         gener->SetJetEtRange(10., 1000.);
965         gener->SetGluonRadiation(1,1);
966         //    gener->SetPtKick(0.);
967         //   Structure function
968         gener->SetStrucFunc(kCTEQ4L);
969         gener->SetPtHard(125., 150.);// Pt transfer of the hard scattering
970         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
971         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
972         gGener=gener;
973       }
974         break;
975       case kPythia6Jets150_180:
976       {
977         comment = comment.Append(":Pythia jets 150-180 GeV @ 5.5 TeV");
978         AliGenPythia * gener = new AliGenPythia(-1);
979         gener->SetEnergyCMS(5500.);//        Centre of mass energy
980         gener->SetProcess(kPyJets);//        Process type
981         gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
982         gener->SetJetPhiRange(0., 360.);
983         gener->SetJetEtRange(10., 1000.);
984         gener->SetGluonRadiation(1,1);
985         //    gener->SetPtKick(0.);
986         //   Structure function
987         gener->SetStrucFunc(kCTEQ4L);
988         gener->SetPtHard(150., 180.);// Pt transfer of the hard scattering
989         gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
990         gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
991         gener->SetProjectile("p", 1, 1) ; 
992         gener->SetTarget("p", 1, 1) ; 
993         gGener=gener;
994       }
995       break;
996       case kD0PbPb5500:
997       {
998         comment = comment.Append(" D0 in Pb-Pb at 5.5 TeV");
999         AliGenPythia * gener = new AliGenPythia(10);
1000         gener->SetProcess(kPyD0PbPbMNR);
1001         gener->SetStrucFunc(kCTEQ4L);
1002         gener->SetPtHard(2.1,-1.0);
1003         gener->SetEnergyCMS(5500.);
1004         gener->SetNuclei(208,208);
1005         gener->SetForceDecay(kHadronicD);
1006         gener->SetYRange(-2,2);
1007         gener->SetFeedDownHigherFamily(kFALSE);
1008         gener->SetStackFillOpt(AliGenPythia::kParentSelection);
1009         gener->SetCountMode(AliGenPythia::kCountParents);
1010         gener->SetProjectile("A", 208, 82) ; 
1011         gener->SetTarget("A", 208, 82) ; 
1012         gGener=gener;
1013       }
1014       break;
1015     case kCharmSemiElPbPb5500:
1016       {
1017         comment = comment.Append(" Charm in Pb-Pb at 5.5 TeV");
1018         AliGenPythia * gener = new AliGenPythia(10);
1019         gener->SetProcess(kPyCharmPbPbMNR);
1020         gener->SetStrucFunc(kCTEQ4L);
1021         gener->SetPtHard(2.1,-1.0);
1022         gener->SetEnergyCMS(5500.);
1023         gener->SetNuclei(208,208);
1024         gener->SetForceDecay(kSemiElectronic);
1025         gener->SetYRange(-2,2);
1026         gener->SetFeedDownHigherFamily(kFALSE);
1027         gener->SetCountMode(AliGenPythia::kCountParents);
1028         gener->SetProjectile("A", 208, 82) ; 
1029         gener->SetTarget("A", 208, 82) ; 
1030         gGener=gener;
1031       }
1032       break;
1033       case kBeautySemiElPbPb5500:
1034       {
1035         comment = comment.Append(" Beauty in Pb-Pb at 5.5 TeV");
1036         AliGenPythia *gener = new AliGenPythia(10);
1037         gener->SetProcess(kPyBeautyPbPbMNR);
1038         gener->SetStrucFunc(kCTEQ4L);
1039         gener->SetPtHard(2.75,-1.0);
1040         gener->SetEnergyCMS(5500.);
1041         gener->SetNuclei(208,208);
1042         gener->SetForceDecay(kSemiElectronic);
1043         gener->SetYRange(-2,2);
1044         gener->SetFeedDownHigherFamily(kFALSE);
1045         gener->SetCountMode(AliGenPythia::kCountParents);
1046         gener->SetProjectile("A", 208, 82) ; 
1047         gener->SetTarget("A", 208, 82) ; 
1048         gGener=gener;
1049       }
1050         break;
1051       case kCocktailTRD:
1052       {
1053         comment = comment.Append(" Cocktail for TRD at 5.5 TeV");
1054         AliGenCocktail *gener  = new AliGenCocktail();
1055         
1056         AliGenParam *phi = new AliGenParam(10,
1057                                            new AliGenMUONlib(),
1058                                            AliGenMUONlib::kPhi,
1059                                            "Vogt PbPb");
1060         
1061         phi->SetPtRange(0, 100);
1062         phi->SetYRange(-1., +1.);
1063         phi->SetForceDecay(kDiElectron);
1064         
1065         AliGenParam *omega = new AliGenParam(10,
1066                                              new AliGenMUONlib(),
1067                                              AliGenMUONlib::kOmega,
1068                                              "Vogt PbPb");
1069         
1070         omega->SetPtRange(0, 100);
1071         omega->SetYRange(-1., +1.);
1072         omega->SetForceDecay(kDiElectron);
1073         
1074         AliGenParam *jpsi = new AliGenParam(10,
1075                                             new AliGenMUONlib(),
1076                                             AliGenMUONlib::kJpsiFamily,
1077                                             "Vogt PbPb");
1078         
1079         jpsi->SetPtRange(0, 100);
1080         jpsi->SetYRange(-1., +1.);
1081         jpsi->SetForceDecay(kDiElectron);
1082         
1083         AliGenParam *ups = new AliGenParam(10,
1084                                            new AliGenMUONlib(),
1085                                            AliGenMUONlib::kUpsilonFamily,
1086                                            "Vogt PbPb");
1087         ups->SetPtRange(0, 100);
1088         ups->SetYRange(-1., +1.);
1089         ups->SetForceDecay(kDiElectron);
1090         
1091         AliGenParam *charm = new AliGenParam(10,
1092                                              new AliGenMUONlib(), 
1093                                              AliGenMUONlib::kCharm,
1094                                              "central");
1095         charm->SetPtRange(0, 100);
1096         charm->SetYRange(-1.5, +1.5);
1097         charm->SetForceDecay(kSemiElectronic);
1098         
1099         
1100         AliGenParam *beauty = new AliGenParam(10,
1101                                               new AliGenMUONlib(), 
1102                                               AliGenMUONlib::kBeauty,
1103                                               "central");
1104         beauty->SetPtRange(0, 100);
1105         beauty->SetYRange(-1.5, +1.5);
1106         beauty->SetForceDecay(kSemiElectronic);
1107         
1108         AliGenParam *beautyJ = new AliGenParam(10,
1109                                                new AliGenMUONlib(), 
1110                                                AliGenMUONlib::kBeauty,
1111                                                "central");
1112         beautyJ->SetPtRange(0, 100);
1113         beautyJ->SetYRange(-1.5, +1.5);
1114         beautyJ->SetForceDecay(kBJpsiDiElectron);
1115         
1116         gener->AddGenerator(phi,"Phi",1);
1117         gener->AddGenerator(omega,"Omega",1);
1118         gener->AddGenerator(jpsi,"J/psi",1);
1119         gener->AddGenerator(ups,"Upsilon",1);
1120         gener->AddGenerator(charm,"Charm",1);
1121         gener->AddGenerator(beauty,"Beauty",1);
1122         gener->AddGenerator(beautyJ,"J/Psi from Beauty",1);
1123         gener->SetProjectile("A", 208, 82) ; 
1124         gener->SetTarget("A", 208, 82) ; 
1125         gGener=gener;
1126       }
1127       break;
1128     case kPyJJ:
1129       {
1130         comment = comment.Append(" Jet-jet at 5.5 TeV");
1131         AliGenPythia *gener = new AliGenPythia(-1);
1132         gener->SetEnergyCMS(5500.);
1133         gener->SetProcess(kPyJets);
1134         Double_t ptHardMin=10.0, ptHardMax=-1.0;
1135         gener->SetPtHard(ptHardMin,ptHardMax);
1136         gener->SetYHard(-0.7,0.7);
1137         gener->SetJetEtaRange(-0.2,0.2);
1138         gener->SetEventListRange(0,1);
1139         gener->SetProjectile("p", 1, 1) ; 
1140         gener->SetTarget("p", 1, 1) ; 
1141         gGener=gener;
1142       }
1143         break;
1144       case kPyGJ:
1145       {
1146         comment = comment.Append(" Gamma-jet at 5.5 TeV");
1147         AliGenPythia *gener = new AliGenPythia(-1);
1148         gener->SetEnergyCMS(5500.);
1149         gener->SetProcess(kPyDirectGamma);
1150         Double_t ptHardMin=10.0, ptHardMax=-1.0;
1151         gener->SetPtHard(ptHardMin,ptHardMax);
1152         gener->SetYHard(-1.0,1.0);
1153         gener->SetGammaEtaRange(-0.13,0.13);
1154         gener->SetGammaPhiRange(210.,330.);
1155         gener->SetEventListRange(0,1);
1156         gener->SetProjectile("p", 1, 1) ; 
1157         gener->SetTarget("p", 1, 1) ; 
1158         gGener=gener;
1159       }
1160         break;
1161       case kMuonCocktailCent1:
1162       {
1163         comment = comment.Append(" Muon Cocktail Cent1");
1164         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1165         gener->SetPtRange(0.4,100.);       // Transverse momentum range   
1166         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1167         gener->SetYRange(-4.0,-2.4);
1168         gener->SetMuonPtCut(0.8);
1169         gener->SetMuonThetaCut(171.,178.);
1170         gener->SetMuonMultiplicity(2);
1171         gener->SetImpactParameterRange(0.,5.);  //Centrality class Cent1 for PDC04
1172         gGener=gener;
1173         gener->SetProjectile("A", 208, 82) ; 
1174         gener->SetTarget("A", 208, 82) ; 
1175       }
1176         break;
1177       case kMuonCocktailPer1:
1178       {
1179         comment = comment.Append(" Muon Cocktail Per1");
1180         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1181         gener->SetPtRange(0.0,100.);       // Transverse momentum range   
1182         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1183         gener->SetYRange(-4.0,-2.4);
1184         gener->SetMuonPtCut(0.8);
1185         gener->SetMuonThetaCut(171.,178.);
1186         gener->SetMuonMultiplicity(2);
1187         gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04
1188         gener->SetProjectile("A", 208, 82) ; 
1189         gener->SetTarget("A", 208, 82) ; 
1190         gGener=gener;
1191       }
1192       break;
1193     case kMuonCocktailPer4:
1194       {
1195         comment = comment.Append(" Muon Cocktail Per4");
1196         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1197         gener->SetPtRange(0.0,100.);       // Transverse momentum range   
1198         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1199         gener->SetYRange(-4.0,-2.4);
1200         gener->SetMuonPtCut(0.8);
1201         gener->SetMuonThetaCut(171.,178.);
1202         gener->SetMuonMultiplicity(2);
1203         gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04
1204         gener->SetProjectile("A", 208, 82) ; 
1205         gener->SetTarget("A", 208, 82) ; 
1206         gGener=gener;
1207       }
1208         break;
1209       case kMuonCocktailCent1HighPt:
1210       {
1211         comment = comment.Append(" Muon Cocktail HighPt Cent1");
1212         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1213         gener->SetPtRange(0.0,100.);       // Transverse momentum range   
1214         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1215         gener->SetYRange(-4.0,-2.4);
1216         gener->SetMuonPtCut(2.5);
1217         gener->SetMuonThetaCut(171.,178.);
1218         gener->SetMuonMultiplicity(2);
1219         gener->SetImpactParameterRange(0.,5.);  //Centrality class Cent1 for PDC04
1220         gener->SetProjectile("A", 208, 82) ; 
1221         gener->SetTarget("A", 208, 82) ; 
1222        gGener=gener;
1223       }
1224         break;
1225       case kMuonCocktailPer1HighPt :
1226       {
1227         comment = comment.Append(" Muon Cocktail HighPt Per1");
1228         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1229         gener->SetPtRange(0.0,100.);       // Transverse momentum range   
1230         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1231         gener->SetYRange(-4.0,-2.4);
1232         gener->SetMuonPtCut(2.5);
1233         gener->SetMuonThetaCut(171.,178.);
1234         gener->SetMuonMultiplicity(2);
1235         gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04
1236         gener->SetProjectile("A", 208, 82) ; 
1237         gener->SetTarget("A", 208, 82) ; 
1238         gGener=gener;
1239       }
1240         break;
1241       case kMuonCocktailPer4HighPt:
1242       {
1243         comment = comment.Append(" Muon Cocktail HighPt Per4");
1244         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1245         gener->SetPtRange(0.0,100.);       // Transverse momentum range   
1246         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1247         gener->SetYRange(-4.0,-2.4);
1248         gener->SetMuonPtCut(2.5);
1249         gener->SetMuonThetaCut(171.,178.);
1250         gener->SetMuonMultiplicity(2);
1251         gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04
1252         gener->SetProjectile("A", 208, 82) ; 
1253         gener->SetTarget("A", 208, 82) ; 
1254         gGener=gener;
1255       }
1256         break;
1257       case kMuonCocktailCent1Single:
1258       {
1259         comment = comment.Append(" Muon Cocktail Single Cent1");
1260         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1261         gener->SetPtRange(0.0,100.);       // Transverse momentum range   
1262         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1263         gener->SetYRange(-4.0,-2.4);
1264         gener->SetMuonPtCut(0.8);
1265         gener->SetMuonThetaCut(171.,178.);
1266         gener->SetMuonMultiplicity(1);
1267         gener->SetImpactParameterRange(0.,5.);  //Centrality class Cent1 for PDC04
1268         gener->SetProjectile("A", 208, 82) ; 
1269         gener->SetTarget("A", 208, 82) ; 
1270         gGener=gener;
1271       }
1272         break;
1273       case kMuonCocktailPer1Single :
1274       {
1275         comment = comment.Append(" Muon Cocktail Single Per1");
1276         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1277         gener->SetPtRange(0.0,100.);       // Transverse momentum range   
1278         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1279         gener->SetYRange(-4.0,-2.4);
1280         gener->SetMuonPtCut(0.8);
1281         gener->SetMuonThetaCut(171.,178.);
1282         gener->SetMuonMultiplicity(1);
1283         gener->SetImpactParameterRange(5.,8.6);//Centrality class Per1 for PDC04
1284         gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
1285         gener->SetProjectile("A", 208, 82) ; 
1286         gener->SetTarget("A", 208, 82) ; 
1287         gGener=gener;
1288       }
1289         break;
1290       case kMuonCocktailPer4Single:
1291       {
1292         comment = comment.Append(" Muon Cocktail Single Per4");
1293         AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1294         gener->SetPtRange(0.0,100.);       // Transverse momentum range   
1295         gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1296         gener->SetYRange(-4.0,-2.4);
1297         gener->SetMuonPtCut(0.8);
1298         gener->SetMuonThetaCut(171.,178.);
1299         gener->SetMuonMultiplicity(1);
1300         gener->SetImpactParameterRange(13.2,15.0);//Centrality class Per4 for PDC04
1301         gener->SetProjectile("A", 208, 82) ; 
1302         gener->SetTarget("A", 208, 82) ; 
1303         gGener=gener;
1304       }
1305         break;
1306       case kFlow_2_2000:
1307       {
1308         comment = comment.Append(" Flow with dN/deta  = 2000, vn = 2%");
1309         gGener = GeVSimStandard(2000., 2.);
1310       }
1311         break;
1312         
1313       case kFlow_10_2000:
1314       {
1315         comment = comment.Append(" Flow with dN/deta  = 2000, vn = 10%");
1316         gGener = GeVSimStandard(2000., 10.);
1317       }
1318         break;
1319         
1320       case kFlow_6_2000:
1321       {
1322         comment = comment.Append(" Flow with dN/deta  = 2000, vn = 6%");
1323         gGener = GeVSimStandard(2000., 6.);
1324       }
1325         break;
1326         
1327       case kFlow_6_5000:
1328       {
1329         comment = comment.Append(" Flow with dN/deta  = 5000, vn = 6%");
1330         gGener = GeVSimStandard(5000., 6.);
1331       }
1332         break;
1333       case kHIJINGplus:
1334       {
1335         //
1336         // The cocktail
1337         AliGenCocktail *gener  = new AliGenCocktail();
1338         
1339         //
1340         // Charm production by Pythia
1341         AliGenPythia * genpyc = new AliGenPythia(230);
1342         genpyc->SetProcess(kPyCharmPbPbMNR);
1343         genpyc->SetStrucFunc(kCTEQ4L);
1344         genpyc->SetPtHard(2.1,-1.0);
1345         genpyc->SetEnergyCMS(5500.);
1346         genpyc->SetNuclei(208,208);
1347         genpyc->SetYRange(-999,999);
1348         genpyc->SetForceDecay(kAll);
1349         genpyc->SetFeedDownHigherFamily(kFALSE);
1350         genpyc->SetCountMode(AliGenPythia::kCountParents);
1351         //
1352         // Beauty production by Pythia
1353         AliGenPythia * genpyb = new AliGenPythia(9);
1354         genpyb->SetProcess(kPyBeautyPbPbMNR);
1355         genpyb->SetStrucFunc(kCTEQ4L);
1356         genpyb->SetPtHard(2.75,-1.0);
1357         genpyb->SetEnergyCMS(5500.);
1358         genpyb->SetNuclei(208,208);
1359         genpyb->SetYRange(-999,999);
1360         genpyb->SetForceDecay(kAll);
1361         genpyb->SetFeedDownHigherFamily(kFALSE);
1362         genpyb->SetCountMode(AliGenPythia::kCountParents);
1363         //
1364         // Hyperons
1365         //
1366         AliGenSTRANGElib *lib = new AliGenSTRANGElib();
1367         Int_t particle;
1368         // Xi
1369         particle = kXiMinus;
1370         AliGenParam *genXi = new AliGenParam(16,lib,particle);
1371         genXi->SetPtRange(0., 12.);
1372         genXi->SetYRange(-1.1, 1.1);
1373         genXi->SetForceDecay(kNoDecay); 
1374         
1375         //
1376         // Omega
1377         particle = kOmegaMinus;
1378         AliGenParam *genOmega = new AliGenParam(10,lib,particle);
1379         genOmega->SetPtRange(0, 12.);
1380         genOmega->SetYRange(-1.1, 1.1);
1381         genOmega->SetForceDecay(kNoDecay);
1382         
1383         //
1384         // Central Hijing 
1385         AliGenHijing *genHi = HijingStandard();
1386         genHi->SwitchOffHeavyQuarks(kTRUE);
1387         genHi->SetImpactParameterRange(0.,5.);
1388         //
1389         // Add everything to the cocktail and shake ...
1390         gener->AddGenerator(genHi,    "Hijing cent1", 1);
1391         gener->AddGenerator(genpyc,   "Extra charm",  1);
1392         gener->AddGenerator(genpyb,   "Extra beauty", 1);
1393         gener->AddGenerator(genXi,    "Xi"          , 1);
1394         gener->AddGenerator(genOmega, "Omega",        1);
1395         gener->SetProjectile("A", 208, 82) ; 
1396         gener->SetTarget("A", 208, 82) ; 
1397         gGener = gener;
1398       }
1399         break;
1400       default: break;
1401     }
1402   
1403   return gGener;
1404 }
1405
1406 AliGenHijing* HijingStandard()
1407 {
1408   AliGenHijing *gener = new AliGenHijing(-1);
1409   // centre of mass energy 
1410   gener->SetEnergyCMS(5500.);
1411   // reference frame
1412   gener->SetReferenceFrame("CMS");
1413   // projectile
1414   gener->SetProjectile("A", 208, 82);
1415   gener->SetTarget    ("A", 208, 82);
1416   // tell hijing to keep the full parent child chain
1417   gener->KeepFullEvent();
1418   // enable jet quenching
1419   gener->SetJetQuenching(1);
1420   // enable shadowing
1421   gener->SetShadowing(1);
1422   // neutral pion and heavy particle decays switched off
1423   gener->SetDecaysOff(1);
1424   // Don't track spectators
1425   gener->SetSpectators(0);
1426   // kinematic selection
1427   gener->SetSelectAll(0);
1428   return gener;
1429 }
1430
1431 AliGenGeVSim* GeVSimStandard(Float_t mult, Float_t vn)
1432 {
1433   AliGenGeVSim* gener = new AliGenGeVSim(0);
1434   //
1435   // Mult is the number of charged particles in |eta| < 0.5
1436   // Vn is in (%)
1437   //
1438   // Sigma of the Gaussian dN/deta
1439   Float_t sigma_eta  = 2.75;
1440   //
1441   // Maximum eta
1442   Float_t etamax     = 7.00;
1443   //
1444   //
1445   // Scale from multiplicity in |eta| < 0.5 to |eta| < |etamax| 
1446   Float_t mm = mult * (TMath::Erf(etamax/sigma_eta/sqrt(2.)) / TMath::Erf(0.5/sigma_eta/sqrt(2.))); 
1447   //
1448   // Scale from charged to total multiplicity
1449   // 
1450   mm *= 1.587;
1451   //
1452   // Vn 
1453   vn /= 100.;            
1454   //
1455   // Define particles
1456   //
1457   //
1458   // 78% Pions (26% pi+, 26% pi-, 26% p0)              T = 250 MeV
1459   AliGeVSimParticle *pp =  new AliGeVSimParticle(kPiPlus,  1, 0.26 * mm, 0.25, sigma_eta) ;
1460   AliGeVSimParticle *pm =  new AliGeVSimParticle(kPiMinus, 1, 0.26 * mm, 0.25, sigma_eta) ;
1461   AliGeVSimParticle *p0 =  new AliGeVSimParticle(kPi0,     1, 0.26 * mm, 0.25, sigma_eta) ;
1462   //
1463   // 12% Kaons (3% K0short, 3% K0long, 3% K+, 3% K-)   T = 300 MeV
1464   AliGeVSimParticle *ks =  new AliGeVSimParticle(kK0Short, 1, 0.03 * mm, 0.30, sigma_eta) ;
1465   AliGeVSimParticle *kl =  new AliGeVSimParticle(kK0Long,  1, 0.03 * mm, 0.30, sigma_eta) ;
1466   AliGeVSimParticle *kp =  new AliGeVSimParticle(kKPlus,   1, 0.03 * mm, 0.30, sigma_eta) ;
1467   AliGeVSimParticle *km =  new AliGeVSimParticle(kKMinus,  1, 0.03 * mm, 0.30, sigma_eta) ;
1468   //
1469   // 10% Protons / Neutrons (5% Protons, 5% Neutrons)  T = 250 MeV
1470   AliGeVSimParticle *pr =  new AliGeVSimParticle(kProton,  1, 0.05 * mm, 0.25, sigma_eta) ;
1471   AliGeVSimParticle *ne =  new AliGeVSimParticle(kNeutron, 1, 0.05 * mm, 0.25, sigma_eta) ;
1472   //
1473   // Set Elliptic Flow properties       
1474   
1475   Float_t pTsaturation = 2. ;
1476   
1477   pp->SetEllipticParam(vn,pTsaturation,0.) ;
1478   pm->SetEllipticParam(vn,pTsaturation,0.) ;
1479   p0->SetEllipticParam(vn,pTsaturation,0.) ;
1480   pr->SetEllipticParam(vn,pTsaturation,0.) ;
1481   ne->SetEllipticParam(vn,pTsaturation,0.) ;
1482   ks->SetEllipticParam(vn,pTsaturation,0.) ;
1483   kl->SetEllipticParam(vn,pTsaturation,0.) ;
1484   kp->SetEllipticParam(vn,pTsaturation,0.) ;
1485   km->SetEllipticParam(vn,pTsaturation,0.) ;
1486   //
1487   // Set Direct Flow properties 
1488   pp->SetDirectedParam(vn,1.0,0.) ;
1489   pm->SetDirectedParam(vn,1.0,0.) ;
1490   p0->SetDirectedParam(vn,1.0,0.) ;
1491   pr->SetDirectedParam(vn,1.0,0.) ;
1492   ne->SetDirectedParam(vn,1.0,0.) ;
1493   ks->SetDirectedParam(vn,1.0,0.) ;
1494   kl->SetDirectedParam(vn,1.0,0.) ;
1495   kp->SetDirectedParam(vn,1.0,0.) ;
1496   km->SetDirectedParam(vn,1.0,0.) ;
1497   //
1498   // Add particles to the list
1499   gener->AddParticleType(pp) ;
1500   gener->AddParticleType(pm) ;
1501   gener->AddParticleType(p0) ;
1502   gener->AddParticleType(pr) ;
1503   gener->AddParticleType(ne) ;
1504   gener->AddParticleType(ks) ;
1505   gener->AddParticleType(kl) ;
1506   gener->AddParticleType(kp) ;
1507   gener->AddParticleType(km) ;
1508   //    
1509   // Random Ev.Plane ----------------------------------
1510   TF1 *rpa = new TF1("gevsimPsiRndm","1", 0, 360);
1511   // --------------------------------------------------
1512   gener->SetPtRange(0., 9.) ; // Use a resonable range! (used for bin size in numerical integration)
1513   gener->SetPhiRange(0, 360);
1514   //
1515   // Set pseudorapidity range 
1516   Float_t thmin = EtaToTheta(+etamax);   
1517   Float_t thmax = EtaToTheta(-etamax);   
1518   gener->SetThetaRange(thmin,thmax);     
1519   return gener;
1520 }
1521
1522
1523
1524 void ProcessEnvironmentVars()
1525 {
1526     // Run type
1527     if (gSystem->Getenv("CONFIG_RUN_TYPE")) {
1528       for (Int_t iRun = 0; iRun < kRunMax; iRun++) {
1529         if (strcmp(gSystem->Getenv("CONFIG_RUN_TYPE"), pprRunName[iRun])==0) {
1530           srun = (PprRun_t)iRun;
1531           cout<<"Run type set to "<<pprRunName[iRun]<<endl;
1532         }
1533       }
1534     }
1535
1536     // Random Number seed
1537     if (gSystem->Getenv("CONFIG_SEED")) {
1538       sseed = atoi(gSystem->Getenv("CONFIG_SEED"));
1539     }
1540 }