]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/dNdPt/AlidNdPtAnalysis.cxx
modified histo ranges
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtAnalysis.cxx
index 42c88c75f2f1fc107e939266fafaf45dd5ad48a1..45ef1abba3692850a23b8172aa613870da6e05c3 100644 (file)
  * about the suitability of this software for any purpose. It is          *\r
  * provided "as is" without express or implied warranty.                  *\r
  **************************************************************************/\r
+//------------------------------------------------------------------------------\r
+// AlidNdPtAnalysis class. \r
+// \r
+// a. functionality:\r
+// - fills analysis control histograms\r
+// - fills generic correction matrices \r
+// - generates correction matrices \r
+//\r
+// b. data members:\r
+// - generic correction matrices\r
+// - control histograms\r
+//\r
+// Author: J.Otwinowski 04/11/2008 \r
+//------------------------------------------------------------------------------\r
 \r
-#include <iostream>\r
-\r
-#include "TFile.h"\r
-#include "TCint.h"\r
 #include "TH1.h"\r
 #include "TH2.h"\r
 #include "TCanvas.h"\r
+#include "THnSparse.h"\r
 \r
 #include "AliHeader.h"  \r
 #include "AliGenEventHeader.h"  \r
 #include "AliMCEvent.h"  \r
 #include "AliESDtrackCuts.h"  \r
 #include "AliLog.h" \r
+#include "AliMultiplicity.h"\r
+#include "AliTracker.h"\r
 \r
 #include "AlidNdPtEventCuts.h"\r
 #include "AlidNdPtAcceptanceCuts.h"\r
+#include "AliPhysicsSelection.h"\r
+#include "AliTriggerAnalysis.h"\r
 \r
 #include "AliPWG0Helper.h"\r
 #include "AlidNdPtHelper.h"\r
@@ -124,6 +139,7 @@ ClassImp(AlidNdPtAnalysis)
   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
     fMCTrackHist1[i]=0;     \r
     fMCPrimTrackHist1[i]=0;     \r
+    fMCPrimTrackHist2[i]=0;     \r
     fMCSecTrackHist1[i]=0;     \r
     fRecTrackHist1[i]=0;     \r
     fRecTrackMultHist1[i]=0;     \r
@@ -211,10 +227,13 @@ AlidNdPtAnalysis::AlidNdPtAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,t
   // rec. track control histograms\r
   fRecTrackHist2(0)\r
 {\r
+  //\r
   // constructor\r
+  //\r
   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
     fMCTrackHist1[i]=0;     \r
     fMCPrimTrackHist1[i]=0;     \r
+    fMCPrimTrackHist2[i]=0;     \r
     fMCSecTrackHist1[i]=0;     \r
     fRecTrackHist1[i]=0;     \r
     fRecTrackMultHist1[i]=0; \r
@@ -225,6 +244,8 @@ AlidNdPtAnalysis::AlidNdPtAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,t
 \r
 //_____________________________________________________________________________\r
 AlidNdPtAnalysis::~AlidNdPtAnalysis() {\r
+  //\r
+  // destructor\r
   //\r
   if(fEventMultCorrelationMatrix) delete fEventMultCorrelationMatrix; fEventMultCorrelationMatrix=0;\r
   //\r
@@ -289,6 +310,7 @@ AlidNdPtAnalysis::~AlidNdPtAnalysis() {
   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
     if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0;\r
     if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0;\r
+    if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0;\r
     if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0;\r
     if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;\r
     if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0;\r
@@ -306,19 +328,27 @@ void AlidNdPtAnalysis::Init(){
   // Init histograms\r
   //\r
 \r
-  const Int_t ptNbins = 56;\r
+  const Int_t multNbins = 27;\r
+  const Int_t ptNbinsTrackEventCorr = 37;\r
+  const Int_t ptNbins = 68;\r
   const Int_t etaNbins = 30;\r
   const Int_t zvNbins = 12;\r
-  //const Int_t multNbins = 22;\r
 \r
-  Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};\r
+  Double_t binsMult[multNbins+1] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,\r
+                                     9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,\r
+                                    19.5,20.5, 21.5, 22.5, 23.5, 24.5, 29.5, 149.5};\r
+\r
+  Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,20.0,50.0};\r
+\r
+  Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};\r
+\r
   Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
+\r
   Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
   //Double_t binsMult[multNbins+1] = {0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,12.,14.,16.,18.,20.,30.,40.,50.,70.,90.,110.,150.};\r
 \r
-  //Int_t binsTrackMatrix[4]={zvNbins,ptNbins,etaNbins,multNbins};\r
-  Int_t binsTrackMatrix[3]={zvNbins,ptNbins,etaNbins};\r
-  //Int_t binsTrackMatrix[3]={multNbins,ptNbins,etaNbins};\r
+  //Int_t binsTrackMatrix[3]={zvNbins,ptNbins,etaNbins};\r
+  Int_t binsTrackEventCorrMatrix[3]={zvNbins,ptNbinsTrackEventCorr,etaNbins};\r
 \r
   //\r
   // rec. vs MC correlation matrices\r
