]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
- fill more histograms to match the central barrel task output
authorkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 17 Apr 2011 14:38:29 +0000 (14:38 +0000)
committerkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 17 Apr 2011 14:38:29 +0000 (14:38 +0000)
- unify the canvases to bear the same names and have the same content for the two tasks

HLT/QA/tasks/AliAnalysisTaskHLT.cxx
HLT/QA/tasks/AliAnalysisTaskHLT.h
HLT/QA/tasks/macros/drawGlobalESDHistograms.C

index bd99f53cfe1dfe7e5d86540abfd1cb80112bc7a5..4116fff3fb60270a0ed310ef1f2e4f6f9ce020d6 100644 (file)
@@ -60,6 +60,7 @@ AliAnalysisTaskSE()
   ,fDCArOff(0)         
   ,fDCAzOff(0)         
   ,fNclusterOff(0)
+  ,fNITSclusterOff(0)
   ,fNclusterOffwCut(0)         
   ,fPhiOff(0)          
   ,fMultOff(0)         
@@ -67,6 +68,9 @@ AliAnalysisTaskSE()
   ,fXvertexOff(0)          
   ,fYvertexOff(0)          
   ,fZvertexOff(0)
+  ,fSPDXvertexOff(0)       
+  ,fSPDYvertexOff(0)       
+  ,fSPDZvertexOff(0)
   ,fEtaOff(0)
   ,fEtaMomentumcutOff(0)
   ,fNclusVSphiOff(0)
@@ -79,6 +83,7 @@ AliAnalysisTaskSE()
   ,fDCArHLT(0)  
   ,fDCAzHLT(0)  
   ,fNclusterHLT(0)
+  ,fNITSclusterHLT(0)
   ,fNclusterHLTwCut(0)
   ,fPhiHLT(0)     
   ,fMultHLT(0)  
@@ -86,6 +91,9 @@ AliAnalysisTaskSE()
   ,fXvertexHLT(0)
   ,fYvertexHLT(0)
   ,fZvertexHLT(0)
+  ,fSPDXvertexHLT(0)    
+  ,fSPDYvertexHLT(0)    
+  ,fSPDZvertexHLT(0)
   ,fEtaHLT(0)
   ,fEtaMomentumcutHLT(0)
   ,fNclusVSphiHLT(0)       
@@ -117,6 +125,7 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   ,fDCArOff(0) 
   ,fDCAzOff(0) 
   ,fNclusterOff(0)
+  ,fNITSclusterOff(0)
   ,fNclusterOffwCut(0) 
   ,fPhiOff(0)          
   ,fMultOff(0)         
@@ -130,10 +139,12 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   ,fNclusVSthetaOff(0)
   ,fEventSpecieOff(0)
   ,fV0cent(0)  
-
+  ,fNcontOff(0)
+  
   ,fChargeHLT(0)      
   ,fMomentumHLT(0)
   ,fNclusterHLT(0)
+  ,fNITSclusterHLT(0)
   ,fNclusterHLTwCut(0)
   ,fPhiHLT(0)     
   ,fMultHLT(0)  
@@ -146,6 +157,7 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   ,fNclusVSphiHLT(0)       
   ,fNclusVSthetaHLT(0)
   ,fEventSpecieHLT(0)
+  ,fNcontHLT(0)
   
   ,fBeamType()
   ,fTextBox(0)
@@ -200,13 +212,17 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   //=========== event properties =================//
 
   if(fBeamType.Contains("Pb")){
-     fMultOff = new TH1F("fMult_off","TPC track multiplicity (OFF)",200,0,2000);
-     fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity (HLT)",200,0,2000);
-     fV0cent  = new TH1F("fV0cent",  "V0 centrality",               100,0, 100);
+     fMultOff  = new TH1F("fMult_off", "TPC track multiplicity (OFF)",200,0,2000);
+     fMultHLT  = new TH1F("fMult_hlt", "TPC track multiplicity (HLT)",200,0,2000);     
+     fNcontOff = new TH1F("fNcont_off","# of contributors (OFF)",200,0,2000);
+     fNcontHLT = new TH1F("fNcont_hlt","# of contributors (HLT)",200,0,2000);     
+     fV0cent   = new TH1F("fV0cent",   "V0 centrality",               100,0, 100);
   } 
   else {
      fMultOff = new TH1F("fMult_off","TPC track multiplicity (OFF)",200,0,200);
-     fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity (HLT)",200,0,200);
+     fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity (HLT)",200,0,200);    
+     fNcontOff = new TH1F("fNcont_off","# of contributors (OFF)",200,0,200);
+     fNcontHLT = new TH1F("fNcont_hlt","# of contributors (HLT)",200,0,200);
   }
  
   fXYvertexOff = new TH2F("fXYvertex_off","XY primary vertex (OFF)",100,-1,1,100,-1,1);
