a1f6a6d118b7c39d53a3a3a468d39f1296e22e32
[u/mrichter/AliRoot.git] / FMD / scripts / DummyConfig.C
1 //____________________________________________________________________
2 //
3 // $Id$
4 //
5 // One can use the configuration macro in compiled mode by
6 // root [0] gSystem->Load("libgeant321");
7 // root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\
8 //                   -I$ALICE_ROOT -I$ALICE/geant3/TGeant3");
9 // root [0] .x grun.C(1,"ConfigPPR.C++")
10 //
11 /** @file    Config.C
12     @author  Christian Holm Christensen <cholm@nbi.dk>
13     @date    Mon Mar 27 12:50:29 2006
14     @brief   Simulation configuration script
15 */
16 //____________________________________________________________________
17 // 
18 // Generator types 
19 //
20 enum EG_t {
21   test50,
22   kParam_8000,                  //
23   kParam_4000,                  //
24   kParam_2000,                  //
25   kParam_fmd,                   //
26   kHijing_cent1,                //
27   kHijing_cent2,                //
28   kHijing_per1,                 //
29   kHijing_per2,                 //
30   kHijing_per3,                 //
31   kHijing_per4,                 //
32   kHijing_per5,                 //
33   kHijing_jj25,                 //
34   kHijing_jj50,                 //
35   kHijing_jj75,                 //
36   kHijing_jj100,                //
37   kHijing_jj200,                //
38   kHijing_gj25,                 //
39   kHijing_gj50,                 //
40   kHijing_gj75,                 //
41   kHijing_gj100,                //
42   kHijing_gj200,                //
43   kHijing_pA,                   //
44   kPythia6,                     //
45   kPythia6Jets20_24,            //
46   kPythia6Jets24_29,            //
47   kPythia6Jets29_35,            //
48   kPythia6Jets35_42,            //
49   kPythia6Jets42_50,            //
50   kPythia6Jets50_60,            //
51   kPythia6Jets60_72,            //
52   kPythia6Jets72_86,            //
53   kPythia6Jets86_104,           //
54   kPythia6Jets104_125,          //
55   kPythia6Jets125_150,          //
56   kPythia6Jets150_180,          //
57   kD0PbPb5500,                  //
58   kCharmSemiElPbPb5500,         //
59   kBeautySemiElPbPb5500,        //
60   kCocktailTRD,                 //
61   kPyJJ,                        //
62   kPyGJ,                        //
63   kMuonCocktailCent1,           //
64   kMuonCocktailPer1,            //
65   kMuonCocktailPer4,            //
66   kMuonCocktailCent1HighPt,     //
67   kMuonCocktailPer1HighPt,      //
68   kMuonCocktailPer4HighPt,      //
69   kMuonCocktailCent1Single,     //
70   kMuonCocktailPer1Single,      //
71   kMuonCocktailPer4Single,
72   kFMD1Flat, 
73   kFMD2Flat, 
74   kFMD3Flat,
75   kFMDFlat,
76   kEgMax
77 };
78
79 //____________________________________________________________________
80 // 
81 // Generator types names
82 //
83 const char* egName[kEgMax] = {
84   "test50",
85   "kParam_8000",                //
86   "kParam_4000",                //
87   "kParam_2000",                //
88   "kParam_fmd",                 //
89   "kHijing_cent1",              //
90   "kHijing_cent2",              //
91   "kHijing_per1",               //
92   "kHijing_per2",               //
93   "kHijing_per3",               //
94   "kHijing_per4",               //
95   "kHijing_per5",               //
96   "kHijing_jj25",               //
97   "kHijing_jj50",               //
98   "kHijing_jj75",               //
99   "kHijing_jj100",              //
100   "kHijing_jj200",              //
101   "kHijing_gj25",               //
102   "kHijing_gj50",               //
103   "kHijing_gj75",               //
104   "kHijing_gj100",              //
105   "kHijing_gj200",              //
106   "kHijing_pA",                 //
107   "kPythia6",                   //
108   "kPythia6Jets20_24",          //
109   "kPythia6Jets24_29",          //
110   "kPythia6Jets29_35",          //
111   "kPythia6Jets35_42",          //
112   "kPythia6Jets42_50",          //
113   "kPythia6Jets50_60",          //
114   "kPythia6Jets60_72",          //
115   "kPythia6Jets72_86",          //
116   "kPythia6Jets86_104",         //
117   "kPythia6Jets104_125",        //
118   "kPythia6Jets125_150",        //
119   "kPythia6Jets150_180",        //
120   "kD0PbPb5500",                //
121   "kCharmSemiElPbPb5500",       //
122   "kBeautySemiElPbPb5500",      //
123   "kCocktailTRD",               //
124   "kPyJJ",                      //
125   "kPyGJ",                      //
126   "kMuonCocktailCent1",         //
127   "kMuonCocktailPer1",          //
128   "kMuonCocktailPer4",          //
129   "kMuonCocktailCent1HighPt",   //
130   "kMuonCocktailPer1HighPt",    //
131   "kMuonCocktailPer4HighPt",    //
132   "kMuonCocktailCent1Single",   //
133   "kMuonCocktailPer1Single",    //
134   "kMuonCocktailPer4Single",
135   "kFMD1Flat",
136   "kFMD2Flat",
137   "kFMD3Flat",
138   "kFMDFlat"
139 };
140
141 //____________________________________________________________________
142 enum Geo_t {
143   kHoles,                       //
144   kNoHoles                      //
145 };
146
147 //____________________________________________________________________
148 enum Rad_t {
149   kGluonRadiation,              //
150   kNoGluonRadiation             //
151 };
152
153 //____________________________________________________________________
154 enum MC_t {
155   kFLUKA, 
156   kGEANT3, 
157   kGEANT4, 
158   kGEANT3TGEO,
159 };
160
161 //____________________________________________________________________
162 // Functions
163 Float_t       EtaToTheta(Float_t eta);
164 Eg_t          LookupEG(const Char_t* name);
165 AliGenerator* GeneratorFactory(EG_t eg, Rad_t rad, TString& comment);
166 AliGenHijing* HijingStandard();
167 void          ProcessEnvironmentVars(EG_t& eg, Int_t& seed);
168
169 //____________________________________________________________________
170 void 
171 Config()
172 {
173   //____________________________________________________________________
174   // This part for configuration    
175   // EG_t  eg   = test50;
176   // EG_t  eg   = kParam_fmd;
177   EG_t  eg   = kParam_2000; // kPythia;
178   // EG_t  eg   = kFMDFlat;
179   Geo_t geo  = kNoHoles;
180   Rad_t rad  = kGluonRadiation;
181   AliMagF::BMap_t mag  = AliMagF::k5kG;
182   Int_t seed = 12345; //Set 0 to use the current time
183   MC_t  mc   = kGEANT3TGEO;
184   
185   //____________________________________________________________________
186   // Comment line 
187   static TString  comment;
188   
189   //____________________________________________________________________
190   // Get settings from environment variables
191   ProcessEnvironmentVars(eg, seed);
192
193   //____________________________________________________________________
194   // Set Random Number seed
195   gRandom->SetSeed(seed);
196   cout<<"Seed for random number generation= "<<gRandom->GetSeed()<<endl; 
197
198
199   //__________________________________________________________________
200   switch (mc) {
201   case kFLUKA: 
202     // 
203     // libraries required by fluka21
204     // 
205     gSystem->Load("libGeom");
206     cout << "\t* Loading TFluka..." << endl;  
207     gSystem->Load("libTFluka");    
208     gSystem->MakeDirectory("peg");
209     // 
210     // FLUKA MC
211     //
212     cout << "\t* Instantiating TFluka..." << endl;
213     new TFluka("C++ Interface to Fluka", 0/*verbosity*/);
214     break;
215   case kGEANT3: 
216     {
217       //
218       // Libraries needed by GEANT 3.21 
219       //
220       gSystem->Load("libgeant321");
221       
222       // 
223       // GEANT 3.21 MC 
224       // 
225       TGeant3* gmc = new TGeant3("C++ Interface to Geant3");
226       gmc->SetSWIT(4, 1000);
227     }
228     break;
229   case kGEANT3TGEO:
230     {
231       //
232       // Libraries needed by GEANT 3.21 
233       //
234       gSystem->Load("libgeant321");
235     
236       // 
237       // GEANT 3.21 MC 
238       // 
239       TGeant3TGeo* gmc  = new TGeant3TGeo("C++ Interface to Geant3");
240       gmc->SetSWIT(4, 1000);
241       Printf("Making a TGeant3TGeo objet");
242     }
243     break;
244   default:
245     gAlice->Fatal("Config.C", "No MC type chosen");
246     return;
247   }
248
249   //__________________________________________________________________
250   AliRunLoader* rl = 0;
251
252   cout<<"Config.C: Creating Run Loader ..."<<endl;
253   rl = AliRunLoader::Open("galice.root",
254                           AliConfig::GetDefaultEventFolderName(),
255                           "recreate");
256   if (!rl) {
257     gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
258     return;
259   }
260   rl->SetCompressionLevel(2);
261   rl->SetNumberOfEventsPerFile(3);
262   gAlice->SetRunLoader(rl);
263
264   //__________________________________________________________________
265   // For FLUKA 
266   switch (mc) {
267   case kFLUKA: 
268     {
269       //
270       // Use kTRUE as argument to generate alice.pemf first
271       //
272       TString alice_pemf(gSystem->Which(".", "peg/mat17.pemf"));
273       if (!alice_pemf.IsNull()) 
274         ((TFluka*)gMC)->SetGeneratePemf(kFALSE);
275       else
276         ((TFluka*)gMC)->SetGeneratePemf(kTRUE);
277       TString flupro(gSystem->Getenv("FLUPRO"));
278       if (flupro.IsNull()) 
279         Fatal("Config.C", "Environment variable FLUPRO not set");
280 #if 0
281       char* files[] = { "brems_fin.bin", "cohff.bin", "elasct.bin", 
282                         "gxsect.bin", "nuclear.bin", "sigmapi.bin", 
283                         0 };
284       char* file = files[0];
285       while (file) {
286         TString which(gSystem->Which(".", file));
287         if (which.IsNull()) {
288           if (gSystem->Symlink(Form("%s/%s", flupro.Data(), file), file)!=0) 
289             Fatal("Config.C", "Couldn't link $(FLUPRO)/%s -> .", file);
290         }
291         file++;
292       }
293 #endif
294       TString neuxsc(gSystem->Which(".", "neuxsc.bin"));
295       if (neuxsc.IsNull()) 
296         gSystem->Symlink(Form("%s/neuxsc_72.bin", flupro.Data()), 
297                          "neuxsc.bin"); 
298       gSystem->CopyFile("$(FLUPRO)/random.dat", "old.seed", kTRUE);
299     }
300     break;
301   }
302
303   //__________________________________________________________________
304   //
305   // Set External decayer
306 #if 0
307   AliDecayer *decayer = new AliDecayerPythia();
308   switch (eg) {
309   case kD0PbPb5500:           decayer->SetForceDecay(kHadronicD);      break;
310   case kCharmSemiElPbPb5500:  decayer->SetForceDecay(kSemiElectronic); break;
311   case kBeautySemiElPbPb5500: decayer->SetForceDecay(kSemiElectronic); break;
312   default:                    decayer->SetForceDecay(kAll);            break;
313   }
314   decayer->Init();
315   gMC->SetExternalDecayer(decayer);
316 #endif
317
318   //__________________________________________________________________
319   // *********** STEERING parameters FOR ALICE SIMULATION ************
320   // - Specify event type to be tracked through the ALICE setup
321   // - All positions are in cm, angles in degrees, and P and E in GeV 
322   gMC->SetProcess("DCAY",1);
323   gMC->SetProcess("PAIR",1);
324   gMC->SetProcess("COMP",1);
325   gMC->SetProcess("PHOT",1);
326   gMC->SetProcess("PFIS",0);
327   gMC->SetProcess("DRAY",0);
328   gMC->SetProcess("ANNI",1);
329   gMC->SetProcess("BREM",1);
330   gMC->SetProcess("MUNU",1);
331   gMC->SetProcess("CKOV",1);
332   gMC->SetProcess("HADR",1);
333   gMC->SetProcess("LOSS",2);
334   gMC->SetProcess("MULS",1);
335   gMC->SetProcess("RAYL",1);
336
337   Float_t cut = 1.e-3;        // 1MeV cut by default
338   Float_t tofmax = 1.e10;
339
340   gMC->SetCut("CUTGAM", cut);
341   gMC->SetCut("CUTELE", cut);
342   gMC->SetCut("CUTNEU", cut);
343   gMC->SetCut("CUTHAD", cut);
344   gMC->SetCut("CUTMUO", cut);
345   gMC->SetCut("BCUTE",  cut); 
346   gMC->SetCut("BCUTM",  cut); 
347   gMC->SetCut("DCUTE",  cut); 
348   gMC->SetCut("DCUTM",  cut); 
349   gMC->SetCut("PPCUTM", cut);
350   gMC->SetCut("TOFMAX", tofmax); 
351
352   
353   //__________________________________________________________________
354   // Generator Configuration
355   AliGenerator* gener = GeneratorFactory(eg, rad, comment);
356   gener->SetOrigin(0, 0, 0);    // vertex position
357   gener->SetSigma(0, 0, 5.3);   // Sigma in (X,Y,Z) (cm) on IP position
358   gener->SetCutVertexZ(1.);     // Truncate at 1 sigma
359   gener->SetVertexSmear(kPerEvent); 
360   gener->SetTrackingFlag(1);
361   gener->Init();
362     
363   //__________________________________________________________________
364   // 
365   // Comments 
366   // 
367   switch (mag) {
368   case AliMagF::k2kG: comment = comment.Append(" | L3 field 0.2 T"); break;
369   case AliMagF::k5kG: comment = comment.Append(" | L3 field 0.5 T"); break;
370   }
371
372   switch (rad) {
373   case kGluonRadiation: 
374     comment = comment.Append(" | Gluon Radiation On");  break;
375   default:
376     comment = comment.Append(" | Gluon Radiation Off"); break;
377   }
378
379   switch(geo) {
380   case kHoles: comment = comment.Append(" | Holes for PHOS/HMPID"); break;
381   default:     comment = comment.Append(" | No holes for PHOS/HMPID"); break;
382   }
383
384   std::cout << "\n\n Comment: " << comment << "\n" << std::endl;
385
386   //__________________________________________________________________
387   // Field (L3 0.4 T)
388   AliMagF* field = new AliMagF("Maps","Maps",2,1.,1., 10.,AliMagF::k5kG);
389   field->SetL3ConstField(0); //Using const. field in the barrel
390   TGeoGlobalMagField::Instance()->SetField(field);
391
392   rl->CdGAFile();
393
394   //__________________________________________________________________
395   // 
396   // Used detectors 
397   // 
398   Bool_t useABSO  = kTRUE; 
399   Bool_t useACORDE= kFALSE; 
400   Bool_t useDIPO  = kFALSE; 
401   Bool_t useFMD   = kTRUE; 
402   Bool_t useFRAME = kFALSE; 
403   Bool_t useHALL  = kFALSE; 
404   Bool_t useITS   = kTRUE;
405   Bool_t useMAG   = kFALSE; 
406   Bool_t useMUON  = kFALSE; 
407   Bool_t usePHOS  = kFALSE; 
408   Bool_t usePIPE  = kFALSE; 
409   Bool_t usePMD   = kFALSE; 
410   Bool_t useHMPID = kFALSE; 
411   Bool_t useSHIL  = kFALSE; 
412   Bool_t useT0    = kTRUE; 
413   Bool_t useTOF   = kFALSE; 
414   Bool_t useTPC   = kFALSE;
415   Bool_t useTRD   = kFALSE; 
416   Bool_t useZDC   = kFALSE; 
417   Bool_t useEMCAL = kFALSE; 
418   Bool_t useVZERO = kTRUE;
419
420   gROOT->LoadMacro("LoadDummy.C");
421   cout << "\t* Creating the detectors ..." << endl;
422   // ================= Alice BODY parameters =========================
423   AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
424   
425   
426   if (useMAG) {
427     // =================== MAG parameters ============================
428     // Start with Magnet since detector layouts may be depending on
429     // the selected Magnet dimensions 
430     AliMAG *MAG = new AliMAG("MAG", "Magnet");
431   }
432
433   if (useABSO) {
434     // =================== ABSO parameters ===========================
435     AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber");
436   }
437
438   if (useDIPO) {
439     // =================== DIPO parameters ===========================
440     AliDIPO *DIPO = new DummyABSO("DIPO");
441   }
442
443   if (useHALL) {
444     // =================== HALL parameters ===========================
445     AliHALL *HALL = new AliHALL("HALL", "Alice Hall");
446   }
447
448
449   if (useFRAME) {
450     // ================== FRAME parameters ===========================
451     AliFRAMEv2 *FRAME = new DummyFRAME("FRAME");
452     switch (geo) {
453     case kHoles: FRAME->SetHoles(1); break;
454     default:     FRAME->SetHoles(0); break;
455     }
456   }
457
458   if (useSHIL) {
459     // ================== SHIL parameters ============================
460     AliSHIL *SHIL = new DummySHIl("SHIL");
461   }
462
463
464   if (usePIPE) {
465     // ================== PIPE parameters ============================
466     AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe");
467   }
468   
469   if (useITS) {
470     // =================== ITS parameters ============================
471     //
472     // As the innermost detector in ALICE, the Inner Tracking System
473     // "impacts" on almost all other detectors. This involves the fact
474     // that the ITS geometry still has several options to be followed
475     // in parallel in order to determine the best set-up which
476     // minimizes the induced background. All the geometries available
477     // to date are described in the following. Read carefully the
478     // comments and use the default version (the only one uncommented)
479     // unless you are making comparisons and you know what you are
480     // doing. In this case just uncomment the ITS geometry you want to
481     // use and run Aliroot.
482     //
483     // Detailed geometries:
484     //
485     //
486     // AliITS *ITS = 
487     //   new AliITSv5symm("ITS", "Updated ITS TDR detailed version "
488     //                    "with symmetric services");
489     // AliITS *ITS  = 
490     //   new AliITSv5asymm("ITS","Updates ITS TDR detailed version "
491     //                     "with asymmetric services");
492     //
493     AliITSvPPRasymmFMD *ITS  = new DummyITS("ITS");
494     // new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version "
495     // "with asymmetric services") 
496      // don't touch this parameter if you're not an ITS developer
497     ITS->SetMinorVersion(2); 
498     // don't touch this parameter if you're not an ITS developer
499     ITS->SetReadDet(kTRUE);
500     // don't touch this parameter if you're not an ITS developer
501     // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det");  
502     // detector thickness on layer 1 must be in the range [100,300]
503     ITS->SetThicknessDet1(200.);   
504     // detector thickness on layer 2 must be in the range [100,300]
505     ITS->SetThicknessDet2(200.);   
506     // chip thickness on layer 1 must be in the range [150,300]
507     ITS->SetThicknessChip1(200.);  
508     // chip thickness on layer 2 must be in the range [150,300]
509     ITS->SetThicknessChip2(200.);
510     // 1 --> rails in ; 0 --> rails out
511     ITS->SetRails(0);          
512     // 1 --> water ; 0 --> freon
513     ITS->SetCoolingFluid(1);   
514
515     // Coarse geometries (warning: no hits are produced with these
516     // coarse geometries and they unuseful for reconstruction !):
517     //
518     //
519     // AliITSvPPRcoarseasymm *ITS  = 
520     //   new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version "
521     //                             "with asymmetric services");
522     // 1 --> rails in ; 0 --> rails out
523     // ITS->SetRails(0);
524     // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
525     // ITS->SetSupportMaterial(0);      
526     //
527     // AliITS *ITS  = 
528     //  new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version "
529     //                           "with symmetric services");
530     // 1 --> rails in ; 0 --> rails out
531     // ITS->SetRails(0);                
532     // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
533     // ITS->SetSupportMaterial(0);      
534     //
535     // Geant3 <-> EUCLID conversion
536     // ============================
537     //
538     // SetEUCLID is a flag to output (=1) or not to output (=0) both
539     // geometry and media to two ASCII files (called by default
540     // ITSgeometry.euc and ITSgeometry.tme) in a format understandable
541     // to the CAD system EUCLID.  The default (=0) means that you dont
542     // want to use this facility.
543     //
544     ITS->SetEUCLID(0);
545   }
546
547   if (useTPC) {
548     // =================== TPC parameters ============================
549     //
550     // This allows the user to specify sectors for the SLOW (TPC
551     // geometry 2) Simulator. SecAL (SecAU) <0 means that ALL lower
552     // (upper) sectors are specified, any value other than that
553     // requires at least one sector (lower or upper)to be specified!
554     //
555     // Reminder: 
556     //   sectors 1-24 are lower sectors (1-12 -> z>0, 13-24 -> z<0)
557     //   sectors 25-72 are the upper ones (25-48 -> z>0, 49-72 -> z<0)
558     //
559     //   SecLows - number of lower sectors specified (up to 6)
560     //   SecUps  - number of upper sectors specified (up to 12)
561     //   Sens    - sensitive strips for the Slow Simulator !!!
562     //
563     // This does NOT work if all S or L-sectors are specified, i.e.
564     // if SecAL or SecAU < 0
565     //
566     //
567     //----------------------------------------------------------------
568     //  gROOT->LoadMacro("SetTPCParam.C");
569     //  AliTPCParam *param = SetTPCParam();
570     AliTPC *TPC = new DummyTPC("TPC");
571   }
572
573   if (useTOF) {
574     // ================== TOF parameters =============================
575     AliTOF *TOF = new DummyTOF("TOF");
576   }
577
578   if (useHMPID) {
579     // ================== HMPID parameters ============================
580     AliHMPID *HMPID = new DummyHMPID("HMPID");
581
582   }
583
584   if (useZDC) {
585     // ================== ZDC parameters =============================
586     AliZDC *ZDC = new DummyZDC("ZDC");
587   }
588
589   if (useTRD) {
590     // ================== TRD parameters =============================
591     AliTRD *TRD = new DummyTRD("TRD");
592
593     // Select the gas mixture (0: 97% Xe + 3% isobutane, 1: 90% Xe + 10% CO2)
594     TRD->SetGasMix(1);
595     if (geo == kHoles) {
596       // With hole in front of PHOS
597       TRD->SetPHOShole();
598       // With hole in front of HMPID
599       TRD->SetHMPIDhole();
600     }
601     // Switch on TR
602     AliTRDsim *TRDsim = TRD->CreateTR();
603   }
604
605   if (useFMD) {
606     // =================== FMD parameters ============================
607     // AliLog::SetModuleDebugLevel("FMD", 15);
608     AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
609     // FMD->UseDetailed(kFALSE);
610     // FMD->UseAssembly();
611     // FMD->UseOld();
612   }
613
614   if (useMUON) {
615     // =================== MUON parameters ===========================
616     AliMUON *MUON = new DummyMUON("MUON");
617     // MUON->AddGeometryBuilder(new AliMUONSt1GeometryBuilder(MUON));
618     // MUON->AddGeometryBuilder(new AliMUONSt2GeometryBuilder(MUON));
619     // MUON->AddGeometryBuilder(new AliMUONSlatGeometryBuilder(MUON));
620     // MUON->AddGeometryBuilder(new AliMUONTriggerGeometryBuilder(MUON));
621   }
622
623   if (usePHOS) {
624     // =================== PHOS parameters ===========================
625     AliPHOS *PHOS = new DummyPHOS("PHOS");
626   }
627
628   if (usePMD) {
629     // =================== PMD parameters ============================
630     AliPMD *PMD = new DummyPMD("PMD");
631   }
632
633   if (useT0) {
634     // =================== T0 parameters ==========================
635     AliT0 *T0 = new DummyT0("T0");
636   }
637
638   if (useEMCAL) {
639     // =================== EMCAL parameters ==========================
640     AliEMCAL *EMCAL = new DummyEMCAL("EMCAL");
641   }
642
643   if (useACORDE) {
644     // =================== ACORDE parameters ============================
645     AliACORDE *ACORDE = new AliACORDEv1("ACORDE", "normal ACORDE");
646   }
647
648   if (useVZERO) {
649     // =================== V0 parameters =============================
650     AliVZERO *VZERO = new DummyVZERO("VZERO");
651   }
652 }
653
654 //____________________________________________________________________
655 Float_t EtaToTheta(Float_t arg)
656 {
657   return (180./TMath::Pi())*2.*TMath::ATan(TMath::Exp(-arg));
658 }
659
660 //____________________________________________________________________
661 Int_t 
662 LookupEG(const Char_t* name) 
663 {
664   TString n(name);
665   for (Int_t i = 0; i < kEgMax; i++) {
666     if (n == egName[i]) return i;
667   }
668   return -1;
669 }
670
671 //____________________________________________________________________  
672 AliGenerator* 
673 GeneratorFactory(EG_t eg, Rad_t rad, TString& comment)  
674 {
675   Int_t isw = 3;
676   if (rad == kNoGluonRadiation) isw = 0;
677   
678   
679   AliGenerator * gGener = 0;
680   switch (eg) {
681   case test50:
682     {
683       comment = comment.Append(":HIJINGparam test 50 particles");
684       AliGenHIJINGpara *gener = new AliGenHIJINGpara(50);
685       gener->SetMomentumRange(0, 999999.);
686       gener->SetPhiRange(0., 360.);
687       // Set pseudorapidity range from -8 to 8.
688       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
689       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
690       gener->SetThetaRange(thmin,thmax);
691       gGener=gener;
692     }
693     break;
694   case kParam_8000:
695     {
696       comment = comment.Append(":HIJINGparam N=8000");
697       AliGenHIJINGpara *gener = new AliGenHIJINGpara(86030);
698       gener->SetMomentumRange(0, 999999.);
699       gener->SetPhiRange(0., 360.);
700       // Set pseudorapidity range from -8 to 8.
701       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
702       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
703       gener->SetThetaRange(thmin,thmax);
704       gGener=gener;
705     }
706     break;
707   case kParam_4000:
708     {
709       comment = comment.Append("HIJINGparam N=4000");
710       AliGenHIJINGpara *gener = new AliGenHIJINGpara(43015);
711       gener->SetMomentumRange(0, 999999.);
712       gener->SetPhiRange(0., 360.);
713       // Set pseudorapidity range from -8 to 8.
714       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
715       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
716       gener->SetThetaRange(thmin,thmax);
717       gGener=gener;
718     }
719     break;
720   case kParam_2000:
721     {
722       comment = comment.Append("HIJINGparam N=2000");
723       AliGenHIJINGpara *gener = new AliGenHIJINGpara(21507);
724       gener->SetMomentumRange(0, 999999.);
725       gener->SetPhiRange(0., 360.);
726       // Set pseudorapidity range from -8 to 8.
727       Float_t thmin = EtaToTheta(9);   // theta min. <---> eta max
728       Float_t thmax = EtaToTheta(-9);  // theta max. <---> eta min 
729       gener->SetThetaRange(thmin,thmax);
730       gGener=gener;
731     }
732     break;
733   case kParam_fmd:
734     {
735       comment = comment.Append("HIJINGparam N=100");
736       AliGenHIJINGpara *gener = new AliGenHIJINGpara(500);
737       gener->SetMomentumRange(0, 999999.);
738       gener->SetPhiRange(0., 360.);
739       // Set pseudorapidity range from -8 to 8.
740       Float_t thmin = EtaToTheta(6);   // theta min. <---> eta max
741       Float_t thmax = EtaToTheta(2);  // theta max. <---> eta min 
742       gener->SetThetaRange(thmin,thmax);
743       gGener=gener;
744     }
745     break;
746     //
747     //  Hijing Central
748     //
749   case kHijing_cent1:
750     {
751       comment = comment.Append("HIJING cent1");
752       AliGenHijing *gener = HijingStandard();
753       // impact parameter range
754       gener->SetImpactParameterRange(0., 5.);
755       gGener=gener;
756     }
757     break;
758   case kHijing_cent2:
759     {
760       comment = comment.Append("HIJING cent2");
761       AliGenHijing *gener = HijingStandard();
762       // impact parameter range
763       gener->SetImpactParameterRange(0., 2.);
764       gGener=gener;
765     }
766     break;
767     //
768     // Hijing Peripheral 
769     //
770   case kHijing_per1:
771     {
772       comment = comment.Append("HIJING per1");
773       AliGenHijing *gener = HijingStandard();
774       // impact parameter range
775       gener->SetImpactParameterRange(5., 8.6);
776       gGener=gener;
777     }
778     break;
779   case kHijing_per2:
780     {
781       comment = comment.Append("HIJING per2");
782       AliGenHijing *gener = HijingStandard();
783       // impact parameter range
784       gener->SetImpactParameterRange(8.6, 11.2);
785       gGener=gener;
786     }
787     break;
788   case kHijing_per3:
789     {
790       comment = comment.Append("HIJING per3");
791       AliGenHijing *gener = HijingStandard();
792       // impact parameter range
793       gener->SetImpactParameterRange(11.2, 13.2);
794       gGener=gener;
795     }
796     break;
797   case kHijing_per4:
798     {
799       comment = comment.Append("HIJING per4");
800       AliGenHijing *gener = HijingStandard();
801       // impact parameter range
802       gener->SetImpactParameterRange(13.2, 15.);
803       gGener=gener;
804     }
805     break;
806   case kHijing_per5:
807     {
808       comment = comment.Append("HIJING per5");
809       AliGenHijing *gener = HijingStandard();
810       // impact parameter range
811       gener->SetImpactParameterRange(15., 100.);
812       gGener=gener;
813     }
814     break;
815     //
816     //  Jet-Jet
817     //
818   case kHijing_jj25:
819     {
820       comment = comment.Append("HIJING Jet 25 GeV");
821       AliGenHijing *gener = HijingStandard();
822       // impact parameter range
823       gener->SetImpactParameterRange(0., 5.);
824       // trigger
825       gener->SetTrigger(1);
826       gener->SetPtJet(25.);
827       gener->SetRadiation(isw);
828       gener->SetSimpleJets(!isw);
829       gener->SetJetEtaRange(-0.3,0.3);
830       gener->SetJetPhiRange(75., 165.);   
831       gGener=gener;
832     }
833     break;
834
835   case kHijing_jj50:
836     {
837       comment = comment.Append("HIJING Jet 50 GeV");
838       AliGenHijing *gener = HijingStandard();
839       // impact parameter range
840       gener->SetImpactParameterRange(0., 5.);
841       // trigger
842       gener->SetTrigger(1);
843       gener->SetPtJet(50.);
844       gener->SetRadiation(isw);
845       gener->SetSimpleJets(!isw);
846       gener->SetJetEtaRange(-0.3,0.3);
847       gener->SetJetPhiRange(75., 165.);   
848       gGener=gener;
849     }
850     break;
851
852   case kHijing_jj75:
853     {
854       comment = comment.Append("HIJING Jet 75 GeV");
855       AliGenHijing *gener = HijingStandard();
856       // impact parameter range
857       gener->SetImpactParameterRange(0., 5.);
858       // trigger
859       gener->SetTrigger(1);
860       gener->SetPtJet(75.);
861       gener->SetRadiation(isw);
862       gener->SetSimpleJets(!isw);
863       gener->SetJetEtaRange(-0.3,0.3);
864       gener->SetJetPhiRange(75., 165.);   
865       gGener=gener;
866     }
867     break;
868
869   case kHijing_jj100:
870     {
871       comment = comment.Append("HIJING Jet 100 GeV");
872       AliGenHijing *gener = HijingStandard();
873       // impact parameter range
874       gener->SetImpactParameterRange(0., 5.);
875       // trigger
876       gener->SetTrigger(1);
877       gener->SetPtJet(100.);
878       gener->SetRadiation(isw);
879       gener->SetSimpleJets(!isw);
880       gener->SetJetEtaRange(-0.3,0.3);
881       gener->SetJetPhiRange(75., 165.);   
882       gGener=gener;
883     }
884     break;
885
886   case kHijing_jj200:
887     {
888       comment = comment.Append("HIJING Jet 200 GeV");
889       AliGenHijing *gener = HijingStandard();
890       // impact parameter range
891       gener->SetImpactParameterRange(0., 5.);
892       // trigger
893       gener->SetTrigger(1);
894       gener->SetPtJet(200.);
895       gener->SetRadiation(isw);
896       gener->SetSimpleJets(!isw);
897       gener->SetJetEtaRange(-0.3,0.3);
898       gener->SetJetPhiRange(75., 165.);   
899       gGener=gener;
900     }
901     break;
902     //
903     // Gamma-Jet
904     //
905   case kHijing_gj25:
906     {
907       comment = comment.Append("HIJING Gamma 25 GeV");
908       AliGenHijing *gener = HijingStandard();
909       // impact parameter range
910       gener->SetImpactParameterRange(0., 5.);
911       // trigger
912       gener->SetTrigger(2);
913       gener->SetPtJet(25.);
914       gener->SetRadiation(isw);
915       gener->SetSimpleJets(!isw);
916       gener->SetJetEtaRange(-0.12, 0.12);
917       gener->SetJetPhiRange(220., 320.);
918       gGener=gener;
919     }
920     break;
921
922   case kHijing_gj50:
923     {
924       comment = comment.Append("HIJING Gamma 50 GeV");
925       AliGenHijing *gener = HijingStandard();
926       // impact parameter range
927       gener->SetImpactParameterRange(0., 5.);
928       // trigger
929       gener->SetTrigger(2);
930       gener->SetPtJet(50.);
931       gener->SetRadiation(isw);
932       gener->SetSimpleJets(!isw);
933       gener->SetJetEtaRange(-0.12, 0.12);
934       gener->SetJetPhiRange(220., 320.);
935       gGener=gener;
936     }
937     break;
938
939   case kHijing_gj75:
940     {
941       comment = comment.Append("HIJING Gamma 75 GeV");
942       AliGenHijing *gener = HijingStandard();
943       // impact parameter range
944       gener->SetImpactParameterRange(0., 5.);
945       // trigger
946       gener->SetTrigger(2);
947       gener->SetPtJet(75.);
948       gener->SetRadiation(isw);
949       gener->SetSimpleJets(!isw);
950       gener->SetJetEtaRange(-0.12, 0.12);
951       gener->SetJetPhiRange(220., 320.);
952       gGener=gener;
953     }
954     break;
955
956   case kHijing_gj100:
957     {
958       comment = comment.Append("HIJING Gamma 100 GeV");
959       AliGenHijing *gener = HijingStandard();
960       // impact parameter range
961       gener->SetImpactParameterRange(0., 5.);
962       // trigger
963       gener->SetTrigger(2);
964       gener->SetPtJet(100.);
965       gener->SetRadiation(isw);
966       gener->SetSimpleJets(!isw);
967       gener->SetJetEtaRange(-0.12, 0.12);
968       gener->SetJetPhiRange(220., 320.);
969       gGener=gener;
970     }
971     break;
972
973   case kHijing_gj200:
974     {
975       comment = comment.Append("HIJING Gamma 200 GeV");
976       AliGenHijing *gener = HijingStandard();
977       // impact parameter range
978       gener->SetImpactParameterRange(0., 5.);
979       // trigger
980       gener->SetTrigger(2);
981       gener->SetPtJet(200.);
982       gener->SetRadiation(isw);
983       gener->SetSimpleJets(!isw);
984       gener->SetJetEtaRange(-0.12, 0.12);
985       gener->SetJetPhiRange(220., 320.);
986       gGener=gener;
987     }
988     break;
989   case kHijing_pA:
990     {
991       comment = comment.Append("HIJING pA");
992
993       AliGenCocktail *gener  = new AliGenCocktail();
994
995       AliGenHijing   *hijing = new AliGenHijing(-1);
996       // centre of mass energy 
997       hijing->SetEnergyCMS(TMath::Sqrt(82./208.) * 14000.);
998       // impact parameter range
999       hijing->SetImpactParameterRange(0., 15.);
1000       // reference frame
1001       hijing->SetReferenceFrame("CMS");
1002       hijing->SetBoostLHC(1);
1003       // projectile
1004       hijing->SetProjectile("P", 1, 1);
1005       hijing->SetTarget    ("A", 208, 82);
1006       // tell hijing to keep the full parent child chain
1007       hijing->KeepFullEvent();
1008       // enable jet quenching
1009       hijing->SetJetQuenching(0);
1010       // enable shadowing
1011       hijing->SetShadowing(1);
1012       // Don't track spectators
1013       hijing->SetSpectators(0);
1014       // kinematic selection
1015       hijing->SetSelectAll(0);
1016       //
1017       AliGenSlowNucleons*  gray    = new AliGenSlowNucleons(1);
1018       AliSlowNucleonModel* model   = new AliSlowNucleonModelExp();
1019       gray->SetSlowNucleonModel(model);
1020       gray->SetDebug(1);
1021       gener->AddGenerator(hijing,"Hijing pPb", 1);
1022       gener->AddGenerator(gray,  "Gray Particles",1);
1023       gGener=gener;
1024     }
1025     break;
1026   case kPythia6:
1027     {
1028       comment = comment.Append(":Pythia p-p @ 14 TeV");
1029       AliGenPythia *gener = new AliGenPythia(-1); 
1030       gener->SetMomentumRange(0,999999);
1031       gener->SetThetaRange(0., 180.);
1032       gener->SetYRange(-12,12);
1033       gener->SetPtRange(0,1000);
1034       gener->SetProcess(kPyMb);
1035       gener->SetEnergyCMS(14000.);
1036       gGener=gener;
1037     }
1038     break;
1039   case kPythia6Jets20_24:
1040     {
1041       comment = comment.Append(":Pythia jets 20-24 GeV @ 5.5 TeV");
1042       AliGenPythia * gener = new AliGenPythia(-1);
1043       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1044       gener->SetProcess(kPyJets);//        Process type
1045       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1046       gener->SetJetPhiRange(0., 360.);
1047       gener->SetJetEtRange(10., 1000.);
1048       gener->SetGluonRadiation(1,1);
1049       //    gener->SetPtKick(0.);
1050       //   Structure function
1051       gener->SetStrucFunc(kCTEQ4L);
1052       gener->SetPtHard(20., 24.);// Pt transfer of the hard scattering
1053       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1054       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1055       gGener=gener;
1056     }
1057     break;
1058   case kPythia6Jets24_29:
1059     {
1060       comment = comment.Append(":Pythia jets 24-29 GeV @ 5.5 TeV");
1061       AliGenPythia * gener = new AliGenPythia(-1);
1062       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1063       gener->SetProcess(kPyJets);//        Process type
1064       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1065       gener->SetJetPhiRange(0., 360.);
1066       gener->SetJetEtRange(10., 1000.);
1067       gener->SetGluonRadiation(1,1);
1068       //    gener->SetPtKick(0.);
1069       //   Structure function
1070       gener->SetStrucFunc(kCTEQ4L);
1071       gener->SetPtHard(24., 29.);// Pt transfer of the hard scattering
1072       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1073       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1074       gGener=gener;
1075     }
1076     break;
1077   case kPythia6Jets29_35:
1078     {
1079       comment = comment.Append(":Pythia jets 29-35 GeV @ 5.5 TeV");
1080       AliGenPythia * gener = new AliGenPythia(-1);
1081       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1082       gener->SetProcess(kPyJets);//        Process type
1083       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1084       gener->SetJetPhiRange(0., 360.);
1085       gener->SetJetEtRange(10., 1000.);
1086       gener->SetGluonRadiation(1,1);
1087       //    gener->SetPtKick(0.);
1088       //   Structure function
1089       gener->SetStrucFunc(kCTEQ4L);
1090       gener->SetPtHard(29., 35.);// Pt transfer of the hard scattering
1091       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1092       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1093       gGener=gener;
1094     }
1095     break;
1096   case kPythia6Jets35_42:
1097     {
1098       comment = comment.Append(":Pythia jets 35-42 GeV @ 5.5 TeV");
1099       AliGenPythia * gener = new AliGenPythia(-1);
1100       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1101       gener->SetProcess(kPyJets);//        Process type
1102       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1103       gener->SetJetPhiRange(0., 360.);
1104       gener->SetJetEtRange(10., 1000.);
1105       gener->SetGluonRadiation(1,1);
1106       //    gener->SetPtKick(0.);
1107       //   Structure function
1108       gener->SetStrucFunc(kCTEQ4L);
1109       gener->SetPtHard(35., 42.);// Pt transfer of the hard scattering
1110       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1111       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1112       gGener=gener;
1113     }
1114     break;
1115   case kPythia6Jets42_50:
1116     {
1117       comment = comment.Append(":Pythia jets 42-50 GeV @ 5.5 TeV");
1118       AliGenPythia * gener = new AliGenPythia(-1);
1119       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1120       gener->SetProcess(kPyJets);//        Process type
1121       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1122       gener->SetJetPhiRange(0., 360.);
1123       gener->SetJetEtRange(10., 1000.);
1124       gener->SetGluonRadiation(1,1);
1125       //    gener->SetPtKick(0.);
1126       //   Structure function
1127       gener->SetStrucFunc(kCTEQ4L);
1128       gener->SetPtHard(42., 50.);// Pt transfer of the hard scattering
1129       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1130       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1131       gGener=gener;
1132     }
1133     break;
1134   case kPythia6Jets50_60:
1135     {
1136       comment = comment.Append(":Pythia jets 50-60 GeV @ 5.5 TeV");
1137       AliGenPythia * gener = new AliGenPythia(-1);
1138       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1139       gener->SetProcess(kPyJets);//        Process type
1140       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1141       gener->SetJetPhiRange(0., 360.);
1142       gener->SetJetEtRange(10., 1000.);
1143       gener->SetGluonRadiation(1,1);
1144       //    gener->SetPtKick(0.);
1145       //   Structure function
1146       gener->SetStrucFunc(kCTEQ4L);
1147       gener->SetPtHard(50., 60.);// Pt transfer of the hard scattering
1148       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1149       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1150       gGener=gener;
1151     }
1152     break;
1153   case kPythia6Jets60_72:
1154     {
1155       comment = comment.Append(":Pythia jets 60-72 GeV @ 5.5 TeV");
1156       AliGenPythia * gener = new AliGenPythia(-1);
1157       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1158       gener->SetProcess(kPyJets);//        Process type
1159       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1160       gener->SetJetPhiRange(0., 360.);
1161       gener->SetJetEtRange(10., 1000.);
1162       gener->SetGluonRadiation(1,1);
1163       //    gener->SetPtKick(0.);
1164       //   Structure function
1165       gener->SetStrucFunc(kCTEQ4L);
1166       gener->SetPtHard(60., 72.);// Pt transfer of the hard scattering
1167       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1168       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1169       gGener=gener;
1170     }
1171     break;
1172   case kPythia6Jets72_86:
1173     {
1174       comment = comment.Append(":Pythia jets 72-86 GeV @ 5.5 TeV");
1175       AliGenPythia * gener = new AliGenPythia(-1);
1176       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1177       gener->SetProcess(kPyJets);//        Process type
1178       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1179       gener->SetJetPhiRange(0., 360.);
1180       gener->SetJetEtRange(10., 1000.);
1181       gener->SetGluonRadiation(1,1);
1182       //    gener->SetPtKick(0.);
1183       //   Structure function
1184       gener->SetStrucFunc(kCTEQ4L);
1185       gener->SetPtHard(72., 86.);// Pt transfer of the hard scattering
1186       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1187       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1188       gGener=gener;
1189     }
1190     break;
1191   case kPythia6Jets86_104:
1192     {
1193       comment = comment.Append(":Pythia jets 86-104 GeV @ 5.5 TeV");
1194       AliGenPythia * gener = new AliGenPythia(-1);
1195       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1196       gener->SetProcess(kPyJets);//        Process type
1197       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1198       gener->SetJetPhiRange(0., 360.);
1199       gener->SetJetEtRange(10., 1000.);
1200       gener->SetGluonRadiation(1,1);
1201       //    gener->SetPtKick(0.);
1202       //   Structure function
1203       gener->SetStrucFunc(kCTEQ4L);
1204       gener->SetPtHard(86., 104.);// Pt transfer of the hard scattering
1205       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1206       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1207       gGener=gener;
1208     }
1209     break;
1210   case kPythia6Jets104_125:
1211     {
1212       comment = comment.Append(":Pythia jets 105-125 GeV @ 5.5 TeV");
1213       AliGenPythia * gener = new AliGenPythia(-1);
1214       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1215       gener->SetProcess(kPyJets);//        Process type
1216       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1217       gener->SetJetPhiRange(0., 360.);
1218       gener->SetJetEtRange(10., 1000.);
1219       gener->SetGluonRadiation(1,1);
1220       //    gener->SetPtKick(0.);
1221       //   Structure function
1222       gener->SetStrucFunc(kCTEQ4L);
1223       gener->SetPtHard(104., 125.);// Pt transfer of the hard scattering
1224       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1225       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1226       gGener=gener;
1227     }
1228     break;
1229   case kPythia6Jets125_150:
1230     {
1231       comment = comment.Append(":Pythia jets 125-150 GeV @ 5.5 TeV");
1232       AliGenPythia * gener = new AliGenPythia(-1);
1233       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1234       gener->SetProcess(kPyJets);//        Process type
1235       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1236       gener->SetJetPhiRange(0., 360.);
1237       gener->SetJetEtRange(10., 1000.);
1238       gener->SetGluonRadiation(1,1);
1239       //    gener->SetPtKick(0.);
1240       //   Structure function
1241       gener->SetStrucFunc(kCTEQ4L);
1242       gener->SetPtHard(125., 150.);// Pt transfer of the hard scattering
1243       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1244       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1245       gGener=gener;
1246     }
1247     break;
1248   case kPythia6Jets150_180:
1249     {
1250       comment = comment.Append(":Pythia jets 150-180 GeV @ 5.5 TeV");
1251       AliGenPythia * gener = new AliGenPythia(-1);
1252       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1253       gener->SetProcess(kPyJets);//        Process type
1254       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1255       gener->SetJetPhiRange(0., 360.);
1256       gener->SetJetEtRange(10., 1000.);
1257       gener->SetGluonRadiation(1,1);
1258       //    gener->SetPtKick(0.);
1259       //   Structure function
1260       gener->SetStrucFunc(kCTEQ4L);
1261       gener->SetPtHard(150., 180.);// Pt transfer of the hard scattering
1262       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1263       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1264       gGener=gener;
1265     }
1266     break;
1267   case kD0PbPb5500:
1268     {
1269       comment = comment.Append(" D0 in Pb-Pb at 5.5 TeV");
1270       AliGenPythia * gener = new AliGenPythia(10);
1271       gener->SetProcess(kPyD0PbPbMNR);
1272       gener->SetStrucFunc(kCTEQ4L);
1273       gener->SetPtHard(2.1,-1.0);
1274       gener->SetEnergyCMS(5500.);
1275       gener->SetNuclei(208,208);
1276       gener->SetForceDecay(kHadronicD);
1277       gener->SetYRange(-2,2);
1278       gener->SetFeedDownHigherFamily(kFALSE);
1279       gener->SetStackFillOpt(AliGenPythia::kParentSelection);
1280       gener->SetCountMode(AliGenPythia::kCountParents);
1281       gGener=gener;
1282     }
1283     break;
1284   case kCharmSemiElPbPb5500:
1285     {
1286       comment = comment.Append(" Charm in Pb-Pb at 5.5 TeV");
1287       AliGenPythia * gener = new AliGenPythia(10);
1288       gener->SetProcess(kPyCharmPbPbMNR);
1289       gener->SetStrucFunc(kCTEQ4L);
1290       gener->SetPtHard(2.1,-1.0);
1291       gener->SetEnergyCMS(5500.);
1292       gener->SetNuclei(208,208);
1293       gener->SetForceDecay(kSemiElectronic);
1294       gener->SetYRange(-2,2);
1295       gener->SetFeedDownHigherFamily(kFALSE);
1296       gener->SetCountMode(AliGenPythia::kCountParents);
1297       gGener=gener;
1298     }
1299     break;
1300   case kBeautySemiElPbPb5500:
1301     {
1302       comment = comment.Append(" Beauty in Pb-Pb at 5.5 TeV");
1303       AliGenPythia *gener = new AliGenPythia(10);
1304       gener->SetProcess(kPyBeautyPbPbMNR);
1305       gener->SetStrucFunc(kCTEQ4L);
1306       gener->SetPtHard(2.75,-1.0);
1307       gener->SetEnergyCMS(5500.);
1308       gener->SetNuclei(208,208);
1309       gener->SetForceDecay(kSemiElectronic);
1310       gener->SetYRange(-2,2);
1311       gener->SetFeedDownHigherFamily(kFALSE);
1312       gener->SetCountMode(AliGenPythia::kCountParents);
1313       gGener=gener;
1314     }
1315     break;
1316   case kCocktailTRD:
1317     {
1318       comment = comment.Append(" Cocktail for TRD at 5.5 TeV");
1319       AliGenCocktail *gener  = new AliGenCocktail();
1320
1321       AliGenParam *jpsi = new AliGenParam(10,
1322                                           new AliGenMUONlib(),
1323                                           AliGenMUONlib::kJpsiFamily,
1324                                           "Vogt PbPb");
1325
1326       jpsi->SetPtRange(0, 100);
1327       jpsi->SetYRange(-1., +1.);
1328       jpsi->SetForceDecay(kDiElectron);
1329
1330       AliGenParam *ups = new AliGenParam(10,
1331                                          new AliGenMUONlib(),
1332                                          AliGenMUONlib::kUpsilonFamily,
1333                                          "Vogt PbPb");
1334       ups->SetPtRange(0, 100);
1335       ups->SetYRange(-1., +1.);
1336       ups->SetForceDecay(kDiElectron);
1337         
1338       AliGenParam *charm = new AliGenParam(10,
1339                                            new AliGenMUONlib(), 
1340                                            AliGenMUONlib::kCharm,
1341                                            "central");
1342       charm->SetPtRange(0, 100);
1343       charm->SetYRange(-1.5, +1.5);
1344       charm->SetForceDecay(kSemiElectronic);
1345         
1346         
1347       AliGenParam *beauty = new AliGenParam(10,
1348                                             new AliGenMUONlib(), 
1349                                             AliGenMUONlib::kBeauty,
1350                                             "central");
1351       beauty->SetPtRange(0, 100);
1352       beauty->SetYRange(-1.5, +1.5);
1353       beauty->SetForceDecay(kSemiElectronic);
1354
1355       gener->AddGenerator(jpsi,"J/psi",1);
1356       gener->AddGenerator(ups,"Upsilon",1);
1357       gener->AddGenerator(charm,"Charm",1);
1358       gener->AddGenerator(beauty,"Beauty",1);
1359       gGener=gener;
1360     }
1361     break;
1362   case kPyJJ:
1363     {
1364       comment = comment.Append(" Jet-jet at 5.5 TeV");
1365       AliGenPythia *gener = new AliGenPythia(-1);
1366       gener->SetEnergyCMS(5500.);
1367       gener->SetProcess(kPyJets);
1368       Double_t ptHardMin=10.0, ptHardMax=-1.0;
1369       gener->SetPtHard(ptHardMin,ptHardMax);
1370       gener->SetYHard(-0.7,0.7);
1371       gener->SetJetEtaRange(-0.2,0.2);
1372       gener->SetEventListRange(0,1);
1373       gGener=gener;
1374     }
1375     break;
1376   case kPyGJ:
1377     {
1378       comment = comment.Append(" Gamma-jet at 5.5 TeV");
1379       AliGenPythia *gener = new AliGenPythia(-1);
1380       gener->SetEnergyCMS(5500.);
1381       gener->SetProcess(kPyDirectGamma);
1382       Double_t ptHardMin=10.0, ptHardMax=-1.0;
1383       gener->SetPtHard(ptHardMin,ptHardMax);
1384       gener->SetYHard(-1.0,1.0);
1385       gener->SetGammaEtaRange(-0.13,0.13);
1386       gener->SetGammaPhiRange(210.,330.);
1387       gener->SetEventListRange(0,1);
1388       gGener=gener;
1389     }
1390     break;
1391   case kMuonCocktailCent1:
1392     {
1393       comment = comment.Append(" Muon Cocktail Cent1");
1394       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1395       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1396       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1397       gener->SetYRange(-4.0,-2.4);
1398       gener->SetMuonPtCut(0.8);
1399       gener->SetMuonThetaCut(171.,178.);
1400       gener->SetMuonMultiplicity(2);
1401       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
1402       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
1403       gGener=gener;
1404     }
1405     break;
1406   case kMuonCocktailPer1:
1407     {
1408       comment = comment.Append(" Muon Cocktail Per1");
1409       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1410       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1411       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1412       gener->SetYRange(-4.0,-2.4);
1413       gener->SetMuonPtCut(0.8);
1414       gener->SetMuonThetaCut(171.,178.);
1415       gener->SetMuonMultiplicity(2);
1416       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
1417       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
1418       gGener=gener;
1419     }
1420     break;
1421   case kMuonCocktailPer4:
1422     {
1423       comment = comment.Append(" Muon Cocktail Per4");
1424       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1425       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1426       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1427       gener->SetYRange(-4.0,-2.4);
1428       gener->SetMuonPtCut(0.8);
1429       gener->SetMuonThetaCut(171.,178.);
1430       gener->SetMuonMultiplicity(2);
1431       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
1432       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
1433       gGener=gener;
1434     }
1435     break;
1436   case kMuonCocktailCent1HighPt:
1437     {
1438       comment = comment.Append(" Muon Cocktail HighPt Cent1");
1439       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1440       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1441       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1442       gener->SetYRange(-4.0,-2.4);
1443       gener->SetMuonPtCut(2.5);
1444       gener->SetMuonThetaCut(171.,178.);
1445       gener->SetMuonMultiplicity(2);
1446       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
1447       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
1448       gGener=gener;
1449     }
1450     break;
1451   case kMuonCocktailPer1HighPt :
1452     {
1453       comment = comment.Append(" Muon Cocktail HighPt Per1");
1454       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1455       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1456       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1457       gener->SetYRange(-4.0,-2.4);
1458       gener->SetMuonPtCut(2.5);
1459       gener->SetMuonThetaCut(171.,178.);
1460       gener->SetMuonMultiplicity(2);
1461       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
1462       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
1463       gGener=gener;
1464     }
1465     break;
1466   case kMuonCocktailPer4HighPt:
1467     {
1468       comment = comment.Append(" Muon Cocktail HighPt Per4");
1469       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1470       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1471       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1472       gener->SetYRange(-4.0,-2.4);
1473       gener->SetMuonPtCut(2.5);
1474       gener->SetMuonThetaCut(171.,178.);
1475       gener->SetMuonMultiplicity(2);
1476       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
1477       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
1478       gGener=gener;
1479     }
1480     break;
1481   case kMuonCocktailCent1Single:
1482     {
1483       comment = comment.Append(" Muon Cocktail Single Cent1");
1484       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1485       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1486       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1487       gener->SetYRange(-4.0,-2.4);
1488       gener->SetMuonPtCut(0.8);
1489       gener->SetMuonThetaCut(171.,178.);
1490       gener->SetMuonMultiplicity(1);
1491       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
1492       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
1493       gGener=gener;
1494     }
1495     break;
1496   case kMuonCocktailPer1Single :
1497     {
1498       comment = comment.Append(" Muon Cocktail Single Per1");
1499       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1500       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1501       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1502       gener->SetYRange(-4.0,-2.4);
1503       gener->SetMuonPtCut(0.8);
1504       gener->SetMuonThetaCut(171.,178.);
1505       gener->SetMuonMultiplicity(1);
1506       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
1507       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
1508       gGener=gener;
1509     }
1510     break;
1511   case kMuonCocktailPer4Single:
1512     {
1513       comment = comment.Append(" Muon Cocktail Single Per4");
1514       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1515       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1516       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1517       gener->SetYRange(-4.0,-2.4);
1518       gener->SetMuonPtCut(0.8);
1519       gener->SetMuonThetaCut(171.,178.);
1520       gener->SetMuonMultiplicity(1);
1521       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
1522       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
1523       gGener=gener;
1524     }
1525     break;
1526   case kFMD1Flat: 
1527     {
1528       comment = comment.Append(" Flat in FMD1 range");
1529       AliGenBox* gener = new AliGenBox(2000);
1530       gener->SetPart(211);
1531       gener->SetMomentumRange(3,4);
1532       gener->SetPhiRange(0, 360);
1533       gener->SetThetaRange(0.77, 3.08);
1534       gGener = gener;
1535     }
1536     break;
1537   case kFMD2Flat: 
1538     {
1539       comment = comment.Append(" Flat in FMD2 range");
1540       AliGenBox* gener = new AliGenBox(2000);
1541       gener->SetPart(211);
1542       gener->SetMomentumRange(3,4);
1543       gener->SetPhiRange(0, 360);
1544       gener->SetThetaRange(2.95, 20.42);
1545       gGener = gener;
1546     }
1547     break;
1548   case kFMD3Flat: 
1549     {
1550       comment = comment.Append(" Flat in FMD3 range");
1551       AliGenBox* gener = new AliGenBox(2000);
1552       gener->SetPart(211);
1553       gener->SetMomentumRange(3,4);
1554       gener->SetPhiRange(0, 360);
1555       gener->SetThetaRange(155.97, 176.73);
1556       gGener = gener;
1557     }
1558     break;
1559   case kFMDFlat:
1560     {
1561       comment = comment.Append(" Flat in FMD range");
1562       AliGenCocktail* gener = new AliGenCocktail();
1563       gener->SetMomentumRange(3,4);
1564       gener->SetPhiRange(0, 360);
1565       AliGenBox* gener3 = new AliGenBox(2000);
1566       gener3->SetThetaRange(155.97, 176.73);
1567       gener3->SetPart(211);
1568       gener->AddGenerator(gener3, "FMD3", .33);
1569       AliGenBox* gener2 = new AliGenBox(2000);
1570       gener2->SetThetaRange(2.95, 20.42);
1571       gener2->SetPart(211);
1572       gener->AddGenerator(gener2, "FMD2", .33);
1573       AliGenBox* gener1 = new AliGenBox(2000);
1574       gener1->SetThetaRange(0.77, 3.08);
1575       gener1->SetPart(211);
1576       gener->AddGenerator(gener1, "FMD1", .34);
1577       gGener = gener;
1578     }
1579     break;
1580     
1581   default: break;
1582   }
1583   return gGener;
1584 }
1585
1586 //____________________________________________________________________
1587 AliGenHijing* 
1588 HijingStandard()
1589 {
1590   AliGenHijing *gener = new AliGenHijing(-1);
1591   // centre of mass energy 
1592   gener->SetEnergyCMS(5500.);
1593   // reference frame
1594   gener->SetReferenceFrame("CMS");
1595   // projectile
1596   gener->SetProjectile("A", 208, 82);
1597   gener->SetTarget    ("A", 208, 82);
1598   // tell hijing to keep the full parent child chain
1599   gener->KeepFullEvent();
1600   // enable jet quenching
1601   gener->SetJetQuenching(1);
1602   // enable shadowing
1603   gener->SetShadowing(1);
1604   // neutral pion and heavy particle decays switched off
1605   gener->SetDecaysOff(1);
1606   // Don't track spectators
1607   gener->SetSpectators(0);
1608   // kinematic selection
1609   gener->SetSelectAll(0);
1610   return gener;
1611 }
1612
1613
1614 //____________________________________________________________________
1615 void 
1616 ProcessEnvironmentVars(EG_t& eg, Int_t& seed)
1617 {
1618   // Run type
1619   if (gSystem->Getenv("CONFIG_RUN_TYPE")) {
1620     Int_t eg1 = LookupEG(gSystem->Getenv("CONFIG_RUN_TYPE"));
1621     if  (eg1 >= 0) eg = EG_t(eg1);
1622   }
1623   // Random Number seed
1624   if (gSystem->Getenv("CONFIG_SEED")) {
1625     seed = atoi(gSystem->Getenv("CONFIG_SEED"));
1626   }
1627 }
1628
1629 //____________________________________________________________________
1630 //
1631 // EOF
1632 //