#include "TString.h"
#include "AliAnalysisTaskMuonHadronCorrelations.h"
+#include "AliAnalysisManager.h"
+#include "AliInputEventHandler.h"
+#include "AliEventPoolManager.h"
ClassImp(AliAnalysisTaskMuonHadronCorrelations)
AliAnalysisTaskMuonHadronCorrelations::AliAnalysisTaskMuonHadronCorrelations() :
AliAnalysisTaskSE(),
fAOD(0x0),
- fTracksCentralBarrel(0x0),
- fTracksMuonArm(0x0),
+ fPoolMgr(0x0),
fTrackCB(0x0),
fTrackMA(0x0),
fFilterBitCentralBarrel(0),
fMinRAbsMuon(0),
fMaxRAbsMuon(9999999999.),
fTriggerMatchLevelMuon(0),
- fTriggerWord(""),
- fIsTriggerSet(kFALSE),
fNbinsCent(1),
fNbinsPt(1),
fCentAxis(0x0),
- fMultAxis(0x0),
fPtAxis(0x0),
fHistV0Multiplicity(0x0),
fHistITSMultiplicity(0x0),
fHistCentrality(0x0),
fCentMethod(0),
- fEvt(0),
fOutputList(0x0)
{
AliAnalysisTaskMuonHadronCorrelations::AliAnalysisTaskMuonHadronCorrelations(const char *name) :
AliAnalysisTaskSE(name),
fAOD(0x0),
- fTracksCentralBarrel(0x0),
- fTracksMuonArm(0x0),
+ fPoolMgr(0x0),
fTrackCB(0x0),
fTrackMA(0x0),
fFilterBitCentralBarrel(0),
fMinRAbsMuon(0),
fMaxRAbsMuon(9999999999.),
fTriggerMatchLevelMuon(0),
- fTriggerWord(""),
- fIsTriggerSet(kFALSE),
fNbinsCent(1),
fNbinsPt(1),
fCentAxis(0x0),
- fMultAxis(0x0),
fPtAxis(0x0),
fHistV0Multiplicity(0x0),
fHistITSMultiplicity(0x0),
fHistCentrality(0x0),
fCentMethod(0),
- fEvt(0),
fOutputList(0x0)
{
AliAnalysisTaskMuonHadronCorrelations::~AliAnalysisTaskMuonHadronCorrelations() {
- delete fAOD;
- delete fTrackCB;
- delete fTrackMA;
-
delete fCentAxis;
delete fPtAxis;
- for (Int_t iCent=0; iCent<fNMaxBinsCentrality; iCent++) {
- for (Int_t iPtBinCB=0; iPtBinCB<fNMaxBinsPt; iPtBinCB++) {
- for (Int_t iPtBinMA=0; iPtBinMA<fNMaxBinsPt; iPtBinMA++) {
- delete fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA];
- delete fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA];
- }
- }
- delete fHistNTracksCB_vs_NTracksMA[iCent];
- }
-
+ if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())
+ delete fOutputList;
}
//====================================================================================================================================================
fOutputList -> Add(fHistITSMultiplicity);
fOutputList -> Add(fHistCentrality);
+ const Int_t kNZvtxBins = 10;
+ // bins for further buffers are shifted by 100 cm
+ Double_t vertexBins[kNZvtxBins+1] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10 };
+ Int_t nZvtxBins = kNZvtxBins;
+ Double_t* zvtxbin = vertexBins;
+
+ fPoolMgr = new AliEventPoolManager(1000, 20000, fNbinsCent, (Double_t*)fCentAxis->GetXbins()->GetArray(), nZvtxBins, zvtxbin);
+
PostData(1, fOutputList);
}
void AliAnalysisTaskMuonHadronCorrelations::UserExec(Option_t *) {
- AliDebug(2, Form("Single Event analysis : event %05d",fEvt));
-
fAOD = dynamic_cast<AliAODEvent *>(InputEvent());
if (!fAOD) return;
fHistV0Multiplicity -> Fill(GetV0Multiplicity());
fHistITSMultiplicity -> Fill(GetITSMultiplicity());
-
+
Int_t centBin = GetCentBin();
if (centBin<0) return;
+ Double_t percentile = fAOD->GetCentrality()->GetCentralityPercentile(fCentMethod.Data());
+ fHistCentrality->Fill(percentile);
+
+ const AliVVertex* vertex = fAOD->GetPrimaryVertex();
+ Double_t zVtx = vertex->GetZ();
+ if (TMath::Abs(zVtx) > 10.) return;
- fTracksCentralBarrel = GetAcceptedTracksCentralBarrel(fAOD);
- fTracksMuonArm = GetAcceptedTracksMuonArm(fAOD);
+ TObjArray *tracksMuonArm = GetAcceptedTracksMuonArm(fAOD);
+ if (tracksMuonArm->GetEntriesFast() == 0) {
+ delete tracksMuonArm;
+ return;
+ }
+ TObjArray *tracksCentralBarrel = GetAcceptedTracksCentralBarrel(fAOD);
- fHistNTracksCB_vs_NTracksMA[centBin] -> Fill(fTracksCentralBarrel->GetEntries(), fTracksMuonArm->GetEntries());
+ fHistNTracksCB_vs_NTracksMA[centBin] -> Fill(tracksCentralBarrel->GetEntries(), tracksMuonArm->GetEntries());
- AliDebug(1, Form("Single Event analysis : event %05d, nTracksCB = %4d, nTracksMA = %4d",fEvt, fTracksCentralBarrel->GetEntries(), fTracksMuonArm->GetEntries()));
-
- for (Int_t iTrCB=0; iTrCB<fTracksCentralBarrel->GetEntriesFast(); iTrCB++) {
- for (Int_t iTrMA=0; iTrMA<fTracksMuonArm->GetEntriesFast(); iTrMA++) {
- fTrackCB = (AliAODTrack*) fTracksCentralBarrel -> At(iTrCB);
- fTrackMA = (AliAODTrack*) fTracksMuonArm -> At(iTrMA);
+ AliDebug(1, Form("Single Event analysis : nTracksCB = %4d, nTracksMA = %4d", tracksCentralBarrel->GetEntries(), tracksMuonArm->GetEntries()));
+
+ // Same event
+ for (Int_t iTrMA=0; iTrMA<tracksMuonArm->GetEntriesFast(); iTrMA++) {
+ fTrackMA = (AliAODTrack*) tracksMuonArm->At(iTrMA);
+ for (Int_t iTrCB=0; iTrCB<tracksCentralBarrel->GetEntriesFast(); iTrCB++) {
+ fTrackCB = (AliAODTrack*) tracksCentralBarrel -> At(iTrCB);
FillHistograms(centBin, kSingleEvent);
}
}
- delete fTracksCentralBarrel;
- delete fTracksMuonArm;
+ // Mixed event
+ {
+ AliEventPool* pool = fPoolMgr->GetEventPool(percentile, zVtx);
+ //pool->PrintInfo();
+ if (pool->IsReady() || pool->NTracksInPool() > 2000 || pool->GetCurrentNEvents() >= 5)
+ for (Int_t jMix=0; jMix<pool->GetCurrentNEvents(); jMix++) {
+ for (Int_t iTrMA=0; iTrMA<tracksMuonArm->GetEntriesFast(); iTrMA++) {
+ fTrackMA = (AliAODTrack*) tracksMuonArm->At(iTrMA);
+ TObjArray *mixedTracks = pool->GetEvent(jMix);
+ for (Int_t iTrCB=0; iTrCB<mixedTracks->GetEntriesFast(); iTrCB++) {
+ fTrackCB = (AliAODTrack*) mixedTracks -> At(iTrCB);
+ FillHistograms(centBin, kMixedEvent);
+ }
+ }
+ }
+ pool->UpdatePool(tracksCentralBarrel);
+ }
+
+ delete tracksMuonArm;
PostData(1, fOutputList);
Bool_t AliAnalysisTaskMuonHadronCorrelations::IsTriggerFired() {
- Bool_t v0and = ((fAOD->GetVZEROData()->GetV0ADecision()==1) && (fAOD->GetVZEROData()->GetV0CDecision()==1));
- TString trigStr(fAOD->GetHeader()->GetFiredTriggerClasses());
- return (trigStr.Contains(fTriggerWord) && v0and);
+ Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kINT7);
+ return isSelected;
}
//====================================================================================================================================================
//====================================================================================================================================================
-TClonesArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksCentralBarrel(AliAODEvent *aodEvent) {
+TObjArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksCentralBarrel(AliAODEvent *aodEvent) {
// fills the array of central barrel tracks that pass the cuts
- TClonesArray *tracks = new TClonesArray("AliAODTrack");
+ TObjArray *tracks = new TObjArray;
+ tracks->SetOwner(kTRUE);
Int_t nTracks = aodEvent->GetNTracks();
for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
track = aodEvent->GetTrack(iTrack);
if (track->TestFilterBit(fFilterBitCentralBarrel) && TMath::Abs(track->Eta())<fMaxEtaCentralBarrel) {
- new ((*tracks)[tracks->GetEntries()]) AliAODTrack(*track);
+ tracks->Add(new AliAODTrack(*track));
}
}
//====================================================================================================================================================
-TClonesArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksMuonArm(AliAODEvent *aodEvent) {
+TObjArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksMuonArm(AliAODEvent *aodEvent) {
// fills the array of muon tracks that pass the cuts
- TClonesArray *tracks = new TClonesArray("AliAODTrack");
+ TObjArray *tracks = new TObjArray;
+ tracks->SetOwner(kFALSE);
Int_t nTracks = aodEvent->GetNTracks();
for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
track = aodEvent->GetTrack(iTrack);
if (track->IsMuonTrack() && track->GetMatchTrigger()>=fTriggerMatchLevelMuon) {
- new ((*tracks)[tracks->GetEntries()]) AliAODTrack(*track);
+ tracks->Add(new AliAODTrack(*track));
}
}
//====================================================================================================================================================
-void AliAnalysisTaskMuonHadronCorrelations::SetMultBinning(Int_t nBins, Double_t *limits) {
-
- if (nBins>fNMaxBinsCentrality) {
- AliInfo(Form("WARNING : only %d centrality bins (out of the %d proposed) will be considered",fNMaxBinsCentrality,nBins));
- nBins = fNMaxBinsCentrality;
- }
- if (nBins<=0) {
- AliInfo("WARNING : at least one centrality bin must be considered");
- nBins = 1;
- }
-
- fNbinsCent = nBins;
- fMultAxis = new TAxis(fNbinsCent, limits);
-
-}
-
-//====================================================================================================================================================
-
void AliAnalysisTaskMuonHadronCorrelations::SetPtBinning(Int_t nBins, Double_t *limits) {
if (nBins>fNMaxBinsPt) {
//====================================================================================================================================================
Int_t AliAnalysisTaskMuonHadronCorrelations::GetCentBin() {
-
- if (fCentMethod.CompareTo("V0M")==0) return GetMultBin();
- if (fCentMethod.CompareTo("CL1")==0) return GetMultBin();
- return -1;
-
-}
+ Double_t percentile = fAOD->GetCentrality()->GetCentralityPercentile(fCentMethod.Data());
-//====================================================================================================================================================
-
-Int_t AliAnalysisTaskMuonHadronCorrelations::GetMultBin() {
-
- Double_t multiplicity = 0;
-
- if (fCentMethod.CompareTo("V0M")==0) multiplicity = GetV0Multiplicity();
- if (fCentMethod.CompareTo("CL1")==0) multiplicity = GetITSMultiplicity();
-
- Int_t multBin = fMultAxis->FindBin(-1.*multiplicity);
- if (0<multBin && multBin<=fNbinsCent) return multBin-1;
-
- return -1;
+ Int_t bin = fCentAxis->FindBin(percentile) - 1;
+ if (bin >= fNbinsCent) bin = -1;
+ return bin;
}
Double_t AliAnalysisTaskMuonHadronCorrelations::GetITSMultiplicity() {
- Double_t multiplicity = 0.5 * (fAOD->GetHeader()->GetNumberOfITSClusters(0) + fAOD->GetHeader()->GetNumberOfITSClusters(1));
+ Double_t multiplicity = fAOD->GetHeader()->GetNumberOfITSClusters(1);
return multiplicity;
#include "TClonesArray.h"
#include "TH2D.h"
+class AliEventPoolManager;
+
//====================================================================================================================================================
class AliAnalysisTaskMuonHadronCorrelations : public AliAnalysisTaskSE {
// void SetMaxChi2Muon(Double_t chi2Max) { fMaxChi2Muon = chi2Max; }
void SetRAbsRangeMuon (Double_t rAbsMin,Double_t rAbsMax) { fMinRAbsMuon = rAbsMin; fMaxRAbsMuon = rAbsMax; }
- void SetTriggerWord(TString triggerWord) { fTriggerWord = triggerWord; fIsTriggerSet = kTRUE; }
-
// ------------- Analysis -------------
Float_t GetV0Multiplicity();
Double_t GetITSMultiplicity();
Bool_t IsTriggerFired();
- TClonesArray* GetAcceptedTracksCentralBarrel(AliAODEvent *aodEvent);
- TClonesArray* GetAcceptedTracksMuonArm(AliAODEvent *aodEvent);
+ TObjArray* GetAcceptedTracksCentralBarrel(AliAODEvent *aodEvent);
+ TObjArray* GetAcceptedTracksMuonArm(AliAODEvent *aodEvent);
void SetPtBinning(Int_t nBins, Double_t *limits);
void SetCentBinning(Int_t nBins, Double_t *limits);
- void SetMultBinning(Int_t nBins, Double_t *limits);
void SetCentMethod(const Char_t *method) { fCentMethod = method; }
void FillHistograms(Int_t centrality, Int_t option);
Int_t GetCentBin();
- Int_t GetMultBin();
private:
static const Int_t fNMaxBinsCentrality = 20;
static const Int_t fNMaxBinsPt = 10;
- AliAODEvent *fAOD;
- TClonesArray *fTracksCentralBarrel, *fTracksMuonArm;
- AliAODTrack *fTrackCB, *fTrackMA;
+ AliAODEvent *fAOD; //!
+ AliEventPoolManager *fPoolMgr; //! event pool manager
+ AliAODTrack *fTrackCB; //!
+ AliAODTrack *fTrackMA; //!
Int_t fFilterBitCentralBarrel;
Double_t fMaxEtaCentralBarrel;
Double_t fMaxChi2Muon, fMinRAbsMuon, fMaxRAbsMuon;
Short_t fTriggerMatchLevelMuon;
- TString fTriggerWord;
- Bool_t fIsTriggerSet;
-
Int_t fNbinsCent, fNbinsPt;
- TAxis *fCentAxis, *fMultAxis, *fPtAxis;
+ TAxis *fCentAxis;
+ TAxis *fPtAxis;
- TH1D *fHistDeltaPhi[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt], *fHistDeltaPhiMix[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt];
- TH2D *fHistNTracksCB_vs_NTracksMA[fNMaxBinsCentrality];
+ TH1D *fHistDeltaPhi[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt]; //!
+ TH1D *fHistDeltaPhiMix[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt]; //!
+ TH2D *fHistNTracksCB_vs_NTracksMA[fNMaxBinsCentrality]; //!
- TH1D *fHistV0Multiplicity, *fHistITSMultiplicity;
- TH1D *fHistCentrality;
+ TH1D *fHistV0Multiplicity; //!
+ TH1D *fHistITSMultiplicity; //!
+ TH1D *fHistCentrality; //!
TString fCentMethod;
- Int_t fEvt;
-
- TList *fOutputList;
+ TList *fOutputList; //!
AliAnalysisTaskMuonHadronCorrelations(const AliAnalysisTaskMuonHadronCorrelations&);//not implimented
AliAnalysisTaskMuonHadronCorrelations& operator=(const AliAnalysisTaskMuonHadronCorrelations&);//not implimnted