@@ -220,6 +236,15 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
  
   fZvertexOff = new TH1F("fZvertex_off","Z primary vertex (OFF)",100,-20,20);
   fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex (HLT)",100,-20,20);
+
+  fSPDXvertexOff = new TH1F("fSPDXvertex_off","X SPD primary vertex (OFF)",200,-0.5,0.5);
+  fSPDXvertexHLT = new TH1F("fSPDXvertex_hlt","X SPD primary vertex (HLT)",200,-0.5,0.5);
+  fSPDYvertexOff = new TH1F("fSPDYvertex_off","Y SPD primary vertex (OFF)",200,-0.5,0.5);
+  fSPDYvertexHLT = new TH1F("fSPDYvertex_hlt","Y SPD primary vertex (HLT)",200,-0.5,0.5);
+  fSPDZvertexOff = new TH1F("fSPDZvertex_off","Z SPD primary vertex (OFF)",100,-20,20);
+  fSPDZvertexHLT = new TH1F("fSPDZvertex_hlt","Z SPD primary vertex (HLT)",100,-20,20);
     
   fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for OFF",18, 0, 18);
   fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18);
@@ -232,14 +257,17 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fMomentumOff = new TH1F("fMomentum_off", "p_{T} (OFF)", 100, 0, 10);
   fMomentumHLT = new TH1F("fMomentum_hlt", "p_{T} (HLT)", 100, 0, 10);
  
-  fDCArOff = new TH1F("fDCA_off", "DCAr to beam line (OFF)", 200, -15, 15);
-  fDCArHLT = new TH1F("fDCA_hlt", "DCAr to beam line (HLT)", 200, -15, 15);
+  fDCArOff = new TH1F("fDCAr_off", "DCAr to beam line (OFF)", 200, -15, 15);
+  fDCArHLT = new TH1F("fDCAr_hlt", "DCAr to beam line (HLT)", 200, -15, 15);
 
   fDCAzOff = new TH1F("fDCAz_off", "DCAz to beam line (OFF)", 200, -15, 15);
   fDCAzHLT = new TH1F("fDCAz_hlt", "DCAz to beam line (HLT)", 200, -15, 15);
  
   fNclusterOff = new TH1F("fNcluster_off","TPC clusters/track (OFF)", 200, 0, 200);
   fNclusterHLT = new TH1F("fNcluster_hlt","TPC clusters/track (HLT)", 200, 0, 200);
+
+  fNITSclusterOff = new TH1F("fNITScluster_off","ITS clusters/track (OFF)", 10, 0, 10);
+  fNITSclusterHLT = new TH1F("fNITScluster_hlt","ITS clusters/track (HLT)", 10, 0, 10);
  
   fPhiOff = new TH1F("fPhi_off","azimuthal angle distribution (OFF)",90,0,360);
   fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle distribution (HLT)",    90,0,360);
@@ -248,7 +276,6 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)",100,-2,2);
 
 
-
  
   fNclusterOffwCut = new TH1F("fNcluster_wcut_off","TPC clusters per track with cuts (OFF)", 200, 0, 200);
   fNclusterHLTwCut = new TH1F("fNcluster_wcut_hlt","TPC clusters per track with cuts (HLT)", 200, 0, 200);
@@ -273,6 +300,7 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fOutputList->Add(fDCArOff);            fOutputList->Add(fDCArHLT);     
   fOutputList->Add(fDCAzOff);            fOutputList->Add(fDCAzHLT);     
   fOutputList->Add(fNclusterOff);        fOutputList->Add(fNclusterHLT); 