@@ -328,7 +358,7 @@ void AlidNdPtAnalysis::Init(){
   Double_t maxMultTrueEventMatrix[2]={149.5,149.5}; \r
   fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","mult:true_mult",2,binsMultTrueEventMatrix,minMultTrueEventMatrix,maxMultTrueEventMatrix);\r
   fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("track multiplicity");\r
-  fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("multiplicity");\r
+  fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity");\r
   fEventMultCorrelationMatrix->Sumw2();\r
   \r
   Int_t binsTrackPtCorrelationMatrix[3]={ptNbins,ptNbins,etaNbins};\r
@@ -344,36 +374,41 @@ void AlidNdPtAnalysis::Init(){
   //\r
   // Efficiency and contamination correction matrices\r
   //\r
-  Int_t binsEventMatrix[2]={zvNbins,150};\r
+  Int_t binsEventMatrix[2]={zvNbins,multNbins};\r
   Double_t minEventMatrix[2]={-25.,-0.5}; \r
   Double_t maxEventMatrix[2]={25.,149.5}; \r
 \r
   fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fGenEventMatrix->SetBinEdges(0,binsZv);\r
+  fGenEventMatrix->SetBinEdges(1,binsMult);\r
   fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fGenEventMatrix->Sumw2();\r
   \r
   fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fGenSDEventMatrix->SetBinEdges(0,binsZv);\r
+  fGenSDEventMatrix->SetBinEdges(1,binsMult);\r
   fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fGenSDEventMatrix->Sumw2();\r
   \r
   fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fGenDDEventMatrix->SetBinEdges(0,binsZv);\r
+  fGenDDEventMatrix->SetBinEdges(1,binsMult);\r
   fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fGenDDEventMatrix->Sumw2();\r
   \r
   fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fGenNDEventMatrix->SetBinEdges(0,binsZv);\r
+  fGenNDEventMatrix->SetBinEdges(1,binsMult);\r
   fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fGenNDEventMatrix->Sumw2();\r
 \r
   fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fGenNSDEventMatrix->SetBinEdges(0,binsZv);\r
+  fGenNSDEventMatrix->SetBinEdges(1,binsMult);\r
   fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fGenNSDEventMatrix->Sumw2();\r
@@ -381,30 +416,35 @@ void AlidNdPtAnalysis::Init(){
   //\r
   fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fTriggerEventMatrix->SetBinEdges(0,binsZv);\r
+  fTriggerEventMatrix->SetBinEdges(1,binsMult);\r
   fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fTriggerEventMatrix->Sumw2();\r
 \r
   fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fTriggerSDEventMatrix->SetBinEdges(0,binsZv);\r
+  fTriggerSDEventMatrix->SetBinEdges(1,binsMult);\r
   fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fTriggerSDEventMatrix->Sumw2();\r
   \r
   fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fTriggerDDEventMatrix->SetBinEdges(0,binsZv);\r
+  fTriggerDDEventMatrix->SetBinEdges(1,binsMult);\r
   fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fTriggerDDEventMatrix->Sumw2();\r
   \r
   fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fTriggerNDEventMatrix->SetBinEdges(0,binsZv);\r
+  fTriggerNDEventMatrix->SetBinEdges(1,binsMult);\r
   fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fTriggerNDEventMatrix->Sumw2();\r
  \r
   fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fTriggerNSDEventMatrix->SetBinEdges(0,binsZv);\r
+  fTriggerNSDEventMatrix->SetBinEdges(1,binsMult);\r
   fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fTriggerNSDEventMatrix->Sumw2();\r
@@ -412,30 +452,35 @@ void AlidNdPtAnalysis::Init(){
   //\r
   fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fRecEventMatrix->SetBinEdges(0,binsZv);\r
+  fRecEventMatrix->SetBinEdges(1,binsMult);\r
   fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fRecEventMatrix->Sumw2();\r
 \r
   fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fRecSDEventMatrix->SetBinEdges(0,binsZv);\r
+  fRecSDEventMatrix->SetBinEdges(1,binsMult);\r
   fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fRecSDEventMatrix->Sumw2();\r
   \r
   fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fRecDDEventMatrix->SetBinEdges(0,binsZv);\r
+  fRecDDEventMatrix->SetBinEdges(1,binsMult);\r
   fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fRecDDEventMatrix->Sumw2();\r
   \r
   fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fRecNDEventMatrix->SetBinEdges(0,binsZv);\r
+  fRecNDEventMatrix->SetBinEdges(1,binsMult);\r
   fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fRecNDEventMatrix->Sumw2();\r
  \r
   fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
   fRecNSDEventMatrix->SetBinEdges(0,binsZv);\r
+  fRecNSDEventMatrix->SetBinEdges(1,binsMult);\r
   fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fRecNSDEventMatrix->Sumw2();\r
@@ -444,45 +489,45 @@ void AlidNdPtAnalysis::Init(){
   // track to event corrections\r
   //\r
 \r
-  fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fGenTrackEventMatrix->SetBinEdges(0,binsZv);\r
-  fGenTrackEventMatrix->SetBinEdges(1,binsPt);\r
+  fGenTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fGenTrackEventMatrix->SetBinEdges(2,binsEta);\r
   fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fGenTrackEventMatrix->Sumw2();\r
 \r
-  fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fGenTrackSDEventMatrix->SetBinEdges(0,binsZv);\r
-  fGenTrackSDEventMatrix->SetBinEdges(1,binsPt);\r
+  fGenTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fGenTrackSDEventMatrix->SetBinEdges(2,binsEta);\r
   fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fGenTrackSDEventMatrix->Sumw2();\r
 \r
-  fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fGenTrackDDEventMatrix->SetBinEdges(0,binsZv);\r
-  fGenTrackDDEventMatrix->SetBinEdges(1,binsPt);\r
+  fGenTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fGenTrackDDEventMatrix->SetBinEdges(2,binsEta);\r
   fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fGenTrackDDEventMatrix->Sumw2();\r
 \r
-  fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fGenTrackNDEventMatrix->SetBinEdges(0,binsZv);\r
-  fGenTrackNDEventMatrix->SetBinEdges(1,binsPt);\r
+  fGenTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fGenTrackNDEventMatrix->SetBinEdges(2,binsEta);\r
   fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fGenTrackNDEventMatrix->Sumw2();\r
 \r
-  fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fGenTrackNSDEventMatrix->SetBinEdges(0,binsZv);\r
-  fGenTrackNSDEventMatrix->SetBinEdges(1,binsPt);\r
+  fGenTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fGenTrackNSDEventMatrix->SetBinEdges(2,binsEta);\r
   fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
@@ -491,45 +536,45 @@ void AlidNdPtAnalysis::Init(){
 \r
 \r
   //\r
-  fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fTriggerTrackEventMatrix->SetBinEdges(0,binsZv);\r
-  fTriggerTrackEventMatrix->SetBinEdges(1,binsPt);\r
+  fTriggerTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fTriggerTrackEventMatrix->SetBinEdges(2,binsEta);\r
   fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fTriggerTrackEventMatrix->Sumw2();\r
 \r
-  fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fTriggerTrackSDEventMatrix->SetBinEdges(0,binsZv);\r
-  fTriggerTrackSDEventMatrix->SetBinEdges(1,binsPt);\r
+  fTriggerTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fTriggerTrackSDEventMatrix->SetBinEdges(2,binsEta);\r
   fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fTriggerTrackSDEventMatrix->Sumw2();\r
 \r
-  fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fTriggerTrackDDEventMatrix->SetBinEdges(0,binsZv);\r
-  fTriggerTrackDDEventMatrix->SetBinEdges(1,binsPt);\r
+  fTriggerTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fTriggerTrackDDEventMatrix->SetBinEdges(2,binsEta);\r
   fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fTriggerTrackDDEventMatrix->Sumw2();\r
 \r
-  fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fTriggerTrackNDEventMatrix->SetBinEdges(0,binsZv);\r
-  fTriggerTrackNDEventMatrix->SetBinEdges(1,binsPt);\r
+  fTriggerTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fTriggerTrackNDEventMatrix->SetBinEdges(2,binsEta);\r
   fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fTriggerTrackNDEventMatrix->Sumw2();\r
 \r
-  fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fTriggerTrackNSDEventMatrix->SetBinEdges(0,binsZv);\r
-  fTriggerTrackNSDEventMatrix->SetBinEdges(1,binsPt);\r
+  fTriggerTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fTriggerTrackNSDEventMatrix->SetBinEdges(2,binsEta);\r
   fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
@@ -537,45 +582,45 @@ void AlidNdPtAnalysis::Init(){
   fTriggerTrackNSDEventMatrix->Sumw2();\r
 \r
   //\r
-  fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecTrackEventMatrix->SetBinEdges(0,binsZv);\r
-  fRecTrackEventMatrix->SetBinEdges(1,binsPt);\r
+  fRecTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecTrackEventMatrix->SetBinEdges(2,binsEta);\r
   fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fRecTrackEventMatrix->Sumw2();\r
 \r
-  fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecTrackSDEventMatrix->SetBinEdges(0,binsZv);\r
-  fRecTrackSDEventMatrix->SetBinEdges(1,binsPt);\r
+  fRecTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecTrackSDEventMatrix->SetBinEdges(2,binsEta);\r
   fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fRecTrackSDEventMatrix->Sumw2();\r
 \r
-  fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecTrackDDEventMatrix->SetBinEdges(0,binsZv);\r
-  fRecTrackDDEventMatrix->SetBinEdges(1,binsPt);\r
+  fRecTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecTrackDDEventMatrix->SetBinEdges(2,binsEta);\r
   fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fRecTrackDDEventMatrix->Sumw2();\r
 \r
-  fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecTrackNDEventMatrix->SetBinEdges(0,binsZv);\r
-  fRecTrackNDEventMatrix->SetBinEdges(1,binsPt);\r
+  fRecTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecTrackNDEventMatrix->SetBinEdges(2,binsEta);\r
   fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fRecTrackNDEventMatrix->Sumw2();\r
 \r
-  fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecTrackNSDEventMatrix->SetBinEdges(0,binsZv);\r
-  fRecTrackNSDEventMatrix->SetBinEdges(1,binsPt);\r
+  fRecTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecTrackNSDEventMatrix->SetBinEdges(2,binsEta);\r
   fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
@@ -585,27 +630,33 @@ void AlidNdPtAnalysis::Init(){
   //\r
   // tracks correction matrices\r
   //\r
-  fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fGenTrackMatrix->SetBinEdges(0,binsZv);\r
-  fGenTrackMatrix->SetBinEdges(1,binsPt);\r
+  //fGenTrackMatrix->SetBinEdges(1,binsPt);\r
+  fGenTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fGenTrackMatrix->SetBinEdges(2,binsEta);\r
   fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fGenTrackMatrix->Sumw2();\r
 \r
-  fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fGenPrimTrackMatrix->SetBinEdges(0,binsZv);\r
-  fGenPrimTrackMatrix->SetBinEdges(1,binsPt);\r
+  //fGenPrimTrackMatrix->SetBinEdges(1,binsPt);\r
+  fGenPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fGenPrimTrackMatrix->SetBinEdges(2,binsEta);\r
   fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
   fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
   fGenPrimTrackMatrix->Sumw2();\r
 \r
-  fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecPrimTrackMatrix->SetBinEdges(0,binsZv);\r
-  fRecPrimTrackMatrix->SetBinEdges(1,binsPt);\r
+  //fRecPrimTrackMatrix->SetBinEdges(1,binsPt);\r
+  fRecPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecPrimTrackMatrix->SetBinEdges(2,binsEta);\r
   fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
@@ -613,18 +664,22 @@ void AlidNdPtAnalysis::Init(){
   fRecPrimTrackMatrix->Sumw2();\r
 \r
   //\r
-  fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecTrackMatrix->SetBinEdges(0,binsZv);\r
-  fRecTrackMatrix->SetBinEdges(1,binsPt);\r
+  //fRecTrackMatrix->SetBinEdges(1,binsPt);\r
+  fRecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecTrackMatrix->SetBinEdges(2,binsEta);\r
   fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");\r
   fRecTrackMatrix->GetAxis(2)->SetTitle("Eta");\r
   fRecTrackMatrix->Sumw2();\r
 \r
-  fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecSecTrackMatrix->SetBinEdges(0,binsZv);\r
-  fRecSecTrackMatrix->SetBinEdges(1,binsPt);\r
+  //fRecSecTrackMatrix->SetBinEdges(1,binsPt);\r
+  fRecSecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecSecTrackMatrix->SetBinEdges(2,binsEta);\r
   fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");\r
@@ -632,9 +687,11 @@ void AlidNdPtAnalysis::Init(){
   fRecSecTrackMatrix->Sumw2();\r
 \r
   //\r
-  fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
+  fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
   fRecMultTrackMatrix->SetBinEdges(0,binsZv);\r
-  fRecMultTrackMatrix->SetBinEdges(1,binsPt);\r
+  //fRecMultTrackMatrix->SetBinEdges(1,binsPt);\r
+  fRecMultTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);\r
   fRecMultTrackMatrix->SetBinEdges(2,binsEta);\r
   fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
   fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
@@ -678,9 +735,7 @@ void AlidNdPtAnalysis::Init(){
   fRecEventHist2->Sumw2();\r
 \r
   //\r
-  Double_t kFact = 1.0;\r
-  if(GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx) kFact = 0.05; \r
-\r
+  Double_t kFact = 0.1;\r
   Int_t binsRecMCEventHist1[3]={100,100,100};\r
   Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact}; \r
   Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact}; \r
@@ -731,13 +786,13 @@ void AlidNdPtAnalysis::Init(){
   fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)");\r
   fMCTrackHist1[i]->Sumw2();\r
 \r
-  Int_t binsMCPrimTrackHist2[5]=  {ptNbins,etaNbins,6,20,4000};\r
-  Double_t minMCPrimTrackHist2[5]={0.,-1.,0.,0.,0.}; \r
-  Double_t maxMCPrimTrackHist2[5]={10.,1.,6.,20.,4000.}; \r
+  Int_t binsMCPrimTrackHist1[5]=  {ptNbins,etaNbins,6,20,4000};\r
+  Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.}; \r
+  Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.}; \r
   sprintf(name,"fMCPrimTrackHist1_%d",i);\r
   sprintf(title,"mcPt:mcEta:pid:mech:mother");\r
   \r
-  fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);\r
+  fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1);\r
   fMCPrimTrackHist1[i]->SetBinEdges(0,binsPt);\r
   fMCPrimTrackHist1[i]->SetBinEdges(1,binsEta);\r
   fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
@@ -747,6 +802,18 @@ void AlidNdPtAnalysis::Init(){
   fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother");\r
   fMCPrimTrackHist1[i]->Sumw2();\r
 \r
+  Int_t binsMCPrimTrackHist2[5]=  {4000,20,4000};\r
+  Double_t minMCPrimTrackHist2[5]={0.,0.,0.}; \r
+  Double_t maxMCPrimTrackHist2[5]={4000.,20.,4000.}; \r
+  sprintf(name,"fMCPrimTrackHist2_%d",i);\r
+  sprintf(title,"pdg:mech:mother");\r
+  \r
+  fMCPrimTrackHist2[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);\r
+  fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg");\r
+  fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech");\r
+  fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother");\r
+  fMCPrimTrackHist2[i]->Sumw2();\r
+\r
   Int_t binsMCSecTrackHist1[5]=  {ptNbins,etaNbins,6,20,4000};\r
   Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.}; \r
   Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.}; \r
@@ -860,10 +927,133 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
 \r
   // trigger selection\r
   Bool_t isEventTriggered = kTRUE;\r
-  if(evtCuts->IsTriggerRequired())  {\r
-    //static AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis;\r
-    //isEventTriggered = triggerAnalysis->IsTriggerFired(esdEvent, GetTrigger());\r
-    isEventTriggered = esdEvent->IsTriggerClassFired(GetTriggerClass());\r
+  AliPhysicsSelection *trigSel = NULL;\r
+  AliTriggerAnalysis *trigAna = NULL;\r
+\r
+  if(evtCuts->IsTriggerRequired())  \r
+  {\r
+    //\r
+    trigSel = GetPhysicsTriggerSelection();\r
+    if(!trigSel) {\r
+      printf("cannot get trigSel \n");\r
+      return;\r
+    }\r
+\r
+    //\r
+    if(IsUseMCInfo()) \r
+    { \r
+      trigSel->SetAnalyzeMC();\r
+\r
+      if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
+      {\r
+        // check V0 systematics (case1)\r
+       // Initialization done in the macro\r
+        trigAna = trigSel->GetTriggerAnalysis();\r
+        if(!trigAna) \r
+          return;\r
+\r
+        //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
+        //trigAna->SetV0AdcThr(15);\r
+\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //printf("MB1 & kVZEROCase1  %d \n",isEventTriggered);\r
+        //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+       \r
+        if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
+      else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)\r
+      {\r
+        // check V0 systematics (case2 only in MC)\r
+       // Initialization done in the macro\r
+\r
+        trigAna = trigSel->GetTriggerAnalysis();\r
+        if(!trigAna) \r
+         return;\r
+\r
+        //trigAna->SetV0HwPars(0, 0, 125);\r
+        //trigAna->SetV0AdcThr(0);\r
+\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+       \r
+       if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
+      else {\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //printf("MB1 %d \n",isEventTriggered);\r
+       \r
+        if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          trigAna = trigSel->GetTriggerAnalysis();\r
+          if(!trigAna) \r
+            return;\r
+\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
+    }\r
+    else {\r
+      //\r
+      // 0-multiplicity bin for LHC background correction\r
+      //\r
+      if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
+         GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx  || \r
+         GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ||\r
+          GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || \r
+         GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx\r
+       ) \r
+      {\r
+        trigSel->SetBin0CallbackViaPointer(&IsBinZeroTrackSPDvtx);\r
+      } else {\r
+        trigSel->SetBin0CallbackViaPointer(&IsBinZeroSPDvtx);\r
+      }\r
+\r
+      if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
+      {\r
+        // check V0 systematics (case1)\r
+       // Initialization done in the macro\r
+        trigAna = trigSel->GetTriggerAnalysis();\r
+        if(!trigAna) \r
+          return;\r
+\r
+        //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
+        //trigAna->SetV0AdcThr(15);\r
+\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+       \r
+        if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
+      else {\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //printf("MB1 %d \n",isEventTriggered);\r
+       \r
+        if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          trigAna = trigSel->GetTriggerAnalysis();\r
+          if(!trigAna) \r
+            return;\r
+\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
+    }\r
   }\r
 \r
   // use MC information\r
@@ -922,47 +1112,69 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
     Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();\r
     Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();\r
     vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); \r
-    isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, GetAnalysisMode(), kFALSE);\r
+    isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);\r
   }\r
+\r
   if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {\r
     vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");\r
     isRecVertex = kTRUE;\r
   }\r
+\r
   Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; \r
   //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
+  //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
 \r
-  // MB bias tracks\r
+  // vertex contributors\r
   Int_t multMBTracks = 0; \r
-  if(GetAnalysisMode() == AlidNdPtHelper::kTPC || GetAnalysisMode() == AlidNdPtHelper::kMCPion ||  \r
-     GetAnalysisMode() == AlidNdPtHelper::kMCKaon ||  GetAnalysisMode() == AlidNdPtHelper::kMCProton || \r
-     GetAnalysisMode() ==AlidNdPtHelper::kPlus || GetAnalysisMode() ==AlidNdPtHelper::kMinus) {  \r
-\r
-     multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
+  if(GetAnalysisMode() == AlidNdPtHelper::kTPC) \r
+  {  \r
+     if(vtxESD->GetStatus() && isRecVertex)\r
+       multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
   } \r
-  else if(GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kMCPion || \r
-          GetAnalysisMode() == AlidNdPtHelper::kMCKaon || GetAnalysisMode() == AlidNdPtHelper::kMCProton || \r
-         GetAnalysisMode() ==AlidNdPtHelper::kPlus || GetAnalysisMode() == AlidNdPtHelper::kMinus) {\r
-\r
-           multMBTracks = AlidNdPtHelper::GetSPDMBTrackMult(esdEvent,0.0);\r
+  else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
+           GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate ) \r
+  {\r
+     const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
+     if(mult && vtxESD->GetStatus() && isRecVertex)\r
+       multMBTracks = mult->GetNumberOfTracklets();\r
   } \r
+  else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
+           GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+           GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || \r
+          GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || \r
+          GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx\r
+          )\r
+  {\r
+     if(vtxESD->GetStatus() && isRecVertex)\r
+       multMBTracks = vtxESD->GetNContributors();\r
+  }\r
   else {\r
-    AliDebug(AliLog::kError, Form("Found analysis type %s", GetAnalysisMode()));\r
+    AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));\r
     return; \r
   }\r
\r
+\r
   TObjArray *allChargedTracks=0;\r
   Int_t multAll=0, multAcc=0, multRec=0;\r
   Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;\r
 \r
+  // cosmics analysis\r
+  Int_t cosmicCount = 0;\r
+  // high-pt tracks\r
+  Int_t highPtCount = 0;\r
+\r
   // check event cuts\r
   if(isEventOK && isEventTriggered)\r
   {\r
     // get all charged tracks\r
-    //allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,vtxESD,GetAnalysisMode());\r
     allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
     if(!allChargedTracks) return;\r
 \r
     Int_t entries = allChargedTracks->GetEntries();\r
+    //printf("entries %d \n",entries);\r
+\r
     labelsAll = new Int_t[entries];\r
     labelsAcc = new Int_t[entries];\r
     labelsRec = new Int_t[entries];\r
@@ -971,23 +1183,170 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
       AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
       if(!track) continue;\r
       if(track->Charge()==0) continue;\r
-        \r
-       FillHistograms(track,stack,AlidNdPtHelper::kAllTracks); \r
-       labelsAll[multAll] = TMath::Abs(track->GetLabel());\r
-       multAll++;\r
-\r
-       if(accCuts->AcceptTrack(track)) {\r
-         FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); \r
-        labelsAcc[multAcc] = TMath::Abs(track->GetLabel());\r
-        multAcc++;\r
-\r
-         if(esdTrackCuts->AcceptTrack(track)) {\r
-           FillHistograms(track,stack,AlidNdPtHelper::kRecTracks); \r
-          labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
-          multRec++;\r
+\r
+      // only postive charged \r
+      if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
+        continue;\r
+      \r
+      // only negative charged \r
+      if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) \r
+        continue;\r
+\r
+\r
+      // esd track selection \r
+      // ITS stand alone\r
+      if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx) \r
+      {\r
+        if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;\r
+        if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;\r
+        if(track->GetNcls(0)<4) continue;\r
+        if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;\r
+      } \r
+      else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx) \r
+      {\r
+        //\r
+        // ITS and TPC stand alone tracks\r
+       //\r
+       if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;\r
+       if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;\r
+       if(track->GetNcls(0)<4) continue;\r
+       if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;\r
+\r
+        // Check matching with TPC only track\r
+       Bool_t hasMatch = kFALSE;\r
+       for(Int_t j=0; j<entries;++j) \r
+        {\r
+         if(i==j) continue;\r
+          AliESDtrack *track2 = (AliESDtrack*)allChargedTracks->At(j);\r
+          if(!track2) continue;\r
+          if(track2->Charge()==0) continue;\r
+         if (!track2->GetTPCInnerParam()) continue;\r
+\r
+          // check loose cuts for TPC tracks\r
+          if(!esdTrackCuts->AcceptTrack(track2)) continue; \r
+\r
+         AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam()));\r
+         if(!innerTPC) continue;\r
+          Double_t x2[3]; track2->GetXYZ(x2);\r
+          Double_t b2[3]; AliTracker::GetBxByBz(x2,b2);\r
+         Double_t dz[2],cov[3];\r
+         Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov);\r
+          if(!isPropOK && innerTPC) {delete innerTPC; continue;}\r
+\r
+          // check matching\r
+          if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; }\r
+          if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; }\r
+          if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; }\r
+\r
+         hasMatch = kTRUE;\r
+         if(innerTPC) delete innerTPC;\r
+       }\r
+\r
+        if(!hasMatch) continue;\r
+      }\r
+      else {\r
+        // check track cuts\r
+        if(!esdTrackCuts->AcceptTrack(track)) \r
+         continue;\r
+      }\r
+\r
+      //\r
+      Bool_t isOK = kFALSE;\r
+      Double_t x[3]; track->GetXYZ(x);\r
+      Double_t b[3]; AliTracker::GetBxByBz(x,b);\r
+\r
+      //\r
+      // if TPC-ITS hybrid tracking (kTPCITSHybrid)\r
+      // replace track parameters with TPC-ony track parameters\r
+      //\r
+      if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
+         GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) \r
+      {\r
+        // Relate TPC-only tracks to Track or SPD vertex\r
+        isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);\r
+        if(!isOK) continue;\r
+\r
+       // replace esd track parameters with TPCinner\r
+        AliExternalTrackParam  *tpcTrack  = new AliExternalTrackParam(*(track->GetTPCInnerParam()));\r
+       if (!tpcTrack) return;\r
+        track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());\r
+\r
+        if(tpcTrack) delete tpcTrack; \r
+      } \r
+\r
+      FillHistograms(track,stack,AlidNdPtHelper::kAllTracks); \r
+      labelsAll[multAll] = TMath::Abs(track->GetLabel());\r
+      multAll++;\r
+\r
+         //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); \r
+        //labelsAcc[multAcc] = TMath::Abs(track->GetLabel());\r
+        //multAcc++;\r
+      \r
+         // check high-pt tracks\r
+         if(accCuts->AcceptTrack(track) && track->Pt() > 6.)\r
+        {\r
+            //printf(" high pt: pt %f \n",track->Pt());\r
+            highPtCount++;\r
+        }\r
+\r
+         // check cosmics tracks\r
+         if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
+         {\r
+           if(accCuts->AcceptTrack(track)) \r
+          { \r
+             for(Int_t j=0; j<entries;++j) \r
+             {\r
+               AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);\r
+               if(!track1) continue;\r
+               if(track1->Charge()==0) continue;\r
+\r
+               if( esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) \r
+               { \r
+                if ( AlidNdPtHelper::IsCosmicTrack(track,track1) ) { \r
+                  cosmicCount++;\r
+                  break;\r
+                }\r
+              }\r
+            }\r
+          }\r
+          // if(!isCosmic) continue;\r
          }\r
