]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/EBYE/NetParticle/AliAnalysisNetParticleEffCont.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / EBYE / NetParticle / AliAnalysisNetParticleEffCont.cxx
CommitLineData
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
15using 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
24ClassImp(AliAnalysisNetParticleEffCont)
25
26/*
27 * ---------------------------------------------------------------------------------
28 * Constructor / Destructor
29 * ---------------------------------------------------------------------------------
30 */
31
32//________________________________________________________________________
33AliAnalysisNetParticleEffCont::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//________________________________________________________________________
44AliAnalysisNetParticleEffCont::~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//________________________________________________________________________
64void 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//________________________________________________________________________
83void 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//________________________________________________________________________
93void 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//________________________________________________________________________
248Int_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//________________________________________________________________________
273void 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//________________________________________________________________________
290void 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 367void 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//________________________________________________________________________
440void 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}