+  fOutputList->Add(fNITSclusterOff);     fOutputList->Add(fNITSclusterHLT); 
   fOutputList->Add(fNclusterOffwCut);    fOutputList->Add(fNclusterHLTwCut); 
   fOutputList->Add(fPhiOff);             fOutputList->Add(fPhiHLT);      
   fOutputList->Add(fMultOff);            fOutputList->Add(fMultHLT);    
@@ -280,11 +308,15 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fOutputList->Add(fXvertexOff);         fOutputList->Add(fXvertexHLT);  
   fOutputList->Add(fYvertexOff);         fOutputList->Add(fYvertexHLT);  
   fOutputList->Add(fZvertexOff);         fOutputList->Add(fZvertexHLT);    
+  fOutputList->Add(fSPDXvertexOff);      fOutputList->Add(fSPDXvertexHLT);  
+  fOutputList->Add(fSPDYvertexOff);      fOutputList->Add(fSPDYvertexHLT);  
+  fOutputList->Add(fSPDZvertexOff);      fOutputList->Add(fSPDZvertexHLT);    
   fOutputList->Add(fEtaOff);             fOutputList->Add(fEtaHLT);  
   fOutputList->Add(fEtaMomentumcutOff);   fOutputList->Add(fEtaMomentumcutHLT);   
   fOutputList->Add(fNclusVSphiOff);      fOutputList->Add(fNclusVSphiHLT);  
   fOutputList->Add(fNclusVSthetaOff);    fOutputList->Add(fNclusVSthetaHLT);
   fOutputList->Add(fEventSpecieOff);     fOutputList->Add(fEventSpecieHLT);  
+  fOutputList->Add(fNcontOff);           fOutputList->Add(fNcontHLT);  
   
   fOutputList->Add(fTextBox);
   if(fBeamType.Contains("Pb")) fOutputList->Add(fV0cent);
@@ -348,21 +380,18 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   Int_t nr_tracksHLT = 0;       
   const AliESDVertex *vertHLT = esdHLT->GetPrimaryVertexTracks();
 
- // Int_t nr_contributorsHLT = vertHLT->GetNContributors();
-    
-//   if(nr_contributorsHLT<1) {
-//     // SPD vertex
-//     vertHLT = esdHLT->GetPrimaryVertexSPD();
-//     if(nr_contributorsHLT<1) {
-//       // NO GOOD VERTEX, SKIP EVENT 
-//       testVertexHLT=kFALSE;
-//     }
-//   }
+
   if(vertHLT->GetStatus()==kTRUE){
     fXYvertexHLT->Fill(vertHLT->GetX(), vertHLT->GetY() );
     fXvertexHLT->Fill( vertHLT->GetX() );
     fYvertexHLT->Fill( vertHLT->GetY() );
     fZvertexHLT->Fill( vertHLT->GetZ() );
+    
+    fSPDXvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetX());
+    fSPDYvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetY());
+    fSPDZvertexHLT->Fill(esdHLT->GetPrimaryVertexSPD()->GetZ());
+    
+    fNcontHLT->Fill(vertHLT->GetNContributors());
   }
   //At the moment no constrains on vertex before filling histograms
   //Should be changed. 
@@ -392,6 +421,7 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
     
     fChargeHLT->Fill(esdtrackHLT->Charge());
     fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
+    fNITSclusterHLT->Fill(esdtrackHLT->GetNcls(0));
     fEtaHLT->Fill(esdtrackHLT->Eta()); 
     fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
     fMomentumHLT->Fill(TMath::Abs(esdtrackHLT->Pt()));  
@@ -402,7 +432,7 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   //----------------- OFFLINE ESD tree ----------------//
   
   Int_t nr_tracksOff = 0;
-  const AliESDVertex *vertOff = esdOFF->GetPrimaryVertexTracks();
+  const AliESDVertex *vertOFF = esdOFF->GetPrimaryVertexTracks();
    
   if(fBeamType.Contains("Pb")){
      fCentrality = esdOFF->GetCentrality(); 
@@ -414,11 +444,17 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
      else fV0cent->Fill(fCentrality->GetCentralityPercentile("V0M"));
   }
   
