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