]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/QA/tasks/AliAnalysisTaskHLT.cxx
changes for Vertex and Tracks classes
[u/mrichter/AliRoot.git] / HLT / QA / tasks / AliAnalysisTaskHLT.cxx
index 46328c9de3bc4a32a72a2f33ac14b40aba0fa33c..b3b1fe32ebbd023429135e8cfa58eb6e074021b6 100644 (file)
@@ -38,13 +38,16 @@ class AliAnalysisManager;
 #include "AliESDtrackCuts.h"
 #include "AliESDInputHandler.h"
 #include "AliTracker.h" 
+#include "AliCentrality.h"
 
 #include "TText.h"
 #include "TTimeStamp.h"
 
+#include <iostream>
+
 ClassImp(AliAnalysisTaskHLT)
 
-//======================================================================================================
+//===============================================================//
 
 AliAnalysisTaskHLT::AliAnalysisTaskHLT()
 :
@@ -53,45 +56,62 @@ AliAnalysisTaskSE()
   //,fESDOfftrackCuts(0)
   //,fESDHLTtrackCuts(0)
   ,fOutputList(0)
-  ,fHistTrigger(0)
+  //,fHistTrigger(0)
   ,fChargeOff(0)  
   ,fMomentumOff(0)
   ,fDCArOff(0)         
   ,fDCAzOff(0)         
   ,fNclusterOff(0)
-  ,fNclusterOffwCut(0)         
+  ,fNITSclusterOff(0)
   ,fPhiOff(0)          
+  ,fEtaOff(0)
   ,fMultOff(0)         
-  ,fXYvertexOff(0)     
   ,fXvertexOff(0)          
   ,fYvertexOff(0)          
   ,fZvertexOff(0)
-  ,fEtaOff(0)
-  ,fEtaMomentumcutOff(0)
-  ,fNclusVSphiOff(0)
-  ,fNclusVSthetaOff(0)
+  ,fSPDXvertexOff(0)       
+  ,fSPDYvertexOff(0)       
+  ,fSPDZvertexOff(0)
   ,fEventSpecieOff(0)
+  ,fV0cent(0)  
   
   ,fChargeHLT(0)
   ,fMomentumHLT(0)
   ,fDCArHLT(0)  
   ,fDCAzHLT(0)  
   ,fNclusterHLT(0)
-  ,fNclusterHLTwCut(0)
+  ,fNITSclusterHLT(0)
   ,fPhiHLT(0)     
+  ,fEtaHLT(0)
+  
+  ,fChargeHLTcut(0)
+  ,fMomentumHLTcut(0)
+  ,fDCArHLTcut(0)  
+  ,fDCAzHLTcut(0)  
+  ,fNclusterHLTcut(0)
+  ,fNITSclusterHLTcut(0)
+  ,fPhiHLTcut(0)     
+  ,fEtaHLTcut(0)
+  
   ,fMultHLT(0)  
-  ,fXYvertexHLT(0)
   ,fXvertexHLT(0)
   ,fYvertexHLT(0)
   ,fZvertexHLT(0)
-  ,fEtaHLT(0)
-  ,fEtaMomentumcutHLT(0)
-  ,fNclusVSphiHLT(0)       
-  ,fNclusVSthetaHLT(0)
+  ,fSPDXvertexHLT(0)    
+  ,fSPDYvertexHLT(0)    
+  ,fSPDZvertexHLT(0)
   ,fEventSpecieHLT(0)
+  
   ,fBeamType()
   ,fTextBox(0)
+  ,fCuts(0)
   ,fSwitch(kTRUE)
+  ,fCentrality()
+  ,fEta(0)
+  ,fPt(0)
+  ,fDCAr(0)
+  ,fDCAz(0)
+  ,fVertexZ(0)
 {
   // Constructor
   // Define input and output slots here
@@ -100,50 +120,63 @@ AliAnalysisTaskSE()
   // Output slot #0 writes into a TH1 container
 }
  
-AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
+AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name, float eta, float pt, float DCAr, float DCAz, float vertexZ)
   :
   AliAnalysisTaskSE(name) 
   ,fUseHLTTrigger(kFALSE)   
   //,fESDOfftrackCuts(0)
   //,fESDHLTtrackCuts(0)
   ,fOutputList(0)
-  ,fHistTrigger(0)
+  //,fHistTrigger(0)
   ,fChargeOff(0)  
   ,fMomentumOff(0)
   ,fDCArOff(0) 
   ,fDCAzOff(0) 
   ,fNclusterOff(0)
-  ,fNclusterOffwCut(0) 
+  ,fNITSclusterOff(0)
   ,fPhiOff(0)          
+  ,fEtaOff(0)
   ,fMultOff(0)         
-  ,fXYvertexOff(0)     
   ,fXvertexOff(0)          
   ,fYvertexOff(0)          
   ,fZvertexOff(0)
-  ,fEtaOff(0)
-  ,fEtaMomentumcutOff(0)
-  ,fNclusVSphiOff(0)
-  ,fNclusVSthetaOff(0)
   ,fEventSpecieOff(0)
-
+  ,fV0cent(0)  
+  ,fNcontOff(0)
+  
   ,fChargeHLT(0)      
   ,fMomentumHLT(0)
   ,fNclusterHLT(0)
-  ,fNclusterHLTwCut(0)
+  ,fNITSclusterHLT(0)
   ,fPhiHLT(0)     
+  ,fEtaHLT(0)
+  
+  ,fChargeHLTcut(0)      
+  ,fMomentumHLTcut(0)
+  ,fDCArHLTcut(0)  
+  ,fDCAzHLTcut(0)  
+  ,fNclusterHLTcut(0)
+  ,fNITSclusterHLTcut(0)
+  ,fPhiHLTcut(0)     
+  ,fEtaHLTcut(0)
+  
   ,fMultHLT(0)  
-  ,fXYvertexHLT(0)
   ,fXvertexHLT(0)
   ,fYvertexHLT(0)
   ,fZvertexHLT(0)
-  ,fEtaHLT(0)
-  ,fEtaMomentumcutHLT(0)
-  ,fNclusVSphiHLT(0)       
-  ,fNclusVSthetaHLT(0)
   ,fEventSpecieHLT(0)
+  ,fNcontHLT(0)
+  
   ,fBeamType()
   ,fTextBox(0)
+  ,fCuts(0)
   ,fSwitch(kTRUE)
+  ,fCentrality()
+  ,fEta(eta)
+  ,fPt(pt)
+  ,fDCAr(DCAr)
+  ,fDCAz(DCAz)
+  ,fVertexZ(vertexZ)
 { 
   // Constructor
   // Define input and output slots here
@@ -153,8 +186,7 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   DefineOutput(1, TList::Class());
 }
 
-
-//----------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------//
 
 void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   // Create histograms
@@ -187,99 +219,114 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE"); 
   */
 
-  fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 24, 0, 24);
-  fHistTrigger->GetXaxis()->SetTitle("");  
-  fHistTrigger->GetYaxis()->SetTitle("#Events"); 
+  //fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 24, 0, 24);
+  //fHistTrigger->GetXaxis()->SetTitle("");  
+  //fHistTrigger->GetYaxis()->SetTitle("#Events"); 
 
   //=========== 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);
+     fMultOff  = new TH1F("fMult_off", "",200,0,2000);
+     fMultHLT  = new TH1F("fMult_hlt", "TPC track multiplicity",200,0,2000); fMultHLT->SetXTitle("TPC track multiplicity");  
+     fNcontOff = new TH1F("fNcont_off","",200,0,2000);
+     fNcontHLT = new TH1F("fNcont_hlt","# of contributors",200,0,2000); fNcontHLT->SetXTitle("# of contributors");  
+     fV0cent   = new TH1F("fV0cent",   "V0 centrality",    100,0, 100); fV0cent->SetXTitle("V0 centrality");
   } 
   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);