-  if(vertOff->GetStatus()==kTRUE){
-    fXYvertexOff->Fill(vertOff->GetX(), vertOff->GetY() );
-    fXvertexOff->Fill( vertOff->GetX() );
-    fYvertexOff->Fill( vertOff->GetY() );
-    fZvertexOff->Fill( vertOff->GetZ() );
+  if(vertOFF->GetStatus()==kTRUE){
+    fXYvertexOff->Fill(vertOFF->GetX(), vertOFF->GetY() );
+    fXvertexOff->Fill( vertOFF->GetX() );
+    fYvertexOff->Fill( vertOFF->GetY() );
+    fZvertexOff->Fill( vertOFF->GetZ() );
+  
+    fSPDXvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetX());
+    fSPDYvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetY());
+    fSPDZvertexOff->Fill(esdOFF->GetPrimaryVertexSPD()->GetZ());
+   
+    fNcontOff->Fill(vertOFF->GetNContributors());
   }
 
   fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
@@ -436,7 +472,7 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
     esdtrackOFF->GetXYZ(x);
     Double_t b[3]; 
     AliTracker::GetBxByBz(x,b);
-    Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOff, b, kVeryBig);
+    Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOFF, b, kVeryBig);
     if(!isOK) return;
     
     const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam();
@@ -450,6 +486,7 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
     
     fChargeOff->Fill(esdtrackOFF->Charge());
     fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); 
+    fNITSclusterOff->Fill(esdtrackOFF->GetNcls(0)); 
     fEtaOff->Fill(esdtrackOFF->Eta());         
     fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
     fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) ); 
index 4f075ddb9453185d1b15a0130f3d7059ed75b5c2..e04b0dec2f5d762b76519112ca2791736735ca5f 100644 (file)
@@ -60,6 +60,7 @@ private:
     TH1F  *fDCArOff;           //! track DCAr to beam line      
     TH1F  *fDCAzOff;           //! track DCAz to beam line      
     TH1F  *fNclusterOff;       //! #clusters per track
+    TH1F  *fNITSclusterOff;    //! # ITS clusters per track
     TH1F  *fNclusterOffwCut;   //! #clusters per track w cuts
     TH1F  *fPhiOff;            //! azimuthal angle distribution
     TH1F  *fMultOff;           //! track multiplicity of the event
@@ -67,18 +68,23 @@ private:
     TH1F  *fXvertexOff;        //! X primary vertex distribution
     TH1F  *fYvertexOff;        //! Y primary vertex distribution
     TH1F  *fZvertexOff;        //! Z primary vertex distribution
+    TH1F  *fSPDXvertexOff;     //! SPD X primary vertex distribution
+    TH1F  *fSPDYvertexOff;     //! SPD Y primary vertex distribution
+    TH1F  *fSPDZvertexOff;     //! SPD Z primary vertex distribution
     TH1F  *fEtaOff;            //! pseudorapidity
     TH1F  *fEtaMomentumcutOff;      //! pseudorapidity with DCA cut
     TH2F  *fNclusVSphiOff;     //! clusters per track vs. azimuthal angle 
     TH2F  *fNclusVSthetaOff;   //! clusters per track vs. polar angle 
     TH1F  *fEventSpecieOff;    //! Event Specie Offline
     TH1F  *fV0cent;            //! V0 centrality information
+    TH1F  *fNcontOff;          //! # of contributors to the vertex estimate
     
     TH1F  *fChargeHLT;         //! Charge distribution 
     TH1F  *fMomentumHLT;       //! momentum    
     TH1F  *fDCArHLT;          //! track DCAr to beam line       
     TH1F  *fDCAzHLT;          //! track DCAz to beam line       
     TH1F  *fNclusterHLT;       //! #clusters per track
+    TH1F  *fNITSclusterHLT;    //! # ITS clusters per track
     TH1F  *fNclusterHLTwCut;   //! #clusters per track with cuts
     TH1F  *fPhiHLT;           //! azimuthal angle distribution
     TH1F  *fMultHLT;          //! track multiplicity of the event   
@@ -86,11 +92,15 @@ private:
     TH1F  *fXvertexHLT;        //! X primary vertex distribution
     TH1F  *fYvertexHLT;        //! Y primary vertex distribution
     TH1F  *fZvertexHLT;        //! Z primary vertex distribution