-       }\r
-     } \r
+\r
+         // update track parameters using vertex point \r
+        if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || \r
+            GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ) \r
+        {\r
+          // update track parameters\r
+             AliExternalTrackParam cParam;\r
+             isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam);\r
+             if(!isOK) continue;\r
+            track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());\r
+\r
+             if(accCuts->AcceptTrack(track)) {\r
+               FillHistograms(track,stack,AlidNdPtHelper::kRecTracks); \r
+              labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
+              multRec++;\r
+            }  \r
+         }\r
+          else {\r
+             if(accCuts->AcceptTrack(track)) \r
+            {\r
+               FillHistograms(track,stack,AlidNdPtHelper::kRecTracks); \r
+              labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
+              multRec++;\r
+            }\r
+          }\r
+     }\r
+     if(cosmicCount) \r
+       //printf("COSMIC EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);\r
+\r
+     if(highPtCount) \r
+       //printf("HIGH PT EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);\r
+\r
+     if(multRec > 30) \r
+       //printf("HIGH MULT EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);\r
+\r
      // fill track multiplicity histograms\r
      FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);\r
 \r
@@ -998,16 +1357,13 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
      fRecEventHist2->Fill(vRecEventHist2);\r
    } \r
 \r
-   //\r
-   // Determine correction matrices\r
-   //\r
    if(IsUseMCInfo())  \r
    {\r
-     //\r
-     // multiplicity correlation matrix\r
-     //\r
-     Double_t vMultTrueEventMatrix[2] = {multRec,multMCTrueTracks};\r
-     fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix);\r
+     Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks };\r
+     if(isEventOK && isEventTriggered) {   \r
+       if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted\r
+         fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix);\r
+     }\r
 \r
      // \r
      // event level corrections (zv,N_MB)\r
