ec7d65334cd17169eca2a5513853930a579d999c
[u/mrichter/AliRoot.git] / RICH / ConfigRich.C
1 Int_t   iRICH  =  3;//0-1-3
2
3 enum EGenTypes {kGun1,kGun7,kPP7};
4
5 static EGenTypes kGen=kGun1;
6 static Int_t kEventsPerFile=50;
7
8 Int_t   iPIPE  =  0;//central before RICH
9 Int_t   iITS   =  0;
10 Int_t   iTPC   =  0;
11 Int_t   iTRD   =  0;
12 Int_t   iTOF   =  0;
13 Int_t   iFRAME =  0;
14
15 Int_t   iMAG   =  0;//central after RICH
16 Int_t   iCRT   =  0;
17 Int_t   iHALL  =  0;
18
19 Int_t   iPHOS  =  0;
20
21 Int_t   iSTART =  0;//forward
22 Int_t   iFMD   =  0;
23 Int_t   iSHIL  =  0;
24 Int_t   iABSO  =  1;
25 Int_t   iPMD   =  0;
26 Int_t   iDIPO  =  0;
27 Int_t   iEMCAL =  0;
28 Int_t   iVZERO =  0;
29 Int_t   iMUON  =  0;
30 Int_t   iZDC   =  0;
31
32 AliRICH *gRICH;
33
34 void Config()
35 {   
36   ::Info("kir","Start RICH VERSION %i debug %i",iRICH,gAlice->GetDebug());
37   
38   int n,pid,chamber;
39   double p;
40   Geant3(); File(); Decayer(); Field(); Other();
41    
42   AliRICH *pRICH;
43   switch(iRICH){
44     case 0:
45       gRICH=new AliRICHv0("RICH","coarse RICH for material budget");
46       break;
47     case 1:
48       gRICH=new AliRICHv1("RICH","detailed RICH for full simulation");
49       break;
50     case 3:
51       gRICH=new AliRICHv3("RICH","old parametrised RICH with rotation");
52       break;
53   }   
54
55   switch(kGen){
56         case kPP7:          Pythia7(pid=kPiPlus,p=4);                break;
57         case kGun7:         Gun7(pid=kPiPlus,p=4);                   break;
58         case kGun1:         Gun1(n=1,pid=kPiPlus,p=4,chamber=4);     break;
59         default:            Fatal("Config","No generator");          break;
60   }  
61   ::Info("kir","Stop.");
62 }//void Config()
63
64 void Gun1(Int_t iNprim,Int_t iPID,Double_t p,Int_t iChamber)
65 {
66   ::Info("kir-Gun1","%i primaries of %i PID  with p=%f GeV",iNprim,iPID,p);
67    
68   AliGenFixed *pGen=new AliGenFixed(iNprim);
69   pGen->SetMomentum(p);
70   pGen->SetPhiRange(gRICH->C(iChamber)->PhiD());
71   pGen->SetThetaRange(gRICH->C(iChamber)->ThetaD()+2);
72   pGen->SetOrigin(0,0,0);                 
73   pGen->SetPart(iPID);    
74   pGen->Init();
75 }//Gun()     
76
77 void Para()
78 {
79   Int_t iNprim=85700;
80   ::Info("kir-Para","%i primaries",iNprim);
81    
82   AliGenHIJINGpara *pGen=new AliGenHIJINGpara(iNprim);
83   pGen->SetMomentumRange(0,999);                      //GeV
84   pGen->SetPhiRange(0,360);                           //degree
85   pGen->SetThetaRange(Eta2Theta(8),Eta2Theta(-8));    //degree  
86   pGen->SetOrigin(0,0,0);                             //IP, cm 
87   pGen->SetSigma(0,0,0);                              //IP sigma, cm
88   pGen->Init();
89 }
90
91
92 void Gun7(Int_t iPID,Double_t p)
93 {
94   ::Info("kir-Gun7","7 primaries of %i PID  with p=%f GeV",iPID,p);
95   AliGenCocktail *pCocktail=new AliGenCocktail();
96   for(int i=1;i<=7;i++){
97     AliGenFixed *pFixed=new AliGenFixed(1);
98     pFixed->SetMomentum(p);
99     pFixed->SetPhiRange(gRICH->C(i)->PhiD());
100     pFixed->SetThetaRange(gRICH->C(i)->ThetaD()+2);
101     pFixed->SetOrigin(0,0,0);                 
102     pFixed->SetPart(iPID);    
103     pCocktail->AddGenerator(pFixed,Form("Fixed %i",i),1);
104   }
105   pCocktail->Init();
106 }
107
108 void Pythia7(Int_t iPID,Double_t p)
109 {
110   ::Info("kir-Pythia","7 primaries of %i PID  with p=%f GeV plus Pythia",iPID,p);
111   AliGenCocktail *pCocktail=new AliGenCocktail();
112   for(int i=1;i<=7;i++){
113     AliGenFixed *pFixed=new AliGenFixed(1);
114     pFixed->SetMomentum(p);
115     pFixed->SetPhiRange(gRICH->C(i)->PhiD());
116     pFixed->SetThetaRange(gRICH->C(i)->ThetaD()+2);
117     pFixed->SetOrigin(0,0,0);                 
118     pFixed->SetPart(iPID);    
119     pCocktail->AddGenerator(pFixed,Form("Fixed %i",i),1);
120   }
121   
122   AliGenPythia *pPythia = new AliGenPythia(-1);
123   pPythia->SetMomentumRange(0,999999);
124   pPythia->SetPhiRange(0,360);
125   pPythia->SetThetaRange(0., 180.);
126   pPythia->SetYRange(-12,12);
127   pPythia->SetPtRange(0,1000);
128   pPythia->SetStrucFunc(kCTEQ4L);
129   pPythia->SetProcess(kPyMb);
130   pPythia->SetEnergyCMS(14000.);  
131     
132   pCocktail->AddGenerator(pPythia,"Pythia",1);  
133   pCocktail->Init();
134 }
135
136
137
138 void Scan()
139 {
140 }
141
142
143 void File()
144 {
145   ::Info("kir-File","Create galice.root, %i events per file",kEventsPerFile);
146
147   AliRunLoader *pRL = AliRunLoader::Open("galice.root",AliConfig::fgkDefaultEventFolderName,"recreate");
148   if(!pRL)
149     Fatal("my/AliceConfig.C::File","Can not instatiate the Run Loader");
150   
151   pRL->SetCompressionLevel(2);
152   pRL->SetNumberOfEventsPerFile(kEventsPerFile);
153   gAlice->SetRunLoader(pRL);
154 }
155
156 void Geant3()
157 {
158   ::Info("kir-Geant3","Initialize the actual MC code.");
159
160   gSystem->Load("libgeant321.so");   
161   new TGeant3("C++ Interface to Geant");
162 }//void Geant3()
163
164 void Decayer()
165 {
166   ::Info("kir-Decayer","Initialise external decayer.");
167   TVirtualMCDecayer *pDecayer = new AliDecayerPythia();
168   pDecayer->SetForceDecay(kAll);
169   pDecayer->Init();
170   gMC->SetExternalDecayer(pDecayer);
171
172   gMC->SetProcess("DCAY",1);
173   gMC->SetProcess("PAIR",1);
174   gMC->SetProcess("COMP",1);
175   gMC->SetProcess("PHOT",1);
176   gMC->SetProcess("PFIS",0);
177   gMC->SetProcess("DRAY",0);
178   gMC->SetProcess("ANNI",1);
179   gMC->SetProcess("BREM",1);
180   gMC->SetProcess("MUNU",1);
181   gMC->SetProcess("CKOV",1);
182   gMC->SetProcess("HADR",1);
183   gMC->SetProcess("LOSS",2);
184   gMC->SetProcess("MULS",1);
185   gMC->SetProcess("RAYL",1);
186
187   Float_t cut = 1.e-3;        // 1MeV cut by default
188   Float_t tofmax = 1.e10;
189
190   gMC->SetCut("CUTGAM", cut);
191   gMC->SetCut("CUTELE", cut);
192   gMC->SetCut("CUTNEU", cut);
193   gMC->SetCut("CUTHAD", cut);
194   gMC->SetCut("CUTMUO", cut);
195   gMC->SetCut("BCUTE",  cut);
196   gMC->SetCut("BCUTM",  cut);
197   gMC->SetCut("DCUTE",  cut);
198   gMC->SetCut("DCUTM",  cut);
199   gMC->SetCut("PPCUTM", cut);
200   gMC->SetCut("TOFMAX", tofmax);
201 }
202
203 void Field()
204 {
205   ::Info("kir-Field","Set default magnetic field L3 0.4T.");
206   //AliMagFMaps* pField = new AliMagFMaps("Maps","Maps", 2, 1., 10., 1);
207   gAlice->SetField();
208 }
209
210 void Other()
211 {
212   ::Info("kir-Other","Init all other detectors");
213   AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
214
215   if(iMAG){
216     new AliMAG("MAG", "Magnet");
217   }
218
219   if(iABSO){
220     new AliABSOv0("ABSO", "Muon Absorber");
221   }
222
223   if(iDIPO){
224     new AliDIPOv2("DIPO", "Dipole version 2");
225   }
226
227   if(iHALL){
228     new AliHALL("HALL", "Alice Hall");
229   }
230
231   if(iFRAME){
232     AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
233     FRAME->SetHoles(1);
234   }
235
236   if(iSHIL){
237     new AliSHILv2("SHIL", "Shielding Version 2");
238   }
239
240   if(iPIPE){
241     AliPIPEv0("PIPE", "Beam Pipe");
242   }
243  
244   if(iITS){
245     AliITSvPPRasymm *ITS  = new AliITSvPPRasymm("ITS","New ITS PPR detailed version with asymmetric services");
246     ITS->SetMinorVersion(2);       // don't touch this parameter if you're not an ITS developer
247     ITS->SetReadDet(kFALSE);       // don't touch this parameter if you're not an ITS developer
248     ITS->SetThicknessDet1(200.);   // detector thickness on layer 1 must be in the range [100,300]
249     ITS->SetThicknessDet2(200.);   // detector thickness on layer 2 must be in the range [100,300]
250     ITS->SetThicknessChip1(200.);  // chip thickness on layer 1 must be in the range [150,300]
251     ITS->SetThicknessChip2(200.);  // chip thickness on layer 2 must be in the range [150,300]
252     ITS->SetRails(0);              // 1 --> rails in ; 0 --> rails out
253     ITS->SetCoolingFluid(1);       // 1 --> water ; 0 --> freon
254     ITS->SetEUCLID(0);  
255   }
256
257   if(iTPC){
258     AliTPC *TPC = new AliTPCv2("TPC", "Default");
259     TPC->SetSecAU(-1);
260     TPC->SetSecAL(-1);
261   }
262   
263   if(iTOF){
264     new AliTOFv2FHoles("TOF", "TOF with Holes");
265   }
266   
267   if(iZDC){
268     new AliZDCv2("ZDC", "normal ZDC");
269   }
270
271   if(iTRD){
272     AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator");
273     TRD->SetGasMix(1);
274     TRD->SetPHOShole();
275     TRD->SetRICHhole();
276     AliTRDsim *TRDsim = TRD->CreateTR();
277   }
278
279   if(iFMD){
280     AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
281     FMD->SetRingsSi1(256);
282     FMD->SetRingsSi2(128);
283     FMD->SetSectorsSi1(20);
284     FMD->SetSectorsSi2(40);      
285   }
286
287   if(iMUON){
288     new AliMUONv1("MUON", "default");
289   }
290   if(iPHOS){
291     new AliPHOSv1("PHOS", "IHEP");
292   }
293
294   if(iPMD){
295     new AliPMDv1("PMD", "normal PMD");
296   }
297
298   if(iSTART){
299     new AliSTARTv1("START", "START Detector");
300   }
301
302   if(iEMCAL){
303     new AliEMCALv1("EMCAL", "EMCALArch1a");
304   }
305
306   if(iCRT){
307     new AliCRTv0("CRT", "normal ACORDE");
308   }
309
310   if(iVZERO){
311     new AliVZEROv2("VZERO", "normal VZERO");
312   }
313   
314   ::Info("kir-Other","Stop.");
315 }//Other()
316
317 Float_t Eta2Theta(Float_t arg)
318 {
319   return (180./TMath::Pi())*2.*atan(exp(-arg));
320 }
321