]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HMPID/Hdisp.C
HESDfromKin adapted for HTA+minors
[u/mrichter/AliRoot.git] / HMPID / Hdisp.C
index 03a73943affba435d15dc60e70a74cba9e722f53..7ef673c7d750f6bed0e843896680548e3bd267b9 100644 (file)
-Hdisp()
-{
-  gSystem->Load("libMinuit.so");
-  gSystem->Load("libVMC.so");
-  gSystem->Load("libESD.so");
-  gSystem->Load("libSTEER.so");
-  gSystem->Load("libCDB.so");
+#if !defined(__CINT__) || defined(__MAKECINT__)
+
+#include <TSystem.h>
+#include <TFile.h>
+#include <TTree.h>
+#include <TButton.h>
+#include <TCanvas.h>
+#include <TClonesArray.h>
+#include <TParticle.h>
+#include <TRandom.h>
+#include <TLatex.h>
+#include <TLegend.h>
+#include <TPolyMarker.h>
+#include <TBox.h>
+#include <AliESD.h>
+#include <AliCDBManager.h>
+#include <AliCDBEntry.h>
+#include "AliHMPIDHit.h"
+#include "AliHMPIDv2.h"
+#include "AliHMPIDReconstructor.h"
+#include "AliHMPIDRecon.h"
+#include "AliHMPIDParam.h"
+#include "AliHMPIDCluster.h"
+#include <TChain.h>
 
-  gSystem->Load("libGed.so");
-  gSystem->Load("libRGL.so");
-  gSystem->Load("libGeom.so");
-  gSystem->Load("libVMC.so");
+#endif
 
-  gSystem->Load("libReve.so");
+TCanvas *fCanvas=0; Int_t fType=3; Int_t fEvt=0; Int_t fNevt=0;                      
+TFile *fHitFile; TTree *fHitTree; TClonesArray *fHitLst; TPolyMarker *fRenMip[7]; TPolyMarker *fRenCko[7]; TPolyMarker *fRenFee[7];
+                                  TClonesArray *fSdiLst; 
+TFile *fDigFile; TTree *fDigTree; TObjArray    *fDigLst; TPolyMarker *fRenDig[7];    
+TFile *fCluFile; TTree *fCluTree; TObjArray    *fCluLst; TPolyMarker *fRenClu[7];    
+TFile *fEsdFile; TTree *fEsdTree;  AliESD      *fEsd;    TPolyMarker *fRenTxC[7]; TPolyMarker *fRenRin[7];  
+TFile *fCosFile; TTree *fCosTree;
 
-  gSystem->Load("libHMPIDbase.so");
-  gSystem->Load("libHMPIDsim.so");
-  gSystem->Load("libHMPIDrec.so");
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void CreateContainers()
+{//to create all containers
+  fHitLst=new TClonesArray("AliHMPIDHit");
+  fSdiLst=new TClonesArray("AliHMPIDDigit");
+  fDigLst=new TObjArray(7); for(Int_t i=0;i<7;i++) fDigLst->AddAt(new TClonesArray("AliHMPIDDigit"),i);       fDigLst->SetOwner(kTRUE);
+  fCluLst=new TObjArray(7); for(Int_t i=0;i<7;i++) fCluLst->AddAt(new TClonesArray("AliHMPIDCluster"),i);     fCluLst->SetOwner(kTRUE); 
+  fEsd   =new AliESD;
+}
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void CreateRenders()
+{
+  for(Int_t ch=0;ch<7;ch++){
+    fRenMip[ch]=new TPolyMarker; fRenMip[ch]->SetMarkerStyle(kOpenTriangleUp);  fRenMip[ch]->SetMarkerColor(kRed);
+    fRenCko[ch]=new TPolyMarker; fRenCko[ch]->SetMarkerStyle(kOpenCircle);      fRenCko[ch]->SetMarkerColor(kRed);
+    fRenFee[ch]=new TPolyMarker; fRenFee[ch]->SetMarkerStyle(kOpenDiamond);     fRenFee[ch]->SetMarkerColor(kRed);
+    fRenDig[ch]=new TPolyMarker; fRenDig[ch]->SetMarkerStyle(kOpenSquare);      fRenDig[ch]->SetMarkerColor(kGreen);
+    fRenClu[ch]=new TPolyMarker; fRenClu[ch]->SetMarkerStyle(kStar);            fRenClu[ch]->SetMarkerColor(kBlue);
+    fRenTxC[ch]=new TPolyMarker; fRenTxC[ch]->SetMarkerStyle(kPlus);            fRenTxC[ch]->SetMarkerColor(kRed);      fRenTxC[ch]->SetMarkerSize(3);
+    fRenRin[ch]=new TPolyMarker; fRenRin[ch]->SetMarkerStyle(kFullDotSmall);    fRenRin[ch]->SetMarkerColor(kMagenta);
+  }
+}//CreateRenders()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void ClearRenders()
+{
+  for(Int_t ch=0;ch<7;ch++){
+    fRenTxC[ch]->SetPolyMarker(0); 
+    fRenRin[ch]->SetPolyMarker(0); 
+    fRenMip[ch]->SetPolyMarker(0); 
+    fRenCko[ch]->SetPolyMarker(0); 
+    fRenFee[ch]->SetPolyMarker(0); 
+    fRenDig[ch]->SetPolyMarker(0); 
+    fRenClu[ch]->SetPolyMarker(0); 
+  }
+}//ClearRenders()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void PrintHits()
+{
+//Prints a list of HMPID hits for a given event. Default is event number 0.
+  if(!fHitTree) return;
+  Printf("List of HMPID hits for event %i",fEvt);
+  Int_t iTot=0;
+  for(Int_t iEnt=0;iEnt<fHitTree->GetEntries();iEnt++){//entries loop
+    fHitTree->GetEntry(iEnt);      
+    fHitLst->Print();
+    iTot+=fHitLst->GetEntries();
+  }
+  Printf("totally %i hits for event %i",iTot,fEvt);
+}//PrintHits();
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void PrintSdis()
+{//prints a list of HMPID sdigits  for a given event
+  Printf("List of HMPID sdigits for event %i",fEvt);
+  fSdiLst->Print();
+  Printf("totally %i sdigits for event %i",fSdiLst->GetEntries(),fEvt);
+}//PrintSdis()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void PrintDigs()
+{//prints a list of HMPID digits
+  Printf("List of HMPID digits for event %i",fEvt);  
+  fDigLst->Print();
+  Int_t iTot=0;  for(Int_t i=0;i<7;i++) {iTot+=((TClonesArray*)fDigLst->At(i))->GetEntries();}
+  Printf("totally %i digits for event %i",iTot,fEvt);
+}
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void PrintClus()
+{//prints a list of HMPID clusters  for a given event
+  Printf("List of HMPID clusters for event %i",fEvt);
   
-  TGeoManager::Import("geometry.root");
+  fCluLst->Print();
+  Int_t iTot=0; for(Int_t iCh=0;iCh<7;iCh++) iTot+=((TClonesArray*)fCluLst->At(iCh))->GetEntries();
   
-  AliHMPIDParam *pParam=AliHMPIDParam::Instance();
+  Printf("totally %i clusters for event %i",iTot,fEvt);
+}
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void PrintEsd()
+{//prints a list of HMPID Esd  for a given event
+  Printf("List of HMPID ESD summary for event %i",fEvt);
+  for(Int_t iTrk=0;iTrk<fEsd->GetNumberOfTracks();iTrk++){
+    AliESDtrack *pTrk = fEsd->GetTrack(iTrk);
+    Float_t x,y;Int_t q,nacc;   pTrk->GetHMPIDmip(x,y,q,nacc);
+    Printf("Track %02i with p %7.2f with ThetaCer %5.3f with %i photons",iTrk,pTrk->GetP(),pTrk->GetHMPIDsignal(),nacc);
+  }  
+}//PrintEsd()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DrawChamber(Int_t iCh) 
+{//used by Draw() to Draw() chamber structure
+  gPad->Range(-10,-10,AliHMPIDDigit::SizeAllX()+5,AliHMPIDDigit::SizeAllY()+5); 
+  if(iCh>=0){TLatex txt; txt.SetTextSize(0.1); txt.DrawLatex(-5,-5,Form("%i",iCh));}
+  
+  for(Int_t iPc=AliHMPIDDigit::kMinPc;iPc<=AliHMPIDDigit::kMaxPc;iPc++){
+    TBox *pBox=new TBox(AliHMPIDDigit::MinPcX(iPc),AliHMPIDDigit::MinPcY(iPc),
+                        AliHMPIDDigit::MaxPcX(iPc),AliHMPIDDigit::MaxPcY(iPc));
+    pBox->SetFillStyle(0);  pBox->Draw();
+  }//PC loop      
+}//DrawChamber()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DrawLegend()
+{//used by Draw() to draw legend
+  Int_t nTxC=0,nMip=0,nCko=0,nFee=0,nDig=0,nClu=0;
+  for(Int_t ch=0;ch<7;ch++){
+    nTxC+=fRenTxC[ch]->GetN();
+    nMip+=fRenMip[ch]->GetN();
+    nCko+=fRenCko[ch]->GetN();
+    nFee+=fRenFee[ch]->GetN();
+    nDig+=fRenDig[ch]->GetN();
+    nClu+=fRenClu[ch]->GetN();
+  }
+  TLegend *pLeg=new TLegend(0.2,0.2,0.8,0.8);
+  pLeg->SetHeader(Form("Event %i Total %i",fEvt,fNevt));
+  pLeg->AddEntry(fRenTxC[0],Form("TRKxPC %i"     ,nTxC),"p");
+  pLeg->AddEntry(fRenMip[0],Form("Mip hits %i"   ,nMip),"p");    
+  pLeg->AddEntry(fRenCko[0],Form("Ckov hits %i"  ,nCko),"p");    
+  pLeg->AddEntry(fRenFee[0],Form("Feed hits %i"  ,nFee),"p");    
+  pLeg->AddEntry(fRenDig[0],Form("Digs %i"       ,nDig),"p");    
+  pLeg->AddEntry(fRenClu[0],Form("Clus %i"       ,nClu),"p");    
+  pLeg->Draw();
+}//DrawLegend()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void Draw()
+{//draws all the objects of current event in given canvas
+  for(Int_t iCh=0;iCh<7;iCh++){//chambers loop    
+    switch(iCh){
+      case 6: fCanvas->cd(1); break; case 5: fCanvas->cd(2); break;
+      case 4: fCanvas->cd(4); break; case 3: fCanvas->cd(5); break; case 2: fCanvas->cd(6); break;
+                                     case 1: fCanvas->cd(8); break; case 0: fCanvas->cd(9); break;
+    }
+    gPad->SetEditable(kTRUE); gPad->Clear(); DrawChamber(iCh);
+    fRenTxC[iCh]->Draw();        
+    fRenMip[iCh]->Draw();        
+    fRenFee[iCh]->Draw();        
+    fRenCko[iCh]->Draw();       
+    fRenRin[iCh]->Draw("CLP");   
+    fRenDig[iCh]->Draw();        
+    fRenClu[iCh]->Draw();        
+    gPad->SetEditable(kFALSE);
+  }//chambers loop
   
-  AliRunLoader *pAL=AliRunLoader::Open(); pAL->LoadHits  ("HMPID"); TTree *pHitT=pAL->GetTreeH("HMPID", false);
-                                          pAL->LoadDigits("HMPID"); TTree *pDigT=pAL->GetTreeD("HMPID", false); 
-                                          
-  Reve::PointSet *pHitPnt=new Reve::PointSet("Hits"));
-  TPolyMarker3D  *pDigPnt=new TPolyMarker3D;  pDigPnt->SetName("Digits"); pDigPnt->SetMarkerColor(kGreen);iPntCnt=0;
-                                          
-  TPointSelector ps(pHitT,pHitPnt,"fX:fY:fZ",""); ps.Select();
+  fCanvas->cd(3);  gPad->Clear(); DrawLegend();
+}//Draw()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void RenderHit(TClonesArray *pHitLst)
+{//used by ReadEvent() and SimulateEvent() to render hits to polymarker structures, one per chamber
+  for(Int_t iHit=0;iHit<pHitLst->GetEntries();iHit++){       //hits loop
+    AliHMPIDHit *pHit = (AliHMPIDHit*)pHitLst->At(iHit); Int_t ch=pHit->Ch(); Float_t x=pHit->LorsX(); Float_t y=pHit->LorsY();    //get current hit        
+    switch(pHit->Pid()){
+      case 50000050: fRenCko[ch]->SetNextPoint(x,y);break; 
+      case 50000051: fRenFee[ch]->SetNextPoint(x,y);break;
+      default:       fRenMip[ch]->SetNextPoint(x,y);break;
+    }//switch hit PID      
+  }//hits loop for this entry
+}//RenderHits()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void RenderClu(TObjArray *pClus,TPolyMarker **pMark)
+{//used by ReadEvent() and SimulateEvent() to render clusters to polymarker structures, one per chamber
+  for(Int_t iCh=0;iCh<=6;iCh++){                                     //chambers loop   
+    TClonesArray *pClusCham=(TClonesArray*)pClus->At(iCh);           //get clusters list for this chamber
+    for(Int_t iClu=0;iClu<pClusCham->GetEntries();iClu++){           //clusters loop
+      AliHMPIDCluster *pClu = (AliHMPIDCluster*)pClusCham->At(iClu); //get current cluster        
+      pMark[iCh]->SetNextPoint(pClu->X(),pClu->Y()); 
+    }//switch hit PID      
+  }//hits loop for this entry
+}//RenderClus()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void RenderEsd(AliESD *pEsd)
+{//used by ReadEvent() or SimulateEvent() to render ESD to polymarker structures for rings and intersections one per chamber
+  AliHMPIDRecon rec;
+  for(Int_t iTrk=0;iTrk<pEsd->GetNumberOfTracks();iTrk++){//tracks loop to collect cerenkov rings and intersection points
+    AliESDtrack *pTrk=pEsd->GetTrack(iTrk);    Int_t ch=pTrk->GetHMPIDcluIdx(); //get track and chamber intersected by it
+    if(ch<0) continue;                                                          //this track does not intersect any chamber
+    Float_t thRa,phRa,xRa,yRa; pTrk->GetHMPIDtrk(xRa,yRa,thRa,phRa);            //get info on current track
+    ch/=1000000;                                                                //actual chamber number 
+    Float_t xPc=0,yPc=0; AliHMPIDTracker::IntTrkCha(pTrk,xPc,yPc);              //find again intersection of track with PC--> it is not stored in ESD!
+    fRenTxC[ch]->SetNextPoint(xPc,yPc);                                            //add this intersection point
+    Float_t ckov=pTrk->GetHMPIDsignal();                                        //get ckov angle stored for this track  
+    if(ckov>0){
+      rec.SetTrack(xRa,yRa,thRa,phRa);
+      for(Int_t j=0;j<100;j++){ 
+        TVector2 pos; pos=rec.TracePhot(ckov,j*0.0628);
+       if(!AliHMPIDDigit::IsInDead(pos.X(),pos.Y())) fRenRin[ch]->SetNextPoint(pos.X(),pos.Y());
+      }      
+    }//if ckov is valid
+  }//tracks loop  
+}//RenEsd()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void SimulateEsd(AliESD *pEsd)
+{
+  TParticle part; TLorentzVector mom;
+  for(Int_t iTrk=0;iTrk<100;iTrk++){//stack loop
+    part.SetPdgCode(kProton);
+    part.SetProductionVertex(0,0,0,0);
+    Double_t eta= -0.2+gRandom->Rndm()*0.4; //rapidity is random [-0.2,+0.2]
+    Double_t phi= gRandom->Rndm()*60.*TMath::DegToRad();   //phi is random      [ 0  , 60 ] degrees    
+    mom.SetPtEtaPhiM(5,eta,phi,part.GetMass());
+    part.SetMomentum(mom);
+    AliESDtrack trk(&part);
+    pEsd->AddTrack(&trk);
+  }//stack loop  
+}//EsdFromStack()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void SimulateHits(AliESD *pEsd, TClonesArray *pHits)
+{//used by SimulateEvent to simulate hits out from provided ESD
+  const Int_t kCerenkov=50000050;
+  const Int_t kFeedback=50000051;
+  
+  AliHMPIDRecon rec;
+  Float_t eMip=200e-9,ePho=7.5e-9; 
+  Int_t hc=0; 
+  for(Int_t iTrk=0;iTrk<pEsd->GetNumberOfTracks();iTrk++){//tracks loop
+    AliESDtrack *pTrk=pEsd->GetTrack(iTrk);
+    Float_t xRa,yRa;
+    Int_t ch=AliHMPIDTracker::IntTrkCha(pTrk,xRa,yRa);
+    if(ch<0) continue; //this track does not hit HMPID
+    Float_t beta = pTrk->GetP()/(TMath::Sqrt(pTrk->GetP()*pTrk->GetP()+0.938*0.938));
+    Float_t ckov=TMath::ACos(1./(beta*1.292));
+
+    Float_t theta,phi,xPc,yPc,; pTrk->GetHMPIDtrk(xPc,yPc,theta,phi); rec.SetTrack(xRa,yRa,theta,phi); 
+    
+    if(!AliHMPIDDigit::IsInDead(xPc,yPc)) new((*pHits)[hc++]) AliHMPIDHit(ch,eMip,kProton  ,iTrk,xPc,yPc);                 //mip hit
+    Int_t nPhots = (Int_t)(20.*TMath::Power(TMath::Sin(ckov),2)/TMath::Power(TMath::Sin(TMath::ACos(1./1.292)),2));
+    for(int i=0;i<nPhots;i++){
+      TVector2 pos;
+      pos=rec.TracePhot(ckov,gRandom->Rndm()*TMath::TwoPi());
+      if(!AliHMPIDDigit::IsInDead(pos.X(),pos.Y())) new((*pHits)[hc++]) AliHMPIDHit(ch,ePho,kCerenkov,iTrk,pos.X(),pos.Y());
+    }                      //photon hits  
+    for(int i=0;i<3;i++){//feedback photons
+      Float_t x=gRandom->Rndm()*160; Float_t y=gRandom->Rndm()*150;
+      if(!AliHMPIDDigit::IsInDead(x,y)) new((*pHits)[hc++]) AliHMPIDHit(ch,ePho,kFeedback,iTrk,x,y);                 //feedback hits  
+    }//photon hits loop                      
+  }//tracks loop    
+}//SimulateHits()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DoZoom(Int_t evt, Int_t px, Int_t py, TObject *)
+{
+  if(evt!=5 && evt!=6) return; //5- zoom in 6-zoom out
+  const Int_t minZoom=64;
+  const Int_t maxZoom=2;
+  static Int_t zoom=minZoom; //zoom level
+  if(evt==5&&zoom==maxZoom) return; 
+  if(evt==6&&zoom==minZoom) return; 
   
-  TClonesArray *pDigLst=new TClonesArray("AliHMPIDDigit"); //this is tmp dig list per chamber
+ // if(!obj->IsA()->InheritsFrom("TPad")) return;  //current object is not pad
+  TVirtualPad *pPad=gPad->GetSelectedPad();
+  if(pPad->GetNumber()==3 || pPad->GetNumber()==7) return; //current pad is wrong
+
+ // Printf("evt=%i (%i,%i) %s",evt,px,py,obj->GetName());
+    
+  Float_t x=pPad->AbsPixeltoX(px); Float_t y=pPad->AbsPixeltoY(py); 
  
-  for(Int_t iCh=0;iCh<7;iCh++){
-    pDigT->SetBranchAddress(Form("HMPID%i",iCh+1),&pDigLst);
-    pDigT->GetEntry(0);
-    for(Int_t iDig=0;iDig<pDigLst->GetEntries();iDig++){
-      AliHMPIDDigit *pDig=(AliHMPIDDigit*)pDigLst->At(iDig);    
-      TVector2 lors=pParam->Pad2Loc(pDig->PadX(),pDig->PadY());
-      TVector3 mars=pParam->Lors2Mars(iCh,lors.X(),lors.Y());
-      pDigPnt->SetPoint(iPntCnt++,mars.X(),mars.Y(),mars.Z());
-    }//digits loop for chamber        
-  }//chambers loop
+  if(evt==5){ zoom=zoom/2;     pPad->Range(x-zoom*2,y-zoom*2,x+zoom*2,y+zoom*2);} //zoom in
+  else      { zoom=zoom*2;     pPad->Range(x-zoom*2,y-zoom*2,x+zoom*2,y+zoom*2);} //zoom out 
+  if(zoom==minZoom) pPad->Range(-10,-10,AliHMPIDDigit::SizeAllX()+5,AliHMPIDDigit::SizeAllY()+5);
+  ((TCanvas *)gTQSender)->SetTitle(Form("zoom x%i",minZoom/zoom));
+  pPad->Modified();
+  pPad->Update();                                              
+}
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void ReadEvent()
+{//used by NextEvent()  to read curent event and construct all render elements
+  if(fNevt && fEvt>=fNevt) fEvt=0; //loop over max event
+  
+  if(fHitFile){ 
+    if(fHitTree) delete fHitTree;   fHitTree=(TTree*)fHitFile->Get(Form("Event%i/TreeH",fEvt));
+    
+                          fHitTree->SetBranchAddress("HMPID",&fHitLst);
+    for(Int_t iEnt=0;iEnt<fHitTree->GetEntries();iEnt++){    
+                          fHitTree->GetEntry(iEnt);                              
+      RenderHit(fHitLst);   
+    }//prim loop
+  }//if hits file
   
-  if(!gReve) new Reve::RGTopFrame(0,0,0,2);
-  gReve->AddGlobalRenderElement(new Reve::RenderElementObjPtr(pDigPnt));
-  gReve->AddRenderElement(pHitPnt);
-  gReve->Redraw3D();
+  if(fCluFile){ 
+    if(fCluTree) delete fCluTree; fCluTree=(TTree*)fCluFile->Get(Form("Event%i/TreeR",fEvt));
+    for(Int_t iCh=AliHMPIDDigit::kMinCh;iCh<=AliHMPIDDigit::kMaxCh;iCh++) fCluTree->SetBranchAddress(Form("HMPID%i",iCh),&(*fCluLst)[iCh]);      
+    fCluTree->GetEntry(0);
+    RenderClu(fCluLst,fRenClu);   
+  }//if clus file
+  
+  if(fEsdFile){//if ESD file open
+    fEsdTree->GetEntry(fEvt);  
+    RenderEsd(fEsd);
+  }//if ESD file 
+}//ReadEvent()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void SimulateEvent()
+{// used by NextEvent() to simulate all info
+  AliCDBManager* pCDB = AliCDBManager::Instance();  pCDB->SetDefaultStorage("local://$HOME"); pCDB->SetRun(0);
+  AliCDBEntry *pNmeanEnt=pCDB->Get("HMPID/Calib/Nmean");
+
+  SimulateEsd(fEsd);
+  SimulateHits(fEsd,fHitLst);
+                 AliHMPIDv2::Hit2Sdi(fHitLst,fSdiLst);                               
+          AliHMPIDDigitizer::Sdi2Dig(fSdiLst,fDigLst);     
+      AliHMPIDReconstructor::Dig2Clu(fDigLst,fCluLst);
+            AliHMPIDTracker::Recon(fEsd,fCluLst,(TObjArray*)pNmeanEnt->GetObject());
+            
+  RenderHit(fHitLst);
+  RenderClu(fCluLst,fRenClu);
+  RenderEsd(fEsd);            
+}//SimulateEvent()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void NextEvent()
+{
+  fEvt++;
+  ClearRenders();
+  switch(fType){
+    case 1: ReadEvent();break;
+//    case 2: ReadCosmic(); break;
+    case 3: SimulateEvent();     break;
+    default:                 return;
+  }  
+  Draw();
 }
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void Hdisp()                                  
+{//display events from files if any in current directory or simulated events
+  CreateContainers();
+  CreateRenders();
+  
+  TString title="Session with";
+  if(gSystem->IsFileInIncludePath("HMPID.Hits.root")){// tries to open hits
+    fHitFile=TFile::Open("HMPID.Hits.root");       fNevt=fHitFile->GetNkeys(); fType=1; title+=Form(" HITS-%i ",fNevt);
+  }
+  
+  if(gSystem->IsFileInIncludePath("HMPID.Digits.root")){// tries to open clusters
+    fDigFile=TFile::Open("HMPID.Digits.root");  fNevt=fDigFile->GetNkeys(); fType=1;  title+=Form(" DIGITS-%i ",fNevt);
+  }
+  
+  if(gSystem->IsFileInIncludePath("HMPID.RecPoints.root")){// tries to open clusters
+    fCluFile=TFile::Open("HMPID.RecPoints.root");  fNevt=fCluFile->GetNkeys(); fType=1;  title+=Form(" CLUSTERS-%i ",fNevt);
+  }
+  
+  if(gSystem->IsFileInIncludePath("AliESDs.root")){     
+    fEsdFile=TFile::Open("AliESDs.root"); fEsdTree=(TTree*)fEsdFile->Get("esdTree");  fNevt=fEsdTree->GetEntries(); fType=1;  title+=Form(" ESD-%i ",fNevt);
+                                          fEsdTree->SetBranchAddress("ESD", &fEsd);    
+  }
+
+  if(gSystem->IsFileInIncludePath("cosmic.root")){                          //clm: Check if cosmic file is in the folder
+    fCosFile=TFile::Open("cosmic.root");  fCosTree=(TTree*)fCosFile->Get("cosmic");  fNevt=fCosTree->GetEntries();  fType=2;
+    fCosTree->SetBranchAddress("Digs",&fDigLst);   fCosTree->SetBranchAddress("Clus",&fCluLst); 
+  }            
+
+  fCanvas=new TCanvas("all","",600,400); fCanvas->Divide(3,3,0,0);//  pAll->ToggleEditor();
+  fCanvas->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)",0,0,"DoZoom(Int_t,Int_t,Int_t,TObject*)");
+  fCanvas->cd(7); 
+  switch(fType){
+    case 1: fCanvas->SetTitle(title.Data());                      
+                         TButton *pNxtBtn=new TButton("Next"      ,"NextEvent()",0.0,0.0,0.3,0.1); pNxtBtn->Draw(); 
+            if(fHitFile){TButton *pHitBtn=new TButton("Print hits","PrintHits()",0.0,0.2,0.3,0.3); pHitBtn->Draw();}  
+            if(fDigFile){TButton *pDigBtn=new TButton("Print digs","PrintDigs()",0.0,0.4,0.3,0.5); pDigBtn->Draw();}  
+            if(fCluFile){TButton *pCluBtn=new TButton("Print clus","PrintClus()",0.0,0.6,0.3,0.7); pCluBtn->Draw();} 
+            if(fEsdFile){TButton *pEsdBtn=new TButton("Print ESD" ,"PrintEsd()" ,0.0,0.8,0.3,0.9); pEsdBtn->Draw();}
+           
+    break;
+    case 2: fCanvas->SetTitle("COSMIC");
+                         TButton *pCosBtn=new TButton("Next"      ,"NextEvent()",0.0,0.0,0.3,0.1); pCosBtn->Draw(); 
+             
+    break;
+    case 3: fCanvas->SetTitle("SIMULATION"); 
+            TButton *pSimBtn=new TButton("Simulate"  ,"NextEvent()",0.0,0.0,0.3,0.1); pSimBtn->Draw(); 
+            TButton *pHitBtn=new TButton("Print hits","PrintHits()",0.0,0.2,0.3,0.3); pHitBtn->Draw();  
+            TButton *pDigBtn=new TButton("Print digs","PrintDigs()",0.0,0.4,0.3,0.5); pDigBtn->Draw();
+            TButton *pCluBtn=new TButton("Print clus","PrintClus()",0.0,0.6,0.3,0.7); pCluBtn->Draw(); 
+            TButton *pEsdBtn=new TButton("Print ESD" ,"PrintEsd()" ,0.0,0.8,0.3,0.9); pEsdBtn->Draw();
+    break;
+  }
+    
+      
+  NextEvent();           
+  
+      
+}//Hdisp()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++