@@ -1057,16 +1413,17 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
        continue;\r
 \r
        // only charged particles\r
+       if(!particle->GetPDG()) continue;\r
        Double_t charge = particle->GetPDG()->Charge()/3.;\r
-       if (charge == 0.0)\r
+       if ( TMath::Abs(charge) < 0.001 )\r
         continue;\r
 \r
        // only postive charged \r
-       if(GetAnalysisMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
+       if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
         continue;\r
        \r
        // only negative charged \r
-       if(GetAnalysisMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
+       if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
        continue;\r
       \r
        // physical primary\r
@@ -1129,7 +1486,7 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
      }\r
 \r
      // \r
-     // track-level corrections (zv,pt.eta)\r
+     // track-level corrections (zv,pt,eta)\r
      //\r
      if(isEventOK && isEventTriggered)\r
      {\r
@@ -1159,20 +1516,21 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
 \r
         // all genertated primaries including neutral\r
          if( iMc < stack->GetNprimary() ) {\r
-           fGenTrackMatrix->Fill(vTrackMatrix);\r
+           //fGenTrackMatrix->Fill(vTrackMatrix);\r
         }\r
 \r
          // only charged particles\r
+         if(!particle->GetPDG()) continue;\r
          Double_t charge = particle->GetPDG()->Charge()/3.;\r
-         if (charge == 0.0)\r
+         if (TMath::Abs(charge) < 0.001)\r
          continue;\r
 \r
          // only postive charged \r
-         if(GetAnalysisMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
+         if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
         continue;\r
        \r
          // only negative charged \r
-         if(GetAnalysisMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
+         if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
         continue;\r
       \r
          // physical primary\r
@@ -1182,20 +1540,21 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
          if(accCuts->AcceptTrack(particle)) \r
         {\r
 \r
-           if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetAnalysisMode()) ) fGenPrimTrackMatrix->Fill(vTrackMatrix);\r
+           if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) \r
+            fGenPrimTrackMatrix->Fill(vTrackMatrix);\r
 \r
           // fill control histograms\r
            if(fHistogramsOn) \r
             FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks); \r
 \r
            // check multiple found tracks\r
-          Int_t mult_count = 0;\r
+          Int_t multCount = 0;\r
            for(Int_t iRec=0; iRec<multRec; ++iRec)\r
            {\r
              if(iMc == labelsRec[iRec]) \r
             {\r
-              mult_count++;\r
-              if(mult_count>1)\r
+              multCount++;\r
+              if(multCount>1)\r
               {  \r
                  fRecMultTrackMatrix->Fill(vTrackMatrix);\r
 \r
@@ -1215,7 +1574,14 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
              if(iMc == labelsRec[iRec]) \r
             {\r
                fRecTrackMatrix->Fill(vTrackMatrix);\r
-               if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetAnalysisMode()) ) fRecPrimTrackMatrix->Fill(vTrackMatrix);\r
+\r
+               if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {\r
+                fRecPrimTrackMatrix->Fill(vTrackMatrix);\r
+                //AliESDtrack *track = esdEvent->GetTrack(iRec);\r
+                 //if(track && track->GetKinkIndex(0) < 0) \r
+                //  printf("prim kink \n");\r
+              }\r
+\r
                if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);\r
 \r
               // fill control histograms\r
@@ -1236,6 +1602,7 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
   if(labelsRec) delete [] labelsRec; labelsRec = 0;\r
 \r
   if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;\r
+  //if(trigAna) delete trigAna;\r
 \r
 }\r
 \r
@@ -1286,7 +1653,7 @@ void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *con
   if(!esdTrack) return;\r
 \r
   Float_t q = esdTrack->Charge();\r
-  if(q==0) return;\r
+  if(TMath::Abs(q) < 0.001) return;\r
 \r
   Float_t pt = esdTrack->Pt();\r
   //Float_t qpt = esdTrack->Pt() * q;\r
@@ -1305,12 +1672,14 @@ void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *con
   Double_t values[3] = {pt,eta,phi};     \r
   fRecTrackHist1[trackObj]->Fill(values);\r
 \r
+  /*\r
   Double_t values1[5] = {nClust,chi2PerCluster,pt,eta,phi};      \r
   if(trackObj == AlidNdPtHelper::kRecTracks)  \r
   {\r
     if(fHistogramsOn)\r
       fRecTrackHist2->Fill(values1);\r
   }\r
+  */\r
  \r
   //\r
   // Fill rec vs MC information\r
@@ -1326,23 +1695,25 @@ void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *con
   //Bool_t prim = stack->IsPhysicalPrimary(label);\r
   //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);\r
 \r
-  Int_t mother_pdg = -1;\r
+  Int_t motherPdg = -1;\r
   TParticle* mother = 0;\r
 \r
   //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);\r
   Int_t motherLabel = particle->GetMother(0); \r
   if(motherLabel>0) mother = stack->Particle(motherLabel);\r
-  if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
+  if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
   //Int_t mech = particle->GetUniqueID(); // production mechanism\r
 \r
+  if(!particle->GetPDG()) return;\r
   Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
-  if(gq==0) return;\r
+  if(TMath::Abs(gq)<0.001) return;\r
   Float_t gpt = particle->Pt();\r
   Float_t geta = particle->Eta();\r
   //Float_t qgpt = particle->Pt() * gq;\r
   //Float_t gphi = particle->Phi();\r
 \r
   Double_t dpt=0;\r
+  //printf("pt %f, gpt %f \n",pt,gpt);\r
   if(gpt) dpt = (pt-gpt)/gpt;\r
   Double_t deta = (eta-geta);\r
  \r
@@ -1366,17 +1737,19 @@ void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNd
   TParticle* particle = stack->Particle(label);\r
   if(!particle) return;\r
 \r
-  Int_t mother_pdg = -1;\r
+  Int_t motherPdg = -1;\r
   TParticle* mother = 0;\r
 \r
   //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);\r
   Int_t motherLabel = particle->GetMother(0); \r
   if(motherLabel>0) mother = stack->Particle(motherLabel);\r
-  if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
+  if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
   Int_t mech = particle->GetUniqueID(); // production mechanism\r
 \r
+  if(!particle->GetPDG()) return;\r
   Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
-  if(gq == 0) return;\r
+  if(TMath::Abs(gq) < 0.001) return;\r
+\r
   Float_t gpt = particle->Pt();\r
   //Float_t qgpt = particle->Pt() * gq;\r
   Float_t geta = particle->Eta();\r
@@ -1389,7 +1762,7 @@ void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNd
   Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);\r
 \r
   //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);\r