+    TH1F  *fSPDXvertexHLT;     //! SPD X primary vertex distribution
+    TH1F  *fSPDYvertexHLT;     //! SPD Y primary vertex distribution
+    TH1F  *fSPDZvertexHLT;     //! SPD Z primary vertex distribution
     TH1F  *fEtaHLT;           //! pseudorapidity
     TH1F  *fEtaMomentumcutHLT;      //! pseudorapidity with DCA cut
     TH2F  *fNclusVSphiHLT;     //! clusters per track vs. azimuthal angle 
     TH2F  *fNclusVSthetaHLT;   //! clusters per track vs. polar angle 
     TH1F  *fEventSpecieHLT;    //! Event Specie HLT
+    TH1F  *fNcontHLT;          //! # of contributors to the vertex estimate
         
     TString fBeamType;         //! beam type: p-p, Pb-Pb, No beam
     TText *fTextBox;           //! TText box containing run number info and date
index c2056e54186adceb370f433625d33ccb46f783af..c0f6ab4624f2242cd7ce1d8dc62564eaed56efd1 100644 (file)
@@ -34,8 +34,9 @@ using std::endl;
 
 // --------------------- forward declerations --------------//
 
-void printStats(TH1F *h1, TH1F *h2);
 void plot(TH1F *h1, TH1F *h2);
+void printStats(TH1F *h1);
+void printStats(TH1F *h1, TH1F *h2);
 
 //==========================================================//
 