+     fMultOff = new TH1F("fMult_off","",200,0,200);
+     fMultHLT = new TH1F("fMult_hlt","TPC track multiplicity",200,0,200); fMultHLT->SetXTitle("TPC track multiplicity");     
+     fNcontOff = new TH1F("fNcont_off","",200,0,200);
+     fNcontHLT = new TH1F("fNcont_hlt","# of contributors",200,0,200); fNcontHLT->SetXTitle("# of contributors");
   }
+   
+  fXvertexOff = new TH1F("fXvertex_off","",200,-0.5,0.5);
+  fXvertexHLT = new TH1F("fXvertex_hlt","X primary vertex",200,-0.5,0.5); fXvertexHLT->SetXTitle("x (cm)");
  
-  fXYvertexOff = new TH2F("fXYvertex_off","XY primary vertex (OFF)",100,-1,1,100,-1,1);
-  fXYvertexHLT = new TH2F("fXYvertex_hlt","XY primary vertex (HLT)",100,-1,1,100,-1,1);
-  
-  fXvertexOff = new TH1F("fXvertex_off","X primary vertex (OFF)",200,-0.5,0.5);
-  fXvertexHLT = new TH1F("fXvertex_hlt","X primary vertex (HLT)",200,-0.5,0.5);
+  fYvertexOff = new TH1F("fYvertex_off","",200,-0.5,0.5);
+  fYvertexHLT = new TH1F("fYvertex_hlt","Y primary vertex",200,-0.5,0.5); fYvertexHLT->SetXTitle("y (cm)");
+  fZvertexOff = new TH1F("fZvertex_off","",100,-20,20);
+  fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex",100,-20,20); fZvertexHLT->SetXTitle("z (cm)");
+
+  fSPDXvertexOff = new TH1F("fSPDXvertex_off","",200,-0.5,0.5);
+  fSPDXvertexHLT = new TH1F("fSPDXvertex_hlt","X SPD primary vertex",200,-0.5,0.5); fSPDXvertexHLT->SetXTitle("x (cm)");
  
-  fYvertexOff = new TH1F("fYvertex_off","Y primary vertex (OFF)",200,-0.5,0.5);
-  fYvertexHLT = new TH1F("fYvertex_hlt","Y primary vertex (HLT)",200,-0.5,0.5);
+  fSPDYvertexOff = new TH1F("fSPDYvertex_off","",200,-0.5,0.5);
+  fSPDYvertexHLT = new TH1F("fSPDYvertex_hlt","Y SPD primary vertex",200,-0.5,0.5); fSPDYvertexHLT->SetXTitle("y (cm)");
  
-  fZvertexOff = new TH1F("fZvertex_off","Z primary vertex (OFF)",100,-20,20);
-  fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex (HLT)",100,-20,20);
+  fSPDZvertexOff = new TH1F("fSPDZvertex_off","",100,-20,20);
+  fSPDZvertexHLT = new TH1F("fSPDZvertex_hlt","Z SPD primary vertex",100,-20,20); fSPDZvertexHLT->SetXTitle("z (cm)");
     
-  fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for OFF",18, 0, 18);
-  fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18);
+  fEventSpecieOff = new TH1F("fEventSpecie_off","",18, 0, 18);
+  fEventSpecieHLT = new TH1F("fEventSpecie_hlt","event species",18, 0, 18);
 
-  //=========== track properties =================//
+  //============== track properties =================//
 
-  fChargeOff = new TH1F("fCharge_off", "Charge distribution (OFF)", 3, -1.5, 1.5);  
-  fChargeHLT = new TH1F("fCharge_hlt", "Charge distribution (HLT)", 3, -1.5, 1.5);  
+  fChargeOff = new TH1F("fCharge_off", "", 3, -1.5, 1.5);  
+  fChargeHLT = new TH1F("fCharge_hlt", "charge distribution", 3, -1.5, 1.5); fChargeHLT->SetXTitle("polarity");
   
