changes in the MagF constructor
[u/mrichter/AliRoot.git] / prod / LHC09a15 / Config.C
1 // Config file MUON + ITS (for vertex) for PDC06\r
2 // Tuned for p+p min biais and quarkonia production (AliGenMUONCocktailpp)\r
3 // Remember to define the directory and option\r
4 // gAlice->SetConfigFunction("Config('$HOME','box');");\r
5 // april 3rd: added L3 magnet \r
6 \r
7 enum Run_t\r
8 {\r
9 \r
10   ppMBias, pptrg1mu, pptrg2mu, pptrg2muPolA, pptrg2muPolB, pptrg2muPolC, pptrg2muSecret, kRunMax\r
11   \r
12 };\r
13 \r
14 const char* runName[] = {\r
15   "ppMBias", "pptrg1mu", "pptrg2mu", "pptrg2muPolA", "pptrg2muPolB", "pptrg2muPolC", "pptrg2muSecret" \r
16 };\r
17 \r
18 static Run_t srun  = ppMBias;\r
19 static Int_t sseed = 12345;\r
20 \r
21 void Config()\r
22 {\r
23  \r
24   // Get settings from environment variables\r
25   ProcessEnvironmentVars();\r
26 \r
27   //=====================================================================\r
28   //  Libraries required by geant321\r
29   gSystem->Load("liblhapdf.so");      // Parton density functions\r
30   gSystem->Load("libpythia6.so");     // Pythia\r
31   gSystem->Load("libgeant321.so");\r
32   gSystem->Load("libEG");\r
33   gSystem->Load("libEGPythia6");\r
34   gSystem->Load("libAliPythia6.so");  // ALICE specific implementations\r
35   \r
36   new TGeant3TGeo("C++ Interface to Geant3");\r
37   \r
38   //  Create the output file    \r
39   AliRunLoader* rl=0x0;\r
40   rl = AliRunLoader::Open(\r
41         "galice.root", AliConfig::GetDefaultEventFolderName(), "recreate");\r
42   if (rl == 0x0) {\r
43     gAlice->Fatal("Config.C","Can not instatiate the Run Loader");\r
44     return;\r
45   }\r
46   rl->SetCompressionLevel(2);\r
47   rl->SetNumberOfEventsPerFile(500);\r
48   gAlice->SetRunLoader(rl);\r
49 \r
50   //=======================================================================\r
51   // Set External decayer\r
52   TVirtualMCDecayer *decayer = new AliDecayerPythia();\r
53   decayer->SetForceDecay(kAll);\r
54   decayer->Init();\r
55   gMC->SetExternalDecayer(decayer);\r
56 \r
57   //=======================================================================\r
58   // ******* GEANT STEERING parameters FOR ALICE SIMULATION *******\r
59     gMC->SetProcess("DCAY",1);\r
60     gMC->SetProcess("PAIR",1);\r
61     gMC->SetProcess("COMP",1);\r
62     gMC->SetProcess("PHOT",1);\r
63     gMC->SetProcess("PFIS",0);\r
64     gMC->SetProcess("DRAY",0);\r
65     gMC->SetProcess("ANNI",1);\r
66     gMC->SetProcess("BREM",1);\r
67     gMC->SetProcess("MUNU",1);\r
68     gMC->SetProcess("CKOV",1);\r
69     gMC->SetProcess("HADR",1);\r
70     gMC->SetProcess("LOSS",2);\r
71     gMC->SetProcess("MULS",1);\r
72     gMC->SetProcess("RAYL",1);\r
73 \r
74     Float_t cut = 1.e-3;        // 1MeV cut by default\r
75     Float_t tofmax = 1.e10;\r
76 \r
77     gMC->SetCut("CUTGAM", cut);\r
78     gMC->SetCut("CUTELE", cut);\r
79     gMC->SetCut("CUTNEU", cut);\r
80     gMC->SetCut("CUTHAD", cut);\r
81     gMC->SetCut("CUTMUO", cut);\r
82     gMC->SetCut("BCUTE",  cut); \r
83     gMC->SetCut("BCUTM",  cut); \r
84     gMC->SetCut("DCUTE",  cut); \r
85     gMC->SetCut("DCUTM",  cut); \r
86     gMC->SetCut("PPCUTM", cut);\r
87     gMC->SetCut("TOFMAX", tofmax); \r
88   //\r
89   //=======================================================================\r
90   // ************* STEERING parameters FOR ALICE SIMULATION **************\r
91   // Chamber positions\r
92   // From AliMUONConstants class we get :\r
93   //   Position Z (along beam) of the chambers (in cm) \r
94   //        (from AliMUONConstants class):  \r
95   //    533.5,  546.5,  678.5, 693.5,  964.0, 986.0, 1251.5, 1278.5, \r
96   //   1416.5, 1443.5,  1610, 1625.,  1710., 1725. \r
97   //   Internal Radius (in cm)   \r
98   //     36.4,  46.2,  66.0,  80.,  80., 100., 100.    \r
99   //   External Radius (in cm)\r
100   //    183.,  245.,  395.,  560., 563., 850., 900.  \r
101   //=======================================================================\r
102 \r
103     // The internal generator, for minimum bias\r
104   \r
105     AliGenMUONCocktailpp *gener = new AliGenMUONCocktailpp();\r
106     gener->SetPtRange(0.,1000.);\r
107     gener->SetYRange(-4.,-2.4);\r
108     gener->SetPhiRange(0., 360.);\r
109     gener->SetOrigin(0.,0.,0.); \r
110     gener->SetSigma(0.,0.,5.3);\r
111     gener->SetVertexSmear(kPerEvent);\r
112 \r
113     // Special generator trigger conditions, etc.\r
114 \r
115     switch(srun) {\r
116     case pptrg1mu:\r
117       {\r
118         gener->SetMuonMultiplicity(1);  \r
119         gener->SetMuonPtCut(0.5);\r
120         gener->SetMuonThetaRange(171.,178.);  \r
121       }\r
122       break;\r
123     case pptrg2mu:\r
124       {\r
125         gener->SetMuonMultiplicity(2);  \r
126         gener->SetMuonPtCut(0.5);\r
127         gener->SetMuonThetaRange(171.,178.);  \r
128       }\r
129       break;\r
130     case pptrg2muPolA:\r
131       {\r
132         gener->SetMuonMultiplicity(2);  \r
133         gener->SetMuonPtCut(0.5);\r
134         gener->SetMuonThetaRange(171.,178.);  \r
135         gener->SetResPolarization(0.3,0.3,0.,1.,0.,"kColSop");\r
136       }\r
137       break;\r
138     case pptrg2muPolB:\r
139       {\r
140         gener->SetMuonMultiplicity(2);  \r
141         gener->SetMuonPtCut(0.5);\r
142         gener->SetMuonThetaRange(171.,178.);  \r
143         gener->SetResPolarization(-0.3,-0.3,0.,1.,0.,"kColSop");\r
144       }\r
145       break;\r
146     case pptrg2muPolC:\r
147       {\r
148         gener->SetMuonMultiplicity(2);  \r
149         gener->SetMuonPtCut(0.5);\r
150         gener->SetMuonThetaRange(171.,178.);  \r
151         gener->SetResPolarization(0.,0.,0.,1.,0.,"kColSop");\r
152       }\r
153       break;\r
154     case pptrg2muSecret:\r
155       {\r
156         gener->SetMuonMultiplicity(2);  \r
157         gener->SetMuonPtCut(0.5);\r
158         gener->SetMuonThetaRange(171.,178.);  \r
159         gener->SetCMSEnergy(10);\r
160         gener->SetSigmaReaction(0.0695);\r
161         gener->SetSigmaJPsi(27.4e-6);\r
162         gener->SetSigmaPsiP(6.039e-6);\r
163         gener->SetSigmaUpsilon(0.855e-6);\r
164         gener->SetSigmaUpsilonP(0.218e-6);\r
165         gener->SetSigmaUpsilonPP(0.122e-6);\r
166         gener->SetSigmaCCbar(4.5e-3);\r
167         gener->SetSigmaBBbar(0.33e-3);\r
168         gener->SetSigmaSilent();\r
169       }\r
170       break;\r
171     default: break;\r
172     }\r
173 \r
174     gener->CreateCocktail();\r
175 \r
176     // The external generator\r
177 \r
178     AliGenPythia *pythia = new AliGenPythia(1);\r
179     pythia->SetProcess(kPyMb);\r
180     pythia->SetStrucFunc(kCTEQ5L);\r
181     pythia->SetEnergyCMS(10000.);\r
182     Decay_t dt = gener->GetDecayModePythia();\r
183     pythia->SetForceDecay(dt);\r
184     pythia->SetPtRange(0.,1000.);\r
185     pythia->SetYRange(-8.,8.);\r
186     pythia->SetPhiRange(0.,360.);\r
187     pythia->SetPtHard(2.76,-1.0);\r
188     pythia->SwitchHFOff();\r
189     pythia->Init();\r
190 \r
191     gener->AddGenerator(pythia,"Pythia",1);\r
192     gener->Init();\r
193     \r
194   //============================================================= \r
195   // Field (L3 0.5 T) outside dimuon spectrometer\r
196   AliMagF *field = new AliMagF("Maps","Maps", 0., 0., AliMagF::k5kG);\r
197   TGeoGlobalMagField::Instance()->SetField(field);\r
198 \r
199   Int_t iITS = 1;\r
200   Int_t iFMD = 1;\r
201   Int_t iVZERO = 1;\r
202   Int_t iZDC = 0;\r
203   Int_t iT0 = 0;\r
204 \r
205   rl->CdGAFile();\r
206 \r
207   //=================== Alice BODY parameters =============================\r
208   AliBODY *BODY = new AliBODY("BODY","Alice envelop");\r
209   //=================== ABSO parameters ============================\r
210   AliABSO *ABSO = new AliABSOv3("ABSO", "Muon Absorber");\r
211   //=================== DIPO parameters ============================\r
212   AliDIPO *DIPO = new AliDIPOv3("DIPO", "Dipole version 3");\r
213   //================== HALL parameters ============================\r
214   AliHALL *HALL = new AliHALLv3("HALL", "Alice Hall");\r
215   //================== The L3 Magnet ==============================\r
216   AliMAG *MAG = new AliMAG("MAG", "L3 Magnet");\r
217   //=================== PIPE parameters ============================\r
218   AliPIPE *PIPE = new AliPIPEv3("PIPE", "Beam Pipe");\r
219   //=================== SHIL parameters ============================\r
220   AliSHIL *SHIL = new AliSHILv3("SHIL", "Shielding Version 3");\r
221   //=================== ITS parameters =============================\r
222   if(iITS) {\r
223   AliITS *ITS  = new AliITSv11Hybrid("ITS","ITS v11Hybrid");\r
224   }\r
225   //=================== FMD parameters =============================\r
226   if(iFMD) {\r
227   AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");\r
228   }\r
229   //=================== VZERO parameters =============================\r
230   if (iVZERO) {\r
231   AliVZERO *VZERO = new AliVZEROv7("VZERO", "normal VZERO");\r
232   }\r
233   if (iZDC){\r
234   //=================== ZDC parameters ============================\r
235   AliZDC *ZDC = new AliZDCv3("ZDC", "normal ZDC");\r
236   }\r
237   if (iT0) {\r
238   //=================== T0 parameters ============================\r
239   AliT0 *T0 = new AliT0v1("T0", "T0 Detector");\r
240   }\r
241 \r
242 \r
243   //=================== MUON Subsystem ===========================\r
244   cout << ">>> Config.C: Creating AliMUONv1 ..."<<endl;\r
245 \r
246   AliMUON *MUON = new AliMUONv1("MUON","default");\r
247 }\r
248 \r
249 Float_t EtaToTheta(Float_t arg){\r
250   return (180./TMath::Pi())*2.*atan(exp(-arg));\r
251 }\r
252 \r
253 void ProcessEnvironmentVars()\r
254 {\r
255   // Run type\r
256   if (gSystem->Getenv("CONFIG_RUN_TYPE")) {\r
257     for (Int_t iRun = 0; iRun < kRunMax; iRun++) {\r
258       if (strcmp(gSystem->Getenv("CONFIG_RUN_TYPE"), runName[iRun])==0) {\r
259         srun = (Run_t)iRun;\r
260         cout<<"Run type set to "<<runName[iRun]<<endl;\r
261       }\r
262     }\r
263   }\r
264 }\r