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