// Generic histograms to be corrected\r
fRecEventHist(0),\r
fRecTrackHist(0),\r
+ fEventCount(0),\r
\r
// Candle event histogram\r
fRecCandleEventMatrix(0),\r
// Generic histograms to be corrected\r
fRecEventHist(0),\r
fRecTrackHist(0),\r
+ fEventCount(0),\r
\r
// Candle event histogram\r
fRecCandleEventMatrix(0),\r
//\r
if(fRecEventHist) delete fRecEventHist; fRecEventHist=0; \r
if(fRecTrackHist) delete fRecTrackHist; fRecTrackHist=0; \r
+ if(fEventCount) delete fEventCount; fEventCount=0;\r
\r
//\r
if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r
fRecTrackHist2->GetAxis(3)->SetTitle("#eta");\r
fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)");\r
fRecTrackHist2->Sumw2();\r
+ \r
+ Int_t binsEventCount[3]={2,2,2};\r
+ Double_t minEventCount[3]={0,0,0}; \r
+ Double_t maxEventCount[3]={2,2,2}; \r
+ fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount);\r
+ fEventCount->GetAxis(0)->SetTitle("trig");\r
+ fEventCount->GetAxis(1)->SetTitle("trig+vert");\r
+ fEventCount->GetAxis(2)->SetTitle("selected");\r
+ fEventCount->Sumw2();\r
\r
// init folder\r
fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");\r
if(!physicsSelection) return;\r
//SetPhysicsTriggerSelection(physicsSelection);\r
\r
- if (isEventTriggered) {\r
+ if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {\r
// set trigger (V0AND)\r
triggerAnalysis = physicsSelection->GetTriggerAnalysis();\r
if(!triggerAnalysis) return;\r
}\r
\r
\r
- /*\r
- if(evtCuts->IsTriggerRequired()) \r
- {\r
- //\r
- trigSel = GetPhysicsTriggerSelection();\r
- if(!trigSel) {\r
- AliDebug(AliLog::kError, "cannot get trigSel");\r
- return;\r
- }\r
- \r
- if(IsUseMCInfo()) \r
- { \r
- trigSel->SetAnalyzeMC();\r
-\r
- if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
- {\r
- // check V0 systematics (case1)\r
- // Initialization done in the macro\r
- trigAna = trigSel->GetTriggerAnalysis();\r
- if(!trigAna) \r
- return;\r
-\r
- //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
- //trigAna->SetV0AdcThr(15);\r
-\r
- isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
- //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered);\r
- //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
- \r
- if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
- {\r
- isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
- //printf("V0AND %d \n",isEventTriggered);\r
- }\r
- }\r
- else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)\r
- {\r
- // check V0 systematics (case2 only in MC)\r
- // Initialization done in the macro\r
-\r
- trigAna = trigSel->GetTriggerAnalysis();\r
- if(!trigAna) \r
- return;\r
-\r
- //trigAna->SetV0HwPars(0, 0, 125);\r
- //trigAna->SetV0AdcThr(0);\r
-\r
- isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
- //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
- \r
- if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
- {\r
- isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
- //printf("V0AND %d \n",isEventTriggered);\r
- }\r
- }\r
- else {\r
- isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
- //printf("MB1 %d \n",isEventTriggered);\r
- \r
- if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
- {\r
- trigAna = trigSel->GetTriggerAnalysis();\r
- if(!trigAna) \r
- return;\r
-\r
- isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
- //printf("V0AND %d \n",isEventTriggered);\r
- }\r
- }\r
- }\r
- else {\r
- //\r
- // 0-multiplicity bin for LHC background correction\r
- //\r
- if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
- GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
- GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
- GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
- GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) \r
- {\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
-\r
// use MC information\r
AliHeader* header = 0;\r
AliGenEventHeader* genHeader = 0;\r
Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; \r
//printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
//printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
+ \r
+ Bool_t isTrigAndVertex = isEventTriggered && isEventOK;\r
+ \r
+ Double_t vEventCount[3] = { (isEventTriggered && kTRUE) , isTrigAndVertex, isTrigAndVertex && (TMath::Abs(vtxESD->GetZv()) < 10.)};\r
+ fEventCount->Fill(vEventCount); \r
\r
// vertex contributors\r
Int_t multMBTracks = 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 && isEventSelected)\r
} \r
}\r
\r
- \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
+ FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecTemp); \r
+ labelsAll[multAll] = TMath::Abs(track->GetLabel());\r
+ multAll++;\r
+ \r
+ //if(accCuts->AcceptTrack(track)) { \r
+ //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); \r
+ //labelsAcc[multAcc] = TMath::Abs(track->GetLabel());\r
+ //multAcc++;\r
+ //}\r
\r
// esd track selection \r
// ITS stand alone\r
}\r
else {\r
// check track cuts\r
+ \r
if(!esdTrackCuts->AcceptTrack(track)) \r
continue;\r
}\r
if(tpcTrack) delete tpcTrack; \r
} \r
\r
- FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecTemp); \r
- labelsAll[multAll] = TMath::Abs(track->GetLabel());\r
- multAll++;\r
-\r
- //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); \r
- //labelsAcc[multAcc] = TMath::Abs(track->GetLabel());\r
- //multAcc++;\r
- \r
- // check high-pt tracks\r
- if(accCuts->AcceptTrack(track) && track->Pt() > 6.)\r
- {\r
- //printf(" high pt: pt %f \n",track->Pt());\r
- highPtCount++;\r
- }\r
-\r
- // check cosmics tracks\r
- if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
- {\r
- if(accCuts->AcceptTrack(track)) \r
- { \r
- for(Int_t j=0; j<entries;++j) \r
- {\r
- AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);\r
- if(!track1) continue;\r
- if(track1->Charge()==0) continue;\r
-\r
- if( esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) ) \r
- { \r
- if ( AlidNdPtHelper::IsCosmicTrack(track,track1) ) { \r
- cosmicCount++;\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- // if(!isCosmic) continue;\r
- }\r
\r
// update track parameters using vertex point \r
if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || \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 vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()}; \r
\r
// all genertated primaries including neutral\r
- if( iMc < stack->GetNprimary() ) {\r
- //fGenTrackMatrix->Fill(vTrackMatrix);\r
- }\r
+ //if( iMc < stack->GetNprimary() ) {\r
+ //fGenTrackMatrix->Fill(vTrackMatrix);\r
+ //}\r
\r
// only charged particles\r
if(!particle->GetPDG()) continue;\r
fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);\r
fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);\r
fRecTrackHist2->Add(entry->fRecTrackHist2);\r
+ fEventCount->Add(entry->fEventCount);\r
\r
count++;\r
}\r
if(!physicsSelection) return;
//SetPhysicsTriggerSelection(physicsSelection);
- if (isEventTriggered) {
+ if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
// set trigger (V0AND)
triggerAnalysis = physicsSelection->GetTriggerAnalysis();
if(!triggerAnalysis) return;
}
}
- /*
- // trigger selection
- Bool_t isEventTriggered = kTRUE;
- AliPhysicsSelection *trigSel = NULL;
- AliTriggerAnalysis *trigAna = NULL;
-
- if(evtCuts->IsTriggerRequired())
- {
- //
- trigSel = GetPhysicsTriggerSelection();
- if(!trigSel) {
- printf("cannot get trigSel \n");
- return;
- }
-
- //
- if(IsUseMCInfo())
- {
- trigSel->SetAnalyzeMC();
-
-
- isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
-
- if(GetTrigger() == AliTriggerAnalysis::kV0AND)
- {
- trigAna = trigSel->GetTriggerAnalysis();
- if(!trigAna)
- return;
-
- isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
- }//if(GetTrigger() == AliTriggerAnalysis::kV0AND)
- }//if(IsUseMCInfo())
- }//if(evtCuts->IsTriggerRequired())
- */
// centrality determination
- Float_t centralityF = 0;
+ Float_t centralityF = -1.;
AliCentrality *esdCentrality = esdEvent->GetCentrality();
centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());
- if (centralityF == 0.) {
- centralityF = 100.;
- }
-
// use MC information
AliHeader* header = 0;
// vertex contributors
Int_t multMBTracks = 0;
- if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
+ if(GetAnalysisMode() == AlidNdPtHelper::kTPC || GetAnalysisMode() == AlidNdPtHelper::kTPCITS)
{
if(vtxESD->GetStatus()) {
multMBTracks = vtxESD->GetNContributors();
}
}
- else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {
- if(vtxESD->GetStatus()) {
- multMBTracks = vtxESD->GetNContributors();
- }
- }
else {
AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
return;
labelsAll[multAll] = TMath::Abs(track->GetLabel());
multAll++;
- if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && recCuts->AcceptTrack(track)) {
+ if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track) && recCuts->AcceptTrackLocalTPC(track)) {
fRecTrackHist2[AlidNdPtHelper::kRecTracks]->Fill(values);
FillHistograms(track,stack,AlidNdPtHelper::kRecTracks,centralityF);
if(IsUseMCInfo())
{
-
- //Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks };
-
//
// event level corrections (zv,N_MB)
//
if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;
if(labelsRec) delete [] labelsRec; labelsRec = 0;
- if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
-
}
//_____________________________________________________________________________
, fPitList(0)\r
, fCompList(0)\r
, fUseMCInfo(kFALSE)\r
- , fUseCentrality(0) // default = off\r
- , fUseCentralityBin(0)\r
{\r
// Constructor\r
\r
}\r
Printf("UserCreateOutputObjects(): Number of output objects: %d \n", count);\r
\r
- if(fUseCentrality) {\r
- Printf("Use Centrality - Bin %d", fUseCentralityBin);\r
- }\r
-\r
PostData(1, fOutput);\r
}\r
\r
}\r
}\r
\r
- // Process analysis\r
- Bool_t process = kTRUE;\r
-\r
- // Check fo centrality\r
- if (fUseCentrality) {\r
- if ( CalculateCentralityBin() != fUseCentralityBin ) {\r
- process = kFALSE;\r
- }\r
- }\r
\r
- if (process) {\r
AlidNdPt *pObj = 0;\r
fPitList->Reset();\r
while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) {\r
pObj->Process(fESD,fMC);\r
}\r
- }\r
\r
\r
// Post output data.\r
return;\r
}\r
}\r
-\r
-//________________________________________________________________________\r
-Int_t AlidNdPtTask::CalculateCentralityBin(){\r
- // Get Centrality bin\r
-\r
- Int_t centrality = -1;\r
- Float_t centralityF = -1;\r
-\r
- if (fUseCentrality == 0)\r
- return centrality;\r
-\r
- AliCentrality *esdCentrality = fESD->GetCentrality();\r
- \r
- // New : 2010-11-18 JMT \r
- if ( fUseCentrality == 1 )\r
- centralityF = esdCentrality->GetCentralityPercentile("V0M");\r
- else if ( fUseCentrality == 2 )\r
- centralityF = esdCentrality->GetCentralityPercentile("CL1");\r
- else if ( fUseCentrality == 3 )\r
- centralityF = esdCentrality->GetCentralityPercentile("TRK"); \r
- if (centralityF == 0.)\r
- centralityF = 100.;\r
-\r
- if ( centralityF >= 0. && centralityF < 5.) centrality = 0;\r
- else if ( centralityF >= 5. && centralityF < 10.) centrality = 5;\r
- else if ( centralityF >= 10. && centralityF < 20.) centrality = 10;\r
- else if ( centralityF >= 20. && centralityF < 30.) centrality = 20;\r
- else if ( centralityF >= 30. && centralityF < 40.) centrality = 30;\r
- else if ( centralityF >= 40. && centralityF < 50.) centrality = 40;\r
- else if ( centralityF >= 50. && centralityF < 60.) centrality = 50;\r
- else if ( centralityF >= 60. && centralityF < 70.) centrality = 60;\r
- else if ( centralityF >= 70. && centralityF < 80.) centrality = 70;\r
- else if ( centralityF >= 80. && centralityF < 90.) centrality = 80;\r
- else if ( centralityF >= 90. && centralityF <=100.) centrality = 90;\r
- \r
- return centrality;\r
-}\r