-  fMomentumOff = new TH1F("fMomentum_off", "p_{T} (OFF)", 100, 0, 10);
-  fMomentumHLT = new TH1F("fMomentum_hlt", "p_{T} (HLT)", 100, 0, 10);
+  fMomentumOff = new TH1F("fMomentum_off", "", 100, 0, 10);
+  fMomentumHLT = new TH1F("fMomentum_hlt", "transverse momentum", 100, 0, 10); fMomentumHLT->SetXTitle("p_{T} (GeV/c)");
  
-  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", "", 200, -15, 15);
+  fDCArHLT = new TH1F("fDCAr_hlt", "DCAr", 200, -15, 15); fDCArHLT->SetXTitle("DCAr (cm)");
 
-  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);
+  fDCAzOff = new TH1F("fDCAz_off", "", 200, -15, 15);
+  fDCAzHLT = new TH1F("fDCAz_hlt", "DCAz", 200, -15, 15); fDCAzHLT->SetXTitle("DCAz (cm)");
  
-  fPhiOff = new TH1F("fPhi_off","azimuthal angle distribution (OFF)",90,0,360);
-  fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle distribution (HLT)",    90,0,360);
-
-  fEtaOff = new TH1F("fEta_off","pseudorapidity (OFF)",100,-2,2);
-  fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)",100,-2,2);
-
-
+  fNclusterOff = new TH1F("fNcluster_off","", 200, 0, 200);
+  fNclusterHLT = new TH1F("fNcluster_hlt","TPC clusters/track", 200, 0, 200); fNclusterHLT->SetXTitle("TPC clusters/track");
 
+  fNITSclusterOff = new TH1F("fNITScluster_off","", 10, 0, 10);
+  fNITSclusterHLT = new TH1F("fNITScluster_hlt","ITS clusters/track", 10, 0, 10); fNITSclusterHLT->SetXTitle("ITS clusters/track");
  
-  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);
-
-  fEtaMomentumcutOff = new TH1F("fEtaMomentumcut_off","pseudorapidity DCAcut (OFF)",100,-2,2);
-  fEtaMomentumcutHLT = new TH1F("fEtaMomentumcut_hlt","pseudorapidity DCAcut (HLT)",    100,-2,2);
+  fPhiOff = new TH1F("fPhi_off","",90,0,360);
+  fPhiHLT = new TH1F("fPhi_hlt","azimuthal angle",90,0,360); fPhiHLT->SetXTitle("#phi (deg)");
 
-  fNclusVSphiOff = new TH2F("fNclus_vs_phi_off","clusters per track vs. #phi (OFF)",360,0,360,160,0,160);
-  fNclusVSphiHLT = new TH2F("fNclus_vs_phi_hlt","clusters per track vs. #phi (HLT)",    360,0,360,160,0,160);
+  fEtaOff = new TH1F("fEta_off","",100,-2,2);
+  fEtaHLT = new TH1F("fEta_hlt","pseudorapidity",100,-2,2); fEtaHLT->SetXTitle("#eta");
   
-  fNclusVSthetaOff = new TH2F("fNclus_vs_theta_off","clusters per track vs. #theta (OFF)",180,0,180,160,0,160);
-  fNclusVSthetaHLT = new TH2F("fNclus_vs_theta_hlt","clusters per track vs. #theta (HLT)",    180,0,180,160,0,160);
+  fChargeHLTcut      = new TH1F("fCharge_hltcut",     "",  3, -1.5, 1.5);  fChargeHLTcut->SetXTitle("polarity");   
+  fMomentumHLTcut    = new TH1F("fMomentum_hltcut",   "",100,    0,  10);  fMomentumHLTcut ->SetXTitle("p_{T} (GeV/c)");  
+  fDCArHLTcut        = new TH1F("fDCAr_hltcut",       "",200,  -15,  15);  fDCArHLTcut->SetXTitle("DCAr (cm)");       
+  fDCAzHLTcut        = new TH1F("fDCAz_hltcut",       "",200,  -15,  15);  fDCAzHLTcut->SetXTitle("DCAz (cm)");      
+  fNclusterHLTcut    = new TH1F("fNcluster_hltcut",   "",200,    0, 200);  fNclusterHLTcut->SetXTitle("TPC clusters/track");   
+  fNITSclusterHLTcut = new TH1F("fNITScluster_hltcut","", 10,    0,  10);  fNITSclusterHLTcut->SetXTitle("ITS clusters/track");
+  fPhiHLTcut         = new TH1F("fPhi_hltcut",        "", 90,    0, 360);  fPhiHLTcut->SetXTitle("#phi (deg)");    
+  fEtaHLTcut         = new TH1F("fEta_hltcut",        "",100,   -2,   2);  fEtaHLTcut->SetXTitle("#eta");           
+
   //--------------------------------------------------//
   
   fTextBox = new TText(); 
