]>
Commit | Line | Data |
---|---|---|
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 | ||
38 | using namespace std; | |
39 | ||
40 | ClassImp(AliEbyEPidRatioEffContExtra) | |
41 | ||
42 | //________________________________________________________________________ | |
43 | AliEbyEPidRatioEffContExtra::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 | //________________________________________________________________________ | |
68 | AliEbyEPidRatioEffContExtra::~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 | //________________________________________________________________________ | |
83 | void 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 | //________________________________________________________________________ | |
92 | void 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 | //________________________________________________________________________ | |
103 | void 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 | //________________________________________________________________________ | |
283 | Int_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 | //________________________________________________________________________ | |
307 | void 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 | //________________________________________________________________________ |
320 | void 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 | //________________________________________________________________________ | |
398 | void 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 | //________________________________________________________________________ | |
479 | void 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 | } |