-  //if(!prim) printf("mother_pdg %d, particle %d, production mech %d\n",mother_pdg, particle->GetPdgCode(),mech);\r
+  //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);\r
   \r
   //\r
   // fill histogram\r
@@ -1397,15 +1770,21 @@ void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNd
   Double_t vMCTrackHist1[3] = {gpt,geta,gphi};\r
   fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);\r
 \r
-  Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,mother_pdg};\r
-  if(prim) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
-  else     { \r
-         fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
+  Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg};\r
+  Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg};\r
+  //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
+  if(prim) { \r
+    fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
+    if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);\r
   }\r
+  else { \r
+    fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
+  }\r
+\r
 }\r
 \r
 //_____________________________________________________________________________\r
-Long64_t AlidNdPtAnalysis::Merge(TCollection* list) \r
+Long64_t AlidNdPtAnalysis::Merge(TCollection* const list) \r
 {\r
   // Merge list of objects (needed by PROOF)\r
 \r
@@ -1418,6 +1797,9 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* list)
   TIterator* iter = list->MakeIterator();\r
   TObject* obj = 0;\r
 \r
+  //\r
+  TList *collPhysSelection = new TList;\r
+\r
   // collection of generated histograms\r
 \r
   Int_t count=0;\r
@@ -1425,6 +1807,10 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* list)
     AlidNdPtAnalysis* entry = dynamic_cast<AlidNdPtAnalysis*>(obj);\r
     if (entry == 0) continue; \r
 \r