-
-  fOutputList->Add(fHistTrigger);
-
-  fOutputList->Add(fChargeOff);          fOutputList->Add(fChargeHLT);  
-  fOutputList->Add(fMomentumOff);        fOutputList->Add(fMomentumHLT); 
-  fOutputList->Add(fDCArOff);            fOutputList->Add(fDCArHLT);     
-  fOutputList->Add(fDCAzOff);            fOutputList->Add(fDCAzHLT);     
-  fOutputList->Add(fNclusterOff);        fOutputList->Add(fNclusterHLT); 
-  fOutputList->Add(fNclusterOffwCut);    fOutputList->Add(fNclusterHLTwCut); 
-  fOutputList->Add(fPhiOff);             fOutputList->Add(fPhiHLT);      
+  fCuts = new TText(); 
+  fCuts->SetName("cuts");
+  TString s = Form("|#eta|<%2g, p_{T}>%2g, |DCAr|<%2g, |DCAz|<%2g, |vertexZ|<%2g", TMath::Abs(fEta), TMath::Abs(fPt), TMath::Abs(fDCAr), TMath::Abs(fDCAz),TMath::Abs(fVertexZ));
+  fCuts->SetTitle(s);  
+  
+  //fOutputList->Add(fHistTrigger);
+  fOutputList->Add(fChargeOff);          fOutputList->Add(fChargeHLT);       fOutputList->Add(fChargeHLTcut);  
+  fOutputList->Add(fMomentumOff);        fOutputList->Add(fMomentumHLT);     fOutputList->Add(fMomentumHLTcut); 
+  fOutputList->Add(fDCArOff);            fOutputList->Add(fDCArHLT);         fOutputList->Add(fDCArHLTcut);     
+  fOutputList->Add(fDCAzOff);            fOutputList->Add(fDCAzHLT);         fOutputList->Add(fDCAzHLTcut);     
+  fOutputList->Add(fNclusterOff);        fOutputList->Add(fNclusterHLT);     fOutputList->Add(fNclusterHLTcut);         
+  fOutputList->Add(fNITSclusterOff);     fOutputList->Add(fNITSclusterHLT);  fOutputList->Add(fNITSclusterHLTcut);  
+  fOutputList->Add(fPhiOff);             fOutputList->Add(fPhiHLT);          fOutputList->Add(fPhiHLTcut);
+  fOutputList->Add(fEtaOff);             fOutputList->Add(fEtaHLT);          fOutputList->Add(fEtaHLTcut);
+  
   fOutputList->Add(fMultOff);            fOutputList->Add(fMultHLT);    
-  fOutputList->Add(fXYvertexOff);        fOutputList->Add(fXYvertexHLT); 
   fOutputList->Add(fXvertexOff);         fOutputList->Add(fXvertexHLT);  
   fOutputList->Add(fYvertexOff);         fOutputList->Add(fYvertexHLT);  
   fOutputList->Add(fZvertexOff);         fOutputList->Add(fZvertexHLT);    
-  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(fSPDXvertexOff);      fOutputList->Add(fSPDXvertexHLT);  
+  fOutputList->Add(fSPDYvertexOff);      fOutputList->Add(fSPDYvertexHLT);  
+  fOutputList->Add(fSPDZvertexOff);      fOutputList->Add(fSPDZvertexHLT);    
   fOutputList->Add(fEventSpecieOff);     fOutputList->Add(fEventSpecieHLT);  
