]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/EBYE/PIDFluctuation/task/AliEbyEPidRatioEffContExtra.cxx
Update PR task:sjena
[u/mrichter/AliRoot.git] / PWGCF / EBYE / PIDFluctuation / task / AliEbyEPidRatioEffContExtra.cxx
CommitLineData
5f071dcf 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 "AliEbyEPidRatioEffContExtra.h"
37
38using namespace std;
39
40ClassImp(AliEbyEPidRatioEffContExtra)
41
42//________________________________________________________________________
43AliEbyEPidRatioEffContExtra::AliEbyEPidRatioEffContExtra() :
44 AliEbyEPidRatioBase("EffCont", "EffCont"),
45 fLabelsRec(NULL),
46
47 fHnNchEMc(NULL),
48 fHnNchERec(NULL),
49 fHnNpiEMc(NULL),
50 fHnNpiERec(NULL),
51 fHnNkaEMc(NULL),
52 fHnNkaERec(NULL),
53 fHnNprEMc(NULL),
54 fHnNprERec(NULL),
55
56 fHnNchCMc(NULL),
57 fHnNchCRec(NULL),
58 fHnNpiCMc(NULL),
59 fHnNpiCRec(NULL),
60 fHnNkaCMc(NULL),
61 fHnNkaCRec(NULL),
62 fHnNprCMc(NULL),
63 fHnNprCRec(NULL) {
64 AliLog::SetClassDebugLevel("AliEbyEPidRatioEffContExtra",10);
65}
66
67//________________________________________________________________________
68AliEbyEPidRatioEffContExtra::~AliEbyEPidRatioEffContExtra() {
69 // Destructor
70
71
72 for (Int_t ii = 0; ii < 2; ++ii) {
73 for (Int_t kk = 0; kk < 4; ++kk)
74 if (fLabelsRec[ii][kk]) delete[] fLabelsRec[ii][kk];
75 if (fLabelsRec[ii]) delete[] fLabelsRec[ii];
76 }
77 if (fLabelsRec) delete[] fLabelsRec;
78
79
80 /*
81 if (fLabelsRec) {
82 if (fLabelsRec[0])
83 delete[] (fLabelsRec[0]);
84 if (fLabelsRec[1])
85 delete[] (fLabelsRec[1]);
86 if (fLabelsRec)
87 delete[] fLabelsRec;
88 }*/
89}
90
91
92//________________________________________________________________________
93void AliEbyEPidRatioEffContExtra::Process() {
94 // -- Process event
95 // -- Setup (clean, create and fill) MC labels
96 for(Int_t i = 0; i < 4; i++) {
97 FillMCLabels(i);
98 // -- Fill MC histograms for efficiency studies
99 FillMCEffHist(i);
100 }
101 return;
102}
103
104//________________________________________________________________________
105void AliEbyEPidRatioEffContExtra::Init() {
106
107
108
109 /*
110 fLabelsRec = new Int_t*[2];
111 for (Int_t ii = 0; ii < 2 ; ++ii)
112 fLabelsRec[ii] = NULL;
113 */
114
115 fLabelsRec = new Int_t**[2];
116 for (Int_t ii = 0 ; ii < 2; ++ii) {
117 fLabelsRec[ii] = new Int_t*[4];
118 for (Int_t kk = 0 ; kk < 4; ++kk)
119 fLabelsRec[ii][kk] = NULL;
120 }
121
122
123 Printf(" >>>> AliEbyEPidRatioEffContExtra - inside");
124}
125
126//________________________________________________________________________
127void AliEbyEPidRatioEffContExtra::CreateHistograms() {
128 // -- Create histograms
129
130 // ------------------------------------------------------------------
131 // -- Create THnSparse - Eff
132 // ------------------------------------------------------------------
133
134 Int_t binHnEffPIDMC[8] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent,
135 AliEbyEPidRatioHelper::fgkfHistNBinsSign,
136 2, 2, 2,
137 AliEbyEPidRatioHelper::fgkfHistNBinsRap,
138 AliEbyEPidRatioHelper::fgkfHistNBinsPhi,
139 AliEbyEPidRatioHelper::fgkfHistNBinsPt};
140
141 Double_t minHnEffPIDMC[8] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0],
142 AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
143 -0.5, -0.5, -0.5,
144 AliEbyEPidRatioHelper::fgkfHistRangeRap[0],
145 AliEbyEPidRatioHelper::fgkfHistRangePhi[0],
146 AliEbyEPidRatioHelper::fgkfHistRangePt[0]};
147
148 Double_t maxHnEffPIDMC[8] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1],
149 AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
150 1.5, 1.5, 1.5,
151 AliEbyEPidRatioHelper::fgkfHistRangeRap[1],
152 AliEbyEPidRatioHelper::fgkfHistRangePhi[1],
153 AliEbyEPidRatioHelper::fgkfHistRangePt[1]};
154
155
156
157 TString titilemc = "cent:signMC:findable:recStatus:pidStatus:yMC:phiMC:ptMC";
158
159 TString tiltlelaxmc[8] = {"Centrality",
160 "sign",
161 "findable",
162 "recStatus",
163 "recPid",
164 "#it{y}_{MC}",
165 "#varphi_{MC} (rad)",
166 "#it{p}_{T,MC} (GeV/#it{c})"
167 };
168
169
170 //eff
171 fHnNpiEMc = new THnSparseF("hmNpiEffMc",titilemc.Data(),8,binHnEffPIDMC,minHnEffPIDMC, maxHnEffPIDMC);
172 fHnNkaEMc = new THnSparseF("hmNkaEffMc",titilemc.Data(),8,binHnEffPIDMC,minHnEffPIDMC, maxHnEffPIDMC);
173 fHnNprEMc = new THnSparseF("hmNprEffMc",titilemc.Data(),8,binHnEffPIDMC,minHnEffPIDMC, maxHnEffPIDMC);
174 fHnNchEMc = new THnSparseF("hmNchEffMc",titilemc.Data(),8,binHnEffPIDMC,minHnEffPIDMC, maxHnEffPIDMC);
175
176 for (Int_t i = 0; i < 8; i++) {
177 fHnNchEMc->GetAxis(i)->SetTitle(tiltlelaxmc[i].Data());
178 fHnNpiEMc->GetAxis(i)->SetTitle(tiltlelaxmc[i].Data());
179 fHnNkaEMc->GetAxis(i)->SetTitle(tiltlelaxmc[i].Data());
180 fHnNprEMc->GetAxis(i)->SetTitle(tiltlelaxmc[i].Data());
181 }
182
183
184
185
186 Int_t binHnEffPID[5] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent,
187 AliEbyEPidRatioHelper::fgkfHistNBinsSign,
188 AliEbyEPidRatioHelper::fgkfHistNBinsRap,
189 AliEbyEPidRatioHelper::fgkfHistNBinsPhi,
190 AliEbyEPidRatioHelper::fgkfHistNBinsPt};
191
192 Double_t minHnEffPID[5] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0],
193 AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
194 AliEbyEPidRatioHelper::fgkfHistRangeRap[0],
195 AliEbyEPidRatioHelper::fgkfHistRangePhi[0],
196 AliEbyEPidRatioHelper::fgkfHistRangePt[0]};
197
198
199 Double_t maxHnEffPID[5] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1],
200 AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
201 AliEbyEPidRatioHelper::fgkfHistRangeRap[1],
202 AliEbyEPidRatioHelper::fgkfHistRangePhi[1],
203 AliEbyEPidRatioHelper::fgkfHistRangePt[1]};
204
205
206 TString titilerec = "cent:signRec:yRec:phiRec:ptRec";
207 TString tiltlelaxrec[5] = {"Centrality",
208 "sign",
209 "#it{y}_{Rec}",
210 "#varphi_{Rec} (rad)",
211 "#it{p}_{T,Rec} (GeV/#it{c})"};
212
213
214 fHnNpiERec = new THnSparseF("hmNpiEffRec",titilerec.Data(),5,binHnEffPID, minHnEffPID, maxHnEffPID);
215 fHnNkaERec = new THnSparseF("hmNkaEffRec",titilerec.Data(),5,binHnEffPID, minHnEffPID, maxHnEffPID);
216 fHnNprERec = new THnSparseF("hmNprEffRec",titilerec.Data(),5,binHnEffPID, minHnEffPID, maxHnEffPID);
217 fHnNchERec = new THnSparseF("hmNchEffRec",titilerec.Data(),5,binHnEffPID,minHnEffPID, maxHnEffPID);
218
219
220
221 for (Int_t i = 0; i < 5; i++) {
222 fHnNchERec->GetAxis(i)->SetTitle(tiltlelaxrec[i].Data());
223 fHnNpiERec->GetAxis(i)->SetTitle(tiltlelaxrec[i].Data());
224 fHnNkaERec->GetAxis(i)->SetTitle(tiltlelaxrec[i].Data());
225 fHnNprERec->GetAxis(i)->SetTitle(tiltlelaxrec[i].Data());
226 }
227
228 //----- cont
229
230 //----
231 Int_t binHnCont[6] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent,
232 AliEbyEPidRatioHelper::fgkfHistNBinsSign,
233 8,
234 AliEbyEPidRatioHelper::fgkfHistNBinsRap,
235 AliEbyEPidRatioHelper::fgkfHistNBinsPhi,
236 AliEbyEPidRatioHelper::fgkfHistNBinsPt};
237
238 Double_t minHnCont[6] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0],
239 AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
240 0.5,
241 AliEbyEPidRatioHelper::fgkfHistRangeRap[0],
242 AliEbyEPidRatioHelper::fgkfHistRangePhi[0],
243 AliEbyEPidRatioHelper::fgkfHistRangePt[0]};
244
245
246
247 Double_t maxHnCont[6] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1],
248 AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
249 8.5,
250 AliEbyEPidRatioHelper::fgkfHistRangeRap[1],
251 AliEbyEPidRatioHelper::fgkfHistRangePhi[1],
252 AliEbyEPidRatioHelper::fgkfHistRangePt[1]};
253
254
255
256
257 TString titilecont = "cent:signMC:contStatus:yMC:phiMC:ptMC";
258 TString tiltlelaxcont[6]
259 = {"Centrality","sign","contPart","#it{y}_{MC}","#varphi_{MC} (rad)","#it{p}_{T,MC} (GeV/#it{c})"};
260
261 fHnNpiCMc = new THnSparseF("hmNpiContMc",titilemc.Data(),6,binHnCont,minHnCont, maxHnCont);
262 fHnNkaCMc = new THnSparseF("hmNkaContMc",titilemc.Data(),6,binHnCont,minHnCont, maxHnCont);
263 fHnNprCMc = new THnSparseF("hmNprContMc",titilemc.Data(),6,binHnCont,minHnCont, maxHnCont);
264 fHnNchCMc = new THnSparseF("hmNchContMc",titilemc.Data(),6,binHnCont,minHnCont, maxHnCont);
265
266 for (Int_t i = 0; i < 6; i++) {
267 fHnNchCMc->GetAxis(i)->SetTitle(tiltlelaxcont[i].Data());
268 fHnNpiCMc->GetAxis(i)->SetTitle(tiltlelaxcont[i].Data());
269 fHnNkaCMc->GetAxis(i)->SetTitle(tiltlelaxcont[i].Data());
270 fHnNprCMc->GetAxis(i)->SetTitle(tiltlelaxcont[i].Data());
271 }
272
273
274
275 fHnNpiCRec = new THnSparseF("hmNpiContRec",titilerec.Data(),5,binHnEffPID,minHnEffPID, maxHnEffPID);
276 fHnNkaCRec = new THnSparseF("hmNkaContRec",titilerec.Data(),5,binHnEffPID,minHnEffPID, maxHnEffPID);
277 fHnNprCRec = new THnSparseF("hmNprContRec",titilerec.Data(),5,binHnEffPID,minHnEffPID, maxHnEffPID);
278 fHnNchCRec = new THnSparseF("hmNchContRec",titilerec.Data(),5,binHnEffPID,minHnEffPID, maxHnEffPID);
279
280 for (Int_t i = 0; i < 5; i++) {
281 fHnNchCRec->GetAxis(i)->SetTitle(tiltlelaxrec[i].Data());
282 fHnNpiCRec->GetAxis(i)->SetTitle(tiltlelaxrec[i].Data());
283 fHnNkaCRec->GetAxis(i)->SetTitle(tiltlelaxrec[i].Data());
284 fHnNprCRec->GetAxis(i)->SetTitle(tiltlelaxrec[i].Data());
285 }
286
287
288 fHelper->BinLogAxis(fHnNchERec,4);
289 fHelper->BinLogAxis(fHnNpiERec,4);
290 fHelper->BinLogAxis(fHnNkaERec,4);
291 fHelper->BinLogAxis(fHnNprERec,4);
292
293 fHelper->BinLogAxis(fHnNchEMc,7);
294 fHelper->BinLogAxis(fHnNpiEMc,7);
295 fHelper->BinLogAxis(fHnNkaEMc,7);
296 fHelper->BinLogAxis(fHnNprEMc,7);
297
298 fHelper->BinLogAxis(fHnNchCMc,5);
299 fHelper->BinLogAxis(fHnNpiCMc,5);
300 fHelper->BinLogAxis(fHnNkaCMc,5);
301 fHelper->BinLogAxis(fHnNprCMc,5);
302
303 fHelper->BinLogAxis(fHnNchCRec,4);
304 fHelper->BinLogAxis(fHnNpiCRec,4);
305 fHelper->BinLogAxis(fHnNkaCRec,4);
306 fHelper->BinLogAxis(fHnNprCRec,4);
307
308
309 return;
310}
311
312//________________________________________________________________________
313Int_t AliEbyEPidRatioEffContExtra::Setup() {
314 // -- Setup eventwise
315
316 // -- Create label arrays
317 /* fLabelsRec[0] = new Int_t[fNTracks];
318 if(!fLabelsRec[0]) {
319 AliError("Cannot create fLabelsRec[0]");
320 return -1;
321 }
322
323 fLabelsRec[1] = new Int_t[fNTracks];
324 if(!fLabelsRec[1]) {
325 AliError("Cannot create fLabelsRec[1] for PID");
326 return -1;
327 }
328
329 for(Int_t ii = 0; ii < fNTracks; ++ii) {
330 fLabelsRec[0][ii] = 0;
331 fLabelsRec[1][ii] = 0;
332 }
333
334 */
335
336 // -- Create label arrays
337 for(Int_t i = 0; i < 4; i++) {
338 fLabelsRec[0][i] = new Int_t[fNTracks];
339 if(!fLabelsRec[0][i]) {
340 AliError("Cannot create fLabelsRec[0]");
341 return -1;
342 }
343
344 fLabelsRec[1][i] = new Int_t[fNTracks];
345 if(!fLabelsRec[1][i]) {
346 AliError("Cannot create fLabelsRec[1] for PID");
347 return -1;
348 }
349
350 for(Int_t ii = 0; ii < fNTracks; ++ii) {
351 fLabelsRec[0][i][ii] = 0;
352 fLabelsRec[1][i][ii] = 0;
353 }
354 }
355
356
357
358
359 return 0;
360}
361
362//________________________________________________________________________
363void AliEbyEPidRatioEffContExtra::Reset() {
364 // -- Reset eventwise
365
366 for(Int_t i = 0; i < 4; i++) {
367 for (Int_t ii = 0; ii < 2 ; ++ii) {
368 if (fLabelsRec[ii][i])
369 delete[] fLabelsRec[ii][i];
370 fLabelsRec[ii][i] = NULL;
371 }
372 }
373 /*
374
375 for (Int_t ii = 0; ii < 2 ; ++ii) {
376 if (fLabelsRec[ii])
377 delete[] fLabelsRec[ii];
378 fLabelsRec[ii] = NULL;
379 }*/
380}
381
382/*
383 * ---------------------------------------------------------------------------------
384 * Private Methods
385 * ---------------------------------------------------------------------------------
386 */
387
388//________________________________________________________________________
389void AliEbyEPidRatioEffContExtra::FillMCLabels(Int_t ipid) {
390 // Fill MC labels
391 // Loop over ESD tracks and fill arrays with MC lables
392 // fLabelsRec[0] : all Tracks
393 // fLabelsRec[1] : all Tracks accepted by PID of TPC
394 // Check every accepted track if correctly identified
395 // otherwise check for contamination
396
397 // -- Get ranges for AOD particles
398 Float_t etaRange[2];
399 fESDTrackCuts->GetEtaRange(etaRange[0],etaRange[1]);
400
401 Float_t ptRange[2];
402 fESDTrackCuts->GetPtRange(ptRange[0],ptRange[1]);
403
404 // -- Track Loop
405 for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) {
406 AliVTrack *track = (fESD) ? static_cast<AliVTrack*>(fESD->GetTrack(idxTrack)) : static_cast<AliVTrack*>(fAOD->GetTrack(idxTrack));
407
408 // -- Check if track is accepted for basic parameters
409 if (!fHelper->IsTrackAcceptedBasicCharged(track))
410 continue;
411
412 // -- Check if accepted - ESD
413 if (fESD && !fESDTrackCuts->AcceptTrack(dynamic_cast<AliESDtrack*>(track)))
414 continue;
415
416 // -- Check if accepted - AOD
417 if (fAOD){
418 AliAODTrack * trackAOD = dynamic_cast<AliAODTrack*>(track);
419
420 if (!trackAOD) {
421 AliError("Pointer to dynamic_cast<AliAODTrack*>(track) = ZERO");
422 continue;
423 }
424 if (!trackAOD->TestFilterBit(fAODtrackCutBit))
425 continue;
426
427 // -- Check if in pT and eta range (is done in ESDTrackCuts for ESDs)
428 if(!(track->Pt() > ptRange[0] && track->Pt() <= ptRange[1] && TMath::Abs(track->Eta()) <= etaRange[1]))
429 continue;
430 }
431
432 // -- Check if accepted in rapidity window -- for identified particles
433 // for charged particles -- eta check is done in the trackcuts
434 Double_t yP;
435 if (fHelper->GetUsePID(ipid) && !fHelper->IsTrackAcceptedRapidity(track, yP, ipid))
436 continue;
437
438
439 // -- Check if accepted with thighter DCA cuts
440 // -- returns kTRUE for AODs for now : MW
441 if (!fHelper->IsTrackAcceptedDCA(track))
442 continue;
443
444 Int_t label = TMath::Abs(track->GetLabel());
445
446 // continue;
447 // -- Fill Label of all reconstructed
448 fLabelsRec[0][ipid][idxTrack] = label;
449
450 // -- Check if accepted by PID from TPC or TPC+TOF
451 Double_t pid[3];
452 if (!fHelper->IsTrackAcceptedPID(track, pid, fHelper->GetParticleSpecies(ipid))) // check it
453 continue;
454
455
456
457 // -- Fill Label of all reconstructed && recPid_TPC+TOF
458 fLabelsRec[1][ipid][idxTrack] = label;
459
460 // -- Check for contamination and fill contamination THnSparse
461 CheckContTrack(track, ipid);
462
463 } // for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) {
464
465 return;
466}
467
468//________________________________________________________________________
469void AliEbyEPidRatioEffContExtra::CheckContTrack(AliVTrack *track, Int_t ipid) {
470 // Check if particle is contamination or correctly identified for ESDs and AODs
471 // Check for missidentified primaries and secondaries
472 // Fill contamination THnSparse
473
474 Int_t label = TMath::Abs(track->GetLabel());
475 Float_t signRec = track->Charge();
476
477
478 AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(label) : static_cast<AliVParticle*>(fArrayMC->At(label));
479 if (!particle)
480 return;
481
482 Bool_t isPhysicalPrimary = (fESD) ? fStack->IsPhysicalPrimary(label): (static_cast<AliAODMCParticle*>(particle))->IsPhysicalPrimary();
483
484 // -- Check if correctly identified
485 // > return if correctly identified -> all ok, no action neededin this method
486 // > if PID required check -> for the correct (signed pdgcode) particle
487 // > no PID just check for primary
488 if (fHelper->GetUsePID(ipid)) {
489 if (particle->PdgCode() == (signRec*fHelper->GetPdg(ipid)))
490 if (isPhysicalPrimary)
491 return;
492 }
493 else {
494 if (isPhysicalPrimary)
495 return;
496 }
497
498 // -- Check if secondaries from material or weak decay
499 Bool_t isSecondaryFromWeakDecay = (fESD) ? fStack->IsSecondaryFromWeakDecay(label) : (static_cast<AliAODMCParticle*>(particle))->IsSecondaryFromWeakDecay();
500 Bool_t isSecondaryFromMaterial = (fESD) ? fStack->IsSecondaryFromMaterial(label) : (static_cast<AliAODMCParticle*>(particle))->IsSecondaryFromMaterial();
501
502 // -- Get PDG Charge of contaminating particle
503 Float_t signMC = 0.;
504 if (particle->Charge() == 0.) signMC = 0.;
505 else if (particle->Charge() < 0.) signMC = -1.;
506 else if (particle->Charge() > 0.) signMC = 1.;
507
508 // -- Get contaminating particle
509 Double_t contPart = 0;
510 if (isSecondaryFromWeakDecay) contPart = 7; // probeParticle from WeakDecay
511 else if (isSecondaryFromMaterial) contPart = 8; // probeParticle from Material
512 else {
513 if (TMath::Abs(particle->PdgCode()) == 211) contPart = 1; // pion
514 else if (TMath::Abs(particle->PdgCode()) == 321) contPart = 2; // kaon
515 else if (TMath::Abs(particle->PdgCode()) == 2212) contPart = 3; // proton
516 else if (TMath::Abs(particle->PdgCode()) == 11) contPart = 4; // electron
517 else if (TMath::Abs(particle->PdgCode()) == 13) contPart = 5; // muon
518 else contPart = 6; // other
519 }
520
521 // -- Get Reconstructed y
522 // yRec = y for identified particles | yRec = eta for charged particles
523 Double_t yRec = 0.;
524 fHelper->IsTrackAcceptedRapidity(track, yRec, ipid);
525
526 Double_t deltaPhi = particle->Phi()-track->Phi();
527 if (TMath::Abs(deltaPhi) > TMath::TwoPi()) {
528 if (deltaPhi < 0)
529 deltaPhi += TMath::TwoPi();
530 else
531 deltaPhi -= TMath::TwoPi();
532 }
533
534
535 Double_t yetapid = (ipid == 0 ) ? particle->Eta() : particle->Y();
536 Double_t yeta = (ipid == 0 ) ? track->Eta() : yRec;
537
538 Double_t hnContMc[6] = {fCentralityBin,signMC,contPart,yetapid,particle->Phi(),particle->Pt()};
539 Double_t hnContRec[5] = {fCentralityBin,signRec, yeta,track->Phi(),track->Pt()};
540
541 if (ipid == 0) { fHnNchCRec->Fill(hnContRec); fHnNchCMc->Fill(hnContMc); }
542 if (ipid == 1) { fHnNpiCRec->Fill(hnContRec); fHnNpiCMc->Fill(hnContMc); }
543 if (ipid == 2) { fHnNkaCRec->Fill(hnContRec); fHnNkaCMc->Fill(hnContMc); }
544 if (ipid == 3) { fHnNprCRec->Fill(hnContRec); fHnNprCMc->Fill(hnContMc); }
545
546
547}
548
549//________________________________________________________________________
550void AliEbyEPidRatioEffContExtra::FillMCEffHist(Int_t ipid) {
551 // Fill efficiency THnSparse for ESDs
552
553 Float_t etaRange[2];
554 fESDTrackCuts->GetEtaRange(etaRange[0],etaRange[1]);
555
556 Int_t nPart = (fESD) ? fStack->GetNprimary() : fArrayMC->GetEntriesFast();
557
558 for (Int_t idxMC = 0; idxMC < nPart; ++idxMC) {
559 AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(idxMC) : static_cast<AliVParticle*>(fArrayMC->At(idxMC));
560
561 // -- Check basic MC properties -> charged physical primary
562 if (!fHelper->IsParticleAcceptedBasicCharged(particle, idxMC))
563 continue;
564
565 // -- Check if accepted in rapidity window -- for identified particles
566 Double_t yMC;
567 if (fHelper->GetUsePID(ipid) && !fHelper->IsParticleAcceptedRapidity(particle, yMC, ipid))
568 continue;
569
570 // -- Check if accepted in eta window -- for charged particles
571 if (!fHelper->GetUsePID(ipid) && TMath::Abs(particle->Eta()) > etaRange[1])
572 continue;
573
574 // -- Check if probeParticle / anti-probeParticle
575 // > skip check if PID is not required
576 if (fHelper->GetUsePID(ipid) && TMath::Abs(particle->PdgCode()) != fHelper->GetPdg(ipid))
577 continue;
578
579 // -- Get sign of particle
580 Float_t signMC = (particle->PdgCode() < 0) ? -1. : 1.;
581
582 // -- Get if particle is findable --- not availible for AODs yet
583 Float_t findable = (fESD) ? Float_t(fHelper->IsParticleFindable(idxMC)) : 1.;
584
585 // -- Get recStatus and pidStatus
586 Float_t recStatus = 0.;
587 Float_t recPid = 0.;
588
589 // -- Get Reconstructed values
590 Float_t etaRec = 0.;
591 Float_t phiRec = 0.;
592 Float_t ptRec = 0.;
593 Double_t yRec = 0.;
594 Float_t signRec = 0.;
595
596 // -- Loop over all labels
597 for (Int_t idxRec=0; idxRec < fNTracks; ++idxRec) {
598 if (idxMC == fLabelsRec[ipid][0][idxRec]) {
599 recStatus = 1.;
600
601 if (idxMC == fLabelsRec[ipid][1][idxRec])
602 recPid = 1.;
603
604 AliVTrack *track = NULL;
605 if(fESD)
606 track = fESD->GetTrack(idxRec);
607 else if(fAOD)
608 track = fAOD->GetTrack(idxRec);
609
610 if (track) {
611 // if no track present (which should not happen)
612 // -> pt = 0. , which is not in the looked at range
613
614 // -- Get Reconstructed values
615 etaRec = track->Eta();
616 phiRec = track->Phi();
617 ptRec = track->Pt();
618 signRec = track->Charge();
619 fHelper->IsTrackAcceptedRapidity(track, yRec, ipid); // yRec = y for identified particles | yRec = eta for charged particles
620 }
621 break;
622 }
623 } // for (Int_t idxRec=0; idxRec < fNTracks; ++idxRec) {
624 /*
625 Double_t deltaPhi = particle->Phi()-phiRec;
626 if (TMath::Abs(deltaPhi) > TMath::TwoPi()) {
627 if (deltaPhi < 0)
628 deltaPhi += TMath::TwoPi();
629 else
630 deltaPhi -= TMath::TwoPi();
631 }
632 */
633
634 Double_t yetapid = (ipid == 0 ) ? particle->Eta() : particle->Y();
635 Double_t yeta = (ipid == 0 ) ? etaRec : yRec;
636
637 // Printf("%2d %10.5f %10.5f %10.5f %10.5f %10.5f %10.5f", ipid, yetapid, yeta, particle->Eta(), particle->Y(), etaRec, yRec);
638
639 Double_t hneffMc[8] = {fCentralityBin,signMC,findable, recStatus, recPid,yetapid,particle->Phi(),particle->Pt()};
640 Double_t hneffRec[5] = {fCentralityBin,signRec, yeta,phiRec,ptRec};
641
642 if (ipid == 0) { fHnNchERec->Fill(hneffRec); fHnNchEMc->Fill(hneffMc); }
643 if (ipid == 1) { fHnNpiERec->Fill(hneffRec); fHnNpiEMc->Fill(hneffMc); }
644 if (ipid == 2) { fHnNkaERec->Fill(hneffRec); fHnNkaEMc->Fill(hneffMc); }
645 if (ipid == 3) { fHnNprERec->Fill(hneffRec); fHnNprEMc->Fill(hneffMc); }
646
647
648 } // for (Int_t idxMC = 0; idxMC < nPart; ++idxMC) {
649
650 return;
651}