]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/UserTasks/AliAnalysisTaskIDFFTCF.cxx
Merge branch 'master', remote branch 'origin' into TPCdev
[u/mrichter/AliRoot.git] / PWGJE / UserTasks / AliAnalysisTaskIDFFTCF.cxx
CommitLineData
7f0c28ff
ML
1// *************************************************************************
2// * *
3// * Task for Fragmentation Function Analysis in PWG4 Jet Task Force Train *
4// * *
5// *************************************************************************
6
7
8/**************************************************************************
9 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
10 * *
11 * Author: The ALICE Off-line Project. *
12 * Contributors are mentioned in the code where appropriate. *
13 * *
14 * Permission to use, copy, modify and distribute this software and its *
15 * documentation strictly for non-commercial purposes is hereby granted *
16 * without fee, provided that the above copyright notice appears in all *
17 * copies and that both the copyright notice and this permission notice *
18 * appear in the supporting documentation. The authors make no claims *
19 * about the suitability of this software for any purpose. It is *
20 * provided "as is" without express or implied warranty. *
21 **************************************************************************/
22
23/* $Id: */
24
25#include "TList.h"
26#include "TH1F.h"
27#include "TH2F.h"
28#include "TH3F.h"
29#include "TString.h"
30#include "THnSparse.h"
31#include "TProfile.h"
32#include "TFile.h"
33#include "TKey.h"
34#include "TRandom3.h"
35#include "TAxis.h"
36
37#include "AliAODInputHandler.h"
38#include "AliAODHandler.h"
39#include "AliESDEvent.h"
40#include "AliESDInputHandler.h"
41#include "AliAODMCParticle.h"
42#include "AliAODJet.h"
43#include "AliAODJetEventBackground.h"
44#include "AliGenPythiaEventHeader.h"
45#include "AliGenHijingEventHeader.h"
46#include "AliInputEventHandler.h"
47
48#include "AliAnalysisHelperJetTasks.h"
49#include "AliAnalysisManager.h"
50#include "AliAnalysisTaskSE.h"
51#include "AliVParticle.h"
52#include "AliVEvent.h"
53#include "AliPIDResponse.h"
54#include "AliIDFFUtils.h"
55
56#include "AliAnalysisTaskIDFFTCF.h"
57using std::cout;
58using std::endl;
59using std::cerr;
60
61ClassImp(AliAnalysisTaskIDFFTCF)
62
63Bool_t AliAnalysisTaskIDFFTCF::fkDump = kFALSE;
64
65//____________________________________________________________________________
66AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF()
67 : AliAnalysisTaskSE()
68 ,fESD(0)
69 ,fAOD(0)
70 ,fAODJets(0)
71 ,fAODExtension(0)
72 ,fNonStdFile("")
73 ,fBranchRecJets("jets")
74 ,fBranchGenJets("")
75 ,fTrackTypeGen(0)
76 ,fJetTypeGen(0)
77 ,fJetTypeRecEff(0)
78 ,fUseAODInputJets(kTRUE)
79 ,fFilterMask(0)
80 ,fUsePhysicsSelection(kTRUE)
81 ,fEvtSelectionMask(0)
82 ,fEventClass(0)
83 ,fMaxVertexZ(10)
84 ,fLeadingJets(kFALSE)
85 ,fTPCCutMode(kPIDNone)
86 ,fTOFCutMode(1)
87 ,fStream(0x0)
88 ,fTree(0x0)
89 ,fTrackPtCut(0)
90 ,fTrackEtaMin(0)
91 ,fTrackEtaMax(0)
92 ,fTrackPhiMin(0)
93 ,fTrackPhiMax(0)
94 ,fJetPtCut(0)
95 ,fJetEtaMin(0)
96 ,fJetEtaMax(0)
97 ,fJetPhiMin(0)
98 ,fJetPhiMax(0)
99 ,fFFRadius(0)
100 ,fFFMinLTrackPt(-1)
101 ,fFFMaxTrackPt(-1)
102 ,fFFMinnTracks(0)
103 ,fQAMode(0)
104 ,fFFMode(0)
105 ,fEffMode(0)
106 ,fAvgTrials(0)
107 ,fTracksRecCuts(0)
108 ,fTracksGen(0)
109 ,fTracksAODMCCharged(0)
110 ,fTracksAODMCChargedSec(0)
111 ,fTracksRecQualityCuts(0)
112 ,fJetsRec(0)
113 ,fJetsRecCuts(0)
114 ,fJetsGen(0)
115 ,fJetsRecEff(0)
116 ,fQATrackHistosRecCuts(0)
117 ,fQATrackHistosGen(0)
118 ,fQAJetHistosRec(0)
119 ,fQAJetHistosRecCuts(0)
120 ,fQAJetHistosRecCutsLeading(0)
121 ,fQAJetHistosGen(0)
122 ,fQAJetHistosGenLeading(0)
123 ,fQAJetHistosRecEffLeading(0)
124 ,fFFHistosRecCutsInc(0)
125 ,fFFHistosRecCutsIncPi(0)
126 ,fFFHistosRecCutsIncPro(0)
127 ,fFFHistosRecCutsIncK(0)
128 ,fFFHistosRecCutsIncEl(0)
129 ,fFFHistosRecCutsIncMu(0)
130 ,fFFHistosRecLeadingTrack(0)
131 ,fFFHistosGenInc(0)
132 ,fFFHistosGenIncPi(0)
133 ,fFFHistosGenIncPro(0)
134 ,fFFHistosGenIncK(0)
135 ,fFFHistosGenIncEl(0)
136 ,fFFHistosGenIncMu(0)
137 ,fFFHistosGenLeadingTrack(0)
138 ,fQATrackHighPtThreshold(0)
139 ,fTHnIDFF(0x0)
140 ,fTHnIncl(0x0)
141 ,fFFNBinsJetPt(0)
142 ,fFFJetPtMin(0)
143 ,fFFJetPtMax(0)
144 ,fFFNBinsPt(0)
145 ,fFFPtMin(0)
146 ,fFFPtMax(0)
147 ,fFFNBinsXi(0)
148 ,fFFXiMin(0)
149 ,fFFXiMax(0)
150 ,fFFNBinsZ(0)
151 ,fFFZMin(0)
152 ,fFFZMax(0)
153 ,fQAJetNBinsPt(0)
154 ,fQAJetPtMin(0)
155 ,fQAJetPtMax(0)
156 ,fQAJetNBinsEta(0)
157 ,fQAJetEtaMin(0)
158 ,fQAJetEtaMax(0)
159 ,fQAJetNBinsPhi(0)
160 ,fQAJetPhiMin(0)
161 ,fQAJetPhiMax(0)
162 ,fQATrackNBinsPt(0)
163 ,fQATrackPtMin(0)
164 ,fQATrackPtMax(0)
165 ,fQATrackNBinsEta(0)
166 ,fQATrackEtaMin(0)
167 ,fQATrackEtaMax(0)
168 ,fQATrackNBinsPhi(0)
169 ,fQATrackPhiMin(0)
170 ,fQATrackPhiMax(0)
171 ,fCommonHistList(0)
172 ,fh1EvtSelection(0)
173 ,fh1VertexNContributors(0)
174 ,fh1VertexZ(0)
175 ,fh1EvtMult(0)
176 ,fh1EvtCent(0)
177 ,fh1Xsec(0)
178 ,fh1Trials(0)
179 ,fh1PtHard(0)
180 ,fh1PtHardTrials(0)
181 ,fh1nRecJetsCuts(0)
182 ,fh1nGenJets(0)
183 ,fh1nRecEffJets(0)
184 ,fh2PtRecVsGenPrim(0)
185 ,fh2PtRecVsGenSec(0)
186 ,fQATrackHistosRecEffGen(0)
187 ,fQATrackHistosRecEffRec(0)
188 ,fQATrackHistosSecRec(0)
189 ,fQATrackHistosRecEffGenPi(0)
190 ,fQATrackHistosRecEffGenPro(0)
191 ,fQATrackHistosRecEffGenK(0)
192 ,fQATrackHistosRecEffGenEl(0)
193 ,fQATrackHistosRecEffGenMu(0)
194 ,fQATrackHistosRecEffRecPi(0)
195 ,fQATrackHistosRecEffRecPro(0)
196 ,fQATrackHistosRecEffRecK(0)
197 ,fQATrackHistosRecEffRecEl(0)
198 ,fQATrackHistosRecEffRecMu(0)
199 ,fQATrackHistosRecEffRecProGFL(0)
200 ,fQATrackHistosRecEffRecKGFL(0)
201 ,fQATrackHistosSecRecPi(0)
202 ,fQATrackHistosSecRecPro(0)
203 ,fQATrackHistosSecRecK(0)
204 ,fQATrackHistosSecRecEl(0)
205 ,fQATrackHistosSecRecMu(0)
206 ,fQATrackHistosSecRecProGFL(0)
207 ,fQATrackHistosSecRecKGFL(0)
208 ,fFFHistosRecEffRec(0)
209 ,fFFHistosSecRec(0)
210 ,fFFHistosRecEffRecPi(0)
211 ,fFFHistosRecEffRecPro(0)
212 ,fFFHistosRecEffRecK(0)
213 ,fFFHistosRecEffRecEl(0)
214 ,fFFHistosRecEffRecMu(0)
215 ,fFFHistosRecEffRecProGFL(0)
216 ,fFFHistosRecEffRecKGFL(0)
217 ,fFFHistosSecRecPi(0)
218 ,fFFHistosSecRecPro(0)
219 ,fFFHistosSecRecK(0)
220 ,fFFHistosSecRecEl(0)
221 ,fFFHistosSecRecMu(0)
222 ,fFFHistosSecRecProGFL(0)
223 ,fFFHistosSecRecKGFL(0)
224 ,fRandom(0)
225{
226 // default constructor
227}
228
229//_______________________________________________________________________________________________
230AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const char *name)
231 : AliAnalysisTaskSE(name)
232 ,fESD(0)
233 ,fAOD(0)
234 ,fAODJets(0)
235 ,fAODExtension(0)
236 ,fNonStdFile("")
237 ,fBranchRecJets("jets")
238 ,fBranchGenJets("")
239 ,fTrackTypeGen(0)
240 ,fJetTypeGen(0)
241 ,fJetTypeRecEff(0)
242 ,fUseAODInputJets(kTRUE)
243 ,fFilterMask(0)
244 ,fUsePhysicsSelection(kTRUE)
245 ,fEvtSelectionMask(0)
246 ,fEventClass(0)
247 ,fMaxVertexZ(10)
248 ,fLeadingJets(kFALSE)
249 ,fTPCCutMode(kPIDNone)
250 ,fTOFCutMode(1)
251 ,fStream(0x0)
252 ,fTree(0x0)
253 ,fTrackPtCut(0)
254 ,fTrackEtaMin(0)
255 ,fTrackEtaMax(0)
256 ,fTrackPhiMin(0)
257 ,fTrackPhiMax(0)
258 ,fJetPtCut(0)
259 ,fJetEtaMin(0)
260 ,fJetEtaMax(0)
261 ,fJetPhiMin(0)
262 ,fJetPhiMax(0)
263 ,fFFRadius(0)
264 ,fFFMinLTrackPt(-1)
265 ,fFFMaxTrackPt(-1)
266 ,fFFMinnTracks(0)
267 ,fQAMode(0)
268 ,fFFMode(0)
269 ,fEffMode(0)
270 ,fAvgTrials(0)
271 ,fTracksRecCuts(0)
272 ,fTracksGen(0)
273 ,fTracksAODMCCharged(0)
274 ,fTracksAODMCChargedSec(0)
275 ,fTracksRecQualityCuts(0)
276 ,fJetsRec(0)
277 ,fJetsRecCuts(0)
278 ,fJetsGen(0)
279 ,fJetsRecEff(0)
280 ,fQATrackHistosRecCuts(0)
281 ,fQATrackHistosGen(0)
282 ,fQAJetHistosRec(0)
283 ,fQAJetHistosRecCuts(0)
284 ,fQAJetHistosRecCutsLeading(0)
285 ,fQAJetHistosGen(0)
286 ,fQAJetHistosGenLeading(0)
287 ,fQAJetHistosRecEffLeading(0)
288 ,fFFHistosRecCutsInc(0)
289 ,fFFHistosRecCutsIncPi(0)
290 ,fFFHistosRecCutsIncPro(0)
291 ,fFFHistosRecCutsIncK(0)
292 ,fFFHistosRecCutsIncEl(0)
293 ,fFFHistosRecCutsIncMu(0)
294 ,fFFHistosRecLeadingTrack(0)
295 ,fFFHistosGenInc(0)
296 ,fFFHistosGenIncPi(0)
297 ,fFFHistosGenIncPro(0)
298 ,fFFHistosGenIncK(0)
299 ,fFFHistosGenIncEl(0)
300 ,fFFHistosGenIncMu(0)
301 ,fFFHistosGenLeadingTrack(0)
302 ,fQATrackHighPtThreshold(0)
303 ,fTHnIDFF(0x0)
304 ,fTHnIncl(0x0)
305 ,fFFNBinsJetPt(0)
306 ,fFFJetPtMin(0)
307 ,fFFJetPtMax(0)
308 ,fFFNBinsPt(0)
309 ,fFFPtMin(0)
310 ,fFFPtMax(0)
311 ,fFFNBinsXi(0)
312 ,fFFXiMin(0)
313 ,fFFXiMax(0)
314 ,fFFNBinsZ(0)
315 ,fFFZMin(0)
316 ,fFFZMax(0)
317 ,fQAJetNBinsPt(0)
318 ,fQAJetPtMin(0)
319 ,fQAJetPtMax(0)
320 ,fQAJetNBinsEta(0)
321 ,fQAJetEtaMin(0)
322 ,fQAJetEtaMax(0)
323 ,fQAJetNBinsPhi(0)
324 ,fQAJetPhiMin(0)
325 ,fQAJetPhiMax(0)
326 ,fQATrackNBinsPt(0)
327 ,fQATrackPtMin(0)
328 ,fQATrackPtMax(0)
329 ,fQATrackNBinsEta(0)
330 ,fQATrackEtaMin(0)
331 ,fQATrackEtaMax(0)
332 ,fQATrackNBinsPhi(0)
333 ,fQATrackPhiMin(0)
334 ,fQATrackPhiMax(0)
335 ,fCommonHistList(0)
336 ,fh1EvtSelection(0)
337 ,fh1VertexNContributors(0)
338 ,fh1VertexZ(0)
339 ,fh1EvtMult(0)
340 ,fh1EvtCent(0)
341 ,fh1Xsec(0)
342 ,fh1Trials(0)
343 ,fh1PtHard(0)
344 ,fh1PtHardTrials(0)
345 ,fh1nRecJetsCuts(0)
346 ,fh1nGenJets(0)
347 ,fh1nRecEffJets(0)
348 ,fh2PtRecVsGenPrim(0)
349 ,fh2PtRecVsGenSec(0)
350 ,fQATrackHistosRecEffGen(0)
351 ,fQATrackHistosRecEffRec(0)
352 ,fQATrackHistosSecRec(0)
353 ,fQATrackHistosRecEffGenPi(0)
354 ,fQATrackHistosRecEffGenPro(0)
355 ,fQATrackHistosRecEffGenK(0)
356 ,fQATrackHistosRecEffGenEl(0)
357 ,fQATrackHistosRecEffGenMu(0)
358 ,fQATrackHistosRecEffRecPi(0)
359 ,fQATrackHistosRecEffRecPro(0)
360 ,fQATrackHistosRecEffRecK(0)
361 ,fQATrackHistosRecEffRecEl(0)
362 ,fQATrackHistosRecEffRecMu(0)
363 ,fQATrackHistosRecEffRecProGFL(0)
364 ,fQATrackHistosRecEffRecKGFL(0)
365 ,fQATrackHistosSecRecPi(0)
366 ,fQATrackHistosSecRecPro(0)
367 ,fQATrackHistosSecRecK(0)
368 ,fQATrackHistosSecRecEl(0)
369 ,fQATrackHistosSecRecMu(0)
370 ,fQATrackHistosSecRecProGFL(0)
371 ,fQATrackHistosSecRecKGFL(0)
372 ,fFFHistosRecEffRec(0)
373 ,fFFHistosSecRec(0)
374 ,fFFHistosRecEffRecPi(0)
375 ,fFFHistosRecEffRecPro(0)
376 ,fFFHistosRecEffRecK(0)
377 ,fFFHistosRecEffRecEl(0)
378 ,fFFHistosRecEffRecMu(0)
379 ,fFFHistosRecEffRecProGFL(0)
380 ,fFFHistosRecEffRecKGFL(0)
381 ,fFFHistosSecRecPi(0)
382 ,fFFHistosSecRecPro(0)
383 ,fFFHistosSecRecK(0)
384 ,fFFHistosSecRecEl(0)
385 ,fFFHistosSecRecMu(0)
386 ,fFFHistosSecRecProGFL(0)
387 ,fFFHistosSecRecKGFL(0)
388 ,fRandom(0)
389{
390 // constructor
391
392 DefineOutput(1,TList::Class());
393
394 if(fkDump){
395 fStream = new TTreeStream("tree");
396 DefineOutput(2, TTree::Class());
397 fTree= fStream->GetTree();
398 }
399}
400
401//__________________________________________________________________________________________________________________________
402AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const AliAnalysisTaskIDFFTCF &copy)
403 : AliAnalysisTaskSE()
404 ,fESD(copy.fESD)
405 ,fAOD(copy.fAOD)
406 ,fAODJets(copy.fAODJets)
407 ,fAODExtension(copy.fAODExtension)
408 ,fNonStdFile(copy.fNonStdFile)
409 ,fBranchRecJets(copy.fBranchRecJets)
410 ,fBranchGenJets(copy.fBranchGenJets)
411 ,fTrackTypeGen(copy.fTrackTypeGen)
412 ,fJetTypeGen(copy.fJetTypeGen)
413 ,fJetTypeRecEff(copy.fJetTypeRecEff)
414 ,fUseAODInputJets(copy.fUseAODInputJets)
415 ,fFilterMask(copy.fFilterMask)
416 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
417 ,fEvtSelectionMask(copy.fEvtSelectionMask)
418 ,fEventClass(copy.fEventClass)
419 ,fMaxVertexZ(copy.fMaxVertexZ)
420 ,fLeadingJets(copy.fLeadingJets)
421 ,fTPCCutMode(copy.fTPCCutMode)
422 ,fTOFCutMode(copy.fTOFCutMode)
423 ,fStream(copy.fStream)
424 ,fTree(copy.fTree)
425 ,fTrackPtCut(copy.fTrackPtCut)
426 ,fTrackEtaMin(copy.fTrackEtaMin)
427 ,fTrackEtaMax(copy.fTrackEtaMax)
428 ,fTrackPhiMin(copy.fTrackPhiMin)
429 ,fTrackPhiMax(copy.fTrackPhiMax)
430 ,fJetPtCut(copy.fJetPtCut)
431 ,fJetEtaMin(copy.fJetEtaMin)
432 ,fJetEtaMax(copy.fJetEtaMax)
433 ,fJetPhiMin(copy.fJetPhiMin)
434 ,fJetPhiMax(copy.fJetPhiMax)
435 ,fFFRadius(copy.fFFRadius)
436 ,fFFMinLTrackPt(copy.fFFMinLTrackPt)
437 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
438 ,fFFMinnTracks(copy.fFFMinnTracks)
439 ,fQAMode(copy.fQAMode)
440 ,fFFMode(copy.fFFMode)
441 ,fEffMode(copy.fEffMode)
442 ,fAvgTrials(copy.fAvgTrials)
443 ,fTracksRecCuts(copy.fTracksRecCuts)
444 ,fTracksGen(copy.fTracksGen)
445 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
446 ,fTracksAODMCChargedSec(copy.fTracksAODMCChargedSec)
447 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
448 ,fJetsRec(copy.fJetsRec)
449 ,fJetsRecCuts(copy.fJetsRecCuts)
450 ,fJetsGen(copy.fJetsGen)
451 ,fJetsRecEff(copy.fJetsRecEff)
452 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
453 ,fQATrackHistosGen(copy.fQATrackHistosGen)
454 ,fQAJetHistosRec(copy.fQAJetHistosRec)
455 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
456 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
457 ,fQAJetHistosGen(copy.fQAJetHistosGen)
458 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
459 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
460 ,fFFHistosRecCutsInc(copy.fFFHistosRecCutsInc)
461 ,fFFHistosRecCutsIncPi(copy.fFFHistosRecCutsIncPi)
462 ,fFFHistosRecCutsIncPro(copy.fFFHistosRecCutsIncPro)
463 ,fFFHistosRecCutsIncK(copy.fFFHistosRecCutsIncK)
464 ,fFFHistosRecCutsIncEl(copy.fFFHistosRecCutsIncEl)
465 ,fFFHistosRecCutsIncMu(copy.fFFHistosRecCutsIncMu)
466 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
467 ,fFFHistosGenInc(copy.fFFHistosGenInc)
468 ,fFFHistosGenIncPi(copy.fFFHistosGenIncPi)
469 ,fFFHistosGenIncPro(copy.fFFHistosGenIncPro)
470 ,fFFHistosGenIncK(copy.fFFHistosGenIncK)
471 ,fFFHistosGenIncEl(copy.fFFHistosGenIncEl)
472 ,fFFHistosGenIncMu(copy.fFFHistosGenIncMu)
473 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
474 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
475 ,fTHnIDFF(copy.fTHnIDFF)
476 ,fTHnIncl(copy.fTHnIncl)
477 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
478 ,fFFJetPtMin(copy.fFFJetPtMin)
479 ,fFFJetPtMax(copy.fFFJetPtMax)
480 ,fFFNBinsPt(copy.fFFNBinsPt)
481 ,fFFPtMin(copy.fFFPtMin)
482 ,fFFPtMax(copy.fFFPtMax)
483 ,fFFNBinsXi(copy.fFFNBinsXi)
484 ,fFFXiMin(copy.fFFXiMin)
485 ,fFFXiMax(copy.fFFXiMax)
486 ,fFFNBinsZ(copy.fFFNBinsZ)
487 ,fFFZMin(copy.fFFZMin)
488 ,fFFZMax(copy.fFFZMax)
489 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
490 ,fQAJetPtMin(copy.fQAJetPtMin)
491 ,fQAJetPtMax(copy.fQAJetPtMax)
492 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
493 ,fQAJetEtaMin(copy.fQAJetEtaMin)
494 ,fQAJetEtaMax(copy.fQAJetEtaMax)
495 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
496 ,fQAJetPhiMin(copy.fQAJetPhiMin)
497 ,fQAJetPhiMax(copy.fQAJetPhiMax)
498 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
499 ,fQATrackPtMin(copy.fQATrackPtMin)
500 ,fQATrackPtMax(copy.fQATrackPtMax)
501 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
502 ,fQATrackEtaMin(copy.fQATrackEtaMin)
503 ,fQATrackEtaMax(copy.fQATrackEtaMax)
504 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
505 ,fQATrackPhiMin(copy.fQATrackPhiMin)
506 ,fQATrackPhiMax(copy.fQATrackPhiMax)
507 ,fCommonHistList(copy.fCommonHistList)
508 ,fh1EvtSelection(copy.fh1EvtSelection)
509 ,fh1VertexNContributors(copy.fh1VertexNContributors)
510 ,fh1VertexZ(copy.fh1VertexZ)
511 ,fh1EvtMult(copy.fh1EvtMult)
512 ,fh1EvtCent(copy.fh1EvtCent)
513 ,fh1Xsec(copy.fh1Xsec)
514 ,fh1Trials(copy.fh1Trials)
515 ,fh1PtHard(copy.fh1PtHard)
516 ,fh1PtHardTrials(copy.fh1PtHardTrials)
517 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
518 ,fh1nGenJets(copy.fh1nGenJets)
519 ,fh1nRecEffJets(copy.fh1nRecEffJets)
520 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
521 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
522 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
523 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
524 ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec)
525 ,fQATrackHistosRecEffGenPi(copy.fQATrackHistosRecEffGenPi)
526 ,fQATrackHistosRecEffGenPro(copy.fQATrackHistosRecEffGenPro)
527 ,fQATrackHistosRecEffGenK(copy.fQATrackHistosRecEffGenK)
528 ,fQATrackHistosRecEffGenEl(copy.fQATrackHistosRecEffGenEl)
529 ,fQATrackHistosRecEffGenMu(copy.fQATrackHistosRecEffGenMu)
530 ,fQATrackHistosRecEffRecPi(copy.fQATrackHistosRecEffRecPi)
531 ,fQATrackHistosRecEffRecPro(copy.fQATrackHistosRecEffRecPro)
532 ,fQATrackHistosRecEffRecK(copy.fQATrackHistosRecEffRecK)
533 ,fQATrackHistosRecEffRecEl(copy.fQATrackHistosRecEffRecEl)
534 ,fQATrackHistosRecEffRecMu(copy.fQATrackHistosRecEffRecMu)
535 ,fQATrackHistosRecEffRecProGFL(copy.fQATrackHistosRecEffRecProGFL)
536 ,fQATrackHistosRecEffRecKGFL(copy.fQATrackHistosRecEffRecKGFL)
537 ,fQATrackHistosSecRecPi(copy.fQATrackHistosSecRecPi)
538 ,fQATrackHistosSecRecPro(copy.fQATrackHistosSecRecPro)
539 ,fQATrackHistosSecRecK(copy.fQATrackHistosSecRecK)
540 ,fQATrackHistosSecRecEl(copy.fQATrackHistosSecRecEl)
541 ,fQATrackHistosSecRecMu(copy.fQATrackHistosSecRecMu)
542 ,fQATrackHistosSecRecProGFL(copy.fQATrackHistosSecRecProGFL)
543 ,fQATrackHistosSecRecKGFL(copy.fQATrackHistosSecRecKGFL)
544 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
545 ,fFFHistosSecRec(copy.fFFHistosSecRec)
546 ,fFFHistosRecEffRecPi(copy.fFFHistosRecEffRecPi)
547 ,fFFHistosRecEffRecPro(copy.fFFHistosRecEffRecPro)
548 ,fFFHistosRecEffRecK(copy.fFFHistosRecEffRecK)
549 ,fFFHistosRecEffRecEl(copy.fFFHistosRecEffRecEl)
550 ,fFFHistosRecEffRecMu(copy.fFFHistosRecEffRecMu)
551 ,fFFHistosRecEffRecProGFL(copy.fFFHistosRecEffRecProGFL)
552 ,fFFHistosRecEffRecKGFL(copy.fFFHistosRecEffRecKGFL)
553 ,fFFHistosSecRecPi(copy.fFFHistosSecRecPi)
554 ,fFFHistosSecRecPro(copy.fFFHistosSecRecPro)
555 ,fFFHistosSecRecK(copy.fFFHistosSecRecK)
556 ,fFFHistosSecRecEl(copy.fFFHistosSecRecEl)
557 ,fFFHistosSecRecMu(copy.fFFHistosSecRecMu)
558 ,fFFHistosSecRecProGFL(copy.fFFHistosSecRecProGFL)
559 ,fFFHistosSecRecKGFL(copy.fFFHistosSecRecKGFL)
560 ,fRandom(copy.fRandom)
561{
562 // copy constructor
563}
564
565// _________________________________________________________________________________________________________________________________
566AliAnalysisTaskIDFFTCF& AliAnalysisTaskIDFFTCF::operator=(const AliAnalysisTaskIDFFTCF& o)
567{
568 // assignment
569
570 if(this!=&o){
571
572 AliAnalysisTaskSE::operator=(o);
573 fESD = o.fESD;
574 fAOD = o.fAOD;
575 fAODJets = o.fAODJets;
576 fAODExtension = o.fAODExtension;
577 fNonStdFile = o.fNonStdFile;
578 fBranchRecJets = o.fBranchRecJets;
579 fBranchGenJets = o.fBranchGenJets;
580 fTrackTypeGen = o.fTrackTypeGen;
581 fJetTypeGen = o.fJetTypeGen;
582 fJetTypeRecEff = o.fJetTypeRecEff;
583 fUseAODInputJets = o.fUseAODInputJets;
584 fFilterMask = o.fFilterMask;
585 fUsePhysicsSelection = o.fUsePhysicsSelection;
586 fEvtSelectionMask = o.fEvtSelectionMask;
587 fEventClass = o.fEventClass;
588 fMaxVertexZ = o.fMaxVertexZ;
589 fLeadingJets = o.fLeadingJets;
590 fTPCCutMode = o.fTPCCutMode;
591 fTOFCutMode = o.fTOFCutMode;
592 fStream = o.fStream;
593 fTree = o.fTree;
594 fTrackPtCut = o.fTrackPtCut;
595 fTrackEtaMin = o.fTrackEtaMin;
596 fTrackEtaMax = o.fTrackEtaMax;
597 fTrackPhiMin = o.fTrackPhiMin;
598 fTrackPhiMax = o.fTrackPhiMax;
599 fJetPtCut = o.fJetPtCut;
600 fJetEtaMin = o.fJetEtaMin;
601 fJetEtaMax = o.fJetEtaMax;
602 fJetPhiMin = o.fJetPhiMin;
603 fJetPhiMax = o.fJetPhiMin;
604 fFFRadius = o.fFFRadius;
605 fFFMinLTrackPt = o.fFFMinLTrackPt;
606 fFFMaxTrackPt = o.fFFMaxTrackPt;
607 fFFMinnTracks = o.fFFMinnTracks;
608 fQAMode = o.fQAMode;
609 fFFMode = o.fFFMode;
610 fEffMode = o.fEffMode;
611 fAvgTrials = o.fAvgTrials;
612 fTracksRecCuts = o.fTracksRecCuts;
613 fTracksGen = o.fTracksGen;
614 fTracksAODMCCharged = o.fTracksAODMCCharged;
615 fTracksAODMCChargedSec = o.fTracksAODMCChargedSec;
616 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
617 fJetsRec = o.fJetsRec;
618 fJetsRecCuts = o.fJetsRecCuts;
619 fJetsGen = o.fJetsGen;
620 fJetsRecEff = o.fJetsRecEff;
621 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
622 fQATrackHistosGen = o.fQATrackHistosGen;
623 fQAJetHistosRec = o.fQAJetHistosRec;
624 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
625 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
626 fQAJetHistosGen = o.fQAJetHistosGen;
627 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
628 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
629 fFFHistosRecCutsInc = o.fFFHistosRecCutsInc;
630 fFFHistosRecCutsIncPi = o.fFFHistosRecCutsIncPi;
631 fFFHistosRecCutsIncPro = o.fFFHistosRecCutsIncPro;
632 fFFHistosRecCutsIncK = o.fFFHistosRecCutsIncK;
633 fFFHistosRecCutsIncEl = o.fFFHistosRecCutsIncEl;
634 fFFHistosRecCutsIncMu = o.fFFHistosRecCutsIncMu;
635 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
636 fFFHistosGenInc = o.fFFHistosGenInc;
637 fFFHistosGenIncPi = o.fFFHistosGenIncPi;
638 fFFHistosGenIncPro = o.fFFHistosGenIncPro;
639 fFFHistosGenIncK = o.fFFHistosGenIncK;
640 fFFHistosGenIncEl = o.fFFHistosGenIncEl;
641 fFFHistosGenIncMu = o.fFFHistosGenIncMu;
642 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
643 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
644 fTHnIDFF = o.fTHnIDFF;
645 fTHnIncl = o.fTHnIncl;
646 fFFNBinsJetPt = o.fFFNBinsJetPt;
647 fFFJetPtMin = o.fFFJetPtMin;
648 fFFJetPtMax = o.fFFJetPtMax;
649 fFFNBinsPt = o.fFFNBinsPt;
650 fFFPtMin = o.fFFPtMin;
651 fFFPtMax = o.fFFPtMax;
652 fFFNBinsXi = o.fFFNBinsXi;
653 fFFXiMin = o.fFFXiMin;
654 fFFXiMax = o.fFFXiMax;
655 fFFNBinsZ = o.fFFNBinsZ;
656 fFFZMin = o.fFFZMin;
657 fFFZMax = o.fFFZMax;
658 fQAJetNBinsPt = o.fQAJetNBinsPt;
659 fQAJetPtMin = o.fQAJetPtMin;
660 fQAJetPtMax = o.fQAJetPtMax;
661 fQAJetNBinsEta = o.fQAJetNBinsEta;
662 fQAJetEtaMin = o.fQAJetEtaMin;
663 fQAJetEtaMax = o.fQAJetEtaMax;
664 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
665 fQAJetPhiMin = o.fQAJetPhiMin;
666 fQAJetPhiMax = o.fQAJetPhiMax;
667 fQATrackNBinsPt = o.fQATrackNBinsPt;
668 fQATrackPtMin = o.fQATrackPtMin;
669 fQATrackPtMax = o.fQATrackPtMax;
670 fQATrackNBinsEta = o.fQATrackNBinsEta;
671 fQATrackEtaMin = o.fQATrackEtaMin;
672 fQATrackEtaMax = o.fQATrackEtaMax;
673 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
674 fQATrackPhiMin = o.fQATrackPhiMin;
675 fQATrackPhiMax = o.fQATrackPhiMax;
676 fCommonHistList = o.fCommonHistList;
677 fh1EvtSelection = o.fh1EvtSelection;
678 fh1VertexNContributors = o.fh1VertexNContributors;
679 fh1VertexZ = o.fh1VertexZ;
680 fh1EvtMult = o.fh1EvtMult;
681 fh1EvtCent = o.fh1EvtCent;
682 fh1Xsec = o.fh1Xsec;
683 fh1Trials = o.fh1Trials;
684 fh1PtHard = o.fh1PtHard;
685 fh1PtHardTrials = o.fh1PtHardTrials;
686 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
687 fh1nGenJets = o.fh1nGenJets;
688 fh1nRecEffJets = o.fh1nRecEffJets;
689 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
690 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
691 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
692 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
693 fQATrackHistosSecRec = o.fQATrackHistosSecRec;
694 fQATrackHistosRecEffGenPi = o.fQATrackHistosRecEffGenPi;
695 fQATrackHistosRecEffGenPro = o.fQATrackHistosRecEffGenPro;
696 fQATrackHistosRecEffGenK = o.fQATrackHistosRecEffGenK;
697 fQATrackHistosRecEffGenEl = o.fQATrackHistosRecEffGenEl;
698 fQATrackHistosRecEffGenMu = o.fQATrackHistosRecEffGenMu;
699 fQATrackHistosRecEffRecPi = o.fQATrackHistosRecEffRecPi;
700 fQATrackHistosRecEffRecPro = o.fQATrackHistosRecEffRecPro;
701 fQATrackHistosRecEffRecK = o.fQATrackHistosRecEffRecK;
702 fQATrackHistosRecEffRecEl = o.fQATrackHistosRecEffRecEl;
703 fQATrackHistosRecEffRecMu = o.fQATrackHistosRecEffRecMu;
704 fQATrackHistosRecEffRecProGFL = o.fQATrackHistosRecEffRecProGFL;
705 fQATrackHistosRecEffRecKGFL = o.fQATrackHistosRecEffRecKGFL;
706 fQATrackHistosSecRecPi = o.fQATrackHistosSecRecPi;
707 fQATrackHistosSecRecPro = o.fQATrackHistosSecRecPro;
708 fQATrackHistosSecRecK = o.fQATrackHistosSecRecK;
709 fQATrackHistosSecRecEl = o.fQATrackHistosSecRecEl;
710 fQATrackHistosSecRecMu = o.fQATrackHistosSecRecMu;
711 fQATrackHistosSecRecProGFL = o.fQATrackHistosSecRecProGFL;
712 fQATrackHistosSecRecKGFL = o.fQATrackHistosSecRecKGFL;
713 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
714 fFFHistosSecRec = o.fFFHistosSecRec;
715 fFFHistosRecEffRecPi = o.fFFHistosRecEffRecPi;
716 fFFHistosRecEffRecPro = o.fFFHistosRecEffRecPro;
717 fFFHistosRecEffRecK = o.fFFHistosRecEffRecK;
718 fFFHistosRecEffRecEl = o.fFFHistosRecEffRecEl;
719 fFFHistosRecEffRecMu = o.fFFHistosRecEffRecMu;
720 fFFHistosRecEffRecProGFL = o.fFFHistosRecEffRecProGFL;
721 fFFHistosRecEffRecKGFL = o.fFFHistosRecEffRecKGFL;
722 fFFHistosSecRecPi = o.fFFHistosSecRecPi;
723 fFFHistosSecRecPro = o.fFFHistosSecRecPro;
724 fFFHistosSecRecK = o.fFFHistosSecRecK;
725 fFFHistosSecRecEl = o.fFFHistosSecRecEl;
726 fFFHistosSecRecMu = o.fFFHistosSecRecMu;
727 fFFHistosSecRecProGFL = o.fFFHistosSecRecProGFL;
728 fFFHistosSecRecKGFL = o.fFFHistosSecRecKGFL;
729 fRandom = o.fRandom;
730 }
731
732 return *this;
733}
734
735//___________________________________________________________________________
736AliAnalysisTaskIDFFTCF::~AliAnalysisTaskIDFFTCF()
737{
738 // destructor
739
740 if(fTracksRecCuts) delete fTracksRecCuts;
741 if(fTracksGen) delete fTracksGen;
742 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
743 if(fTracksAODMCChargedSec) delete fTracksAODMCChargedSec;
744 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
745 if(fJetsRec) delete fJetsRec;
746 if(fJetsRecCuts) delete fJetsRecCuts;
747 if(fJetsGen) delete fJetsGen;
748 if(fJetsRecEff) delete fJetsRecEff;
749
750 if(fRandom) delete fRandom;
751}
752
753//______________________________________________________________________________________________________
754AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AliFragFuncHistos(const char* name,
755 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
756 Int_t nPt, Float_t ptMin, Float_t ptMax,
757 Int_t nXi, Float_t xiMin, Float_t xiMax,
758 Int_t nZ , Float_t zMin , Float_t zMax)
759 : TObject()
760 ,fNBinsJetPt(nJetPt)
761 ,fJetPtMin(jetPtMin)
762 ,fJetPtMax(jetPtMax)
763 ,fNBinsPt(nPt)
764 ,fPtMin(ptMin)
765 ,fPtMax(ptMax)
766 ,fNBinsXi(nXi)
767 ,fXiMin(xiMin)
768 ,fXiMax(xiMax)
769 ,fNBinsZ(nZ)
770 ,fZMin(zMin)
771 ,fZMax(zMax)
772 ,fh2TrackPt(0)
773 ,fh2Xi(0)
774 ,fh2Z(0)
775 ,fh1JetPt(0)
776 ,fNameFF(name)
777{
778 // default constructor
779
780}
781
782//___________________________________________________________________________
783AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
784 : TObject()
785 ,fNBinsJetPt(copy.fNBinsJetPt)
786 ,fJetPtMin(copy.fJetPtMin)
787 ,fJetPtMax(copy.fJetPtMax)
788 ,fNBinsPt(copy.fNBinsPt)
789 ,fPtMin(copy.fPtMin)
790 ,fPtMax(copy.fPtMax)
791 ,fNBinsXi(copy.fNBinsXi)
792 ,fXiMin(copy.fXiMin)
793 ,fXiMax(copy.fXiMax)
794 ,fNBinsZ(copy.fNBinsZ)
795 ,fZMin(copy.fZMin)
796 ,fZMax(copy.fZMax)
797 ,fh2TrackPt(copy.fh2TrackPt)
798 ,fh2Xi(copy.fh2Xi)
799 ,fh2Z(copy.fh2Z)
800 ,fh1JetPt(copy.fh1JetPt)
801 ,fNameFF(copy.fNameFF)
802{
803 // copy constructor
804}
805
806//_______________________________________________________________________________________________________________________________________________________________
807AliAnalysisTaskIDFFTCF::AliFragFuncHistos& AliAnalysisTaskIDFFTCF::AliFragFuncHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncHistos& o)
808{
809 // assignment
810
811 if(this!=&o){
812 TObject::operator=(o);
813 fNBinsJetPt = o.fNBinsJetPt;
814 fJetPtMin = o.fJetPtMin;
815 fJetPtMax = o.fJetPtMax;
816 fNBinsPt = o.fNBinsPt;
817 fPtMin = o.fPtMin;
818 fPtMax = o.fPtMax;
819 fNBinsXi = o.fNBinsXi;
820 fXiMin = o.fXiMin;
821 fXiMax = o.fXiMax;
822 fNBinsZ = o.fNBinsZ;
823 fZMin = o.fZMin;
824 fZMax = o.fZMax;
825 fh2TrackPt = o.fh2TrackPt;
826 fh2Xi = o.fh2Xi;
827 fh2Z = o.fh2Z;
828 fh1JetPt = o.fh1JetPt;
829 fNameFF = o.fNameFF;
830 }
831
832 return *this;
833}
834
835//_________________________________________________________
836AliAnalysisTaskIDFFTCF::AliFragFuncHistos::~AliFragFuncHistos()
837{
838 // destructor
839
840 if(fh1JetPt) delete fh1JetPt;
841 if(fh2TrackPt) delete fh2TrackPt;
842 if(fh2Xi) delete fh2Xi;
843 if(fh2Z) delete fh2Z;
844}
845
846//_________________________________________________________________
847void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::DefineHistos()
848{
849 // book FF histos
850
851 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
852 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
853 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
854 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
855
856 AliAnalysisTaskIDFFTCF::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
857 AliAnalysisTaskIDFFTCF::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
858 AliAnalysisTaskIDFFTCF::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
859 AliAnalysisTaskIDFFTCF::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
860}
861
862//_______________________________________________________________________________________________________________
863void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm,
864 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
865{
866
867 // fill FF
868
869 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
870 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
871
872 // Added for proper normalization of FF background estimation
873 // when zero track are found in the background region
874 if((int)trackPt==-1) return;
875
876 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
877 else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,trackPt,scaleFacStrangeness);
878 else fh2TrackPt->Fill(jetPt,trackPt);
879
880 Double_t z = 0.;
881 if(jetPt>0) z = trackPt / jetPt;
882 Double_t xi = 0;
883 if(z>0) xi = TMath::Log(1/z);
884
885 if(trackPt>(1-1e-06)*jetPt && trackPt<(1+1e-06)*jetPt){ // case z=1 : move entry to last histo bin <1
886 z = 1-1e-06;
887 xi = 1e-06;
888 }
889
890
891 if(norm){
892 fh2Xi->Fill(jetPt,xi,1/norm);
893 fh2Z->Fill(jetPt,z,1/norm);
894 }
895 else if(scaleStrangeness){
896 fh2Xi->Fill(jetPt,xi,scaleFacStrangeness);
897 fh2Z->Fill(jetPt,z,scaleFacStrangeness);
898 }
899 else {
900 fh2Xi->Fill(jetPt,xi);
901 fh2Z->Fill(jetPt,z);
902 }
903}
904
905//_________________________________________________________________________________
906void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AddToOutput(TList* list) const
907{
908 // add histos to list
909
910 list->Add(fh1JetPt);
911
912 list->Add(fh2TrackPt);
913 list->Add(fh2Xi);
914 list->Add(fh2Z);
915}
916
917//_________________________________________________________________________________________________________
918AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
919 Int_t nPt, Float_t ptMin, Float_t ptMax,
920 Int_t nEta, Float_t etaMin, Float_t etaMax,
921 Int_t nPhi, Float_t phiMin, Float_t phiMax)
922 : TObject()
923 ,fNBinsPt(nPt)
924 ,fPtMin(ptMin)
925 ,fPtMax(ptMax)
926 ,fNBinsEta(nEta)
927 ,fEtaMin(etaMin)
928 ,fEtaMax(etaMax)
929 ,fNBinsPhi(nPhi)
930 ,fPhiMin(phiMin)
931 ,fPhiMax(phiMax)
932 ,fh2EtaPhi(0)
933 ,fh1Pt(0)
934 ,fNameQAJ(name)
935{
936 // default constructor
937}
938
939//____________________________________________________________________________________
940AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
941 : TObject()
942 ,fNBinsPt(copy.fNBinsPt)
943 ,fPtMin(copy.fPtMin)
944 ,fPtMax(copy.fPtMax)
945 ,fNBinsEta(copy.fNBinsEta)
946 ,fEtaMin(copy.fEtaMin)
947 ,fEtaMax(copy.fEtaMax)
948 ,fNBinsPhi(copy.fNBinsPhi)
949 ,fPhiMin(copy.fPhiMin)
950 ,fPhiMax(copy.fPhiMax)
951 ,fh2EtaPhi(copy.fh2EtaPhi)
952 ,fh1Pt(copy.fh1Pt)
953 ,fNameQAJ(copy.fNameQAJ)
954{
955 // copy constructor
956}
957
958//________________________________________________________________________________________________________________________________________________________________________
959AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos& AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos& o)
960{
961 // assignment
962
963 if(this!=&o){
964 TObject::operator=(o);
965 fNBinsPt = o.fNBinsPt;
966 fPtMin = o.fPtMin;
967 fPtMax = o.fPtMax;
968 fNBinsEta = o.fNBinsEta;
969 fEtaMin = o.fEtaMin;
970 fEtaMax = o.fEtaMax;
971 fNBinsPhi = o.fNBinsPhi;
972 fPhiMin = o.fPhiMin;
973 fPhiMax = o.fPhiMax;
974 fh2EtaPhi = o.fh2EtaPhi;
975 fh1Pt = o.fh1Pt;
976 fNameQAJ = o.fNameQAJ;
977 }
978
979 return *this;
980}
981
982//______________________________________________________________
983AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
984{
985 // destructor
986
987 if(fh2EtaPhi) delete fh2EtaPhi;
988 if(fh1Pt) delete fh1Pt;
989}
990
991//____________________________________________________________________
992void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::DefineHistos()
993{
994 // book jet QA histos
995
996 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
997 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
998
999 AliAnalysisTaskIDFFTCF::SetProperties(fh2EtaPhi, "#eta", "#phi");
1000 AliAnalysisTaskIDFFTCF::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1001}
1002
1003//____________________________________________________________________________________________________
1004void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1005{
1006 // fill jet QA histos
1007
1008 fh2EtaPhi->Fill( eta, phi);
1009 fh1Pt->Fill( pt );
1010}
1011
1012//____________________________________________________________________________________
1013void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1014{
1015 // add histos to list
1016
1017 list->Add(fh2EtaPhi);
1018 list->Add(fh1Pt);
1019}
1020
1021//___________________________________________________________________________________________________________
1022AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1023 Int_t nPt, Float_t ptMin, Float_t ptMax,
1024 Int_t nEta, Float_t etaMin, Float_t etaMax,
1025 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1026 Float_t ptThresh)
1027 : TObject()
1028 ,fNBinsPt(nPt)
1029 ,fPtMin(ptMin)
1030 ,fPtMax(ptMax)
1031 ,fNBinsEta(nEta)
1032 ,fEtaMin(etaMin)
1033 ,fEtaMax(etaMax)
1034 ,fNBinsPhi(nPhi)
1035 ,fPhiMin(phiMin)
1036 ,fPhiMax(phiMax)
1037 ,fHighPtThreshold(ptThresh)
1038 ,fh2EtaPhi(0)
1039 ,fh1Pt(0)
1040 ,fh2HighPtEtaPhi(0)
1041 ,fh2PhiPt(0)
1042 ,fNameQAT(name)
1043{
1044 // default constructor
1045}
1046
1047//__________________________________________________________________________________________
1048AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1049 : TObject()
1050 ,fNBinsPt(copy.fNBinsPt)
1051 ,fPtMin(copy.fPtMin)
1052 ,fPtMax(copy.fPtMax)
1053 ,fNBinsEta(copy.fNBinsEta)
1054 ,fEtaMin(copy.fEtaMin)
1055 ,fEtaMax(copy.fEtaMax)
1056 ,fNBinsPhi(copy.fNBinsPhi)
1057 ,fPhiMin(copy.fPhiMin)
1058 ,fPhiMax(copy.fPhiMax)
1059 ,fHighPtThreshold(copy.fHighPtThreshold)
1060 ,fh2EtaPhi(copy.fh2EtaPhi)
1061 ,fh1Pt(copy.fh1Pt)
1062 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1063 ,fh2PhiPt(copy.fh2PhiPt)
1064 ,fNameQAT(copy.fNameQAT)
1065{
1066 // copy constructor
1067}
1068
1069// _____________________________________________________________________________________________________________________________________________________________________________
1070AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos& AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos& o)
1071{
1072 // assignment
1073
1074 if(this!=&o){
1075 TObject::operator=(o);
1076 fNBinsPt = o.fNBinsPt;
1077 fPtMin = o.fPtMin;
1078 fPtMax = o.fPtMax;
1079 fNBinsEta = o.fNBinsEta;
1080 fEtaMin = o.fEtaMin;
1081 fEtaMax = o.fEtaMax;
1082 fNBinsPhi = o.fNBinsPhi;
1083 fPhiMin = o.fPhiMin;
1084 fPhiMax = o.fPhiMax;
1085 fHighPtThreshold = o.fHighPtThreshold;
1086 fh2EtaPhi = o.fh2EtaPhi;
1087 fh1Pt = o.fh1Pt;
1088 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1089 fh2PhiPt = o.fh2PhiPt;
1090 fNameQAT = o.fNameQAT;
1091 }
1092
1093 return *this;
1094}
1095
1096//___________________________________________________________________
1097AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1098{
1099 // destructor
1100
1101 if(fh2EtaPhi) delete fh2EtaPhi;
1102 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1103 if(fh1Pt) delete fh1Pt;
1104 if(fh2PhiPt) delete fh2PhiPt;
1105}
1106
1107//______________________________________________________________________
1108void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::DefineHistos()
1109{
1110 // book track QA histos
1111
1112 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1113 fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1114 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1115 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1116
1117 AliAnalysisTaskIDFFTCF::SetProperties(fh2EtaPhi, "#eta", "#phi");
1118 AliAnalysisTaskIDFFTCF::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1119 AliAnalysisTaskIDFFTCF::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1120 AliAnalysisTaskIDFFTCF::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1121}
1122
1123
1124
1125//________________________________________________________________________________________________________
1126void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm,
1127 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1128{
1129 // fill track QA histos
1130 Float_t weight = 1.;
1131 if(weightPt) weight = pt;
1132 fh2EtaPhi->Fill( eta, phi, weight);
1133 if(scaleStrangeness) fh2EtaPhi->Fill( eta, phi, scaleFacStrangeness);
1134 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1135 if(pt > fHighPtThreshold && scaleStrangeness) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1136 if(norm) fh1Pt->Fill( pt, 1/norm );
1137 else if(scaleStrangeness) fh1Pt->Fill(pt,scaleFacStrangeness);
1138 else fh1Pt->Fill( pt );
1139
1140 if(scaleFacStrangeness) fh2PhiPt->Fill(phi, pt, scaleFacStrangeness);
1141 else fh2PhiPt->Fill(phi, pt);
1142}
1143
1144//______________________________________________________________________________________
1145void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1146{
1147 // add histos to list
1148
1149 list->Add(fh2EtaPhi);
1150 list->Add(fh2HighPtEtaPhi);
1151 list->Add(fh1Pt);
1152 list->Add(fh2PhiPt);
1153}
1154
1155//_________________________________________________________________________________
1156Bool_t AliAnalysisTaskIDFFTCF::Notify()
1157{
1158 //
1159 // Implemented Notify() to read the cross sections
1160 // and number of trials from pyxsec.root
1161 // (taken from AliAnalysisTaskJetSpectrum2)
1162 //
1163 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
1164 Float_t xsection = 0;
1165 Float_t ftrials = 1;
1166
1167 fAvgTrials = 1;
1168 if(tree){
1169 TFile *curfile = tree->GetCurrentFile();
1170 if (!curfile) {
1171 Error("Notify","No current file");
1172 return kFALSE;
1173 }
1174 if(!fh1Xsec||!fh1Trials){
1175 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1176 return kFALSE;
1177 }
1178 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
1179 fh1Xsec->Fill("<#sigma>",xsection);
1180 // construct a poor man average trials
1181 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1182 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
1183 }
1184
1185 // Set seed for backg study
1186 fRandom = new TRandom3();
1187 fRandom->SetSeed(0);
1188
1189 return kTRUE;
1190}
1191
1192//__________________________________________________________________
1193void AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()
1194{
1195 // create output objects
1196
1197 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()");
1198
1199 // create list of tracks and jets
1200
1201 fTracksRecCuts = new TList();
1202 fTracksRecCuts->SetOwner(kFALSE);
1203
1204 fTracksGen = new TList();
1205 fTracksGen->SetOwner(kFALSE);
1206
1207 fTracksAODMCCharged = new TList();
1208 fTracksAODMCCharged->SetOwner(kFALSE);
1209
1210 fTracksAODMCChargedSec = new TList();
1211 fTracksAODMCChargedSec->SetOwner(kFALSE);
1212
1213 fTracksRecQualityCuts = new TList();
1214 fTracksRecQualityCuts->SetOwner(kFALSE);
1215
1216 fJetsRec = new TList();
1217 fJetsRec->SetOwner(kFALSE);
1218
1219 fJetsRecCuts = new TList();
1220 fJetsRecCuts->SetOwner(kFALSE);
1221
1222 fJetsGen = new TList();
1223 fJetsGen->SetOwner(kFALSE);
1224
1225 fJetsRecEff = new TList();
1226 fJetsRecEff->SetOwner(kFALSE);
1227
1228 //
1229 // Create histograms / output container
1230 //
1231
1232 OpenFile(1);
1233 fCommonHistList = new TList();
1234 fCommonHistList->SetOwner(kTRUE);
1235
1236 Bool_t oldStatus = TH1::AddDirectoryStatus();
1237 TH1::AddDirectory(kFALSE);
1238
1239 // Histograms
1240 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1241 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
1242 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
1243 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1244 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1245 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1246 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
1247
1248 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
1249 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1250 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
1251 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1252
1253 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1254 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1255 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1256 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1257 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1258 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1259
1260 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1261 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1262 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1263
1264 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1265 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1266
1267
1268 if(fQAMode){
1269 if(fQAMode&1){ // track QA
1270 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1271 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1272 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1273 fQATrackHighPtThreshold);
1274 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1275 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1276 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1277 fQATrackHighPtThreshold);
1278 }
1279
1280 if(fQAMode&2){ // jet QA
1281 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1282 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1283 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1284 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1285 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1286 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1287 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1288 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1289 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1290 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1291 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1292 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1293 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1294 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1295 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1296
1297 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1298 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1299 }
1300 } // end: QA
1301
1302 if(fFFMode){
1303
1304
1305
1306 fTHnIDFF = AliIDFFUtils::GetTHn("THnIDFF");
1307 fTHnIncl = AliIDFFUtils::GetTHn("THnIncl");
1308 } // end: FF
1309
1310 // efficiency
1311
1312
1313
1314
1315 // ____________ define histograms ____________________
1316
1317 if(fQAMode){
1318 if(fQAMode&1){ // track QA
1319 fQATrackHistosRecCuts->DefineHistos();
1320 fQATrackHistosGen->DefineHistos();
1321 }
1322
1323 if(fQAMode&2){ // jet QA
1324 fQAJetHistosRec->DefineHistos();
1325 fQAJetHistosRecCuts->DefineHistos();
1326 fQAJetHistosRecCutsLeading->DefineHistos();
1327 fQAJetHistosGen->DefineHistos();
1328 fQAJetHistosGenLeading->DefineHistos();
1329 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
1330 }
1331 }
1332
1333 if(fFFMode){
1334 fCommonHistList->Add(fTHnIDFF);
1335 fCommonHistList->Add(fTHnIncl);
1336 }
1337
1338 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
1339 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
1340 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
1341
1342 fCommonHistList->Add(fh1EvtSelection);
1343 fCommonHistList->Add(fh1EvtMult);
1344 fCommonHistList->Add(fh1EvtCent);
1345 fCommonHistList->Add(fh1VertexNContributors);
1346 fCommonHistList->Add(fh1VertexZ);
1347 fCommonHistList->Add(fh1nRecJetsCuts);
1348 fCommonHistList->Add(fh1Xsec);
1349 fCommonHistList->Add(fh1Trials);
1350 fCommonHistList->Add(fh1PtHard);
1351 fCommonHistList->Add(fh1PtHardTrials);
1352
1353 if(genJets) fCommonHistList->Add(fh1nGenJets);
1354
1355 // QA
1356 if(fQAMode){
1357 if(fQAMode&1){ // track QA
1358 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
1359 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
1360 }
1361
1362 if(fQAMode&2){ // jet QA
1363 fQAJetHistosRec->AddToOutput(fCommonHistList);
1364 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
1365 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
1366 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
1367 if(genJets){
1368 fQAJetHistosGen->AddToOutput(fCommonHistList);
1369 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
1370 }
1371 }
1372 }
1373
1374 if(fFFMode){
1375 BookFFHistos(fCommonHistList,&fFFHistosRecCutsInc,"RecCutsInc",&fFFHistosGenInc,"GenInc");
1376 BookFFHistos(fCommonHistList,&fFFHistosRecLeadingTrack,"RecLeadingTrack",&fFFHistosGenLeadingTrack,"GenLeadingTrack");
1377 }
1378
1379
1380 if(fFFMode && genTracks){
1381 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncPi,"RecCutsInc_piPlusPiMinus",&fFFHistosGenIncPi,"GenInc_piPlusPiMinus");
1382 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncPro,"RecCutsInc_ppbar",&fFFHistosGenIncPro,"GenInc_ppbar");
1383 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncK,"RecCutsInc_kPlusKMinus",&fFFHistosGenIncK,"GenInc_kPlusKMinus");
1384 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncEl,"RecCutsInc_ePlusEMinus",&fFFHistosGenIncEl,"GenInc_ePlusEMinus");
1385 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncMu,"RecCutsInc_muPlusMuMinus",&fFFHistosGenIncMu,"GenInc_muPlusMuMinus");
1386 }
1387
1388
1389 if(fEffMode && recJetsEff && genTracks){
1390 if(fQAMode&1){
1391 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRec,"RecEffRec",&fQATrackHistosRecEffGen,"RecEffGen",&fQATrackHistosSecRec,"SecRec");
1392 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecPi,"RecEffRec_piPlusPiMinus",&fQATrackHistosRecEffGenPi,"RecEffGen_piPlusPiMinus",&fQATrackHistosSecRecPi,"SecRec_piPlusPiMinus");
1393 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecPro,"RecEffRec_ppbar",&fQATrackHistosRecEffGenPro,"RecEffGen_ppbar",&fQATrackHistosSecRecPro,"SecRec_ppbar");
1394 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecK,"RecEffRec_kPlusKMinus",&fQATrackHistosRecEffGenK,"RecEffGen_kPlusKMinus",&fQATrackHistosSecRecK,"SecRec_kPlusKMinus");
1395 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecEl,"RecEffRec_ePlusEMinus",&fQATrackHistosRecEffGenEl,"RecEffGen_ePlusEMinus",&fQATrackHistosSecRecEl,"SecRec_ePlusEMinus");
1396 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecMu,"RecEffRec_muPlusMuMinus",&fQATrackHistosRecEffGenMu,"RecEffGen_muPlusMuMinus",&fQATrackHistosSecRecMu,"SecRec_muPlusMuMinus");
1397 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecProGFL,"RecEffRec_ppbarGFL",0,"",&fQATrackHistosSecRecProGFL,"SecRec_ppbarGFL");
1398 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecKGFL,"RecEffRec_kPlusKMinusGFL",0,"",&fQATrackHistosSecRecKGFL,"SecRec_kPlusKMinusGFL");
1399 }
1400 if(fFFMode){
1401 BookFFHistos(fCommonHistList,&fFFHistosRecEffRec,"RecEffRec",0x0,"",&fFFHistosSecRec,"SecRec");
1402 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecPi,"RecEffRec_piPlusPiMinus",0x0,"",&fFFHistosSecRecPi,"SecRec_piPlusPiMinus");
1403 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecPro,"RecEffRec_ppbar",0x0,"",&fFFHistosSecRecPro,"SecRec_ppbar");
1404 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecK,"RecEffRec_kPlusKMinus",0x0,"",&fFFHistosSecRecK,"SecRec_kPlusKMinus");
1405 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecEl,"RecEffRec_ePlusEMinus",0x0,"",&fFFHistosSecRecEl,"SecRec_ePlusEMinus");
1406 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecMu,"RecEffRec_muPlusMuMinus",0x0,"",&fFFHistosSecRecMu,"SecRec_muPlusMuMinus");
1407 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecProGFL,"RecEffRec_ppbarGFL",0x0,"",&fFFHistosSecRecProGFL,"SecRec_ppbarGFL");
1408 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecKGFL,"RecEffRec_kPlusKMinusGFL",0x0,"",&fFFHistosSecRecKGFL,"SecRec_kPlusKMinusGFL");
1409 }
1410
1411 fCommonHistList->Add(fh1nRecEffJets);
1412 fCommonHistList->Add(fh2PtRecVsGenPrim);
1413 fCommonHistList->Add(fh2PtRecVsGenSec);
1414 }
1415
1416 // =========== Switch on Sumw2 for all histos ===========
1417 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
1418 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
1419 if (h1) h1->Sumw2();
1420 else{
1421 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
1422 if(hnSparse) hnSparse->Sumw2();
1423 }
1424 }
1425
1426 TH1::AddDirectory(oldStatus);
1427
1428 PostData(1, fCommonHistList);
1429
1430 if(fStream){
1431 PostData(2, fTree);
1432 }
1433}
1434
1435//_______________________________________________
1436void AliAnalysisTaskIDFFTCF::Init()
1437{
1438 // Initialization
1439 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::Init()");
1440
1441}
1442
1443//_____________________________________________________________
1444void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
1445{
1446 AliIDFFUtils::fPid = 0x0;
1447
1448 // Main loop
1449 // Called for each event
1450 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::UserExec()");
1451
1452
1453 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
1454
1455 // Trigger selection
1456 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
1457 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
1458
1459 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
1460 fh1EvtSelection->Fill(1.);
1461 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
1462 PostData(1, fCommonHistList);
1463 return;
1464 }
1465
1466 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1467 if(!fESD){
1468 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
1469 }
1470
1471 fMCEvent = MCEvent();
1472 if(!fMCEvent){
1473 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
1474 }
1475
1476 // get AOD event from input/ouput
1477 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
1478 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
1479 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
1480 AliIDFFUtils::fPid = ((AliAODInputHandler*)handler)->GetPIDResponse();
1481 if(fUseAODInputJets) fAODJets = fAOD;
1482 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
1483 }
1484 else {
1485 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
1486 if( handler && handler->InheritsFrom("AliAODHandler") ) {
1487 fAOD = ((AliAODHandler*)handler)->GetAOD();
1488
1489 AliInputEventHandler* esdinputHandler =
1490 (AliInputEventHandler*) (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1491 AliIDFFUtils::fPid = esdinputHandler->GetPIDResponse();
1492
1493 fAODJets = fAOD;
1494 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
1495 }
1496 }
1497
1498 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
1499 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
1500 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
1501 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
1502 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
1503 }
1504 }
1505
1506 if(fNonStdFile.Length()!=0){
1507 // case we have an AOD extension - fetch the jets from the extended output
1508
1509 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
1510 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
1511 if(!fAODExtension){
1512 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
1513 }
1514 }
1515
1516 if(!fAOD){
1517 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
1518 return;
1519 }
1520 if(!AliIDFFUtils::fPid){
1521 Printf("%s:%d PIDresponse not found", (char*)__FILE__,__LINE__);
1522 return;
1523 }
1524 if(!fAODJets){
1525 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
1526 return;
1527 }
1528
1529
1530 // event selection **************************************************
1531 // *** event class ***
1532 Double_t centPercent = -1;
1533 if(fEventClass>0){
1534 Int_t cl = 0;
1535 if(handler->InheritsFrom("AliAODInputHandler")){
1536 // since it is not supported by the helper task define own classes
1537 centPercent = fAOD->GetHeader()->GetCentrality();
1538 cl = 1;
1539 if(centPercent>10) cl = 2;
1540 if(centPercent>30) cl = 3;
1541 if(centPercent>50) cl = 4;
1542 }
1543 else {
1544 cl = AliAnalysisHelperJetTasks::EventClass();
1545 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
1546 }
1547
1548 if(cl!=fEventClass){
1549 // event not in selected event class, reject event
1550 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
1551 fh1EvtSelection->Fill(2.);
1552 PostData(1, fCommonHistList);
1553 return;
1554 }
1555 }
1556
1557 // *** vertex cut ***
1558 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
1559 Int_t nTracksPrim = primVtx->GetNContributors();
1560 fh1VertexNContributors->Fill(nTracksPrim);
1561
1562
1563 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
1564 if(!nTracksPrim){
1565 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
1566 fh1EvtSelection->Fill(3.);
1567 PostData(1, fCommonHistList);
1568 return;
1569 }
1570
1571 fh1VertexZ->Fill(primVtx->GetZ());
1572
1573 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
1574 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
1575 fh1EvtSelection->Fill(4.);
1576 PostData(1, fCommonHistList);
1577 return;
1578 }
1579
1580 TString primVtxName(primVtx->GetName());
1581
1582 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
1583 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
1584 fh1EvtSelection->Fill(5.);
1585 PostData(1, fCommonHistList);
1586 return;
1587 }
1588
1589 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
1590 fh1EvtSelection->Fill(0.);
1591 fh1EvtCent->Fill(centPercent);
1592
1593
1594 //___ get MC information __________________________________________________________________
1595
1596 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
1597
1598 Double_t ptHard = 0.;
1599 Double_t nTrials = 1; // trials for MC trigger weight for real data
1600
1601 if(fMCEvent){
1602 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
1603
1604 if(genHeader){
1605
1606 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
1607 AliGenHijingEventHeader* hijingGenHeader = 0x0;
1608
1609 if(pythiaGenHeader){
1610 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
1611 nTrials = pythiaGenHeader->Trials();
1612 ptHard = pythiaGenHeader->GetPtHard();
1613
1614 fh1PtHard->Fill(ptHard);
1615 fh1PtHardTrials->Fill(ptHard,nTrials);
1616
1617 } else { // no pythia, hijing?
1618
1619 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
1620
1621 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
1622 if(!hijingGenHeader){
1623 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
1624 } else {
1625 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
1626 }
1627 }
1628
1629 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
1630 }
1631 }
1632
1633 //___ fetch jets __________________________________________________________________________
1634
1635 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
1636 Int_t nRecJets = 0;
1637 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
1638 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
1639 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
1640
1641 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
1642 Int_t nRecJetsCuts = 0;
1643 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
1644 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
1645 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
1646 fh1nRecJetsCuts->Fill(nRecJetsCuts);
1647
1648 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
1649
1650 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
1651 Int_t nGenJets = 0;
1652 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
1653 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
1654
1655 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
1656 fh1nGenJets->Fill(nGenJets);
1657
1658
1659 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
1660 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
1661 Int_t nRecEffJets = 0;
1662 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
1663 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
1664 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
1665 fh1nRecEffJets->Fill(nRecEffJets);
1666
1667
1668 //____ fetch particles __________________________________________________________
1669
1670 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
1671
1672 Int_t nRecPartCuts = 0;
1673 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
1674 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
1675 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
1676 fh1EvtMult->Fill(nRecPartCuts);
1677
1678
1679 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
1680 Int_t nGenPart = 0;
1681 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
1682 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
1683 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
1684
1685
1686 //____ analysis, fill histos ___________________________________________________
1687
1688 if(fQAMode){
1689 // loop over tracks
1690 if(fQAMode&1){
1691 for(Int_t it=0; it<nRecPartCuts; ++it){
1692 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
1693 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
1694
1695 // fill inclusive tracks XXX, they have the same track cuts!
1696 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
1697 if(inclusiveaod){
1698 AliIDFFUtils::FillTHn(fTHnIncl, -999, inclusiveaod, fAOD, fTOFCutMode);
1699 }
1700
1701 }
1702 for(Int_t it=0; it<nGenPart; ++it){
1703 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
1704 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
1705 }
1706 }
1707
1708 // loop over jets
1709 if(fQAMode&2){
1710 for(Int_t ij=0; ij<nRecJets; ++ij){
1711 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
1712 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
1713 }
1714 }
1715 }
1716
1717 if(fQAMode || fFFMode){
1718
1719 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
1720
1721 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
1722 Float_t jetPt = jet->Pt();
1723
1724 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1725
1726 if(fLeadingJets && ij>0) continue; // leading/all jets
1727
1728 if(fQAMode&2 && (ij==0) ) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt );
1729
1730 // get tracks in jet
1731 TList* jettracklist = new TList();
1732 Double_t sumPt = 0.;
1733 Bool_t isBadJet = kFALSE;
1734
1735 if(GetFFRadius()<=0)
1736 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1737 else
1738 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet,
1739 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1740
1741 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
1742
1743 if(isBadJet) continue;
1744
1745 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1746
1747 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
1748 if(!trackVP)continue;
1749
1750 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
1751 if(!aodtrack) continue;
1752
1753 Float_t trackPt = trackVP->Pt();
1754
1755 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
1756
1757 if(fFFMode){
1758
1759 fFFHistosRecCutsInc->FillFF(trackPt, jetPt, incrementJetPt);
1760
1761 AliIDFFUtils::FillTHn(fTHnIDFF, jetPt, aodtrack, fAOD, fTOFCutMode);
1762
1763 if(it==0){ // leading track, all jets
1764 fFFHistosRecLeadingTrack->FillFF( trackPt, jetPt, kTRUE);
1765 }
1766 }
1767
1768 }
1769
1770 delete jettracklist;
1771
1772 } // end: rec. jets after cuts
1773
1774 // loop again over rec jets:
1775 // PID histos (only for MC)
1776
1777 if(fBranchGenJets.Length()>0){ // check if we're running over MC
1778
1779 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // rec jets loop
1780
1781 if(fLeadingJets && ij>0) continue; // leading/all jets
1782
1783 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1784 if(!tca) continue;
1785
1786 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
1787 Float_t jetPt = jet->Pt();
1788
1789 // get tracks in jet
1790 TList* jettracklist = new TList();
1791 Double_t sumPt = 0.;
1792 Bool_t isBadJet = kFALSE;
1793
1794 if(GetFFRadius()<=0)
1795 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1796 else
1797 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet,
1798 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1799
1800 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
1801
1802 if(isBadJet) continue;
1803
1804 Bool_t incrementJetPt = kTRUE; // there could be 0 tracks in jet: first fill jet pt histo once
1805 fFFHistosRecCutsIncPi->FillFF(-1, jetPt, incrementJetPt);
1806 fFFHistosRecCutsIncPro->FillFF(-1, jetPt, incrementJetPt);
1807 fFFHistosRecCutsIncK->FillFF(-1, jetPt, incrementJetPt);
1808 fFFHistosRecCutsIncEl->FillFF(-1, jetPt, incrementJetPt);
1809 fFFHistosRecCutsIncMu->FillFF(-1, jetPt, incrementJetPt);
1810
1811 incrementJetPt = kFALSE;
1812
1813 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1814
1815 AliAODTrack * rectrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
1816 if(!rectrack) continue;
1817
1818 Int_t label = TMath::Abs(rectrack->GetLabel());
1819 Float_t recPt = rectrack->Pt();
1820
1821 // find MC track in our list
1822 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
1823
1824 // Float_t genPt = gentrack->Pt();
1825
1826 if(gentrack){
1827 Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
1828
1829 if(mcpdg == 211) fFFHistosRecCutsIncPi->FillFF(recPt, jetPt, incrementJetPt);
1830 if(mcpdg == 2212) fFFHistosRecCutsIncPro->FillFF(recPt, jetPt, incrementJetPt);
1831 if(mcpdg == 321) fFFHistosRecCutsIncK->FillFF(recPt, jetPt, incrementJetPt);
1832 if(mcpdg == 11) fFFHistosRecCutsIncEl->FillFF(recPt, jetPt, incrementJetPt);
1833 if(mcpdg == 13) fFFHistosRecCutsIncMu->FillFF(recPt, jetPt, incrementJetPt);
1834 }
1835 }
1836 delete jettracklist;
1837
1838 } // end: rec. jets after cuts
1839 } // MC
1840
1841
1842 // generated jets
1843 for(Int_t ij=0; ij<nGenJets; ++ij){
1844
1845 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
1846 if(!jet)continue;
1847
1848 Float_t jetPt = jet->Pt();
1849
1850 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1851
1852 if(fLeadingJets && ij>0) continue; // leading/all jets
1853
1854 if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1855
1856 TList* jettracklist = new TList();
1857 Double_t sumPt = 0.;
1858 Bool_t isBadJet = kFALSE;
1859
1860 if(GetFFRadius()<=0){
1861 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1862 } else {
1863 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1864 }
1865
1866 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
1867
1868 if(isBadJet) continue;
1869
1870 Bool_t incrementJetPt = kTRUE; // first fill jet pt histo once
1871 fFFHistosGenInc->FillFF(-1, jetPt, incrementJetPt);
1872 fFFHistosGenIncPi->FillFF(-1, jetPt, incrementJetPt);
1873 fFFHistosGenIncPro->FillFF(-1, jetPt, incrementJetPt);
1874 fFFHistosGenIncK->FillFF(-1, jetPt, incrementJetPt);
1875 fFFHistosGenIncEl->FillFF(-1, jetPt, incrementJetPt);
1876 fFFHistosGenIncMu->FillFF(-1, jetPt, incrementJetPt);
1877
1878 incrementJetPt = kFALSE;
1879
1880 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1881
1882 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
1883 if(!trackVP)continue;
1884
1885 Float_t trackPt = trackVP->Pt();
1886
1887 if(fFFMode){
1888
1889 fFFHistosGenInc->FillFF( trackPt, jetPt, incrementJetPt);
1890
1891 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*>(trackVP);
1892
1893 if(gentrack){
1894
1895 Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
1896
1897 if(mcpdg == 211) fFFHistosGenIncPi->FillFF(trackPt, jetPt, incrementJetPt);
1898 if(mcpdg == 2212) fFFHistosGenIncPro->FillFF(trackPt, jetPt, incrementJetPt);
1899 if(mcpdg == 321) fFFHistosGenIncK->FillFF(trackPt, jetPt, incrementJetPt);
1900 if(mcpdg == 11) fFFHistosGenIncEl->FillFF(trackPt, jetPt, incrementJetPt);
1901 if(mcpdg == 13) fFFHistosGenIncMu->FillFF(trackPt, jetPt, incrementJetPt);
1902 }
1903 }
1904
1905 if(it==0){ // leading track, all jets
1906 fFFHistosGenLeadingTrack->FillFF( trackPt, jetPt, kTRUE );
1907 }
1908
1909 } // track loop
1910
1911 delete jettracklist;
1912
1913 } // gen jets loop
1914 } // end: QA, FF and intra-jet
1915
1916
1917 // ____ efficiency _______________________________
1918
1919 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
1920
1921 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
1922 TArrayI indexAODTr;
1923 TArrayS isGenPrim;
1924
1925 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
1926 TArrayI indexMCTr;
1927
1928 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
1929 TArrayI indexAODTrSec;
1930 TArrayS isGenSec;
1931 TArrayI indexMCTrSec;
1932
1933 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
1934 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
1935
1936 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
1937 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
1938
1939
1940 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
1941 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
1942
1943 // associate gen and rec tracks, store indices in TArrays
1944 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
1945 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
1946
1947 // single track eff
1948 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
1949 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenPi,fQATrackHistosRecEffRecPi,fTracksAODMCCharged,indexAODTr,isGenPrim, 211);
1950 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenPro,fQATrackHistosRecEffRecPro,fTracksAODMCCharged,indexAODTr,isGenPrim, 2212);
1951 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenK,fQATrackHistosRecEffRecK,fTracksAODMCCharged,indexAODTr,isGenPrim, 321);
1952 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenEl,fQATrackHistosRecEffRecEl,fTracksAODMCCharged,indexAODTr,isGenPrim, 11);
1953 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenMu,fQATrackHistosRecEffRecMu,fTracksAODMCCharged,indexAODTr,isGenPrim, 13);
1954 if(fQAMode&1) FillSingleTrackHistosRecGen(0,fQATrackHistosRecEffRecProGFL,fTracksAODMCCharged,indexAODTr,isGenPrim, 2212,kTRUE);
1955 if(fQAMode&1) FillSingleTrackHistosRecGen(0,fQATrackHistosRecEffRecKGFL,fTracksAODMCCharged,indexAODTr,isGenPrim, 321,kTRUE);
1956
1957 // secondaries
1958 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
1959 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPi,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,211);
1960 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPro,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212);
1961 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecK,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321);
1962 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecEl,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,11);
1963 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecMu,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,13);
1964 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kTRUE);
1965 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kTRUE);
1966
1967
1968 // jet track eff
1969 Double_t sumPtGenLeadingJetRecEff = 0;
1970 Double_t sumPtGenLeadingJetSec = 0;
1971 Double_t sumPtRecLeadingJetRecEff = 0;
1972
1973 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
1974
1975 if(fLeadingJets && ij>0) continue; // leading/all jets
1976
1977 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
1978
1979 Bool_t isBadJetGenPrim = kFALSE;
1980 Bool_t isBadJetGenSec = kFALSE;
1981 Bool_t isBadJetRec = kFALSE;
1982
1983 // for efficiency: gen tracks from pointing with gen/rec jet
1984 TList* jettracklistGenPrim = new TList();
1985
1986 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
1987 // note : FF recEff gen histos will be somewhat useless in this approach
1988
1989 if(GetFFRadius() >0)
1990 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
1991 else
1992 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
1993
1994 TList* jettracklistGenSec = new TList();
1995 if(GetFFRadius() >0)
1996 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
1997 else
1998 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
1999
2000
2001 // bin efficiency in jet pt bins using rec tracks
2002 TList* jettracklistRec = new TList();
2003 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2004 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2005
2006
2007 Double_t jetEta = jet->Eta();
2008 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
2009
2010 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
2011 if(GetFFMinNTracks()>0 && jettracklistGenSec->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
2012 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
2013
2014 if(isBadJetRec) continue;
2015
2016 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
2017
2018 if(fFFMode){
2019
2020 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0);
2021 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec);
2022
2023 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecPi,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,211);
2024 else FillJetTrackHistosRec(fFFHistosRecEffRecPi,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,211);
2025
2026 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecPro,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,2212);
2027 else FillJetTrackHistosRec(fFFHistosRecEffRecPro,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,2212);
2028
2029 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecK,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,321);
2030 else FillJetTrackHistosRec(fFFHistosRecEffRecK,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,321);
2031
2032 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecEl,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,11);
2033 else FillJetTrackHistosRec(fFFHistosRecEffRecEl,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,11);
2034
2035 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecMu,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,13);
2036 else FillJetTrackHistosRec(fFFHistosRecEffRecMu,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,13);
2037
2038 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecProGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,2212,kTRUE);
2039 else FillJetTrackHistosRec(fFFHistosRecEffRecProGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,2212,kTRUE);
2040
2041 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecKGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,321,kTRUE);
2042 else FillJetTrackHistosRec(fFFHistosRecEffRecKGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,321,kTRUE);
2043
2044
2045
2046 // secondaries: use jet pt from primaries
2047 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0);
2048 else FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec);
2049
2050 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,211);
2051 else FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,211);
2052
2053 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPro,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212);
2054 else FillJetTrackHistosRec(fFFHistosSecRecPro,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212);
2055
2056 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecK,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321);
2057 else FillJetTrackHistosRec(fFFHistosSecRecK,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321);
2058
2059 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecEl,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,11);
2060 else FillJetTrackHistosRec(fFFHistosSecRecEl,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,11);
2061
2062 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecMu,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,13);
2063 else FillJetTrackHistosRec(fFFHistosSecRecMu,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,13);
2064
2065 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kTRUE);
2066 else FillJetTrackHistosRec(fFFHistosSecRecProGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kTRUE);
2067
2068 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kTRUE);
2069 else FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kTRUE);
2070 }
2071
2072 delete jettracklistGenPrim;
2073 delete jettracklistGenSec;
2074 delete jettracklistRec;
2075
2076 } // jet loop
2077 } // eff mode
2078
2079
2080 //___________________
2081
2082 fTracksRecCuts->Clear();
2083 fTracksGen->Clear();
2084 fTracksAODMCCharged->Clear();
2085 fTracksAODMCChargedSec->Clear();
2086 fTracksRecQualityCuts->Clear();
2087
2088 fJetsRec->Clear();
2089 fJetsRecCuts->Clear();
2090 fJetsGen->Clear();
2091 fJetsRecEff->Clear();
2092
2093 //Post output data.
2094 PostData(1, fCommonHistList);
2095}
2096
2097//______________________________________________________________
2098void AliAnalysisTaskIDFFTCF::Terminate(Option_t *)
2099{
2100 // terminated
2101
2102 if(fDebug > 1) printf("AliAnalysisTaskIDFFTCF::Terminate() \n");
2103}
2104
2105//_________________________________________________________________________________
2106Int_t AliAnalysisTaskIDFFTCF::GetListOfTracks(TList *list, Int_t type)
2107{
2108 // fill list of tracks selected according to type
2109
2110 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
2111
2112 if(!list){
2113 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2114 return -1;
2115 }
2116
2117 if(!fAOD) return -1;
2118
2119 if(!fAOD->GetTracks()) return 0;
2120
2121 if(type==kTrackUndef) return 0;
2122
2123 Int_t iCount = 0;
2124
2125
2126 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD){
2127
2128 // all rec. tracks, esd filter mask, eta range
2129
2130 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
2131 AliAODTrack *tr = fAOD->GetTrack(it);
2132
2133 if(type == kTrackAODCuts || type==kTrackAODQualityCuts){
2134
2135 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2136
2137 //new cut on TPC
2138 if(fTPCCutMode==kPIDN && !AliIDFFUtils::TPCCutPIDN(tr)){
2139 continue;
2140 }
2141 if(fTPCCutMode==kMIGeo && !AliIDFFUtils::TPCCutMIGeo(tr, fAOD, fStream)){
2142 continue;
2143 }
2144
2145 if(type == kTrackAODCuts){
2146 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2147 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2148 if(tr->Pt() < fTrackPtCut) continue;
2149 }
2150 }
2151 list->Add(tr);
2152 iCount++;
2153 }
2154 }
2155 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2156 // kine particles, all or rather charged
2157 if(!fMCEvent) return iCount;
2158
2159 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2160 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2161
2162 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2163 if(part->Charge()==0) continue;
2164
2165 if(type == kTrackKineChargedAcceptance &&
2166 ( part->Eta() < fTrackEtaMin
2167 || part->Eta() > fTrackEtaMax
2168 || part->Phi() < fTrackPhiMin
2169 || part->Phi() > fTrackPhiMax
2170 || part->Pt() < fTrackPtCut)) continue;
2171 }
2172
2173 list->Add(part);
2174 iCount++;
2175 }
2176 }
2177 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
2178 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2179 if(!fAOD) return -1;
2180
2181 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2182 if(!tca)return iCount;
2183
2184 for(int it=0; it<tca->GetEntriesFast(); ++it){
2185 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2186 if(!part)continue;
2187 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
2188 if((type == kTrackAODMCChargedSec) && part->IsPhysicalPrimary())continue;
2189
2190 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
2191 if(part->Charge()==0) continue;
2192
2193 if(type==kTrackAODMCChargedSec){
2194
2195 Int_t iMother = part->GetMother();
2196 if(iMother < 0) continue; // throw out PYTHIA stack partons + incoming protons
2197 }
2198
2199
2200 if(type==kTrackAODMCChargedAcceptance &&
2201 ( part->Eta() > fTrackEtaMax
2202 || part->Eta() < fTrackEtaMin
2203 || part->Phi() > fTrackPhiMax
2204 || part->Phi() < fTrackPhiMin
2205 || part->Pt() < fTrackPtCut)) continue;
2206 }
2207
2208 list->Add(part);
2209 iCount++;
2210 }
2211 }
2212
2213 list->Sort();
2214 return iCount;
2215
2216}
2217// _______________________________________________________________________________
2218Int_t AliAnalysisTaskIDFFTCF::GetListOfJets(TList *list, Int_t type)
2219{
2220 // fill list of jets selected according to type
2221
2222 if(!list){
2223 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2224 return -1;
2225 }
2226
2227 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
2228
2229 if(fBranchRecJets.Length()==0){
2230 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
2231 if(fDebug>1)fAOD->Print();
2232 return 0;
2233 }
2234
2235 TClonesArray *aodRecJets = 0;
2236 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
2237 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
2238 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
2239
2240 if(!aodRecJets){
2241 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
2242 if(fDebug>1)fAOD->Print();
2243 return 0;
2244 }
2245
2246 // Reorder jet pt and fill new temporary AliAODJet objects
2247 Int_t nRecJets = 0;
2248
2249 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
2250
2251 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
2252 if(!tmp) continue;
2253
2254 if( tmp->Pt() < fJetPtCut ) continue;
2255 if( type == kJetsRecAcceptance &&
2256 ( tmp->Eta() < fJetEtaMin
2257 || tmp->Eta() > fJetEtaMax
2258 || tmp->Phi() < fJetPhiMin
2259 || tmp->Phi() > fJetPhiMax )) continue;
2260
2261
2262 list->Add(tmp);
2263 nRecJets++;
2264 }
2265
2266 list->Sort();
2267
2268 return nRecJets;
2269 }
2270 else if(type == kJetsKine || type == kJetsKineAcceptance){
2271
2272 // generated jets
2273 Int_t nGenJets = 0;
2274
2275 if(!fMCEvent){
2276 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
2277 return 0;
2278 }
2279
2280 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2281 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2282 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2283
2284 if(!pythiaGenHeader){
2285 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2286
2287 if(!hijingGenHeader){
2288 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
2289 return 0;
2290 }else{
2291 TLorentzVector mom[4];
2292 AliAODJet* jet[4];
2293 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
2294
2295 for(Int_t i=0; i<2; ++i){
2296 if(!mom[i].Pt()) continue;
2297 jet[i] = new AliAODJet(mom[i]);
2298
2299 if( type == kJetsKineAcceptance &&
2300 ( jet[i]->Eta() < fJetEtaMin
2301 || jet[i]->Eta() > fJetEtaMax
2302 || jet[i]->Phi() < fJetPhiMin
2303 || jet[i]->Phi() > fJetPhiMax )) continue;
2304
2305 list->Add(jet[i]);
2306 nGenJets++;
2307 }
2308 list->Sort();
2309 return nGenJets;
2310 }
2311 }
2312
2313 // fetch the pythia generated jets
2314 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
2315
2316 Float_t p[4];
2317 AliAODJet *jet = new AliAODJet();
2318 pythiaGenHeader->TriggerJet(ip, p);
2319 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
2320
2321 if( type == kJetsKineAcceptance &&
2322 ( jet->Eta() < fJetEtaMin
2323 || jet->Eta() > fJetEtaMax
2324 || jet->Phi() < fJetPhiMin
2325 || jet->Phi() > fJetPhiMax )) continue;
2326
2327 list->Add(jet);
2328 nGenJets++;
2329 }
2330 list->Sort();
2331 return nGenJets;
2332 }
2333 else if(type == kJetsGen || type == kJetsGenAcceptance ){
2334
2335 if(fBranchGenJets.Length()==0){
2336 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
2337 return 0;
2338 }
2339
2340 TClonesArray *aodGenJets = 0;
2341 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
2342 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
2343 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
2344
2345 if(!aodGenJets){
2346 if(fDebug>0){
2347 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
2348 }
2349 if(fDebug>1)fAOD->Print();
2350 return 0;
2351 }
2352
2353 Int_t nGenJets = 0;
2354
2355 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
2356
2357 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
2358 if(!tmp) continue;
2359
2360 if( tmp->Pt() < fJetPtCut ) continue;
2361 if( type == kJetsGenAcceptance &&
2362 ( tmp->Eta() < fJetEtaMin
2363 || tmp->Eta() > fJetEtaMax
2364 || tmp->Phi() < fJetPhiMin
2365 || tmp->Phi() > fJetPhiMax )) continue;
2366
2367 list->Add(tmp);
2368 nGenJets++;
2369 }
2370 list->Sort();
2371 return nGenJets;
2372 }
2373 else{
2374 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
2375 return 0;
2376 }
2377}
2378
2379// _________________________________________________________________________________________________________
59455a79 2380void AliAnalysisTaskIDFFTCF::SetProperties(THnSparse* h, Int_t dim, const char** labels)
7f0c28ff
ML
2381{
2382 // Set properties of THnSparse
2383
2384 for(Int_t i=0; i<dim; i++){
2385 h->GetAxis(i)->SetTitle(labels[i]);
2386 h->GetAxis(i)->SetTitleColor(1);
2387 }
2388}
2389
2390// __________________________________________________________________________________________
2391void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y)
2392{
2393 //Set properties of histos (x and y title)
2394
2395 h->SetXTitle(x);
2396 h->SetYTitle(y);
2397 h->GetXaxis()->SetTitleColor(1);
2398 h->GetYaxis()->SetTitleColor(1);
2399}
2400
2401// _________________________________________________________________________________________________________
2402void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y, const char* z)
2403{
2404 //Set properties of histos (x,y and z title)
2405
2406 h->SetXTitle(x);
2407 h->SetYTitle(y);
2408 h->SetZTitle(z);
2409 h->GetXaxis()->SetTitleColor(1);
2410 h->GetYaxis()->SetTitleColor(1);
2411 h->GetZaxis()->SetTitleColor(1);
2412}
2413
2414// ________________________________________________________________________________________________________________________________________________________
2415void AliAnalysisTaskIDFFTCF::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
59455a79 2416 Double_t radius, Double_t& sumPt, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
7f0c28ff
ML
2417{
2418 // fill list of tracks in cone around jet axis
2419
2420 sumPt = 0;
2421 Bool_t isBadMaxPt = kFALSE;
2422 Bool_t isBadMinPt = kTRUE;
2423
2424 Double_t jetMom[3];
2425 jet->PxPyPz(jetMom);
2426 TVector3 jet3mom(jetMom);
2427
2428 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
2429
2430 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
2431 if(!track)continue;
2432 Double_t trackMom[3];
2433 track->PxPyPz(trackMom);
2434 TVector3 track3mom(trackMom);
2435
2436 Double_t dR = jet3mom.DeltaR(track3mom);
2437
2438 if(dR<radius){
2439
2440 outputlist->Add(track);
2441
2442 sumPt += track->Pt();
2443
2444 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2445 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2446 }
2447 }
2448
2449 isBadPt = kFALSE;
2450 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2451 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2452
2453 outputlist->Sort();
2454}
2455
2456// _________________________________________________________________________________________________________________________________________________________________
59455a79 2457void AliAnalysisTaskIDFFTCF::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
7f0c28ff
ML
2458{
2459 // list of jet tracks from trackrefs
2460
2461 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
2462
2463 Bool_t isBadMaxPt = kFALSE;
2464 Bool_t isBadMinPt = kTRUE;
2465
2466 for(Int_t itrack=0; itrack<nTracks; itrack++) {
2467
2468 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
2469 if(!track){
2470 AliError("expected ref track not found ");
2471 continue;
2472 }
2473
2474 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
2475 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2476 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2477
2478 list->Add(track);
2479 }
2480
2481 isBadPt = kFALSE;
2482 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2483 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2484
2485 list->Sort();
2486}
2487
2488// _ ________________________________________________________________________________________________________________________________
2489void AliAnalysisTaskIDFFTCF::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
2490 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
2491{
2492 // associate generated and reconstructed tracks, fill TArrays of list indices
2493
2494 Int_t nTracksRec = tracksRec->GetSize();
2495 Int_t nTracksGen = tracksAODMCCharged->GetSize();
2496 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2497
2498
2499 if(!nTracksGen) return;
2500 if(!tca) return;
2501
2502 // set size
2503 indexAODTr.Set(nTracksGen);
2504 indexMCTr.Set(nTracksRec);
2505 isRefGen.Set(nTracksGen);
2506
2507 indexAODTr.Reset(-1);
2508 indexMCTr.Reset(-1);
2509 isRefGen.Reset(0);
2510
2511 // loop over reconstructed tracks, get generated track
2512
2513 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
2514
2515 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2516 if(!rectrack)continue;
2517 Int_t label = TMath::Abs(rectrack->GetLabel());
2518
2519 // find MC track in our list
2520 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
2521
2522 Int_t listIndex = -1;
2523 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
2524
2525 if(listIndex>=0){
2526
2527 indexAODTr[listIndex] = iRec;
2528 indexMCTr[iRec] = listIndex;
2529 }
2530 }
2531
2532
2533 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
2534
2535 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2536
2537 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
2538 if(!gentrack)continue;
2539 Int_t pdg = gentrack->GetPdgCode();
2540
2541 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
2542 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
2543 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
2544
2545 isRefGen[iGen] = kTRUE;
2546
2547 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2548
2549 if(iRec>=0){
2550 Float_t genPt = gentrack->Pt();
2551 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2552 if(vt){
2553 Float_t recPt = vt->Pt();
2554 fh2PtRecVsGen->Fill(genPt,recPt);
2555 }
2556 }
2557 }
2558 }
2559}
2560
2561// _____________________________________________________________________________________________________________________________________________
2562void AliAnalysisTaskIDFFTCF::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
59455a79 2563 const TArrayI& indexAODTr, const TArrayS& isRefGen, Int_t pdg, Bool_t scaleGFL){
7f0c28ff
ML
2564
2565 // fill QA for single track reconstruction efficiency
2566
2567 Int_t nTracksGen = tracksGen->GetSize();
2568
2569 if(!nTracksGen) return;
2570
2571 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2572
2573 if(isRefGen[iGen] != 1) continue; // select primaries
2574
2575 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
2576 if(!gentrack) continue;
2577 Double_t ptGen = gentrack->Pt();
2578 Double_t etaGen = gentrack->Eta();
2579 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2580
2581 // apply same acc & pt cuts as for FF
2582
2583 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
2584 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
2585 if(ptGen < fTrackPtCut) continue;
2586 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2587
2588 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
2589
2590 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2591
2592 if(iRec>=0 && trackQARec){
2593
2594 if(scaleGFL){
2595
2596 Double_t GFLcorr = 1;
2597 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2598 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2599
2600 Double_t weight = 1;
2601 if(GFLcorr > 0) weight = 1/GFLcorr;
2602
2603 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
2604 }
2605 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
2606 }
2607 }
2608}
2609
2610// ______________________________________________________________________________________________________________________________________________________
2611
2612void AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
2613 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
59455a79 2614 const TArrayS& isRefGen, TList* jetTrackListTR, Int_t pdg, Bool_t scaleGFL)
7f0c28ff
ML
2615{
2616 // fill objects for jet track reconstruction efficiency or secondaries contamination
2617 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
2618 // jetTrackListTR pointer: track refs if not NULL
2619
2620
2621 // ensure proper normalization, even for secondaries
2622 Double_t jetPtRec = jet->Pt();
2623 ffhistRec->FillFF(-1, jetPtRec, kTRUE);
2624
2625 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
2626 if(nTracksJet == 0) return;
2627
2628 TList* listRecTracks = new TList();
2629 listRecTracks->Clear();
2630
2631 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
2632
2633 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
2634 if(!gentrack)continue;
2635 // find jet track in gen tracks list
2636 Int_t iGen = tracksGen->IndexOf(gentrack);
2637
2638 if(iGen<0){
2639 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
2640 continue;
2641 }
2642
2643 if(isRefGen[iGen] != 1) continue; // select primaries
2644
2645 Double_t ptGen = gentrack->Pt();
2646 Double_t etaGen = gentrack->Eta();
2647 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2648
2649 // gen level acc & pt cuts - skip in case of track refs
2650 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
2651 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
2652 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
2653 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2654
2655
2656 Double_t ptRec = -1;
2657
2658 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2659 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
2660
2661 Bool_t isJetTrack = kFALSE;
2662 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
2663
2664 if(isRec){
2665
2666 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
2667 if(!rectrack) continue;
2668
2669 ptRec = rectrack->Pt();
2670
2671 if(jetTrackListTR){
2672 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
2673 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
2674 }
2675
2676 if(isJetTrack){
2677
2678 Double_t trackPt = ptRec;
2679 Bool_t incrementJetPt = kFALSE;
2680
2681 if(scaleGFL){
2682
2683 //Double_t weight = 1;
2684 //if(gentrack->GetPdgCode() == -2212) weight = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2685 //else if(gentrack->GetPdgCode() == -321) weight = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2686 //else weight = 1;
2687
2688 Double_t GFLcorr = 1;
2689 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2690 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2691
2692 Double_t weight = 1;
2693 if(GFLcorr > 0) weight = 1/GFLcorr;
2694
2695 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt, 0, kTRUE, weight );
2696 }
2697 else ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt );
2698
2699 listRecTracks->Add(rectrack);
2700 }
2701 }
2702 }
2703
2704 delete listRecTracks;
2705
2706}
2707
2708// ______________________________________________________________________________________________________________________________________________________
2709Float_t AliAnalysisTaskIDFFTCF::CalcJetArea(const Float_t etaJet, const Float_t rc) const
2710{
2711 // calculate area of jet with eta etaJet and radius rc
2712
2713 Float_t detamax = etaJet + rc;
2714 Float_t detamin = etaJet - rc;
2715 Float_t accmax = 0.0; Float_t accmin = 0.0;
2716 if(detamax > fTrackEtaMax){ // sector outside etamax
2717 Float_t h = fTrackEtaMax - etaJet;
2718 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2719 }
2720 if(detamin < fTrackEtaMin){ // sector outside etamin
2721 Float_t h = fTrackEtaMax + etaJet;
2722 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2723 }
2724 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
2725
2726 return areaJet;
2727
2728}
2729
2730//____________________________________________________________________________________________________________________________________________
2731void AliAnalysisTaskIDFFTCF::BookQAHistos(TList* list, AliFragFuncQATrackHistos** rec, TString strTitRec, AliFragFuncQATrackHistos** gen, TString strTitGen,
2732 AliFragFuncQATrackHistos** sec, TString strTitSec){
2733
2734 // book QA histos
2735
2736 if(strTitRec.Length()>0){
2737
2738 *rec = new AliFragFuncQATrackHistos(strTitRec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2739 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2740 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2741 fQATrackHighPtThreshold);
2742
2743 (*rec)->DefineHistos();
2744 (*rec)->AddToOutput(list);
2745 }
2746
2747 if(strTitGen.Length()>0){
2748
2749 *gen = new AliFragFuncQATrackHistos(strTitGen, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2750 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2751 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2752 fQATrackHighPtThreshold);
2753
2754 (*gen)->DefineHistos();
2755 (*gen)->AddToOutput(list);
2756 }
2757
2758 if(strTitSec.Length()>0){
2759
2760 *sec = new AliFragFuncQATrackHistos(strTitSec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2761 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2762 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2763 fQATrackHighPtThreshold);
2764
2765 (*sec)->DefineHistos();
2766 (*sec)->AddToOutput(list);
2767 }
2768
2769}
2770
2771//____________________________________________________________________________________________________________________________________________
2772void AliAnalysisTaskIDFFTCF::BookFFHistos(TList* list, AliFragFuncHistos** rec, TString strTitRec, AliFragFuncHistos** gen, TString strTitGen,
2773 AliFragFuncHistos** sec, TString strTitSec){
2774
2775 // book FF histos
2776
2777 if(strTitRec.Length()>0){
2778
2779 *rec = new AliFragFuncHistos(strTitRec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2780 fFFNBinsPt, fFFPtMin, fFFPtMax,
2781 fFFNBinsXi, fFFXiMin, fFFXiMax,
2782 fFFNBinsZ , fFFZMin , fFFZMax);
2783
2784 (*rec)->DefineHistos();
2785 (*rec)->AddToOutput(list);
2786 }
2787
2788 if(strTitGen.Length()>0){
2789
2790 *gen = new AliFragFuncHistos(strTitGen, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2791 fFFNBinsPt, fFFPtMin, fFFPtMax,
2792 fFFNBinsXi, fFFXiMin, fFFXiMax,
2793 fFFNBinsZ , fFFZMin , fFFZMax);
2794
2795 (*gen)->DefineHistos();
2796 (*gen)->AddToOutput(list);
2797 }
2798
2799 if(strTitSec.Length()>0){
2800
2801 *sec = new AliFragFuncHistos(strTitSec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2802 fFFNBinsPt, fFFPtMin, fFFPtMax,
2803 fFFNBinsXi, fFFXiMin, fFFXiMax,
2804 fFFNBinsZ , fFFZMin , fFFZMax);
2805
2806 (*sec)->DefineHistos();
2807 (*sec)->AddToOutput(list);
2808 }
2809}
2810
2811//____________________________________________________________________________________
59455a79 2812Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
7f0c28ff
ML
2813{
2814 // GEANT-FLUKA correction for pbar from Roberto via Benjamin
2815
2816 Double_t corr = 1. - 0.129758 * TMath::Exp(-pTmc * 0.679612);
2817 return corr;
2818}
2819
2820//____________________________________________________________________________________
59455a79 2821Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
7f0c28ff
ML
2822{
2823
2824 // GEANT-FLUKA correction for K- from Roberto via Benjamin
2825
2826 Double_t corr = TMath::Min((0.972865 + 0.0117093 * pTmc), 1.);
2827 return corr;
2828}