]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/EBYE/PIDFluctuation/task/AliEbyEPidRatioEffCont.cxx
Updated Shuttle<->DQM connections.
[u/mrichter/AliRoot.git] / PWGCF / EBYE / PIDFluctuation / task / AliEbyEPidRatioEffCont.cxx
CommitLineData
0a28d543 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: ALICE Offline. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16
17//=========================================================================//
18// AliEbyE Analysis for Particle Ratio Fluctuation //
19// Deepika Rathee | Satyajit Jena //
20// drathee@cern.ch | sjena@cern.ch //
21// Date: Wed Jul 9 18:38:30 CEST 2014 //
22// New approch to find particle ratio to reduce memory //
23// (Test Only) //
24//=========================================================================//
25
26#include "TMath.h"
27#include "TAxis.h"
28
29#include "AliESDEvent.h"
30#include "AliStack.h"
31#include "AliMCEvent.h"
32#include "AliESDtrackCuts.h"
33#include "AliAODEvent.h"
34#include "AliAODMCParticle.h"
35
36#include "AliEbyEPidRatioEffCont.h"
37
38using namespace std;
39
40
41ClassImp(AliEbyEPidRatioEffCont)
42
43//________________________________________________________________________
44AliEbyEPidRatioEffCont::AliEbyEPidRatioEffCont() :
45 AliEbyEPidRatioBase("EffCont", "EffCont"),
46 fLabelsRec(NULL),
47 fHnEff(NULL),
48 fHnCont(NULL) {
49 // Constructor
50
51 AliLog::SetClassDebugLevel("AliEbyEPidRatioEffCont",10);
52}
53
54//________________________________________________________________________
55AliEbyEPidRatioEffCont::~AliEbyEPidRatioEffCont() {
56 // Destructor
57
58 for (Int_t ii = 0; ii < 2; ++ii) {
59 for (Int_t kk = 0; kk < 4; ++kk)
60 if (fLabelsRec[ii][kk]) delete[] fLabelsRec[ii][kk];
61 if (fLabelsRec[ii]) delete[] fLabelsRec[ii];
62 }
63 if (fLabelsRec) delete[] fLabelsRec;
64
65
66}
67
68//________________________________________________________________________
69void AliEbyEPidRatioEffCont::Process() {
70 // -- Process event
71
72 // -- Setup (clean, create and fill) MC labels
73 FillMCLabels();
74
75 // -- Fill MC histograms for efficiency studies
76 FillMCEffHist();
77
78 return;
79}
80
81//________________________________________________________________________
82void AliEbyEPidRatioEffCont::Init() {
83 // -- Init eventwise
84
85 fLabelsRec = new Int_t**[2];
86 for (Int_t ii = 0 ; ii < 2; ++ii) {
87 fLabelsRec[ii] = new Int_t*[4];
88 for (Int_t kk = 0 ; kk < 4; ++kk)
89 fLabelsRec[ii][kk] = NULL;
90 }
91}
92
93//________________________________________________________________________
94void AliEbyEPidRatioEffCont::CreateHistograms() {
95 // Copied from NetParticle class
96 Int_t binHnEff[20] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent, AliEbyEPidRatioHelper::fgkfHistNBinsEta, // cent | etaMC
97 AliEbyEPidRatioHelper::fgkfHistNBinsRap, AliEbyEPidRatioHelper::fgkfHistNBinsPhi, // yMC | phiMC
98 AliEbyEPidRatioHelper::fgkfHistNBinsPt, AliEbyEPidRatioHelper::fgkfHistNBinsSign, // ptMC | signMC
99 2, 2 , 2 , // findable | recStatus | pidStatus
100 AliEbyEPidRatioHelper::fgkfHistNBinsEta, AliEbyEPidRatioHelper::fgkfHistNBinsRap, // etaRec | yRec
101 AliEbyEPidRatioHelper::fgkfHistNBinsPhi, AliEbyEPidRatioHelper::fgkfHistNBinsPt, // phiRec | ptRec
102 AliEbyEPidRatioHelper::fgkfHistNBinsSign, // signRec
103 AliEbyEPidRatioHelper::fgkfHistNBinsEta, AliEbyEPidRatioHelper::fgkfHistNBinsRap, // deltaEta | deltaY
104 2*AliEbyEPidRatioHelper::fgkfHistNBinsPhi+1, 2*AliEbyEPidRatioHelper::fgkfHistNBinsPt+1, // deltaPhi | deltaPt
105 AliEbyEPidRatioHelper::fgkfHistNBinsSign+2, 4}; // deltaSign
106
107
108 Double_t minHnEff[20] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0], AliEbyEPidRatioHelper::fgkfHistRangeEta[0],
109 AliEbyEPidRatioHelper::fgkfHistRangeRap[0], AliEbyEPidRatioHelper::fgkfHistRangePhi[0],
110 AliEbyEPidRatioHelper::fgkfHistRangePt[0], AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
111 -0.5, -0.5, -0.5,
112 AliEbyEPidRatioHelper::fgkfHistRangeEta[0], AliEbyEPidRatioHelper::fgkfHistRangeRap[0],
113 AliEbyEPidRatioHelper::fgkfHistRangePhi[0], AliEbyEPidRatioHelper::fgkfHistRangePt[0],
114 AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
115 AliEbyEPidRatioHelper::fgkfHistRangeEta[0], AliEbyEPidRatioHelper::fgkfHistRangeRap[0],
116 -1.*AliEbyEPidRatioHelper::fgkfHistRangePhi[1], -1.*AliEbyEPidRatioHelper::fgkfHistRangePt[1],
117 AliEbyEPidRatioHelper::fgkfHistRangeSign[0]-1., -0.5};
118
119 Double_t maxHnEff[20] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1], AliEbyEPidRatioHelper::fgkfHistRangeEta[1],
120 AliEbyEPidRatioHelper::fgkfHistRangeRap[1], AliEbyEPidRatioHelper::fgkfHistRangePhi[1],
121 AliEbyEPidRatioHelper::fgkfHistRangePt[1], AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
122 1.5, 1.5, 1.5,
123 AliEbyEPidRatioHelper::fgkfHistRangeEta[1], AliEbyEPidRatioHelper::fgkfHistRangeRap[1],
124 AliEbyEPidRatioHelper::fgkfHistRangePhi[1], AliEbyEPidRatioHelper::fgkfHistRangePt[1],
125 AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
126 AliEbyEPidRatioHelper::fgkfHistRangeEta[1], AliEbyEPidRatioHelper::fgkfHistRangeRap[1],
127 AliEbyEPidRatioHelper::fgkfHistRangePhi[1], AliEbyEPidRatioHelper::fgkfHistRangePt[1],
30f94f08 128 AliEbyEPidRatioHelper::fgkfHistRangeSign[1]+1., 3.5};
0a28d543 129
130 fHnEff = new THnSparseF("hnEff", "cent:etaMC:yMC:phiMC:ptMC:signMC:findable:recStatus:pidStatus:etaRec:yRec:phiRec:ptRec:signRec:deltaEta:deltaY:deltaPhi:deltaPt:deltaSign:PID",
131 20, binHnEff, minHnEff, maxHnEff);
132 fHnEff->Sumw2();
133
134 fHnEff->GetAxis(0)->SetTitle("centrality"); // 0-5|5-10|10-20|20-30|30-40|40-50|50-60|60-70|70-80|80-90 --> 10 bins
135 fHnEff->GetAxis(1)->SetTitle("#eta_{MC}"); // eta [-0.9, 0.9]
136 fHnEff->GetAxis(2)->SetTitle("#it{y}_{MC}"); // rapidity [-0.5, 0.5]
137 fHnEff->GetAxis(3)->SetTitle("#varphi_{MC} (rad)"); // phi [ 0. , 2Pi]
138 fHnEff->GetAxis(4)->SetTitle("#it{p}_{T,MC} (GeV/#it{c})"); // pT [ 0.2, 2.3]
139
140 fHnEff->GetAxis(5)->SetTitle("sign"); // -1 | 0 | +1
141 fHnEff->GetAxis(6)->SetTitle("findable"); // 0 not findable | 1 findable
142 fHnEff->GetAxis(7)->SetTitle("recStatus"); // 0 not reconstructed | 1 reconstructed
143 fHnEff->GetAxis(8)->SetTitle("recPid"); // 0 not accepted | 1 accepted
144
145 fHnEff->GetAxis(9)->SetTitle("#eta_{Rec}"); // eta [-0.9, 0.9]
146 fHnEff->GetAxis(10)->SetTitle("#it{y}_{Rec}"); // rapidity [-0.5, 0.5]
147 fHnEff->GetAxis(11)->SetTitle("#varphi_{Rec} (rad)"); // phi [ 0. , 2Pi]
148 fHnEff->GetAxis(12)->SetTitle("#it{p}_{T,Rec} (GeV/#it{c})"); // pt [ 0.2, 2.3]
149 fHnEff->GetAxis(13)->SetTitle("sign"); // -1 | 0 | +1
150
151 fHnEff->GetAxis(14)->SetTitle("#eta_{MC}-#eta_{Rec}"); // eta [-0.9, 0.9]
152 fHnEff->GetAxis(15)->SetTitle("#it{y}_{MC}-#it{y}_{Rec}"); // rapidity [-0.5, 0.5]
153 fHnEff->GetAxis(16)->SetTitle("#varphi_{MC}-#varphi_{Rec} (rad)"); // phi [ -2Pi , 2Pi]
154 fHnEff->GetAxis(17)->SetTitle("#it{p}_{T,MC}-#it{p}_{T,Rec} (GeV/#it{c})"); // pt [ -2.3, 2.3]
155 fHnEff->GetAxis(18)->SetTitle("sign_{MC}-sign_{Rec}"); // -2 | 0 | +2
156 fHnEff->GetAxis(19)->SetTitle("N_{ch}|N_{#pi}|N_{K}|N_{p}"); // 0 | 1 | 2 | 3
157
158 fHelper->BinLogAxis(fHnEff, 4);
159 fHelper->BinLogAxis(fHnEff, 12);
160
161 /*
162 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Copied from NetParticle
163
164 creation -> findable -> reconstructed -> pid_TPC+TOF
165 (1) (2) (3) (4)
166 || findable | recStatus | recPid
167 1) all primary probeParticles_MC || - - -
168 2) all findable primary probeParticles_MC || x - -
169 3) all reconstructed primary probeParticles_MC || x x -
170 4) all reconstructed primary probeParticles_MC & recPid_TPC+TOF || x x x
171
172 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
173 */
174
175 // ------------------------------------------------------------------
176 // -- Create THnSparse - Cont
177 // ------------------------------------------------------------------
178
179 Int_t binHnCont[18] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent, AliEbyEPidRatioHelper::fgkfHistNBinsEta, // cent | etaMC
180 AliEbyEPidRatioHelper::fgkfHistNBinsRap, AliEbyEPidRatioHelper::fgkfHistNBinsPhi, // yMC | phiMC
181 AliEbyEPidRatioHelper::fgkfHistNBinsPt, AliEbyEPidRatioHelper::fgkfHistNBinsSign, // ptMC | signMC=contSign
182 8, // contPart |
183 AliEbyEPidRatioHelper::fgkfHistNBinsEta, AliEbyEPidRatioHelper::fgkfHistNBinsRap, // etaRec | yRec
184 AliEbyEPidRatioHelper::fgkfHistNBinsPhi, AliEbyEPidRatioHelper::fgkfHistNBinsPt, // phiRec | ptRec
185 AliEbyEPidRatioHelper::fgkfHistNBinsSign, // signRec
186 AliEbyEPidRatioHelper::fgkfHistNBinsEta, AliEbyEPidRatioHelper::fgkfHistNBinsRap, // deltaEta | deltaY
187 2*AliEbyEPidRatioHelper::fgkfHistNBinsPhi+1, 2*AliEbyEPidRatioHelper::fgkfHistNBinsPt+1, // deltaPhi | deltaPt
188 AliEbyEPidRatioHelper::fgkfHistNBinsSign+2, 4}; // deltaSign| pid 0-3
189
190 Double_t minHnCont[18] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0], AliEbyEPidRatioHelper::fgkfHistRangeEta[0],
191 AliEbyEPidRatioHelper::fgkfHistRangeRap[0], AliEbyEPidRatioHelper::fgkfHistRangePhi[0],
192 AliEbyEPidRatioHelper::fgkfHistRangePt[0], AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
193 0.5,
194 AliEbyEPidRatioHelper::fgkfHistRangeEta[0], AliEbyEPidRatioHelper::fgkfHistRangeRap[0],
195 AliEbyEPidRatioHelper::fgkfHistRangePhi[0], AliEbyEPidRatioHelper::fgkfHistRangePt[0],
196 AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
197 AliEbyEPidRatioHelper::fgkfHistRangeEta[0], AliEbyEPidRatioHelper::fgkfHistRangeRap[0],
198 -1.*AliEbyEPidRatioHelper::fgkfHistRangePhi[1], -1.*AliEbyEPidRatioHelper::fgkfHistRangePt[1],
199 AliEbyEPidRatioHelper::fgkfHistRangeSign[0]-1., -0.5};
200
201
202 Double_t maxHnCont[18] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1], AliEbyEPidRatioHelper::fgkfHistRangeEta[1],
203 AliEbyEPidRatioHelper::fgkfHistRangeRap[1], AliEbyEPidRatioHelper::fgkfHistRangePhi[1],
204 AliEbyEPidRatioHelper::fgkfHistRangePt[1], AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
205 8.5,
206 AliEbyEPidRatioHelper::fgkfHistRangeEta[1], AliEbyEPidRatioHelper::fgkfHistRangeRap[1],
207 AliEbyEPidRatioHelper::fgkfHistRangePhi[1], AliEbyEPidRatioHelper::fgkfHistRangePt[1],
208 AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
209 AliEbyEPidRatioHelper::fgkfHistRangeEta[1], AliEbyEPidRatioHelper::fgkfHistRangeRap[1],
210 AliEbyEPidRatioHelper::fgkfHistRangePhi[1], AliEbyEPidRatioHelper::fgkfHistRangePt[1],
30f94f08 211 AliEbyEPidRatioHelper::fgkfHistRangeSign[1]+1., 3.5};
0a28d543 212
213 fHnCont = new THnSparseF("hnCont", "cent:etaMC:yMC:phiMC:ptMC:signMC:contPart:etaRec:yRec:phiRec:ptRec:signRec:deltaEta:deltaY:deltaPhi:deltaPt:deltaSign:PID",
214 18, binHnCont, minHnCont, maxHnCont);
215 fHnCont->Sumw2();
216
217 fHnCont->GetAxis(0)->SetTitle("centrality"); // 0-5|5-10|10-20|20-30|30-40|40-50|50-60|60-70|70-80|80-90 --> 10 bins
218 fHnCont->GetAxis(1)->SetTitle("#eta_{MC}"); // eta [-0.9,0.9]
219 fHnCont->GetAxis(2)->SetTitle("#it{y}_{MC}"); // rapidity [-0.5, 0.5]
220 fHnCont->GetAxis(3)->SetTitle("#varphi_{MC} (rad)"); // phi [ 0. ,2Pi]
221 fHnCont->GetAxis(4)->SetTitle("#it{p}_{T,MC} (GeV/#it{c})"); // pT [ 0.2,2.3]
222 fHnCont->GetAxis(5)->SetTitle("sign"); // -1 | 0 | +1
223
224 fHnCont->GetAxis(6)->SetTitle("contPart"); // 1 pi | 2 K | 3 p | 4 e | 5 mu | 6 other | 7 p from WeakDecay | 8 p from Material
225
226 fHnCont->GetAxis(7)->SetTitle("#eta_{Rec}"); // eta [-0.9, 0.9]
227 fHnCont->GetAxis(8)->SetTitle("#it{y}_{Rec}"); // rapidity [-0.5, 0.5]
228 fHnCont->GetAxis(9)->SetTitle("#varphi_{Rec} (rad)"); // phi [ 0. , 2Pi]
229 fHnCont->GetAxis(10)->SetTitle("#it{p}_{T,Rec} (GeV/#it{c})"); // pt [ 0.2, 2.3]
230 fHnCont->GetAxis(11)->SetTitle("sign"); // -1 | 0 | +1
231
232 fHnCont->GetAxis(12)->SetTitle("#eta_{MC}-#eta_{Rec}"); // eta [-0.9, 0.9]
233 fHnCont->GetAxis(13)->SetTitle("#it{y}_{MC}-#it{y}_{Rec}"); // rapidity [-0.5, 0.5]
234 fHnCont->GetAxis(14)->SetTitle("#varphi_{MC}-#varphi_{Rec} (rad)"); // phi [ -2Pi , 2Pi]
235 fHnCont->GetAxis(15)->SetTitle("#it{p}_{T,MC}-#it{p}_{T,Rec} (GeV/#it{c})"); // pt [ -2.3, 2.3]
236 fHnCont->GetAxis(16)->SetTitle("sign_{MC}-sign_{Rec}"); // -2 | 0 | +2
237 fHnCont->GetAxis(17)->SetTitle("N_{ch}|N_{#pi}|N_{K}|N_{p}"); // 0 | 1 | 2 | 3
238
239 fHelper->BinLogAxis(fHnCont, 4);
240 fHelper->BinLogAxis(fHnCont, 10);
241
242 return;
243}
244
245//________________________________________________________________________
246Int_t AliEbyEPidRatioEffCont::Setup() {
247 // -- Setup eventwise
248
249 // -- Create label arrays
250 for(Int_t i = 0; i < 4; i++) {
251 fLabelsRec[0][i] = new Int_t[fNTracks];
252 if(!fLabelsRec[0][i]) {
253 AliError("Cannot create fLabelsRec[0]");
254 return -1;
255 }
256
257 fLabelsRec[1][i] = new Int_t[fNTracks];
258 if(!fLabelsRec[1][i]) {
259 AliError("Cannot create fLabelsRec[1] for PID");
260 return -1;
261 }
262
263 for(Int_t ii = 0; ii < fNTracks; ++ii) {
264 fLabelsRec[0][i][ii] = 0;
265 fLabelsRec[1][i][ii] = 0;
266 }
267 }
268 return 0;
269}
270
271//________________________________________________________________________
272void AliEbyEPidRatioEffCont::Reset() {
273 // -- Reset eventwise
274 for(Int_t i = 0; i < 4; i++) {
275 for (Int_t ii = 0; ii < 2 ; ++ii) {
276 if (fLabelsRec[ii][i])
277 delete[] fLabelsRec[ii][i];
278 fLabelsRec[ii][i] = NULL;
279 }
280 }
281}
282
283//________________________________________________________________________
284void AliEbyEPidRatioEffCont::FillMCLabels() {
285 Float_t etaRange[2];
286 fESDTrackCuts->GetEtaRange(etaRange[0],etaRange[1]);
287
288 Float_t ptRange[2];
289 fESDTrackCuts->GetPtRange(ptRange[0],ptRange[1]);
290
291 // -- Track Loop
292 for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) {
293
294 AliVTrack *track = (fESD) ? static_cast<AliVTrack*>(fESD->GetTrack(idxTrack)) : static_cast<AliVTrack*>(fAOD->GetTrack(idxTrack));
295
296 // -- Check if track is accepted for basic parameters
297 if (!fHelper->IsTrackAcceptedBasicCharged(track))
298 continue;
299
300 // -- Check if accepted - ESD
301 if (fESD && !fESDTrackCuts->AcceptTrack(dynamic_cast<AliESDtrack*>(track)))
302 continue;
303
304 // -- Check if accepted - AOD
305 if (fAOD){
306 AliAODTrack * trackAOD = dynamic_cast<AliAODTrack*>(track);
307
308 if (!trackAOD) {
309 AliError("Pointer to dynamic_cast<AliAODTrack*>(track) = ZERO");
310 continue;
311 }
312 if (!trackAOD->TestFilterBit(fAODtrackCutBit))
313 continue;
314
315 // -- Check if in pT and eta range (is done in ESDTrackCuts for ESDs)
316 if(!(track->Pt() > ptRange[0] && track->Pt() <= ptRange[1] && TMath::Abs(track->Eta()) <= etaRange[1]))
317 continue;
318 }
319
320 Int_t gPdgCode = 0;
321
322 Int_t iPid = 0;
323 Double_t pid[3];
324 if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kPion))) { iPid = 1; gPdgCode = 211;}
325 else if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kKaon))) { iPid = 2; gPdgCode = 321;}
326 else if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kProton))){ iPid = 3; gPdgCode = 2212;}
327 else iPid = 0;
328
329
330 Double_t yP;
331 if (!fHelper->IsTrackAcceptedRapidity(track, yP, iPid))
332 continue;
333
334 if (!fHelper->IsTrackAcceptedDCA(track))
335 continue;
336
337 Int_t label = TMath::Abs(track->GetLabel());
338
339 // -- Fill Label of all reconstructed
340 if(iPid != 0) fLabelsRec[0][0][idxTrack] = label;
341 fLabelsRec[0][iPid][idxTrack] = label;
342
343 // -- Fill Label of all reconstructed && recPid_TPC+TOF
344 if(iPid != 0) fLabelsRec[1][0][idxTrack] = label;
345 fLabelsRec[1][iPid][idxTrack] = label;
346
347 // -- Check for contamination and fill contamination THnSparse
348 CheckContTrack(track, iPid, gPdgCode);
349 if(iPid != 0) CheckContTrack(track, 0, 0);
350
351 } // for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) {
352
353 return;
354}
355
356//________________________________________________________________________
357void AliEbyEPidRatioEffCont::CheckContTrack(AliVTrack *track, Int_t iPid, Int_t gPdgCode) {
358 Int_t label = TMath::Abs(track->GetLabel());
359 Float_t signRec = track->Charge();
360
361
362 AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(label) : static_cast<AliVParticle*>(fArrayMC->At(label));
363 if (!particle)
364 return;
365
366 Bool_t isPhysicalPrimary = (fESD) ? fStack->IsPhysicalPrimary(label): (static_cast<AliAODMCParticle*>(particle))->IsPhysicalPrimary();
367 if (iPid == 0) {
368 if (particle->PdgCode() == (signRec*gPdgCode))
369 if (isPhysicalPrimary)
370 return;
371 }
372 else {
373 if (isPhysicalPrimary)
374 return;
375 }
376
377 // -- Check if secondaries from material or weak decay
378 Bool_t isSecondaryFromWeakDecay = (fESD) ? fStack->IsSecondaryFromWeakDecay(label) : (static_cast<AliAODMCParticle*>(particle))->IsSecondaryFromWeakDecay();
379 Bool_t isSecondaryFromMaterial = (fESD) ? fStack->IsSecondaryFromMaterial(label) : (static_cast<AliAODMCParticle*>(particle))->IsSecondaryFromMaterial();
380
381 // -- Get PDG Charge of contaminating particle
382 Float_t signMC = 0.;
383 if (particle->Charge() == 0.) signMC = 0.;
384 else if (particle->Charge() < 0.) signMC = -1.;
385 else if (particle->Charge() > 0.) signMC = 1.;
386
387 // -- Get contaminating particle
388 Float_t contPart = 0;
389 if (isSecondaryFromWeakDecay) contPart = 7; // probeParticle from WeakDecay
390 else if (isSecondaryFromMaterial) contPart = 8; // probeParticle from Material
391 else {
392 if (TMath::Abs(particle->PdgCode()) == 211) contPart = 1; // pion
393 else if (TMath::Abs(particle->PdgCode()) == 321) contPart = 2; // kaon
394 else if (TMath::Abs(particle->PdgCode()) == 2212) contPart = 3; // proton
395 else if (TMath::Abs(particle->PdgCode()) == 11) contPart = 4; // electron
396 else if (TMath::Abs(particle->PdgCode()) == 13) contPart = 5; // muon
397 else contPart = 6; // other
398 }
399
400 // -- Get Reconstructed y
401 // yRec = y for identified particles | yRec = eta for charged particles
402 Double_t yRec = 0.;
403 fHelper->IsTrackAcceptedRapidity(track, yRec, iPid);
404
405 Double_t deltaPhi = particle->Phi()-track->Phi();
406 if (TMath::Abs(deltaPhi) > TMath::TwoPi()) {
407 if (deltaPhi < 0)
408 deltaPhi += TMath::TwoPi();
409 else
410 deltaPhi -= TMath::TwoPi();
411 }
412
413 Double_t hnCont[18] = {fCentralityBin,
414 particle->Eta(),
415 particle->Y(),
416 particle->Phi(),
417 particle->Pt(),
418 signMC,
419 contPart,
420 track->Eta(),
421 yRec,
422 track->Phi(),
423 track->Pt(),
424 signRec,
425 particle->Eta()-track->Eta(),
426 particle->Y()-yRec,
427 deltaPhi,
428 particle->Pt()-track->Pt(),
429 signMC-signRec,
430 iPid};
431 fHnCont->Fill(hnCont);
432
433}
434
435//________________________________________________________________________
436void AliEbyEPidRatioEffCont::FillMCEffHist() {
437 // Fill efficiency THnSparse for ESDs
438
439 Float_t etaRange[2];
440 fESDTrackCuts->GetEtaRange(etaRange[0],etaRange[1]);
441
442 Int_t nPart = (fESD) ? fStack->GetNprimary() : fArrayMC->GetEntriesFast();
443
444 for (Int_t idxMC = 0; idxMC < nPart; ++idxMC) {
445 AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(idxMC) : static_cast<AliVParticle*>(fArrayMC->At(idxMC));
446
447 // -- Check basic MC properties -> charged physical primary
448 if (!fHelper->IsParticleAcceptedBasicCharged(particle, idxMC))
449 continue;
450
451 Int_t iPid = 0;
452 Int_t gPdgCode = 0;
eda5b3c1 453 if ( particle->PdgCode() == 211 ) { iPid = 1; gPdgCode = 211;}
454 else if ( particle->PdgCode() == 321 ) { iPid = 1; gPdgCode = 321;}
455 else if ( particle->PdgCode() == 2212 ) { iPid = 1; gPdgCode = 2212;}
0a28d543 456 else {iPid = 0; gPdgCode = 0;}
457
458 // -- Check if accepted in rapidity window -- for identified particles
459 Double_t yMC;
460 if (iPid != 0 && !fHelper->IsParticleAcceptedRapidity(particle, yMC, iPid))
461 continue;
462
463 // -- Check if accepted in eta window -- for charged particles
464 if (iPid == 0 && TMath::Abs(particle->Eta()) > etaRange[1])
465 continue;
466
467 // -- Check if probeParticle / anti-probeParticle
468 // > skip check if PID is not required
469 if (iPid == 0 && TMath::Abs(particle->PdgCode()) != gPdgCode)
470 continue;
471
472 // -- Get sign of particle
473 Float_t signMC = (particle->PdgCode() < 0) ? -1. : 1.;
474
475 // -- Get if particle is findable --- not availible for AODs yet
476 Float_t findable = (fESD) ? Float_t(fHelper->IsParticleFindable(idxMC)) : 1.;
477
478 // -- Get recStatus and pidStatus
479 Float_t recStatus = 0.;
480 Float_t recPid = 0.;
481
482 // -- Get Reconstructed values
483 Float_t etaRec = 0.;
484 Float_t phiRec = 0.;
485 Float_t ptRec = 0.;
486 Double_t yRec = 0.;
487 Float_t signRec = 0.;
488
489 // -- Loop over all labels
490 for (Int_t idxRec=0; idxRec < fNTracks; ++idxRec) {
491 if (idxMC == fLabelsRec[0][iPid][idxRec]) {
492 recStatus = 1.;
493
494 if (idxMC == fLabelsRec[1][iPid][idxRec])
495 recPid = 1.;
496
497 AliVTrack *track = NULL;
498 if(fESD)
499 track = fESD->GetTrack(idxRec);
500 else if(fAOD)
501 track = fAOD->GetTrack(idxRec);
502
503 if (track) {
504 // if no track present (which should not happen)
505 // -> pt = 0. , which is not in the looked at range
506
507 // -- Get Reconstructed values
508 etaRec = track->Eta();
509 phiRec = track->Phi();
510 ptRec = track->Pt();
511 signRec = track->Charge();
512 fHelper->IsTrackAcceptedRapidity(track, yRec, iPid); // yRec = y for identified particles | yRec = eta for charged particles
513 }
514 break;
515 }
516 } // for (Int_t idxRec=0; idxRec < fNTracks; ++idxRec) {
517
518 Double_t deltaPhi = particle->Phi()-phiRec;
519 if (TMath::Abs(deltaPhi) > TMath::TwoPi()) {
520 if (deltaPhi < 0)
521 deltaPhi += TMath::TwoPi();
522 else
523 deltaPhi -= TMath::TwoPi();
524 }
525
526 if(iPid != 0) {
527 Double_t hnEff[20] = {fCentralityBin,
528 particle->Eta(),
529 particle->Y(),
530 particle->Phi(),
531 particle->Pt(),
532 signMC,
533 findable,
534 recStatus,
535 recPid,
536 etaRec,
537 yRec,
538 phiRec,
539 ptRec,
540 signRec,
541 particle->Eta()-etaRec,
542 particle->Y()-yRec,
543 deltaPhi,
544 particle->Pt()-ptRec,
545 signMC-signRec,
546 0};
547 fHnEff->Fill(hnEff);
548 }
549
550 Double_t hnEff[20] = {fCentralityBin,
551 particle->Eta(),
552 particle->Y(),
553 particle->Phi(),
554 particle->Pt(),
555 signMC,
556 findable,
557 recStatus,
558 recPid,
559 etaRec,
560 yRec,
561 phiRec,
562 ptRec,
563 signRec,
564 particle->Eta()-etaRec,
565 particle->Y()-yRec,
566 deltaPhi,
567 particle->Pt()-ptRec,
568 signMC-signRec,
569 iPid};
570 fHnEff->Fill(hnEff);
571
572
573 } // for (Int_t idxMC = 0; idxMC < nPart; ++idxMC) {
574
575 return;
576}