* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-// $Id: AliAnalysisTaskLongRangeCorrelations.cxx 313 2013-06-28 16:43:30Z cmayer $
+// $Id: AliAnalysisTaskLongRangeCorrelations.cxx 341 2013-09-30 15:59:19Z cmayer $
#include <numeric>
#include <functional>
#include "AliLog.h"
#include "AliTHn.h"
+#include "AliMCEventHandler.h"
+#include "AliMCEvent.h"
+#include "AliStack.h"
#include "AliAnalysisTaskLongRangeCorrelations.h"
, fPtMin(0.2), fPtMax(1e10)
, fPhiMin(0.), fPhiMax(TMath::TwoPi())
, fMaxAbsVertexZ(10.)
+ , fSelectPrimaryMCParticles(0)
+ , fSelectPrimaryMCDataParticles(0)
, fnBinsCent( 220), fnBinsPt(400), fnBinsPhi(4), fnBinsEta(120)
, fxMinCent( -5.0), fxMinPt( 0.0), fxMinPhi( 0.0), fxMinEta(-1.5)
, fxMaxCent(105.0), fxMaxPt( 4.0), fxMaxPhi( TMath::TwoPi()), fxMaxEta( 1.5) {
// event is accepted
// ------------------
- TObjArray* tracksMain(GetAcceptedTracks(pAOD, centrality));
+ TObjArray* tracksMain(GetAcceptedTracks(pAOD, arrayMC, centrality));
Fill("histQAMultiplicityBeforeCuts", pAOD->GetNumberOfTracks());
Fill("histQAMultiplicityAfterCuts", tracksMain->GetEntriesFast());
listName += TString::Format("_cent%.0fT%.0f", fCentMin, fCentMax);
listName += TString::Format("_ptMin%.0fMeV", 1e3*fPtMin);
listName += TString::Format("_phi%.0fT%.0f", TMath::RadToDeg()*fPhiMin, TMath::RadToDeg()*fPhiMax);
+ if ( 1 == fSelectPrimaryMCParticles)
+ listName += "_selPrimMC";
+ if (-1 == fSelectPrimaryMCParticles)
+ listName += "_selNonPrimMC";
+ if ( 1 == fSelectPrimaryMCDataParticles)
+ listName += "_selPrimMCData";
+ if (-1 == fSelectPrimaryMCDataParticles)
+ listName += "_selNonPrimMCData";
return listName;
}
return h;
}
-TObjArray* AliAnalysisTaskLongRangeCorrelations::GetAcceptedTracks(AliAODEvent* pAOD,
- Double_t centrality) {
+TObjArray* AliAnalysisTaskLongRangeCorrelations::GetAcceptedTracks(AliAODEvent* pAOD,
+ TClonesArray* arrayMC,
+ Double_t centrality) {
TObjArray* tracks= new TObjArray;
tracks->SetOwner(kTRUE);
// select only primary tracks
if (pAODTrack->GetType() != AliAODTrack::kPrimary) continue;
+ if (NULL != arrayMC) {
+ const Int_t label(pAODTrack->GetLabel());
+ AliAODMCParticle* mcParticle((label >= 0)
+ ? static_cast<AliAODMCParticle*>(arrayMC->At(label))
+ : NULL);
+ if (label >=0 && NULL == mcParticle)
+ AliFatal("MC particle not found");
+
+ switch (fSelectPrimaryMCDataParticles) {
+ case -1:
+ if (label < 0) continue;
+ if (kTRUE == mcParticle->IsPhysicalPrimary()) continue;
+ break;
+ case 0:
+ // NOP, take all tracks
+ break;
+ case 1:
+ if (label < 0) continue;
+ if (kFALSE == mcParticle->IsPhysicalPrimary()) continue;
+ break;
+ default:
+ AliFatal("fSelectPrimaryMCDataParticles != {-1,0,1}");
+ }
+ }
+
// select only charged tracks
if (pAODTrack->Charge() == 0) continue;
-
+
Fill("histQACentPt", pAODTrack->Charge()>0, centrality, pAODTrack->Pt());
Fill("histQAPhiEta", pAODTrack->Charge()>0, pAODTrack->Phi(), pAODTrack->Eta());
if (pAODTrack->Phi() < fPhiMin || pAODTrack->Phi() > fPhiMax) continue;
continue;
}
labelSet.insert(pMCTrack->Label());
-
- // select only primary tracks
- if (kFALSE == pMCTrack->IsPhysicalPrimary()) continue;
+
+ switch (fSelectPrimaryMCParticles) {
+ case -1:
+ if (kTRUE == pMCTrack->IsPhysicalPrimary()) continue;
+ break;
+ case 0:
+ // NOP, take all MC tracks
+ break;
+ case 1:
+ if (kFALSE == pMCTrack->IsPhysicalPrimary()) continue;
+ break;
+ default:
+ AliFatal("fSelectPrimaryMCParticles != {-1,0,1}");
+ }
// select only charged tracks
if (pMCTrack->Charge() == 0) continue;
// -*- C++ -*-
-// $Id: AliAnalysisTaskLongRangeCorrelations.h 313 2013-06-28 16:43:30Z cmayer $
+// $Id: AliAnalysisTaskLongRangeCorrelations.h 341 2013-09-30 15:59:19Z cmayer $
#ifndef _AliAnalysisTaskLongRangeCorrelations_H_
#define _AliAnalysisTaskLongRangeCorrelations_H_
}
void SetMaxAbsVertexZ(Double_t maxAbsVertexZ) { fMaxAbsVertexZ = maxAbsVertexZ; }
+ void SetSelectPrimaryMCParticles(Int_t flagMC, Int_t flagMCData) {
+ fSelectPrimaryMCParticles = flagMC;
+ fSelectPrimaryMCDataParticles = flagMCData;
+ }
+
TString GetOutputListName() const;
protected:
THnSparse* ComputeNForThisEvent(TObjArray*, const char*, Double_t) const;
void FillNEtaHist(TString, THnSparse*, Double_t);
- TObjArray* GetAcceptedTracks(AliAODEvent*, Double_t);
+ TObjArray* GetAcceptedTracks(AliAODEvent*, TClonesArray*, Double_t);
TObjArray* GetAcceptedTracks(TClonesArray*, Double_t);
// filling histograms by name
Double_t fPtMin, fPtMax; // P_{T} range
Double_t fPhiMin, fPhiMax; // #phi range
Double_t fMaxAbsVertexZ; // max abs(zvertex)
+ Int_t fSelectPrimaryMCParticles; // 0: no, 1: yes, -1: only non-primary particles
+ Int_t fSelectPrimaryMCDataParticles; // 0: no, 1: yes, -1: only non-primary particles
// histogram data
Int_t fnBinsCent, fnBinsPt, fnBinsPhi, fnBinsEta;
Double_t fxMinCent, fxMinPt, fxMinPhi, fxMinEta;
// -*- c++ -*-
-// $Id: AddTaskLongRangeCorrelations.C 232 2012-11-28 17:27:59Z cmayer $
+// $Id: AddTaskLongRangeCorrelations.C 341 2013-09-30 15:59:19Z cmayer $
+
+const Double_t centMin[] = { 0, 0, 10, 20, 30, 40, 50, 60, 70, 80 };
+const Double_t centMax[] = { 5, 10, 20, 30, 40, 50, 60, 70, 80, 100 };
AliAnalysisTaskLongRangeCorrelations*
AddTaskLongRangeCorrelations(Int_t trackFilter = 128, // TPC only
Bool_t runMixing = !kTRUE,
Int_t mixingTracks = 50000,
- Double_t centMin = 0, Double_t centMax = 20,
+ Int_t selPrimMC = 0, Int_t selPrimMCData = 0,
Double_t ptMin = 0.2,
Double_t phiMin = 0, Double_t phiMax = TMath::TwoPi()) {
return NULL;
}
- AliAnalysisTaskLongRangeCorrelations *taskLRC = new AliAnalysisTaskLongRangeCorrelations("TaskLongRangeCorrelations");
- taskLRC->SetRunMixing(runMixing);
- taskLRC->SetMixingTracks(mixingTracks);
- taskLRC->SetTrackFilter(trackFilter);
- taskLRC->SetCentralityRange(centMin, centMax);
- taskLRC->SetPtRange(ptMin, 1e20);
- taskLRC->SetPhiRange(phiMin, phiMax);
- taskLRC->SelectCollisionCandidates(AliVEvent::kMB);
- mgr->AddTask(taskLRC);
-
+ AliAnalysisTaskLongRangeCorrelations *taskLRC = NULL;
+ AliAnalysisDataContainer *listLRC = NULL;
TString outputFileName = AliAnalysisManager::GetCommonFileName();
outputFileName += ":PWGCFEbyE.outputLongRangeCorrelations.root";
- AliAnalysisDataContainer *listLRC = mgr->CreateContainer(taskLRC->GetOutputListName(), TList::Class(),
- AliAnalysisManager::kOutputContainer,
- outputFileName.Data());
- mgr->ConnectInput(taskLRC, 0, mgr->GetCommonInputContainer());
- mgr->ConnectOutput(taskLRC, 1, listLRC);
+
+ for (Int_t i=0; i<sizeof(centMin)/sizeof(Double_t); ++i) {
+ taskLRC = new AliAnalysisTaskLongRangeCorrelations("TaskLongRangeCorrelations");
+ taskLRC->SetRunMixing(runMixing);
+ taskLRC->SetMixingTracks(mixingTracks);
+ taskLRC->SetTrackFilter(trackFilter);
+ taskLRC->SetCentralityRange(centMin[i], centMax[i]);
+ taskLRC->SetPtRange(ptMin, 1e20);
+ taskLRC->SetPhiRange(phiMin, phiMax);
+ taskLRC->SelectCollisionCandidates(AliVEvent::kMB);
+ taskLRC->SetSelectPrimaryMCParticles(selPrimMC, selPrimMCData);
+
+ listLRC = mgr->CreateContainer(taskLRC->GetOutputListName(), TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ outputFileName.Data());
+ mgr->AddTask(taskLRC);
+ mgr->ConnectInput(taskLRC, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(taskLRC, 1, listLRC);
+ }
+
return taskLRC;
}