6 #include "AliAODEvent.h"
7 #include "AliAODTrack.h"
11 #include "AliAnalysisTaskMuonHadronCorrelations.h"
12 #include "AliAnalysisManager.h"
13 #include "AliInputEventHandler.h"
14 #include "AliEventPoolManager.h"
16 ClassImp(AliAnalysisTaskMuonHadronCorrelations)
18 //====================================================================================================================================================
20 AliAnalysisTaskMuonHadronCorrelations::AliAnalysisTaskMuonHadronCorrelations() :
26 fFilterBitCentralBarrel(0),
27 fMaxEtaCentralBarrel(1.0),
28 fMinEtaCentralBarrel(-1.0),
29 fMaxChi2Muon(9999999999.),
31 fMaxRAbsMuon(9999999999.),
32 fTriggerMatchLevelMuon(0),
38 fHistV0Multiplicity(0x0),
39 fHistITSMultiplicity(0x0),
46 // Default constructor
48 for (Int_t iCent=0; iCent<fNMaxBinsCentrality; iCent++) {
49 for (Int_t iPtBinCB=0; iPtBinCB<fNMaxBinsPt; iPtBinCB++) {
50 for (Int_t iPtBinMA=0; iPtBinMA<fNMaxBinsPt; iPtBinMA++) {
51 fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA] = NULL;
52 fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = NULL;
53 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] = NULL;
54 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = NULL;
57 fHistNTracksCB_vs_NTracksMA[iCent] = NULL;
58 fHistNTracksCB_vs_NTracksMAmixed[iCent] = NULL;
59 fHistTracksEtaMAvsEtaCB[iCent] = NULL;
60 fHistTracksEtaMAvsEtaCBmixed[iCent] = NULL;
61 fHistSingleMuonsPt[iCent] = NULL;
62 fHistSingleMuonsPtmixed[iCent] = NULL;
63 fHistSingleMuonsEtaPt[iCent] = NULL;
64 fHistSingleMuonsEtaPtmixed[iCent] = NULL;
65 fHistSingleMuonsTrigMatch[iCent] = NULL;
66 fHistSingleMuonsChi2[iCent] = NULL;
67 fHistSingleMuonsEtaVsPt[iCent] = NULL;
68 fHistSingleMuonsEtaVsRAbs[iCent] = NULL;
74 //====================================================================================================================================================
76 AliAnalysisTaskMuonHadronCorrelations::AliAnalysisTaskMuonHadronCorrelations(const char *name) :
77 AliAnalysisTaskSE(name),
82 fFilterBitCentralBarrel(0),
83 fMaxEtaCentralBarrel(1.0),
84 fMinEtaCentralBarrel(-1.0),
85 fMaxChi2Muon(9999999999.),
87 fMaxRAbsMuon(9999999999.),
88 fTriggerMatchLevelMuon(0),
94 fHistV0Multiplicity(0x0),
95 fHistITSMultiplicity(0x0),
104 for (Int_t iCent=0; iCent<fNMaxBinsCentrality; iCent++) {
105 for (Int_t iPtBinCB=0; iPtBinCB<fNMaxBinsPt; iPtBinCB++) {
106 for (Int_t iPtBinMA=0; iPtBinMA<fNMaxBinsPt; iPtBinMA++) {
107 fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA] = NULL;
108 fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = NULL;
109 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] = NULL;
110 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = NULL;
113 fHistNTracksCB_vs_NTracksMA[iCent] = NULL;
114 fHistNTracksCB_vs_NTracksMAmixed[iCent] = NULL;
115 fHistTracksEtaMAvsEtaCB[iCent] = NULL;
116 fHistTracksEtaMAvsEtaCBmixed[iCent] = NULL;
117 fHistSingleMuonsPt[iCent] = NULL;
118 fHistSingleMuonsPtmixed[iCent] = NULL;
119 fHistSingleMuonsEtaPt[iCent] = NULL;
120 fHistSingleMuonsEtaPtmixed[iCent] = NULL;
121 fHistSingleMuonsTrigMatch[iCent] = NULL;
122 fHistSingleMuonsChi2[iCent] = NULL;
123 fHistSingleMuonsEtaVsPt[iCent] = NULL;
124 fHistSingleMuonsEtaVsRAbs[iCent] = NULL;
127 // Define input and output slots here
128 DefineOutput(1, TList::Class());
132 //====================================================================================================================================================
134 AliAnalysisTaskMuonHadronCorrelations::~AliAnalysisTaskMuonHadronCorrelations() {
140 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())
144 //====================================================================================================================================================
146 void AliAnalysisTaskMuonHadronCorrelations::UserCreateOutputObjects() {
148 fOutputList = new TList();
149 fOutputList->SetOwner(kTRUE);
151 for (Int_t iCent=0; iCent<fNbinsCent; iCent++) {
152 for (Int_t iPtBinCB=0; iPtBinCB<fNbinsPt; iPtBinCB++) {
153 for (Int_t iPtBinMA=0; iPtBinMA<fNbinsPt; iPtBinMA++) {
155 fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA] = new TH1D(Form("fHistDeltaPhi_Cent%02d_PtBin%02d_%02d",iCent,iPtBinCB,iPtBinMA),
156 Form("%d-%d %%, %3.1f<p_{T}^{TPC}<%3.1f, %3.1f<p_{T}^{Muon}<%3.1f",
157 Int_t(fCentAxis->GetBinLowEdge(iCent+1)),
158 Int_t(fCentAxis->GetBinUpEdge(iCent+1)),
159 fPtAxis->GetBinLowEdge(iPtBinCB+1),
160 fPtAxis->GetBinUpEdge(iPtBinCB+1),
161 fPtAxis->GetBinLowEdge(iPtBinMA+1),
162 fPtAxis->GetBinUpEdge(iPtBinMA+1)),
163 100, -0.5*TMath::RadToDeg()*TMath::Pi(), 1.5*TMath::RadToDeg()*TMath::Pi());
165 fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = new TH1D(Form("fHistDeltaPhiMix_Cent%02d_PtBin%02d_%02d",iCent,iPtBinCB,iPtBinMA),
166 Form("%d-%d %%, %3.1f<p_{T}^{TPC}<%3.1f, %3.1f<p_{T}^{Muon}<%3.1f MIXED",
167 Int_t(fCentAxis->GetBinLowEdge(iCent+1)),
168 Int_t(fCentAxis->GetBinUpEdge(iCent+1)),
169 fPtAxis->GetBinLowEdge(iPtBinCB+1),
170 fPtAxis->GetBinUpEdge(iPtBinCB+1),
171 fPtAxis->GetBinLowEdge(iPtBinMA+1),
172 fPtAxis->GetBinUpEdge(iPtBinMA+1)),
173 100, -0.5*TMath::RadToDeg()*TMath::Pi(), 1.5*TMath::RadToDeg()*TMath::Pi());
175 fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA] -> SetXTitle("#Delta#varphi [degrees]");
176 fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> SetXTitle("#Delta#varphi [degrees]");
178 fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
179 fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
181 fOutputList -> Add(fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA]);
182 fOutputList -> Add(fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA]);
184 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] = new TH2D(Form("fHistEtaDeltaPhi_Cent%02d_PtBin%02d_%02d",iCent,iPtBinCB,iPtBinMA),
185 Form("%d-%d %%, %3.1f<p_{T}^{TPC}<%3.1f, %3.1f<p_{T}^{Muon}<%3.1f",
186 Int_t(fCentAxis->GetBinLowEdge(iCent+1)),
187 Int_t(fCentAxis->GetBinUpEdge(iCent+1)),
188 fPtAxis->GetBinLowEdge(iPtBinCB+1),
189 fPtAxis->GetBinUpEdge(iPtBinCB+1),
190 fPtAxis->GetBinLowEdge(iPtBinMA+1),
191 fPtAxis->GetBinUpEdge(iPtBinMA+1)),
192 100, -0.5*TMath::RadToDeg()*TMath::Pi(), 1.5*TMath::RadToDeg()*TMath::Pi(),
193 fEtaAxis->GetNbins(),(Double_t*)fEtaAxis->GetXbins()->GetArray());
195 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = new TH2D(Form("fHistEtaDeltaPhiMix_Cent%02d_PtBin%02d_%02d",iCent,iPtBinCB,iPtBinMA),
196 Form("%d-%d %%, %3.1f<p_{T}^{TPC}<%3.1f, %3.1f<p_{T}^{Muon}<%3.1f MIXED",
197 Int_t(fCentAxis->GetBinLowEdge(iCent+1)),
198 Int_t(fCentAxis->GetBinUpEdge(iCent+1)),
199 fPtAxis->GetBinLowEdge(iPtBinCB+1),
200 fPtAxis->GetBinUpEdge(iPtBinCB+1),
201 fPtAxis->GetBinLowEdge(iPtBinMA+1),
202 fPtAxis->GetBinUpEdge(iPtBinMA+1)),
203 100, -0.5*TMath::RadToDeg()*TMath::Pi(), 1.5*TMath::RadToDeg()*TMath::Pi(),
204 fEtaAxis->GetNbins(),(Double_t*)fEtaAxis->GetXbins()->GetArray());
206 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] -> SetXTitle("#Delta#varphi [degrees]");
207 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> SetXTitle("#Delta#varphi [degrees]");
208 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] -> SetYTitle("#eta");
209 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> SetYTitle("#eta");
211 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
212 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
214 fOutputList -> Add(fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA]);
215 fOutputList -> Add(fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA]);
220 fHistNTracksCB_vs_NTracksMA[iCent] = new TH2D(Form("fHistNTracksCB_vs_NTracksMA_Cent%02d",iCent),
221 Form("%d-%d %%",Int_t(fCentAxis->GetBinLowEdge(iCent+1)),Int_t(fCentAxis->GetBinUpEdge(iCent+1))),
222 100, 0, 500, 20, 0, 20);
223 fHistNTracksCB_vs_NTracksMA[iCent] -> SetXTitle("N_{tracks} Central Barrel");
224 fHistNTracksCB_vs_NTracksMA[iCent] -> SetYTitle("N_{tracks} Muon Arm");
225 fHistNTracksCB_vs_NTracksMA[iCent] -> Sumw2();
227 fHistNTracksCB_vs_NTracksMAmixed[iCent] = new TH2D(Form("fHistNTracksCB_vs_NTracksMAmixed_Cent%02d",iCent),
228 Form("%d-%d %% MIXED",Int_t(fCentAxis->GetBinLowEdge(iCent+1)),Int_t(fCentAxis->GetBinUpEdge(iCent+1))),
229 100, 0, 500, 20, 0, 20);
230 fHistNTracksCB_vs_NTracksMAmixed[iCent] -> SetXTitle("N_{tracks} Central Barrel");
231 fHistNTracksCB_vs_NTracksMAmixed[iCent] -> SetYTitle("N_{tracks} Muon Arm");
232 fHistNTracksCB_vs_NTracksMAmixed[iCent] -> Sumw2();
234 fHistTracksEtaMAvsEtaCB[iCent] = new TH2D(Form("fHistTracksEtaMAvsEtaCB_%02d",iCent),
235 "#eta muon vs #eta barrel",
236 100,-4.5,-2.,100,-1.5,1.5);
237 fHistTracksEtaMAvsEtaCBmixed[iCent] = new TH2D(Form("fHistTracksEtaMAvsEtaCBmixed_%02d",iCent),
238 "#eta muon vs #eta barrel",
239 100,-4.5,-2.,100,-1.5,1.5);
241 fOutputList -> Add(fHistNTracksCB_vs_NTracksMA[iCent]);
242 fOutputList -> Add(fHistNTracksCB_vs_NTracksMAmixed[iCent]);
243 fOutputList -> Add(fHistTracksEtaMAvsEtaCB[iCent]);
244 fOutputList -> Add(fHistTracksEtaMAvsEtaCBmixed[iCent]);
246 fHistSingleMuonsPt[iCent] = new TH1D(Form("fHistSingleMuonPt_Cent%02d",iCent),
247 "p_{T} for single muons",
248 fNbinsPt, (Double_t*)fPtAxis->GetXbins()->GetArray());
249 fHistSingleMuonsPtmixed[iCent] = new TH1D(Form("fHistSingleMuonPtmixed_Cent%02d",iCent),
250 "p_{T} for single muons",
251 fNbinsPt, (Double_t*)fPtAxis->GetXbins()->GetArray());
252 fOutputList -> Add(fHistSingleMuonsPt[iCent]);
253 fOutputList -> Add(fHistSingleMuonsPtmixed[iCent]);
255 fHistSingleMuonsEtaPt[iCent] = new TH2D(Form("fHistSingleMuonEtaPt_Cent%02d",iCent),
256 "#eta vs p_{T} for single muons",
257 fNbinsPt, (Double_t*)fPtAxis->GetXbins()->GetArray(),
258 fEtaAxis->GetNbins(),(Double_t*)fEtaAxis->GetXbins()->GetArray());
259 fHistSingleMuonsEtaPtmixed[iCent] = new TH2D(Form("fHistSingleMuonEtaPtmixed_Cent%02d",iCent),
260 "#eta vs p_{T} for single muons",
261 fNbinsPt, (Double_t*)fPtAxis->GetXbins()->GetArray(),
262 fEtaAxis->GetNbins(),(Double_t*)fEtaAxis->GetXbins()->GetArray());
263 fOutputList -> Add(fHistSingleMuonsEtaPt[iCent]);
264 fOutputList -> Add(fHistSingleMuonsEtaPtmixed[iCent]);
266 fHistSingleMuonsTrigMatch[iCent] = new TH1D(Form("fHistSingleMuonsTrigMatch_Cent%02d",iCent),
267 "Single muons trigger match flag",10,-0.5,9.5);
268 fOutputList -> Add(fHistSingleMuonsTrigMatch[iCent]);
269 fHistSingleMuonsChi2[iCent] = new TH1D(Form("fHistSingleMuonsChi2_Cent%02d",iCent),
270 "Single muons Chi2",100,0.,10.);
271 fOutputList -> Add(fHistSingleMuonsChi2[iCent]);
273 fHistSingleMuonsEtaVsPt[iCent] = new TH2D(Form("fHistSingleMuonsEtaVsPt_Cent%02d",iCent),
274 "#eta vs p_{T} for single muons",
275 100, -4.5, -2., 100, 0., 10.);
276 fOutputList->Add(fHistSingleMuonsEtaVsPt[iCent]);
277 fHistSingleMuonsEtaVsRAbs[iCent] = new TH2D(Form("fHistSingleMuonsEtaVsRAbs_Cent%02d",iCent),
278 "#eta vs R_{Abs} for single muons",
279 100, -4.5, -2., 100, 0, 100);
280 fOutputList->Add(fHistSingleMuonsEtaVsRAbs[iCent]);
284 fHistV0Multiplicity = new TH1D("fHistV0Multiplicity", "V0 Multiplicity", 500, 0, 1000);
285 fHistV0Multiplicity -> SetXTitle("Multiplicity");
286 fHistV0Multiplicity -> Sumw2();
288 fHistITSMultiplicity = new TH1D("fHistITSMultiplicity", "ITS Multiplicity", 500, 0, 500);
289 fHistITSMultiplicity -> SetXTitle("N_{Clusters}");
290 fHistITSMultiplicity -> Sumw2();
292 fHistCentrality = new TH1D("fHistCentrality", Form("%s Centrality",fCentMethod.Data()), 300, -100, 200);
293 fHistCentrality -> SetXTitle("Centrality [%]");
294 fHistCentrality -> Sumw2();
296 fOutputList -> Add(fHistV0Multiplicity);
297 fOutputList -> Add(fHistITSMultiplicity);
298 fOutputList -> Add(fHistCentrality);
300 fHistEvStat = new TH1D("fHistEvStat","Event cuts statistics",20,-0.5,19.5);
301 fHistEvStat->SetXTitle("Cut index");
302 fOutputList->Add(fHistEvStat);
304 const Int_t kNZvtxBins = 10;
305 // bins for further buffers are shifted by 100 cm
306 Double_t vertexBins[kNZvtxBins+1] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10 };
307 Int_t nZvtxBins = kNZvtxBins;
308 Double_t* zvtxbin = vertexBins;
310 fPoolMgr = new AliEventPoolManager(1000, 20000, fNbinsCent, (Double_t*)fCentAxis->GetXbins()->GetArray(), nZvtxBins, zvtxbin);
312 PostData(1, fOutputList);
316 //====================================================================================================================================================
318 void AliAnalysisTaskMuonHadronCorrelations::UserExec(Option_t *) {
320 fAOD = dynamic_cast<AliAODEvent *>(InputEvent());
324 fHistEvStat->Fill(cutIndex++);
326 if (!(IsTriggerFired())) return;
327 fHistEvStat->Fill(cutIndex++);
329 fHistV0Multiplicity -> Fill(GetV0Multiplicity());
330 fHistITSMultiplicity -> Fill(GetITSMultiplicity());
332 Int_t centBin = GetCentBin();
333 if (centBin<0) return;
334 fHistEvStat->Fill(cutIndex++);
335 Double_t percentile = fAOD->GetCentrality()->GetCentralityPercentile(fCentMethod.Data());
336 fHistCentrality->Fill(percentile);
339 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
340 if (!trkVtx || trkVtx->GetNContributors()<=0) return;
341 TString vtxTtl = trkVtx->GetTitle();
342 if (!vtxTtl.Contains("VertexerTracks")) return;
343 fHistEvStat->Fill(cutIndex++);
344 Double_t zvtx = trkVtx->GetZ();
345 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
346 if (spdVtx->GetNContributors()<=0) return;
347 TString vtxTyp = spdVtx->GetTitle();
349 spdVtx->GetCovarianceMatrix(cov);
350 Double_t zRes = TMath::Sqrt(cov[5]);
351 if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
352 if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
353 fHistEvStat->Fill(cutIndex++);
355 if (TMath::Abs(zvtx) > 10.) return;
356 fHistEvStat->Fill(cutIndex++);
358 TObjArray *tracksMuonArm = GetAcceptedTracksMuonArm(fAOD,centBin);
359 if (tracksMuonArm->GetEntriesFast() == 0) {
360 delete tracksMuonArm;
363 fHistEvStat->Fill(cutIndex++);
364 TObjArray *tracksCentralBarrel = GetAcceptedTracksCentralBarrel(fAOD);
366 fHistNTracksCB_vs_NTracksMA[centBin] -> Fill(tracksCentralBarrel->GetEntries(), tracksMuonArm->GetEntries());
368 AliDebug(1, Form("Single Event analysis : nTracksCB = %4d, nTracksMA = %4d", tracksCentralBarrel->GetEntries(), tracksMuonArm->GetEntries()));
371 for (Int_t iTrMA=0; iTrMA<tracksMuonArm->GetEntriesFast(); iTrMA++) {
372 fTrackMA = (AliAODTrack*) tracksMuonArm->At(iTrMA);
373 fHistSingleMuonsPt[centBin]->Fill(fTrackMA->Pt());
374 fHistSingleMuonsEtaPt[centBin]->Fill(fTrackMA->Pt(),fTrackMA->Eta());
375 for (Int_t iTrCB=0; iTrCB<tracksCentralBarrel->GetEntriesFast(); iTrCB++) {
376 fTrackCB = (AliAODTrack*) tracksCentralBarrel -> At(iTrCB);
377 FillHistograms(centBin, kSingleEvent);
383 AliEventPool* pool = fPoolMgr->GetEventPool(percentile, zvtx);
385 if (pool->IsReady() || pool->NTracksInPool() > 2000 || pool->GetCurrentNEvents() >= 5)
386 for (Int_t jMix=0; jMix<pool->GetCurrentNEvents(); jMix++) {
387 TObjArray *mixedTracks = pool->GetEvent(jMix);
388 fHistNTracksCB_vs_NTracksMAmixed[centBin]->Fill(mixedTracks->GetEntriesFast(), tracksMuonArm->GetEntriesFast());
389 for (Int_t iTrMA=0; iTrMA<tracksMuonArm->GetEntriesFast(); iTrMA++) {
390 fTrackMA = (AliAODTrack*) tracksMuonArm->At(iTrMA);
391 fHistSingleMuonsPtmixed[centBin]->Fill(fTrackMA->Pt());
392 fHistSingleMuonsEtaPtmixed[centBin]->Fill(fTrackMA->Pt(),fTrackMA->Eta());
393 for (Int_t iTrCB=0; iTrCB<mixedTracks->GetEntriesFast(); iTrCB++) {
394 fTrackCB = (AliAODTrack*) mixedTracks -> At(iTrCB);
395 FillHistograms(centBin, kMixedEvent);
399 pool->UpdatePool(tracksCentralBarrel);
402 delete tracksMuonArm;
404 PostData(1, fOutputList);
408 //====================================================================================================================================================
410 void AliAnalysisTaskMuonHadronCorrelations::FillHistograms(Int_t centrality, Int_t option) {
412 Int_t ptBinTrackCB = fPtAxis -> FindBin(fTrackCB->Pt());
413 Int_t ptBinTrackMA = fPtAxis -> FindBin(fTrackMA->Pt());
415 if (ptBinTrackCB<1 || ptBinTrackCB>fNbinsPt || ptBinTrackMA<1 || ptBinTrackMA>fNbinsPt) return;
417 Double_t deltaPhi = fTrackCB->Phi() - fTrackMA->Phi();
418 if (deltaPhi > 1.5*TMath::Pi()) deltaPhi -= TMath::TwoPi();
419 if (deltaPhi < -0.5*TMath::Pi()) deltaPhi += TMath::TwoPi();
421 if (option==kSingleEvent) fHistDeltaPhi[centrality][ptBinTrackCB-1][ptBinTrackMA-1] -> Fill(TMath::RadToDeg()*deltaPhi);
422 else if (option==kMixedEvent) fHistDeltaPhiMix[centrality][ptBinTrackCB-1][ptBinTrackMA-1] -> Fill(TMath::RadToDeg()*deltaPhi);
424 if (option==kSingleEvent) fHistEtaDeltaPhi[centrality][ptBinTrackCB-1][ptBinTrackMA-1] -> Fill(TMath::RadToDeg()*deltaPhi,fTrackMA->Eta());
425 else if (option==kMixedEvent) fHistEtaDeltaPhiMix[centrality][ptBinTrackCB-1][ptBinTrackMA-1] -> Fill(TMath::RadToDeg()*deltaPhi,fTrackMA->Eta());
427 if (option==kSingleEvent) fHistTracksEtaMAvsEtaCB[centrality]->Fill(fTrackMA->Eta(),fTrackCB->Eta());
428 else if (option==kMixedEvent) fHistTracksEtaMAvsEtaCBmixed[centrality]->Fill(fTrackMA->Eta(),fTrackCB->Eta());
431 //====================================================================================================================================================
433 Bool_t AliAnalysisTaskMuonHadronCorrelations::IsTriggerFired() {
435 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kINT7);
440 //====================================================================================================================================================
442 Float_t AliAnalysisTaskMuonHadronCorrelations::GetV0Multiplicity() {
444 Float_t multiplicity=0;
445 for (Int_t iChannel=0; iChannel<64; iChannel++) multiplicity += fAOD->GetVZEROData()->GetMultiplicity(iChannel);
450 //====================================================================================================================================================
452 TObjArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksCentralBarrel(AliAODEvent *aodEvent) {
454 // fills the array of central barrel tracks that pass the cuts
456 TObjArray *tracks = new TObjArray;
457 tracks->SetOwner(kTRUE);
459 Int_t nTracks = aodEvent->GetNumberOfTracks();
461 AliAODTrack *track = 0;
463 for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
464 track = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(iTrack));
465 if(!track) AliFatal("Not a standard AOD");
466 if (track->TestFilterBit(fFilterBitCentralBarrel) && track->Eta()>fMinEtaCentralBarrel && track->Eta()<fMaxEtaCentralBarrel) {
467 tracks->Add(new AliAODTrack(*track));
475 //====================================================================================================================================================
477 TObjArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksMuonArm(AliAODEvent *aodEvent, Int_t centBin) {
479 // fills the array of muon tracks that pass the cuts
481 TObjArray *tracks = new TObjArray;
482 tracks->SetOwner(kFALSE);
484 Int_t nTracks = aodEvent->GetNumberOfTracks();
486 AliAODTrack *track = 0;
488 for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
489 track = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(iTrack));
490 if(!track) AliFatal("Not a standard AOD");
491 if (track->IsMuonTrack()) fHistSingleMuonsTrigMatch[centBin]->Fill(track->GetMatchTrigger());
492 if (track->IsMuonTrack() && track->GetMatchTrigger()>=fTriggerMatchLevelMuon) {
493 fHistSingleMuonsChi2[centBin]->Fill(track->Chi2perNDF());
494 // if (track->Chi2perNDF() < 5.) {
496 fHistSingleMuonsEtaVsPt[centBin]->Fill(track->Eta(),track->Pt());
497 fHistSingleMuonsEtaVsRAbs[centBin]->Fill(track->Eta(),track->GetRAtAbsorberEnd());
498 if (track->Eta() > -4. && track->Eta() < -2.5) {
499 Double_t rabs = track->GetRAtAbsorberEnd();
500 if (rabs > 17.6 && rabs < 89.5) {
501 tracks->Add(new AliAODTrack(*track));
512 //====================================================================================================================================================
514 void AliAnalysisTaskMuonHadronCorrelations::SetCentBinning(Int_t nBins, Double_t *limits) {
516 if (nBins>fNMaxBinsCentrality) {
517 AliInfo(Form("WARNING : only %d centrality bins (out of the %d proposed) will be considered",fNMaxBinsCentrality,nBins));
518 nBins = fNMaxBinsCentrality;
521 AliInfo("WARNING : at least one centrality bin must be considered");
526 fCentAxis = new TAxis(fNbinsCent, limits);
530 //====================================================================================================================================================
532 void AliAnalysisTaskMuonHadronCorrelations::SetPtBinning(Int_t nBins, Double_t *limits) {
534 if (nBins>fNMaxBinsPt) {
535 AliInfo(Form("WARNING : only %d pt bins (out of the %d proposed) will be considered",fNMaxBinsPt,nBins));
539 AliInfo("WARNING : at least one pt bin must be considered");
544 fPtAxis = new TAxis(fNbinsPt, limits);
548 //====================================================================================================================================================
550 void AliAnalysisTaskMuonHadronCorrelations::SetEtaBinning(Int_t nBins, Double_t *limits) {
552 if (nBins>fNMaxBinsEta) {
553 AliInfo(Form("WARNING : only %d pt bins (out of the %d proposed) will be considered",fNMaxBinsEta,nBins));
554 nBins = fNMaxBinsEta;
557 AliInfo("WARNING : at least one pt bin must be considered");
561 fEtaAxis = new TAxis(nBins, limits);
565 //====================================================================================================================================================
567 Int_t AliAnalysisTaskMuonHadronCorrelations::GetCentBin() {
569 Double_t percentile = fAOD->GetCentrality()->GetCentralityPercentile(fCentMethod.Data());
571 Int_t bin = fCentAxis->FindBin(percentile) - 1;
572 if (bin >= fNbinsCent) bin = -1;
577 //====================================================================================================================================================
579 Double_t AliAnalysisTaskMuonHadronCorrelations::GetITSMultiplicity() {
581 Double_t multiplicity = ((AliVAODHeader*)fAOD->GetHeader())->GetNumberOfITSClusters(1);
587 //====================================================================================================================================================
589 void AliAnalysisTaskMuonHadronCorrelations::Terminate(Option_t *) {
591 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
593 printf("ERROR: Output list not available\n");
599 //====================================================================================================================================================