Geometry V2 updated with the final frames. Now completed.
[u/mrichter/AliRoot.git] / HMPID / Hmenu.C
1 AliRun     *a; AliRunLoader *al;   TGeoManager *g; //globals for easy manual manipulations
2 AliHMPID   *h; AliLoader    *hl; AliHMPIDParam *hp;
3 Bool_t isGeomType=kFALSE;
4
5 Int_t nCurEvt=0;
6 Int_t nMaxEvt=0;
7 TControlBar *pMenu=0;
8 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9 void GetParam()
10 {
11   isGeomType=!isGeomType;
12   if(g) delete g;  if(hp) delete hp; //delete current TGeoManager and AliHMPIDParam
13   if(isGeomType) g=TGeoManager::Import("geometry.root");
14   else           g=TGeoManager::Import("misaligned_geometry.root");
15   hp=AliHMPIDParam::Instance();
16 }//GetParam()
17 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18 void Hmenu()
19 {   
20   TString status="Status: ";
21   if(gSystem->IsFileInIncludePath("galice.root")){
22     status+="galice.root: ";
23     al=AliRunLoader::Open();                                                //try to open galice.root from current dir 
24     if(gAlice) delete gAlice;                                               //in case we execute this in aliroot delete default AliRun object 
25     al->LoadgAlice(); a=al->GetAliRun();                                    //take new AliRun object from galice.root   
26     hl=al->GetDetectorLoader("HMPID");  h=(AliHMPID*)a->GetDetector("HMPID");  //get HMPID object from galice.root
27     
28     status+=(h)? "HMPID": "PROBLEM PROBLEM PROBLEM- no HMPID";
29     nMaxEvt=al->GetNumberOfEvents()-1;
30     status+=Form(" Event(s) 0-%i",nMaxEvt); 
31   }else  
32     status+="PROBLEM PROBLEM PROBLEM no galice.root";
33   
34   status+=Form(" curent event %i",nCurEvt);
35   GetParam();
36   pMenu = new TControlBar("horizontal",status.Data(),0,0);
37     pMenu->AddButton("                     ","","");
38     pMenu->AddButton("       General       ","General()"  ,"general items which do not depend on any files");
39     pMenu->AddButton("                     ",""           ,"");
40     pMenu->AddButton("       Sim data      ","SimData()"  ,"items which expect to have simulated files"    );
41     pMenu->AddButton("                     ",""           ,"");
42     pMenu->AddButton("       Raw data      ","RawData()"  ,"items which expect to have raw files"          );
43     pMenu->AddButton("                     ","       "    ,"");
44     pMenu->AddButton("         Test        ","Test()"     ,"all test utilities");
45     pMenu->AddButton("      PREV EVENT     ","PrevEvent()" ,"Set the previous event"             );
46     pMenu->AddButton("      NEXT EVENT     ","NextEvent()","Set the next event"                  );
47     pMenu->AddButton("         Quit        ",".q"         ,"close session"                       );
48   pMenu->Show();
49 }//Menu()
50 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
51 void General()
52 {         
53   TControlBar *pMenu = new TControlBar("vertical","General purpose",100,50);  
54     pMenu->AddButton("Debug ON","don();"                   ,"Switch debug on-off"                        );   
55     pMenu->AddButton("Debug OFF","doff();"                 ,"Switch debug on-off"                        );   
56     pMenu->AddButton("Geo GUI","geo();"                    ,"Shows geometry"                             ); 
57     pMenu->AddButton("Browser","new TBrowser;"             ,"Start ROOT TBrowser"                        );
58   pMenu->Show();  
59 }//General()
60 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
61 void SimData()
62 {
63   TControlBar *pSim = new TControlBar("vertical","Sim data",310,50);  
64     pSim->AddButton("Display ","hed();"    ,"Display Fast");
65     pSim->AddButton("HITS QA"           ,"hqa()"     ,"QA plots for hits: hqa()");
66     pSim->AddButton("Print stack"       ,"stack();"  ,"To print hits:     hp(evt)");
67     pSim->AddButton("Print hits"        ,"hp(nCurEvt);"     ,"To print hits:     hp(evt)");
68     pSim->AddButton("Print sdigits"     ,"sp(nCurEvt);"     ,"To print sdigits:  sp(evt)");
69     pSim->AddButton("Print digits"      ,"dp(nCurEvt);"     ,"To print digits:   dp(evt)");
70     pSim->AddButton("Print clusters"    ,"cp(nCurEvt);"     ,"To print clusters: cp(evt)");
71   pSim->Show();         
72 }//SimData()
73 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
74 void RawData()
75 {
76   TControlBar *pMenu = new TControlBar("vertical","Raw data",580,50);  
77     pMenu->AddButton("ESD print"                       ,"ep();"                  ,"To print ESD info: ep()"         );  
78     pMenu->AddButton("ESD QA"                          ,"eq();"                  ,"To draw ESD hists: eq()"         );  
79     pMenu->AddButton("Clusters print"                  ,"cp();"                  ,"To print clusters: cp()"         );  
80     pMenu->AddButton("Clusters QA"                     ,"cq();"                  ,"To draw clusters hists: cq()"    );  
81     pMenu->AddButton("Print Matrix"                    ,"mp();"                  ,"To print prob matrix: mp()"      );  
82     pMenu->AddButton("Print occupancy"                 ,"r->OccupancyPrint(-1);" ,"To print occupancy"              );  
83     pMenu->AddButton("Print event summary  "           ,"r->SummaryOfEvent();"   ,"To print a summary of the event" );  
84   pMenu->Show();         
85 }//RawData()
86 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
87 void Test()
88 {         
89   TControlBar *pTst = new TControlBar("vertical","Test",625,50);  
90     pTst->AddButton("TEST Display "      ,"sed();"                    ,"Display Fast");
91     pTst->AddButton("Test all"           ,"tst();"                   ,"test hits->sdigits->digits"                 );   
92     pTst->AddButton("Segmentation"       ,"ts()"                      ,"test segmentation methods"                  );
93     pTst->AddButton("Test response"      ,"AliHMPIDParam::TestResp();","Test AliHMPIDParam response methods"         );
94     pTst->AddButton("Print map"          ,"PrintMap();"               ,"Test AliHMPIDParam transformation methods"   );
95     pTst->AddButton("Test Recon"         ,"rec();"                    ,"Test AliHMPIDRecon"                          );
96   pTst->Show();  
97 }//Test()
98 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
99
100
101 void doff(){  Printf("DebugOFF");  AliLog::SetGlobalDebugLevel(0);}
102 void don() {  Printf("DebugON");   AliLog::SetGlobalDebugLevel(AliLog::kDebug);}
103
104 void geo (                       ) {gGeoManager->GetTopVolume()->Draw("ogl");}
105   
106 void du  (                       ) {h->Dump         (   );}                //utility display 
107
108 void PrevEvent()                   {nCurEvt--;if(nCurEvt<0       )nCurEvt=0      ;pMenu->SetTitle(Form("Event(s): 0-%i Current event %i",nMaxEvt,nCurEvt));}
109 void NextEvent()                   {nCurEvt++;if(nCurEvt>=nMaxEvt)nCurEvt=nMaxEvt;pMenu->SetTitle(Form("Event(s): 0-%i Current event %i",nMaxEvt,nCurEvt));}
110 void stack(                     )  {AliHMPIDParam::Stack();}    
111 void tid  (Int_t tid,Int_t evt=0)  {AliHMPIDParam::Stack(evt,tid);} 
112 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
113 void PrintMap()
114 {
115  
116   Double_t r2d=TMath::RadToDeg();
117
118   Double_t x=AliHMPIDParam::SizeAllX(),y=AliHMPIDParam::SizeAllY();
119     
120   Printf("\n\n\n");                                       
121   
122   for(int ch=6;ch>=0;ch--){
123     AliHMPIDDigit dL,dR; dL.Manual2(ch,2,0 ,24);
124                          dR.Manual2(ch,3,79,24);
125     TVector3 lt=rp->Lors2Mars(ch,0,y);                                              TVector3 rt=rp->Lors2Mars(ch,x,y);
126                                        TVector3 ce=rp->Lors2Mars(ch,x/2,y/2);
127     TVector3 lb=rp->Lors2Mars(ch,0,0);                                              TVector3 rb=rp->Lors2Mars(ch,x,0);
128     
129     Printf(" ____________________________");                                       
130     Printf("|%6.2fcm            %6.2fcm|"         ,lt.Mag()                             , rt.Mag()       );
131     Printf("|%6.2fde            %6.2fde|"         ,lt.Theta()*r2d                       , rt.Theta()*r2d );
132     Printf("|%6.2fde            %6.2fde|"         ,lt.Phi()*r2d                         , rt.Phi()*r2d   );                                       
133     Printf("|                            |"                                                       );
134     Printf("|DDL %2i    %7.2fcm   DDL %2i|"       ,dL.DdlIdx()    ,  ce.Mag()           , dR.DdlIdx()    );
135     Printf("| 0x%x    %7.2fdeg   0x%x|"           ,dL.DdlId()     ,  ce.Theta()*r2d     , dR.DdlId()     );
136     Printf("|          %7.2fdeg        |"                         ,  ce.Phi()*r2d                        );
137     Printf("|                            |");                                                                              
138     Printf("|%6.2fcm            %6.2fcm|"         ,lb.Mag()                             , rb.Mag()       );
139     Printf("|%6.2fde            %6.2fde|"         ,lb.Theta()*r2d                       , rb.Theta()*r2d );
140     Printf("|%6.2fde     Ch%i    %6.2fde|"        ,lb.Phi()*r2d   ,  ch                 , rb.Phi()*r2d   );                                       
141     Printf(" ----------------------------");                                         
142   }
143   
144   Double_t m[3]; 
145   for(int i=0;i<1000;i++){
146     Float_t xout=0,xin=gRandom->Rndm()*130.60;
147     Float_t yout=0,yin=gRandom->Rndm()*126.16;
148     Int_t   c=gRandom->Rndm()*6;
149     rp->Lors2Mars(c,xin,yin,m);
150     rp->Mars2Lors(c,m,xout,yout);
151     if( (xin-xout) != 0) Printf("Problem in X");
152     if( (yin-yout) != 0) Printf("Problem in Y");
153   }                
154   
155   Int_t ddl,r,d,a,ch,raw,pc,px,py; AliHMPIDDigit dd;
156   
157   ddl=0;raw=0x2214000;r= 8;d=8;a=20;
158   ddl=1;raw=0x2214000;r= 8;d=8;a=20;
159   
160   
161   ddl=2;raw=0x08d6000;r= 2;d=3;a=22;
162   ddl=3;raw=0x08d6000;r= 2;d=3;a=22;
163   
164   
165   ddl=6;raw=0x592e000;r=22;d=4;a=46;ch=3;pc=4;px=55;py=5;dd.Raw(ddl,raw); 
166   Printf("(ch=%i,pc=%i,x=%2i,y=%2i) ddl=%i raw=0x%h (r=%2i,d=%2i,a=%2i)",
167            ch,   pc,  px,   py,     ddl,   raw,      r,    d,    a); dd.Print(); 
168   ddl=7;raw=0x592e000;r=22;d=4;a=46;ch=3;pc=1;
169 }//PrintMap()
170
171 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
172 void t1(Int_t case=1)
173 {
174   AliHMPIDDigit *d[10]; for(Int_t i=0;i<10;i++) d[i]=new AliHMPIDDigit;
175   
176   
177   Int_t iNdig;
178   
179   if(case==1){
180     iNdig=9;  
181   
182                                                               d[0]->Manual2(1,2,67,26, 33); 
183                                 d[1]->Manual2(1,2,66,25,431); d[2]->Manual2(1,2,67,25, 21);
184   d[3]->Manual2(1,2,65,24,127); d[4]->Manual2(1,2,66,24, 54); d[5]->Manual2(1,2,67,24,  5);
185   d[6]->Manual2(1,2,65,23, 20); d[7]->Manual2(1,2,66,23,  5); d[8]->Manual2(1,2,67,23,  6);
186   }else if(case==2){
187     iNdig=3;
188     d[0]->Manual2(0,0,36,14,  8); 
189     d[1]->Manual2(0,0,36,13, 33); d[2]->Manual2(0,0,37,13, 22);
190   }
191   
192   AliHMPIDCluster c;
193   for(int i=0;i<iNdig;i++) c.DigAdd(d[i]);  c.Print();
194   
195   
196   TClonesArray *cl=new TClonesArray("AliHMPIDCluster");
197   
198   c.Solve(cl,kTRUE);
199   Printf("");
200   
201   cl->Print();  
202 }//t1()
203 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
204 void hp(Int_t iEvt=0)
205 {
206 //Prints a list of HMPID hits for a given event. Default is event number 0.
207   Printf("List of HMPID hits for event %i",iEvt);
208   if(al->GetEvent(iEvt)) return;    
209   if(hl->LoadHits()) return;
210   
211   Int_t iTotHits=0;
212   for(Int_t iPrim=0;iPrim<hl->TreeH()->GetEntries();iPrim++){//prims loop
213     hl->TreeH()->GetEntry(iPrim);      
214     h->Hits()->Print();
215     iTotHits+=h->Hits()->GetEntries();
216   }
217   hl->UnloadHits();
218   Printf("totally %i hits for event %i",iTotHits,iEvt);
219 }
220 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
221 void sp(Int_t iEvt=0)
222 {
223 //prints a list of HMPID sdigits  for a given event
224   Printf("List of HMPID sdigits for event %i",iEvt);
225   if(al->GetEvent(iEvt)) return;    
226   if(hl->LoadSDigits()) return;
227   
228   hl->TreeS()->GetEntry(0);
229   h->SdiLst()->Print();
230   hl->UnloadSDigits();
231   Printf("totally %i sdigits for event %i",h->SdiLst()->GetEntries(),iEvt);
232 }
233 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
234 void dp(Int_t iEvt=0)
235 {
236 //prints a list of HMPID digits  for a given event
237   Printf("List of HMPID digits for event %i",iEvt);
238   if(al->GetEvent(iEvt)) return;    
239   if(hl->LoadDigits()) return;
240   
241   hl->TreeD()->GetEntry(0);
242   h->DigLst()->Print();
243   Int_t totDigs=0;
244   for(Int_t i=0;i<7;i++) {totDigs+=h->DigLst(i)->GetEntries();}
245   hl->UnloadDigits();
246   Printf("totally %i digits for event %i",totDigs,iEvt);
247 }
248 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
249 void cp(Int_t iEvt=0)
250 {//prints a list of HMPID clusters  for a given event
251   Printf("List of HMPID clusters for event %i",iEvt);
252   if(al->GetEvent(iEvt)) return;    
253   if(hl->LoadRecPoints()) return;
254   
255   hl->TreeR()->GetEntry(0);
256   h->CluLst()->Print();
257   
258   Int_t iCluCnt=0; for(Int_t iCh=0;iCh<7;iCh++) iCluCnt+=h->CluLst(iCh)->GetEntries();
259   
260   hl->UnloadRecPoints();
261   Printf("totally %i clusters for event %i",iCluCnt,iEvt);
262 }
263 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++