@@ -67,84 +68,113 @@ void drawGlobalESDHistograms(const char* filename="HLT-OFFLINE-GLOBAL-comparison
  folder.ReplaceAll(",","_");
  gSystem->Exec("mkdir "+folder); // create a folder whose name contains run number and date of run
 
- TCanvas *c1 = new TCanvas("c1","HLT vs. offline",1200,700);
- c1->Divide(3,3);
+ TCanvas *c1 = new TCanvas("c1","track properties",1200,700);
+ c1->Divide(4,2);
+
  TH1F *h1 = NULL;
  TH1F *h2 = NULL;
 
- h1 = (TH1F*)list->FindObject("fNcluster_hlt"); if(!h1) { printf("Empty histogram fNcluster_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fNcluster_off"); if(!h2) { printf("Empty histogram fNcluster_off\n"); return; }
- h1->SetTitle("TPC cluster distribution");
- h1->GetXaxis()->SetTitle("TPC clusters per track");
+
+ h1 = (TH1F*)list->FindObject("fMomentum_hlt"); if(!h1) { printf("Empty histogram fMomentum_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fMomentum_off"); if(!h2) { printf("Empty histogram fMomentum_off\n"); return; }
+ h1->SetXTitle("p_{t} (GeV/c)"); 
+ h1->SetTitle("transverse momentum");
+
+ c1->cd(1);
+ plot(h1,h2);
 
  TLegend *leg1 = new TLegend(0.6,0.2,0.8,0.5);
  leg1->SetFillColor(10);
  leg1->SetLineColor(10);
  leg1->AddEntry(h1,"HLT", "l");
  leg1->AddEntry(h2,"OFF", "l");
+ leg1->Draw("same");
 
- c1->cd(1);
+//------------------------------------------------- 
+
+ h1 = (TH1F*)list->FindObject("fNcluster_hlt"); if(!h1) { printf("Empty histogram fNcluster_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fNcluster_off"); if(!h2) { printf("Empty histogram fNcluster_off\n"); return; }
+ h1->SetTitle("TPC cluster distribution");
+ h1->GetXaxis()->SetTitle("TPC clusters per track");
+
+ c1->cd(2);
+ plot(h1,h2);
+
+//------------------------------------------------- 
+
+ h1 = (TH1F*)list->FindObject("fEta_hlt"); if(!h1) { printf("Empty histogram fEta_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fEta_off"); if(!h2) { printf("Empty histogram fEta_off\n"); return; }
+ h1->SetTitle("pseudorapidity");
+ h1->SetXTitle("#eta");
+
+ c1->cd(3);
+ plot(h1,h2);
+
+//-------------------------------------------------
+
+ h1 = (TH1F*)list->FindObject("fPhi_hlt"); if(!h1) { printf("Empty histogram fPhi_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fPhi_off"); if(!h2) { printf("Empty histogram fPhi_off\n"); return; }
+ h1->SetTitle("azimuthal angle");
+ h1->SetXTitle("#phi (deg)");
+
+ c1->cd(4);
  plot(h1,h2);
 
 //-------------------------------------------------
 
- h1 = (TH1F*)list->FindObject("fDCA_hlt"); if(!h1) { printf("Empty histogram fDCA_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fDCA_off"); if(!h2) { printf("Empty histogram fDCA_off\n"); return; }
+ h1 = (TH1F*)list->FindObject("fDCAr_hlt"); if(!h1) { printf("Empty histogram fDCAr_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fDCAr_off"); if(!h2) { printf("Empty histogram fDCAr_off\n"); return; }
  h1->SetTitle("DCA between track and vertex on XY plane");
  h1->SetXTitle("DCAr (cm)");
  
- c1->cd(2);
+ c1->cd(5);
  plot(h1,h2);
 
 //------------------------------------------------- 
 
- h1 = (TH1F*)list->FindObject("fMult_hlt"); if(!h1) { printf("Empty histogram fMult_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fMult_off"); if(!h2) { printf("Empty histogram fMult_off\n"); return; }
- h1->SetTitle("track multiplicity");
-
- c1->cd(3);
+ h1 = (TH1F*)list->FindObject("fDCAz_hlt"); if(!h1) { printf("Empty histogram fDCAz_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fDCAz_off"); if(!h2) { printf("Empty histogram fDCAz_off\n"); return; }
+ h1->SetTitle("DCA between track and beam line");
+ h1->SetXTitle("DCAz (cm)");
+ c1->cd(6);
  plot(h1,h2);
 
 //------------------------------------------------- 
 
+
  h1 = (TH1F*)list->FindObject("fCharge_hlt"); if(!h1) { printf("Empty histogram fCharge_hlt\n"); return; }
  h2 = (TH1F*)list->FindObject("fCharge_off"); if(!h2) { printf("Empty histogram fCharge_off\n"); return; }
  h1->SetXTitle("polarity"); 
  h1->SetTitle("charge distribution");
 
- c1->cd(4);
+ c1->cd(7);
  plot(h1,h2);
 
 //------------------------------------------------- 
+ h1 = (TH1F*)list->FindObject("fNITScluster_hlt"); if(!h1) { printf("Empty histogram fNITScluster_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fNITScluster_off"); if(!h2) { printf("Empty histogram fNITScluster_off\n"); return; }
+ h1->SetTitle("ITS cluster distribution");
+ h1->GetXaxis()->SetTitle("ITS clusters per track");
 
- h1 = (TH1F*)list->FindObject("fMomentum_hlt"); if(!h1) { printf("Empty histogram fMomentum_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fMomentum_off"); if(!h2) { printf("Empty histogram fMomentum_off\n"); return; }
- h1->SetXTitle("p_{t} (GeV/c)"); 
- h1->SetTitle("transverse momentum");
-
- c1->cd(5);
+ c1->cd(8);
  plot(h1,h2);
- leg1->Draw("same");
 
-//------------------------------------------------- 
 
- h1 = (TH1F*)list->FindObject("fEta_hlt"); if(!h1) { printf("Empty histogram fEta_hlt\n"); return; }
- h2 = (TH1F*)list->FindObject("fEta_off"); if(!h2) { printf("Empty histogram fEta_off\n"); return; }
- h1->SetTitle("pseudorapidity");
- h1->SetXTitle("#eta");
+//============= EVENT PROPERTIES ===============//
 
- c1->cd(6);
- plot(h1,h2);
-
-//------------------------------------------------- 
+ TCanvas *c2 = new TCanvas("c2","vertex event properties",1200,700);
+ c2->Divide(3,2);
 
  h1 = (TH1F*)list->FindObject("fXvertex_hlt"); if(!h1) { printf("Empty histogram fXvertex_hlt\n"); return; }
  h2 = (TH1F*)list->FindObject("fXvertex_off"); if(!h2) { printf("Empty histogram fXvertex_off\n"); return; }
  h1->SetXTitle("x (cm)");
  h1->SetTitle("x of primary vertex");
 
- c1->cd(7);
+ c2->cd(1);
  plot(h1,h2);
+ leg1->Draw("same");
 
 //------------------------------------------------- 
 
@@ -153,7 +183,7 @@ void drawGlobalESDHistograms(const char* filename="HLT-OFFLINE-GLOBAL-comparison
  h1->SetXTitle("y (cm)");
  h1->SetTitle("y of primary vertex");
  
- c1->cd(8);
+ c2->cd(2);
  plot(h1,h2);
 
 //------------------------------------------------- 
@@ -163,13 +193,76 @@ void drawGlobalESDHistograms(const char* filename="HLT-OFFLINE-GLOBAL-comparison
  h1->SetXTitle("z (cm)");
  h1->SetTitle("z of primary vertex");
 
- c1->cd(9);
+ c2->cd(3);
+ plot(h1,h2);
+
+//------------------------------------------------- 
+ h1 = (TH1F*)list->FindObject("fSPDXvertex_hlt"); if(!h1) { printf("Empty histogram fSPDXvertex_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fSPDXvertex_off"); if(!h2) { printf("Empty histogram fSPDXvertex_off\n"); return; }
+ h1->SetXTitle("x (cm)");
+ h1->SetTitle("x of SPD primary vertex");
+
+ c2->cd(4);
  plot(h1,h2);
 
 //------------------------------------------------- 
 
- c1->SaveAs(folder+"/HLT-offline.png");  
- c1->SaveAs(folder+"/HLT-offline.root");  
+ h1 = (TH1F*)list->FindObject("fSPDYvertex_hlt"); if(!h1) { printf("Empty histogram fSPDYvertex_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fSPDYvertex_off"); if(!h2) { printf("Empty histogram fSPDYvertex_off\n"); return; }
+ h1->SetXTitle("y (cm)");
+ h1->SetTitle("y of SPD primary vertex");
+ c2->cd(5);
+ plot(h1,h2);
+
+//------------------------------------------------- 
+
+ h1 = (TH1F*)list->FindObject("fSPDZvertex_hlt"); if(!h1) { printf("Empty histogram fSPDZvertex_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fSPDZvertex_off"); if(!h2) { printf("Empty histogram fSPDZvertex_off\n"); return; }
+ h1->SetXTitle("z (cm)");
+ h1->SetTitle("z of SPD primary vertex");
+
+ c2->cd(6);
+ plot(h1,h2);
+
+//------------------------------------------------- 
+
+ TCanvas *c3 = new TCanvas("c3","general event properties",1200,500);
+ c3->Divide(3,1);
+
+ h1 = (TH1F*)list->FindObject("fMult_hlt"); if(!h1) { printf("Empty histogram fMult_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fMult_off"); if(!h2) { printf("Empty histogram fMult_off\n"); return; }
+ h1->SetTitle("TPC track multiplicity");
+
+ c3->cd(1);
+ plot(h1,h2);
+ leg1->Draw("same");
+
+//------------------------------------------------- 
+
+ h1 = (TH1F*)list->FindObject("fNcont_hlt"); if(!h1) { printf("Empty histogram fNcont_hlt\n"); return; }
+ h2 = (TH1F*)list->FindObject("fNcont_off"); if(!h2) { printf("Empty histogram fNcont_off\n"); return; }
+ h1->SetTitle("# of contributors");
+
+ c3->cd(2);
+ plot(h1,h2);
+
+//------------------------------------------------- 
+
+ h1 = (TH1F*)list->FindObject("fV0cent"); if(!h1) { printf("Empty histogram fV0cent\n"); return; }
+ c3->cd(3);
+ h1->Draw();
+ printStats(h1);
+
+//------------------------------------------------- 
+
+ c1->SaveAs(folder+"/track_properties.png");  
+ c1->SaveAs(folder+"/track_properties.root");  
+ c2->SaveAs(folder+"/vertex_event_properties.png");  
+ c2->SaveAs(folder+"/vertex_event_properties.root");  
+ c3->SaveAs(folder+"/general_event_properties.png");  
+ c3->SaveAs(folder+"/general_event_properties.root");  
  return;       
 }
 
@@ -189,6 +282,13 @@ void printStats(TH1F* h1, TH1F* h2){
   return;
 }
 
+void printStats(TH1F* h1){    
+  gPad->Update();
+  TPaveStats *st1 = (TPaveStats*)h1->FindObject("stats"); if(!st1) { printf("TPaveStats st1 is 0x0\n"); return; }      
+  st1->SetLineColor(0);
+  return;
+}
+
 void plot(TH1F *h1, TH1F *h2){ 
   //Y axis
   if(h1->GetMaximum() > h2->GetMaximum()) h2->SetMaximum(1.1*h1->GetMaximum());