]>
Commit | Line | Data |
---|---|---|
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 | ||
38 | using namespace std; | |
39 | ||
40 | ||
41 | ClassImp(AliEbyEPidRatioEffCont) | |
42 | ||
43 | //________________________________________________________________________ | |
44 | AliEbyEPidRatioEffCont::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 | //________________________________________________________________________ | |
55 | AliEbyEPidRatioEffCont::~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 | //________________________________________________________________________ | |
69 | void 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 | //________________________________________________________________________ | |
82 | void 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 | //________________________________________________________________________ | |
94 | void 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 | //________________________________________________________________________ | |
246 | Int_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 | //________________________________________________________________________ | |
272 | void 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 | //________________________________________________________________________ | |
284 | void 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 | //________________________________________________________________________ | |
357 | void 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 | //________________________________________________________________________ | |
436 | void 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 | } |