#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
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
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
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
// 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
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
//\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
//\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
//\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
// 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
\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
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
//\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
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
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
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
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
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
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
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
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
//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
\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
} \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
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
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
}\r
\r
// \r
- // track-level corrections (zv,pt.eta)\r
+ // track-level corrections (zv,pt,eta)\r
//\r
if(isEventOK && isEventTriggered)\r
{\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(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
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
if(labelsRec) delete [] labelsRec; labelsRec = 0;\r
\r
if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;\r
+ //if(trigAna) delete trigAna;\r
\r
}\r
\r
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
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
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
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
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
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
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
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
\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
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