+  fOutputList->Add(fNcontOff);           fOutputList->Add(fNcontHLT);  
   
-  fOutputList->Add(fTextBox);  
+  fOutputList->Add(fTextBox);
+  fOutputList->Add(fCuts);
+  if(fBeamType.Contains("Pb")) fOutputList->Add(fV0cent);
   //SetupESDtrackCuts();
   PostData(1, fOutputList);
 }
@@ -317,7 +364,7 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
      fSwitch=kFALSE;
   }
 
-  Double_t bfield = esdOFF->GetMagneticField();
+  //Double_t bfield = esdOFF->GetMagneticField();
  
 //   UInt_t Statusnames[12]={AliESDtrack::kTPCin,
 //                       AliESDtrack::kITSin,
@@ -339,24 +386,17 @@ 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. 
 
   fEventSpecieHLT->Fill(esdHLT->GetEventSpecie());
 
@@ -373,34 +413,51 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
     if(!(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue; // only interested in tracks with kTPCin flag
     if(esdtrackHLT->GetTPCNcls()<=0) continue; 
     nr_tracksHLT++;
-
-    //Calculating DCA "old" fashion
-    Float_t dca[2];
-    esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca);
-
-    fDCArHLT->Fill(dca[0]);  
-    fDCAzHLT->Fill(dca[1]);
+   
+    Double_t x[3]; 
+    esdtrackHLT->GetXYZ(x);
+    Double_t b[3]; 
+    AliTracker::GetBxByBz(x,b);
+    Bool_t isOK = esdtrackHLT->RelateToVertexTPCBxByBz(vertHLT, b, kVeryBig);
+
+    Float_t dca[2]={0,0}; Float_t cov[3]={0,0,0}; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
+    if(isOK){
+       const AliExternalTrackParam *track = esdtrackHLT->GetTPCInnerParam();
+       if(!track) return;    
+       esdtrackHLT->GetImpactParametersTPC(dca,cov);
+       fDCArHLT->Fill(dca[0]);
+       fDCAzHLT->Fill(dca[1]);
+    }
+//     Float_t dca[2];
+//     if(vertHLT->GetStatus()==kTRUE){
+//        esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetX(), esdHLT->GetPrimaryVertex()->GetY(), esdHLT->GetPrimaryVertex()->GetZ(), bfield, dca);
+//        fDCArHLT->Fill(dca[0]);  
+//        fDCAzHLT->Fill(dca[1]);
+//     }
     
     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()));  
     
-    // ???? if(TMath::Abs(esdtrackHLT->Pt()) > 0.3) fEtaMomentumcutHLT->Fill(esdtrackHLT->Eta());
-      
-//     if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)){
-//       fNclusVSphiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
-//       fNclusVSthetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
-//     }
-
-   
-//     if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout))
-//       fNclusterHLTwCut->Fill(esdtrackHLT->GetTPCNcls());
-    
-//     if(esdHLT->IsHLTTriggerFired()){
-//              
-//     }// end if for triggered hlt events        
+    if( TMath::Abs(esdtrackHLT->Eta())<TMath::Abs(fEta) && 
+        TMath::Abs(esdtrackHLT->Pt())>TMath::Abs(fPt) && 
+        TMath::Abs(dca[0])<TMath::Abs(fDCAr) && 
+        TMath::Abs(dca[1])<TMath::Abs(fDCAz) &&
+        TMath::Abs(vertHLT->GetZ())<TMath::Abs(fVertexZ) )
+    {       
+       fChargeHLTcut->Fill(esdtrackHLT->Charge());
+       fNclusterHLTcut->Fill(esdtrackHLT->GetTPCNcls());
+       fDCArHLTcut->Fill(dca[0]);  
+       fDCAzHLTcut->Fill(dca[1]);
+       fNITSclusterHLTcut->Fill(esdtrackHLT->GetNcls(0));
+       fEtaHLTcut->Fill(esdtrackHLT->Eta()); 
+       fPhiHLTcut->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
+       fMomentumHLTcut->Fill(TMath::Abs(esdtrackHLT->Pt()));  
+    }    
   } // end of loop over hlt tracks
 
   if(nr_tracksHLT>0) fMultHLT->Fill(nr_tracksHLT);
