Config.C

Go to the documentation of this file.
00001 //____________________________________________________________________
00002 //
00003 // $Id: Config.C,v 1.16 2006/03/17 11:42:24 cholm Exp $
00004 //
00005 // One can use the configuration macro in compiled mode by
00006 // root [0] gSystem->Load("libgeant321");
00007 // root [0] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include\
00008 //                   -I$ALICE_ROOT -I$ALICE/geant3/TGeant3");
00009 // root [0] .x grun.C(1,"ConfigPPR.C++")
00010 //
00011 #if !defined(__CINT__) || defined(__MAKECINT__)
00012 #include <Riostream.h>
00013 #include <TRandom.h>
00014 #include <TSystem.h>
00015 #include <TVirtualMC.h>
00016 #include <TGeant3.h>
00017 #include "STEER/AliRunLoader.h"
00018 #include "STEER/AliRun.h"
00019 #include "STEER/AliConfig.h"
00020 #include "STEER/AliGenerator.h"
00021 #include "PYTHIA6/AliDecayerPythia.h"
00022 #include "EVGEN/AliGenHIJINGpara.h"
00023 #include "THijing/AliGenHijing.h"
00024 #include "EVGEN/AliGenCocktail.h"
00025 #include "EVGEN/AliGenSlowNucleons.h"
00026 #include "EVGEN/AliSlowNucleonModelExp.h"
00027 #include "EVGEN/AliGenParam.h"
00028 #include "EVGEN/AliGenMUONlib.h"
00029 #include "EVGEN/AliGenMUONCocktail.h"
00030 #include "PYTHIA6/AliGenPythia.h"
00031 #include "STEER/AliMagFMaps.h"
00032 #include "STRUCT/AliBODY.h"
00033 #include "STRUCT/AliMAG.h"
00034 #include "STRUCT/AliABSOv0.h"
00035 #include "STRUCT/AliDIPOv2.h"
00036 #include "STRUCT/AliHALL.h"
00037 #include "STRUCT/AliFRAMEv2.h"
00038 #include "STRUCT/AliSHILv2.h"
00039 #include "STRUCT/AliPIPEv0.h"
00040 #include "ITS/AliITSvPPRasymmFMD.h"
00041 #include "TPC/AliTPCv2.h"
00042 #include "TOF/AliTOFv4T0.h"
00043 #include "RICH/AliRICHv1.h"
00044 #include "ZDC/AliZDCv2.h"
00045 #include "TRD/AliTRDv1.h"
00046 #include "FMD/AliFMDv1.h"
00047 #include "MUON/AliMUONv1.h"
00048 #include "MUON/AliMUONSt1GeometryBuilderV2.h"
00049 #include "MUON/AliMUONSt2GeometryBuilder.h"
00050 #include "MUON/AliMUONSlatGeometryBuilder.h"
00051 #include "MUON/AliMUONTriggerGeometryBuilder.h"
00052 #include "PHOS/AliPHOSv1.h"
00053 #include "PMD/AliPMDv1.h"
00054 #include "START/AliSTARTv1.h"
00055 #include "EMCAL/AliEMCALv1.h"
00056 #include "CRT/AliCRTv0.h"
00057 #include "VZERO/AliVZEROv2.h"
00058 #endif
00059 
00060 //____________________________________________________________________
00061 // 
00062 // Generator types 
00063 //
00064 enum EG_t {
00065   test50,
00066   kParam_8000,                  //
00067   kParam_4000,                  //
00068   kParam_2000,                  //
00069   kParam_fmd,                   //
00070   kHijing_cent1,                //
00071   kHijing_cent2,                //
00072   kHijing_per1,                 //
00073   kHijing_per2,                 //
00074   kHijing_per3,                 //
00075   kHijing_per4,                 //
00076   kHijing_per5,                 //
00077   kHijing_jj25,                 //
00078   kHijing_jj50,                 //
00079   kHijing_jj75,                 //
00080   kHijing_jj100,                //
00081   kHijing_jj200,                //
00082   kHijing_gj25,                 //
00083   kHijing_gj50,                 //
00084   kHijing_gj75,                 //
00085   kHijing_gj100,                //
00086   kHijing_gj200,                //
00087   kHijing_pA,                   //
00088   kPythia6,                     //
00089   kPythia6Jets20_24,            //
00090   kPythia6Jets24_29,            //
00091   kPythia6Jets29_35,            //
00092   kPythia6Jets35_42,            //
00093   kPythia6Jets42_50,            //
00094   kPythia6Jets50_60,            //
00095   kPythia6Jets60_72,            //
00096   kPythia6Jets72_86,            //
00097   kPythia6Jets86_104,           //
00098   kPythia6Jets104_125,          //
00099   kPythia6Jets125_150,          //
00100   kPythia6Jets150_180,          //
00101   kD0PbPb5500,                  //
00102   kCharmSemiElPbPb5500,         //
00103   kBeautySemiElPbPb5500,        //
00104   kCocktailTRD,                 //
00105   kPyJJ,                        //
00106   kPyGJ,                        //
00107   kMuonCocktailCent1,           //
00108   kMuonCocktailPer1,            //
00109   kMuonCocktailPer4,            //
00110   kMuonCocktailCent1HighPt,     //
00111   kMuonCocktailPer1HighPt,      //
00112   kMuonCocktailPer4HighPt,      //
00113   kMuonCocktailCent1Single,     //
00114   kMuonCocktailPer1Single,      //
00115   kMuonCocktailPer4Single,
00116   kFMD1Flat, 
00117   kFMD2Flat, 
00118   kFMD3Flat,
00119   kFMDFlat,
00120   kEgMax
00121 };
00122 
00123 //____________________________________________________________________
00124 // 
00125 // Generator types names
00126 //
00127 const char* egName[kEgMax] = {
00128   "test50",
00129   "kParam_8000",                //
00130   "kParam_4000",                //
00131   "kParam_2000",                //
00132   "kParam_fmd",                 //
00133   "kHijing_cent1",              //
00134   "kHijing_cent2",              //
00135   "kHijing_per1",               //
00136   "kHijing_per2",               //
00137   "kHijing_per3",               //
00138   "kHijing_per4",               //
00139   "kHijing_per5",               //
00140   "kHijing_jj25",               //
00141   "kHijing_jj50",               //
00142   "kHijing_jj75",               //
00143   "kHijing_jj100",              //
00144   "kHijing_jj200",              //
00145   "kHijing_gj25",               //
00146   "kHijing_gj50",               //
00147   "kHijing_gj75",               //
00148   "kHijing_gj100",              //
00149   "kHijing_gj200",              //
00150   "kHijing_pA",                 //
00151   "kPythia6",                   //
00152   "kPythia6Jets20_24",          //
00153   "kPythia6Jets24_29",          //
00154   "kPythia6Jets29_35",          //
00155   "kPythia6Jets35_42",          //
00156   "kPythia6Jets42_50",          //
00157   "kPythia6Jets50_60",          //
00158   "kPythia6Jets60_72",          //
00159   "kPythia6Jets72_86",          //
00160   "kPythia6Jets86_104",         //
00161   "kPythia6Jets104_125",        //
00162   "kPythia6Jets125_150",        //
00163   "kPythia6Jets150_180",        //
00164   "kD0PbPb5500",                //
00165   "kCharmSemiElPbPb5500",       //
00166   "kBeautySemiElPbPb5500",      //
00167   "kCocktailTRD",               //
00168   "kPyJJ",                      //
00169   "kPyGJ",                      //
00170   "kMuonCocktailCent1",         //
00171   "kMuonCocktailPer1",          //
00172   "kMuonCocktailPer4",          //
00173   "kMuonCocktailCent1HighPt",   //
00174   "kMuonCocktailPer1HighPt",    //
00175   "kMuonCocktailPer4HighPt",    //
00176   "kMuonCocktailCent1Single",   //
00177   "kMuonCocktailPer1Single",    //
00178   "kMuonCocktailPer4Single",
00179   "kFMD1Flat",
00180   "kFMD2Flat",
00181   "kFMD3Flat",
00182   "kFMDFlat"
00183 };
00184 
00185 //____________________________________________________________________
00186 enum Geo_t {
00187   kHoles,                       //
00188   kNoHoles                      //
00189 };
00190 
00191 //____________________________________________________________________
00192 enum Rad_t {
00193   kGluonRadiation,              //
00194   kNoGluonRadiation             //
00195 };
00196 
00197 //____________________________________________________________________
00198 enum Mag_t {
00199   k2kG,                         //
00200   k4kG,                         //
00201   k5kG                          //
00202 };
00203 
00204 //____________________________________________________________________
00205 enum MC_t {
00206   kFLUKA, 
00207   kGEANT3, 
00208   kGEANT4, 
00209   kGEANT3TGEO,
00210 };
00211 
00212 //____________________________________________________________________
00213 // Functions
00214 Float_t       EtaToTheta(Float_t eta);
00215 Eg_t          LookupEG(const Char_t* name);
00216 AliGenerator* GeneratorFactory(EG_t eg, Rad_t rad, TString& comment);
00217 AliGenHijing* HijingStandard();
00218 void          ProcessEnvironmentVars(EG_t& eg, Int_t& seed);
00219 
00220 //____________________________________________________________________
00221 void 
00222 Config()
00223 {
00224   //____________________________________________________________________
00225   // This part for configuration    
00226   //static EG_t eg = test50;
00227   //EG_t  eg   = kParam_fmd;
00228   EG_t  eg   = kParam_2000; // kPythia;
00229   Geo_t geo  = kNoHoles;
00230   Rad_t rad  = kGluonRadiation;
00231   Mag_t mag  = k5kG;
00232   Int_t seed = 12345; //Set 0 to use the current time
00233   MC_t  mc   = kGEANT3TGEO;
00234   
00235   //____________________________________________________________________
00236   // Comment line 
00237   static TString  comment;
00238   
00239   //____________________________________________________________________
00240   // Get settings from environment variables
00241   ProcessEnvironmentVars(eg, seed);
00242 
00243   //____________________________________________________________________
00244   // Set Random Number seed
00245   gRandom->SetSeed(seed);
00246   cout<<"Seed for random number generation= "<<gRandom->GetSeed()<<endl; 
00247 
00248 
00249   //__________________________________________________________________
00250   switch (mc) {
00251   case kFLUKA: 
00252     // 
00253     // libraries required by fluka21
00254     // 
00255     gSystem->Load("libGeom");
00256     cout << "\t* Loading TFluka..." << endl;  
00257     gSystem->Load("libTFluka");    
00258     gSystem->MakeDirectory("peg");
00259     // 
00260     // FLUKA MC
00261     //
00262     cout << "\t* Instantiating TFluka..." << endl;
00263     new TFluka("C++ Interface to Fluka", 0/*verbosity*/);
00264     break;
00265   case kGEANT3: 
00266     {
00267       //
00268       // Libraries needed by GEANT 3.21 
00269       //
00270       gSystem->Load("libgeant321");
00271       
00272       // 
00273       // GEANT 3.21 MC 
00274       // 
00275       TGeant3* gmc = new TGeant3("C++ Interface to Geant3");
00276       gmc->SetSWIT(4, 1000);
00277     }
00278     break;
00279   case kGEANT3TGEO:
00280     {
00281       //
00282       // Libraries needed by GEANT 3.21 
00283       //
00284       gSystem->Load("libgeant321");
00285     
00286       // 
00287       // GEANT 3.21 MC 
00288       // 
00289       TGeant3TGeo* gmc  = new TGeant3TGeo("C++ Interface to Geant3");
00290       gmc->SetSWIT(4, 1000);
00291       Printf("Making a TGeant3TGeo objet");
00292     }
00293     break;
00294   default:
00295     gAlice->Fatal("Config.C", "No MC type chosen");
00296     return;
00297   }
00298 
00299   //__________________________________________________________________
00300   AliRunLoader* rl = 0;
00301 
00302   cout<<"Config.C: Creating Run Loader ..."<<endl;
00303   rl = AliRunLoader::Open("galice.root",
00304                           AliConfig::GetDefaultEventFolderName(),
00305                           "recreate");
00306   if (!rl) {
00307     gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
00308     return;
00309   }
00310   rl->SetCompressionLevel(2);
00311   rl->SetNumberOfEventsPerFile(3);
00312   gAlice->SetRunLoader(rl);
00313 
00314   //__________________________________________________________________
00315   // For FLUKA 
00316   switch (mc) {
00317   case kFLUKA: 
00318     {
00319       //
00320       // Use kTRUE as argument to generate alice.pemf first
00321       //
00322       TString alice_pemf(gSystem->Which(".", "peg/mat17.pemf"));
00323       if (!alice_pemf.IsNull()) 
00324         ((TFluka*)gMC)->SetGeneratePemf(kFALSE);
00325       else
00326         ((TFluka*)gMC)->SetGeneratePemf(kTRUE);
00327       TString flupro(gSystem->Getenv("FLUPRO"));
00328       if (flupro.IsNull()) 
00329         Fatal("Config.C", "Environment variable FLUPRO not set");
00330 #if 0
00331       char* files[] = { "brems_fin.bin", "cohff.bin", "elasct.bin", 
00332                         "gxsect.bin", "nuclear.bin", "sigmapi.bin", 
00333                         0 };
00334       char* file = files[0];
00335       while (file) {
00336         TString which(gSystem->Which(".", file));
00337         if (which.IsNull()) {
00338           if (gSystem->Symlink(Form("%s/%s", flupro.Data(), file), file)!=0) 
00339             Fatal("Config.C", "Couldn't link $(FLUPRO)/%s -> .", file);
00340         }
00341         file++;
00342       }
00343 #endif
00344       TString neuxsc(gSystem->Which(".", "neuxsc.bin"));
00345       if (neuxsc.IsNull()) 
00346         gSystem->Symlink(Form("%s/neuxsc_72.bin", flupro.Data()), 
00347                          "neuxsc.bin"); 
00348       gSystem->CopyFile("$(FLUPRO)/random.dat", "old.seed", kTRUE);
00349     }
00350     break;
00351   }
00352 
00353   //__________________________________________________________________
00354   //
00355   // Set External decayer
00356 #if 0
00357   AliDecayer *decayer = new AliDecayerPythia();
00358   switch (eg) {
00359   case kD0PbPb5500:           decayer->SetForceDecay(kHadronicD);      break;
00360   case kCharmSemiElPbPb5500:  decayer->SetForceDecay(kSemiElectronic); break;
00361   case kBeautySemiElPbPb5500: decayer->SetForceDecay(kSemiElectronic); break;
00362   default:                    decayer->SetForceDecay(kAll);            break;
00363   }
00364   decayer->Init();
00365   gMC->SetExternalDecayer(decayer);
00366 #endif
00367 
00368   //__________________________________________________________________
00369   // *********** STEERING parameters FOR ALICE SIMULATION ************
00370   // - Specify event type to be tracked through the ALICE setup
00371   // - All positions are in cm, angles in degrees, and P and E in GeV 
00372   gMC->SetProcess("DCAY",1);
00373   gMC->SetProcess("PAIR",1);
00374   gMC->SetProcess("COMP",1);
00375   gMC->SetProcess("PHOT",1);
00376   gMC->SetProcess("PFIS",0);
00377   gMC->SetProcess("DRAY",0);
00378   gMC->SetProcess("ANNI",1);
00379   gMC->SetProcess("BREM",1);
00380   gMC->SetProcess("MUNU",1);
00381   gMC->SetProcess("CKOV",1);
00382   gMC->SetProcess("HADR",1);
00383   gMC->SetProcess("LOSS",2);
00384   gMC->SetProcess("MULS",1);
00385   gMC->SetProcess("RAYL",1);
00386 
00387   Float_t cut = 1.e-3;        // 1MeV cut by default
00388   Float_t tofmax = 1.e10;
00389 
00390   gMC->SetCut("CUTGAM", cut);
00391   gMC->SetCut("CUTELE", cut);
00392   gMC->SetCut("CUTNEU", cut);
00393   gMC->SetCut("CUTHAD", cut);
00394   gMC->SetCut("CUTMUO", cut);
00395   gMC->SetCut("BCUTE",  cut); 
00396   gMC->SetCut("BCUTM",  cut); 
00397   gMC->SetCut("DCUTE",  cut); 
00398   gMC->SetCut("DCUTM",  cut); 
00399   gMC->SetCut("PPCUTM", cut);
00400   gMC->SetCut("TOFMAX", tofmax); 
00401 
00402   
00403   //__________________________________________________________________
00404   // Generator Configuration
00405   AliGenerator* gener = GeneratorFactory(eg, rad, comment);
00406   gener->SetOrigin(0, 0, 0);    // vertex position
00407   gener->SetSigma(0, 0, 5.3);   // Sigma in (X,Y,Z) (cm) on IP position
00408   gener->SetCutVertexZ(1.);     // Truncate at 1 sigma
00409   gener->SetVertexSmear(kPerEvent); 
00410   gener->SetTrackingFlag(1);
00411   gener->Init();
00412     
00413   //__________________________________________________________________
00414   // 
00415   // Comments 
00416   // 
00417   switch (mag) {
00418   case k2kG: comment = comment.Append(" | L3 field 0.2 T"); break;
00419   case k4kG: comment = comment.Append(" | L3 field 0.4 T"); break;
00420   case k5kG: comment = comment.Append(" | L3 field 0.5 T"); break;
00421   }
00422 
00423   switch (rad) {
00424   case kGluonRadiation: 
00425     comment = comment.Append(" | Gluon Radiation On");  break;
00426   default:
00427     comment = comment.Append(" | Gluon Radiation Off"); break;
00428   }
00429 
00430   switch(geo) {
00431   case kHoles: comment = comment.Append(" | Holes for PHOS/RICH"); break;
00432   default:     comment = comment.Append(" | No holes for PHOS/RICH"); break;
00433   }
00434 
00435   std::cout << "\n\n Comment: " << comment << "\n" << std::endl;
00436 
00437   //__________________________________________________________________
00438   // Field (L3 0.4 T)
00439   AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., mag);
00440   field->SetL3ConstField(0); //Using const. field in the barrel
00441   rl->CdGAFile();
00442   gAlice->SetField(field);    
00443 
00444   //__________________________________________________________________
00445   // 
00446   // Used detectors 
00447   // 
00448   Bool_t useABSO  = kFALSE; 
00449   Bool_t useCRT   = kFALSE; 
00450   Bool_t useDIPO  = kFALSE; 
00451   Bool_t useFMD   = kTRUE; 
00452   Bool_t useFRAME = kFALSE; 
00453   Bool_t useHALL  = kFALSE; 
00454   Bool_t useITS   = kFALSE;
00455   Bool_t useMAG   = kFALSE; 
00456   Bool_t useMUON  = kFALSE; 
00457   Bool_t usePHOS  = kFALSE; 
00458   Bool_t usePIPE  = kFALSE; 
00459   Bool_t usePMD   = kFALSE; 
00460   Bool_t useRICH  = kFALSE; 
00461   Bool_t useSHIL  = kFALSE; 
00462   Bool_t useSTART = kFALSE; 
00463   Bool_t useTOF   = kFALSE; 
00464   Bool_t useTPC   = kFALSE;
00465   Bool_t useTRD   = kFALSE; 
00466   Bool_t useZDC   = kFALSE; 
00467   Bool_t useEMCAL = kFALSE; 
00468   Bool_t useVZERO = kFALSE;
00469 
00470   cout << "\t* Creating the detectors ..." << endl;
00471   // ================= Alice BODY parameters =========================
00472   AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
00473   
00474   
00475   if (useMAG) {
00476     // =================== MAG parameters ============================
00477     // Start with Magnet since detector layouts may be depending on
00478     // the selected Magnet dimensions 
00479     AliMAG *MAG = new AliMAG("MAG", "Magnet");
00480   }
00481 
00482   if (useABSO) {
00483     // =================== ABSO parameters ===========================
00484     AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber");
00485   }
00486 
00487   if (useDIPO) {
00488     // =================== DIPO parameters ===========================
00489     AliDIPO *DIPO = new AliDIPOv2("DIPO", "Dipole version 2");
00490   }
00491 
00492   if (useHALL) {
00493     // =================== HALL parameters ===========================
00494     AliHALL *HALL = new AliHALL("HALL", "Alice Hall");
00495   }
00496 
00497 
00498   if (useFRAME) {
00499     // ================== FRAME parameters ===========================
00500     AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
00501     switch (geo) {
00502     case kHoles: FRAME->SetHoles(1); break;
00503     default:     FRAME->SetHoles(0); break;
00504     }
00505   }
00506 
00507   if (useSHIL) {
00508     // ================== SHIL parameters ============================
00509     AliSHIL *SHIL = new AliSHILv2("SHIL", "Shielding Version 2");
00510   }
00511 
00512 
00513   if (usePIPE) {
00514     // ================== PIPE parameters ============================
00515     AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe");
00516   }
00517   
00518   if (useITS) {
00519     // =================== ITS parameters ============================
00520     //
00521     // As the innermost detector in ALICE, the Inner Tracking System
00522     // "impacts" on almost all other detectors. This involves the fact
00523     // that the ITS geometry still has several options to be followed
00524     // in parallel in order to determine the best set-up which
00525     // minimizes the induced background. All the geometries available
00526     // to date are described in the following. Read carefully the
00527     // comments and use the default version (the only one uncommented)
00528     // unless you are making comparisons and you know what you are
00529     // doing. In this case just uncomment the ITS geometry you want to
00530     // use and run Aliroot.
00531     //
00532     // Detailed geometries:
00533     //
00534     //
00535     // AliITS *ITS = 
00536     //   new AliITSv5symm("ITS", "Updated ITS TDR detailed version "
00537     //                    "with symmetric services");
00538     // AliITS *ITS  = 
00539     //   new AliITSv5asymm("ITS","Updates ITS TDR detailed version "
00540     //                     "with asymmetric services");
00541     //
00542     AliITSvPPRasymmFMD *ITS  = 
00543       new AliITSvPPRasymmFMD("ITS","New ITS PPR detailed version "
00544                              "with asymmetric services");
00545      // don't touch this parameter if you're not an ITS developer
00546     ITS->SetMinorVersion(2); 
00547     // don't touch this parameter if you're not an ITS developer
00548     ITS->SetReadDet(kTRUE);
00549     // don't touch this parameter if you're not an ITS developer
00550     // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det");  
00551     // detector thickness on layer 1 must be in the range [100,300]
00552     ITS->SetThicknessDet1(200.);   
00553     // detector thickness on layer 2 must be in the range [100,300]
00554     ITS->SetThicknessDet2(200.);   
00555     // chip thickness on layer 1 must be in the range [150,300]
00556     ITS->SetThicknessChip1(200.);  
00557     // chip thickness on layer 2 must be in the range [150,300]
00558     ITS->SetThicknessChip2(200.);
00559     // 1 --> rails in ; 0 --> rails out
00560     ITS->SetRails(0);          
00561     // 1 --> water ; 0 --> freon
00562     ITS->SetCoolingFluid(1);   
00563 
00564     // Coarse geometries (warning: no hits are produced with these
00565     // coarse geometries and they unuseful for reconstruction !):
00566     //
00567     //
00568     // AliITSvPPRcoarseasymm *ITS  = 
00569     //   new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version "
00570     //                             "with asymmetric services");
00571     // 1 --> rails in ; 0 --> rails out
00572     // ITS->SetRails(0);
00573     // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
00574     // ITS->SetSupportMaterial(0);      
00575     //
00576     // AliITS *ITS  = 
00577     //  new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version "
00578     //                           "with symmetric services");
00579     // 1 --> rails in ; 0 --> rails out
00580     // ITS->SetRails(0);                
00581     // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
00582     // ITS->SetSupportMaterial(0);      
00583     //
00584     // Geant3 <-> EUCLID conversion
00585     // ============================
00586     //
00587     // SetEUCLID is a flag to output (=1) or not to output (=0) both
00588     // geometry and media to two ASCII files (called by default
00589     // ITSgeometry.euc and ITSgeometry.tme) in a format understandable
00590     // to the CAD system EUCLID.  The default (=0) means that you dont
00591     // want to use this facility.
00592     //
00593     ITS->SetEUCLID(0);
00594   }
00595 
00596   if (useTPC) {
00597     // =================== TPC parameters ============================
00598     //
00599     // This allows the user to specify sectors for the SLOW (TPC
00600     // geometry 2) Simulator. SecAL (SecAU) <0 means that ALL lower
00601     // (upper) sectors are specified, any value other than that
00602     // requires at least one sector (lower or upper)to be specified!
00603     //
00604     // Reminder: 
00605     //   sectors 1-24 are lower sectors (1-12 -> z>0, 13-24 -> z<0)
00606     //   sectors 25-72 are the upper ones (25-48 -> z>0, 49-72 -> z<0)
00607     //
00608     //   SecLows - number of lower sectors specified (up to 6)
00609     //   SecUps  - number of upper sectors specified (up to 12)
00610     //   Sens    - sensitive strips for the Slow Simulator !!!
00611     //
00612     // This does NOT work if all S or L-sectors are specified, i.e.
00613     // if SecAL or SecAU < 0
00614     //
00615     //
00616     //----------------------------------------------------------------
00617     //  gROOT->LoadMacro("SetTPCParam.C");
00618     //  AliTPCParam *param = SetTPCParam();
00619     AliTPC *TPC = new AliTPCv2("TPC", "Default");
00620   }
00621 
00622   if (useTOF) {
00623     // ================== TOF parameters =============================
00624     AliTOF *TOF = new AliTOFv4T0("TOF", "normal TOF");
00625   }
00626 
00627   if (useRICH) {
00628     // ================== RICH parameters ============================
00629     AliRICH *RICH = new AliRICHv1("RICH", "normal RICH");
00630 
00631   }
00632 
00633   if (useZDC) {
00634     // ================== ZDC parameters =============================
00635     AliZDC *ZDC = new AliZDCv2("ZDC", "normal ZDC");
00636   }
00637 
00638   if (useTRD) {
00639     // ================== TRD parameters =============================
00640     AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator");
00641 
00642     // Select the gas mixture (0: 97% Xe + 3% isobutane, 1: 90% Xe + 10% CO2)
00643     TRD->SetGasMix(1);
00644     if (geo == kHoles) {
00645       // With hole in front of PHOS
00646       TRD->SetPHOShole();
00647       // With hole in front of RICH
00648       TRD->SetRICHhole();
00649     }
00650     // Switch on TR
00651     AliTRDsim *TRDsim = TRD->CreateTR();
00652   }
00653 
00654   if (useFMD) {
00655     // =================== FMD parameters ============================
00656     AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
00657     AliLog::SetModuleDebugLevel("FMD", 1);
00658     // FMD->UseDetailed(kFALSE);
00659     // FMD->UseAssembly();
00660     // FMD->UseOld();
00661   }
00662 
00663   if (useMUON) {
00664     // =================== MUON parameters ===========================
00665     AliMUON *MUON = new AliMUONv1("MUON", "default");
00666     // MUON->AddGeometryBuilder(new AliMUONSt1GeometryBuilder(MUON));
00667     // MUON->AddGeometryBuilder(new AliMUONSt2GeometryBuilder(MUON));
00668     // MUON->AddGeometryBuilder(new AliMUONSlatGeometryBuilder(MUON));
00669     // MUON->AddGeometryBuilder(new AliMUONTriggerGeometryBuilder(MUON));
00670   }
00671 
00672   if (usePHOS) {
00673     // =================== PHOS parameters ===========================
00674     AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP");
00675   }
00676 
00677   if (usePMD) {
00678     // =================== PMD parameters ============================
00679     AliPMD *PMD = new AliPMDv1("PMD", "normal PMD");
00680   }
00681 
00682   if (useSTART) {
00683     // =================== START parameters ==========================
00684     AliSTART *START = new AliSTARTv1("START", "START Detector");
00685   }
00686 
00687   if (useEMCAL) {
00688     // =================== EMCAL parameters ==========================
00689     AliEMCAL *EMCAL = new AliEMCALv1("EMCAL", "EMCAL_55_25");
00690   }
00691 
00692   if (useCRT) {
00693     // =================== CRT parameters ============================
00694     AliCRT *CRT = new AliCRTv0("CRT", "normal ACORDE");
00695   }
00696 
00697   if (useVZERO) {
00698     // =================== V0 parameters =============================
00699     AliVZERO *VZERO = new AliVZEROv3("VZERO", "normal VZERO");
00700   }
00701 }
00702 
00703 //____________________________________________________________________
00704 Float_t EtaToTheta(Float_t arg)
00705 {
00706   return (180./TMath::Pi())*2.*TMath::ATan(TMath::Exp(-arg));
00707 }
00708 
00709 //____________________________________________________________________
00710 Int_t 
00711 LookupEG(const Char_t* name) 
00712 {
00713   TString n(name);
00714   for (Int_t i = 0; i < kEgMax; i++) {
00715     if (n == egName[i]) return i;
00716   }
00717   return -1;
00718 }
00719 
00720 //____________________________________________________________________  
00721 AliGenerator* 
00722 GeneratorFactory(EG_t eg, Rad_t rad, TString& comment)  
00723 {
00724   Int_t isw = 3;
00725   if (rad == kNoGluonRadiation) isw = 0;
00726   
00727   
00728   AliGenerator * gGener = 0;
00729   switch (eg) {
00730   case test50:
00731     {
00732       comment = comment.Append(":HIJINGparam test 50 particles");
00733       AliGenHIJINGpara *gener = new AliGenHIJINGpara(50);
00734       gener->SetMomentumRange(0, 999999.);
00735       gener->SetPhiRange(0., 360.);
00736       // Set pseudorapidity range from -8 to 8.
00737       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
00738       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
00739       gener->SetThetaRange(thmin,thmax);
00740       gGener=gener;
00741     }
00742     break;
00743   case kParam_8000:
00744     {
00745       comment = comment.Append(":HIJINGparam N=8000");
00746       AliGenHIJINGpara *gener = new AliGenHIJINGpara(86030);
00747       gener->SetMomentumRange(0, 999999.);
00748       gener->SetPhiRange(0., 360.);
00749       // Set pseudorapidity range from -8 to 8.
00750       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
00751       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
00752       gener->SetThetaRange(thmin,thmax);
00753       gGener=gener;
00754     }
00755     break;
00756   case kParam_4000:
00757     {
00758       comment = comment.Append("HIJINGparam N=4000");
00759       AliGenHIJINGpara *gener = new AliGenHIJINGpara(43015);
00760       gener->SetMomentumRange(0, 999999.);
00761       gener->SetPhiRange(0., 360.);
00762       // Set pseudorapidity range from -8 to 8.
00763       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
00764       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
00765       gener->SetThetaRange(thmin,thmax);
00766       gGener=gener;
00767     }
00768     break;
00769   case kParam_2000:
00770     {
00771       comment = comment.Append("HIJINGparam N=2000");
00772       AliGenHIJINGpara *gener = new AliGenHIJINGpara(21507);
00773       gener->SetMomentumRange(0, 999999.);
00774       gener->SetPhiRange(0., 360.);
00775       // Set pseudorapidity range from -8 to 8.
00776       Float_t thmin = EtaToTheta(8);   // theta min. <---> eta max
00777       Float_t thmax = EtaToTheta(-8);  // theta max. <---> eta min 
00778       gener->SetThetaRange(thmin,thmax);
00779       gGener=gener;
00780     }
00781     break;
00782   case kParam_fmd:
00783     {
00784       comment = comment.Append("HIJINGparam N=100");
00785       AliGenHIJINGpara *gener = new AliGenHIJINGpara(500);
00786       gener->SetMomentumRange(0, 999999.);
00787       gener->SetPhiRange(0., 360.);
00788       // Set pseudorapidity range from -8 to 8.
00789       Float_t thmin = EtaToTheta(6);   // theta min. <---> eta max
00790       Float_t thmax = EtaToTheta(2);  // theta max. <---> eta min 
00791       gener->SetThetaRange(thmin,thmax);
00792       gGener=gener;
00793     }
00794     break;
00795     //
00796     //  Hijing Central
00797     //
00798   case kHijing_cent1:
00799     {
00800       comment = comment.Append("HIJING cent1");
00801       AliGenHijing *gener = HijingStandard();
00802       // impact parameter range
00803       gener->SetImpactParameterRange(0., 5.);
00804       gGener=gener;
00805     }
00806     break;
00807   case kHijing_cent2:
00808     {
00809       comment = comment.Append("HIJING cent2");
00810       AliGenHijing *gener = HijingStandard();
00811       // impact parameter range
00812       gener->SetImpactParameterRange(0., 2.);
00813       gGener=gener;
00814     }
00815     break;
00816     //
00817     // Hijing Peripheral 
00818     //
00819   case kHijing_per1:
00820     {
00821       comment = comment.Append("HIJING per1");
00822       AliGenHijing *gener = HijingStandard();
00823       // impact parameter range
00824       gener->SetImpactParameterRange(5., 8.6);
00825       gGener=gener;
00826     }
00827     break;
00828   case kHijing_per2:
00829     {
00830       comment = comment.Append("HIJING per2");
00831       AliGenHijing *gener = HijingStandard();
00832       // impact parameter range
00833       gener->SetImpactParameterRange(8.6, 11.2);
00834       gGener=gener;
00835     }
00836     break;
00837   case kHijing_per3:
00838     {
00839       comment = comment.Append("HIJING per3");
00840       AliGenHijing *gener = HijingStandard();
00841       // impact parameter range
00842       gener->SetImpactParameterRange(11.2, 13.2);
00843       gGener=gener;
00844     }
00845     break;
00846   case kHijing_per4:
00847     {
00848       comment = comment.Append("HIJING per4");
00849       AliGenHijing *gener = HijingStandard();
00850       // impact parameter range
00851       gener->SetImpactParameterRange(13.2, 15.);
00852       gGener=gener;
00853     }
00854     break;
00855   case kHijing_per5:
00856     {
00857       comment = comment.Append("HIJING per5");
00858       AliGenHijing *gener = HijingStandard();
00859       // impact parameter range
00860       gener->SetImpactParameterRange(15., 100.);
00861       gGener=gener;
00862     }
00863     break;
00864     //
00865     //  Jet-Jet
00866     //
00867   case kHijing_jj25:
00868     {
00869       comment = comment.Append("HIJING Jet 25 GeV");
00870       AliGenHijing *gener = HijingStandard();
00871       // impact parameter range
00872       gener->SetImpactParameterRange(0., 5.);
00873       // trigger
00874       gener->SetTrigger(1);
00875       gener->SetPtJet(25.);
00876       gener->SetRadiation(isw);
00877       gener->SetSimpleJets(!isw);
00878       gener->SetJetEtaRange(-0.3,0.3);
00879       gener->SetJetPhiRange(75., 165.);   
00880       gGener=gener;
00881     }
00882     break;
00883 
00884   case kHijing_jj50:
00885     {
00886       comment = comment.Append("HIJING Jet 50 GeV");
00887       AliGenHijing *gener = HijingStandard();
00888       // impact parameter range
00889       gener->SetImpactParameterRange(0., 5.);
00890       // trigger
00891       gener->SetTrigger(1);
00892       gener->SetPtJet(50.);
00893       gener->SetRadiation(isw);
00894       gener->SetSimpleJets(!isw);
00895       gener->SetJetEtaRange(-0.3,0.3);
00896       gener->SetJetPhiRange(75., 165.);   
00897       gGener=gener;
00898     }
00899     break;
00900 
00901   case kHijing_jj75:
00902     {
00903       comment = comment.Append("HIJING Jet 75 GeV");
00904       AliGenHijing *gener = HijingStandard();
00905       // impact parameter range
00906       gener->SetImpactParameterRange(0., 5.);
00907       // trigger
00908       gener->SetTrigger(1);
00909       gener->SetPtJet(75.);
00910       gener->SetRadiation(isw);
00911       gener->SetSimpleJets(!isw);
00912       gener->SetJetEtaRange(-0.3,0.3);
00913       gener->SetJetPhiRange(75., 165.);   
00914       gGener=gener;
00915     }
00916     break;
00917 
00918   case kHijing_jj100:
00919     {
00920       comment = comment.Append("HIJING Jet 100 GeV");
00921       AliGenHijing *gener = HijingStandard();
00922       // impact parameter range
00923       gener->SetImpactParameterRange(0., 5.);
00924       // trigger
00925       gener->SetTrigger(1);
00926       gener->SetPtJet(100.);
00927       gener->SetRadiation(isw);
00928       gener->SetSimpleJets(!isw);
00929       gener->SetJetEtaRange(-0.3,0.3);
00930       gener->SetJetPhiRange(75., 165.);   
00931       gGener=gener;
00932     }
00933     break;
00934 
00935   case kHijing_jj200:
00936     {
00937       comment = comment.Append("HIJING Jet 200 GeV");
00938       AliGenHijing *gener = HijingStandard();
00939       // impact parameter range
00940       gener->SetImpactParameterRange(0., 5.);
00941       // trigger
00942       gener->SetTrigger(1);
00943       gener->SetPtJet(200.);
00944       gener->SetRadiation(isw);
00945       gener->SetSimpleJets(!isw);
00946       gener->SetJetEtaRange(-0.3,0.3);
00947       gener->SetJetPhiRange(75., 165.);   
00948       gGener=gener;
00949     }
00950     break;
00951     //
00952     // Gamma-Jet
00953     //
00954   case kHijing_gj25:
00955     {
00956       comment = comment.Append("HIJING Gamma 25 GeV");
00957       AliGenHijing *gener = HijingStandard();
00958       // impact parameter range
00959       gener->SetImpactParameterRange(0., 5.);
00960       // trigger
00961       gener->SetTrigger(2);
00962       gener->SetPtJet(25.);
00963       gener->SetRadiation(isw);
00964       gener->SetSimpleJets(!isw);
00965       gener->SetJetEtaRange(-0.12, 0.12);
00966       gener->SetJetPhiRange(220., 320.);
00967       gGener=gener;
00968     }
00969     break;
00970 
00971   case kHijing_gj50:
00972     {
00973       comment = comment.Append("HIJING Gamma 50 GeV");
00974       AliGenHijing *gener = HijingStandard();
00975       // impact parameter range
00976       gener->SetImpactParameterRange(0., 5.);
00977       // trigger
00978       gener->SetTrigger(2);
00979       gener->SetPtJet(50.);
00980       gener->SetRadiation(isw);
00981       gener->SetSimpleJets(!isw);
00982       gener->SetJetEtaRange(-0.12, 0.12);
00983       gener->SetJetPhiRange(220., 320.);
00984       gGener=gener;
00985     }
00986     break;
00987 
00988   case kHijing_gj75:
00989     {
00990       comment = comment.Append("HIJING Gamma 75 GeV");
00991       AliGenHijing *gener = HijingStandard();
00992       // impact parameter range
00993       gener->SetImpactParameterRange(0., 5.);
00994       // trigger
00995       gener->SetTrigger(2);
00996       gener->SetPtJet(75.);
00997       gener->SetRadiation(isw);
00998       gener->SetSimpleJets(!isw);
00999       gener->SetJetEtaRange(-0.12, 0.12);
01000       gener->SetJetPhiRange(220., 320.);
01001       gGener=gener;
01002     }
01003     break;
01004 
01005   case kHijing_gj100:
01006     {
01007       comment = comment.Append("HIJING Gamma 100 GeV");
01008       AliGenHijing *gener = HijingStandard();
01009       // impact parameter range
01010       gener->SetImpactParameterRange(0., 5.);
01011       // trigger
01012       gener->SetTrigger(2);
01013       gener->SetPtJet(100.);
01014       gener->SetRadiation(isw);
01015       gener->SetSimpleJets(!isw);
01016       gener->SetJetEtaRange(-0.12, 0.12);
01017       gener->SetJetPhiRange(220., 320.);
01018       gGener=gener;
01019     }
01020     break;
01021 
01022   case kHijing_gj200:
01023     {
01024       comment = comment.Append("HIJING Gamma 200 GeV");
01025       AliGenHijing *gener = HijingStandard();
01026       // impact parameter range
01027       gener->SetImpactParameterRange(0., 5.);
01028       // trigger
01029       gener->SetTrigger(2);
01030       gener->SetPtJet(200.);
01031       gener->SetRadiation(isw);
01032       gener->SetSimpleJets(!isw);
01033       gener->SetJetEtaRange(-0.12, 0.12);
01034       gener->SetJetPhiRange(220., 320.);
01035       gGener=gener;
01036     }
01037     break;
01038   case kHijing_pA:
01039     {
01040       comment = comment.Append("HIJING pA");
01041 
01042       AliGenCocktail *gener  = new AliGenCocktail();
01043 
01044       AliGenHijing   *hijing = new AliGenHijing(-1);
01045       // centre of mass energy 
01046       hijing->SetEnergyCMS(TMath::Sqrt(82./208.) * 14000.);
01047       // impact parameter range
01048       hijing->SetImpactParameterRange(0., 15.);
01049       // reference frame
01050       hijing->SetReferenceFrame("CMS");
01051       hijing->SetBoostLHC(1);
01052       // projectile
01053       hijing->SetProjectile("P", 1, 1);
01054       hijing->SetTarget    ("A", 208, 82);
01055       // tell hijing to keep the full parent child chain
01056       hijing->KeepFullEvent();
01057       // enable jet quenching
01058       hijing->SetJetQuenching(0);
01059       // enable shadowing
01060       hijing->SetShadowing(1);
01061       // Don't track spectators
01062       hijing->SetSpectators(0);
01063       // kinematic selection
01064       hijing->SetSelectAll(0);
01065       //
01066       AliGenSlowNucleons*  gray    = new AliGenSlowNucleons(1);
01067       AliSlowNucleonModel* model   = new AliSlowNucleonModelExp();
01068       gray->SetSlowNucleonModel(model);
01069       gray->SetDebug(1);
01070       gener->AddGenerator(hijing,"Hijing pPb", 1);
01071       gener->AddGenerator(gray,  "Gray Particles",1);
01072       gGener=gener;
01073     }
01074     break;
01075   case kPythia6:
01076     {
01077       comment = comment.Append(":Pythia p-p @ 14 TeV");
01078       AliGenPythia *gener = new AliGenPythia(-1); 
01079       gener->SetMomentumRange(0,999999);
01080       gener->SetThetaRange(0., 180.);
01081       gener->SetYRange(-12,12);
01082       gener->SetPtRange(0,1000);
01083       gener->SetProcess(kPyMb);
01084       gener->SetEnergyCMS(14000.);
01085       gGener=gener;
01086     }
01087     break;
01088   case kPythia6Jets20_24:
01089     {
01090       comment = comment.Append(":Pythia jets 20-24 GeV @ 5.5 TeV");
01091       AliGenPythia * gener = new AliGenPythia(-1);
01092       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01093       gener->SetProcess(kPyJets);//        Process type
01094       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01095       gener->SetJetPhiRange(0., 360.);
01096       gener->SetJetEtRange(10., 1000.);
01097       gener->SetGluonRadiation(1,1);
01098       //    gener->SetPtKick(0.);
01099       //   Structure function
01100       gener->SetStrucFunc(kCTEQ4L);
01101       gener->SetPtHard(20., 24.);// Pt transfer of the hard scattering
01102       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01103       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01104       gGener=gener;
01105     }
01106     break;
01107   case kPythia6Jets24_29:
01108     {
01109       comment = comment.Append(":Pythia jets 24-29 GeV @ 5.5 TeV");
01110       AliGenPythia * gener = new AliGenPythia(-1);
01111       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01112       gener->SetProcess(kPyJets);//        Process type
01113       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01114       gener->SetJetPhiRange(0., 360.);
01115       gener->SetJetEtRange(10., 1000.);
01116       gener->SetGluonRadiation(1,1);
01117       //    gener->SetPtKick(0.);
01118       //   Structure function
01119       gener->SetStrucFunc(kCTEQ4L);
01120       gener->SetPtHard(24., 29.);// Pt transfer of the hard scattering
01121       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01122       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01123       gGener=gener;
01124     }
01125     break;
01126   case kPythia6Jets29_35:
01127     {
01128       comment = comment.Append(":Pythia jets 29-35 GeV @ 5.5 TeV");
01129       AliGenPythia * gener = new AliGenPythia(-1);
01130       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01131       gener->SetProcess(kPyJets);//        Process type
01132       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01133       gener->SetJetPhiRange(0., 360.);
01134       gener->SetJetEtRange(10., 1000.);
01135       gener->SetGluonRadiation(1,1);
01136       //    gener->SetPtKick(0.);
01137       //   Structure function
01138       gener->SetStrucFunc(kCTEQ4L);
01139       gener->SetPtHard(29., 35.);// Pt transfer of the hard scattering
01140       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01141       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01142       gGener=gener;
01143     }
01144     break;
01145   case kPythia6Jets35_42:
01146     {
01147       comment = comment.Append(":Pythia jets 35-42 GeV @ 5.5 TeV");
01148       AliGenPythia * gener = new AliGenPythia(-1);
01149       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01150       gener->SetProcess(kPyJets);//        Process type
01151       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01152       gener->SetJetPhiRange(0., 360.);
01153       gener->SetJetEtRange(10., 1000.);
01154       gener->SetGluonRadiation(1,1);
01155       //    gener->SetPtKick(0.);
01156       //   Structure function
01157       gener->SetStrucFunc(kCTEQ4L);
01158       gener->SetPtHard(35., 42.);// Pt transfer of the hard scattering
01159       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01160       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01161       gGener=gener;
01162     }
01163     break;
01164   case kPythia6Jets42_50:
01165     {
01166       comment = comment.Append(":Pythia jets 42-50 GeV @ 5.5 TeV");
01167       AliGenPythia * gener = new AliGenPythia(-1);
01168       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01169       gener->SetProcess(kPyJets);//        Process type
01170       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01171       gener->SetJetPhiRange(0., 360.);
01172       gener->SetJetEtRange(10., 1000.);
01173       gener->SetGluonRadiation(1,1);
01174       //    gener->SetPtKick(0.);
01175       //   Structure function
01176       gener->SetStrucFunc(kCTEQ4L);
01177       gener->SetPtHard(42., 50.);// Pt transfer of the hard scattering
01178       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01179       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01180       gGener=gener;
01181     }
01182     break;
01183   case kPythia6Jets50_60:
01184     {
01185       comment = comment.Append(":Pythia jets 50-60 GeV @ 5.5 TeV");
01186       AliGenPythia * gener = new AliGenPythia(-1);
01187       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01188       gener->SetProcess(kPyJets);//        Process type
01189       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01190       gener->SetJetPhiRange(0., 360.);
01191       gener->SetJetEtRange(10., 1000.);
01192       gener->SetGluonRadiation(1,1);
01193       //    gener->SetPtKick(0.);
01194       //   Structure function
01195       gener->SetStrucFunc(kCTEQ4L);
01196       gener->SetPtHard(50., 60.);// Pt transfer of the hard scattering
01197       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01198       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01199       gGener=gener;
01200     }
01201     break;
01202   case kPythia6Jets60_72:
01203     {
01204       comment = comment.Append(":Pythia jets 60-72 GeV @ 5.5 TeV");
01205       AliGenPythia * gener = new AliGenPythia(-1);
01206       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01207       gener->SetProcess(kPyJets);//        Process type
01208       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01209       gener->SetJetPhiRange(0., 360.);
01210       gener->SetJetEtRange(10., 1000.);
01211       gener->SetGluonRadiation(1,1);
01212       //    gener->SetPtKick(0.);
01213       //   Structure function
01214       gener->SetStrucFunc(kCTEQ4L);
01215       gener->SetPtHard(60., 72.);// Pt transfer of the hard scattering
01216       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01217       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01218       gGener=gener;
01219     }
01220     break;
01221   case kPythia6Jets72_86:
01222     {
01223       comment = comment.Append(":Pythia jets 72-86 GeV @ 5.5 TeV");
01224       AliGenPythia * gener = new AliGenPythia(-1);
01225       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01226       gener->SetProcess(kPyJets);//        Process type
01227       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01228       gener->SetJetPhiRange(0., 360.);
01229       gener->SetJetEtRange(10., 1000.);
01230       gener->SetGluonRadiation(1,1);
01231       //    gener->SetPtKick(0.);
01232       //   Structure function
01233       gener->SetStrucFunc(kCTEQ4L);
01234       gener->SetPtHard(72., 86.);// Pt transfer of the hard scattering
01235       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01236       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01237       gGener=gener;
01238     }
01239     break;
01240   case kPythia6Jets86_104:
01241     {
01242       comment = comment.Append(":Pythia jets 86-104 GeV @ 5.5 TeV");
01243       AliGenPythia * gener = new AliGenPythia(-1);
01244       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01245       gener->SetProcess(kPyJets);//        Process type
01246       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01247       gener->SetJetPhiRange(0., 360.);
01248       gener->SetJetEtRange(10., 1000.);
01249       gener->SetGluonRadiation(1,1);
01250       //    gener->SetPtKick(0.);
01251       //   Structure function
01252       gener->SetStrucFunc(kCTEQ4L);
01253       gener->SetPtHard(86., 104.);// Pt transfer of the hard scattering
01254       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01255       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01256       gGener=gener;
01257     }
01258     break;
01259   case kPythia6Jets104_125:
01260     {
01261       comment = comment.Append(":Pythia jets 105-125 GeV @ 5.5 TeV");
01262       AliGenPythia * gener = new AliGenPythia(-1);
01263       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01264       gener->SetProcess(kPyJets);//        Process type
01265       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01266       gener->SetJetPhiRange(0., 360.);
01267       gener->SetJetEtRange(10., 1000.);
01268       gener->SetGluonRadiation(1,1);
01269       //    gener->SetPtKick(0.);
01270       //   Structure function
01271       gener->SetStrucFunc(kCTEQ4L);
01272       gener->SetPtHard(104., 125.);// Pt transfer of the hard scattering
01273       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01274       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01275       gGener=gener;
01276     }
01277     break;
01278   case kPythia6Jets125_150:
01279     {
01280       comment = comment.Append(":Pythia jets 125-150 GeV @ 5.5 TeV");
01281       AliGenPythia * gener = new AliGenPythia(-1);
01282       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01283       gener->SetProcess(kPyJets);//        Process type
01284       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01285       gener->SetJetPhiRange(0., 360.);
01286       gener->SetJetEtRange(10., 1000.);
01287       gener->SetGluonRadiation(1,1);
01288       //    gener->SetPtKick(0.);
01289       //   Structure function
01290       gener->SetStrucFunc(kCTEQ4L);
01291       gener->SetPtHard(125., 150.);// Pt transfer of the hard scattering
01292       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01293       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01294       gGener=gener;
01295     }
01296     break;
01297   case kPythia6Jets150_180:
01298     {
01299       comment = comment.Append(":Pythia jets 150-180 GeV @ 5.5 TeV");
01300       AliGenPythia * gener = new AliGenPythia(-1);
01301       gener->SetEnergyCMS(5500.);//        Centre of mass energy
01302       gener->SetProcess(kPyJets);//        Process type
01303       gener->SetJetEtaRange(-0.5, 0.5);//  Final state kinematic cuts
01304       gener->SetJetPhiRange(0., 360.);
01305       gener->SetJetEtRange(10., 1000.);
01306       gener->SetGluonRadiation(1,1);
01307       //    gener->SetPtKick(0.);
01308       //   Structure function
01309       gener->SetStrucFunc(kCTEQ4L);
01310       gener->SetPtHard(150., 180.);// Pt transfer of the hard scattering
01311       gener->SetPycellParameters(2., 274, 432, 0., 4., 5., 1.0);
01312       gener->SetForceDecay(kAll);//  Decay type (semielectronic, etc.)
01313       gGener=gener;
01314     }
01315     break;
01316   case kD0PbPb5500:
01317     {
01318       comment = comment.Append(" D0 in Pb-Pb at 5.5 TeV");
01319       AliGenPythia * gener = new AliGenPythia(10);
01320       gener->SetProcess(kPyD0PbPbMNR);
01321       gener->SetStrucFunc(kCTEQ4L);
01322       gener->SetPtHard(2.1,-1.0);
01323       gener->SetEnergyCMS(5500.);
01324       gener->SetNuclei(208,208);
01325       gener->SetForceDecay(kHadronicD);
01326       gener->SetYRange(-2,2);
01327       gener->SetFeedDownHigherFamily(kFALSE);
01328       gener->SetStackFillOpt(AliGenPythia::kParentSelection);
01329       gener->SetCountMode(AliGenPythia::kCountParents);
01330       gGener=gener;
01331     }
01332     break;
01333   case kCharmSemiElPbPb5500:
01334     {
01335       comment = comment.Append(" Charm in Pb-Pb at 5.5 TeV");
01336       AliGenPythia * gener = new AliGenPythia(10);
01337       gener->SetProcess(kPyCharmPbPbMNR);
01338       gener->SetStrucFunc(kCTEQ4L);
01339       gener->SetPtHard(2.1,-1.0);
01340       gener->SetEnergyCMS(5500.);
01341       gener->SetNuclei(208,208);
01342       gener->SetForceDecay(kSemiElectronic);
01343       gener->SetYRange(-2,2);
01344       gener->SetFeedDownHigherFamily(kFALSE);
01345       gener->SetCountMode(AliGenPythia::kCountParents);
01346       gGener=gener;
01347     }
01348     break;
01349   case kBeautySemiElPbPb5500:
01350     {
01351       comment = comment.Append(" Beauty in Pb-Pb at 5.5 TeV");
01352       AliGenPythia *gener = new AliGenPythia(10);
01353       gener->SetProcess(kPyBeautyPbPbMNR);
01354       gener->SetStrucFunc(kCTEQ4L);
01355       gener->SetPtHard(2.75,-1.0);
01356       gener->SetEnergyCMS(5500.);
01357       gener->SetNuclei(208,208);
01358       gener->SetForceDecay(kSemiElectronic);
01359       gener->SetYRange(-2,2);
01360       gener->SetFeedDownHigherFamily(kFALSE);
01361       gener->SetCountMode(AliGenPythia::kCountParents);
01362       gGener=gener;
01363     }
01364     break;
01365   case kCocktailTRD:
01366     {
01367       comment = comment.Append(" Cocktail for TRD at 5.5 TeV");
01368       AliGenCocktail *gener  = new AliGenCocktail();
01369 
01370       AliGenParam *jpsi = new AliGenParam(10,
01371                                           new AliGenMUONlib(),
01372                                           AliGenMUONlib::kJpsiFamily,
01373                                           "Vogt PbPb");
01374 
01375       jpsi->SetPtRange(0, 100);
01376       jpsi->SetYRange(-1., +1.);
01377       jpsi->SetForceDecay(kDiElectron);
01378 
01379       AliGenParam *ups = new AliGenParam(10,
01380                                          new AliGenMUONlib(),
01381                                          AliGenMUONlib::kUpsilonFamily,
01382                                          "Vogt PbPb");
01383       ups->SetPtRange(0, 100);
01384       ups->SetYRange(-1., +1.);
01385       ups->SetForceDecay(kDiElectron);
01386         
01387       AliGenParam *charm = new AliGenParam(10,
01388                                            new AliGenMUONlib(), 
01389                                            AliGenMUONlib::kCharm,
01390                                            "central");
01391       charm->SetPtRange(0, 100);
01392       charm->SetYRange(-1.5, +1.5);
01393       charm->SetForceDecay(kSemiElectronic);
01394         
01395         
01396       AliGenParam *beauty = new AliGenParam(10,
01397                                             new AliGenMUONlib(), 
01398                                             AliGenMUONlib::kBeauty,
01399                                             "central");
01400       beauty->SetPtRange(0, 100);
01401       beauty->SetYRange(-1.5, +1.5);
01402       beauty->SetForceDecay(kSemiElectronic);
01403 
01404       gener->AddGenerator(jpsi,"J/psi",1);
01405       gener->AddGenerator(ups,"Upsilon",1);
01406       gener->AddGenerator(charm,"Charm",1);
01407       gener->AddGenerator(beauty,"Beauty",1);
01408       gGener=gener;
01409     }
01410     break;
01411   case kPyJJ:
01412     {
01413       comment = comment.Append(" Jet-jet at 5.5 TeV");
01414       AliGenPythia *gener = new AliGenPythia(-1);
01415       gener->SetEnergyCMS(5500.);
01416       gener->SetProcess(kPyJets);
01417       Double_t ptHardMin=10.0, ptHardMax=-1.0;
01418       gener->SetPtHard(ptHardMin,ptHardMax);
01419       gener->SetYHard(-0.7,0.7);
01420       gener->SetJetEtaRange(-0.2,0.2);
01421       gener->SetEventListRange(0,1);
01422       gGener=gener;
01423     }
01424     break;
01425   case kPyGJ:
01426     {
01427       comment = comment.Append(" Gamma-jet at 5.5 TeV");
01428       AliGenPythia *gener = new AliGenPythia(-1);
01429       gener->SetEnergyCMS(5500.);
01430       gener->SetProcess(kPyDirectGamma);
01431       Double_t ptHardMin=10.0, ptHardMax=-1.0;
01432       gener->SetPtHard(ptHardMin,ptHardMax);
01433       gener->SetYHard(-1.0,1.0);
01434       gener->SetGammaEtaRange(-0.13,0.13);
01435       gener->SetGammaPhiRange(210.,330.);
01436       gener->SetEventListRange(0,1);
01437       gGener=gener;
01438     }
01439     break;
01440   case kMuonCocktailCent1:
01441     {
01442       comment = comment.Append(" Muon Cocktail Cent1");
01443       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01444       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01445       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01446       gener->SetYRange(-4.0,-2.4);
01447       gener->SetMuonPtCut(0.8);
01448       gener->SetMuonThetaCut(171.,178.);
01449       gener->SetMuonMultiplicity(2);
01450       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
01451       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
01452       gGener=gener;
01453     }
01454     break;
01455   case kMuonCocktailPer1:
01456     {
01457       comment = comment.Append(" Muon Cocktail Per1");
01458       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01459       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01460       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01461       gener->SetYRange(-4.0,-2.4);
01462       gener->SetMuonPtCut(0.8);
01463       gener->SetMuonThetaCut(171.,178.);
01464       gener->SetMuonMultiplicity(2);
01465       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
01466       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
01467       gGener=gener;
01468     }
01469     break;
01470   case kMuonCocktailPer4:
01471     {
01472       comment = comment.Append(" Muon Cocktail Per4");
01473       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01474       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01475       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01476       gener->SetYRange(-4.0,-2.4);
01477       gener->SetMuonPtCut(0.8);
01478       gener->SetMuonThetaCut(171.,178.);
01479       gener->SetMuonMultiplicity(2);
01480       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
01481       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
01482       gGener=gener;
01483     }
01484     break;
01485   case kMuonCocktailCent1HighPt:
01486     {
01487       comment = comment.Append(" Muon Cocktail HighPt Cent1");
01488       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01489       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01490       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01491       gener->SetYRange(-4.0,-2.4);
01492       gener->SetMuonPtCut(2.5);
01493       gener->SetMuonThetaCut(171.,178.);
01494       gener->SetMuonMultiplicity(2);
01495       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
01496       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
01497       gGener=gener;
01498     }
01499     break;
01500   case kMuonCocktailPer1HighPt :
01501     {
01502       comment = comment.Append(" Muon Cocktail HighPt Per1");
01503       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01504       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01505       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01506       gener->SetYRange(-4.0,-2.4);
01507       gener->SetMuonPtCut(2.5);
01508       gener->SetMuonThetaCut(171.,178.);
01509       gener->SetMuonMultiplicity(2);
01510       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
01511       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
01512       gGener=gener;
01513     }
01514     break;
01515   case kMuonCocktailPer4HighPt:
01516     {
01517       comment = comment.Append(" Muon Cocktail HighPt Per4");
01518       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01519       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01520       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01521       gener->SetYRange(-4.0,-2.4);
01522       gener->SetMuonPtCut(2.5);
01523       gener->SetMuonThetaCut(171.,178.);
01524       gener->SetMuonMultiplicity(2);
01525       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
01526       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
01527       gGener=gener;
01528     }
01529     break;
01530   case kMuonCocktailCent1Single:
01531     {
01532       comment = comment.Append(" Muon Cocktail Single Cent1");
01533       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01534       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01535       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01536       gener->SetYRange(-4.0,-2.4);
01537       gener->SetMuonPtCut(0.8);
01538       gener->SetMuonThetaCut(171.,178.);
01539       gener->SetMuonMultiplicity(1);
01540       gener->SetNumberOfCollisions(1626.);  //Centrality class Cent1 for PDC04
01541       gener->SetNumberOfParticipants(359.4);//Centrality class Cent1 for PDC04
01542       gGener=gener;
01543     }
01544     break;
01545   case kMuonCocktailPer1Single :
01546     {
01547       comment = comment.Append(" Muon Cocktail Single Per1");
01548       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01549       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01550       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01551       gener->SetYRange(-4.0,-2.4);
01552       gener->SetMuonPtCut(0.8);
01553       gener->SetMuonThetaCut(171.,178.);
01554       gener->SetMuonMultiplicity(1);
01555       gener->SetNumberOfCollisions(820.0);//Centrality class Per1 for PDC04
01556       gener->SetNumberOfParticipants(229.3);//Centrality class Per1 for PDC04
01557       gGener=gener;
01558     }
01559     break;
01560   case kMuonCocktailPer4Single:
01561     {
01562       comment = comment.Append(" Muon Cocktail Single Per4");
01563       AliGenMUONCocktail * gener = new AliGenMUONCocktail();
01564       gener->SetPtRange(1.0,100.);       // Transverse momentum range   
01565       gener->SetPhiRange(0.,360.);    // Azimuthal angle range  
01566       gener->SetYRange(-4.0,-2.4);
01567       gener->SetMuonPtCut(0.8);
01568       gener->SetMuonThetaCut(171.,178.);
01569       gener->SetMuonMultiplicity(1);
01570       gener->SetNumberOfCollisions(13.6);//Centrality class Per4 for PDC04
01571       gener->SetNumberOfParticipants(13.3);//Centrality class Per4 for PDC04
01572       gGener=gener;
01573     }
01574     break;
01575   case kFMD1Flat: 
01576     {
01577       comment = comment.Append(" Flat in FMD1 range");
01578       AliGenBox* gener = new AliGenBox(2000);
01579       gener->SetPart(211);
01580       gener->SetMomentumRange(3,4);
01581       gener->SetPhiRange(0, 360);
01582       gener->SetThetaRange(0.77, 3.08);
01583       gGener = gener;
01584     }
01585     break;
01586   case kFMD2Flat: 
01587     {
01588       comment = comment.Append(" Flat in FMD2 range");
01589       AliGenBox* gener = new AliGenBox(2000);
01590       gener->SetPart(211);
01591       gener->SetMomentumRange(3,4);
01592       gener->SetPhiRange(0, 360);
01593       gener->SetThetaRange(2.95, 20.42);
01594       gGener = gener;
01595     }
01596     break;
01597   case kFMD3Flat: 
01598     {
01599       comment = comment.Append(" Flat in FMD3 range");
01600       AliGenBox* gener = new AliGenBox(2000);
01601       gener->SetPart(211);
01602       gener->SetMomentumRange(3,4);
01603       gener->SetPhiRange(0, 360);
01604       gener->SetThetaRange(155.97, 176.73);
01605       gGener = gener;
01606     }
01607     break;
01608   case kFMDFlat:
01609     {
01610       comment = comment.Append(" Flat in FMD range");
01611       AliGenCocktail* gener = AliGenCocktail("FMD cocktail");
01612       gener->SetPart(211);
01613       gener->SetMomentumRange(3,4);
01614       gener->SetPhiRange(0, 360);
01615       AliGenBox* gener3 = new AliGenBox(2000);
01616       gener3->SetThetaRange(155.97, 176.73);
01617       gener->AddGenerator(gener3, "FMD3", .33);
01618       AliGenBox* gener2 = new AliGenBox(2000);
01619       gener2->SetThetaRange(2.95, 20.42);
01620       gener->AddGenerator(gener2, "FMD2", .33);
01621       AliGenBox* gener1 = new AliGenBox(2000);
01622       gener1->SetThetaRange(0.77, 3.08);
01623       gener->AddGenerator(gener1, "FMD1", .34);
01624       gGener = gener;
01625     }
01626     break;
01627     
01628   default: break;
01629   }
01630   return gGener;
01631 }
01632 
01633 //____________________________________________________________________
01634 AliGenHijing* 
01635 HijingStandard()
01636 {
01637   AliGenHijing *gener = new AliGenHijing(-1);
01638   // centre of mass energy 
01639   gener->SetEnergyCMS(5500.);
01640   // reference frame
01641   gener->SetReferenceFrame("CMS");
01642   // projectile
01643   gener->SetProjectile("A", 208, 82);
01644   gener->SetTarget    ("A", 208, 82);
01645   // tell hijing to keep the full parent child chain
01646   gener->KeepFullEvent();
01647   // enable jet quenching
01648   gener->SetJetQuenching(1);
01649   // enable shadowing
01650   gener->SetShadowing(1);
01651   // neutral pion and heavy particle decays switched off
01652   gener->SetDecaysOff(1);
01653   // Don't track spectators
01654   gener->SetSpectators(0);
01655   // kinematic selection
01656   gener->SetSelectAll(0);
01657   return gener;
01658 }
01659 
01660 
01661 //____________________________________________________________________
01662 void 
01663 ProcessEnvironmentVars(EG_t& eg, Int_t& seed)
01664 {
01665   // Run type
01666   if (gSystem->Getenv("CONFIG_RUN_TYPE")) {
01667     Int_t eg1 = LookupEG(gSystem->Getenv("CONFIG_RUN_TYPE"));
01668     if  (eg1 >= 0) eg = EG_t(eg1);
01669   }
01670   // Random Number seed
01671   if (gSystem->Getenv("CONFIG_SEED")) {
01672     seed = atoi(gSystem->Getenv("CONFIG_SEED"));
01673   }
01674 }
01675 
01676 //____________________________________________________________________
01677 //
01678 // EOF
01679 // 

Generated on Fri Mar 24 17:11:21 2006 for ALICE FMD Off-line by  doxygen 1.4.6