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