+    // physics selection\r
+    //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());\r
+    collPhysSelection->Add(entry->GetPhysicsTriggerSelection());\r
+    \r
     //\r
     fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix);\r
     fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);\r
@@ -1491,6 +1877,7 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* list)
       fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);\r
 \r
       fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);\r
+      fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);\r
       fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);\r
 \r
       fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);\r
@@ -1503,9 +1890,58 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* list)
   count++;\r
   }\r
 \r
+  AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();\r
+  trigSelection->Merge(collPhysSelection);\r
+  if(collPhysSelection) delete collPhysSelection;\r
+\r
 return count;\r
 }\r
+\r
+//____________________________________________________________________\r
+Bool_t AlidNdPtAnalysis::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) {\r
+//\r
+// check 0-bin\r
+// for LHC background calculation\r
+// return kTRUE if vertex not reconstructed or\r
+// track multiplicity == 0\r
+//\r
+if(!esdEvent) return kFALSE;\r
+\r
+  // check vertex\r
+  const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks();\r
+  if(!vertex) return kTRUE;\r
+\r
+  if(vertex->GetNContributors() < 1) {\r
+    // SPD vertex\r
+    vertex = esdEvent->GetPrimaryVertexSPD();\r
+    if(!vertex) return kTRUE;\r
+  }\r
+  if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; \r
+  if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) ) \r
+    return kTRUE;\r
\r
+return kFALSE;\r
+}\r
+\r
+//____________________________________________________________________\r
+Bool_t AlidNdPtAnalysis::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) {\r
+//\r
+// check 0-bin\r
+// for LHC background calculation\r
+// return kTRUE if vertex not reconstructed or\r
+// tracklet multiplicity == 0\r
+//\r
+if(!esdEvent) return kFALSE;\r
+\r
+  // check vertex\r
+  const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD();\r
+  if(!vertex) return kTRUE;\r
+  if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; \r
+  if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE;\r
  \r
+return kFALSE;\r
+}\r
+\r
 //_____________________________________________________________________________\r
 void AlidNdPtAnalysis::Analyse() \r
 {\r
@@ -1518,28 +1954,12 @@ void AlidNdPtAnalysis::Analyse()
 \r
   char name[256];\r
   TObjArray *aFolderObj = new TObjArray;\r
-\r
-  //\r
-  // get cuts\r
-  //\r
-  AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
-  AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
-  AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
-\r
-  if(!evtCuts || !accCuts || !esdTrackCuts) {\r
-    Error("AlidNdPtCutAnalysis::Analyse()", "cuts not available");\r
-    return;\r
-  }\r
-\r
+  \r
   //\r
-  // set min and max values\r
+  // LHC backgraund in all and 0-bins\r
   //\r
-  Double_t minZv = evtCuts->GetMinZv();\r
-  Double_t maxZv = evtCuts->GetMaxZv()-0.00001;\r
-  Double_t minPt = accCuts->GetMinPt();\r
-  Double_t maxPt = accCuts->GetMaxPt();\r
-  Double_t minEta = accCuts->GetMinEta();\r
-  Double_t maxEta = accCuts->GetMaxEta()-0.00001;\r
+  AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
+  trigSel->SaveHistograms("physics_selection");\r
 \r
   //\r
   // Reconstructed event vertex\r
@@ -1780,14 +2200,10 @@ void AlidNdPtAnalysis::Analyse()
   h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fGenNDEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fTriggerEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
 \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix");\r
 \r
   aFolderObj->Add(h);\r
-  fGenNDEventMatrix->GetAxis(0)->SetRange(1,fGenNDEventMatrix->GetAxis(0)->GetNbins());\r
-  fTriggerEventMatrix->GetAxis(0)->SetRange(1,fTriggerEventMatrix->GetAxis(0)->GetNbins());\r
 \r
   //\r
   // trigger bias correction (MB to NSD)\r
@@ -1801,14 +2217,10 @@ void AlidNdPtAnalysis::Analyse()
   h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fGenNSDEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fTriggerEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
 \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fGenNSDEventMatrix->GetAxis(0)->SetRange(1,fGenNSDEventMatrix->GetAxis(0)->GetNbins());\r
-  fTriggerEventMatrix->GetAxis(0)->SetRange(1,fTriggerEventMatrix->GetAxis(0)->GetNbins());\r
 \r
   //\r
   // trigger bias correction (MB to INEL)\r
@@ -1822,14 +2234,10 @@ void AlidNdPtAnalysis::Analyse()
   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");\r
   aFolderObj->Add(h2D);\r
 \r
-  fGenEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fTriggerEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
 \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fGenEventMatrix->GetAxis(0)->SetRange(1,fGenEventMatrix->GetAxis(0)->GetNbins());\r
-  fTriggerEventMatrix->GetAxis(0)->SetRange(1,fTriggerEventMatrix->GetAxis(0)->GetNbins());\r
 \r
   //\r
   // event vertex reconstruction correction (MB)\r
@@ -1840,14 +2248,10 @@ void AlidNdPtAnalysis::Analyse()
   h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");\r
   aFolderObj->Add(h2D);\r
 \r
-  fTriggerEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fRecEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
 \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fTriggerEventMatrix->GetAxis(0)->SetRange(1,fTriggerEventMatrix->GetAxis(0)->GetNbins());\r
-  fRecEventMatrix->GetAxis(0)->SetRange(1,fRecEventMatrix->GetAxis(0)->GetNbins());\r
 \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");\r
   aFolderObj->Add(h);\r
@@ -1900,19 +2304,10 @@ void AlidNdPtAnalysis::Analyse()
   aFolderObj->Add(h2D);\r
 \r
   // efficiency\r
-  fTriggerTrackEventMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fGenTrackEventMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fTriggerTrackEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fGenTrackEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
 \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fTriggerTrackEventMatrix->GetAxis(2)->SetRange(1,fTriggerTrackEventMatrix->GetAxis(2)->GetNbins());\r
-  fGenTrackEventMatrix->GetAxis(2)->SetRange(1,fGenTrackEventMatrix->GetAxis(2)->GetNbins());\r
-  fTriggerTrackEventMatrix->GetAxis(0)->SetRange(1,fTriggerTrackEventMatrix->GetAxis(0)->GetNbins());\r
-  fGenTrackEventMatrix->GetAxis(0)->SetRange(1,fGenTrackEventMatrix->GetAxis(0)->GetNbins());\r
-\r
 \r
   //\r
   // track-event vertex reconstruction correction (MB)\r
@@ -1930,18 +2325,10 @@ void AlidNdPtAnalysis::Analyse()
   aFolderObj->Add(h2D);\r
   \r
   // efficiency\r
-  fTriggerTrackEventMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fRecTrackEventMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fTriggerTrackEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fRecTrackEventMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
 \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fTriggerTrackEventMatrix->GetAxis(2)->SetRange(1,fTriggerTrackEventMatrix->GetAxis(2)->GetNbins());\r
-  fRecTrackEventMatrix->GetAxis(2)->SetRange(1,fRecTrackEventMatrix->GetAxis(2)->GetNbins());\r
-  fTriggerTrackEventMatrix->GetAxis(0)->SetRange(1,fTriggerTrackEventMatrix->GetAxis(0)->GetNbins());\r
-  fRecTrackEventMatrix->GetAxis(0)->SetRange(1,fRecTrackEventMatrix->GetAxis(0)->GetNbins());\r
 \r
   //\r
   // track rec. efficiency correction\r
@@ -1958,39 +2345,21 @@ void AlidNdPtAnalysis::Analyse()
   h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");\r
   aFolderObj->Add(h2D);\r
 \r
-  fGenPrimTrackMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fRecPrimTrackMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fGenPrimTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  fRecPrimTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
   \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fGenPrimTrackMatrix->GetAxis(1)->SetRange(1,fGenPrimTrackMatrix->GetAxis(1)->GetNbins());\r
-  fRecPrimTrackMatrix->GetAxis(1)->SetRange(1,fRecPrimTrackMatrix->GetAxis(1)->GetNbins());\r
-  fGenPrimTrackMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fRecPrimTrackMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-\r
   h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");\r
   aFolderObj->Add(h);\r
 \r
   // efficiency\r
+\r
   h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fGenPrimTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  fRecPrimTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  fGenPrimTrackMatrix->GetAxis(2)->SetRange(1,fGenPrimTrackMatrix->GetAxis(2)->GetNbins());\r
-  fRecPrimTrackMatrix->GetAxis(2)->SetRange(1,fRecPrimTrackMatrix->GetAxis(2)->GetNbins());\r
-\r
   h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fGenPrimTrackMatrix->GetAxis(1)->SetRange(1,fGenPrimTrackMatrix->GetAxis(1)->GetNbins());\r
-  fRecPrimTrackMatrix->GetAxis(1)->SetRange(1,fRecPrimTrackMatrix->GetAxis(1)->GetNbins());\r
-  fGenPrimTrackMatrix->GetAxis(0)->SetRange(1,fGenPrimTrackMatrix->GetAxis(0)->GetNbins());\r
-  fRecPrimTrackMatrix->GetAxis(0)->SetRange(1,fRecPrimTrackMatrix->GetAxis(0)->GetNbins());\r
-\r
   //\r
   // secondary track contamination correction\r
   //\r
@@ -2007,36 +2376,16 @@ void AlidNdPtAnalysis::Analyse()
   h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");\r
   aFolderObj->Add(h2D);\r
 \r
-  fRecSecTrackMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fRecTrackMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fRecSecTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  fRecTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fRecSecTrackMatrix->GetAxis(1)->SetRange(1,fRecSecTrackMatrix->GetAxis(1)->GetNbins());\r
-  fRecTrackMatrix->GetAxis(1)->SetRange(1,fRecTrackMatrix->GetAxis(1)->GetNbins());\r
-  fRecSecTrackMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fRecTrackMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
 \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fRecSecTrackMatrix->GetAxis(2)->SetRange(1,fRecSecTrackMatrix->GetAxis(2)->GetNbins());\r
-  fRecTrackMatrix->GetAxis(2)->SetRange(1,fRecTrackMatrix->GetAxis(2)->GetNbins());\r
-\r
-  fRecSecTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  fRecTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-\r
   h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fRecSecTrackMatrix->GetAxis(0)->SetRange(1,fRecSecTrackMatrix->GetAxis(0)->GetNbins());\r
-  fRecTrackMatrix->GetAxis(0)->SetRange(1,fRecTrackMatrix->GetAxis(0)->GetNbins());\r
-  fRecSecTrackMatrix->GetAxis(1)->SetRange(1,fRecSecTrackMatrix->GetAxis(1)->GetNbins());\r
-  fRecTrackMatrix->GetAxis(1)->SetRange(1,fRecTrackMatrix->GetAxis(1)->GetNbins());\r
-\r
   //\r
   // multiple track reconstruction correction\r
   //\r
@@ -2053,37 +2402,15 @@ void AlidNdPtAnalysis::Analyse()
   h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");\r
   aFolderObj->Add(h2D);\r
 \r
-  fRecMultTrackMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fRecTrackMatrix->GetAxis(2)->SetRangeUser(minEta,maxEta);\r
-  fRecMultTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  fRecTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  \r
   h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fRecMultTrackMatrix->GetAxis(1)->SetRangeUser(0.,maxPt);\r
-  fRecTrackMatrix->GetAxis(1)->SetRangeUser(0.,maxPt);\r
-  fRecMultTrackMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-  fRecTrackMatrix->GetAxis(0)->SetRangeUser(minZv,maxZv);\r
-\r
   h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fRecMultTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-  fRecTrackMatrix->GetAxis(1)->SetRangeUser(minPt,maxPt);\r
-\r
-  fRecMultTrackMatrix->GetAxis(2)->SetRange(1,fRecMultTrackMatrix->GetAxis(2)->GetNbins());\r
-  fRecTrackMatrix->GetAxis(2)->SetRange(1,fRecTrackMatrix->GetAxis(2)->GetNbins());\r
-\r
   h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");\r
   aFolderObj->Add(h);\r
 \r
-  fRecMultTrackMatrix->GetAxis(1)->SetRangeUser(0.,maxPt);\r
-  fRecTrackMatrix->GetAxis(1)->SetRangeUser(0.,maxPt);\r
-\r
-  fRecMultTrackMatrix->GetAxis(0)->SetRange(1,fRecMultTrackMatrix->GetAxis(0)->GetNbins());\r
-  fRecTrackMatrix->GetAxis(0)->SetRange(1,fRecTrackMatrix->GetAxis(0)->GetNbins());\r
-\r
   //\r
   // Control histograms\r
   //\r
@@ -2091,9 +2418,6 @@ void AlidNdPtAnalysis::Analyse()
   if(fHistogramsOn) {\r
 \r
   // Efficiency electrons, muons, pions, kaons, protons, all\r
-  fMCPrimTrackHist1[1]->GetAxis(1)->SetRangeUser(minEta,maxEta); \r
-  fMCPrimTrackHist1[2]->GetAxis(1)->SetRangeUser(minEta,maxEta);\r
-\r
   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1); \r
   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1); \r
   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
