]> 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 a47238b110b05a98572655722029b5789f3eae13..45ef1abba3692850a23b8172aa613870da6e05c3 100644 (file)
 #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
@@ -136,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
@@ -229,6 +233,7 @@ AlidNdPtAnalysis::AlidNdPtAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,t
   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
@@ -305,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
@@ -322,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
@@ -344,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
@@ -360,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
@@ -397,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
@@ -428,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
@@ -460,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
@@ -507,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
@@ -553,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
@@ -601,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
@@ -629,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
@@ -648,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
@@ -745,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
@@ -761,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
@@ -872,25 +925,134 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
     return;\r
   }\r
 \r
-  // get physics trigger selection \r
-  AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
-  if(!trigSel) {\r
-    AliDebug(AliLog::kError, "cannot get trigSel");\r
-    return;\r
-  }\r
-\r
   // trigger selection\r
   Bool_t isEventTriggered = kTRUE;\r
-  if(evtCuts->IsTriggerRequired())  {\r
-    if(IsUseMCInfo()) { \r
-      //static AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis;\r
-      //isEventTriggered = triggerAnalysis->IsTriggerFired(esdEvent, GetTrigger());\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
-      isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\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
-      //isEventTriggered = esdEvent->IsTriggerClassFired(GetTriggerClass());\r
-      isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\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
@@ -950,7 +1112,7 @@ 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
@@ -966,34 +1128,52 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
   Int_t multMBTracks = 0; \r
   if(GetAnalysisMode() == AlidNdPtHelper::kTPC) \r
   {  \r
-     multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
+     if(vtxESD->GetStatus() && isRecVertex)\r
+       multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
   } \r
-  else if(GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate) \r
+  else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
+           GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate ) \r
   {\r
-     //multMBTracks = AlidNdPtHelper::GetSPDMBTrackMult(esdEvent,0.0);\r
-     if(vtxESD->GetStatus())\r
-       multMBTracks = vtxESD->GetNContributors();\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
-     Bool_t isCosmic = kFALSE;\r
 \r
     labelsAll = new Int_t[entries];\r
     labelsAcc = new Int_t[entries];\r
@@ -1012,6 +1192,89 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
       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
@@ -1019,13 +1282,18 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
          //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
-         // cosmics analysis\r
-         isCosmic = kFALSE;\r
-         if( GetParticleMode()==AlidNdPtHelper::kCosmics )\r
+         // check cosmics tracks\r
+         if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
          {\r
-           Int_t mult = 0;\r
-           if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) ) \r
+           if(accCuts->AcceptTrack(track)) \r
           { \r
              for(Int_t j=0; j<entries;++j) \r
              {\r
@@ -1035,21 +1303,24 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
 \r
                if( esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) \r
                { \r
-                 mult++;\r
-                 isCosmic = AlidNdPtHelper::IsCosmicTrack(track,track1);\r
+                if ( AlidNdPtHelper::IsCosmicTrack(track,track1) ) { \r
+                  cosmicCount++;\r
+                  break;\r
+                }\r
               }\r
             }\r
           }\r
-          if(isCosmic) \r
-             printf("evt. number %d , mult %d \n", esdEvent->GetEventNumberInFile(), mult);\r
-\r
-           if(!isCosmic) continue;\r
+          // if(!isCosmic) continue;\r
          }\r
 \r
-        if(GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate) {\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
-            track->RelateToVertexTPC(esdEvent->GetPrimaryVertexSPD(),esdEvent->GetMagneticField(),kVeryBig,&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
@@ -1059,13 +1330,22 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
             }  \r
          }\r
           else {\r
-             if(accCuts->AcceptTrack(track)) {\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
+          }\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
@@ -1073,23 +1353,17 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
      Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};\r
      fRecEventHist1->Fill(vRecEventHist1);\r
 \r
-     if(isCosmic) \r
-       printf("evt. number %d , rec. mult %d \n", esdEvent->GetEventNumberInFile(), multRec);\r
-\r
      Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRec};\r
      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
@@ -1139,6 +1413,7 @@ 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 ( TMath::Abs(charge) < 0.001 )\r
         continue;\r
@@ -1211,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
@@ -1245,8 +1520,9 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
         }\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
@@ -1264,7 +1540,8 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
          if(accCuts->AcceptTrack(particle)) \r
         {\r
 \r
-           if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) fGenPrimTrackMatrix->Fill(vTrackMatrix);\r
+           if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) \r
+            fGenPrimTrackMatrix->Fill(vTrackMatrix);\r
 \r
           // fill control histograms\r
            if(fHistogramsOn) \r
@@ -1297,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, GetParticleMode()) ) 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
@@ -1318,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
@@ -1387,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
@@ -1417,6 +1704,7 @@ void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *con
   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(TMath::Abs(gq)<0.001) return;\r
   Float_t gpt = particle->Pt();\r
@@ -1458,8 +1746,10 @@ void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNd
   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(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
@@ -1481,10 +1771,16 @@ void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNd
   fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);\r
 \r
   Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg};\r
-  if(prim) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
-  else     { \r
-         fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\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
@@ -1501,6 +1797,9 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* const 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
@@ -1508,6 +1807,10 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* const 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
@@ -1574,6 +1877,7 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* const 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
@@ -1586,9 +1890,58 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* const 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
@@ -1601,7 +1954,13 @@ void AlidNdPtAnalysis::Analyse()
 \r
   char name[256];\r
   TObjArray *aFolderObj = new TObjArray;\r
\r
+  \r
+  //\r
+  // LHC backgraund in all and 0-bins\r
+  //\r
+  AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
+  trigSel->SaveHistograms("physics_selection");\r
+\r
   //\r
   // Reconstructed event vertex\r
   //\r
@@ -2104,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