\r
#include "AliPWG0Helper.h"\r
#include "AlidNdPtHelper.h"\r
+#include "AlidNdPtAnalysis.h"\r
#include "AlidNdPtCorrection.h"\r
\r
using namespace std;\r
fEventMultCorrelationMatrix(0),\r
fZvNorm(0),\r
fZvEmptyEventsNorm(0),\r
+ fLHCBin0Background(0),\r
fCorrTriggerMBtoInelEventMatrix(0),\r
fCorrTriggerMBtoNDEventMatrix(0),\r
fCorrTriggerMBtoNSDEventMatrix(0),\r
fContTrackMatrix(0),\r
fContMultTrackMatrix(0),\r
fCorrMatrixFileName(""),\r
- fCosmicsHisto(0)\r
+ fCosmicsHisto(0),\r
+ fEventCount(0)\r
{\r
// default constructor\r
for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
fEventMultCorrelationMatrix(0),\r
fZvNorm(0),\r
fZvEmptyEventsNorm(0),\r
+ fLHCBin0Background(0),\r
fCorrTriggerMBtoInelEventMatrix(0),\r
fCorrTriggerMBtoNDEventMatrix(0),\r
fCorrTriggerMBtoNSDEventMatrix(0),\r
fContTrackMatrix(0),\r
fContMultTrackMatrix(0),\r
fCorrMatrixFileName(corrMatrixFileName),\r
- fCosmicsHisto(0)\r
+ fCosmicsHisto(0),\r
+ fEventCount(0)\r
{\r
// constructor\r
for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
if(fMCEventPrimTrackMeanPtTrueMult1) delete fMCEventPrimTrackMeanPtTrueMult1; fMCEventPrimTrackMeanPtTrueMult1=0;\r
\r
if(fCosmicsHisto) delete fCosmicsHisto; fCosmicsHisto=0;\r
+ if(fEventCount) delete fEventCount; fEventCount=0;\r
\r
for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;\r
//const Int_t ptNbins = 52; \r
//Double_t binsPt[ptNbins+1] = { 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90, 2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00, 5.20, 5.40, 5.60, 5.80, 6.00, 7.00, 7.60, 8.80, 9.60 }; \r
\r
+ /*\r
const Int_t ptNbins = 56; \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 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
+ Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
+ */\r
+\r
+\r
+ const Int_t ptNbins = 68;\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
+\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
Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
\r
fCosmicsHisto->GetAxis(2)->SetTitle("pt (GV/c)");\r
fCosmicsHisto->Sumw2();\r
\r
+ //\r
+ Int_t binsEventCount[2]={2,2};\r
+ Double_t minEventCount[2]={0,0}; \r
+ Double_t maxEventCount[2]={2,2}; \r
+ fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount);\r
+ fEventCount->GetAxis(0)->SetTitle("trig");\r
+ fEventCount->GetAxis(1)->SetTitle("trig+vert");\r
+ fEventCount->Sumw2();\r
+\r
+\r
// init output folder\r
fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");\r
\r
fEventMultCorrelationMatrix = (THnSparseF*)folder->FindObject("event_mult_correlation_matrix");\r
if(!fEventMultCorrelationMatrix) {\r
Printf("No %s matrix \n", "event_mult_correlation_matrix");\r
+ return;\r
}\r
\r
//\r
fCorrTriggerMBtoNDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoND_corr_matrix");\r
if(!fCorrTriggerMBtoNDEventMatrix) {\r
Printf("No %s matrix \n", "zv_mult_trig_MBtoND_corr_matrix");\r
+ return;\r
}\r
\r
// trigger bias correction (MBtoNSD)\r
fCorrTriggerMBtoNSDEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoNSD_corr_matrix");\r
if(!fCorrTriggerMBtoNSDEventMatrix) {\r
Printf("No %s matrix \n", "zv_mult_trig_MBtoNSD_corr_matrix");\r
+ return;\r
}\r
\r
// trigger bias correction (MBtoInel)\r
fCorrTriggerMBtoInelEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_trig_MBtoInel_corr_matrix");\r
if(!fCorrTriggerMBtoInelEventMatrix) {\r
Printf("No %s matrix \n", "zv_mult_trig_MBtoInel_corr_matrix"); \r
+ return;\r
}\r
\r
// vertex reconstruction efficiency correction\r
fCorrEventMatrix = (THnSparseF*)folder->FindObject("zv_mult_event_corr_matrix");\r
if(!fCorrEventMatrix) {\r
Printf("No %s matrix \n", "zv_mult_event_corr_matrix");\r
+ return;\r
}\r
\r
//\r
fZvNorm = (TH1D*)folder->FindObject("zv_distribution_norm");\r
if(!fZvNorm) {\r
Printf("No %s matrix \n", "fZvNorm");\r
+ return;\r
}\r
\r
fZvEmptyEventsNorm = (TH1D*)folder->FindObject("zv_empty_events_norm");\r
if(!fZvEmptyEventsNorm) {\r
Printf("No %s matrix \n", "fZvEmptyEventsNorm");\r
+ return;\r
+ }\r
+\r
+ fLHCBin0Background = (TH1D*)folder->FindObject("hLHCBin0Background");\r
+ if(!fLHCBin0Background) {\r
+ Printf("No %s matrix \n", "fLHCBin0Background");\r
+ return;\r
}\r
\r
//\r
fCorrTriggerMBtoNDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoND_corr_matrix");\r
if(!fCorrTriggerMBtoNDTrackEventMatrix) {\r
Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoND_corr_matrix");\r
+ return;\r
}\r
\r
// trigger bias correction (MBtoNSD)\r
fCorrTriggerMBtoNSDTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoNSD_corr_matrix");\r
if(!fCorrTriggerMBtoNSDTrackEventMatrix) {\r
Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoNSD_corr_matrix");\r
+ return;\r
}\r
\r
// trigger bias correction (MBtoInel) \r
fCorrTriggerMBtoInelTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_trig_MBtoInel_corr_matrix");\r
if(!fCorrTriggerMBtoInelTrackEventMatrix) {\r
Printf("No %s matrix \n", "zv_pt_eta_track_trig_MBtoInel_corr_matrix");\r
+ return;\r
}\r
\r
// vertex reconstruction efficiency correction (zv,pt,eta)\r
fCorrTrackEventMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_event_corr_matrix");\r
if(!fCorrTrackEventMatrix) {\r
Printf("No %s matrix \n", "zv_pt_eta_track_event_corr_matrix");\r
+ return;\r
}\r
\r
// track reconstruction efficiency correction (zv,pt,eta)\r
fCorrTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_corr_matrix");\r
if(!fCorrTrackMatrix) {\r
Printf("No %s matrix \n", "zv_pt_eta_track_corr_matrix");\r
+ return;\r
}\r
\r
// high pt track reconstruction efficiency correction (zv,pt,eta)\r
fCorrHighPtTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_highPt_track_corr_matrix");\r
if(!fCorrHighPtTrackMatrix) {\r
Printf("No %s matrix \n", "zv_pt_eta_highPt_track_corr_matrix");\r
+ return;\r
}\r
\r
// secondary tracks contamination correction (zv,pt,eta)\r
fContTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_track_cont_matrix");\r
if(!fContTrackMatrix) {\r
Printf("No %s matrix \n", "zv_pt_eta_track_cont_matrix");\r
+ return;\r
}\r
\r
// multiply reconstructed tracks correction\r
fContMultTrackMatrix = (THnSparseF*)folder->FindObject("zv_pt_eta_mult_track_cont_matrix");\r
if(!fContMultTrackMatrix) {\r
Printf("No %s matrix \n", "zv_pt_eta_mult_track_cont_matrix");\r
+ return;\r
}\r
}\r
}\r
\r
// trigger selection\r
Bool_t isEventTriggered = kTRUE;\r
+ AliPhysicsSelection *trigSel = NULL;\r
+ AliTriggerAnalysis *trigAna = NULL; // needed for andV0\r
+\r
if(evtCuts->IsTriggerRequired()) \r
{\r
- AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
+ //\r
+ trigSel = GetPhysicsTriggerSelection();\r
if(!trigSel) {\r
AliDebug(AliLog::kError, "cannot get trigSel");\r
return;\r
}\r
-\r
- if(IsUseMCInfo()) { \r
- //static AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis;\r
- //isEventTriggered = triggerAnalysis->IsTriggerFired(esdEvent, GetTrigger());\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 = 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
+ {\r
+ trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);\r
+ } else {\r
+ trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::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
+\r
// use MC information\r
AliHeader* header = 0;\r
AliGenEventHeader* genHeader = 0;\r
fMCEventHist1->Fill(vMCEventHist1);\r
\r
// multipliticy of all MC primary tracks\r
- // in Zvtx, pt and eta ranges\r
+ // in Zvtx, eta ranges\r
multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);\r
\r
} // end bUseMC\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
- if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {\r
- vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced());\r
+\r
+ if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {\r
+ vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");\r
isRecVertex = kTRUE;\r
}\r
+\r
Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; \r
- //printf("isEventOK %d, isRecVertex %d, nContributors %d, Zv %f\n",isEventOK, isRecVertex, vtxESD->GetNContributors(), vtxESD->GetZv());\r
+ //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
+ //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
\r
- //\r
- // get multiplicity vertex contributors\r
- //\r
+ // vertex contributors\r
Int_t multMBTracks = 0; \r
- if(GetAnalysisMode() == AlidNdPtHelper::kTPC || GetAnalysisMode() == AlidNdPtHelper::kMCRec) { \r
- multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
+ if(GetAnalysisMode() == AlidNdPtHelper::kTPC) \r
+ { \r
+ if(vtxESD->GetStatus() && isRecVertex)\r
+ multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
} \r
- else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
- GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode() == AlidNdPtHelper::kMCRec || \r
- GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid) {\r
- //if(vtxESD->GetStatus())\r
- // multMBTracks = vtxESD->GetNContributors();\r
-\r
- // origin Jan Fiete GO\r
- const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
- if (mult) {\r
- Int_t trackletCount = 0;\r
-\r
- for(Int_t i=0; i<mult->GetNumberOfTracklets(); ++i) {\r
- Float_t deltaPhi = mult->GetDeltaPhi(i);\r
- // prevent values to be shifted by 2 Pi()\r
- if (deltaPhi < -TMath::Pi())\r
- deltaPhi += TMath::Pi() * 2;\r
- if (deltaPhi > TMath::Pi())\r
- deltaPhi -= TMath::Pi() * 2;\r
-\r
- //if (fDeltaPhiCut > 0 && TMath::Abs(deltaPhi) > fDeltaPhiCut)\r
- // continue;\r
-\r
- trackletCount++;\r
- }\r
- //multMBTracks = mult->GetNumberOfTracklets();\r
- multMBTracks = trackletCount;\r
- //printf("trackletCount %d \n", trackletCount);\r
- }\r
- else {\r
- AliDebug(AliLog::kError, Form("Multiplicty %p", mult));\r
- return; \r
- }\r
+ else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
+ GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ) \r
+ {\r
+ const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
+ //if(mult && vtxESD->GetStatus() && isRecVertex)\r
+ if(mult)\r
+ multMBTracks = mult->GetNumberOfTracklets();\r
+ \r
} \r
+ else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )\r
+ {\r
+ if(vtxESD->GetStatus() && isRecVertex)\r
+ multMBTracks = vtxESD->GetNContributors();\r
+\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
+ Bool_t isTrigAndVertex = isEventTriggered && isEventOK;\r
+ Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex};\r
+ fEventCount->Fill(vEventCount);\r
+\r
//\r
// correct event and track histograms\r
//\r
Int_t *labelsRec=0;\r
Bool_t isCosmic = kFALSE;\r
\r
+\r
if(isEventOK && isEventTriggered)\r
{\r
// get all charged tracks\r
if(!isCosmic) continue;\r
}\r
\r
- if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) \r
- multRecTemp++;\r
- } \r
+ if(esdTrackCuts->AcceptTrack(track)) \r
+ {\r
+ if(accCuts->AcceptTrack(track)) multRecTemp++;\r
+ } \r
+ }\r
\r
//\r
for(Int_t i=0; i<entries;++i) \r
if(!track) continue;\r
if(track->Charge()==0) continue;\r
\r
-\r
// only postive charged \r
if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
continue;\r
continue;\r
\r
// track-level corrections\r
- if(esdTrackCuts->AcceptTrack(track)) \r
- {\r
+ if(!esdTrackCuts->AcceptTrack(track)) continue;\r
+ //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;\r
+\r
// cosmics analysis\r
isCosmic = kFALSE;\r
if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
// if TPC-ITS hybrid tracking (kTPCITSHybrid)\r
// replace track parameters with TPC-ony track parameters\r
//\r
- if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid ) \r
+ if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) \r
{\r
- // Relate TPC-only tracks to SPD vertex\r
- isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig);\r
+ // Relate TPC-only tracks to Tracks or SPD vertex\r
+ isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);\r
if(!isOK) continue;\r
\r
// replace esd track parameters with TPCinner\r
} \r
\r
//\r
- if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate) \r
+ if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCTrackSPDvtxUpdate) \r
{\r
//\r
// update track parameters\r
//\r
AliExternalTrackParam cParam;\r
- isOK = track->RelateToVertexTPC(esdEvent->GetPrimaryVertexSPD(),esdEvent->GetMagneticField(),kVeryBig,&cParam);\r
+ isOK = track->RelateToVertexTPC(vtxESD,esdEvent->GetMagneticField(),kVeryBig,&cParam);\r
if(!isOK) continue;\r
track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());\r
\r
multRec++;\r
}\r
}\r
- }\r
- }\r
+ }\r
+\r
// event-level corrections\r
- if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) { \r
+ if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
+ { \r
FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks);\r
}\r
else {\r
\r
// calculate meanPt from the event\r
Double_t meanPtMult[8] = {0}; \r
- Double_t meanPtTrueMult[8] = {0}; \r
for (Int_t i = 0; i<8; i++) {\r
if(!fCorrRecTrackMultHist1[i]) continue;\r
- meanPtMult[i] = fCorrRecTrackPt1[i]->Projection(0)->GetMean(); \r
+ TH1D *hp = (TH1D *)fCorrRecTrackPt1[i]->Projection(0);\r
+ if(!hp) continue;\r
+ meanPtMult[i] = hp->GetMean(); \r
Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp};\r
fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1); \r
\r
if( IsUseMCInfo() ) {\r
- if(!fCorrRecTrackPt1[i]) continue;\r
- meanPtTrueMult[i] = fCorrRecTrackPt1[i]->Projection(0)->GetMean(); \r
Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks};\r
fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1); \r
}\r
\r
// reset pt histo for the next event\r
if(fCorrRecTrackPt1[i]) fCorrRecTrackPt1[i]->Reset();\r
+ if(hp) delete hp;\r
}\r
\r
// control event histograms\r
Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};\r
fRecEventHist1->Fill(vRecEventHist1);\r
\r
- // correlation track multiplicity vs tracklet multiplicity\r
- Double_t vRecEventMultHist1[3] = {multRecTemp, multMBTracks};\r
+ // correlation track multiplicity vs MB track multiplicity\r
+ Double_t vRecEventMultHist1[3] = {multRec, multMBTracks};\r
fRecEventMultHist1->Fill(vRecEventMultHist1);\r
-\r
- } \r
+ }\r
\r
// empty events corrections\r
// no reconstructed zv\r
- if(isEventTriggered && multMBTracks==0) {\r
- if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) {\r
+ if( isEventTriggered && multMBTracks==0 ) \r
+ {\r
+ if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
+ {\r
FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks);\r
}\r
else {\r
Double_t zv = fZvNorm->GetRandom();\r
- FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);\r
+ if(zv>evtCuts->GetMinZv() && zv<evtCuts->GetMaxZv())\r
+ FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);\r
}\r
}\r
\r
//\r
Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks};\r
fMCAllEventMultHist1->Fill(vMCEventMatrix);\r
+\r
if(evtType == AliPWG0Helper::kND) {\r
fMCAllNDEventMultHist1->Fill(vMCEventMatrix);\r
}\r
if(evtType != AliPWG0Helper::kSD) {\r
fMCAllNSDEventMultHist1->Fill(vMCEventMatrix);\r
}\r
- if(isEventTriggered) fMCTriggerMultHist1->Fill(vMCEventMatrix);\r
- if(isEventTriggered && isEventOK) fMCEventMultHist1->Fill(vMCEventMatrix);\r
+ if(isEventTriggered) {\r
+ fMCTriggerMultHist1->Fill(vMCEventMatrix);\r
+ }\r
+ if(isEventTriggered && isEventOK) {\r
+ fMCEventMultHist1->Fill(vMCEventMatrix);\r
+ }\r
\r
//\r
// MC histograms for efficiency studies\r
continue;\r
\r
// only charged particles\r
+ \r
+ if(!particle->GetPDG()) continue;\r
Double_t charge = particle->GetPDG()->Charge()/3.;\r
if (TMath::Abs(charge) < 0.001)\r
continue;\r
// sum up pt in the event\r
sumPtMC +=gpt; \r
\r
- Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRec}; \r
+ Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRecTemp}; \r
Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks}; \r
- Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRec,multMCTrueTracks}; \r
+ Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRecTemp,multMCTrueTracks}; \r
\r
fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
//\r
Double_t meanPtMCMult = 0;\r
Double_t meanPtMCTrueMult = 0;\r
- if(multRec) meanPtMCMult = sumPtMC/multRec; \r
- if(multMCTrueTracks) meanPtMCTrueMult = sumPtMC/multMCTrueTracks; \r
+ if(multRecTemp) { \r
+ meanPtMCMult = sumPtMC/multRecTemp; \r
+ }\r
+ if(multMCTrueTracks) { \r
+ meanPtMCTrueMult = sumPtMC/multMCTrueTracks; \r
+ }\r
\r
- Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRec}; \r
+ Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRecTemp}; \r
Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks}; \r
\r
fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
}\r
-\r
}\r
} // end bUseMC\r
\r
\r
if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events\r
{\r
+ Double_t factLHCBack = 1.;\r
+ if(!IsUseMCInfo()) factLHCBack = fLHCBin0Background->GetBinContent(1); \r
+\r
+\r
Int_t bin = fZvEmptyEventsNorm->FindBin(zv);\r
Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);\r
+\r
Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);\r
Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);\r
Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);\r
- //printf("factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factZ,corrToInelF0,corrToNDF0,corrToNSDF0);\r
+ //printf("factLHCBack %f, factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factLHCBack,factZ,corrToInelF0,corrToNDF0,corrToNSDF0);\r
\r
fCorrRecEventHist2[0]->Fill(vEventMatrix);\r
- fCorrRecEventHist2[1]->Fill(vEventMatrix,factZ);\r
- fCorrRecEventHist2[2]->Fill(vEventMatrix,factZ*corrToInelF0);\r
- fCorrRecEventHist2[3]->Fill(vEventMatrix,factZ*corrToNDF0);\r
- fCorrRecEventHist2[4]->Fill(vEventMatrix,factZ*corrToNSDF0);\r
+ fCorrRecEventHist2[1]->Fill(vEventMatrix,factLHCBack*factZ);\r
+ fCorrRecEventHist2[2]->Fill(vEventMatrix,factLHCBack*factZ*corrToInelF0);\r
+ fCorrRecEventHist2[3]->Fill(vEventMatrix,factLHCBack*factZ*corrToNDF0);\r
+ fCorrRecEventHist2[4]->Fill(vEventMatrix,factLHCBack*factZ*corrToNSDF0);\r
}\r
}\r
\r
TParticle* particle = stack->Particle(label);\r
if(!particle) return;\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
{\r
// track level corrections\r
Double_t trackEffF = 1.0; \r
- if(pt < 2.5) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);\r
+ if(pt < 2.6) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);\r
else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta);\r
\r
Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta);\r
if(mother) mother_pdg = 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
Float_t gpt = particle->Pt();\r
Float_t qgpt = particle->Pt() * gq;\r
Int_t binz = az->FindBin(eta);\r
Int_t dim[3] = {binx,biny,binz};\r
\r
- Double_t fact = 1.0-hist->GetBinContent(dim); \r
+ //\r
+ // additional correction for secondary \r
+ // particles with strangeness (data driven)\r
+ // \r
+ Double_t corrFact = 1.;\r
+ if(!IsUseMCInfo()) corrFact = AlidNdPtHelper::GetStrangenessCorrFactor(pt);\r
+ //printf("pt %f, corrFact %f \n", pt, corrFact);\r
+\r
+ Double_t fact = 1.0 - corrFact*hist->GetBinContent(dim); \r
//Double_t fact = hist->GetBinContent(dim); \r
\r
return fact;\r
\r
// collection of generated histograms\r
\r
+ // physics selection\r
+ TList *collPhysSelection = new TList;\r
+\r
Int_t count=0;\r
while((obj = iter->Next()) != 0) {\r
AlidNdPtCorrection* entry = dynamic_cast<AlidNdPtCorrection*>(obj);\r
if (entry == 0) continue; \r
\r
+ collPhysSelection->Add(entry->GetPhysicsTriggerSelection());\r
+\r
+ fEventCount->Add(entry->fEventCount);\r
+\r
fMCEventHist1->Add(entry->fMCEventHist1);\r
fRecEventHist1->Add(entry->fRecEventHist1);\r
fRecEventMultHist1->Add(entry->fRecEventMultHist1);\r
count++;\r
}\r
\r
+ //\r
+ AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();\r
+ trigSelection->Merge(collPhysSelection);\r
+ if(collPhysSelection) delete collPhysSelection;\r
+\r
return count;\r
}\r
\r
\r
printf("minEta %f, maxEta %f \n",minEta, maxEta);\r
\r
+ //\r
+ // LHC backgraund in all and 0-bins\r
+ //\r
+ AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
+ trigSel->SaveHistograms("physics_selection");\r
+\r
//\r
// cosmics background histo\r
//\r