2 // Configuration file for generating 2015 geometry
5 // To use this macro in compiled mode one first would need to do:
6 // root [0] gSystem->Load("libgeant321");
7 // root [1] gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include -Igeant3_src/TGeant3");
9 // However it is meant to be called in the following sequence:
10 // root [0] AliCDBManager* cdb = AliCDBManager::Instance();
11 // root [0] cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
12 // root [0] cdb->SetRun(200000);
13 // root [0] gROOT->LoadMacro("ConfigRaw2015.C");
14 // root [0] gInterpreter->ProcessLine(gAlice->GetConfigFunction());
15 // root [0] gAlice->GetMCApp()->Init();
17 #if !defined(__CINT__) || defined(__MAKECINT__)
18 #include <Riostream.h>
22 #include <TVirtualMC.h>
23 #include <TGeoGlobalMagField.h>
24 #include <TGeant3TGeo.h>
25 #include "STEER/STEER/AliRunLoader.h"
26 #include "STEER/STEER/AliRun.h"
27 #include "STEER/STEER/AliConfig.h"
28 #include "STEER/STEER/AliSimulation.h"
29 #include "PYTHIA6/AliPythia6/AliDecayerPythia.h"
30 #include "PYTHIA6/AliPythia6/AliGenPythia.h"
31 #include "TDPMjet/AliGenDPMjet.h"
32 #include "STEER/STEERBase/AliMagF.h"
33 #include "STRUCT/AliBODY.h"
34 #include "STRUCT/AliMAG.h"
35 #include "STRUCT/AliABSOv3.h"
36 #include "STRUCT/AliDIPOv3.h"
37 #include "STRUCT/AliHALLv3.h"
38 #include "STRUCT/AliFRAMEv2.h"
39 #include "STRUCT/AliSHILv3.h"
40 #include "STRUCT/AliPIPEv3.h"
41 #include "ITS/ITSsim/AliITSv11.h"
42 #include "TPC/TPCsim/AliTPCv2.h"
43 #include "TOF/TOFsim/AliTOFv6T0.h"
44 #include "HMPID/HMPIDsim/AliHMPIDv3.h"
45 #include "ZDC/ZDCsim/AliZDCv4.h"
46 #include "TRD/TRDsim/AliTRDv1.h"
47 #include "TRD/TRDbase/AliTRDgeometry.h"
48 #include "FMD/FMDsim/AliFMDv1.h"
49 #include "MUON/MUONsim/AliMUONv1.h"
50 #include "PHOS/PHOSsim/AliPHOSv1.h"
51 #include "PHOS/PHOSbase/AliPHOSSimParam.h"
52 #include "PMD/PMDsim/AliPMDv1.h"
53 #include "T0/T0sim/AliT0v1.h"
54 #include "EMCAL/EMCALsim/AliEMCALv2.h"
55 #include "ACORDE/ACORDEsim/AliACORDEv1.h"
56 #include "VZERO/VZEROsim/AliVZEROv7.h"
57 #include "AD/ADsim/AliADv1.h"
62 kPythia6, kPythia6D6T, kPhojet, kRunMax
65 const char * pprRunName[] = {
66 "kPythia6", "kPythia6D6T", "kPhojet"
71 kNoField, k5kG, kFieldMax
74 const char * pprField[] = {
80 AliGenerator *MbPythia();
81 AliGenerator *MbPythiaTuneD6T();
82 AliGenerator *MbPhojet();
83 void ProcessEnvironmentVars();
85 // Geterator, field, beam energy
86 static PDC06Proc_t proc = kPhojet;
87 static Mag_t mag = k5kG;
88 static Float_t energy = 10000; // energy in CMS
89 //========================//
90 // Set Random Number seed //
91 //========================//
93 static UInt_t seed = dt.Get();
96 static TString comment;
102 // Get settings from environment variables
103 ProcessEnvironmentVars();
105 gRandom->SetSeed(seed);
106 cerr<<"Seed for random number generation= "<<seed<<endl;
108 // Libraries required by geant321
109 #if defined(__CINT__)
110 gSystem->Load("liblhapdf"); // Parton density functions
111 gSystem->Load("libEGPythia6"); // TGenerator interface
112 if (proc != kPythia6D6T) {
113 gSystem->Load("libpythia6"); // Pythia 6.2
115 gSystem->Load("libqpythia"); // Pythia 6.4
117 gSystem->Load("libAliPythia6"); // ALICE specific implementations
118 gSystem->Load("libgeant321");
121 new TGeant3TGeo("C++ Interface to Geant3");
123 //=======================================================================
124 // Create the output file
127 AliRunLoader* rl=0x0;
129 cout<<"Config.C: Creating Run Loader ..."<<endl;
130 rl = AliRunLoader::Open("galice.root",
131 AliConfig::GetDefaultEventFolderName(),
135 gAlice->Fatal("Config.C","Can not instatiate the Run Loader");
138 rl->SetCompressionLevel(2);
139 rl->SetNumberOfEventsPerFile(1000);
140 gAlice->SetRunLoader(rl);
141 // gAlice->SetGeometryFromFile("geometry.root");
142 // gAlice->SetGeometryFromCDB();
144 // Set the trigger configuration: proton-proton
145 AliSimulation::Instance()->SetTriggerConfig("p-p");
148 //=======================================================================
149 // ************* STEERING parameters FOR ALICE SIMULATION **************
150 // --- Specify event type to be tracked through the ALICE setup
151 // --- All positions are in cm, angles in degrees, and P and E in GeV
154 gMC->SetProcess("DCAY",1);
155 gMC->SetProcess("PAIR",1);
156 gMC->SetProcess("COMP",1);
157 gMC->SetProcess("PHOT",1);
158 gMC->SetProcess("PFIS",0);
159 gMC->SetProcess("DRAY",0);
160 gMC->SetProcess("ANNI",1);
161 gMC->SetProcess("BREM",1);
162 gMC->SetProcess("MUNU",1);
163 gMC->SetProcess("CKOV",1);
164 gMC->SetProcess("HADR",1);
165 gMC->SetProcess("LOSS",2);
166 gMC->SetProcess("MULS",1);
167 gMC->SetProcess("RAYL",1);
169 Float_t cut = 1.e-3; // 1MeV cut by default
170 Float_t tofmax = 1.e10;
172 gMC->SetCut("CUTGAM", cut);
173 gMC->SetCut("CUTELE", cut);
174 gMC->SetCut("CUTNEU", cut);
175 gMC->SetCut("CUTHAD", cut);
176 gMC->SetCut("CUTMUO", cut);
177 gMC->SetCut("BCUTE", cut);
178 gMC->SetCut("BCUTM", cut);
179 gMC->SetCut("DCUTE", cut);
180 gMC->SetCut("DCUTM", cut);
181 gMC->SetCut("PPCUTM", cut);
182 gMC->SetCut("TOFMAX", tofmax);
187 //======================//
188 // Set External decayer //
189 //======================//
190 TVirtualMCDecayer* decayer = new AliDecayerPythia();
191 decayer->SetForceDecay(kAll);
193 gMC->SetExternalDecayer(decayer);
195 //=========================//
196 // Generator Configuration //
197 //=========================//
198 AliGenerator* gener = 0x0;
200 if (proc == kPythia6) {
202 } else if (proc == kPythia6D6T) {
203 gener = MbPythiaTuneD6T();
204 } else if (proc == kPhojet) {
212 gener->SetOrigin(0., 0., 0.); // vertex position
215 // Size of the interaction diamond
217 Float_t sigmaz = 5.4 / TMath::Sqrt(2.); // [cm]
219 sigmaz = 10.5 / TMath::Sqrt(2.); // [cm]
222 Float_t betast = 10; // beta* [m]
223 Float_t eps = 3.75e-6; // emittance [m]
224 Float_t gamma = energy / 2.0 / 0.938272; // relativistic gamma [1]
225 Float_t sigmaxy = TMath::Sqrt(eps * betast / gamma) / TMath::Sqrt(2.) * 100.; // [cm]
226 printf("\n \n Diamond size x-y: %10.3e z: %10.3e\n \n", sigmaxy, sigmaz);
228 gener->SetSigma(sigmaxy, sigmaxy, sigmaz); // Sigma in (X,Y,Z) (cm) on IP position
229 gener->SetCutVertexZ(3.); // Truncate at 3 sigma
230 gener->SetVertexSmear(kPerEvent);
236 AliMagF* field = 0x0;
237 if (mag == kNoField) {
238 comment = comment.Append(" | L3 field 0.0 T");
239 field = new AliMagF("Maps","Maps", 0., 0., AliMagF::k5kGUniform,AliMagF::kBeamTypepp, energy/2.0);
240 } else if (mag == k5kG) {
241 comment = comment.Append(" | L3 field 0.5 T");
242 field = new AliMagF("Maps","Maps", -1., -1., AliMagF::k5kG, AliMagF::kBeamTypepp, energy/2.0);
244 printf("\n \n Comment: %s \n \n", comment.Data());
246 TGeoGlobalMagField::Instance()->SetField(field);
274 //=================== Alice BODY parameters =============================
275 AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
280 //=================== MAG parameters ============================
281 // --- Start with Magnet since detector layouts may be depending ---
282 // --- on the selected Magnet dimensions ---
283 AliMAG *MAG = new AliMAG("MAG", "Magnet");
289 //=================== ABSO parameters ============================
290 AliABSO *ABSO = new AliABSOv3("ABSO", "Muon Absorber");
295 //=================== DIPO parameters ============================
297 AliDIPO *DIPO = new AliDIPOv3("DIPO", "Dipole version 3");
302 //=================== HALL parameters ============================
304 AliHALL *HALL = new AliHALLv3("HALL", "Alice Hall");
310 //=================== FRAME parameters ============================
312 AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
318 //=================== SHIL parameters ============================
320 AliSHIL *SHIL = new AliSHILv3("SHIL", "Shielding Version 3");
326 //=================== PIPE parameters ============================
328 AliPIPE *PIPE = new AliPIPEv3("PIPE", "Beam Pipe");
333 //=================== ITS parameters ============================
335 AliITS *ITS = new AliITSv11("ITS","ITS v11");
340 //============================ TPC parameters =====================
342 AliTPC *TPC = new AliTPCv2("TPC", "Ne-CO2");
347 //=================== TOF parameters ============================
349 AliTOF *TOF = new AliTOFv6T0("TOF", "normal TOF");
355 //=================== HMPID parameters ===========================
357 AliHMPID *HMPID = new AliHMPIDv3("HMPID", "normal HMPID");
364 //=================== ZDC parameters ============================
366 AliZDC *ZDC = new AliZDCv4("ZDC", "normal ZDC");
371 //=================== TRD parameters ============================
373 AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator");
374 // SM indexing starts at 3h in positive direction. We assume all SM
375 // are installed (i.e. all SM missing last year: 4, 5, 12, 13, 14)
376 // AliTRDgeometry *geoTRD = TRD->GetGeometry();
377 // geoTRD->SetSMstatus(4,0);
382 //=================== FMD parameters ============================
384 AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
389 //=================== MUON parameters ===========================
390 // New MUONv1 version (geometry defined via builders)
392 AliMUON *MUON = new AliMUONv1("MUON", "default");
397 //=================== PHOS parameters ===========================
399 AliPHOS *PHOS = new AliPHOSv1("PHOS", "Modules1234");
405 //=================== PMD parameters ============================
407 AliPMD *PMD = new AliPMDv1("PMD", "normal PMD");
412 //=================== T0 parameters ============================
413 AliT0 *T0 = new AliT0v1("T0", "T0 Detector");
418 //=================== EMCAL parameters ============================
420 AliEMCAL* EMCAL = new AliEMCALv2("EMCAL", "EMCAL_COMPLETE12SMV1_DCAL_8SM", kFALSE);
425 //=================== ACORDE parameters ============================
427 AliACORDE *ACORDE = new AliACORDEv1("ACORDE", "normal ACORDE");
432 //=================== VZERO parameters ============================
434 AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO");
439 //=================== AD parameters ============================
441 AliAD *AD = new AliADv1("AD", "The AD geometry");
448 AliGenerator* MbPythia()
450 comment = comment.Append(" pp at 14 TeV: Pythia low-pt");
453 AliGenPythia* pythia = new AliGenPythia(-1);
454 pythia->SetMomentumRange(0, 999999.);
455 pythia->SetThetaRange(0., 180.);
456 pythia->SetYRange(-12.,12.);
457 pythia->SetPtRange(0,1000.);
458 pythia->SetProcess(kPyMb);
459 pythia->SetEnergyCMS(energy);
464 AliGenerator* MbPythiaTuneD6T()
466 comment = comment.Append(" pp at 14 TeV: Pythia low-pt");
469 AliGenPythia* pythia = new AliGenPythia(-1);
470 pythia->SetMomentumRange(0, 999999.);
471 pythia->SetThetaRange(0., 180.);
472 pythia->SetYRange(-12.,12.);
473 pythia->SetPtRange(0,1000.);
474 pythia->SetProcess(kPyMb);
475 pythia->SetEnergyCMS(energy);
477 // 109 D6T : Rick Field's CDF Tune D6T (NB: needs CTEQ6L pdfs externally)
478 pythia->SetTune(109);
479 pythia->SetStrucFunc(kCTEQ6l);
484 AliGenerator* MbPhojet()
486 comment = comment.Append(" pp at 14 TeV: Pythia low-pt");
489 #if defined(__CINT__)
490 gSystem->Load("libdpmjet"); // Parton density functions
491 gSystem->Load("libTDPMjet"); // Parton density functions
493 AliGenDPMjet* dpmjet = new AliGenDPMjet(-1);
494 dpmjet->SetMomentumRange(0, 999999.);
495 dpmjet->SetThetaRange(0., 180.);
496 dpmjet->SetYRange(-12.,12.);
497 dpmjet->SetPtRange(0,1000.);
498 dpmjet->SetProcess(kDpmMb);
499 dpmjet->SetEnergyCMS(energy);
504 void ProcessEnvironmentVars()
507 if (gSystem->Getenv("CONFIG_RUN_TYPE")) {
508 for (Int_t iRun = 0; iRun < kRunMax; iRun++) {
509 if (strcmp(gSystem->Getenv("CONFIG_RUN_TYPE"), pprRunName[iRun])==0) {
510 proc = (PDC06Proc_t)iRun;
511 cout<<"Run type set to "<<pprRunName[iRun]<<endl;
517 if (gSystem->Getenv("CONFIG_FIELD")) {
518 for (Int_t iField = 0; iField < kFieldMax; iField++) {
519 if (strcmp(gSystem->Getenv("CONFIG_FIELD"), pprField[iField])==0) {
521 cout<<"Field set to "<<pprField[iField]<<endl;
527 if (gSystem->Getenv("CONFIG_ENERGY")) {
528 energy = atoi(gSystem->Getenv("CONFIG_ENERGY"));
529 cout<<"Energy set to "<<energy<<" GeV"<<endl;
532 // Random Number seed
533 if (gSystem->Getenv("CONFIG_SEED")) {
534 seed = atoi(gSystem->Getenv("CONFIG_SEED"));