]>
Commit | Line | Data |
---|---|---|
cb68eb1d | 1 | //-*- Mode: C++ -*- |
2 | ||
3 | #include "TMath.h" | |
4 | #include "TAxis.h" | |
5 | ||
6 | #include "AliESDEvent.h" | |
cb68eb1d | 7 | #include "AliStack.h" |
8 | #include "AliMCEvent.h" | |
cb68eb1d | 9 | #include "AliESDtrackCuts.h" |
9be43c8e | 10 | #include "AliAODEvent.h" |
9be43c8e | 11 | #include "AliAODMCParticle.h" |
cb68eb1d | 12 | |
13 | #include "AliAnalysisNetParticleEffCont.h" | |
14 | ||
15 | using namespace std; | |
16 | ||
4918c45f | 17 | /** |
a2ddc3d0 | 18 | * Class for NetParticle Distributions |
4918c45f | 19 | * -- Efficiency and contaminations for netParticle distributions |
20 | * Authors: Jochen Thaeder <jochen@thaeder.de> | |
21 | * Michael Weber <m.weber@cern.ch> | |
22 | */ | |
cb68eb1d | 23 | |
24 | ClassImp(AliAnalysisNetParticleEffCont) | |
25 | ||
26 | /* | |
27 | * --------------------------------------------------------------------------------- | |
28 | * Constructor / Destructor | |
29 | * --------------------------------------------------------------------------------- | |
30 | */ | |
31 | ||
32 | //________________________________________________________________________ | |
33 | AliAnalysisNetParticleEffCont::AliAnalysisNetParticleEffCont() : | |
a2ddc3d0 | 34 | AliAnalysisNetParticleBase("EffCont", "EffCont"), |
cb68eb1d | 35 | fLabelsRec(NULL), |
cb68eb1d | 36 | fHnEff(NULL), |
37 | fHnCont(NULL) { | |
38 | // Constructor | |
39 | ||
40 | AliLog::SetClassDebugLevel("AliAnalysisNetParticleEffCont",10); | |
41 | } | |
42 | ||
43 | //________________________________________________________________________ | |
44 | AliAnalysisNetParticleEffCont::~AliAnalysisNetParticleEffCont() { | |
45 | // Destructor | |
46 | ||
8c6128b7 | 47 | if (fLabelsRec) { |
36ef73d2 | 48 | if (fLabelsRec[0]) |
49 | delete[] (fLabelsRec[0]); | |
36ef73d2 | 50 | if (fLabelsRec[1]) |
51 | delete[] (fLabelsRec[1]); | |
8c6128b7 | 52 | if (fLabelsRec) |
53 | delete[] fLabelsRec; | |
36ef73d2 | 54 | } |
cb68eb1d | 55 | } |
56 | ||
57 | /* | |
58 | * --------------------------------------------------------------------------------- | |
59 | * Public Methods | |
60 | * --------------------------------------------------------------------------------- | |
61 | */ | |
62 | ||
cb68eb1d | 63 | //________________________________________________________________________ |
64 | void AliAnalysisNetParticleEffCont::Process() { | |
65 | // -- Process event | |
66 | ||
67 | // -- Setup (clean, create and fill) MC labels | |
478c95cf | 68 | FillMCLabels(); |
69 | ||
cb68eb1d | 70 | // -- Fill MC histograms for efficiency studies |
fbb73c19 | 71 | FillMCEffHist(); |
cb68eb1d | 72 | |
73 | return; | |
74 | } | |
75 | ||
76 | /* | |
77 | * --------------------------------------------------------------------------------- | |
a2ddc3d0 | 78 | * Methods - private |
cb68eb1d | 79 | * --------------------------------------------------------------------------------- |
80 | */ | |
81 | ||
a2ddc3d0 | 82 | //________________________________________________________________________ |
83 | void AliAnalysisNetParticleEffCont::Init() { | |
84 | // -- Init eventwise | |
85 | ||
86 | // -- MC Labels for efficiency | |
87 | fLabelsRec = new Int_t*[2]; | |
88 | for (Int_t ii = 0; ii < 2 ; ++ii) | |
89 | fLabelsRec[ii] = NULL; | |
90 | } | |
91 | ||
cb68eb1d | 92 | //________________________________________________________________________ |
93 | void AliAnalysisNetParticleEffCont::CreateHistograms() { | |
94 | // -- Create histograms | |
95 | ||
cb68eb1d | 96 | // ------------------------------------------------------------------ |
a2ddc3d0 | 97 | // -- Create THnSparse - Eff |
cb68eb1d | 98 | // ------------------------------------------------------------------ |
99 | ||
a2ddc3d0 | 100 | Int_t binHnEff[19] = {AliAnalysisNetParticleHelper::fgkfHistNBinsCent, AliAnalysisNetParticleHelper::fgkfHistNBinsEta, // cent | etaMC |
101 | AliAnalysisNetParticleHelper::fgkfHistNBinsRap, AliAnalysisNetParticleHelper::fgkfHistNBinsPhi, // yMC | phiMC | |
102 | AliAnalysisNetParticleHelper::fgkfHistNBinsPt, AliAnalysisNetParticleHelper::fgkfHistNBinsSign, // ptMC | signMC | |
103 | 2, 2 , 2 , // findable | recStatus | pidStatus | |
104 | AliAnalysisNetParticleHelper::fgkfHistNBinsEta, AliAnalysisNetParticleHelper::fgkfHistNBinsRap, // etaRec | yRec | |
105 | AliAnalysisNetParticleHelper::fgkfHistNBinsPhi, AliAnalysisNetParticleHelper::fgkfHistNBinsPt, // phiRec | ptRec | |
106 | AliAnalysisNetParticleHelper::fgkfHistNBinsSign, // signRec | |
107 | AliAnalysisNetParticleHelper::fgkfHistNBinsEta, AliAnalysisNetParticleHelper::fgkfHistNBinsRap, // deltaEta | deltaY | |
108 | 2*AliAnalysisNetParticleHelper::fgkfHistNBinsPhi+1, 2*AliAnalysisNetParticleHelper::fgkfHistNBinsPt+1, // deltaPhi | deltaPt | |
109 | AliAnalysisNetParticleHelper::fgkfHistNBinsSign+2}; // deltaSign | |
110 | ||
4918c45f | 111 | |
a2ddc3d0 | 112 | Double_t minHnEff[19] = {AliAnalysisNetParticleHelper::fgkfHistRangeCent[0], AliAnalysisNetParticleHelper::fgkfHistRangeEta[0], |
4918c45f | 113 | AliAnalysisNetParticleHelper::fgkfHistRangeRap[0], AliAnalysisNetParticleHelper::fgkfHistRangePhi[0], |
114 | AliAnalysisNetParticleHelper::fgkfHistRangePt[0], AliAnalysisNetParticleHelper::fgkfHistRangeSign[0], | |
115 | -0.5, -0.5, -0.5, | |
116 | AliAnalysisNetParticleHelper::fgkfHistRangeEta[0], AliAnalysisNetParticleHelper::fgkfHistRangeRap[0], | |
a2ddc3d0 | 117 | AliAnalysisNetParticleHelper::fgkfHistRangePhi[0], AliAnalysisNetParticleHelper::fgkfHistRangePt[0], |
118 | AliAnalysisNetParticleHelper::fgkfHistRangeSign[0], | |
119 | AliAnalysisNetParticleHelper::fgkfHistRangeEta[0], AliAnalysisNetParticleHelper::fgkfHistRangeRap[0], | |
120 | -1.*AliAnalysisNetParticleHelper::fgkfHistRangePhi[1], -1.*AliAnalysisNetParticleHelper::fgkfHistRangePt[1], | |
121 | AliAnalysisNetParticleHelper::fgkfHistRangeSign[0]-1.}; | |
4918c45f | 122 | |
a2ddc3d0 | 123 | Double_t maxHnEff[19] = {AliAnalysisNetParticleHelper::fgkfHistRangeCent[1], AliAnalysisNetParticleHelper::fgkfHistRangeEta[1], |
4918c45f | 124 | AliAnalysisNetParticleHelper::fgkfHistRangeRap[1], AliAnalysisNetParticleHelper::fgkfHistRangePhi[1], |
125 | AliAnalysisNetParticleHelper::fgkfHistRangePt[1], AliAnalysisNetParticleHelper::fgkfHistRangeSign[1], | |
126 | 1.5, 1.5, 1.5, | |
127 | AliAnalysisNetParticleHelper::fgkfHistRangeEta[1], AliAnalysisNetParticleHelper::fgkfHistRangeRap[1], | |
a2ddc3d0 | 128 | AliAnalysisNetParticleHelper::fgkfHistRangePhi[1], AliAnalysisNetParticleHelper::fgkfHistRangePt[1], |
129 | AliAnalysisNetParticleHelper::fgkfHistRangeSign[1], | |
130 | AliAnalysisNetParticleHelper::fgkfHistRangeEta[1], AliAnalysisNetParticleHelper::fgkfHistRangeRap[1], | |
131 | AliAnalysisNetParticleHelper::fgkfHistRangePhi[1], AliAnalysisNetParticleHelper::fgkfHistRangePt[1], | |
132 | AliAnalysisNetParticleHelper::fgkfHistRangeSign[1]+1.}; | |
4918c45f | 133 | |
a2ddc3d0 | 134 | fHnEff = new THnSparseF("hnEff", "cent:etaMC:yMC:phiMC:ptMC:signMC:findable:recStatus:pidStatus:etaRec:yRec:phiRec:ptRec:signRec:deltaEta:deltaY:deltaPhi:deltaPt:deltaSign", |
135 | 19, binHnEff, minHnEff, maxHnEff); | |
cb68eb1d | 136 | fHnEff->Sumw2(); |
137 | ||
138 | 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 | |
139 | fHnEff->GetAxis(1)->SetTitle("#eta_{MC}"); // eta [-0.9, 0.9] | |
140 | fHnEff->GetAxis(2)->SetTitle("#it{y}_{MC}"); // rapidity [-0.5, 0.5] | |
141 | fHnEff->GetAxis(3)->SetTitle("#varphi_{MC} (rad)"); // phi [ 0. , 2Pi] | |
a2ddc3d0 | 142 | fHnEff->GetAxis(4)->SetTitle("#it{p}_{T,MC} (GeV/#it{c})"); // pT [ 0.2, 2.3] |
cb68eb1d | 143 | |
144 | fHnEff->GetAxis(5)->SetTitle("sign"); // -1 | 0 | +1 | |
145 | fHnEff->GetAxis(6)->SetTitle("findable"); // 0 not findable | 1 findable | |
146 | fHnEff->GetAxis(7)->SetTitle("recStatus"); // 0 not reconstructed | 1 reconstructed | |
147 | fHnEff->GetAxis(8)->SetTitle("recPid"); // 0 not accepted | 1 accepted | |
148 | ||
149 | fHnEff->GetAxis(9)->SetTitle("#eta_{Rec}"); // eta [-0.9, 0.9] | |
4918c45f | 150 | fHnEff->GetAxis(10)->SetTitle("#it{y}_{Rec}"); // rapidity [-0.5, 0.5] |
151 | fHnEff->GetAxis(11)->SetTitle("#varphi_{Rec} (rad)"); // phi [ 0. , 2Pi] | |
a2ddc3d0 | 152 | fHnEff->GetAxis(12)->SetTitle("#it{p}_{T,Rec} (GeV/#it{c})"); // pt [ 0.2, 2.3] |
153 | fHnEff->GetAxis(13)->SetTitle("sign"); // -1 | 0 | +1 | |
154 | ||
155 | fHnEff->GetAxis(14)->SetTitle("#eta_{MC}-#eta_{Rec}"); // eta [-0.9, 0.9] | |
156 | fHnEff->GetAxis(15)->SetTitle("#it{y}_{MC}-#it{y}_{Rec}"); // rapidity [-0.5, 0.5] | |
157 | fHnEff->GetAxis(16)->SetTitle("#varphi_{MC}-#varphi_{Rec} (rad)"); // phi [ -2Pi , 2Pi] | |
158 | fHnEff->GetAxis(17)->SetTitle("#it{p}_{T,MC}-#it{p}_{T,Rec} (GeV/#it{c})"); // pt [ -2.3, 2.3] | |
159 | fHnEff->GetAxis(18)->SetTitle("sign_{MC}-sign_{Rec}"); // -2 | 0 | +2 | |
cb68eb1d | 160 | |
161 | fHelper->BinLogAxis(fHnEff, 4); | |
4918c45f | 162 | fHelper->BinLogAxis(fHnEff, 12); |
cb68eb1d | 163 | |
164 | /* | |
165 | >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | |
166 | ||
167 | creation -> findable -> reconstructed -> pid_TPC+TOF | |
168 | (1) (2) (3) (4) | |
169 | || findable | recStatus | recPid | |
170 | 1) all primary probeParticles_MC || - - - | |
171 | 2) all findable primary probeParticles_MC || x - - | |
172 | 3) all reconstructed primary probeParticles_MC || x x - | |
173 | 4) all reconstructed primary probeParticles_MC & recPid_TPC+TOF || x x x | |
174 | ||
175 | <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | |
176 | */ | |
177 | ||
178 | // ------------------------------------------------------------------ | |
a2ddc3d0 | 179 | // -- Create THnSparse - Cont |
cb68eb1d | 180 | // ------------------------------------------------------------------ |
181 | ||
a2ddc3d0 | 182 | Int_t binHnCont[17] = {AliAnalysisNetParticleHelper::fgkfHistNBinsCent, AliAnalysisNetParticleHelper::fgkfHistNBinsEta, // cent | etaMC |
4918c45f | 183 | AliAnalysisNetParticleHelper::fgkfHistNBinsRap, AliAnalysisNetParticleHelper::fgkfHistNBinsPhi, // yMC | phiMC |
a2ddc3d0 | 184 | AliAnalysisNetParticleHelper::fgkfHistNBinsPt, AliAnalysisNetParticleHelper::fgkfHistNBinsSign, // ptMC | signMC=contSign |
185 | 8, // contPart | | |
4918c45f | 186 | AliAnalysisNetParticleHelper::fgkfHistNBinsEta, AliAnalysisNetParticleHelper::fgkfHistNBinsRap, // etaRec | yRec |
a2ddc3d0 | 187 | AliAnalysisNetParticleHelper::fgkfHistNBinsPhi, AliAnalysisNetParticleHelper::fgkfHistNBinsPt, // phiRec | ptRec |
188 | AliAnalysisNetParticleHelper::fgkfHistNBinsSign, // signRec | |
189 | AliAnalysisNetParticleHelper::fgkfHistNBinsEta, AliAnalysisNetParticleHelper::fgkfHistNBinsRap, // deltaEta | deltaY | |
190 | 2*AliAnalysisNetParticleHelper::fgkfHistNBinsPhi+1, 2*AliAnalysisNetParticleHelper::fgkfHistNBinsPt+1, // deltaPhi | deltaPt | |
191 | AliAnalysisNetParticleHelper::fgkfHistNBinsSign+2}; // deltaSign | |
4918c45f | 192 | |
a2ddc3d0 | 193 | Double_t minHnCont[17] = {AliAnalysisNetParticleHelper::fgkfHistRangeCent[0], AliAnalysisNetParticleHelper::fgkfHistRangeEta[0], |
4918c45f | 194 | AliAnalysisNetParticleHelper::fgkfHistRangeRap[0], AliAnalysisNetParticleHelper::fgkfHistRangePhi[0], |
195 | AliAnalysisNetParticleHelper::fgkfHistRangePt[0], AliAnalysisNetParticleHelper::fgkfHistRangeSign[0], | |
a2ddc3d0 | 196 | 0.5, |
197 | AliAnalysisNetParticleHelper::fgkfHistRangeEta[0], AliAnalysisNetParticleHelper::fgkfHistRangeRap[0], | |
198 | AliAnalysisNetParticleHelper::fgkfHistRangePhi[0], AliAnalysisNetParticleHelper::fgkfHistRangePt[0], | |
199 | AliAnalysisNetParticleHelper::fgkfHistRangeSign[0], | |
4918c45f | 200 | AliAnalysisNetParticleHelper::fgkfHistRangeEta[0], AliAnalysisNetParticleHelper::fgkfHistRangeRap[0], |
a2ddc3d0 | 201 | -1.*AliAnalysisNetParticleHelper::fgkfHistRangePhi[1], -1.*AliAnalysisNetParticleHelper::fgkfHistRangePt[1], |
202 | AliAnalysisNetParticleHelper::fgkfHistRangeSign[0]-1.}; | |
203 | ||
4918c45f | 204 | |
a2ddc3d0 | 205 | Double_t maxHnCont[17] = {AliAnalysisNetParticleHelper::fgkfHistRangeCent[1], AliAnalysisNetParticleHelper::fgkfHistRangeEta[1], |
4918c45f | 206 | AliAnalysisNetParticleHelper::fgkfHistRangeRap[1], AliAnalysisNetParticleHelper::fgkfHistRangePhi[1], |
207 | AliAnalysisNetParticleHelper::fgkfHistRangePt[1], AliAnalysisNetParticleHelper::fgkfHistRangeSign[1], | |
a2ddc3d0 | 208 | 8.5, |
209 | AliAnalysisNetParticleHelper::fgkfHistRangeEta[1], AliAnalysisNetParticleHelper::fgkfHistRangeRap[1], | |
210 | AliAnalysisNetParticleHelper::fgkfHistRangePhi[1], AliAnalysisNetParticleHelper::fgkfHistRangePt[1], | |
211 | AliAnalysisNetParticleHelper::fgkfHistRangeSign[1], | |
4918c45f | 212 | AliAnalysisNetParticleHelper::fgkfHistRangeEta[1], AliAnalysisNetParticleHelper::fgkfHistRangeRap[1], |
a2ddc3d0 | 213 | AliAnalysisNetParticleHelper::fgkfHistRangePhi[1], AliAnalysisNetParticleHelper::fgkfHistRangePt[1], |
214 | AliAnalysisNetParticleHelper::fgkfHistRangeSign[1]+1.}; | |
4918c45f | 215 | |
a2ddc3d0 | 216 | fHnCont = new THnSparseF("hnCont", "cent:etaMC:yMC:phiMC:ptMC:signMC:contPart:etaRec:yRec:phiRec:ptRec:signRec:deltaEta:deltaY:deltaPhi:deltaPt:deltaSign", |
217 | 17, binHnCont, minHnCont, maxHnCont); | |
cb68eb1d | 218 | fHnCont->Sumw2(); |
a2ddc3d0 | 219 | |
cb68eb1d | 220 | 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 |
221 | fHnCont->GetAxis(1)->SetTitle("#eta_{MC}"); // eta [-0.9,0.9] | |
222 | fHnCont->GetAxis(2)->SetTitle("#it{y}_{MC}"); // rapidity [-0.5, 0.5] | |
223 | fHnCont->GetAxis(3)->SetTitle("#varphi_{MC} (rad)"); // phi [ 0. ,2Pi] | |
a2ddc3d0 | 224 | fHnCont->GetAxis(4)->SetTitle("#it{p}_{T,MC} (GeV/#it{c})"); // pT [ 0.2,2.3] |
4918c45f | 225 | fHnCont->GetAxis(5)->SetTitle("sign"); // -1 | 0 | +1 |
a2ddc3d0 | 226 | |
cb68eb1d | 227 | 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 |
a2ddc3d0 | 228 | |
229 | fHnCont->GetAxis(7)->SetTitle("#eta_{Rec}"); // eta [-0.9, 0.9] | |
230 | fHnCont->GetAxis(8)->SetTitle("#it{y}_{Rec}"); // rapidity [-0.5, 0.5] | |
231 | fHnCont->GetAxis(9)->SetTitle("#varphi_{Rec} (rad)"); // phi [ 0. , 2Pi] | |
232 | fHnCont->GetAxis(10)->SetTitle("#it{p}_{T,Rec} (GeV/#it{c})"); // pt [ 0.2, 2.3] | |
233 | fHnCont->GetAxis(11)->SetTitle("sign"); // -1 | 0 | +1 | |
234 | ||
235 | fHnCont->GetAxis(12)->SetTitle("#eta_{MC}-#eta_{Rec}"); // eta [-0.9, 0.9] | |
236 | fHnCont->GetAxis(13)->SetTitle("#it{y}_{MC}-#it{y}_{Rec}"); // rapidity [-0.5, 0.5] | |
237 | fHnCont->GetAxis(14)->SetTitle("#varphi_{MC}-#varphi_{Rec} (rad)"); // phi [ -2Pi , 2Pi] | |
238 | fHnCont->GetAxis(15)->SetTitle("#it{p}_{T,MC}-#it{p}_{T,Rec} (GeV/#it{c})"); // pt [ -2.3, 2.3] | |
239 | fHnCont->GetAxis(16)->SetTitle("sign_{MC}-sign_{Rec}"); // -2 | 0 | +2 | |
cb68eb1d | 240 | |
241 | fHelper->BinLogAxis(fHnCont, 4); | |
a2ddc3d0 | 242 | fHelper->BinLogAxis(fHnCont, 10); |
cb68eb1d | 243 | |
cb68eb1d | 244 | return; |
245 | } | |
246 | ||
a2ddc3d0 | 247 | //________________________________________________________________________ |
248 | Int_t AliAnalysisNetParticleEffCont::Setup() { | |
249 | // -- Setup eventwise | |
250 | ||
251 | // -- Create label arrays | |
252 | fLabelsRec[0] = new Int_t[fNTracks]; | |
253 | if(!fLabelsRec[0]) { | |
254 | AliError("Cannot create fLabelsRec[0]"); | |
255 | return -1; | |
256 | } | |
257 | ||
258 | fLabelsRec[1] = new Int_t[fNTracks]; | |
259 | if(!fLabelsRec[1]) { | |
260 | AliError("Cannot create fLabelsRec[1] for PID"); | |
261 | return -1; | |
262 | } | |
263 | ||
264 | for(Int_t ii = 0; ii < fNTracks; ++ii) { | |
265 | fLabelsRec[0][ii] = 0; | |
266 | fLabelsRec[1][ii] = 0; | |
267 | } | |
268 | ||
269 | return 0; | |
270 | } | |
271 | ||
272 | //________________________________________________________________________ | |
273 | void AliAnalysisNetParticleEffCont::Reset() { | |
274 | // -- Reset eventwise | |
275 | ||
276 | for (Int_t ii = 0; ii < 2 ; ++ii) { | |
277 | if (fLabelsRec[ii]) | |
278 | delete[] fLabelsRec[ii]; | |
279 | fLabelsRec[ii] = NULL; | |
280 | } | |
281 | } | |
282 | ||
283 | /* | |
284 | * --------------------------------------------------------------------------------- | |
285 | * Private Methods | |
286 | * --------------------------------------------------------------------------------- | |
287 | */ | |
288 | ||
cb68eb1d | 289 | //________________________________________________________________________ |
290 | void AliAnalysisNetParticleEffCont::FillMCLabels() { | |
291 | // Fill MC labels | |
292 | // Loop over ESD tracks and fill arrays with MC lables | |
293 | // fLabelsRec[0] : all Tracks | |
294 | // fLabelsRec[1] : all Tracks accepted by PID of TPC | |
295 | // Check every accepted track if correctly identified | |
296 | // otherwise check for contamination | |
297 | ||
5de3d4d1 | 298 | // -- Get ranges for AOD particles |
299 | Float_t etaRange[2]; | |
300 | fESDTrackCuts->GetEtaRange(etaRange[0],etaRange[1]); | |
301 | ||
302 | Float_t ptRange[2]; | |
303 | fESDTrackCuts->GetPtRange(ptRange[0],ptRange[1]); | |
304 | ||
305 | // -- Track Loop | |
cb68eb1d | 306 | for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) { |
cb68eb1d | 307 | |
478c95cf | 308 | AliVTrack *track = (fESD) ? static_cast<AliVTrack*>(fESD->GetTrack(idxTrack)) : static_cast<AliVTrack*>(fAOD->GetTrack(idxTrack)); |
309 | ||
cb68eb1d | 310 | // -- Check if track is accepted for basic parameters |
311 | if (!fHelper->IsTrackAcceptedBasicCharged(track)) | |
312 | continue; | |
313 | ||
478c95cf | 314 | // -- Check if accepted - ESD |
315 | if (fESD && !fESDTrackCuts->AcceptTrack(dynamic_cast<AliESDtrack*>(track))) | |
316 | continue; | |
317 | ||
318 | // -- Check if accepted - AOD | |
f018e7c8 | 319 | if (fAOD){ |
33af2779 | 320 | AliAODTrack * trackAOD = dynamic_cast<AliAODTrack*>(track); |
321 | ||
322 | if (!trackAOD) { | |
f018e7c8 | 323 | AliError("Pointer to dynamic_cast<AliAODTrack*>(track) = ZERO"); |
324 | continue; | |
325 | } | |
d76957cf | 326 | if (!trackAOD->TestFilterBit(fAODtrackCutBit)) |
36ef73d2 | 327 | continue; |
5de3d4d1 | 328 | |
329 | // -- Check if in pT and eta range (is done in ESDTrackCuts for ESDs) | |
330 | if(!(track->Pt() > ptRange[0] && track->Pt() <= ptRange[1] && TMath::Abs(track->Eta()) <= etaRange[1])) | |
331 | continue; | |
36ef73d2 | 332 | } |
cb68eb1d | 333 | |
4918c45f | 334 | // -- Check if accepted in rapidity window -- for identified particles |
335 | // for charged particles -- eta check is done in the trackcuts | |
cb68eb1d | 336 | Double_t yP; |
4918c45f | 337 | if (fHelper->GetUsePID() && !fHelper->IsTrackAcceptedRapidity(track, yP)) |
cb68eb1d | 338 | continue; |
339 | ||
340 | // -- Check if accepted with thighter DCA cuts | |
478c95cf | 341 | // -- returns kTRUE for AODs for now : MW |
cb68eb1d | 342 | if (!fHelper->IsTrackAcceptedDCA(track)) |
343 | continue; | |
344 | ||
345 | Int_t label = TMath::Abs(track->GetLabel()); | |
346 | ||
347 | // -- Fill Label of all reconstructed | |
348 | fLabelsRec[0][idxTrack] = label; | |
349 | ||
350 | // -- Check if accepted by PID from TPC or TPC+TOF | |
a2ddc3d0 | 351 | Double_t pid[3]; |
cb68eb1d | 352 | if (!fHelper->IsTrackAcceptedPID(track, pid)) |
353 | continue; | |
354 | ||
355 | // -- Fill Label of all reconstructed && recPid_TPC+TOF | |
356 | fLabelsRec[1][idxTrack] = label; | |
357 | ||
358 | // -- Check for contamination and fill contamination THnSparse | |
a2ddc3d0 | 359 | CheckContTrack(track); |
9be43c8e | 360 | |
361 | } // for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) { | |
362 | ||
363 | return; | |
364 | } | |
365 | ||
cb68eb1d | 366 | //________________________________________________________________________ |
a2ddc3d0 | 367 | void AliAnalysisNetParticleEffCont::CheckContTrack(AliVTrack *track) { |
fbb73c19 | 368 | // Check if particle is contamination or correctly identified for ESDs and AODs |
369 | // Check for missidentified primaries and secondaries | |
cb68eb1d | 370 | // Fill contamination THnSparse |
478c95cf | 371 | |
a2ddc3d0 | 372 | Int_t label = TMath::Abs(track->GetLabel()); |
373 | Float_t signRec = track->Charge(); | |
374 | ||
375 | ||
fbb73c19 | 376 | AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(label) : static_cast<AliVParticle*>(fArrayMC->At(label)); |
cb68eb1d | 377 | if (!particle) |
378 | return; | |
379 | ||
fbb73c19 | 380 | Bool_t isPhysicalPrimary = (fESD) ? fStack->IsPhysicalPrimary(label): (static_cast<AliAODMCParticle*>(particle))->IsPhysicalPrimary(); |
cb68eb1d | 381 | |
382 | // -- Check if correctly identified | |
fbb73c19 | 383 | // > return if correctly identified -> all ok, no action neededin this method |
384 | // > if PID required check -> for the correct (signed pdgcode) particle | |
385 | // > no PID just check for primary | |
478c95cf | 386 | if (fHelper->GetUsePID()) { |
a2ddc3d0 | 387 | if (particle->PdgCode() == (signRec*fPdgCode)) |
fbb73c19 | 388 | if (isPhysicalPrimary) |
478c95cf | 389 | return; |
478c95cf | 390 | } |
478c95cf | 391 | else { |
fbb73c19 | 392 | if (isPhysicalPrimary) |
cb68eb1d | 393 | return; |
478c95cf | 394 | } |
395 | ||
fbb73c19 | 396 | // -- Check if secondaries from material or weak decay |
397 | Bool_t isSecondaryFromWeakDecay = (fESD) ? fStack->IsSecondaryFromWeakDecay(label) : (static_cast<AliAODMCParticle*>(particle))->IsSecondaryFromWeakDecay(); | |
398 | Bool_t isSecondaryFromMaterial = (fESD) ? fStack->IsSecondaryFromMaterial(label) : (static_cast<AliAODMCParticle*>(particle))->IsSecondaryFromMaterial(); | |
478c95cf | 399 | |
a2ddc3d0 | 400 | // -- Get PDG Charge of contaminating particle |
401 | Float_t signMC = 0.; | |
402 | if (particle->Charge() == 0.) signMC = 0.; | |
403 | else if (particle->Charge() < 0.) signMC = -1.; | |
404 | else if (particle->Charge() > 0.) signMC = 1.; | |
9be43c8e | 405 | |
406 | // -- Get contaminating particle | |
407 | Float_t contPart = 0; | |
fbb73c19 | 408 | if (isSecondaryFromWeakDecay) contPart = 7; // probeParticle from WeakDecay |
409 | else if (isSecondaryFromMaterial) contPart = 8; // probeParticle from Material | |
9be43c8e | 410 | else { |
fbb73c19 | 411 | if (TMath::Abs(particle->PdgCode()) == 211) contPart = 1; // pion |
412 | else if (TMath::Abs(particle->PdgCode()) == 321) contPart = 2; // kaon | |
413 | else if (TMath::Abs(particle->PdgCode()) == 2212) contPart = 3; // proton | |
414 | else if (TMath::Abs(particle->PdgCode()) == 11) contPart = 4; // electron | |
415 | else if (TMath::Abs(particle->PdgCode()) == 13) contPart = 5; // muon | |
416 | else contPart = 6; // other | |
9be43c8e | 417 | } |
418 | ||
a2ddc3d0 | 419 | // -- Get Reconstructed y |
420 | // yRec = y for identified particles | yRec = eta for charged particles | |
4918c45f | 421 | Double_t yRec = 0.; |
a2ddc3d0 | 422 | fHelper->IsTrackAcceptedRapidity(track, yRec); |
423 | ||
424 | Double_t deltaPhi = particle->Phi()-track->Phi(); | |
425 | if (TMath::Abs(deltaPhi) > TMath::TwoPi()) { | |
426 | if (deltaPhi < 0) | |
427 | deltaPhi += TMath::TwoPi(); | |
428 | else | |
429 | deltaPhi -= TMath::TwoPi(); | |
430 | } | |
9be43c8e | 431 | |
432 | // -- Fill THnSparse | |
a2ddc3d0 | 433 | Double_t hnCont[17] = {fCentralityBin, particle->Eta(), particle->Y(), particle->Phi(), particle->Pt(), signMC, |
434 | contPart, track->Eta(), yRec, track->Phi(), track->Pt(), signRec, | |
435 | particle->Eta()-track->Eta(), particle->Y()-yRec, deltaPhi, particle->Pt()-track->Pt(), signMC-signRec}; | |
9be43c8e | 436 | fHnCont->Fill(hnCont); |
437 | } | |
438 | ||
cb68eb1d | 439 | //________________________________________________________________________ |
440 | void AliAnalysisNetParticleEffCont::FillMCEffHist() { | |
9be43c8e | 441 | // Fill efficiency THnSparse for ESDs |
fbb73c19 | 442 | |
478c95cf | 443 | Float_t etaRange[2]; |
444 | fESDTrackCuts->GetEtaRange(etaRange[0],etaRange[1]); | |
cb68eb1d | 445 | |
fbb73c19 | 446 | Int_t nPart = (fESD) ? fStack->GetNprimary() : fArrayMC->GetEntriesFast(); |
447 | ||
cb68eb1d | 448 | for (Int_t idxMC = 0; idxMC < nPart; ++idxMC) { |
fbb73c19 | 449 | AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(idxMC) : static_cast<AliVParticle*>(fArrayMC->At(idxMC)); |
cb68eb1d | 450 | |
451 | // -- Check basic MC properties -> charged physical primary | |
452 | if (!fHelper->IsParticleAcceptedBasicCharged(particle, idxMC)) | |
453 | continue; | |
454 | ||
4918c45f | 455 | // -- Check if accepted in rapidity window -- for identified particles |
cb68eb1d | 456 | Double_t yMC; |
4918c45f | 457 | if (fHelper->GetUsePID() && !fHelper->IsParticleAcceptedRapidity(particle, yMC)) |
458 | continue; | |
459 | ||
460 | // -- Check if accepted in eta window -- for charged particles | |
461 | if (!fHelper->GetUsePID() && TMath::Abs(particle->Eta()) > etaRange[1]) | |
cb68eb1d | 462 | continue; |
463 | ||
478c95cf | 464 | // -- Check if probeParticle / anti-probeParticle |
465 | // > skip check if PID is not required | |
fbb73c19 | 466 | if (fHelper->GetUsePID() && TMath::Abs(particle->PdgCode()) != fPdgCode) |
cb68eb1d | 467 | continue; |
0c47a116 | 468 | |
cb68eb1d | 469 | // -- Get sign of particle |
a2ddc3d0 | 470 | Float_t signMC = (particle->PdgCode() < 0) ? -1. : 1.; |
cb68eb1d | 471 | |
fbb73c19 | 472 | // -- Get if particle is findable --- not availible for AODs yet |
473 | Float_t findable = (fESD) ? Float_t(fHelper->IsParticleFindable(idxMC)) : 1.; | |
cb68eb1d | 474 | |
475 | // -- Get recStatus and pidStatus | |
476 | Float_t recStatus = 0.; | |
477 | Float_t recPid = 0.; | |
478 | ||
479 | // -- Get Reconstructed values | |
a2ddc3d0 | 480 | Float_t etaRec = 0.; |
481 | Float_t phiRec = 0.; | |
482 | Float_t ptRec = 0.; | |
483 | Double_t yRec = 0.; | |
484 | Float_t signRec = 0.; | |
cb68eb1d | 485 | |
486 | // -- Loop over all labels | |
487 | for (Int_t idxRec=0; idxRec < fNTracks; ++idxRec) { | |
488 | if (idxMC == fLabelsRec[0][idxRec]) { | |
489 | recStatus = 1.; | |
490 | ||
491 | if (idxMC == fLabelsRec[1][idxRec]) | |
492 | recPid = 1.; | |
9be43c8e | 493 | |
fbb73c19 | 494 | AliVTrack *track = NULL; |
495 | if(fESD) | |
496 | track = fESD->GetTrack(idxRec); | |
497 | else if(fAOD) | |
498 | track = fAOD->GetTrack(idxRec); | |
499 | ||
500 | if (track) { | |
501 | // if no track present (which should not happen) | |
502 | // -> pt = 0. , which is not in the looked at range | |
503 | ||
a2ddc3d0 | 504 | // -- Get Reconstructed values |
505 | etaRec = track->Eta(); | |
506 | phiRec = track->Phi(); | |
507 | ptRec = track->Pt(); | |
508 | signRec = track->Charge(); | |
fbb73c19 | 509 | fHelper->IsTrackAcceptedRapidity(track, yRec); // yRec = y for identified particles | yRec = eta for charged particles |
510 | } | |
511 | break; | |
9be43c8e | 512 | } |
513 | } // for (Int_t idxRec=0; idxRec < fNTracks; ++idxRec) { | |
a2ddc3d0 | 514 | |
515 | Double_t deltaPhi = particle->Phi()-phiRec; | |
516 | if (TMath::Abs(deltaPhi) > TMath::TwoPi()) { | |
517 | if (deltaPhi < 0) | |
518 | deltaPhi += TMath::TwoPi(); | |
519 | else | |
520 | deltaPhi -= TMath::TwoPi(); | |
521 | } | |
9be43c8e | 522 | |
523 | // -- Fill THnSparse | |
a2ddc3d0 | 524 | Double_t hnEff[19] = {fCentralityBin, particle->Eta(), particle->Y(), particle->Phi(), particle->Pt(), signMC, |
525 | findable, recStatus, recPid, etaRec, yRec, phiRec, ptRec, signRec, | |
526 | particle->Eta()-etaRec, particle->Y()-yRec, deltaPhi, particle->Pt()-ptRec, signMC-signRec}; | |
9be43c8e | 527 | fHnEff->Fill(hnEff); |
528 | ||
529 | } // for (Int_t idxMC = 0; idxMC < nPart; ++idxMC) { | |
530 | ||
531 | return; | |
532 | } |