@@ -2139,6 +2463,15 @@ void AlidNdPtAnalysis::Analyse()
   h2c->SetName("eff_pt_protons");\r
   aFolderObj->Add(h2c);\r
 \r
+  fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); \r
+  fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); \r
+  h1 = fMCPrimTrackHist1[1]->Projection(0);\r
+  h2 = fMCPrimTrackHist1[2]->Projection(0);\r
+  h2c = (TH1D *)h2->Clone();\r
+  h2c->Divide(h1);\r
+  h2c->SetName("eff_pt_selected");\r
+  aFolderObj->Add(h2c);\r
+\r
   fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); \r
   fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); \r
   h1 = fMCPrimTrackHist1[1]->Projection(0);\r
@@ -2159,25 +2492,25 @@ void AlidNdPtAnalysis::Analyse()
   // - secondaries (mother)\r
   //\r
 \r
-  TH1D *mc_pt_acc_all = fMCTrackHist1[1]->Projection(0);\r
-  mc_pt_acc_all->SetName("mc_pt_acc_all");\r
-  aFolderObj->Add(mc_pt_acc_all);\r
+  TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);\r
+  mcPtAccall->SetName("mc_pt_acc_all");\r
+  aFolderObj->Add(mcPtAccall);\r
 \r
-  TH1D *mc_pt_acc_prim = fMCPrimTrackHist1[1]->Projection(0);\r
-  mc_pt_acc_prim->SetName("mc_pt_acc_prim");\r
-  aFolderObj->Add(mc_pt_acc_prim);\r
+  TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);\r
+  mcPtAccprim->SetName("mc_pt_acc_prim");\r
+  aFolderObj->Add(mcPtAccprim);\r
 \r