@@ -408,22 +465,28 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   //----------------- OFFLINE ESD tree ----------------//
   
   Int_t nr_tracksOff = 0;
-  const AliESDVertex *vertOff = esdOFF->GetPrimaryVertexTracks();
-
-//   if(vertOff->GetNContributors()<1) {
-//     // SPD vertex
-//     vertOff = esdOFF->GetPrimaryVertexSPD();
-//     if(vertOff->GetNContributors()<1) {
-//       // NO GOOD VERTEX, SKIP EVENT 
-//       testVertex=kFALSE;
-//     }
-//   }
+  const AliESDVertex *vertOFF = esdOFF->GetPrimaryVertexTracks();
+   
+  if(fBeamType.Contains("Pb")){
+     fCentrality = esdOFF->GetCentrality(); 
+     // this information is only available from the offline ESD for 2010 PbPb data, the V0 info was not stored in the HLTesd (17.04.11, Kelly)
+     if(!fCentrality){
+        printf("Centrality pointer is empty\n");
+        return;
+     }
+     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){
+     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,48 +499,42 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
     if(!(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin)) continue; 
     if(esdtrackOFF->GetTPCNcls()<=0) continue; 
     nr_tracksOff++;
-
-    //Filling of DCA for Offline
-
+   
     Double_t x[3]; 
     esdtrackOFF->GetXYZ(x);
     Double_t b[3]; 
     AliTracker::GetBxByBz(x,b);
-    Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOff, b, kVeryBig);
-    if(!isOK) return;
-    
-    const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam();
-    if(!track) return;
-    
-    Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
-    esdtrackOFF->GetImpactParametersTPC(dca,cov);
-
-    fDCArOff->Fill(dca[0]);
-    fDCAzOff->Fill(dca[1]);
+    Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOFF, b, kVeryBig);
+    if(isOK){
+       const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam();
+       if(!track) return;    
+       Float_t dca[2]={0,0}; Float_t cov[3]={0,0,0}; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
+       esdtrackOFF->GetImpactParametersTPC(dca,cov);
+       fDCArOff->Fill(dca[0]);
+       fDCAzOff->Fill(dca[1]);
+    }
+//     // calculate the offline DCAs the same way like for HLT. The above way is calculating the DCA for the TPC inner barrel surface (Kelly, 17.04.11)
+//     Float_t dca[2];
+//     if(vertOFF->GetStatus()==kTRUE){
+//        esdtrackOFF->GetDZ(esdOFF->GetPrimaryVertex()->GetX(), esdOFF->GetPrimaryVertex()->GetY(), esdOFF->GetPrimaryVertex()->GetZ(), bfield, dca);
+//    }
     
     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()) ); 
 
-//     fNclusVSphiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
-//     fNclusVSthetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
-// 
-//     if(TMath::Abs(esdtrackOFF->Pt()) < 0.3) continue;
-//     fEtaMomentumcutOff->Fill(esdtrackOFF->Eta()); 
-//     if(esdtrackOFF->GetTPCNcls()>0) fNclusterOffwCut->Fill(esdtrackOFF->GetTPCNcls()); 
-                  
   } // end of loop over offline tracks
   
   if(nr_tracksOff>0) fMultOff->Fill(nr_tracksOff);
    
-  // Post output data.
   PostData(1, fOutputList);
 }
 
 void AliAnalysisTaskHLT::Terminate(Option_t *){
-  // see header file of AliAnalysisTask for documentation
+// see header file of AliAnalysisTask for documentation
 }
 
 // void AliAnalysisTaskHLT::SetupESDtrackCuts(){ // not called