Finalised the survey to alignment conversion. Closing corresponding task
[u/mrichter/AliRoot.git] / FMD / Config.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 // 
19 // Generator types 
20 //
21 enum EG_t {
22   test50,
23   kParam_8000,                  //
24   kParam_4000,                  //
25   kParam_2000,                  //
26   kParam_fmd,                   //
27   kHijing_cent1,                //
28   kHijing_cent2,                //
29   kHijing_per1,                 //
30   kHijing_per2,                 //
31   kHijing_per3,                 //
32   kHijing_per4,                 //
33   kHijing_per5,                 //
34   kHijing_jj25,                 //
35   kHijing_jj50,                 //
36   kHijing_jj75,                 //
37   kHijing_jj100,                //
38   kHijing_jj200,                //
39   kHijing_gj25,                 //
40   kHijing_gj50,                 //
41   kHijing_gj75,                 //
42   kHijing_gj100,                //
43   kHijing_gj200,                //
44   kHijing_pA,                   //
45   kPythia6,                     //
46   kPythia6Jets20_24,            //
47   kPythia6Jets24_29,            //
48   kPythia6Jets29_35,            //
49   kPythia6Jets35_42,            //
50   kPythia6Jets42_50,            //
51   kPythia6Jets50_60,            //
52   kPythia6Jets60_72,            //
53   kPythia6Jets72_86,            //
54   kPythia6Jets86_104,           //
55   kPythia6Jets104_125,          //
56   kPythia6Jets125_150,          //
57   kPythia6Jets150_180,          //
58   kD0PbPb5500,                  //
59   kCharmSemiElPbPb5500,         //
60   kBeautySemiElPbPb5500,        //
61   kCocktailTRD,                 //
62   kPyJJ,                        //
63   kPyGJ,                        //
64   kMuonCocktailCent1,           //
65   kMuonCocktailPer1,            //
66   kMuonCocktailPer4,            //
67   kMuonCocktailCent1HighPt,     //
68   kMuonCocktailPer1HighPt,      //
69   kMuonCocktailPer4HighPt,      //
70   kMuonCocktailCent1Single,     //
71   kMuonCocktailPer1Single,      //
72   kMuonCocktailPer4Single,
73   kFMD1Flat, 
74   kFMD2Flat, 
75   kFMD3Flat,
76   kFMDFlat,
77   kEgMax
78 };
79
80 //____________________________________________________________________
81 // 
82 // Generator types names
83 //
84 const char* egName[kEgMax] = {
85   "test50",
86   "kParam_8000",                //
87   "kParam_4000",                //
88   "kParam_2000",                //
89   "kParam_fmd",                 //
90   "kHijing_cent1",              //
91   "kHijing_cent2",              //
92   "kHijing_per1",               //
93   "kHijing_per2",               //
94   "kHijing_per3",               //
95   "kHijing_per4",               //
96   "kHijing_per5",               //
97   "kHijing_jj25",               //
98   "kHijing_jj50",               //
99   "kHijing_jj75",               //
100   "kHijing_jj100",              //
101   "kHijing_jj200",              //
102   "kHijing_gj25",               //
103   "kHijing_gj50",               //
104   "kHijing_gj75",               //
105   "kHijing_gj100",              //
106   "kHijing_gj200",              //
107   "kHijing_pA",                 //
108   "kPythia6",                   //
109   "kPythia6Jets20_24",          //
110   "kPythia6Jets24_29",          //
111   "kPythia6Jets29_35",          //
112   "kPythia6Jets35_42",          //
113   "kPythia6Jets42_50",          //
114   "kPythia6Jets50_60",          //
115   "kPythia6Jets60_72",          //
116   "kPythia6Jets72_86",          //
117   "kPythia6Jets86_104",         //
118   "kPythia6Jets104_125",        //
119   "kPythia6Jets125_150",        //
120   "kPythia6Jets150_180",        //
121   "kD0PbPb5500",                //
122   "kCharmSemiElPbPb5500",       //
123   "kBeautySemiElPbPb5500",      //
124   "kCocktailTRD",               //
125   "kPyJJ",                      //
126   "kPyGJ",                      //
127   "kMuonCocktailCent1",         //
128   "kMuonCocktailPer1",          //
129   "kMuonCocktailPer4",          //
130   "kMuonCocktailCent1HighPt",   //
131   "kMuonCocktailPer1HighPt",    //
132   "kMuonCocktailPer4HighPt",    //
133   "kMuonCocktailCent1Single",   //
134   "kMuonCocktailPer1Single",    //
135   "kMuonCocktailPer4Single",
136   "kFMD1Flat",
137   "kFMD2Flat",
138   "kFMD3Flat",
139   "kFMDFlat"
140 };
141
142 //____________________________________________________________________
143 enum Geo_t {
144   kHoles,                       //
145   kNoHoles                      //
146 };
147
148 //____________________________________________________________________
149 enum Rad_t {
150   kGluonRadiation,              //
151   kNoGluonRadiation             //
152 };
153
154 //____________________________________________________________________
155 enum MC_t {
156   kFLUKA, 
157   kGEANT3, 
158   kGEANT4, 
159   kGEANT3TGEO,
160 };
161
162 //____________________________________________________________________
163 // Functions
164 Float_t       EtaToTheta(Float_t eta);
165 EG_t          LookupEG(const Char_t* name);
166 AliGenerator* GeneratorFactory(EG_t eg, Rad_t rad);
167 AliGenHijing* HijingStandard();
168 void          ProcessEnvironmentVars(EG_t& eg, Int_t& seed);
169
170 //____________________________________________________________________
171 void 
172 Config()
173 {
174   //____________________________________________________________________
175   // This part for configuration    
176   // EG_t  eg   = test50;
177   // EG_t  eg   = kParam_fmd;
178   // EG_t  eg   = kFMDFlat; // kParam_2000; // kPythia;
179   // EG_t  eg   = kFMDFlat;
180   EG_t  eg   = kPythia6;
181   // EG_t  eg   = kFMD2Flat;
182   Geo_t geo  = kNoHoles;
183   Rad_t rad  = kGluonRadiation;
184   AliMagF::BMap_t mag  = AliMagF::k5kG;
185   Int_t seed = 12345; //Set 0 to use the current time
186   MC_t  mc   = kGEANT3TGEO;
187   
188   //____________________________________________________________________
189   // Get settings from environment variables
190   ProcessEnvironmentVars(eg, seed);
191
192   //____________________________________________________________________
193   // Set Random Number seed
194   gRandom->SetSeed(seed);
195   cout<<"Seed for random number generation= "<<gRandom->GetSeed()<<endl; 
196
197
198   //__________________________________________________________________
199   switch (mc) {
200   case kFLUKA: 
201     // 
202     // libraries required by fluka21
203     // 
204     gSystem->Load("libGeom");
205     cout << "\t* Loading TFluka..." << endl;  
206     gSystem->Load("libTFluka");    
207     gSystem->MakeDirectory("peg");
208     // 
209     // FLUKA MC
210     //
211     cout << "\t* Instantiating TFluka..." << endl;
212     new TFluka("C++ Interface to Fluka", 0/*verbosity*/);
213     break;
214   case kGEANT3: 
215     {
216       //
217       // Libraries needed by GEANT 3.21 
218       //
219       gSystem->Load("$ALICE_ROOT/lib/tgt_$ALICE_TARGET/libpythia6.so");
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("$ALICE_ROOT/lib/tgt_$ALICE_TARGET/liblhapdf.so");
235       gSystem->Load("$ALICE_ROOT/lib/tgt_$ALICE_TARGET/libpythia6.so");
236       // gSystem->Load("libEGPythia6.so"); //<- For non-debian (sigh!)
237       gSystem->Load("EGPythia6.so");
238       gSystem->Load("libgeant321");
239     
240       // 
241       // GEANT 3.21 MC 
242       // 
243       TGeant3TGeo* gmc  = new TGeant3TGeo("C++ Interface to Geant3");
244       gmc->SetSWIT(4, 1000);
245       Printf("Making a TGeant3TGeo objet");
246     }
247     break;
248   default:
249     gAlice->Fatal("Config.C", "No MC type chosen");
250     return;
251   }
252
253   //__________________________________________________________________
254   AliRunLoader* rl = 0;
255
256   cout<<"Config.C: Creating Run Loader ..."<<endl;
257   rl = AliRunLoader::Open("galice.root",
258                           AliConfig::GetDefaultEventFolderName(),
259                           "recreate");
260   if (!rl) {
261     gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
262     return;
263   }
264   rl->SetCompressionLevel(2);
265   rl->SetNumberOfEventsPerFile(3);
266   gAlice->SetRunLoader(rl);
267
268   //__________________________________________________________________
269   // For FLUKA 
270   switch (mc) {
271   case kFLUKA: 
272     {
273       //
274       // Use kTRUE as argument to generate alice.pemf first
275       //
276       TString alice_pemf(gSystem->Which(".", "peg/mat17.pemf"));
277       if (!alice_pemf.IsNull()) 
278         ((TFluka*)gMC)->SetGeneratePemf(kFALSE);
279       else
280         ((TFluka*)gMC)->SetGeneratePemf(kTRUE);
281       TString flupro(gSystem->Getenv("FLUPRO"));
282       if (flupro.IsNull()) 
283         Fatal("Config.C", "Environment variable FLUPRO not set");
284 #if 0
285       char* files[] = { "brems_fin.bin", "cohff.bin", "elasct.bin", 
286                         "gxsect.bin", "nuclear.bin", "sigmapi.bin", 
287                         0 };
288       char* file = files[0];
289       while (file) {
290         TString which(gSystem->Which(".", file));
291         if (which.IsNull()) {
292           if (gSystem->Symlink(Form("%s/%s", flupro.Data(), file), file)!=0) 
293             Fatal("Config.C", "Couldn't link $(FLUPRO)/%s -> .", file);
294         }
295         file++;
296       }
297 #endif
298       TString neuxsc(gSystem->Which(".", "neuxsc.bin"));
299       if (neuxsc.IsNull()) 
300         gSystem->Symlink(Form("%s/neuxsc_72.bin", flupro.Data()), 
301                          "neuxsc.bin"); 
302       gSystem->CopyFile("$(FLUPRO)/random.dat", "old.seed", kTRUE);
303     }
304     break;
305   }
306
307   //__________________________________________________________________
308   //
309   // Set External decayer
310 #if 0
311   AliDecayer *decayer = new AliDecayerPythia();
312   switch (eg) {
313   case kD0PbPb5500:           decayer->SetForceDecay(kHadronicD);      break;
314   case kCharmSemiElPbPb5500:  decayer->SetForceDecay(kSemiElectronic); break;
315   case kBeautySemiElPbPb5500: decayer->SetForceDecay(kSemiElectronic); break;
316   default:                    decayer->SetForceDecay(kAll);            break;
317   }
318   decayer->Init();
319   gMC->SetExternalDecayer(decayer);
320 #endif
321
322   //__________________________________________________________________
323   // *********** STEERING parameters FOR ALICE SIMULATION ************
324   // - Specify event type to be tracked through the ALICE setup
325   // - All positions are in cm, angles in degrees, and P and E in GeV 
326   gMC->SetProcess("DCAY",1);
327   gMC->SetProcess("PAIR",1);
328   gMC->SetProcess("COMP",1);
329   gMC->SetProcess("PHOT",1);
330   gMC->SetProcess("PFIS",0);
331   gMC->SetProcess("DRAY",0);
332   gMC->SetProcess("ANNI",1);
333   gMC->SetProcess("BREM",1);
334   gMC->SetProcess("MUNU",1);
335   gMC->SetProcess("CKOV",1);
336   gMC->SetProcess("HADR",1);
337   gMC->SetProcess("LOSS",1); // 0:none 1,3:dray 2:nodray 4:nofluct (def:2)
338   gMC->SetProcess("MULS",1);
339   gMC->SetProcess("RAYL",1);
340
341   Float_t cut = 1.e-3;        // 1MeV cut by default
342   Float_t tofmax = 1.e10;
343
344   gMC->SetCut("CUTGAM", cut);
345   gMC->SetCut("CUTELE", cut);
346   gMC->SetCut("CUTNEU", cut);
347   gMC->SetCut("CUTHAD", cut);
348   gMC->SetCut("CUTMUO", cut);
349   gMC->SetCut("BCUTE",  cut); 
350   gMC->SetCut("BCUTM",  cut); 
351   gMC->SetCut("DCUTE",  cut); 
352   gMC->SetCut("DCUTM",  cut); 
353   gMC->SetCut("PPCUTM", cut);
354   gMC->SetCut("TOFMAX", tofmax); 
355
356   
357   //__________________________________________________________________
358   // Generator Configuration
359   AliGenerator* gener = GeneratorFactory(eg, rad);
360   gener->SetOrigin(0, 0, 0);    // vertex position
361   gener->SetSigma(0, 0, 5.3);   // Sigma in (X,Y,Z) (cm) on IP position
362   gener->SetCutVertexZ(1.);     // Truncate at 1 sigma
363   gener->SetVertexSmear(kPerEvent); 
364   gener->SetTrackingFlag(1);
365   gener->Init();
366     
367   //__________________________________________________________________
368   // Field (L3 0.4 T)
369   AliMagF* field = new AliMagF("Maps","Maps",2,1.,1., 10.,AliMagF::k5kG);
370   field->SetL3ConstField(0); //Using const. field in the barrel
371   TGeoGlobalMagField::Instance()->SetField(field);
372
373   rl->CdGAFile();
374
375   TFile* magF = TFile::Open("mag.root", "RECREATE");
376   field->Write("mag");
377   magF->Close();
378
379   //__________________________________________________________________
380   // 
381   // Used detectors 
382   // 
383   Bool_t useABSO  = kFALSE; 
384   Bool_t useACORDE= kFALSE; 
385   Bool_t useDIPO  = kFALSE; 
386   Bool_t useFMD   = kTRUE; 
387   Bool_t useFRAME = kFALSE; 
388   Bool_t useHALL  = kFALSE; 
389   Bool_t useITS   = kTRUE;
390   Bool_t useMAG   = kFALSE; 
391   Bool_t useMUON  = kFALSE; 
392   Bool_t usePHOS  = kFALSE; 
393   Bool_t usePIPE  = kTRUE; 
394   Bool_t usePMD   = kFALSE; 
395   Bool_t useHMPID = kFALSE; 
396   Bool_t useSHIL  = kFALSE; 
397   Bool_t useT0    = kFALSE; 
398   Bool_t useTOF   = kFALSE; 
399   Bool_t useTPC   = kFALSE;
400   Bool_t useTRD   = kFALSE; 
401   Bool_t useZDC   = kFALSE; 
402   Bool_t useEMCAL = kFALSE; 
403   Bool_t useVZERO = kFALSE;
404
405   cout << "\t* Creating the detectors ..." << endl;
406   // ================= Alice BODY parameters =========================
407   AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
408   
409   
410   if (useMAG)   AliMAG  *MAG  = new AliMAG("MAG", "Magnet");
411   if (useABSO)  AliABSO *ABSO = new AliABSOv3("ABSO", "Muon Absorber");
412   if (useDIPO)  AliDIPO *DIPO = new AliDIPOv3("DIPO", "Dipole version 3");
413   if (useHALL)  AliHALL *HALL = new AliHALLv3("HALL", "Alice Hall");
414   if (useFRAME) {
415     AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
416     switch (geo) {
417     case kHoles: FRAME->SetHoles(1); break;
418     default:     FRAME->SetHoles(0); break;
419     }
420   }
421   if (useSHIL)   AliSHIL   *SHIL   = new AliSHILv3("SHIL", "Shielding v3");
422   if (usePIPE)   AliPIPE   *PIPE   = new AliPIPEv3("PIPE", "Beam Pipe");
423   if (useITS)    AliITS    *ITS    = new AliITSv11Hybrid("ITS","ITS v11Hybrid");
424   if (useTPC)    AliTPC    *TPC    = new AliTPCv2("TPC", "Default");
425   if (useTOF)    AliTOF    *TOF    = new AliTOFv6T0("TOF", "normal TOF");
426   if (useHMPID)  AliHMPID  *HMPID  = new AliHMPIDv1("HMPID", "normal HMPID");
427   if (useZDC)    AliZDC    *ZDC    = new AliZDCv3("ZDC", "normal ZDC");
428   if (useTRD)    AliTRD    *TRD    = new AliTRDv1("TRD", "TRD slow simulator");
429   if (useFMD)    AliFMD    *FMD    = new AliFMDv1("FMD", "normal FMD");
430   if (useMUON)   AliMUON   *MUON   = new AliMUONv1("MUON", "default");
431   if (usePHOS)   AliPHOS   *PHOS   = new AliPHOSv1("PHOS", "IHEP");
432   if (usePMD)    AliPMD    *PMD    = new AliPMDv1("PMD", "normal PMD");
433   if (useT0)     AliT0     *T0     = new AliT0v1("T0", "T0 Detector");
434   if (useEMCAL)  AliEMCAL  *EMCAL  = new AliEMCALv2("EMCAL", "EMCAL_COMPLETE");
435   if (useACORDE) AliACORDE *ACORDE = new AliACORDEv1("ACORDE", "normal ACORDE");
436   if (useVZERO)  AliVZERO  *VZERO  = new AliVZEROv7("VZERO", "normal VZERO");
437 }
438
439 //____________________________________________________________________
440 Float_t EtaToTheta(Float_t arg)
441 {
442   return (180./TMath::Pi())*2.*TMath::ATan(TMath::Exp(-arg));
443 }
444
445 //____________________________________________________________________
446 Int_t 
447 LookupEG(const Char_t* name) 
448 {
449   TString n(name);
450   for (Int_t i = 0; i < kEgMax; i++) {
451     if (n == egName[i]) return i;
452   }
453   return -1;
454 }
455
456 //____________________________________________________________________  
457 AliGenerator* 
458 GeneratorFactory(EG_t eg, Rad_t rad)  
459 {
460   Int_t isw = 3;
461   if (rad == kNoGluonRadiation) isw = 0;
462   
463   // Possibly load libAliPythia6
464   switch (eg) {
465   case kPythia6:
466   case kPythia6Jets20_24:
467   case kPythia6Jets24_29:
468   case kPythia6Jets29_35:
469   case kPythia6Jets35_42:
470   case kPythia6Jets42_50:
471   case kPythia6Jets50_60:
472   case kPythia6Jets60_72:
473   case kPythia6Jets72_86:
474   case kPythia6Jets86_104:
475   case kPythia6Jets104_125:
476   case kPythia6Jets125_150:
477   case kPythia6Jets150_180:
478     gSystem->Load("liblhapdf.so");
479     // gSystem->Load("/usr/lib/libpythia.so");
480     // gSystem->ListLibraries();
481     gSystem->Load("EGPythia6.so");
482     gSystem->Load("libAliPythia6");
483     break;
484   }
485   
486   AliGenerator * gGener = 0;
487   switch (eg) {
488   case test50:
489     {
490       AliGenHIJINGpara *gener = new AliGenHIJINGpara(50);
491       gener->SetMomentumRange(0, 999999.);
492       gener->SetPhiRange(0., 360.);
493       // Set pseudorapidity range from -8 to 8.
494       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
495       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
496       gener->SetThetaRange(thmin,thmax);
497       gGener=gener;
498     }
499     break;
500   case kParam_8000:
501     {
502       AliGenHIJINGpara *gener = new AliGenHIJINGpara(86030);
503       gener->SetMomentumRange(0, 999999.);
504       gener->SetPhiRange(0., 360.);
505       // Set pseudorapidity range from -8 to 8.
506       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
507       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
508       gener->SetThetaRange(thmin,thmax);
509       gGener=gener;
510     }
511     break;
512   case kParam_4000:
513     {
514       AliGenHIJINGpara *gener = new AliGenHIJINGpara(43015);
515       gener->SetMomentumRange(0, 999999.);
516       gener->SetPhiRange(0., 360.);
517       // Set pseudorapidity range from -8 to 8.
518       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
519       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
520       gener->SetThetaRange(thmin,thmax);
521       gGener=gener;
522     }
523     break;
524   case kParam_2000:
525     {
526       AliGenHIJINGpara *gener = new AliGenHIJINGpara(21507);
527       gener->SetMomentumRange(0, 999999.);
528       gener->SetPhiRange(0., 360.);
529       // Set pseudorapidity range from -8 to 8.
530       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
531       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
532       gener->SetThetaRange(thmin,thmax);
533       gGener=gener;
534     }
535     break;
536   case kParam_fmd:
537     {
538       AliGenHIJINGpara *gener = new AliGenHIJINGpara(500);
539       gener->SetMomentumRange(0, 999999.);
540       gener->SetPhiRange(0., 360.);
541       // Set pseudorapidity range from -8 to 8.
542       Float_t thmin = EtaToTheta(6);   // theta min. <---> eta max
543       Float_t thmax = EtaToTheta(2);  // theta max. <---> eta min 
544       gener->SetThetaRange(thmin,thmax);
545       gGener=gener;
546     }
547     break;
548     //
549     //  Hijing Central
550     //
551   case kHijing_cent1:
552     {
553       AliGenHijing *gener = HijingStandard();
554       // impact parameter range
555       gener->SetImpactParameterRange(0., 5.);
556       gGener=gener;
557     }
558     break;
559   case kHijing_cent2:
560     {
561       AliGenHijing *gener = HijingStandard();
562       // impact parameter range
563       gener->SetImpactParameterRange(0., 2.);
564       gGener=gener;
565     }
566     break;
567     //
568     // Hijing Peripheral 
569     //
570   case kHijing_per1:
571     {
572       AliGenHijing *gener = HijingStandard();
573       // impact parameter range
574       gener->SetImpactParameterRange(5., 8.6);
575       gGener=gener;
576     }
577     break;
578   case kHijing_per2:
579     {
580       AliGenHijing *gener = HijingStandard();
581       // impact parameter range
582       gener->SetImpactParameterRange(8.6, 11.2);
583       gGener=gener;
584     }
585     break;
586   case kHijing_per3:
587     {
588       AliGenHijing *gener = HijingStandard();
589       // impact parameter range
590       gener->SetImpactParameterRange(11.2, 13.2);
591       gGener=gener;
592     }
593     break;
594   case kHijing_per4:
595     {
596       AliGenHijing *gener = HijingStandard();
597       // impact parameter range
598       gener->SetImpactParameterRange(13.2, 15.);
599       gGener=gener;
600     }
601     break;
602   case kHijing_per5:
603     {
604       AliGenHijing *gener = HijingStandard();
605       // impact parameter range
606       gener->SetImpactParameterRange(15., 100.);
607       gGener=gener;
608     }
609     break;
610     //
611     //  Jet-Jet
612     //
613   case kHijing_jj25:
614     {
615       AliGenHijing *gener = HijingStandard();
616       // impact parameter range
617       gener->SetImpactParameterRange(0., 5.);
618       // trigger
619       gener->SetTrigger(1);
620       gener->SetPtJet(25.);
621       gener->SetRadiation(isw);
622       gener->SetSimpleJets(!isw);
623       gener->SetJetEtaRange(-0.3,0.3);
624       gener->SetJetPhiRange(75., 165.);   
625       gGener=gener;
626     }
627     break;
628
629   case kHijing_jj50:
630     {
631       AliGenHijing *gener = HijingStandard();
632       // impact parameter range
633       gener->SetImpactParameterRange(0., 5.);
634       // trigger
635       gener->SetTrigger(1);
636       gener->SetPtJet(50.);
637       gener->SetRadiation(isw);
638       gener->SetSimpleJets(!isw);
639       gener->SetJetEtaRange(-0.3,0.3);
640       gener->SetJetPhiRange(75., 165.);   
641       gGener=gener;
642     }
643     break;
644
645   case kHijing_jj75:
646     {
647       AliGenHijing *gener = HijingStandard();
648       // impact parameter range
649       gener->SetImpactParameterRange(0., 5.);
650       // trigger
651       gener->SetTrigger(1);
652       gener->SetPtJet(75.);
653       gener->SetRadiation(isw);
654       gener->SetSimpleJets(!isw);
655       gener->SetJetEtaRange(-0.3,0.3);
656       gener->SetJetPhiRange(75., 165.);   
657       gGener=gener;
658     }
659     break;
660
661   case kHijing_jj100:
662     {
663       AliGenHijing *gener = HijingStandard();
664       // impact parameter range
665       gener->SetImpactParameterRange(0., 5.);
666       // trigger
667       gener->SetTrigger(1);
668       gener->SetPtJet(100.);
669       gener->SetRadiation(isw);
670       gener->SetSimpleJets(!isw);
671       gener->SetJetEtaRange(-0.3,0.3);
672       gener->SetJetPhiRange(75., 165.);   
673       gGener=gener;
674     }
675     break;
676
677   case kHijing_jj200:
678     {
679       AliGenHijing *gener = HijingStandard();
680       // impact parameter range
681       gener->SetImpactParameterRange(0., 5.);
682       // trigger
683       gener->SetTrigger(1);
684       gener->SetPtJet(200.);
685       gener->SetRadiation(isw);
686       gener->SetSimpleJets(!isw);
687       gener->SetJetEtaRange(-0.3,0.3);
688       gener->SetJetPhiRange(75., 165.);   
689       gGener=gener;
690     }
691     break;
692     //
693     // Gamma-Jet
694     //
695   case kHijing_gj25:
696     {
697       AliGenHijing *gener = HijingStandard();
698       // impact parameter range
699       gener->SetImpactParameterRange(0., 5.);
700       // trigger
701       gener->SetTrigger(2);
702       gener->SetPtJet(25.);
703       gener->SetRadiation(isw);
704       gener->SetSimpleJets(!isw);
705       gener->SetJetEtaRange(-0.12, 0.12);
706       gener->SetJetPhiRange(220., 320.);
707       gGener=gener;
708     }
709     break;
710
711   case kHijing_gj50:
712     {
713       AliGenHijing *gener = HijingStandard();
714       // impact parameter range
715       gener->SetImpactParameterRange(0., 5.);
716       // trigger
717       gener->SetTrigger(2);
718       gener->SetPtJet(50.);
719       gener->SetRadiation(isw);
720       gener->SetSimpleJets(!isw);
721       gener->SetJetEtaRange(-0.12, 0.12);
722       gener->SetJetPhiRange(220., 320.);
723       gGener=gener;
724     }
725     break;
726
727   case kHijing_gj75:
728     {
729       AliGenHijing *gener = HijingStandard();
730       // impact parameter range
731       gener->SetImpactParameterRange(0., 5.);
732       // trigger
733       gener->SetTrigger(2);
734       gener->SetPtJet(75.);
735       gener->SetRadiation(isw);
736       gener->SetSimpleJets(!isw);
737       gener->SetJetEtaRange(-0.12, 0.12);
738       gener->SetJetPhiRange(220., 320.);
739       gGener=gener;
740     }
741     break;
742
743   case kHijing_gj100:
744     {
745       AliGenHijing *gener = HijingStandard();
746       // impact parameter range
747       gener->SetImpactParameterRange(0., 5.);
748       // trigger
749       gener->SetTrigger(2);
750       gener->SetPtJet(100.);
751       gener->SetRadiation(isw);
752       gener->SetSimpleJets(!isw);
753       gener->SetJetEtaRange(-0.12, 0.12);
754       gener->SetJetPhiRange(220., 320.);
755       gGener=gener;
756     }
757     break;
758
759   case kHijing_gj200:
760     {
761       AliGenHijing *gener = HijingStandard();
762       // impact parameter range
763       gener->SetImpactParameterRange(0., 5.);
764       // trigger
765       gener->SetTrigger(2);
766       gener->SetPtJet(200.);
767       gener->SetRadiation(isw);
768       gener->SetSimpleJets(!isw);
769       gener->SetJetEtaRange(-0.12, 0.12);
770       gener->SetJetPhiRange(220., 320.);
771       gGener=gener;
772     }
773     break;
774   case kHijing_pA:
775     {
776
777       AliGenCocktail *gener  = new AliGenCocktail();
778
779       AliGenHijing   *hijing = new AliGenHijing(-1);
780       // centre of mass energy 
781       hijing->SetEnergyCMS(TMath::Sqrt(82./208.) * 14000.);
782       // impact parameter range
783       hijing->SetImpactParameterRange(0., 15.);
784       // reference frame
785       hijing->SetReferenceFrame("CMS");
786       hijing->SetBoostLHC(1);
787       // projectile
788       hijing->SetProjectile("P", 1, 1);
789       hijing->SetTarget    ("A", 208, 82);
790       // tell hijing to keep the full parent child chain
791       hijing->KeepFullEvent();
792       // enable jet quenching
793       hijing->SetJetQuenching(0);
794       // enable shadowing
795       hijing->SetShadowing(1);
796       // Don't track spectators
797       hijing->SetSpectators(0);
798       // kinematic selection
799       hijing->SetSelectAll(0);
800       //
801       AliGenSlowNucleons*  gray    = new AliGenSlowNucleons(1);
802       AliSlowNucleonModel* model   = new AliSlowNucleonModelExp();
803       gray->SetSlowNucleonModel(model);
804       gray->SetDebug(1);
805       gener->AddGenerator(hijing,"Hijing pPb", 1);
806       gener->AddGenerator(gray,  "Gray Particles",1);
807       gGener=gener;
808     }
809     break;
810   case kPythia6:
811     {
812       AliGenPythia *gener = new AliGenPythia(-1); 
813       gener->SetMomentumRange(0,999999);
814       gener->SetThetaRange(0., 180.);
815       gener->SetYRange(-12,12);
816       gener->SetPtRange(0,1000);
817       gener->SetProcess(kPyMb);
818       gener->SetEnergyCMS(14000.);
819       gGener=gener;
820     }
821     break;
822   case kPythia6Jets20_24:
823     {
824       AliGenPythia * gener = new AliGenPythia(-1);
825       gener->SetEnergyCMS(5500.);//        Centre of mass energy
826       gener->SetProcess(kPyJets);//        Process type
827       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
828       gener->SetJetPhiRange(0., 360.);
829       gener->SetJetEtRange(10., 1000.);
830       gener->SetGluonRadiation(1,1);
831       //    gener->SetPtKick(0.);
832       //   Structure function
833       gener->SetStrucFunc(kCTEQ4L);
834       gener->SetPtHard(20., 24.);// Pt transfer of the hard scattering
835       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
836       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
837       gGener=gener;
838     }
839     break;
840   case kPythia6Jets24_29:
841     {
842       AliGenPythia * gener = new AliGenPythia(-1);
843       gener->SetEnergyCMS(5500.);//        Centre of mass energy
844       gener->SetProcess(kPyJets);//        Process type
845       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
846       gener->SetJetPhiRange(0., 360.);
847       gener->SetJetEtRange(10., 1000.);
848       gener->SetGluonRadiation(1,1);
849       //    gener->SetPtKick(0.);
850       //   Structure function
851       gener->SetStrucFunc(kCTEQ4L);
852       gener->SetPtHard(24., 29.);// Pt transfer of the hard scattering
853       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
854       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
855       gGener=gener;
856     }
857     break;
858   case kPythia6Jets29_35:
859     {
860       AliGenPythia * gener = new AliGenPythia(-1);
861       gener->SetEnergyCMS(5500.);//        Centre of mass energy
862       gener->SetProcess(kPyJets);//        Process type
863       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
864       gener->SetJetPhiRange(0., 360.);
865       gener->SetJetEtRange(10., 1000.);
866       gener->SetGluonRadiation(1,1);
867       //    gener->SetPtKick(0.);
868       //   Structure function
869       gener->SetStrucFunc(kCTEQ4L);
870       gener->SetPtHard(29., 35.);// Pt transfer of the hard scattering
871       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
872       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
873       gGener=gener;
874     }
875     break;
876   case kPythia6Jets35_42:
877     {
878       AliGenPythia * gener = new AliGenPythia(-1);
879       gener->SetEnergyCMS(5500.);//        Centre of mass energy
880       gener->SetProcess(kPyJets);//        Process type
881       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
882       gener->SetJetPhiRange(0., 360.);
883       gener->SetJetEtRange(10., 1000.);
884       gener->SetGluonRadiation(1,1);
885       //    gener->SetPtKick(0.);
886       //   Structure function
887       gener->SetStrucFunc(kCTEQ4L);
888       gener->SetPtHard(35., 42.);// Pt transfer of the hard scattering
889       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
890       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
891       gGener=gener;
892     }
893     break;
894   case kPythia6Jets42_50:
895     {
896       AliGenPythia * gener = new AliGenPythia(-1);
897       gener->SetEnergyCMS(5500.);//        Centre of mass energy
898       gener->SetProcess(kPyJets);//        Process type
899       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
900       gener->SetJetPhiRange(0., 360.);
901       gener->SetJetEtRange(10., 1000.);
902       gener->SetGluonRadiation(1,1);
903       //    gener->SetPtKick(0.);
904       //   Structure function
905       gener->SetStrucFunc(kCTEQ4L);
906       gener->SetPtHard(42., 50.);// Pt transfer of the hard scattering
907       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
908       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
909       gGener=gener;
910     }
911     break;
912   case kPythia6Jets50_60:
913     {
914       AliGenPythia * gener = new AliGenPythia(-1);
915       gener->SetEnergyCMS(5500.);//        Centre of mass energy
916       gener->SetProcess(kPyJets);//        Process type
917       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
918       gener->SetJetPhiRange(0., 360.);
919       gener->SetJetEtRange(10., 1000.);
920       gener->SetGluonRadiation(1,1);
921       //    gener->SetPtKick(0.);
922       //   Structure function
923       gener->SetStrucFunc(kCTEQ4L);
924       gener->SetPtHard(50., 60.);// Pt transfer of the hard scattering
925       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
926       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
927       gGener=gener;
928     }
929     break;
930   case kPythia6Jets60_72:
931     {
932       AliGenPythia * gener = new AliGenPythia(-1);
933       gener->SetEnergyCMS(5500.);//        Centre of mass energy
934       gener->SetProcess(kPyJets);//        Process type
935       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
936       gener->SetJetPhiRange(0., 360.);
937       gener->SetJetEtRange(10., 1000.);
938       gener->SetGluonRadiation(1,1);
939       //    gener->SetPtKick(0.);
940       //   Structure function
941       gener->SetStrucFunc(kCTEQ4L);
942       gener->SetPtHard(60., 72.);// Pt transfer of the hard scattering
943       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
944       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
945       gGener=gener;
946     }
947     break;
948   case kPythia6Jets72_86:
949     {
950       AliGenPythia * gener = new AliGenPythia(-1);
951       gener->SetEnergyCMS(5500.);//        Centre of mass energy
952       gener->SetProcess(kPyJets);//        Process type
953       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
954       gener->SetJetPhiRange(0., 360.);
955       gener->SetJetEtRange(10., 1000.);
956       gener->SetGluonRadiation(1,1);
957       //    gener->SetPtKick(0.);
958       //   Structure function
959       gener->SetStrucFunc(kCTEQ4L);
960       gener->SetPtHard(72., 86.);// Pt transfer of the hard scattering
961       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
962       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
963       gGener=gener;
964     }
965     break;
966   case kPythia6Jets86_104:
967     {
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(86., 104.);// 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 kPythia6Jets104_125:
985     {
986       AliGenPythia * gener = new AliGenPythia(-1);
987       gener->SetEnergyCMS(5500.);//        Centre of mass energy
988       gener->SetProcess(kPyJets);//        Process type
989       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
990       gener->SetJetPhiRange(0., 360.);
991       gener->SetJetEtRange(10., 1000.);
992       gener->SetGluonRadiation(1,1);
993       //    gener->SetPtKick(0.);
994       //   Structure function
995       gener->SetStrucFunc(kCTEQ4L);
996       gener->SetPtHard(104., 125.);// Pt transfer of the hard scattering
997       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
998       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
999       gGener=gener;
1000     }
1001     break;
1002   case kPythia6Jets125_150:
1003     {
1004       AliGenPythia * gener = new AliGenPythia(-1);
1005       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1006       gener->SetProcess(kPyJets);//        Process type
1007       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1008       gener->SetJetPhiRange(0., 360.);
1009       gener->SetJetEtRange(10., 1000.);
1010       gener->SetGluonRadiation(1,1);
1011       //    gener->SetPtKick(0.);
1012       //   Structure function
1013       gener->SetStrucFunc(kCTEQ4L);
1014       gener->SetPtHard(125., 150.);// Pt transfer of the hard scattering
1015       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1016       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1017       gGener=gener;
1018     }
1019     break;
1020   case kPythia6Jets150_180:
1021     {
1022       AliGenPythia * gener = new AliGenPythia(-1);
1023       gener->SetEnergyCMS(5500.);//        Centre of mass energy
1024       gener->SetProcess(kPyJets);//        Process type
1025       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
1026       gener->SetJetPhiRange(0., 360.);
1027       gener->SetJetEtRange(10., 1000.);
1028       gener->SetGluonRadiation(1,1);
1029       //    gener->SetPtKick(0.);
1030       //   Structure function
1031       gener->SetStrucFunc(kCTEQ4L);
1032       gener->SetPtHard(150., 180.);// Pt transfer of the hard scattering
1033       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
1034       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
1035       gGener=gener;
1036     }
1037     break;
1038   case kD0PbPb5500:
1039     {
1040       AliGenPythia * gener = new AliGenPythia(10);
1041       gener->SetProcess(kPyD0PbPbMNR);
1042       gener->SetStrucFunc(kCTEQ4L);
1043       gener->SetPtHard(2.1,-1.0);
1044       gener->SetEnergyCMS(5500.);
1045       gener->SetNuclei(208,208);
1046       gener->SetForceDecay(kHadronicD);
1047       gener->SetYRange(-2,2);
1048       gener->SetFeedDownHigherFamily(kFALSE);
1049       gener->SetStackFillOpt(AliGenPythia::kParentSelection);
1050       gener->SetCountMode(AliGenPythia::kCountParents);
1051       gGener=gener;
1052     }
1053     break;
1054   case kCharmSemiElPbPb5500:
1055     {
1056       AliGenPythia * gener = new AliGenPythia(10);
1057       gener->SetProcess(kPyCharmPbPbMNR);
1058       gener->SetStrucFunc(kCTEQ4L);
1059       gener->SetPtHard(2.1,-1.0);
1060       gener->SetEnergyCMS(5500.);
1061       gener->SetNuclei(208,208);
1062       gener->SetForceDecay(kSemiElectronic);
1063       gener->SetYRange(-2,2);
1064       gener->SetFeedDownHigherFamily(kFALSE);
1065       gener->SetCountMode(AliGenPythia::kCountParents);
1066       gGener=gener;
1067     }
1068     break;
1069   case kBeautySemiElPbPb5500:
1070     {
1071       AliGenPythia *gener = new AliGenPythia(10);
1072       gener->SetProcess(kPyBeautyPbPbMNR);
1073       gener->SetStrucFunc(kCTEQ4L);
1074       gener->SetPtHard(2.75,-1.0);
1075       gener->SetEnergyCMS(5500.);
1076       gener->SetNuclei(208,208);
1077       gener->SetForceDecay(kSemiElectronic);
1078       gener->SetYRange(-2,2);
1079       gener->SetFeedDownHigherFamily(kFALSE);
1080       gener->SetCountMode(AliGenPythia::kCountParents);
1081       gGener=gener;
1082     }
1083     break;
1084   case kCocktailTRD:
1085     {
1086       AliGenCocktail *gener  = new AliGenCocktail();
1087
1088       AliGenParam *jpsi = new AliGenParam(10,
1089                                           new AliGenMUONlib(),
1090                                           AliGenMUONlib::kJpsiFamily,
1091                                           "Vogt PbPb");
1092
1093       jpsi->SetPtRange(0, 100);
1094       jpsi->SetYRange(-1., +1.);
1095       jpsi->SetForceDecay(kDiElectron);
1096
1097       AliGenParam *ups = new AliGenParam(10,
1098                                          new AliGenMUONlib(),
1099                                          AliGenMUONlib::kUpsilonFamily,
1100                                          "Vogt PbPb");
1101       ups->SetPtRange(0, 100);
1102       ups->SetYRange(-1., +1.);
1103       ups->SetForceDecay(kDiElectron);
1104         
1105       AliGenParam *charm = new AliGenParam(10,
1106                                            new AliGenMUONlib(), 
1107                                            AliGenMUONlib::kCharm,
1108                                            "central");
1109       charm->SetPtRange(0, 100);
1110       charm->SetYRange(-1.5, +1.5);
1111       charm->SetForceDecay(kSemiElectronic);
1112         
1113         
1114       AliGenParam *beauty = new AliGenParam(10,
1115                                             new AliGenMUONlib(), 
1116                                             AliGenMUONlib::kBeauty,
1117                                             "central");
1118       beauty->SetPtRange(0, 100);
1119       beauty->SetYRange(-1.5, +1.5);
1120       beauty->SetForceDecay(kSemiElectronic);
1121
1122       gener->AddGenerator(jpsi,"J/psi",1);
1123       gener->AddGenerator(ups,"Upsilon",1);
1124       gener->AddGenerator(charm,"Charm",1);
1125       gener->AddGenerator(beauty,"Beauty",1);
1126       gGener=gener;
1127     }
1128     break;
1129   case kPyJJ:
1130     {
1131       AliGenPythia *gener = new AliGenPythia(-1);
1132       gener->SetEnergyCMS(5500.);
1133       gener->SetProcess(kPyJets);
1134       Double_t ptHardMin=10.0, ptHardMax=-1.0;
1135       gener->SetPtHard(ptHardMin,ptHardMax);
1136       gener->SetYHard(-0.7,0.7);
1137       gener->SetJetEtaRange(-0.2,0.2);
1138       gener->SetEventListRange(0,1);
1139       gGener=gener;
1140     }
1141     break;
1142   case kPyGJ:
1143     {
1144       AliGenPythia *gener = new AliGenPythia(-1);
1145       gener->SetEnergyCMS(5500.);
1146       gener->SetProcess(kPyDirectGamma);
1147       Double_t ptHardMin=10.0, ptHardMax=-1.0;
1148       gener->SetPtHard(ptHardMin,ptHardMax);
1149       gener->SetYHard(-1.0,1.0);
1150       gener->SetGammaEtaRange(-0.13,0.13);
1151       gener->SetGammaPhiRange(210.,330.);
1152       gener->SetEventListRange(0,1);
1153       gGener=gener;
1154     }
1155     break;
1156   case kMuonCocktailCent1:
1157     {
1158       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1159       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1160       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1161       gener->SetYRange(-4.0,-2.4);
1162       gener->SetMuonPtCut(0.8);
1163       gener->SetMuonThetaCut(171.,178.);
1164       gener->SetMuonMultiplicity(2);
1165       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
1166       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
1167       gGener=gener;
1168     }
1169     break;
1170   case kMuonCocktailPer1:
1171     {
1172       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1173       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1174       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1175       gener->SetYRange(-4.0,-2.4);
1176       gener->SetMuonPtCut(0.8);
1177       gener->SetMuonThetaCut(171.,178.);
1178       gener->SetMuonMultiplicity(2);
1179       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
1180       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
1181       gGener=gener;
1182     }
1183     break;
1184   case kMuonCocktailPer4:
1185     {
1186       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1187       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1188       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1189       gener->SetYRange(-4.0,-2.4);
1190       gener->SetMuonPtCut(0.8);
1191       gener->SetMuonThetaCut(171.,178.);
1192       gener->SetMuonMultiplicity(2);
1193       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
1194       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
1195       gGener=gener;
1196     }
1197     break;
1198   case kMuonCocktailCent1HighPt:
1199     {
1200       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1201       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1202       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1203       gener->SetYRange(-4.0,-2.4);
1204       gener->SetMuonPtCut(2.5);
1205       gener->SetMuonThetaCut(171.,178.);
1206       gener->SetMuonMultiplicity(2);
1207       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
1208       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
1209       gGener=gener;
1210     }
1211     break;
1212   case kMuonCocktailPer1HighPt :
1213     {
1214       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1215       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1216       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1217       gener->SetYRange(-4.0,-2.4);
1218       gener->SetMuonPtCut(2.5);
1219       gener->SetMuonThetaCut(171.,178.);
1220       gener->SetMuonMultiplicity(2);
1221       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
1222       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
1223       gGener=gener;
1224     }
1225     break;
1226   case kMuonCocktailPer4HighPt:
1227     {
1228       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1229       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1230       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1231       gener->SetYRange(-4.0,-2.4);
1232       gener->SetMuonPtCut(2.5);
1233       gener->SetMuonThetaCut(171.,178.);
1234       gener->SetMuonMultiplicity(2);
1235       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
1236       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
1237       gGener=gener;
1238     }
1239     break;
1240   case kMuonCocktailCent1Single:
1241     {
1242       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1243       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1244       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1245       gener->SetYRange(-4.0,-2.4);
1246       gener->SetMuonPtCut(0.8);
1247       gener->SetMuonThetaCut(171.,178.);
1248       gener->SetMuonMultiplicity(1);
1249       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
1250       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
1251       gGener=gener;
1252     }
1253     break;
1254   case kMuonCocktailPer1Single :
1255     {
1256       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1257       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1258       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1259       gener->SetYRange(-4.0,-2.4);
1260       gener->SetMuonPtCut(0.8);
1261       gener->SetMuonThetaCut(171.,178.);
1262       gener->SetMuonMultiplicity(1);
1263       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
1264       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
1265       gGener=gener;
1266     }
1267     break;
1268   case kMuonCocktailPer4Single:
1269     {
1270       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
1271       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
1272       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
1273       gener->SetYRange(-4.0,-2.4);
1274       gener->SetMuonPtCut(0.8);
1275       gener->SetMuonThetaCut(171.,178.);
1276       gener->SetMuonMultiplicity(1);
1277       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
1278       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
1279       gGener=gener;
1280     }
1281     break;
1282   case kFMD1Flat: 
1283     {
1284       AliGenBox* gener = new AliGenBox(2000);
1285       gener->SetPart(kPiPlus);
1286       gener->SetMomentumRange(3,4);
1287       gener->SetPhiRange(0, 360);
1288       gener->SetThetaRange(0.77, 3.08);
1289       gGener = gener;
1290     }
1291     break;
1292   case kFMD2Flat: 
1293     {
1294       AliGenBox* gener = new AliGenBox(10);
1295       gener->SetPart(kPiPlus);
1296       gener->SetMomentumRange(3,4);
1297       gener->SetPhiRange(0, 360);
1298       gener->SetThetaRange(2.95, 20.42);
1299       gGener = gener;
1300     }
1301     break;
1302   case kFMD3Flat: 
1303     {
1304       AliGenBox* gener = new AliGenBox(2000);
1305       gener->SetPart(kPiPlus);
1306       gener->SetMomentumRange(3,4);
1307       gener->SetPhiRange(0, 360);
1308       gener->SetThetaRange(155.97, 176.73);
1309       gGener = gener;
1310     }
1311     break;
1312   case kFMDFlat:
1313     {
1314       AliGenCocktail* gener = new AliGenCocktail();
1315       gener->SetMomentumRange(3,4);
1316       gener->SetPhiRange(0, 360);
1317       AliGenBox* gener3 = new AliGenBox(2000);
1318       gener3->SetThetaRange(155.97, 176.73);
1319       gener3->SetPart(kPiPlus);
1320       gener->AddGenerator(gener3, "FMD3", .33);
1321       AliGenBox* gener2 = new AliGenBox(2000);
1322       gener2->SetThetaRange(2.95, 20.42);
1323       gener2->SetPart(kPiPlus);
1324       gener->AddGenerator(gener2, "FMD2", .33);
1325       AliGenBox* gener1 = new AliGenBox(2000);
1326       gener1->SetThetaRange(0.77, 3.08);
1327       gener1->SetPart(kPiPlus);
1328       gener->AddGenerator(gener1, "FMD1", .34);
1329       gGener = gener;
1330     }
1331     break;
1332     
1333   default: break;
1334   }
1335   return gGener;
1336 }
1337
1338 //____________________________________________________________________
1339 AliGenHijing* 
1340 HijingStandard()
1341 {
1342   AliGenHijing *gener = new AliGenHijing(-1);
1343   // centre of mass energy 
1344   gener->SetEnergyCMS(5500.);
1345   // reference frame
1346   gener->SetReferenceFrame("CMS");
1347   // projectile
1348   gener->SetProjectile("A", 208, 82);
1349   gener->SetTarget    ("A", 208, 82);
1350   // tell hijing to keep the full parent child chain
1351   gener->KeepFullEvent();
1352   // enable jet quenching
1353   gener->SetJetQuenching(1);
1354   // enable shadowing
1355   gener->SetShadowing(1);
1356   // neutral pion and heavy particle decays switched off
1357   gener->SetDecaysOff(1);
1358   // Don't track spectators
1359   gener->SetSpectators(0);
1360   // kinematic selection
1361   gener->SetSelectAll(0);
1362   return gener;
1363 }
1364
1365
1366 //____________________________________________________________________
1367 void 
1368 ProcessEnvironmentVars(EG_t& eg, Int_t& seed)
1369 {
1370   // Run type
1371   if (gSystem->Getenv("CONFIG_RUN_TYPE")) {
1372     Int_t eg1 = LookupEG(gSystem->Getenv("CONFIG_RUN_TYPE"));
1373     if  (eg1 >= 0) eg = EG_t(eg1);
1374   }
1375   // Random Number seed
1376   if (gSystem->Getenv("CONFIG_SEED")) {
1377     seed = atoi(gSystem->Getenv("CONFIG_SEED"));
1378   }
1379 }
1380
1381 //____________________________________________________________________
1382 //
1383 // EOF
1384 //