]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/UserTasks/AliAnalysisTaskIDFFTCF.cxx
- Added special multiplicity estimator for pp
[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
1653 centPercent = fAOD->GetHeader()->GetCentrality();
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
1859 if(isBadJet) continue;
1860
1861 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1862
1863 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
1864 if(!trackVP)continue;
1865
1866 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
1867 if(!aodtrack) continue;
1868
1bb86680 1869 Float_t trackPt = trackVP->Pt();
1870 Float_t trackEta = trackVP->Eta();
7f0c28ff
ML
1871
1872 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
1873
1874 if(fFFMode){
1875
1bb86680 1876 fFFHistosRecCutsInc->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
7f0c28ff
ML
1877
1878 AliIDFFUtils::FillTHn(fTHnIDFF, jetPt, aodtrack, fAOD, fTOFCutMode);
1879
1880 if(it==0){ // leading track, all jets
1bb86680 1881 fFFHistosRecLeadingTrack->FillFF( trackPt, trackEta, jetPt, kTRUE);
7f0c28ff
ML
1882 }
1883 }
1884
1885 }
1886
1887 delete jettracklist;
1888
1889 } // end: rec. jets after cuts
1890
1891 // loop again over rec jets:
1892 // PID histos (only for MC)
1893
1894 if(fBranchGenJets.Length()>0){ // check if we're running over MC
1895
1896 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // rec jets loop
1897
1898 if(fLeadingJets && ij>0) continue; // leading/all jets
1899
1900 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1901 if(!tca) continue;
1902
1903 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
1904 Float_t jetPt = jet->Pt();
1905
1906 // get tracks in jet
1907 TList* jettracklist = new TList();
1908 Double_t sumPt = 0.;
1909 Bool_t isBadJet = kFALSE;
1910
1911 if(GetFFRadius()<=0)
1912 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1913 else
1914 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet,
1915 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1916
1917 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
1918
1919 if(isBadJet) continue;
1920
1921 Bool_t incrementJetPt = kTRUE; // there could be 0 tracks in jet: first fill jet pt histo once
1bb86680 1922 fFFHistosRecCutsIncPi->FillFF(-1, -1, jetPt, incrementJetPt);
1923 fFFHistosRecCutsIncPro->FillFF(-1,-1, jetPt, incrementJetPt);
1924 fFFHistosRecCutsIncK->FillFF(-1, -1, jetPt, incrementJetPt);
1925 fFFHistosRecCutsIncEl->FillFF(-1, -1, jetPt, incrementJetPt);
1926 fFFHistosRecCutsIncMu->FillFF(-1, -1, jetPt, incrementJetPt);
7f0c28ff
ML
1927
1928 incrementJetPt = kFALSE;
1929
1930 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1bb86680 1931
7f0c28ff
ML
1932 AliAODTrack * rectrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
1933 if(!rectrack) continue;
1934
1935 Int_t label = TMath::Abs(rectrack->GetLabel());
1bb86680 1936 Float_t recPt = rectrack->Pt();
1937 Float_t recEta = rectrack->Eta();
7f0c28ff
ML
1938
1939 // find MC track in our list
1940 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
1941
1942 // Float_t genPt = gentrack->Pt();
1943
1944 if(gentrack){
1945 Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
1946
1bb86680 1947 if(mcpdg == 211) fFFHistosRecCutsIncPi->FillFF(recPt, recEta, jetPt, incrementJetPt);
1948 if(mcpdg == 2212) fFFHistosRecCutsIncPro->FillFF(recPt, recEta, jetPt, incrementJetPt);
1949 if(mcpdg == 321) fFFHistosRecCutsIncK->FillFF(recPt, recEta, jetPt, incrementJetPt);
1950 if(mcpdg == 11) fFFHistosRecCutsIncEl->FillFF(recPt, recEta, jetPt, incrementJetPt);
1951 if(mcpdg == 13) fFFHistosRecCutsIncMu->FillFF(recPt, recEta, jetPt, incrementJetPt);
7f0c28ff
ML
1952 }
1953 }
1954 delete jettracklist;
1955
1956 } // end: rec. jets after cuts
1957 } // MC
1958
1959
1960 // generated jets
1961 for(Int_t ij=0; ij<nGenJets; ++ij){
1962
1963 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
1964 if(!jet)continue;
1965
1966 Float_t jetPt = jet->Pt();
1967
1968 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1969
1970 if(fLeadingJets && ij>0) continue; // leading/all jets
1971
1972 if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1973
1974 TList* jettracklist = new TList();
1975 Double_t sumPt = 0.;
1976 Bool_t isBadJet = kFALSE;
1977
1978 if(GetFFRadius()<=0){
1979 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1980 } else {
1981 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1982 }
1983
1984 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
1985
1986 if(isBadJet) continue;
1987
1988 Bool_t incrementJetPt = kTRUE; // first fill jet pt histo once
1bb86680 1989 fFFHistosGenInc->FillFF(-1, -1, jetPt, incrementJetPt);
1990 fFFHistosGenIncPi->FillFF(-1, -1, jetPt, incrementJetPt);
1991 fFFHistosGenIncPro->FillFF(-1,-1, jetPt, incrementJetPt);
1992 fFFHistosGenIncK->FillFF(-1, -1, jetPt, incrementJetPt);
1993 fFFHistosGenIncEl->FillFF(-1, -1, jetPt, incrementJetPt);
1994 fFFHistosGenIncMu->FillFF(-1, -1, jetPt, incrementJetPt);
7f0c28ff
ML
1995
1996 incrementJetPt = kFALSE;
1997
1998 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1999
2000 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
2001 if(!trackVP)continue;
1bb86680 2002
2003 Float_t trackPt = trackVP->Pt();
2004 Float_t trackEta = trackVP->Eta();
7f0c28ff
ML
2005
2006 if(fFFMode){
2007
1bb86680 2008 fFFHistosGenInc->FillFF( trackPt, trackEta, jetPt, incrementJetPt);
7f0c28ff
ML
2009
2010 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*>(trackVP);
2011
2012 if(gentrack){
2013
2014 Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
2015
1bb86680 2016 if(mcpdg == 211) fFFHistosGenIncPi->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2017 if(mcpdg == 2212) fFFHistosGenIncPro->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2018 if(mcpdg == 321) fFFHistosGenIncK->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2019 if(mcpdg == 11) fFFHistosGenIncEl->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2020 if(mcpdg == 13) fFFHistosGenIncMu->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
7f0c28ff
ML
2021 }
2022 }
2023
2024 if(it==0){ // leading track, all jets
1bb86680 2025 fFFHistosGenLeadingTrack->FillFF( trackPt, trackEta, jetPt, kTRUE);
7f0c28ff
ML
2026 }
2027
2028 } // track loop
2029
2030 delete jettracklist;
2031
2032 } // gen jets loop
2033 } // end: QA, FF and intra-jet
2034
2035
2036 // ____ efficiency _______________________________
2037
2038 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
2039
2040 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
2041 TArrayI indexAODTr;
2042 TArrayS isGenPrim;
2043
2044 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
2045 TArrayI indexMCTr;
2046
2047 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
2048 TArrayI indexAODTrSec;
2049 TArrayS isGenSec;
2050 TArrayI indexMCTrSec;
2051
2052 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
2053 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
2054
2055 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
2056 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
2057
2058
2059 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
2060 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
2061
2062 // associate gen and rec tracks, store indices in TArrays
2063 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
2064 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
2065
2066 // single track eff
2067 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
2068 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenPi,fQATrackHistosRecEffRecPi,fTracksAODMCCharged,indexAODTr,isGenPrim, 211);
2069 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenPro,fQATrackHistosRecEffRecPro,fTracksAODMCCharged,indexAODTr,isGenPrim, 2212);
2070 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenK,fQATrackHistosRecEffRecK,fTracksAODMCCharged,indexAODTr,isGenPrim, 321);
2071 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenEl,fQATrackHistosRecEffRecEl,fTracksAODMCCharged,indexAODTr,isGenPrim, 11);
2072 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenMu,fQATrackHistosRecEffRecMu,fTracksAODMCCharged,indexAODTr,isGenPrim, 13);
2073 if(fQAMode&1) FillSingleTrackHistosRecGen(0,fQATrackHistosRecEffRecProGFL,fTracksAODMCCharged,indexAODTr,isGenPrim, 2212,kTRUE);
2074 if(fQAMode&1) FillSingleTrackHistosRecGen(0,fQATrackHistosRecEffRecKGFL,fTracksAODMCCharged,indexAODTr,isGenPrim, 321,kTRUE);
2075
2076 // secondaries
2077 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
1bb86680 2078 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,0,kFALSE,kTRUE);
7f0c28ff
ML
2079 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPi,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,211);
2080 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPro,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212);
2081 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecK,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321);
2082 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecEl,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,11);
2083 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecMu,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,13);
2084 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kTRUE);
2085 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kTRUE);
7f0c28ff 2086
1bb86680 2087 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPiSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,211,kFALSE,kTRUE);
2088 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kFALSE,kTRUE);
2089 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kFALSE,kTRUE);
2090 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecElSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,11,kFALSE,kTRUE);
2091 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecMuSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,13,kFALSE,kTRUE);
2092 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProGFLSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kTRUE,kTRUE);
2093 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKGFLSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kTRUE,kTRUE);
2094
7f0c28ff
ML
2095 // jet track eff
2096 Double_t sumPtGenLeadingJetRecEff = 0;
2097 Double_t sumPtGenLeadingJetSec = 0;
2098 Double_t sumPtRecLeadingJetRecEff = 0;
2099
2100 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
2101
2102 if(fLeadingJets && ij>0) continue; // leading/all jets
2103
2104 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
2105
2106 Bool_t isBadJetGenPrim = kFALSE;
2107 Bool_t isBadJetGenSec = kFALSE;
2108 Bool_t isBadJetRec = kFALSE;
2109
2110 // for efficiency: gen tracks from pointing with gen/rec jet
2111 TList* jettracklistGenPrim = new TList();
2112
2113 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
2114 // note : FF recEff gen histos will be somewhat useless in this approach
2115
2116 if(GetFFRadius() >0)
2117 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
2118 else
2119 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
2120
2121 TList* jettracklistGenSec = new TList();
2122 if(GetFFRadius() >0)
2123 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2124 else
2125 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2126
2127
2128 // bin efficiency in jet pt bins using rec tracks
2129 TList* jettracklistRec = new TList();
2130 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2131 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2132
2133
2134 Double_t jetEta = jet->Eta();
2135 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
2136
2137 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
2138 if(GetFFMinNTracks()>0 && jettracklistGenSec->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
2139 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
2140
2141 if(isBadJetRec) continue;
2142
2143 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
2144
2145 if(fFFMode){
2146
2147 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0);
2148 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec);
2149
2150 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecPi,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,211);
2151 else FillJetTrackHistosRec(fFFHistosRecEffRecPi,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,211);
2152
2153 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecPro,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,2212);
2154 else FillJetTrackHistosRec(fFFHistosRecEffRecPro,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,2212);
2155
2156 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecK,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,321);
2157 else FillJetTrackHistosRec(fFFHistosRecEffRecK,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,321);
2158
2159 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecEl,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,11);
2160 else FillJetTrackHistosRec(fFFHistosRecEffRecEl,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,11);
2161
2162 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecMu,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,13);
2163 else FillJetTrackHistosRec(fFFHistosRecEffRecMu,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,13);
2164
2165 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecProGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,2212,kTRUE);
2166 else FillJetTrackHistosRec(fFFHistosRecEffRecProGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,2212,kTRUE);
2167
2168 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecKGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,321,kTRUE);
2169 else FillJetTrackHistosRec(fFFHistosRecEffRecKGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,321,kTRUE);
2170
2171
2172
2173 // secondaries: use jet pt from primaries
2174 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0);
2175 else FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec);
2176
1bb86680 2177 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,0,kFALSE,kTRUE);
2178 else FillJetTrackHistosRec(fFFHistosSecRecSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,kFALSE,kTRUE);
2179
7f0c28ff
ML
2180 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,211);
2181 else FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,211);
2182
2183 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPro,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212);
2184 else FillJetTrackHistosRec(fFFHistosSecRecPro,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212);
2185
2186 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecK,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321);
2187 else FillJetTrackHistosRec(fFFHistosSecRecK,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321);
2188
2189 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecEl,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,11);
2190 else FillJetTrackHistosRec(fFFHistosSecRecEl,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,11);
2191
2192 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecMu,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,13);
2193 else FillJetTrackHistosRec(fFFHistosSecRecMu,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,13);
2194
2195 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kTRUE);
2196 else FillJetTrackHistosRec(fFFHistosSecRecProGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kTRUE);
2197
2198 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kTRUE);
2199 else FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kTRUE);
1bb86680 2200
2201
2202 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPiSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,211,kFALSE,kTRUE);
2203 else FillJetTrackHistosRec(fFFHistosSecRecPiSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,211,kFALSE,kTRUE);
2204
2205 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kFALSE,kTRUE);
2206 else FillJetTrackHistosRec(fFFHistosSecRecProSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kFALSE,kTRUE);
2207
2208 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kFALSE,kTRUE);
2209 else FillJetTrackHistosRec(fFFHistosSecRecKSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kFALSE,kTRUE);
2210
2211 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecElSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,11,kFALSE,kTRUE);
2212 else FillJetTrackHistosRec(fFFHistosSecRecElSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,11,kFALSE,kTRUE);
2213
2214 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecMuSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,13,kFALSE,kTRUE);
2215 else FillJetTrackHistosRec(fFFHistosSecRecMuSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,13,kFALSE,kTRUE);
2216
2217 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kTRUE,kTRUE);
2218 else FillJetTrackHistosRec(fFFHistosSecRecProGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kTRUE,kTRUE);
2219
2220 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kTRUE,kTRUE);
2221 else FillJetTrackHistosRec(fFFHistosSecRecKGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kTRUE,kTRUE);
2222
2223
2224
7f0c28ff
ML
2225 }
2226
2227 delete jettracklistGenPrim;
2228 delete jettracklistGenSec;
2229 delete jettracklistRec;
2230
2231 } // jet loop
2232 } // eff mode
2233
2234
2235 //___________________
2236
2237 fTracksRecCuts->Clear();
2238 fTracksGen->Clear();
2239 fTracksAODMCCharged->Clear();
2240 fTracksAODMCChargedSec->Clear();
2241 fTracksRecQualityCuts->Clear();
2242
2243 fJetsRec->Clear();
2244 fJetsRecCuts->Clear();
2245 fJetsGen->Clear();
2246 fJetsRecEff->Clear();
2247
2248 //Post output data.
2249 PostData(1, fCommonHistList);
2250}
2251
2252//______________________________________________________________
2253void AliAnalysisTaskIDFFTCF::Terminate(Option_t *)
2254{
2255 // terminated
2256
2257 if(fDebug > 1) printf("AliAnalysisTaskIDFFTCF::Terminate() \n");
2258}
2259
2260//_________________________________________________________________________________
2261Int_t AliAnalysisTaskIDFFTCF::GetListOfTracks(TList *list, Int_t type)
2262{
2263 // fill list of tracks selected according to type
2264
2265 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
2266
2267 if(!list){
2268 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2269 return -1;
2270 }
2271
2272 if(!fAOD) return -1;
2273
2274 if(!fAOD->GetTracks()) return 0;
2275
2276 if(type==kTrackUndef) return 0;
2277
2278 Int_t iCount = 0;
2279
2280
2281 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD){
2282
2283 // all rec. tracks, esd filter mask, eta range
2284
2285 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
2286 AliAODTrack *tr = fAOD->GetTrack(it);
2287
2288 if(type == kTrackAODCuts || type==kTrackAODQualityCuts){
2289
2290 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2291
2292 //new cut on TPC
2293 if(fTPCCutMode==kPIDN && !AliIDFFUtils::TPCCutPIDN(tr)){
2294 continue;
2295 }
2296 if(fTPCCutMode==kMIGeo && !AliIDFFUtils::TPCCutMIGeo(tr, fAOD, fStream)){
2297 continue;
2298 }
2299
2300 if(type == kTrackAODCuts){
2301 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2302 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2303 if(tr->Pt() < fTrackPtCut) continue;
2304 }
2305 }
2306 list->Add(tr);
2307 iCount++;
2308 }
2309 }
2310 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2311 // kine particles, all or rather charged
2312 if(!fMCEvent) return iCount;
2313
2314 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2315 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2316
2317 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2318 if(part->Charge()==0) continue;
2319
2320 if(type == kTrackKineChargedAcceptance &&
2321 ( part->Eta() < fTrackEtaMin
2322 || part->Eta() > fTrackEtaMax
2323 || part->Phi() < fTrackPhiMin
2324 || part->Phi() > fTrackPhiMax
2325 || part->Pt() < fTrackPtCut)) continue;
2326 }
2327
2328 list->Add(part);
2329 iCount++;
2330 }
2331 }
2332 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
2333 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2334 if(!fAOD) return -1;
2335
2336 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2337 if(!tca)return iCount;
2338
2339 for(int it=0; it<tca->GetEntriesFast(); ++it){
2340 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2341 if(!part)continue;
2342 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
2343 if((type == kTrackAODMCChargedSec) && part->IsPhysicalPrimary())continue;
2344
2345 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
2346 if(part->Charge()==0) continue;
2347
2348 if(type==kTrackAODMCChargedSec){
2349
2350 Int_t iMother = part->GetMother();
2351 if(iMother < 0) continue; // throw out PYTHIA stack partons + incoming protons
2352 }
2353
2354
2355 if(type==kTrackAODMCChargedAcceptance &&
2356 ( part->Eta() > fTrackEtaMax
2357 || part->Eta() < fTrackEtaMin
2358 || part->Phi() > fTrackPhiMax
2359 || part->Phi() < fTrackPhiMin
2360 || part->Pt() < fTrackPtCut)) continue;
2361 }
2362
2363 list->Add(part);
2364 iCount++;
2365 }
2366 }
2367
2368 list->Sort();
2369 return iCount;
2370
2371}
2372// _______________________________________________________________________________
2373Int_t AliAnalysisTaskIDFFTCF::GetListOfJets(TList *list, Int_t type)
2374{
2375 // fill list of jets selected according to type
2376
2377 if(!list){
2378 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2379 return -1;
2380 }
2381
2382 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
2383
2384 if(fBranchRecJets.Length()==0){
2385 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
2386 if(fDebug>1)fAOD->Print();
2387 return 0;
2388 }
2389
2390 TClonesArray *aodRecJets = 0;
2391 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
2392 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
2393 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
2394
2395 if(!aodRecJets){
2396 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
2397 if(fDebug>1)fAOD->Print();
2398 return 0;
2399 }
2400
2401 // Reorder jet pt and fill new temporary AliAODJet objects
2402 Int_t nRecJets = 0;
2403
2404 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
2405
2406 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
2407 if(!tmp) continue;
2408
2409 if( tmp->Pt() < fJetPtCut ) continue;
2410 if( type == kJetsRecAcceptance &&
2411 ( tmp->Eta() < fJetEtaMin
2412 || tmp->Eta() > fJetEtaMax
2413 || tmp->Phi() < fJetPhiMin
2414 || tmp->Phi() > fJetPhiMax )) continue;
2415
2416
2417 list->Add(tmp);
2418 nRecJets++;
2419 }
2420
2421 list->Sort();
2422
2423 return nRecJets;
2424 }
2425 else if(type == kJetsKine || type == kJetsKineAcceptance){
2426
2427 // generated jets
2428 Int_t nGenJets = 0;
2429
2430 if(!fMCEvent){
2431 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
2432 return 0;
2433 }
2434
2435 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2436 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2437 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2438
2439 if(!pythiaGenHeader){
2440 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2441
2442 if(!hijingGenHeader){
2443 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
2444 return 0;
2445 }else{
2446 TLorentzVector mom[4];
2447 AliAODJet* jet[4];
2448 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
2449
2450 for(Int_t i=0; i<2; ++i){
2451 if(!mom[i].Pt()) continue;
2452 jet[i] = new AliAODJet(mom[i]);
2453
2454 if( type == kJetsKineAcceptance &&
2455 ( jet[i]->Eta() < fJetEtaMin
2456 || jet[i]->Eta() > fJetEtaMax
2457 || jet[i]->Phi() < fJetPhiMin
2458 || jet[i]->Phi() > fJetPhiMax )) continue;
2459
2460 list->Add(jet[i]);
2461 nGenJets++;
2462 }
2463 list->Sort();
2464 return nGenJets;
2465 }
2466 }
2467
2468 // fetch the pythia generated jets
2469 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
2470
2471 Float_t p[4];
2472 AliAODJet *jet = new AliAODJet();
2473 pythiaGenHeader->TriggerJet(ip, p);
2474 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
2475
2476 if( type == kJetsKineAcceptance &&
2477 ( jet->Eta() < fJetEtaMin
2478 || jet->Eta() > fJetEtaMax
2479 || jet->Phi() < fJetPhiMin
2480 || jet->Phi() > fJetPhiMax )) continue;
2481
2482 list->Add(jet);
2483 nGenJets++;
2484 }
2485 list->Sort();
2486 return nGenJets;
2487 }
2488 else if(type == kJetsGen || type == kJetsGenAcceptance ){
2489
2490 if(fBranchGenJets.Length()==0){
2491 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
2492 return 0;
2493 }
2494
2495 TClonesArray *aodGenJets = 0;
2496 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
2497 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
2498 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
2499
2500 if(!aodGenJets){
2501 if(fDebug>0){
2502 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
2503 }
2504 if(fDebug>1)fAOD->Print();
2505 return 0;
2506 }
2507
2508 Int_t nGenJets = 0;
2509
2510 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
2511
2512 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
2513 if(!tmp) continue;
2514
2515 if( tmp->Pt() < fJetPtCut ) continue;
2516 if( type == kJetsGenAcceptance &&
2517 ( tmp->Eta() < fJetEtaMin
2518 || tmp->Eta() > fJetEtaMax
2519 || tmp->Phi() < fJetPhiMin
2520 || tmp->Phi() > fJetPhiMax )) continue;
2521
2522 list->Add(tmp);
2523 nGenJets++;
2524 }
2525 list->Sort();
2526 return nGenJets;
2527 }
2528 else{
2529 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
2530 return 0;
2531 }
2532}
2533
2534// _________________________________________________________________________________________________________
1bb86680 2535void AliAnalysisTaskIDFFTCF::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
7f0c28ff
ML
2536{
2537 // Set properties of THnSparse
2538
2539 for(Int_t i=0; i<dim; i++){
2540 h->GetAxis(i)->SetTitle(labels[i]);
2541 h->GetAxis(i)->SetTitleColor(1);
2542 }
2543}
2544
2545// __________________________________________________________________________________________
2546void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y)
2547{
2548 //Set properties of histos (x and y title)
2549
2550 h->SetXTitle(x);
2551 h->SetYTitle(y);
2552 h->GetXaxis()->SetTitleColor(1);
2553 h->GetYaxis()->SetTitleColor(1);
2554}
2555
2556// _________________________________________________________________________________________________________
2557void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y, const char* z)
2558{
2559 //Set properties of histos (x,y and z title)
2560
2561 h->SetXTitle(x);
2562 h->SetYTitle(y);
2563 h->SetZTitle(z);
2564 h->GetXaxis()->SetTitleColor(1);
2565 h->GetYaxis()->SetTitleColor(1);
2566 h->GetZaxis()->SetTitleColor(1);
2567}
2568
2569// ________________________________________________________________________________________________________________________________________________________
2570void AliAnalysisTaskIDFFTCF::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
1bb86680 2571 const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
7f0c28ff
ML
2572{
2573 // fill list of tracks in cone around jet axis
2574
2575 sumPt = 0;
2576 Bool_t isBadMaxPt = kFALSE;
2577 Bool_t isBadMinPt = kTRUE;
2578
2579 Double_t jetMom[3];
2580 jet->PxPyPz(jetMom);
2581 TVector3 jet3mom(jetMom);
2582
2583 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
2584
2585 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
2586 if(!track)continue;
2587 Double_t trackMom[3];
2588 track->PxPyPz(trackMom);
2589 TVector3 track3mom(trackMom);
2590
2591 Double_t dR = jet3mom.DeltaR(track3mom);
2592
2593 if(dR<radius){
2594
2595 outputlist->Add(track);
2596
2597 sumPt += track->Pt();
2598
2599 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2600 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2601 }
2602 }
2603
2604 isBadPt = kFALSE;
2605 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2606 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2607
2608 outputlist->Sort();
2609}
2610
2611// _________________________________________________________________________________________________________________________________________________________________
1bb86680 2612void AliAnalysisTaskIDFFTCF::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
7f0c28ff
ML
2613{
2614 // list of jet tracks from trackrefs
2615
2616 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
2617
2618 Bool_t isBadMaxPt = kFALSE;
2619 Bool_t isBadMinPt = kTRUE;
2620
2621 for(Int_t itrack=0; itrack<nTracks; itrack++) {
2622
2623 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
2624 if(!track){
2625 AliError("expected ref track not found ");
2626 continue;
2627 }
2628
2629 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
2630 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2631 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2632
2633 list->Add(track);
2634 }
2635
2636 isBadPt = kFALSE;
2637 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2638 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2639
2640 list->Sort();
2641}
2642
2643// _ ________________________________________________________________________________________________________________________________
2644void AliAnalysisTaskIDFFTCF::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
2645 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
2646{
2647 // associate generated and reconstructed tracks, fill TArrays of list indices
2648
2649 Int_t nTracksRec = tracksRec->GetSize();
2650 Int_t nTracksGen = tracksAODMCCharged->GetSize();
2651 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2652
2653
2654 if(!nTracksGen) return;
2655 if(!tca) return;
2656
2657 // set size
2658 indexAODTr.Set(nTracksGen);
2659 indexMCTr.Set(nTracksRec);
2660 isRefGen.Set(nTracksGen);
2661
2662 indexAODTr.Reset(-1);
2663 indexMCTr.Reset(-1);
2664 isRefGen.Reset(0);
2665
2666 // loop over reconstructed tracks, get generated track
2667
2668 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
2669
2670 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2671 if(!rectrack)continue;
2672 Int_t label = TMath::Abs(rectrack->GetLabel());
2673
2674 // find MC track in our list
2675 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
2676
2677 Int_t listIndex = -1;
2678 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
2679
2680 if(listIndex>=0){
2681
2682 indexAODTr[listIndex] = iRec;
2683 indexMCTr[iRec] = listIndex;
2684 }
2685 }
2686
2687
2688 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
2689
2690 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2691
2692 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
2693 if(!gentrack)continue;
2694 Int_t pdg = gentrack->GetPdgCode();
2695
2696 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
2697 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
2698 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
2699
2700 isRefGen[iGen] = kTRUE;
2701
2702 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2703
2704 if(iRec>=0){
2705 Float_t genPt = gentrack->Pt();
2706 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2707 if(vt){
2708 Float_t recPt = vt->Pt();
2709 fh2PtRecVsGen->Fill(genPt,recPt);
2710 }
2711 }
2712 }
2713 }
2714}
2715
2716// _____________________________________________________________________________________________________________________________________________
2717void AliAnalysisTaskIDFFTCF::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
1bb86680 2718 const TArrayI& indexAODTr, const TArrayS& isRefGen, const Int_t pdg, const Bool_t scaleGFL,
2719 const Bool_t scaleStrangeness){
7f0c28ff
ML
2720
2721 // fill QA for single track reconstruction efficiency
1bb86680 2722
7f0c28ff
ML
2723 Int_t nTracksGen = tracksGen->GetSize();
2724
2725 if(!nTracksGen) return;
2726
2727 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2728
2729 if(isRefGen[iGen] != 1) continue; // select primaries
2730
2731 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
2732 if(!gentrack) continue;
2733 Double_t ptGen = gentrack->Pt();
2734 Double_t etaGen = gentrack->Eta();
2735 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2736
2737 // apply same acc & pt cuts as for FF
2738
2739 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
2740 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
2741 if(ptGen < fTrackPtCut) continue;
2742 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2743
2744 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
2745
2746 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2747
2748 if(iRec>=0 && trackQARec){
2749
1bb86680 2750 if(scaleGFL || scaleStrangeness){
7f0c28ff 2751
7f0c28ff 2752 Double_t weight = 1;
7f0c28ff 2753
1bb86680 2754 if(scaleGFL){
2755 Double_t GFLcorr = 1;
2756 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2757 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2758
2759 if(GFLcorr > 0) weight *= 1/GFLcorr;
2760 }
2761 if(scaleStrangeness){
2762 Double_t strCorr = GetMCStrangenessFactorCMS(gentrack);
2763 weight *= strCorr;
2764 }
2765
7f0c28ff
ML
2766 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
2767 }
2768 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
2769 }
2770 }
2771}
2772
2773// ______________________________________________________________________________________________________________________________________________________
2774
2775void AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
2776 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
1bb86680 2777 const TArrayS& isRefGen, TList* jetTrackListTR, const Int_t pdg,
2778 const Bool_t scaleGFL, const Bool_t scaleStrangeness)
7f0c28ff
ML
2779{
2780 // fill objects for jet track reconstruction efficiency or secondaries contamination
2781 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
2782 // jetTrackListTR pointer: track refs if not NULL
2783
2784
2785 // ensure proper normalization, even for secondaries
2786 Double_t jetPtRec = jet->Pt();
1bb86680 2787 //TVector3 jet3Mom = (jet->MomentumVector())->Vect();
2788
2789 ffhistRec->FillFF(-1, -1, jetPtRec, kTRUE);
7f0c28ff
ML
2790
2791 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
2792 if(nTracksJet == 0) return;
2793
2794 TList* listRecTracks = new TList();
2795 listRecTracks->Clear();
2796
2797 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
2798
2799 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
2800 if(!gentrack)continue;
2801 // find jet track in gen tracks list
2802 Int_t iGen = tracksGen->IndexOf(gentrack);
2803
2804 if(iGen<0){
2805 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
2806 continue;
2807 }
2808
2809 if(isRefGen[iGen] != 1) continue; // select primaries
2810
2811 Double_t ptGen = gentrack->Pt();
2812 Double_t etaGen = gentrack->Eta();
2813 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2814
2815 // gen level acc & pt cuts - skip in case of track refs
2816 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
2817 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
2818 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
2819 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2820
2821
1bb86680 2822 Double_t ptRec = -1;
2823 Double_t etaRec = -1;
7f0c28ff
ML
2824
2825 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2826 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
2827
2828 Bool_t isJetTrack = kFALSE;
2829 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
2830
2831 if(isRec){
2832
2833 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
2834 if(!rectrack) continue;
2835
1bb86680 2836 ptRec = rectrack->Pt();
2837 etaRec = rectrack->Eta();
2838
7f0c28ff
ML
2839 if(jetTrackListTR){
2840 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
2841 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
2842 }
2843
2844 if(isJetTrack){
2845
1bb86680 2846 Double_t trackPt = ptRec;
2847 Double_t trackEta = etaRec;
7f0c28ff
ML
2848 Bool_t incrementJetPt = kFALSE;
2849
1bb86680 2850 if(scaleGFL || scaleStrangeness){
7f0c28ff
ML
2851
2852 Double_t weight = 1;
7f0c28ff 2853
1bb86680 2854 if(scaleGFL){
2855 Double_t GFLcorr = 1;
2856 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2857 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2858
2859 if(GFLcorr > 0) weight *= 1/GFLcorr;
2860 }
2861 if(scaleStrangeness){
2862 Double_t strCorr = GetMCStrangenessFactorCMS(gentrack);
2863 weight *= strCorr;
2864 }
2865
2866 ffhistRec->FillFF( trackPt, trackEta, jetPtRec, incrementJetPt, 0, kTRUE, weight );
7f0c28ff 2867 }
1bb86680 2868 else ffhistRec->FillFF( trackPt, trackEta, jetPtRec, incrementJetPt);
7f0c28ff
ML
2869
2870 listRecTracks->Add(rectrack);
2871 }
2872 }
2873 }
2874
2875 delete listRecTracks;
2876
2877}
2878
2879// ______________________________________________________________________________________________________________________________________________________
2880Float_t AliAnalysisTaskIDFFTCF::CalcJetArea(const Float_t etaJet, const Float_t rc) const
2881{
2882 // calculate area of jet with eta etaJet and radius rc
2883
2884 Float_t detamax = etaJet + rc;
2885 Float_t detamin = etaJet - rc;
2886 Float_t accmax = 0.0; Float_t accmin = 0.0;
2887 if(detamax > fTrackEtaMax){ // sector outside etamax
2888 Float_t h = fTrackEtaMax - etaJet;
2889 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2890 }
2891 if(detamin < fTrackEtaMin){ // sector outside etamin
2892 Float_t h = fTrackEtaMax + etaJet;
2893 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2894 }
2895 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
2896
2897 return areaJet;
2898
2899}
2900
2901//____________________________________________________________________________________________________________________________________________
2902void AliAnalysisTaskIDFFTCF::BookQAHistos(TList* list, AliFragFuncQATrackHistos** rec, TString strTitRec, AliFragFuncQATrackHistos** gen, TString strTitGen,
2903 AliFragFuncQATrackHistos** sec, TString strTitSec){
2904
2905 // book QA histos
2906
2907 if(strTitRec.Length()>0){
2908
2909 *rec = new AliFragFuncQATrackHistos(strTitRec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2910 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2911 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2912 fQATrackHighPtThreshold);
2913
2914 (*rec)->DefineHistos();
2915 (*rec)->AddToOutput(list);
2916 }
2917
2918 if(strTitGen.Length()>0){
2919
2920 *gen = new AliFragFuncQATrackHistos(strTitGen, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2921 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2922 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2923 fQATrackHighPtThreshold);
2924
2925 (*gen)->DefineHistos();
2926 (*gen)->AddToOutput(list);
2927 }
2928
2929 if(strTitSec.Length()>0){
2930
2931 *sec = new AliFragFuncQATrackHistos(strTitSec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2932 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2933 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2934 fQATrackHighPtThreshold);
2935
2936 (*sec)->DefineHistos();
2937 (*sec)->AddToOutput(list);
2938 }
2939
2940}
2941
2942//____________________________________________________________________________________________________________________________________________
2943void AliAnalysisTaskIDFFTCF::BookFFHistos(TList* list, AliFragFuncHistos** rec, TString strTitRec, AliFragFuncHistos** gen, TString strTitGen,
2944 AliFragFuncHistos** sec, TString strTitSec){
2945
2946 // book FF histos
2947
2948 if(strTitRec.Length()>0){
2949
2950 *rec = new AliFragFuncHistos(strTitRec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2951 fFFNBinsPt, fFFPtMin, fFFPtMax,
2952 fFFNBinsXi, fFFXiMin, fFFXiMax,
2953 fFFNBinsZ , fFFZMin , fFFZMax);
2954
2955 (*rec)->DefineHistos();
2956 (*rec)->AddToOutput(list);
2957 }
2958
2959 if(strTitGen.Length()>0){
2960
2961 *gen = new AliFragFuncHistos(strTitGen, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2962 fFFNBinsPt, fFFPtMin, fFFPtMax,
2963 fFFNBinsXi, fFFXiMin, fFFXiMax,
2964 fFFNBinsZ , fFFZMin , fFFZMax);
2965
2966 (*gen)->DefineHistos();
2967 (*gen)->AddToOutput(list);
2968 }
2969
2970 if(strTitSec.Length()>0){
2971
2972 *sec = new AliFragFuncHistos(strTitSec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2973 fFFNBinsPt, fFFPtMin, fFFPtMax,
2974 fFFNBinsXi, fFFXiMin, fFFXiMax,
2975 fFFNBinsZ , fFFZMin , fFFZMax);
2976
2977 (*sec)->DefineHistos();
2978 (*sec)->AddToOutput(list);
2979 }
2980}
2981
2982//____________________________________________________________________________________
1bb86680 2983Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(const Double_t pTmc)
7f0c28ff
ML
2984{
2985 // GEANT-FLUKA correction for pbar from Roberto via Benjamin
2986
2987 Double_t corr = 1. - 0.129758 * TMath::Exp(-pTmc * 0.679612);
2988 return corr;
2989}
2990
2991//____________________________________________________________________________________
1bb86680 2992Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(const Double_t pTmc)
7f0c28ff
ML
2993{
2994
2995 // GEANT-FLUKA correction for K- from Roberto via Benjamin
2996
2997 Double_t corr = TMath::Min((0.972865 + 0.0117093 * pTmc), 1.);
2998 return corr;
2999}
1bb86680 3000
3001//__________________________________________________________________________________________________
3002Double_t AliAnalysisTaskIDFFTCF::GetMCStrangenessFactorCMS(AliAODMCParticle* daughter)
3003{
3004 // strangeness ratio MC/data as function of mother pt from CMS data in |eta|<2.0
3005
3006 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3007 if(!tca) return 1;
3008
3009 AliAODMCParticle* currentMother = daughter;
3010 AliAODMCParticle* currentDaughter = daughter;
3011
3012
3013 // find first primary mother K0s, Lambda or Xi
3014 while(1){
3015
3016 Int_t daughterPDG = currentDaughter->GetPdgCode();
3017
3018 Int_t motherLabel = currentDaughter->GetMother();
3019 if(motherLabel >= tca->GetEntriesFast()){ // protection
3020 currentMother = currentDaughter;
3021 break;
3022 }
3023
3024 currentMother = (AliAODMCParticle*) tca->At(motherLabel);
3025
3026 if(!currentMother){
3027 currentMother = currentDaughter;
3028 break;
3029 }
3030
3031 Int_t motherPDG = currentMother->GetPdgCode();
3032
3033 // phys. primary found ?
3034 if(currentMother->IsPhysicalPrimary()) break;
3035
3036 if(TMath::Abs(daughterPDG) == 321){ // K+/K- e.g. from phi (ref data not feeddown corrected)
3037 currentMother = currentDaughter; break;
3038 }
3039 if(TMath::Abs(motherPDG) == 310 ){ // K0s e.g. from phi (ref data not feeddown corrected)
3040 break;
3041 }
3042 if(TMath::Abs(motherPDG) == 3212 && TMath::Abs(daughterPDG) == 3122){ // mother Sigma0, daughter Lambda (this case not included in feeddown corr.)
3043 currentMother = currentDaughter; break;
3044 }
3045
3046 currentDaughter = currentMother;
3047 }
3048
3049
3050 Int_t motherPDG = currentMother->GetPdgCode();
3051 Double_t motherPt = currentMother->Pt();
3052
3053 Double_t fac = 1;
3054
3055 if(TMath::Abs(motherPDG) == 310 || TMath::Abs(motherPDG)==321){ // K0s / K+ / K-
3056
3057 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.768049;
3058 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.732933;
3059 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.650298;
3060 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.571332;
3061 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.518734;
3062 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.492543;
3063 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.482704;
3064 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.488056;
3065 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.488861;
3066 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.492862;
3067 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.504332;
3068 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.501858;
3069 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.512970;
3070 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.524131;
3071 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.539130;
3072 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.554101;
3073 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.560348;
3074 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.568869;
3075 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.583310;
3076 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.604818;
3077 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.632630;
3078 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.710070;
3079 else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.736365;
3080 else if(8.00 <= motherPt && motherPt < 10.00) fac = 0.835865;
3081 }
3082
3083 if(TMath::Abs(motherPDG) == 3122){ // Lambda
3084
3085 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.645162;
3086 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.627431;
3087 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.457136;
3088 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.384369;
3089 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.330597;
3090 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.309571;
3091 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.293620;
3092 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.283709;
3093 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.282047;
3094 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.277261;
3095 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.275772;
3096 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.280726;
3097 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.288540;
3098 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.288315;
3099 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.296619;
3100 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.302993;
3101 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.338121;
3102 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.349800;
3103 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.356802;
3104 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.391202;
3105 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.422573;
3106 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.573815;
3107 else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.786984;
3108 else if(8.00 <= motherPt && motherPt < 10.00) fac = 1.020021;
3109 }
3110
3111 if(TMath::Abs(motherPDG) == 3312 || TMath::Abs(motherPDG) == 3322){ // xi
3112
3113 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.666620;
3114 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.575908;
3115 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.433198;
3116 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.340901;
3117 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.290896;
3118 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.236074;
3119 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.218681;
3120 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.207763;
3121 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.222848;
3122 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.208806;
3123 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.197275;
3124 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.183645;
3125 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.188788;
3126 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.188282;
3127 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.207442;
3128 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.240388;
3129 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.241916;
3130 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.208276;
3131 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.234550;
3132 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.251689;
3133 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.310204;
3134 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.343492;
3135 }
3136
3137 Double_t weight = 1;
3138 if(fac > 0) weight = 1/fac;
3139
3140 return weight;
3141}