]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/Correlations/DPhi/MuonHadron/AliAnalysisTaskMuonHadronCorrelations.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / MuonHadron / AliAnalysisTaskMuonHadronCorrelations.cxx
CommitLineData
07c2615a 1#include "AliLog.h"
2#include "TH1D.h"
3#include "TH2D.h"
4#include "TTree.h"
5#include "TAxis.h"
6#include "AliAODEvent.h"
7#include "AliAODTrack.h"
8#include "TMath.h"
9#include "TString.h"
10
11#include "AliAnalysisTaskMuonHadronCorrelations.h"
6de71f1d 12#include "AliAnalysisManager.h"
13#include "AliInputEventHandler.h"
14#include "AliEventPoolManager.h"
07c2615a 15
16ClassImp(AliAnalysisTaskMuonHadronCorrelations)
17
18//====================================================================================================================================================
19
20AliAnalysisTaskMuonHadronCorrelations::AliAnalysisTaskMuonHadronCorrelations() :
21 AliAnalysisTaskSE(),
22 fAOD(0x0),
6de71f1d 23 fPoolMgr(0x0),
07c2615a 24 fTrackCB(0x0),
25 fTrackMA(0x0),
26 fFilterBitCentralBarrel(0),
27 fMaxEtaCentralBarrel(1.0),
cc46e8f8 28 fMinEtaCentralBarrel(-1.0),
29d66ae8 29 fMaxChi2Muon(9999999999.),
07c2615a 30 fMinRAbsMuon(0),
29d66ae8 31 fMaxRAbsMuon(9999999999.),
07c2615a 32 fTriggerMatchLevelMuon(0),
07c2615a 33 fNbinsCent(1),
34 fNbinsPt(1),
35 fCentAxis(0x0),
07c2615a 36 fPtAxis(0x0),
b897e6f8 37 fEtaAxis(0x0),
07c2615a 38 fHistV0Multiplicity(0x0),
39 fHistITSMultiplicity(0x0),
40 fHistCentrality(0x0),
9c92a0e1 41 fHistEvStat(0x0),
07c2615a 42 fCentMethod(0),
07c2615a 43 fOutputList(0x0)
44{
45
46 // Default constructor
47
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;
b897e6f8 53 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] = NULL;
54 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = NULL;
07c2615a 55 }
56 }
57 fHistNTracksCB_vs_NTracksMA[iCent] = NULL;
57a9cc15 58 fHistNTracksCB_vs_NTracksMAmixed[iCent] = NULL;
ae1016ae 59 fHistTracksEtaMAvsEtaCB[iCent] = NULL;
60 fHistTracksEtaMAvsEtaCBmixed[iCent] = NULL;
9c92a0e1 61 fHistSingleMuonsPt[iCent] = NULL;
62 fHistSingleMuonsPtmixed[iCent] = NULL;
b897e6f8 63 fHistSingleMuonsEtaPt[iCent] = NULL;
64 fHistSingleMuonsEtaPtmixed[iCent] = NULL;
b51b09de 65 fHistSingleMuonsTrigMatch[iCent] = NULL;
66 fHistSingleMuonsChi2[iCent] = NULL;
57a9cc15 67 fHistSingleMuonsEtaVsPt[iCent] = NULL;
68 fHistSingleMuonsEtaVsRAbs[iCent] = NULL;
07c2615a 69 }
70
71}
72
73
74//====================================================================================================================================================
75
76AliAnalysisTaskMuonHadronCorrelations::AliAnalysisTaskMuonHadronCorrelations(const char *name) :
77 AliAnalysisTaskSE(name),
78 fAOD(0x0),
6de71f1d 79 fPoolMgr(0x0),
07c2615a 80 fTrackCB(0x0),
81 fTrackMA(0x0),
82 fFilterBitCentralBarrel(0),
83 fMaxEtaCentralBarrel(1.0),
cc46e8f8 84 fMinEtaCentralBarrel(-1.0),
29d66ae8 85 fMaxChi2Muon(9999999999.),
07c2615a 86 fMinRAbsMuon(0),
29d66ae8 87 fMaxRAbsMuon(9999999999.),
07c2615a 88 fTriggerMatchLevelMuon(0),
07c2615a 89 fNbinsCent(1),
90 fNbinsPt(1),
91 fCentAxis(0x0),
07c2615a 92 fPtAxis(0x0),
b897e6f8 93 fEtaAxis(0x0),
07c2615a 94 fHistV0Multiplicity(0x0),
95 fHistITSMultiplicity(0x0),
96 fHistCentrality(0x0),
9c92a0e1 97 fHistEvStat(0x0),
07c2615a 98 fCentMethod(0),
07c2615a 99 fOutputList(0x0)
100{
101
102 // Constructor
103
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;
b897e6f8 109 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] = NULL;
110 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] = NULL;
07c2615a 111 }
112 }
113 fHistNTracksCB_vs_NTracksMA[iCent] = NULL;
57a9cc15 114 fHistNTracksCB_vs_NTracksMAmixed[iCent] = NULL;
ae1016ae 115 fHistTracksEtaMAvsEtaCB[iCent] = NULL;
116 fHistTracksEtaMAvsEtaCBmixed[iCent] = NULL;
9c92a0e1 117 fHistSingleMuonsPt[iCent] = NULL;
118 fHistSingleMuonsPtmixed[iCent] = NULL;
b897e6f8 119 fHistSingleMuonsEtaPt[iCent] = NULL;
120 fHistSingleMuonsEtaPtmixed[iCent] = NULL;
b51b09de 121 fHistSingleMuonsTrigMatch[iCent] = NULL;
122 fHistSingleMuonsChi2[iCent] = NULL;
57a9cc15 123 fHistSingleMuonsEtaVsPt[iCent] = NULL;
124 fHistSingleMuonsEtaVsRAbs[iCent] = NULL;
07c2615a 125 }
126
127 // Define input and output slots here
128 DefineOutput(1, TList::Class());
129
130}
131
132//====================================================================================================================================================
133
134AliAnalysisTaskMuonHadronCorrelations::~AliAnalysisTaskMuonHadronCorrelations() {
135
07c2615a 136 delete fCentAxis;
137 delete fPtAxis;
b897e6f8 138 delete fEtaAxis;
07c2615a 139
6de71f1d 140 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode())
141 delete fOutputList;
07c2615a 142}
143
144//====================================================================================================================================================
145
146void AliAnalysisTaskMuonHadronCorrelations::UserCreateOutputObjects() {
147
148 fOutputList = new TList();
149 fOutputList->SetOwner(kTRUE);
150
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++) {
154
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());
164
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());
174
175 fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA] -> SetXTitle("#Delta#varphi [degrees]");
176 fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> SetXTitle("#Delta#varphi [degrees]");
177
178 fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
179 fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
180
181 fOutputList -> Add(fHistDeltaPhi[iCent][iPtBinCB][iPtBinMA]);
182 fOutputList -> Add(fHistDeltaPhiMix[iCent][iPtBinCB][iPtBinMA]);
183
b897e6f8 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());
194
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());
205
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");
210
211 fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
212 fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA] -> Sumw2();
213
214 fOutputList -> Add(fHistEtaDeltaPhi[iCent][iPtBinCB][iPtBinMA]);
215 fOutputList -> Add(fHistEtaDeltaPhiMix[iCent][iPtBinCB][iPtBinMA]);
216
07c2615a 217 }
218 }
219
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))),
57a9cc15 222 100, 0, 500, 20, 0, 20);
07c2615a 223 fHistNTracksCB_vs_NTracksMA[iCent] -> SetXTitle("N_{tracks} Central Barrel");
224 fHistNTracksCB_vs_NTracksMA[iCent] -> SetYTitle("N_{tracks} Muon Arm");
07c2615a 225 fHistNTracksCB_vs_NTracksMA[iCent] -> Sumw2();
226
57a9cc15 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();
233
ae1016ae 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);
240
07c2615a 241 fOutputList -> Add(fHistNTracksCB_vs_NTracksMA[iCent]);
57a9cc15 242 fOutputList -> Add(fHistNTracksCB_vs_NTracksMAmixed[iCent]);
ae1016ae 243 fOutputList -> Add(fHistTracksEtaMAvsEtaCB[iCent]);
244 fOutputList -> Add(fHistTracksEtaMAvsEtaCBmixed[iCent]);
57a9cc15 245
9c92a0e1 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]);
254
b897e6f8 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]);
265
b51b09de 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]);
272
57a9cc15 273 fHistSingleMuonsEtaVsPt[iCent] = new TH2D(Form("fHistSingleMuonsEtaVsPt_Cent%02d",iCent),
274 "#eta vs p_{T} for single muons",
9c92a0e1 275 100, -4.5, -2., 100, 0., 10.);
57a9cc15 276 fOutputList->Add(fHistSingleMuonsEtaVsPt[iCent]);
277 fHistSingleMuonsEtaVsRAbs[iCent] = new TH2D(Form("fHistSingleMuonsEtaVsRAbs_Cent%02d",iCent),
9c92a0e1 278 "#eta vs R_{Abs} for single muons",
279 100, -4.5, -2., 100, 0, 100);
57a9cc15 280 fOutputList->Add(fHistSingleMuonsEtaVsRAbs[iCent]);
07c2615a 281
282 }
283
284 fHistV0Multiplicity = new TH1D("fHistV0Multiplicity", "V0 Multiplicity", 500, 0, 1000);
285 fHistV0Multiplicity -> SetXTitle("Multiplicity");
286 fHistV0Multiplicity -> Sumw2();
287
288 fHistITSMultiplicity = new TH1D("fHistITSMultiplicity", "ITS Multiplicity", 500, 0, 500);
289 fHistITSMultiplicity -> SetXTitle("N_{Clusters}");
290 fHistITSMultiplicity -> Sumw2();
291
292 fHistCentrality = new TH1D("fHistCentrality", Form("%s Centrality",fCentMethod.Data()), 300, -100, 200);
293 fHistCentrality -> SetXTitle("Centrality [%]");
294 fHistCentrality -> Sumw2();
295
296 fOutputList -> Add(fHistV0Multiplicity);
297 fOutputList -> Add(fHistITSMultiplicity);
298 fOutputList -> Add(fHistCentrality);
299
9c92a0e1 300 fHistEvStat = new TH1D("fHistEvStat","Event cuts statistics",20,-0.5,19.5);
301 fHistEvStat->SetXTitle("Cut index");
302 fOutputList->Add(fHistEvStat);
303
6de71f1d 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;
309
310 fPoolMgr = new AliEventPoolManager(1000, 20000, fNbinsCent, (Double_t*)fCentAxis->GetXbins()->GetArray(), nZvtxBins, zvtxbin);
311
07c2615a 312 PostData(1, fOutputList);
313
314}
315
316//====================================================================================================================================================
317
318void AliAnalysisTaskMuonHadronCorrelations::UserExec(Option_t *) {
319
07c2615a 320 fAOD = dynamic_cast<AliAODEvent *>(InputEvent());
321 if (!fAOD) return;
9c92a0e1 322
323 Int_t cutIndex = 0;
324 fHistEvStat->Fill(cutIndex++);
07c2615a 325 // Trigger selection
326 if (!(IsTriggerFired())) return;
9c92a0e1 327 fHistEvStat->Fill(cutIndex++);
07c2615a 328
329 fHistV0Multiplicity -> Fill(GetV0Multiplicity());
330 fHistITSMultiplicity -> Fill(GetITSMultiplicity());
6de71f1d 331
07c2615a 332 Int_t centBin = GetCentBin();
333 if (centBin<0) return;
9c92a0e1 334 fHistEvStat->Fill(cutIndex++);
6de71f1d 335 Double_t percentile = fAOD->GetCentrality()->GetCentralityPercentile(fCentMethod.Data());
336 fHistCentrality->Fill(percentile);
337
9c92a0e1 338 // Vertex selection
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();
348 Double_t cov[6]={0};
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++);
354
355 if (TMath::Abs(zvtx) > 10.) return;
356 fHistEvStat->Fill(cutIndex++);
357
57a9cc15 358 TObjArray *tracksMuonArm = GetAcceptedTracksMuonArm(fAOD,centBin);
6de71f1d 359 if (tracksMuonArm->GetEntriesFast() == 0) {
360 delete tracksMuonArm;
361 return;
362 }
9c92a0e1 363 fHistEvStat->Fill(cutIndex++);
6de71f1d 364 TObjArray *tracksCentralBarrel = GetAcceptedTracksCentralBarrel(fAOD);
07c2615a 365
6de71f1d 366 fHistNTracksCB_vs_NTracksMA[centBin] -> Fill(tracksCentralBarrel->GetEntries(), tracksMuonArm->GetEntries());
07c2615a 367
6de71f1d 368 AliDebug(1, Form("Single Event analysis : nTracksCB = %4d, nTracksMA = %4d", tracksCentralBarrel->GetEntries(), tracksMuonArm->GetEntries()));
369
370 // Same event
371 for (Int_t iTrMA=0; iTrMA<tracksMuonArm->GetEntriesFast(); iTrMA++) {
372 fTrackMA = (AliAODTrack*) tracksMuonArm->At(iTrMA);
9c92a0e1 373 fHistSingleMuonsPt[centBin]->Fill(fTrackMA->Pt());
b897e6f8 374 fHistSingleMuonsEtaPt[centBin]->Fill(fTrackMA->Pt(),fTrackMA->Eta());
6de71f1d 375 for (Int_t iTrCB=0; iTrCB<tracksCentralBarrel->GetEntriesFast(); iTrCB++) {
376 fTrackCB = (AliAODTrack*) tracksCentralBarrel -> At(iTrCB);
07c2615a 377 FillHistograms(centBin, kSingleEvent);
378 }
379 }
380
6de71f1d 381 // Mixed event
382 {
9c92a0e1 383 AliEventPool* pool = fPoolMgr->GetEventPool(percentile, zvtx);
6de71f1d 384 //pool->PrintInfo();
385 if (pool->IsReady() || pool->NTracksInPool() > 2000 || pool->GetCurrentNEvents() >= 5)
386 for (Int_t jMix=0; jMix<pool->GetCurrentNEvents(); jMix++) {
57a9cc15 387 TObjArray *mixedTracks = pool->GetEvent(jMix);
388 fHistNTracksCB_vs_NTracksMAmixed[centBin]->Fill(mixedTracks->GetEntriesFast(), tracksMuonArm->GetEntriesFast());
6de71f1d 389 for (Int_t iTrMA=0; iTrMA<tracksMuonArm->GetEntriesFast(); iTrMA++) {
390 fTrackMA = (AliAODTrack*) tracksMuonArm->At(iTrMA);
9c92a0e1 391 fHistSingleMuonsPtmixed[centBin]->Fill(fTrackMA->Pt());
b897e6f8 392 fHistSingleMuonsEtaPtmixed[centBin]->Fill(fTrackMA->Pt(),fTrackMA->Eta());
6de71f1d 393 for (Int_t iTrCB=0; iTrCB<mixedTracks->GetEntriesFast(); iTrCB++) {
394 fTrackCB = (AliAODTrack*) mixedTracks -> At(iTrCB);
395 FillHistograms(centBin, kMixedEvent);
396 }
397 }
398 }
399 pool->UpdatePool(tracksCentralBarrel);
400 }
401
402 delete tracksMuonArm;
07c2615a 403
404 PostData(1, fOutputList);
405
406}
407
408//====================================================================================================================================================
409
410void AliAnalysisTaskMuonHadronCorrelations::FillHistograms(Int_t centrality, Int_t option) {
411
412 Int_t ptBinTrackCB = fPtAxis -> FindBin(fTrackCB->Pt());
413 Int_t ptBinTrackMA = fPtAxis -> FindBin(fTrackMA->Pt());
414
415 if (ptBinTrackCB<1 || ptBinTrackCB>fNbinsPt || ptBinTrackMA<1 || ptBinTrackMA>fNbinsPt) return;
416
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();
420
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);
423
b897e6f8 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());
426
ae1016ae 427 if (option==kSingleEvent) fHistTracksEtaMAvsEtaCB[centrality]->Fill(fTrackMA->Eta(),fTrackCB->Eta());
428 else if (option==kMixedEvent) fHistTracksEtaMAvsEtaCBmixed[centrality]->Fill(fTrackMA->Eta(),fTrackCB->Eta());
07c2615a 429}
430
431//====================================================================================================================================================
432
433Bool_t AliAnalysisTaskMuonHadronCorrelations::IsTriggerFired() {
434
6de71f1d 435 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kINT7);
07c2615a 436
6de71f1d 437 return isSelected;
07c2615a 438}
439
440//====================================================================================================================================================
441
442Float_t AliAnalysisTaskMuonHadronCorrelations::GetV0Multiplicity() {
443
444 Float_t multiplicity=0;
445 for (Int_t iChannel=0; iChannel<64; iChannel++) multiplicity += fAOD->GetVZEROData()->GetMultiplicity(iChannel);
446 return multiplicity;
447
448}
449
450//====================================================================================================================================================
451
6de71f1d 452TObjArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksCentralBarrel(AliAODEvent *aodEvent) {
07c2615a 453
454 // fills the array of central barrel tracks that pass the cuts
455
6de71f1d 456 TObjArray *tracks = new TObjArray;
457 tracks->SetOwner(kTRUE);
07c2615a 458
4640c275 459 Int_t nTracks = aodEvent->GetNumberOfTracks();
07c2615a 460
461 AliAODTrack *track = 0;
462
463 for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
f15c1f69 464 track = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(iTrack));
465 if(!track) AliFatal("Not a standard AOD");
cc46e8f8 466 if (track->TestFilterBit(fFilterBitCentralBarrel) && track->Eta()>fMinEtaCentralBarrel && track->Eta()<fMaxEtaCentralBarrel) {
6de71f1d 467 tracks->Add(new AliAODTrack(*track));
07c2615a 468 }
469 }
470
471 return tracks;
472
473}
474
475//====================================================================================================================================================
476
57a9cc15 477TObjArray* AliAnalysisTaskMuonHadronCorrelations::GetAcceptedTracksMuonArm(AliAODEvent *aodEvent, Int_t centBin) {
07c2615a 478
479 // fills the array of muon tracks that pass the cuts
480
6de71f1d 481 TObjArray *tracks = new TObjArray;
482 tracks->SetOwner(kFALSE);
07c2615a 483
4640c275 484 Int_t nTracks = aodEvent->GetNumberOfTracks();
07c2615a 485
486 AliAODTrack *track = 0;
487
488 for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
f15c1f69 489 track = dynamic_cast<AliAODTrack*>(aodEvent->GetTrack(iTrack));
490 if(!track) AliFatal("Not a standard AOD");
b51b09de 491 if (track->IsMuonTrack()) fHistSingleMuonsTrigMatch[centBin]->Fill(track->GetMatchTrigger());
07c2615a 492 if (track->IsMuonTrack() && track->GetMatchTrigger()>=fTriggerMatchLevelMuon) {
b51b09de 493 fHistSingleMuonsChi2[centBin]->Fill(track->Chi2perNDF());
494 // if (track->Chi2perNDF() < 5.) {
57a9cc15 495 // histos
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));
502 }
503 }
b51b09de 504 // }
07c2615a 505 }
506 }
507
508 return tracks;
509
510}
511
512//====================================================================================================================================================
513
514void AliAnalysisTaskMuonHadronCorrelations::SetCentBinning(Int_t nBins, Double_t *limits) {
515
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;
519 }
520 if (nBins<=0) {
521 AliInfo("WARNING : at least one centrality bin must be considered");
522 nBins = 1;
523 }
524
525 fNbinsCent = nBins;
526 fCentAxis = new TAxis(fNbinsCent, limits);
527
528}
529
530//====================================================================================================================================================
531
07c2615a 532void AliAnalysisTaskMuonHadronCorrelations::SetPtBinning(Int_t nBins, Double_t *limits) {
533
534 if (nBins>fNMaxBinsPt) {
535 AliInfo(Form("WARNING : only %d pt bins (out of the %d proposed) will be considered",fNMaxBinsPt,nBins));
536 nBins = fNMaxBinsPt;
537 }
538 if (nBins<=0) {
539 AliInfo("WARNING : at least one pt bin must be considered");
540 nBins = 1;
541 }
542
543 fNbinsPt = nBins;
544 fPtAxis = new TAxis(fNbinsPt, limits);
545
546}
547
548//====================================================================================================================================================
549
b897e6f8 550void AliAnalysisTaskMuonHadronCorrelations::SetEtaBinning(Int_t nBins, Double_t *limits) {
551
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;
555 }
556 if (nBins<=0) {
557 AliInfo("WARNING : at least one pt bin must be considered");
558 nBins = 1;
559 }
560
561 fEtaAxis = new TAxis(nBins, limits);
562
563}
564
565//====================================================================================================================================================
566
07c2615a 567Int_t AliAnalysisTaskMuonHadronCorrelations::GetCentBin() {
07c2615a 568
6de71f1d 569 Double_t percentile = fAOD->GetCentrality()->GetCentralityPercentile(fCentMethod.Data());
07c2615a 570
6de71f1d 571 Int_t bin = fCentAxis->FindBin(percentile) - 1;
572 if (bin >= fNbinsCent) bin = -1;
573 return bin;
07c2615a 574
575}
576
577//====================================================================================================================================================
578
579Double_t AliAnalysisTaskMuonHadronCorrelations::GetITSMultiplicity() {
580
0a918d8d 581 Double_t multiplicity = ((AliVAODHeader*)fAOD->GetHeader())->GetNumberOfITSClusters(1);
07c2615a 582
583 return multiplicity;
584
585}
586
587//====================================================================================================================================================
588
589void AliAnalysisTaskMuonHadronCorrelations::Terminate(Option_t *) {
590
591 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
592 if (!fOutputList) {
593 printf("ERROR: Output list not available\n");
594 return;
595 }
596
597}
598
599//====================================================================================================================================================
600