]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RICH/menu.C
Particles are flagged for transport (done = 0).
[u/mrichter/AliRoot.git] / RICH / menu.C
1 //__________________________________________________________________________________________________
2 void H_SD()
3 {
4   Info("H_SD","Start.");
5   
6   for(Int_t iEventN=0;iEventN<a->GetEventsPerRun();iEventN++){//events loop
7     al->GetEvent(iEventN);
8   
9     if(!rl->TreeH()) rl->LoadHits();  al->LoadHeader(); al->LoadKinematics();//from
10     if(!rl->TreeS()) rl->MakeTree("S");    r->MakeBranch("S");//to
11           
12     for(Int_t iPrimN=0;iPrimN<rl->TreeH()->GetEntries();iPrimN++){//prims loop
13       rl->TreeH()->GetEntry(iPrimN);
14       for(Int_t iHitN=0;iHitN<r->Hits()->GetEntries();iHitN++){//hits loop  ???
15         AliRICHhit *pHit=r->Hits()->At(iHitN);        
16         
17         TVector2 x2 = r->Param()->ShiftToWirePos(r->C(pHit->C())->Glob2Loc(pHit->OutX3()));        
18         
19         Int_t iTotQdc=r->Param()->TotQdc(x2,pHit->Eloss());
20         
21         Int_t iPadXmin,iPadXmax,iPadYmin,iPadYmax;
22         r->Param()->Loc2Area(x2,iPadXmin,iPadYmin,iPadXmax,iPadYmax);
23         cout<<"left-down=("<<iPadXmin<<","<<iPadYmin<<") right-up=("<<iPadXmax<<','<<iPadYmax<<')'<<endl;
24         for(Int_t iPadY=iPadYmin;iPadY<=iPadYmax;iPadY++)
25           for(Int_t iPadX=iPadXmin;iPadX<=iPadXmax;iPadX++){
26             Double_t padQdc=iTotQdc*r->Param()->FracQdc(x2,iPadX,iPadY);
27             cout<<padQdc<<endl;
28             if(padQdc>0.1) r->AddSDigit(pHit->C(),iPadX,iPadY,padQdc,al->Stack()->Particle(pHit->GetTrack())->GetPdgCode(),pHit->GetTrack());
29           }            
30       }//hits loop
31     }//prims loop
32     rl->TreeS()->Fill();
33     rl->WriteSDigits("OVERWRITE");
34   }//events loop
35   
36   rl->UnloadHits(); al->UnloadHeader(); al->UnloadKinematics();
37   rl->UnloadSDigits();  
38   Info("H_SD","Stop.");  
39 }//H_SD()
40 //__________________________________________________________________________________________________
41
42 Int_t countContrib[7][3];
43
44 void ControlPlots()
45 {  
46   Int_t iChamber=1;
47   
48   TFile *pFile = new TFile("$(HOME)/plots.root","RECREATE");   
49   TH1F *pCqH1=new TH1F("ClusQ",   "Cluster Charge all chambers;q [QDC]",r->P()->MaxQdc(),0,r->P()->MaxQdc());
50   TH1F *pCsH1=new TH1F("ClusSize","Cluster size all chambers;size [number of pads in cluster]",100,0,100);
51   TH2F *pCmH2=new TH2F("ClusMap", "Cluster map;x [cm];y [cm]",1000,-r->P()->PcSizeX()/2,r->P()->PcSizeX()/2,
52                                                              1000,-r->P()->PcSizeY()/2,r->P()->PcSizeY()/2);
53   
54   TH1F *pCqMipH1=new TH1F("MipClusQ",   "MIP Cluster Charge all chambers;q [QDC]",r->P()->MaxQdc(),0,r->P()->MaxQdc());
55   TH1F *pCsMipH1=new TH1F("MipClusSize","MIP Cluster size all chambers;size [number of pads in cluster]",100,0,100);
56   TH2F *pCmMipH2=new TH2F("MipClusMap", "MIP Cluster map;x [cm];y [cm]",1000,-r->P()->PcSizeX()/2,r->P()->PcSizeX()/2,
57                                                              1000,-r->P()->PcSizeY()/2,r->P()->PcSizeY()/2);
58   
59   TH1F *pCqCerH1=new TH1F("CerClusQ",   "Cerenkov Cluster Charge all chambers;q [QDC]",r->P()->MaxQdc(),0,r->P()->MaxQdc());
60   TH1F *pCsCerH1=new TH1F("CerClusSize","Cernekov Cluster size all chambers;size [number of pads in cluster]",100,0,100);
61   TH2F *pCmCerH2=new TH2F("CerClusMap", "Cerenkov Cluster map;x [cm];y [cm]",1000,-r->P()->PcSizeX()/2,r->P()->PcSizeX()/2,
62                                                              1000,-r->P()->PcSizeY()/2,r->P()->PcSizeY()/2);
63   TH1F *pCqFeeH1=new TH1F("FeeClusQ",   "Feedback Cluster Charge all chambers;q [QDC]",r->P()->MaxQdc(),0,r->P()->MaxQdc());
64   TH1F *pCsFeeH1=new TH1F("FeeClusSize","Feedback Cluster size all chambers;size [number of pads in cluster]",100,0,100);
65   TH2F *pCmFeeH2=new TH2F("FeeClusMap", "Feedback Cluster map;x [cm];y [cm]",1000,-r->P()->PcSizeX()/2,r->P()->PcSizeX()/2,
66                                                              1000,-r->P()->PcSizeY()/2,r->P()->PcSizeY()/2);
67   Bool_t isClusters=!rl->LoadRecPoints();
68   r->SetTreeAddress();  
69   for(Int_t iEventN=0;iEventN<a->GetEventsPerRun();iEventN++){//events loop
70     al->GetEvent(iEventN);    
71     if(isClusters){
72       rl->TreeR()->GetEntry(0);
73       Int_t iTotalClusters=0;
74       for(int i=1;i<=7;i++){//chambers loop
75         iTotalClusters+=r->Clusters(i)->GetEntries();    
76         for(Int_t iClusterN=0;iClusterN<r->Clusters(i)->GetEntries();iClusterN++){//clusters loop
77           AliRICHcluster *pClus=(AliRICHcluster*)r->Clusters(i)->At(iClusterN);
78           
79           countContrib[i-1][0] += pClus->Nmips();
80           countContrib[i-1][1] += pClus->Ncerenkovs();
81           countContrib[i-1][2] += pClus->Nfeedbacks();
82               
83           pCqH1->Fill(pClus->Q());             
84           pCsH1->Fill(pClus->Size());           
85           pCmH2->Fill(pClus->X(),pClus->Y());  
86           
87           if(pClus->IsPureMip()){ //Pure Mips
88             pCqMipH1->Fill(pClus->Q());
89             pCsMipH1->Fill(pClus->Size()); 
90             pCmMipH2->Fill(pClus->X(),pClus->Y());
91           }
92           if(pClus->IsPureCerenkov()){ //Pure Photons
93             pCqCerH1->Fill(pClus->Q());
94             pCsCerH1->Fill(pClus->Size()); 
95             pCmCerH2->Fill(pClus->X(),pClus->Y());
96           }
97           if(pClus->IsPureFeedback()){ //Pure Feedbacks
98             pCqFeeH1->Fill(pClus->Q());
99             pCsFeeH1->Fill(pClus->Size()); 
100             pCmFeeH2->Fill(pClus->X(),pClus->Y());
101           }
102         }//clusters loop
103       }//chambers loop
104     }//isClusters
105     Info("ControlPlots","Event %i processed.",iEventN);
106   }//events loop 
107   if(isClusters) rl->UnloadRecPoints();
108   
109   pFile->Write();
110   delete pFile;
111   for(Int_t i=0;i<7;i++)
112     cout <<" chamber " << i+1 << " n. mips " << countContrib[i][0] << " n. ckovs " << countContrib[i][1] << " n. fdbks " << countContrib[i][2] << endl;
113 }//void ControlPlots()
114 //__________________________________________________________________________________________________
115 void MainTrank()
116 {
117   TStopwatch sw;TDatime time;
118   H_SD(); SD_D();   AliRICHClusterFinder *z=new AliRICHClusterFinder(r); z->Exec();//delete z;  
119   cout<<"\nInfo in <MainTrank>: Start time: ";time.Print();
120     cout<<"Info in <MainTrank>: Stop  time: ";time.Set();  time.Print();
121     cout<<"Info in <MainTrank>: Time  used: ";sw.Print();
122 }
123 //__________________________________________________________________________________________________
124 void sh()
125 {
126   if(rl->LoadHits()) return;
127   
128   Int_t iTotalHits=0;
129   for(Int_t iPrimN=0;iPrimN<rl->TreeH()->GetEntries();iPrimN++){//prims loop
130     rl->TreeH()->GetEntry(iPrimN);      
131     r->Hits()->Print();
132     iTotalHits+=r->Hits()->GetEntries();
133   }
134   Info("sh","totally %i hits",iTotalHits);
135   rl->UnloadHits();
136 }
137 //__________________________________________________________________________________________________
138 void ss()
139 {
140   if(rl->LoadSDigits()) return;
141   rl->TreeS()->GetEntry(0);
142   r->SDigits()->Print();
143   Info("ss","totally %i sdigits",r->SDigits()->GetEntries());
144   rl->UnloadSDigits();
145 }
146 //__________________________________________________________________________________________________
147 void sd()
148 {
149   if(rl->LoadDigits()) return;
150   rl->TreeD()->GetEntry(0);
151   Int_t iTotalDigits=0;
152   for(int i=1;i<=7;i++){
153     r->Digits(i)->Print();
154     iTotalDigits+=r->Digits(i)->GetEntries();
155   }
156   Info("sd","totally %i digits",iTotalDigits);
157   rl->UnloadDigits();
158 }
159
160 void sc()
161 {
162   if(rl->LoadRecPoints()) return;
163   r->SetTreeAddress();
164   rl->TreeR()->GetEntry(0);
165   for(int i=1;i<=7;i++) r->Clusters(i)->Print();
166   rl->UnloadRecPoints();
167 }
168
169 Double_t r2d = TMath::RadToDeg();
170 Double_t d2r = TMath::DegToRad();
171
172 void DisplFast(){ AliRICHDisplFast *d = new AliRICHDisplFast();  d->Exec();}  
173
174
175 void C_R()
176 {
177   AliRICHRecon *detect = new AliRICHRecon("RICH patrec algorithm","Reconstruction");
178     
179
180   for (int nev=0; nev< a->GetEventsPerRun(); nev++) {    // Event Loop
181     al->GetEvent(nev);
182     cout <<endl<< "Processing event:" <<nev<<endl;
183     detect->StartProcessEvent();
184   } // event loop  
185   delete detect;
186 }  
187 //__________________________________________________________________________________________________
188 void D_C()
189 {
190   TStopwatch sw;TDatime time;
191
192    AliRICHClusterFinder *z=new AliRICHClusterFinder(r); z->Exec();
193
194    cout << endl;
195    cout << "Info in Digits->Clusters: Start time: ";time.Print();
196    cout << "Info in Digits->Clusters: Stop  time: ";time.Set();  time.Print();
197    cout << "Info in Digits->Clusters: Time  used: ";sw.Print();
198 }
199 //__________________________________________________________________________________________________
200 void OLD_S_SD()
201 {
202   Info("OLD_S_SD","Start.");  
203   rl->LoadHits();   
204   for(Int_t iEventN=0;iEventN<a->GetEventsPerRun();iEventN++){//events loop
205     al->GetEvent(iEventN);    Info("OLD_S_SD","Processing event %i",iEventN);  
206     
207     rl->MakeTree("S");  r->MakeBranch("S");
208     r->ResetSDigits();  r->ResetSpecialsOld();
209
210     for(Int_t iPrimN=0;iPrimN<rl->TreeH()->GetEntries();iPrimN++){//prims loop
211       rl->TreeH()->GetEntry(iPrimN);
212       for(Int_t i=0;i<r->Specials()->GetEntries();i++){//specials loop
213         Int_t padx=1+ ((AliRICHSDigit*)r->Specials()->At(i))->PadX()+r->Param()->NpadsX()/2;
214         Int_t pady=1+ ((AliRICHSDigit*)r->Specials()->At(i))->PadY()+r->Param()->NpadsY()/2;
215         Double_t q=  ((AliRICHSDigit*)r->Specials()->At(i))->QPad();
216         
217         Int_t hitN= ((AliRICHSDigit*)r->Specials()->At(i))->HitNumber()-1;//!!! important -1
218         Int_t chamber=((AliRICHhit*)r->Hits()->At(hitN))->C();
219         Int_t tid=((AliRICHhit*)r->Hits()->At(hitN))->GetTrack();
220         Int_t pid=((AliRICHhit*)r->Hits()->At(hitN))->Pid();
221         if(padx<1 || padx>r->Param()->NpadsX() ||pady<1 || pady>r->Param()->NpadsY())
222           Warning("OLD_S_SD","pad is out of valid range padx= %i pady=%i event %i",padx,pady,iEventN);
223         else
224           r->AddSDigit(chamber,padx,pady,q,pid,tid);
225       }//specials loop
226     }//prims loop
227     rl->TreeS()->Fill();
228     rl->WriteSDigits("OVERWRITE");
229   }//events loop  
230     rl->UnloadHits();     rl->UnloadSDigits();  
231   Info("OLD_S_SD","Stop.");    
232 }//OLD_S_SD()
233 //__________________________________________________________________________________________________
234 void SD_D()
235 {
236   Info("SD_D","Start.");  
237   extern Int_t kBad; 
238   r->Param()->GenSigmaThMap();
239   rl->LoadSDigits();
240   
241   for(Int_t iEventN=0;iEventN<a->GetEventsPerRun();iEventN++){//events loop
242     al->GetEvent(iEventN);    cout<<"Event "<<iEventN<<endl;  
243     rl->MakeTree("D");r->MakeBranch("D"); //create TreeD with RICH branches 
244     r->ResetSDigits();r->ResetDigits();//reset lists of sdigits and digits
245     rl->TreeS()->GetEntry(0);  
246     r->SDigits()->Sort();
247       
248     Int_t combiPid,chamber,x,y,tid[3],id; Double_t q;
249     Int_t iNdigitsPerPad;//how many sdigits for a given pad
250     const int kBad=-101;//??? to be removed in code    
251     for(Int_t i=0;i<r->SDigits()->GetEntries();i++){//sdigits loop (sorted)
252       AliRICHdigit *pSdig=(AliRICHdigit*)r->SDigits()->At(i);
253       if(pSdig->Id()==id){//still the same pad
254         iNdigitsPerPad++;
255         q+=pSdig->Q();
256         combiPid+=pSdig->CombiPid();
257         if(iNdigitsPerPad<=3)
258           tid[iNdigitsPerPad-1]=pSdig->Tid(0);
259         else
260           Warning("SDigits2Digits","More then 3 sdigits for the given pad");
261       }else{//new pad, add the pevious one
262         if(id!=kBad&&r->Param()->IsOverTh(chamber,x,y,q)) {
263            r->AddDigit(chamber,x,y,q,combiPid,tid);
264          }
265         combiPid=pSdig->CombiPid();chamber=pSdig->C();id=pSdig->Id();
266         x=pSdig->X();y=pSdig->Y();
267         q=pSdig->Q();
268         tid[0]=pSdig->Tid(0);
269         iNdigitsPerPad=1;tid[1]=tid[2]=kBad;
270       }
271     }//sdigits loop (sorted)
272   
273     if(r->SDigits()->GetEntries()&&r->Param()->IsOverTh(chamber,x,y,q))
274       r->AddDigit(chamber,x,y,q,combiPid,tid);//add the last digit
275         
276     rl->TreeD()->Fill();  
277     rl->WriteDigits("OVERWRITE");
278   }//events loop
279   rl->UnloadSDigits();     rl->UnloadDigits();  
280   r->ResetSDigits();r->ResetDigits();//reset lists of sdigits and digits
281   Info("SD_D","Stop.");  
282 }//SD_D()
283 //__________________________________________________________________________________________________
284 void Show()
285 {  
286   cout<<endl;
287   al->LoadHeader();  al->LoadKinematics();
288   
289   rl->LoadHits();  
290     Bool_t isSdigits=!rl->LoadSDigits();  
291       Bool_t isClusters=!rl->LoadRecPoints();
292         Bool_t isDigits=!rl->LoadDigits();//loaders
293   
294   cout<<endl;  cout<<endl;  
295   for(Int_t iEventN=0;iEventN<a->GetEventsPerRun();iEventN++){//events loop
296     Int_t iNparticles=a->GetEvent(iEventN);
297     Int_t iNprims=rl->TreeH()->GetEntries();
298     
299     Int_t iTotalHits=0;
300     for(Int_t iPrimN=0;iPrimN<iNprims;iPrimN++){//prims loop
301       rl->TreeH()->GetEntry(iPrimN);      
302       iTotalHits+=r->Hits()->GetEntries();
303       TParticle *pPrim=al->Stack()->Particle(iPrimN);
304       Info("Show","Evt %4i prim %4i has %4i hits from %s (,%7.2f,%7.2f)",
305                            iEventN,
306                                     iPrimN,
307                                              r->Hits()->GetEntries(),
308                                                                                          pPrim->GetName(),
309                                                                                  pPrim->Theta()*r2d,pPrim->Phi()*r2d);
310     }//prims loop
311     Info("Show-HITS","Evt %i total:  %i particles %i primaries %i hits",
312                         iEventN,   iNparticles, iNprims,     iTotalHits);
313     if(isSdigits){
314       rl->TreeS()->GetEntry(0);
315       Info("Show-SDIGITS","Evt %i contains %5i sdigits",iEventN,r->SDigits()->GetEntries());
316     }
317     if(isDigits){
318       rl->TreeD()->GetEntry(0);
319       for(int i=1;i<=7;i++)
320         Info("Show-DIGITS","Evt %i chamber %i contains %5i digits",
321                                  iEventN,   i,           r->Digits(i)->GetEntries());
322     }
323     if(isClusters){
324       rl->TreeR()->GetEntry(0);
325       for(int i=1;i<=7;i++)
326         Info("Show-CLUSTERS","Evt %i chamber %i contains %5i clusters",
327                                  iEventN,   i,           r->Clusters(i)->GetEntries());
328     }
329     cout<<endl;
330   }//events loop
331   rl->UnloadHits();  
332     if(isSdigits) rl->UnloadSDigits(); 
333       if(isDigits) rl->UnloadDigits(); 
334         if(isClusters) rl->UnloadRecPoints();
335   al->UnloadHeader();
336   al->UnloadKinematics();
337   cout<<endl;
338 }//void Show()
339 //__________________________________________________________________________________________________
340
341
342 AliRun *a;
343 AliRunLoader *al;
344 AliLoader *rl,*tl,*il;
345
346 AliRICH *r;
347
348 Bool_t ReadAlice()
349 {
350   Info("ReadAlice","Tring to read ALICE from SIMULATED FILE.");
351   AliLoader::SetDebug(0);
352   if(gAlice) delete gAlice;      
353   if(!(al=AliRunLoader::Open("galice.root","AlicE","update"))){
354     gSystem->Exec("rm -rf *.root *.dat");
355     Error("ReadAlice","galice.root broken, removing all this garbage then init new one");
356     new AliRun("gAlice","Alice experiment system");
357     gAlice->SetDebug(-1);
358     gAlice->Init("Config.C");
359     r=(AliRICH*)gAlice->GetDetector("RICH");
360     return kFALSE;
361   }
362   al->LoadgAlice();
363   if(!gAlice) Fatal("ReadAlice","No gAlice in file");
364   a=al->GetAliRun();
365   a->SetDebug(0);    
366 //RICH      
367   if(!(r=(AliRICH*)gAlice->GetDetector("RICH"))) Warning("RICH/menu.C::ReadAlice","No RICH in file");
368   r->SetDebug(0);
369   if(!(rl=al->GetLoader("RICHLoader")))          Warning("RICH/menu.C::ReadAlice","No RICH loader in file");        
370         
371   Info("ReadAlice","Run contains %i event(s)",gAlice->GetEventsPerRun());      
372   return kTRUE;
373 }
374 //__________________________________________________________________________________________________
375 void TestResponse()
376 {
377   TCanvas *pC=new TCanvas("c","Amplification test",900,800);
378   pC->Divide(1,2);
379   pC->cd(1);
380   TF1 *pF1=new TF1("f1",Gain,-70,70,1);  pF1->SetParameters(1,1);pF1->SetParNames("Sector");
381   TF1 *pF2=new TF1("f2",Gain,-70,70,1);  pF2->SetParameters(2,1);pF2->SetParNames("Sector");
382   pF1->Draw();pF2->Draw("same");
383   
384   pC->cd(2);
385   
386   const Int_t nPoints=8;
387   THStack *pStack=new THStack("stack","photons");
388   TLegend *pLeg=new TLegend(0.6,0.2,0.9,0.5,"legend");    
389   TH1F *apH[nPoints];
390   
391   Double_t starty=AliRICHParam::DeadZone()/2;
392   Double_t deltay=AliRICHParam::SectorSizeY()/nPoints;
393   
394   for(int i=0;i<nPoints;i++){
395     apH[i]=new TH1F(Form("h%i",i),"Qdc for Photon;QDC;Counts",500,0,500); apH[i]->SetLineColor(i);
396     pStack->Add(apH[i]);                 
397     pLeg->AddEntry(apH[i],Form("@(0,%5.2f->%5.2f)",starty+i*deltay,starty+i*deltay-AliRICHParam::SectorSizeY()/2));
398   }
399         
400   
401   TVector2 x2(0,0);  
402 //  AliRICHParam::ResetWireSag();
403   for(Int_t i=0;i<10000;i++){//events loop
404     for(int j=0;j<nPoints;j++){
405       x2.Set(0,starty-j*deltay);
406       apH[j]->Fill(AliRICHParam::TotQdc(x2,0));
407     }
408   }
409   pStack->Draw("nostack");
410   pLeg->Draw();
411 }//TestResponse()
412 //__________________________________________________________________________________________________
413 void TestSD()
414 {
415   Info("TestSD","Creating test sdigits.");
416   TVector3 hit(426.55,246.28,17.21);        
417   TVector2 x2=r->C(4)->Glob2Loc(hit);        
418   Int_t iTotQdc=r->Param()->TotQdc(x2,624e-9);        
419   Int_t iPadXmin,iPadXmax,iPadYmin,iPadYmax;
420   Int_t padx,pady;
421   Int_t sec=r->Param()->Loc2Pad(x2,padx,pady);
422   r->Param()->Loc2Area(x2,iPadXmin,iPadYmin,iPadXmax,iPadYmax);
423   Info("TestSD","Initial hit (%7.2f,%7.2f,%7.2f)->(%7.2f,%7.2f)->(%4i,%4i,%4i) gives %i charge",
424                           hit.X(),hit.Y(),hit.Z(),x2.X(),x2.Y(),sec,padx,pady,iTotQdc);
425   
426   cout<<"left-down=("<<iPadXmin<<","<<iPadYmin<<") right-up=("<<iPadXmax<<','<<iPadYmax<<')'<<endl;
427   for(Int_t iPadY=iPadYmin;iPadY<=iPadYmax;iPadY++)
428     for(Int_t iPadX=iPadXmin;iPadX<=iPadXmax;iPadX++)
429        cout<<r->Param()->FracQdc(x2,iPadX,iPadY)<<endl;
430   Info("TestSD","Stop.");
431 }//void TestSdigits()
432 //__________________________________________________________________________________________________
433 void TestC()
434 {
435   Info("TestC","Creating test clusters.");
436   rl->MakeTree("R");r->MakeBranch("R");
437   
438   AliRICHcluster c;
439   c.AddDigit(new AliRICHdigit(1,20,21,200,1,2,3));
440   c.AddDigit(new AliRICHdigit(1,22,21,250,1,2,3));
441   c.CoG();
442   
443   r->AddCluster(c);  
444   
445   rl->TreeR()->Fill();
446   rl->WriteRecPoints("OVERWRITE");
447   rl->UnloadRecPoints();
448   r->ResetClusters();
449   
450   Info("TestC","Stop.");
451 }//TestC()
452 //__________________________________________________________________________________________________
453 void TestSeg()
454 {
455   AliRICHParam *p=r->Param();
456   Int_t padx,pady,sec;
457   Double_t x,y;
458   Double_t eps=0.0000001;
459   Double_t x1=-0.5*p->PcSizeX()+eps; Double_t x2=-0.5*p->SectorSizeX()-p->DeadZone()-eps; Double_t x3=-0.5*p->SectorSizeX()+eps;
460   Double_t x6= 0.5*p->PcSizeX()-eps; Double_t x5= 0.5*p->SectorSizeX()+p->DeadZone()+eps; Double_t x4= 0.5*p->SectorSizeX()-eps;
461   Double_t y1=-0.5*p->PcSizeY()+eps; Double_t y2=-0.5*p->DeadZone()-eps;
462   Double_t y4= 0.5*p->PcSizeY()-eps; Double_t y3= 0.5*p->DeadZone()+eps;
463   TVector2 v2;
464   
465   AliRICHParam::Print();
466   
467   sec=p->Loc2Pad(TVector2(x= 0,y=y1),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 73-  1","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
468   sec=p->Loc2Pad(TVector2(x= 0,y=y2),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 73- 80","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
469   sec=p->Loc2Pad(TVector2(x= 0,y= 0),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" dead  ","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
470   sec=p->Loc2Pad(TVector2(x= 0,y=y3),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 73- 81","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
471   sec=p->Loc2Pad(TVector2(x= 0,y=y4),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 73-160","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)\n",x,y,sec,padx,pady,v2.X(),v2.Y());
472
473   sec=p->Loc2Pad(TVector2(x=x1,y=y4),padx,pady); v2=p->Pad2Loc(padx,pady); Info("  1-160","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
474   sec=p->Loc2Pad(TVector2(x=x2,y=y4),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 48-160","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
475   sec=p->Loc2Pad(TVector2(x=x3,y=y4),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 49-160","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
476   sec=p->Loc2Pad(TVector2(x=x4,y=y4),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 96-160","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
477   sec=p->Loc2Pad(TVector2(x=x5,y=y4),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 97-160","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
478   sec=p->Loc2Pad(TVector2(x=x6,y=y4),padx,pady); v2=p->Pad2Loc(padx,pady); Info("144-160","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)\n",x,y,sec,padx,pady,v2.X(),v2.Y());
479   
480   sec=p->Loc2Pad(TVector2(x=x1,y=y3),padx,pady); v2=p->Pad2Loc(padx,pady); Info("  1- 81","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
481   sec=p->Loc2Pad(TVector2(x=x2,y=y3),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 48- 81","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
482   sec=p->Loc2Pad(TVector2(x=x3,y=y3),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 49- 81","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
483   sec=p->Loc2Pad(TVector2(x=x4,y=y3),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 96- 81","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
484   sec=p->Loc2Pad(TVector2(x=x5,y=y3),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 97- 81","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
485   sec=p->Loc2Pad(TVector2(x=x6,y=y3),padx,pady); v2=p->Pad2Loc(padx,pady); Info("144- 81","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)\n",x,y,sec,padx,pady,v2.X(),v2.Y());
486   
487   sec=p->Loc2Pad(TVector2(x=x1,y=y2),padx,pady); v2=p->Pad2Loc(padx,pady); Info("  1- 80","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
488   sec=p->Loc2Pad(TVector2(x=x2,y=y2),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 48- 80","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
489   sec=p->Loc2Pad(TVector2(x=x3,y=y2),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 49- 80","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
490   sec=p->Loc2Pad(TVector2(x=x4,y=y2),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 96- 80","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
491   sec=p->Loc2Pad(TVector2(x=x5,y=y2),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 97- 80","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
492   sec=p->Loc2Pad(TVector2(x=x6,y=y2),padx,pady); v2=p->Pad2Loc(padx,pady); Info("144- 80","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)\n",x,y,sec,padx,pady,v2.X(),v2.Y());
493   
494   sec=p->Loc2Pad(TVector2(x=x1,y=y1),padx,pady); v2=p->Pad2Loc(padx,pady); Info("  1-  1","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
495   sec=p->Loc2Pad(TVector2(x=x2,y=y1),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 48-  1","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
496   sec=p->Loc2Pad(TVector2(x=x3,y=y1),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 49-  1","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
497   sec=p->Loc2Pad(TVector2(x=x4,y=y1),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 96-  1","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
498   sec=p->Loc2Pad(TVector2(x=x5,y=y1),padx,pady); v2=p->Pad2Loc(padx,pady); Info(" 97-  1","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)",x,y,sec,padx,pady,v2.X(),v2.Y());
499   sec=p->Loc2Pad(TVector2(x=x6,y=y1),padx,pady); v2=p->Pad2Loc(padx,pady); Info("144-  1","(%7.2f,%7.2f)->(%5i,%5i,%5i) center=(%7.2f,%7.2f)\n",x,y,sec,padx,pady,v2.X(),v2.Y());
500    
501 }//void TestSeg()
502 //__________________________________________________________________________________________________
503 void TestMenu()
504 {
505   TControlBar *pMenu = new TControlBar("vertical","RICH test");
506   pMenu->AddButton("Test segmentation",  "TestSeg()",         "Test AliRICHParam segmentation methods");
507   pMenu->AddButton("Test response",      "TestResponse()",    "Test AliRICHParam response methods");
508   pMenu->AddButton("Test sdigits",       "TestSD()",          "Create test set of sdigits");
509   pMenu->AddButton("Test clusters",      "TestC()",           "Create test set of clusters");
510   pMenu->AddButton("Test digits OLD",    "TestDigitsOLD()",   "Create test set of OLD digits");
511   pMenu->Show();  
512 }//TestMenu()
513 //__________________________________________________________________________________________________
514 void menu()
515
516   TControlBar *pMenu = new TControlBar("vertical","RICH main");
517        
518   if(ReadAlice()){//it's from file, reconstruct
519     pMenu->AddButton("hits->sdigits->digits->clusters","MainTrank()","Convert");
520     
521     pMenu->AddButton("hits->sdigits"    ,"H_SD()" ,"AliRICH::Hits2SDigits");
522     pMenu->AddButton("sdigits->digits"  ,"SD_D()" ,"AliRICHDigitizer");
523     pMenu->AddButton("digits->clusters" ,"D_C()"  ,"AliRICHClusterFinder");
524     pMenu->AddButton("clusters->recos"  ,"C_R()"  ,"AliRICHRecon");
525
526     pMenu->AddButton("Show",            "Show()","Shows the structure of events in files");
527     pMenu->AddButton("Display Fast",    "DisplFast()",           "Display Fast");
528     pMenu->AddButton("Control Plots",   "ControlPlots()",        "Display some control histograms");
529     pMenu->AddButton("OLD specials->sdigits",          "OLD_S_SD()",       "Perform first phase converstion");
530     
531   }else{//it's aliroot, simulate
532     pMenu->AddButton("Run",         "a->Run(1)",       "Process!");
533     pMenu->AddButton("Geo GUI", "new G3GeometryGUI;","Create instance of G4GeometryGUI"); 
534   }
535   pMenu->AddButton("Test submenu",    "TestMenu()",            "Shows test submenu");
536   pMenu->AddButton("Browser",         "new TBrowser;",         "Start ROOT TBrowser");
537   pMenu->AddButton("Debug ON",     "DebugON();",   "Switch debug on-off");   
538   pMenu->AddButton("Debug OFF",    "DebugOFF();",   "Switch debug on-off");   
539   pMenu->AddButton("Quit",            ".q",                    "Close session");
540   pMenu->Show();
541   a=gAlice;//for manual manipulation convinience
542 }//menu()
543 //__________________________________________________________________________________________________
544 void DebugOFF(){  Info("DebugOFF","");  a->SetDebug(0);  r->SetDebug(0);  AliLoader::SetDebug(0);}
545 void DebugON() {  Info("DebugON","");   a->SetDebug(1);  r->SetDebug(1);  AliLoader::SetDebug(1);}