-  TH1D *mc_pt_rec_all = fMCTrackHist1[2]->Projection(0);\r
-  mc_pt_rec_all->SetName("mc_pt_rec_all");\r
-  aFolderObj->Add(mc_pt_rec_all);\r
+  TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);\r
+  mcPtRecall->SetName("mc_pt_rec_all");\r
+  aFolderObj->Add(mcPtRecall);\r
 \r
-  TH1D *mc_pt_rec_prim = fMCPrimTrackHist1[2]->Projection(0);\r
-  mc_pt_rec_prim->SetName("mc_pt_rec_prim");\r
-  aFolderObj->Add(mc_pt_rec_prim);\r
+  TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);\r
+  mcPtRecprim->SetName("mc_pt_rec_prim");\r
+  aFolderObj->Add(mcPtRecprim);\r
 \r
-  TH1D *mc_pt_rec_sec = fMCSecTrackHist1[2]->Projection(0);\r
-  mc_pt_rec_sec->SetName("mc_pt_rec_sec");\r
-  aFolderObj->Add(mc_pt_rec_sec);\r
+  TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);\r
+  mcPtRecsec->SetName("mc_pt_rec_sec");\r
+  aFolderObj->Add(mcPtRecsec);\r
 \r
   for(Int_t i = 0; i<6; i++) \r
   { \r
@@ -2290,7 +2623,7 @@ void AlidNdPtAnalysis::Analyse()
   c->cd();\r
 \r
   //\r
-  fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.9,0.89); \r
+  fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79); \r
 \r
   h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);\r
   h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
@@ -2327,7 +2660,6 @@ void AlidNdPtAnalysis::Analyse()
   \r
   // \r
   fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins()); \r
-  fRecMCTrackHist1->GetAxis(0)->SetRangeUser(minPt,maxPt); \r
 \r
   h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);\r
   h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
@@ -2374,7 +2706,7 @@ void AlidNdPtAnalysis::Analyse()
 }\r
 \r
 //_____________________________________________________________________________\r
-TFolder* AlidNdPtAnalysis::ExportToFolder(TObjArray * array) \r
+TFolder* AlidNdPtAnalysis::ExportToFolder(TObjArray * const array) \r
 {\r
   // recreate folder avery time and export objects to new one\r
   //\r