1 // *************************************************************************
3 // * Task for Fragmentation Function Analysis in PWG4 Jet Task Force Train *
5 // *************************************************************************
8 /**************************************************************************
9 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
11 * Author: The ALICE Off-line Project. *
12 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
30 #include "THnSparse.h"
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"
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"
56 #include "AliAnalysisTaskIDFFTCF.h"
61 ClassImp(AliAnalysisTaskIDFFTCF)
63 Bool_t AliAnalysisTaskIDFFTCF::fkDump = kFALSE;
65 //____________________________________________________________________________
66 AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF()
73 ,fBranchRecJets("jets")
78 ,fUseAODInputJets(kTRUE)
80 ,fUsePhysicsSelection(kTRUE)
85 ,fTPCCutMode(kPIDNone)
109 ,fTracksAODMCCharged(0)
110 ,fTracksAODMCChargedSec(0)
111 ,fTracksRecQualityCuts(0)
116 ,fQATrackHistosRecCuts(0)
117 ,fQATrackHistosGen(0)
119 ,fQAJetHistosRecCuts(0)
120 ,fQAJetHistosRecCutsLeading(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)
132 ,fFFHistosGenIncPi(0)
133 ,fFFHistosGenIncPro(0)
135 ,fFFHistosGenIncEl(0)
136 ,fFFHistosGenIncMu(0)
137 ,fFFHistosGenLeadingTrack(0)
138 ,fQATrackHighPtThreshold(0)
173 ,fh1VertexNContributors(0)
184 ,fh2PtRecVsGenPrim(0)
186 ,fQATrackHistosRecEffGen(0)
187 ,fQATrackHistosRecEffRec(0)
188 ,fQATrackHistosSecRec(0)
189 ,fQATrackHistosRecEffGenPi(0)
190 ,fQATrackHistosRecEffGenPro(0)
191 ,fQATrackHistosRecEffGenK(0)
192 ,fQATrackHistosRecEffGenEl(0)
193 ,fQATrackHistosRecEffGenMu(0)
194 ,fQATrackHistosRecEffRecPi(0)
195 ,fQATrackHistosRecEffRecPro(0)
196 ,fQATrackHistosRecEffRecK(0)
197 ,fQATrackHistosRecEffRecEl(0)
198 ,fQATrackHistosRecEffRecMu(0)
199 ,fQATrackHistosRecEffRecProGFL(0)
200 ,fQATrackHistosRecEffRecKGFL(0)
201 ,fQATrackHistosSecRecPi(0)
202 ,fQATrackHistosSecRecPro(0)
203 ,fQATrackHistosSecRecK(0)
204 ,fQATrackHistosSecRecEl(0)
205 ,fQATrackHistosSecRecMu(0)
206 ,fQATrackHistosSecRecProGFL(0)
207 ,fQATrackHistosSecRecKGFL(0)
208 ,fFFHistosRecEffRec(0)
210 ,fFFHistosRecEffRecPi(0)
211 ,fFFHistosRecEffRecPro(0)
212 ,fFFHistosRecEffRecK(0)
213 ,fFFHistosRecEffRecEl(0)
214 ,fFFHistosRecEffRecMu(0)
215 ,fFFHistosRecEffRecProGFL(0)
216 ,fFFHistosRecEffRecKGFL(0)
217 ,fFFHistosSecRecPi(0)
218 ,fFFHistosSecRecPro(0)
220 ,fFFHistosSecRecEl(0)
221 ,fFFHistosSecRecMu(0)
222 ,fFFHistosSecRecProGFL(0)
223 ,fFFHistosSecRecKGFL(0)
226 // default constructor
229 //_______________________________________________________________________________________________
230 AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const char *name)
231 : AliAnalysisTaskSE(name)
237 ,fBranchRecJets("jets")
242 ,fUseAODInputJets(kTRUE)
244 ,fUsePhysicsSelection(kTRUE)
245 ,fEvtSelectionMask(0)
248 ,fLeadingJets(kFALSE)
249 ,fTPCCutMode(kPIDNone)
273 ,fTracksAODMCCharged(0)
274 ,fTracksAODMCChargedSec(0)
275 ,fTracksRecQualityCuts(0)
280 ,fQATrackHistosRecCuts(0)
281 ,fQATrackHistosGen(0)
283 ,fQAJetHistosRecCuts(0)
284 ,fQAJetHistosRecCutsLeading(0)
286 ,fQAJetHistosGenLeading(0)
287 ,fQAJetHistosRecEffLeading(0)
288 ,fFFHistosRecCutsInc(0)
289 ,fFFHistosRecCutsIncPi(0)
290 ,fFFHistosRecCutsIncPro(0)
291 ,fFFHistosRecCutsIncK(0)
292 ,fFFHistosRecCutsIncEl(0)
293 ,fFFHistosRecCutsIncMu(0)
294 ,fFFHistosRecLeadingTrack(0)
296 ,fFFHistosGenIncPi(0)
297 ,fFFHistosGenIncPro(0)
299 ,fFFHistosGenIncEl(0)
300 ,fFFHistosGenIncMu(0)
301 ,fFFHistosGenLeadingTrack(0)
302 ,fQATrackHighPtThreshold(0)
337 ,fh1VertexNContributors(0)
348 ,fh2PtRecVsGenPrim(0)
350 ,fQATrackHistosRecEffGen(0)
351 ,fQATrackHistosRecEffRec(0)
352 ,fQATrackHistosSecRec(0)
353 ,fQATrackHistosRecEffGenPi(0)
354 ,fQATrackHistosRecEffGenPro(0)
355 ,fQATrackHistosRecEffGenK(0)
356 ,fQATrackHistosRecEffGenEl(0)
357 ,fQATrackHistosRecEffGenMu(0)
358 ,fQATrackHistosRecEffRecPi(0)
359 ,fQATrackHistosRecEffRecPro(0)
360 ,fQATrackHistosRecEffRecK(0)
361 ,fQATrackHistosRecEffRecEl(0)
362 ,fQATrackHistosRecEffRecMu(0)
363 ,fQATrackHistosRecEffRecProGFL(0)
364 ,fQATrackHistosRecEffRecKGFL(0)
365 ,fQATrackHistosSecRecPi(0)
366 ,fQATrackHistosSecRecPro(0)
367 ,fQATrackHistosSecRecK(0)
368 ,fQATrackHistosSecRecEl(0)
369 ,fQATrackHistosSecRecMu(0)
370 ,fQATrackHistosSecRecProGFL(0)
371 ,fQATrackHistosSecRecKGFL(0)
372 ,fFFHistosRecEffRec(0)
374 ,fFFHistosRecEffRecPi(0)
375 ,fFFHistosRecEffRecPro(0)
376 ,fFFHistosRecEffRecK(0)
377 ,fFFHistosRecEffRecEl(0)
378 ,fFFHistosRecEffRecMu(0)
379 ,fFFHistosRecEffRecProGFL(0)
380 ,fFFHistosRecEffRecKGFL(0)
381 ,fFFHistosSecRecPi(0)
382 ,fFFHistosSecRecPro(0)
384 ,fFFHistosSecRecEl(0)
385 ,fFFHistosSecRecMu(0)
386 ,fFFHistosSecRecProGFL(0)
387 ,fFFHistosSecRecKGFL(0)
392 DefineOutput(1,TList::Class());
395 fStream = new TTreeStream("tree");
396 DefineOutput(2, TTree::Class());
397 fTree= fStream->GetTree();
401 //__________________________________________________________________________________________________________________________
402 AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const AliAnalysisTaskIDFFTCF ©)
403 : AliAnalysisTaskSE()
406 ,fAODJets(copy.fAODJets)
407 ,fAODExtension(copy.fAODExtension)
408 ,fNonStdFile(copy.fNonStdFile)
409 ,fBranchRecJets(copy.fBranchRecJets)
410 ,fBranchGenJets(copy.fBranchGenJets)
411 ,fTrackTypeGen(copy.fTrackTypeGen)
412 ,fJetTypeGen(copy.fJetTypeGen)
413 ,fJetTypeRecEff(copy.fJetTypeRecEff)
414 ,fUseAODInputJets(copy.fUseAODInputJets)
415 ,fFilterMask(copy.fFilterMask)
416 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
417 ,fEvtSelectionMask(copy.fEvtSelectionMask)
418 ,fEventClass(copy.fEventClass)
419 ,fMaxVertexZ(copy.fMaxVertexZ)
420 ,fLeadingJets(copy.fLeadingJets)
421 ,fTPCCutMode(copy.fTPCCutMode)
422 ,fTOFCutMode(copy.fTOFCutMode)
423 ,fStream(copy.fStream)
425 ,fTrackPtCut(copy.fTrackPtCut)
426 ,fTrackEtaMin(copy.fTrackEtaMin)
427 ,fTrackEtaMax(copy.fTrackEtaMax)
428 ,fTrackPhiMin(copy.fTrackPhiMin)
429 ,fTrackPhiMax(copy.fTrackPhiMax)
430 ,fJetPtCut(copy.fJetPtCut)
431 ,fJetEtaMin(copy.fJetEtaMin)
432 ,fJetEtaMax(copy.fJetEtaMax)
433 ,fJetPhiMin(copy.fJetPhiMin)
434 ,fJetPhiMax(copy.fJetPhiMax)
435 ,fFFRadius(copy.fFFRadius)
436 ,fFFMinLTrackPt(copy.fFFMinLTrackPt)
437 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
438 ,fFFMinnTracks(copy.fFFMinnTracks)
439 ,fQAMode(copy.fQAMode)
440 ,fFFMode(copy.fFFMode)
441 ,fEffMode(copy.fEffMode)
442 ,fAvgTrials(copy.fAvgTrials)
443 ,fTracksRecCuts(copy.fTracksRecCuts)
444 ,fTracksGen(copy.fTracksGen)
445 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
446 ,fTracksAODMCChargedSec(copy.fTracksAODMCChargedSec)
447 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
448 ,fJetsRec(copy.fJetsRec)
449 ,fJetsRecCuts(copy.fJetsRecCuts)
450 ,fJetsGen(copy.fJetsGen)
451 ,fJetsRecEff(copy.fJetsRecEff)
452 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
453 ,fQATrackHistosGen(copy.fQATrackHistosGen)
454 ,fQAJetHistosRec(copy.fQAJetHistosRec)
455 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
456 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
457 ,fQAJetHistosGen(copy.fQAJetHistosGen)
458 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
459 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
460 ,fFFHistosRecCutsInc(copy.fFFHistosRecCutsInc)
461 ,fFFHistosRecCutsIncPi(copy.fFFHistosRecCutsIncPi)
462 ,fFFHistosRecCutsIncPro(copy.fFFHistosRecCutsIncPro)
463 ,fFFHistosRecCutsIncK(copy.fFFHistosRecCutsIncK)
464 ,fFFHistosRecCutsIncEl(copy.fFFHistosRecCutsIncEl)
465 ,fFFHistosRecCutsIncMu(copy.fFFHistosRecCutsIncMu)
466 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
467 ,fFFHistosGenInc(copy.fFFHistosGenInc)
468 ,fFFHistosGenIncPi(copy.fFFHistosGenIncPi)
469 ,fFFHistosGenIncPro(copy.fFFHistosGenIncPro)
470 ,fFFHistosGenIncK(copy.fFFHistosGenIncK)
471 ,fFFHistosGenIncEl(copy.fFFHistosGenIncEl)
472 ,fFFHistosGenIncMu(copy.fFFHistosGenIncMu)
473 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
474 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
475 ,fTHnIDFF(copy.fTHnIDFF)
476 ,fTHnIncl(copy.fTHnIncl)
477 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
478 ,fFFJetPtMin(copy.fFFJetPtMin)
479 ,fFFJetPtMax(copy.fFFJetPtMax)
480 ,fFFNBinsPt(copy.fFFNBinsPt)
481 ,fFFPtMin(copy.fFFPtMin)
482 ,fFFPtMax(copy.fFFPtMax)
483 ,fFFNBinsXi(copy.fFFNBinsXi)
484 ,fFFXiMin(copy.fFFXiMin)
485 ,fFFXiMax(copy.fFFXiMax)
486 ,fFFNBinsZ(copy.fFFNBinsZ)
487 ,fFFZMin(copy.fFFZMin)
488 ,fFFZMax(copy.fFFZMax)
489 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
490 ,fQAJetPtMin(copy.fQAJetPtMin)
491 ,fQAJetPtMax(copy.fQAJetPtMax)
492 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
493 ,fQAJetEtaMin(copy.fQAJetEtaMin)
494 ,fQAJetEtaMax(copy.fQAJetEtaMax)
495 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
496 ,fQAJetPhiMin(copy.fQAJetPhiMin)
497 ,fQAJetPhiMax(copy.fQAJetPhiMax)
498 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
499 ,fQATrackPtMin(copy.fQATrackPtMin)
500 ,fQATrackPtMax(copy.fQATrackPtMax)
501 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
502 ,fQATrackEtaMin(copy.fQATrackEtaMin)
503 ,fQATrackEtaMax(copy.fQATrackEtaMax)
504 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
505 ,fQATrackPhiMin(copy.fQATrackPhiMin)
506 ,fQATrackPhiMax(copy.fQATrackPhiMax)
507 ,fCommonHistList(copy.fCommonHistList)
508 ,fh1EvtSelection(copy.fh1EvtSelection)
509 ,fh1VertexNContributors(copy.fh1VertexNContributors)
510 ,fh1VertexZ(copy.fh1VertexZ)
511 ,fh1EvtMult(copy.fh1EvtMult)
512 ,fh1EvtCent(copy.fh1EvtCent)
513 ,fh1Xsec(copy.fh1Xsec)
514 ,fh1Trials(copy.fh1Trials)
515 ,fh1PtHard(copy.fh1PtHard)
516 ,fh1PtHardTrials(copy.fh1PtHardTrials)
517 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
518 ,fh1nGenJets(copy.fh1nGenJets)
519 ,fh1nRecEffJets(copy.fh1nRecEffJets)
520 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
521 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
522 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
523 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
524 ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec)
525 ,fQATrackHistosRecEffGenPi(copy.fQATrackHistosRecEffGenPi)
526 ,fQATrackHistosRecEffGenPro(copy.fQATrackHistosRecEffGenPro)
527 ,fQATrackHistosRecEffGenK(copy.fQATrackHistosRecEffGenK)
528 ,fQATrackHistosRecEffGenEl(copy.fQATrackHistosRecEffGenEl)
529 ,fQATrackHistosRecEffGenMu(copy.fQATrackHistosRecEffGenMu)
530 ,fQATrackHistosRecEffRecPi(copy.fQATrackHistosRecEffRecPi)
531 ,fQATrackHistosRecEffRecPro(copy.fQATrackHistosRecEffRecPro)
532 ,fQATrackHistosRecEffRecK(copy.fQATrackHistosRecEffRecK)
533 ,fQATrackHistosRecEffRecEl(copy.fQATrackHistosRecEffRecEl)
534 ,fQATrackHistosRecEffRecMu(copy.fQATrackHistosRecEffRecMu)
535 ,fQATrackHistosRecEffRecProGFL(copy.fQATrackHistosRecEffRecProGFL)
536 ,fQATrackHistosRecEffRecKGFL(copy.fQATrackHistosRecEffRecKGFL)
537 ,fQATrackHistosSecRecPi(copy.fQATrackHistosSecRecPi)
538 ,fQATrackHistosSecRecPro(copy.fQATrackHistosSecRecPro)
539 ,fQATrackHistosSecRecK(copy.fQATrackHistosSecRecK)
540 ,fQATrackHistosSecRecEl(copy.fQATrackHistosSecRecEl)
541 ,fQATrackHistosSecRecMu(copy.fQATrackHistosSecRecMu)
542 ,fQATrackHistosSecRecProGFL(copy.fQATrackHistosSecRecProGFL)
543 ,fQATrackHistosSecRecKGFL(copy.fQATrackHistosSecRecKGFL)
544 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
545 ,fFFHistosSecRec(copy.fFFHistosSecRec)
546 ,fFFHistosRecEffRecPi(copy.fFFHistosRecEffRecPi)
547 ,fFFHistosRecEffRecPro(copy.fFFHistosRecEffRecPro)
548 ,fFFHistosRecEffRecK(copy.fFFHistosRecEffRecK)
549 ,fFFHistosRecEffRecEl(copy.fFFHistosRecEffRecEl)
550 ,fFFHistosRecEffRecMu(copy.fFFHistosRecEffRecMu)
551 ,fFFHistosRecEffRecProGFL(copy.fFFHistosRecEffRecProGFL)
552 ,fFFHistosRecEffRecKGFL(copy.fFFHistosRecEffRecKGFL)
553 ,fFFHistosSecRecPi(copy.fFFHistosSecRecPi)
554 ,fFFHistosSecRecPro(copy.fFFHistosSecRecPro)
555 ,fFFHistosSecRecK(copy.fFFHistosSecRecK)
556 ,fFFHistosSecRecEl(copy.fFFHistosSecRecEl)
557 ,fFFHistosSecRecMu(copy.fFFHistosSecRecMu)
558 ,fFFHistosSecRecProGFL(copy.fFFHistosSecRecProGFL)
559 ,fFFHistosSecRecKGFL(copy.fFFHistosSecRecKGFL)
560 ,fRandom(copy.fRandom)
565 // _________________________________________________________________________________________________________________________________
566 AliAnalysisTaskIDFFTCF& AliAnalysisTaskIDFFTCF::operator=(const AliAnalysisTaskIDFFTCF& o)
572 AliAnalysisTaskSE::operator=(o);
575 fAODJets = o.fAODJets;
576 fAODExtension = o.fAODExtension;
577 fNonStdFile = o.fNonStdFile;
578 fBranchRecJets = o.fBranchRecJets;
579 fBranchGenJets = o.fBranchGenJets;
580 fTrackTypeGen = o.fTrackTypeGen;
581 fJetTypeGen = o.fJetTypeGen;
582 fJetTypeRecEff = o.fJetTypeRecEff;
583 fUseAODInputJets = o.fUseAODInputJets;
584 fFilterMask = o.fFilterMask;
585 fUsePhysicsSelection = o.fUsePhysicsSelection;
586 fEvtSelectionMask = o.fEvtSelectionMask;
587 fEventClass = o.fEventClass;
588 fMaxVertexZ = o.fMaxVertexZ;
589 fLeadingJets = o.fLeadingJets;
590 fTPCCutMode = o.fTPCCutMode;
591 fTOFCutMode = o.fTOFCutMode;
594 fTrackPtCut = o.fTrackPtCut;
595 fTrackEtaMin = o.fTrackEtaMin;
596 fTrackEtaMax = o.fTrackEtaMax;
597 fTrackPhiMin = o.fTrackPhiMin;
598 fTrackPhiMax = o.fTrackPhiMax;
599 fJetPtCut = o.fJetPtCut;
600 fJetEtaMin = o.fJetEtaMin;
601 fJetEtaMax = o.fJetEtaMax;
602 fJetPhiMin = o.fJetPhiMin;
603 fJetPhiMax = o.fJetPhiMin;
604 fFFRadius = o.fFFRadius;
605 fFFMinLTrackPt = o.fFFMinLTrackPt;
606 fFFMaxTrackPt = o.fFFMaxTrackPt;
607 fFFMinnTracks = o.fFFMinnTracks;
610 fEffMode = o.fEffMode;
611 fAvgTrials = o.fAvgTrials;
612 fTracksRecCuts = o.fTracksRecCuts;
613 fTracksGen = o.fTracksGen;
614 fTracksAODMCCharged = o.fTracksAODMCCharged;
615 fTracksAODMCChargedSec = o.fTracksAODMCChargedSec;
616 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
617 fJetsRec = o.fJetsRec;
618 fJetsRecCuts = o.fJetsRecCuts;
619 fJetsGen = o.fJetsGen;
620 fJetsRecEff = o.fJetsRecEff;
621 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
622 fQATrackHistosGen = o.fQATrackHistosGen;
623 fQAJetHistosRec = o.fQAJetHistosRec;
624 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
625 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
626 fQAJetHistosGen = o.fQAJetHistosGen;
627 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
628 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
629 fFFHistosRecCutsInc = o.fFFHistosRecCutsInc;
630 fFFHistosRecCutsIncPi = o.fFFHistosRecCutsIncPi;
631 fFFHistosRecCutsIncPro = o.fFFHistosRecCutsIncPro;
632 fFFHistosRecCutsIncK = o.fFFHistosRecCutsIncK;
633 fFFHistosRecCutsIncEl = o.fFFHistosRecCutsIncEl;
634 fFFHistosRecCutsIncMu = o.fFFHistosRecCutsIncMu;
635 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
636 fFFHistosGenInc = o.fFFHistosGenInc;
637 fFFHistosGenIncPi = o.fFFHistosGenIncPi;
638 fFFHistosGenIncPro = o.fFFHistosGenIncPro;
639 fFFHistosGenIncK = o.fFFHistosGenIncK;
640 fFFHistosGenIncEl = o.fFFHistosGenIncEl;
641 fFFHistosGenIncMu = o.fFFHistosGenIncMu;
642 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
643 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
644 fTHnIDFF = o.fTHnIDFF;
645 fTHnIncl = o.fTHnIncl;
646 fFFNBinsJetPt = o.fFFNBinsJetPt;
647 fFFJetPtMin = o.fFFJetPtMin;
648 fFFJetPtMax = o.fFFJetPtMax;
649 fFFNBinsPt = o.fFFNBinsPt;
650 fFFPtMin = o.fFFPtMin;
651 fFFPtMax = o.fFFPtMax;
652 fFFNBinsXi = o.fFFNBinsXi;
653 fFFXiMin = o.fFFXiMin;
654 fFFXiMax = o.fFFXiMax;
655 fFFNBinsZ = o.fFFNBinsZ;
658 fQAJetNBinsPt = o.fQAJetNBinsPt;
659 fQAJetPtMin = o.fQAJetPtMin;
660 fQAJetPtMax = o.fQAJetPtMax;
661 fQAJetNBinsEta = o.fQAJetNBinsEta;
662 fQAJetEtaMin = o.fQAJetEtaMin;
663 fQAJetEtaMax = o.fQAJetEtaMax;
664 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
665 fQAJetPhiMin = o.fQAJetPhiMin;
666 fQAJetPhiMax = o.fQAJetPhiMax;
667 fQATrackNBinsPt = o.fQATrackNBinsPt;
668 fQATrackPtMin = o.fQATrackPtMin;
669 fQATrackPtMax = o.fQATrackPtMax;
670 fQATrackNBinsEta = o.fQATrackNBinsEta;
671 fQATrackEtaMin = o.fQATrackEtaMin;
672 fQATrackEtaMax = o.fQATrackEtaMax;
673 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
674 fQATrackPhiMin = o.fQATrackPhiMin;
675 fQATrackPhiMax = o.fQATrackPhiMax;
676 fCommonHistList = o.fCommonHistList;
677 fh1EvtSelection = o.fh1EvtSelection;
678 fh1VertexNContributors = o.fh1VertexNContributors;
679 fh1VertexZ = o.fh1VertexZ;
680 fh1EvtMult = o.fh1EvtMult;
681 fh1EvtCent = o.fh1EvtCent;
683 fh1Trials = o.fh1Trials;
684 fh1PtHard = o.fh1PtHard;
685 fh1PtHardTrials = o.fh1PtHardTrials;
686 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
687 fh1nGenJets = o.fh1nGenJets;
688 fh1nRecEffJets = o.fh1nRecEffJets;
689 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
690 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
691 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
692 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
693 fQATrackHistosSecRec = o.fQATrackHistosSecRec;
694 fQATrackHistosRecEffGenPi = o.fQATrackHistosRecEffGenPi;
695 fQATrackHistosRecEffGenPro = o.fQATrackHistosRecEffGenPro;
696 fQATrackHistosRecEffGenK = o.fQATrackHistosRecEffGenK;
697 fQATrackHistosRecEffGenEl = o.fQATrackHistosRecEffGenEl;
698 fQATrackHistosRecEffGenMu = o.fQATrackHistosRecEffGenMu;
699 fQATrackHistosRecEffRecPi = o.fQATrackHistosRecEffRecPi;
700 fQATrackHistosRecEffRecPro = o.fQATrackHistosRecEffRecPro;
701 fQATrackHistosRecEffRecK = o.fQATrackHistosRecEffRecK;
702 fQATrackHistosRecEffRecEl = o.fQATrackHistosRecEffRecEl;
703 fQATrackHistosRecEffRecMu = o.fQATrackHistosRecEffRecMu;
704 fQATrackHistosRecEffRecProGFL = o.fQATrackHistosRecEffRecProGFL;
705 fQATrackHistosRecEffRecKGFL = o.fQATrackHistosRecEffRecKGFL;
706 fQATrackHistosSecRecPi = o.fQATrackHistosSecRecPi;
707 fQATrackHistosSecRecPro = o.fQATrackHistosSecRecPro;
708 fQATrackHistosSecRecK = o.fQATrackHistosSecRecK;
709 fQATrackHistosSecRecEl = o.fQATrackHistosSecRecEl;
710 fQATrackHistosSecRecMu = o.fQATrackHistosSecRecMu;
711 fQATrackHistosSecRecProGFL = o.fQATrackHistosSecRecProGFL;
712 fQATrackHistosSecRecKGFL = o.fQATrackHistosSecRecKGFL;
713 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
714 fFFHistosSecRec = o.fFFHistosSecRec;
715 fFFHistosRecEffRecPi = o.fFFHistosRecEffRecPi;
716 fFFHistosRecEffRecPro = o.fFFHistosRecEffRecPro;
717 fFFHistosRecEffRecK = o.fFFHistosRecEffRecK;
718 fFFHistosRecEffRecEl = o.fFFHistosRecEffRecEl;
719 fFFHistosRecEffRecMu = o.fFFHistosRecEffRecMu;
720 fFFHistosRecEffRecProGFL = o.fFFHistosRecEffRecProGFL;
721 fFFHistosRecEffRecKGFL = o.fFFHistosRecEffRecKGFL;
722 fFFHistosSecRecPi = o.fFFHistosSecRecPi;
723 fFFHistosSecRecPro = o.fFFHistosSecRecPro;
724 fFFHistosSecRecK = o.fFFHistosSecRecK;
725 fFFHistosSecRecEl = o.fFFHistosSecRecEl;
726 fFFHistosSecRecMu = o.fFFHistosSecRecMu;
727 fFFHistosSecRecProGFL = o.fFFHistosSecRecProGFL;
728 fFFHistosSecRecKGFL = o.fFFHistosSecRecKGFL;
735 //___________________________________________________________________________
736 AliAnalysisTaskIDFFTCF::~AliAnalysisTaskIDFFTCF()
740 if(fTracksRecCuts) delete fTracksRecCuts;
741 if(fTracksGen) delete fTracksGen;
742 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
743 if(fTracksAODMCChargedSec) delete fTracksAODMCChargedSec;
744 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
745 if(fJetsRec) delete fJetsRec;
746 if(fJetsRecCuts) delete fJetsRecCuts;
747 if(fJetsGen) delete fJetsGen;
748 if(fJetsRecEff) delete fJetsRecEff;
750 if(fRandom) delete fRandom;
753 //______________________________________________________________________________________________________
754 AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AliFragFuncHistos(const char* name,
755 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
756 Int_t nPt, Float_t ptMin, Float_t ptMax,
757 Int_t nXi, Float_t xiMin, Float_t xiMax,
758 Int_t nZ , Float_t zMin , Float_t zMax)
778 // default constructor
782 //___________________________________________________________________________
783 AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
785 ,fNBinsJetPt(copy.fNBinsJetPt)
786 ,fJetPtMin(copy.fJetPtMin)
787 ,fJetPtMax(copy.fJetPtMax)
788 ,fNBinsPt(copy.fNBinsPt)
791 ,fNBinsXi(copy.fNBinsXi)
794 ,fNBinsZ(copy.fNBinsZ)
797 ,fh2TrackPt(copy.fh2TrackPt)
800 ,fh1JetPt(copy.fh1JetPt)
801 ,fNameFF(copy.fNameFF)
806 //_______________________________________________________________________________________________________________________________________________________________
807 AliAnalysisTaskIDFFTCF::AliFragFuncHistos& AliAnalysisTaskIDFFTCF::AliFragFuncHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncHistos& o)
812 TObject::operator=(o);
813 fNBinsJetPt = o.fNBinsJetPt;
814 fJetPtMin = o.fJetPtMin;
815 fJetPtMax = o.fJetPtMax;
816 fNBinsPt = o.fNBinsPt;
819 fNBinsXi = o.fNBinsXi;
825 fh2TrackPt = o.fh2TrackPt;
828 fh1JetPt = o.fh1JetPt;
835 //_________________________________________________________
836 AliAnalysisTaskIDFFTCF::AliFragFuncHistos::~AliFragFuncHistos()
840 if(fh1JetPt) delete fh1JetPt;
841 if(fh2TrackPt) delete fh2TrackPt;
842 if(fh2Xi) delete fh2Xi;
843 if(fh2Z) delete fh2Z;
846 //_________________________________________________________________
847 void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::DefineHistos()
851 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
852 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
853 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
854 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
856 AliAnalysisTaskIDFFTCF::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
857 AliAnalysisTaskIDFFTCF::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
858 AliAnalysisTaskIDFFTCF::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
859 AliAnalysisTaskIDFFTCF::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
862 //_______________________________________________________________________________________________________________
863 void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm,
864 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
869 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
870 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
872 // Added for proper normalization of FF background estimation
873 // when zero track are found in the background region
874 if((int)trackPt==-1) return;
876 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
877 else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,trackPt,scaleFacStrangeness);
878 else fh2TrackPt->Fill(jetPt,trackPt);
881 if(jetPt>0) z = trackPt / jetPt;
883 if(z>0) xi = TMath::Log(1/z);
885 if(trackPt>(1-1e-06)*jetPt && trackPt<(1+1e-06)*jetPt){ // case z=1 : move entry to last histo bin <1
892 fh2Xi->Fill(jetPt,xi,1/norm);
893 fh2Z->Fill(jetPt,z,1/norm);
895 else if(scaleStrangeness){
896 fh2Xi->Fill(jetPt,xi,scaleFacStrangeness);
897 fh2Z->Fill(jetPt,z,scaleFacStrangeness);
900 fh2Xi->Fill(jetPt,xi);
905 //_________________________________________________________________________________
906 void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AddToOutput(TList* list) const
908 // add histos to list
912 list->Add(fh2TrackPt);
917 //_________________________________________________________________________________________________________
918 AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
919 Int_t nPt, Float_t ptMin, Float_t ptMax,
920 Int_t nEta, Float_t etaMin, Float_t etaMax,
921 Int_t nPhi, Float_t phiMin, Float_t phiMax)
936 // default constructor
939 //____________________________________________________________________________________
940 AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
942 ,fNBinsPt(copy.fNBinsPt)
945 ,fNBinsEta(copy.fNBinsEta)
946 ,fEtaMin(copy.fEtaMin)
947 ,fEtaMax(copy.fEtaMax)
948 ,fNBinsPhi(copy.fNBinsPhi)
949 ,fPhiMin(copy.fPhiMin)
950 ,fPhiMax(copy.fPhiMax)
951 ,fh2EtaPhi(copy.fh2EtaPhi)
953 ,fNameQAJ(copy.fNameQAJ)
958 //________________________________________________________________________________________________________________________________________________________________________
959 AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos& AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos& o)
964 TObject::operator=(o);
965 fNBinsPt = o.fNBinsPt;
968 fNBinsEta = o.fNBinsEta;
971 fNBinsPhi = o.fNBinsPhi;
974 fh2EtaPhi = o.fh2EtaPhi;
976 fNameQAJ = o.fNameQAJ;
982 //______________________________________________________________
983 AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
987 if(fh2EtaPhi) delete fh2EtaPhi;
988 if(fh1Pt) delete fh1Pt;
991 //____________________________________________________________________
992 void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::DefineHistos()
994 // book jet QA histos
996 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
997 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
999 AliAnalysisTaskIDFFTCF::SetProperties(fh2EtaPhi, "#eta", "#phi");
1000 AliAnalysisTaskIDFFTCF::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1003 //____________________________________________________________________________________________________
1004 void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1006 // fill jet QA histos
1008 fh2EtaPhi->Fill( eta, phi);
1012 //____________________________________________________________________________________
1013 void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1015 // add histos to list
1017 list->Add(fh2EtaPhi);
1021 //___________________________________________________________________________________________________________
1022 AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1023 Int_t nPt, Float_t ptMin, Float_t ptMax,
1024 Int_t nEta, Float_t etaMin, Float_t etaMax,
1025 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1037 ,fHighPtThreshold(ptThresh)
1044 // default constructor
1047 //__________________________________________________________________________________________
1048 AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1050 ,fNBinsPt(copy.fNBinsPt)
1051 ,fPtMin(copy.fPtMin)
1052 ,fPtMax(copy.fPtMax)
1053 ,fNBinsEta(copy.fNBinsEta)
1054 ,fEtaMin(copy.fEtaMin)
1055 ,fEtaMax(copy.fEtaMax)
1056 ,fNBinsPhi(copy.fNBinsPhi)
1057 ,fPhiMin(copy.fPhiMin)
1058 ,fPhiMax(copy.fPhiMax)
1059 ,fHighPtThreshold(copy.fHighPtThreshold)
1060 ,fh2EtaPhi(copy.fh2EtaPhi)
1062 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1063 ,fh2PhiPt(copy.fh2PhiPt)
1064 ,fNameQAT(copy.fNameQAT)
1069 // _____________________________________________________________________________________________________________________________________________________________________________
1070 AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos& AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos& o)
1075 TObject::operator=(o);
1076 fNBinsPt = o.fNBinsPt;
1079 fNBinsEta = o.fNBinsEta;
1080 fEtaMin = o.fEtaMin;
1081 fEtaMax = o.fEtaMax;
1082 fNBinsPhi = o.fNBinsPhi;
1083 fPhiMin = o.fPhiMin;
1084 fPhiMax = o.fPhiMax;
1085 fHighPtThreshold = o.fHighPtThreshold;
1086 fh2EtaPhi = o.fh2EtaPhi;
1088 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1089 fh2PhiPt = o.fh2PhiPt;
1090 fNameQAT = o.fNameQAT;
1096 //___________________________________________________________________
1097 AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1101 if(fh2EtaPhi) delete fh2EtaPhi;
1102 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1103 if(fh1Pt) delete fh1Pt;
1104 if(fh2PhiPt) delete fh2PhiPt;
1107 //______________________________________________________________________
1108 void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::DefineHistos()
1110 // book track QA histos
1112 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1113 fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1114 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1115 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1117 AliAnalysisTaskIDFFTCF::SetProperties(fh2EtaPhi, "#eta", "#phi");
1118 AliAnalysisTaskIDFFTCF::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1119 AliAnalysisTaskIDFFTCF::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1120 AliAnalysisTaskIDFFTCF::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1125 //________________________________________________________________________________________________________
1126 void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm,
1127 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1129 // fill track QA histos
1130 Float_t weight = 1.;
1131 if(weightPt) weight = pt;
1132 fh2EtaPhi->Fill( eta, phi, weight);
1133 if(scaleStrangeness) fh2EtaPhi->Fill( eta, phi, scaleFacStrangeness);
1134 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1135 if(pt > fHighPtThreshold && scaleStrangeness) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1136 if(norm) fh1Pt->Fill( pt, 1/norm );
1137 else if(scaleStrangeness) fh1Pt->Fill(pt,scaleFacStrangeness);
1138 else fh1Pt->Fill( pt );
1140 if(scaleFacStrangeness) fh2PhiPt->Fill(phi, pt, scaleFacStrangeness);
1141 else fh2PhiPt->Fill(phi, pt);
1144 //______________________________________________________________________________________
1145 void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1147 // add histos to list
1149 list->Add(fh2EtaPhi);
1150 list->Add(fh2HighPtEtaPhi);
1152 list->Add(fh2PhiPt);
1155 //_________________________________________________________________________________
1156 Bool_t AliAnalysisTaskIDFFTCF::Notify()
1159 // Implemented Notify() to read the cross sections
1160 // and number of trials from pyxsec.root
1161 // (taken from AliAnalysisTaskJetSpectrum2)
1163 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
1164 Float_t xsection = 0;
1165 Float_t ftrials = 1;
1169 TFile *curfile = tree->GetCurrentFile();
1171 Error("Notify","No current file");
1174 if(!fh1Xsec||!fh1Trials){
1175 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1178 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
1179 fh1Xsec->Fill("<#sigma>",xsection);
1180 // construct a poor man average trials
1181 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1182 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
1185 // Set seed for backg study
1186 fRandom = new TRandom3();
1187 fRandom->SetSeed(0);
1192 //__________________________________________________________________
1193 void AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()
1195 // create output objects
1197 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()");
1199 // create list of tracks and jets
1201 fTracksRecCuts = new TList();
1202 fTracksRecCuts->SetOwner(kFALSE);
1204 fTracksGen = new TList();
1205 fTracksGen->SetOwner(kFALSE);
1207 fTracksAODMCCharged = new TList();
1208 fTracksAODMCCharged->SetOwner(kFALSE);
1210 fTracksAODMCChargedSec = new TList();
1211 fTracksAODMCChargedSec->SetOwner(kFALSE);
1213 fTracksRecQualityCuts = new TList();
1214 fTracksRecQualityCuts->SetOwner(kFALSE);
1216 fJetsRec = new TList();
1217 fJetsRec->SetOwner(kFALSE);
1219 fJetsRecCuts = new TList();
1220 fJetsRecCuts->SetOwner(kFALSE);
1222 fJetsGen = new TList();
1223 fJetsGen->SetOwner(kFALSE);
1225 fJetsRecEff = new TList();
1226 fJetsRecEff->SetOwner(kFALSE);
1229 // Create histograms / output container
1233 fCommonHistList = new TList();
1234 fCommonHistList->SetOwner(kTRUE);
1236 Bool_t oldStatus = TH1::AddDirectoryStatus();
1237 TH1::AddDirectory(kFALSE);
1240 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1241 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
1242 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
1243 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1244 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1245 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1246 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
1248 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
1249 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1250 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
1251 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1253 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1254 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1255 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1256 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1257 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1258 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1260 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1261 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1262 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1264 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1265 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1269 if(fQAMode&1){ // track QA
1270 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1271 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1272 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1273 fQATrackHighPtThreshold);
1274 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1275 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1276 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1277 fQATrackHighPtThreshold);
1280 if(fQAMode&2){ // jet QA
1281 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1282 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1283 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1284 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1285 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1286 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1287 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1288 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1289 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1290 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1291 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1292 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1293 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1294 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1295 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1297 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1298 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1306 fTHnIDFF = AliIDFFUtils::GetTHn("THnIDFF");
1307 fTHnIncl = AliIDFFUtils::GetTHn("THnIncl");
1315 // ____________ define histograms ____________________
1318 if(fQAMode&1){ // track QA
1319 fQATrackHistosRecCuts->DefineHistos();
1320 fQATrackHistosGen->DefineHistos();
1323 if(fQAMode&2){ // jet QA
1324 fQAJetHistosRec->DefineHistos();
1325 fQAJetHistosRecCuts->DefineHistos();
1326 fQAJetHistosRecCutsLeading->DefineHistos();
1327 fQAJetHistosGen->DefineHistos();
1328 fQAJetHistosGenLeading->DefineHistos();
1329 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
1334 fCommonHistList->Add(fTHnIDFF);
1335 fCommonHistList->Add(fTHnIncl);
1338 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
1339 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
1340 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
1342 fCommonHistList->Add(fh1EvtSelection);
1343 fCommonHistList->Add(fh1EvtMult);
1344 fCommonHistList->Add(fh1EvtCent);
1345 fCommonHistList->Add(fh1VertexNContributors);
1346 fCommonHistList->Add(fh1VertexZ);
1347 fCommonHistList->Add(fh1nRecJetsCuts);
1348 fCommonHistList->Add(fh1Xsec);
1349 fCommonHistList->Add(fh1Trials);
1350 fCommonHistList->Add(fh1PtHard);
1351 fCommonHistList->Add(fh1PtHardTrials);
1353 if(genJets) fCommonHistList->Add(fh1nGenJets);
1357 if(fQAMode&1){ // track QA
1358 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
1359 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
1362 if(fQAMode&2){ // jet QA
1363 fQAJetHistosRec->AddToOutput(fCommonHistList);
1364 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
1365 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
1366 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
1368 fQAJetHistosGen->AddToOutput(fCommonHistList);
1369 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
1375 BookFFHistos(fCommonHistList,&fFFHistosRecCutsInc,"RecCutsInc",&fFFHistosGenInc,"GenInc");
1376 BookFFHistos(fCommonHistList,&fFFHistosRecLeadingTrack,"RecLeadingTrack",&fFFHistosGenLeadingTrack,"GenLeadingTrack");
1380 if(fFFMode && genTracks){
1381 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncPi,"RecCutsInc_piPlusPiMinus",&fFFHistosGenIncPi,"GenInc_piPlusPiMinus");
1382 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncPro,"RecCutsInc_ppbar",&fFFHistosGenIncPro,"GenInc_ppbar");
1383 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncK,"RecCutsInc_kPlusKMinus",&fFFHistosGenIncK,"GenInc_kPlusKMinus");
1384 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncEl,"RecCutsInc_ePlusEMinus",&fFFHistosGenIncEl,"GenInc_ePlusEMinus");
1385 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncMu,"RecCutsInc_muPlusMuMinus",&fFFHistosGenIncMu,"GenInc_muPlusMuMinus");
1389 if(fEffMode && recJetsEff && genTracks){
1391 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRec,"RecEffRec",&fQATrackHistosRecEffGen,"RecEffGen",&fQATrackHistosSecRec,"SecRec");
1392 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecPi,"RecEffRec_piPlusPiMinus",&fQATrackHistosRecEffGenPi,"RecEffGen_piPlusPiMinus",&fQATrackHistosSecRecPi,"SecRec_piPlusPiMinus");
1393 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecPro,"RecEffRec_ppbar",&fQATrackHistosRecEffGenPro,"RecEffGen_ppbar",&fQATrackHistosSecRecPro,"SecRec_ppbar");
1394 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecK,"RecEffRec_kPlusKMinus",&fQATrackHistosRecEffGenK,"RecEffGen_kPlusKMinus",&fQATrackHistosSecRecK,"SecRec_kPlusKMinus");
1395 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecEl,"RecEffRec_ePlusEMinus",&fQATrackHistosRecEffGenEl,"RecEffGen_ePlusEMinus",&fQATrackHistosSecRecEl,"SecRec_ePlusEMinus");
1396 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecMu,"RecEffRec_muPlusMuMinus",&fQATrackHistosRecEffGenMu,"RecEffGen_muPlusMuMinus",&fQATrackHistosSecRecMu,"SecRec_muPlusMuMinus");
1397 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecProGFL,"RecEffRec_ppbarGFL",0,"",&fQATrackHistosSecRecProGFL,"SecRec_ppbarGFL");
1398 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecKGFL,"RecEffRec_kPlusKMinusGFL",0,"",&fQATrackHistosSecRecKGFL,"SecRec_kPlusKMinusGFL");
1401 BookFFHistos(fCommonHistList,&fFFHistosRecEffRec,"RecEffRec",0x0,"",&fFFHistosSecRec,"SecRec");
1402 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecPi,"RecEffRec_piPlusPiMinus",0x0,"",&fFFHistosSecRecPi,"SecRec_piPlusPiMinus");
1403 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecPro,"RecEffRec_ppbar",0x0,"",&fFFHistosSecRecPro,"SecRec_ppbar");
1404 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecK,"RecEffRec_kPlusKMinus",0x0,"",&fFFHistosSecRecK,"SecRec_kPlusKMinus");
1405 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecEl,"RecEffRec_ePlusEMinus",0x0,"",&fFFHistosSecRecEl,"SecRec_ePlusEMinus");
1406 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecMu,"RecEffRec_muPlusMuMinus",0x0,"",&fFFHistosSecRecMu,"SecRec_muPlusMuMinus");
1407 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecProGFL,"RecEffRec_ppbarGFL",0x0,"",&fFFHistosSecRecProGFL,"SecRec_ppbarGFL");
1408 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecKGFL,"RecEffRec_kPlusKMinusGFL",0x0,"",&fFFHistosSecRecKGFL,"SecRec_kPlusKMinusGFL");
1411 fCommonHistList->Add(fh1nRecEffJets);
1412 fCommonHistList->Add(fh2PtRecVsGenPrim);
1413 fCommonHistList->Add(fh2PtRecVsGenSec);
1416 // =========== Switch on Sumw2 for all histos ===========
1417 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
1418 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
1419 if (h1) h1->Sumw2();
1421 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
1422 if(hnSparse) hnSparse->Sumw2();
1426 TH1::AddDirectory(oldStatus);
1428 PostData(1, fCommonHistList);
1435 //_______________________________________________
1436 void AliAnalysisTaskIDFFTCF::Init()
1439 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::Init()");
1443 //_____________________________________________________________
1444 void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
1446 AliIDFFUtils::fPid = 0x0;
1449 // Called for each event
1450 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::UserExec()");
1453 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
1455 // Trigger selection
1456 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
1457 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
1459 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
1460 fh1EvtSelection->Fill(1.);
1461 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
1462 PostData(1, fCommonHistList);
1466 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1468 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
1471 fMCEvent = MCEvent();
1473 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
1476 // get AOD event from input/ouput
1477 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
1478 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
1479 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
1480 AliIDFFUtils::fPid = ((AliAODInputHandler*)handler)->GetPIDResponse();
1481 if(fUseAODInputJets) fAODJets = fAOD;
1482 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
1485 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
1486 if( handler && handler->InheritsFrom("AliAODHandler") ) {
1487 fAOD = ((AliAODHandler*)handler)->GetAOD();
1489 AliInputEventHandler* esdinputHandler =
1490 (AliInputEventHandler*) (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1491 AliIDFFUtils::fPid = esdinputHandler->GetPIDResponse();
1494 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
1498 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
1499 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
1500 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
1501 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
1502 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
1506 if(fNonStdFile.Length()!=0){
1507 // case we have an AOD extension - fetch the jets from the extended output
1509 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
1510 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
1512 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
1517 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
1520 if(!AliIDFFUtils::fPid){
1521 Printf("%s:%d PIDresponse not found", (char*)__FILE__,__LINE__);
1525 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
1530 // event selection **************************************************
1531 // *** event class ***
1532 Double_t centPercent = -1;
1535 if(handler->InheritsFrom("AliAODInputHandler")){
1536 // since it is not supported by the helper task define own classes
1537 centPercent = fAOD->GetHeader()->GetCentrality();
1539 if(centPercent>10) cl = 2;
1540 if(centPercent>30) cl = 3;
1541 if(centPercent>50) cl = 4;
1544 cl = AliAnalysisHelperJetTasks::EventClass();
1545 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
1548 if(cl!=fEventClass){
1549 // event not in selected event class, reject event
1550 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
1551 fh1EvtSelection->Fill(2.);
1552 PostData(1, fCommonHistList);
1557 // *** vertex cut ***
1558 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
1559 Int_t nTracksPrim = primVtx->GetNContributors();
1560 fh1VertexNContributors->Fill(nTracksPrim);
1563 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
1565 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
1566 fh1EvtSelection->Fill(3.);
1567 PostData(1, fCommonHistList);
1571 fh1VertexZ->Fill(primVtx->GetZ());
1573 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
1574 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
1575 fh1EvtSelection->Fill(4.);
1576 PostData(1, fCommonHistList);
1580 TString primVtxName(primVtx->GetName());
1582 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
1583 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
1584 fh1EvtSelection->Fill(5.);
1585 PostData(1, fCommonHistList);
1589 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
1590 fh1EvtSelection->Fill(0.);
1591 fh1EvtCent->Fill(centPercent);
1594 //___ get MC information __________________________________________________________________
1596 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
1598 Double_t ptHard = 0.;
1599 Double_t nTrials = 1; // trials for MC trigger weight for real data
1602 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
1606 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
1607 AliGenHijingEventHeader* hijingGenHeader = 0x0;
1609 if(pythiaGenHeader){
1610 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
1611 nTrials = pythiaGenHeader->Trials();
1612 ptHard = pythiaGenHeader->GetPtHard();
1614 fh1PtHard->Fill(ptHard);
1615 fh1PtHardTrials->Fill(ptHard,nTrials);
1617 } else { // no pythia, hijing?
1619 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
1621 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
1622 if(!hijingGenHeader){
1623 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
1625 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
1629 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
1633 //___ fetch jets __________________________________________________________________________
1635 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
1637 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
1638 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
1639 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
1641 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
1642 Int_t nRecJetsCuts = 0;
1643 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
1644 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
1645 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
1646 fh1nRecJetsCuts->Fill(nRecJetsCuts);
1648 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
1650 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
1652 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
1653 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
1655 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
1656 fh1nGenJets->Fill(nGenJets);
1659 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
1660 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
1661 Int_t nRecEffJets = 0;
1662 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
1663 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
1664 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
1665 fh1nRecEffJets->Fill(nRecEffJets);
1668 //____ fetch particles __________________________________________________________
1670 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
1672 Int_t nRecPartCuts = 0;
1673 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
1674 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
1675 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
1676 fh1EvtMult->Fill(nRecPartCuts);
1679 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
1681 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
1682 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
1683 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
1686 //____ analysis, fill histos ___________________________________________________
1691 for(Int_t it=0; it<nRecPartCuts; ++it){
1692 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
1693 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
1695 // fill inclusive tracks XXX, they have the same track cuts!
1696 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
1698 AliIDFFUtils::FillTHn(fTHnIncl, -999, inclusiveaod, fAOD, fTOFCutMode);
1702 for(Int_t it=0; it<nGenPart; ++it){
1703 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
1704 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
1710 for(Int_t ij=0; ij<nRecJets; ++ij){
1711 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
1712 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
1717 if(fQAMode || fFFMode){
1719 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
1721 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
1722 Float_t jetPt = jet->Pt();
1724 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1726 if(fLeadingJets && ij>0) continue; // leading/all jets
1728 if(fQAMode&2 && (ij==0) ) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt );
1730 // get tracks in jet
1731 TList* jettracklist = new TList();
1732 Double_t sumPt = 0.;
1733 Bool_t isBadJet = kFALSE;
1735 if(GetFFRadius()<=0)
1736 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1738 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet,
1739 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1741 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
1743 if(isBadJet) continue;
1745 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1747 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
1748 if(!trackVP)continue;
1750 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
1751 if(!aodtrack) continue;
1753 Float_t trackPt = trackVP->Pt();
1755 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
1759 fFFHistosRecCutsInc->FillFF(trackPt, jetPt, incrementJetPt);
1761 AliIDFFUtils::FillTHn(fTHnIDFF, jetPt, aodtrack, fAOD, fTOFCutMode);
1763 if(it==0){ // leading track, all jets
1764 fFFHistosRecLeadingTrack->FillFF( trackPt, jetPt, kTRUE);
1770 delete jettracklist;
1772 } // end: rec. jets after cuts
1774 // loop again over rec jets:
1775 // PID histos (only for MC)
1777 if(fBranchGenJets.Length()>0){ // check if we're running over MC
1779 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // rec jets loop
1781 if(fLeadingJets && ij>0) continue; // leading/all jets
1783 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1786 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
1787 Float_t jetPt = jet->Pt();
1789 // get tracks in jet
1790 TList* jettracklist = new TList();
1791 Double_t sumPt = 0.;
1792 Bool_t isBadJet = kFALSE;
1794 if(GetFFRadius()<=0)
1795 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1797 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet,
1798 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1800 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
1802 if(isBadJet) continue;
1804 Bool_t incrementJetPt = kTRUE; // there could be 0 tracks in jet: first fill jet pt histo once
1805 fFFHistosRecCutsIncPi->FillFF(-1, jetPt, incrementJetPt);
1806 fFFHistosRecCutsIncPro->FillFF(-1, jetPt, incrementJetPt);
1807 fFFHistosRecCutsIncK->FillFF(-1, jetPt, incrementJetPt);
1808 fFFHistosRecCutsIncEl->FillFF(-1, jetPt, incrementJetPt);
1809 fFFHistosRecCutsIncMu->FillFF(-1, jetPt, incrementJetPt);
1811 incrementJetPt = kFALSE;
1813 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1815 AliAODTrack * rectrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
1816 if(!rectrack) continue;
1818 Int_t label = TMath::Abs(rectrack->GetLabel());
1819 Float_t recPt = rectrack->Pt();
1821 // find MC track in our list
1822 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
1824 // Float_t genPt = gentrack->Pt();
1827 Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
1829 if(mcpdg == 211) fFFHistosRecCutsIncPi->FillFF(recPt, jetPt, incrementJetPt);
1830 if(mcpdg == 2212) fFFHistosRecCutsIncPro->FillFF(recPt, jetPt, incrementJetPt);
1831 if(mcpdg == 321) fFFHistosRecCutsIncK->FillFF(recPt, jetPt, incrementJetPt);
1832 if(mcpdg == 11) fFFHistosRecCutsIncEl->FillFF(recPt, jetPt, incrementJetPt);
1833 if(mcpdg == 13) fFFHistosRecCutsIncMu->FillFF(recPt, jetPt, incrementJetPt);
1836 delete jettracklist;
1838 } // end: rec. jets after cuts
1843 for(Int_t ij=0; ij<nGenJets; ++ij){
1845 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
1848 Float_t jetPt = jet->Pt();
1850 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1852 if(fLeadingJets && ij>0) continue; // leading/all jets
1854 if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1856 TList* jettracklist = new TList();
1857 Double_t sumPt = 0.;
1858 Bool_t isBadJet = kFALSE;
1860 if(GetFFRadius()<=0){
1861 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1863 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1866 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
1868 if(isBadJet) continue;
1870 Bool_t incrementJetPt = kTRUE; // first fill jet pt histo once
1871 fFFHistosGenInc->FillFF(-1, jetPt, incrementJetPt);
1872 fFFHistosGenIncPi->FillFF(-1, jetPt, incrementJetPt);
1873 fFFHistosGenIncPro->FillFF(-1, jetPt, incrementJetPt);
1874 fFFHistosGenIncK->FillFF(-1, jetPt, incrementJetPt);
1875 fFFHistosGenIncEl->FillFF(-1, jetPt, incrementJetPt);
1876 fFFHistosGenIncMu->FillFF(-1, jetPt, incrementJetPt);
1878 incrementJetPt = kFALSE;
1880 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1882 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
1883 if(!trackVP)continue;
1885 Float_t trackPt = trackVP->Pt();
1889 fFFHistosGenInc->FillFF( trackPt, jetPt, incrementJetPt);
1891 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*>(trackVP);
1895 Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
1897 if(mcpdg == 211) fFFHistosGenIncPi->FillFF(trackPt, jetPt, incrementJetPt);
1898 if(mcpdg == 2212) fFFHistosGenIncPro->FillFF(trackPt, jetPt, incrementJetPt);
1899 if(mcpdg == 321) fFFHistosGenIncK->FillFF(trackPt, jetPt, incrementJetPt);
1900 if(mcpdg == 11) fFFHistosGenIncEl->FillFF(trackPt, jetPt, incrementJetPt);
1901 if(mcpdg == 13) fFFHistosGenIncMu->FillFF(trackPt, jetPt, incrementJetPt);
1905 if(it==0){ // leading track, all jets
1906 fFFHistosGenLeadingTrack->FillFF( trackPt, jetPt, kTRUE );
1911 delete jettracklist;
1914 } // end: QA, FF and intra-jet
1917 // ____ efficiency _______________________________
1919 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
1921 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
1925 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
1928 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
1929 TArrayI indexAODTrSec;
1931 TArrayI indexMCTrSec;
1933 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
1934 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
1936 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
1937 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
1940 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
1941 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
1943 // associate gen and rec tracks, store indices in TArrays
1944 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
1945 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
1948 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
1949 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenPi,fQATrackHistosRecEffRecPi,fTracksAODMCCharged,indexAODTr,isGenPrim, 211);
1950 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenPro,fQATrackHistosRecEffRecPro,fTracksAODMCCharged,indexAODTr,isGenPrim, 2212);
1951 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenK,fQATrackHistosRecEffRecK,fTracksAODMCCharged,indexAODTr,isGenPrim, 321);
1952 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenEl,fQATrackHistosRecEffRecEl,fTracksAODMCCharged,indexAODTr,isGenPrim, 11);
1953 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenMu,fQATrackHistosRecEffRecMu,fTracksAODMCCharged,indexAODTr,isGenPrim, 13);
1954 if(fQAMode&1) FillSingleTrackHistosRecGen(0,fQATrackHistosRecEffRecProGFL,fTracksAODMCCharged,indexAODTr,isGenPrim, 2212,kTRUE);
1955 if(fQAMode&1) FillSingleTrackHistosRecGen(0,fQATrackHistosRecEffRecKGFL,fTracksAODMCCharged,indexAODTr,isGenPrim, 321,kTRUE);
1958 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
1959 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPi,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,211);
1960 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPro,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212);
1961 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecK,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321);
1962 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecEl,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,11);
1963 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecMu,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,13);
1964 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kTRUE);
1965 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kTRUE);
1969 Double_t sumPtGenLeadingJetRecEff = 0;
1970 Double_t sumPtGenLeadingJetSec = 0;
1971 Double_t sumPtRecLeadingJetRecEff = 0;
1973 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
1975 if(fLeadingJets && ij>0) continue; // leading/all jets
1977 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
1979 Bool_t isBadJetGenPrim = kFALSE;
1980 Bool_t isBadJetGenSec = kFALSE;
1981 Bool_t isBadJetRec = kFALSE;
1983 // for efficiency: gen tracks from pointing with gen/rec jet
1984 TList* jettracklistGenPrim = new TList();
1986 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
1987 // note : FF recEff gen histos will be somewhat useless in this approach
1989 if(GetFFRadius() >0)
1990 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
1992 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
1994 TList* jettracklistGenSec = new TList();
1995 if(GetFFRadius() >0)
1996 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
1998 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2001 // bin efficiency in jet pt bins using rec tracks
2002 TList* jettracklistRec = new TList();
2003 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2004 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2007 Double_t jetEta = jet->Eta();
2008 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
2010 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
2011 if(GetFFMinNTracks()>0 && jettracklistGenSec->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
2012 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
2014 if(isBadJetRec) continue;
2016 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
2020 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0);
2021 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec);
2023 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecPi,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,211);
2024 else FillJetTrackHistosRec(fFFHistosRecEffRecPi,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,211);
2026 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecPro,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,2212);
2027 else FillJetTrackHistosRec(fFFHistosRecEffRecPro,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,2212);
2029 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecK,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,321);
2030 else FillJetTrackHistosRec(fFFHistosRecEffRecK,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,321);
2032 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecEl,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,11);
2033 else FillJetTrackHistosRec(fFFHistosRecEffRecEl,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,11);
2035 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecMu,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,13);
2036 else FillJetTrackHistosRec(fFFHistosRecEffRecMu,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,13);
2038 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecProGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,2212,kTRUE);
2039 else FillJetTrackHistosRec(fFFHistosRecEffRecProGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,2212,kTRUE);
2041 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecKGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,321,kTRUE);
2042 else FillJetTrackHistosRec(fFFHistosRecEffRecKGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,321,kTRUE);
2046 // secondaries: use jet pt from primaries
2047 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0);
2048 else FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec);
2050 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,211);
2051 else FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,211);
2053 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPro,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212);
2054 else FillJetTrackHistosRec(fFFHistosSecRecPro,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212);
2056 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecK,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321);
2057 else FillJetTrackHistosRec(fFFHistosSecRecK,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321);
2059 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecEl,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,11);
2060 else FillJetTrackHistosRec(fFFHistosSecRecEl,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,11);
2062 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecMu,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,13);
2063 else FillJetTrackHistosRec(fFFHistosSecRecMu,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,13);
2065 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kTRUE);
2066 else FillJetTrackHistosRec(fFFHistosSecRecProGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kTRUE);
2068 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kTRUE);
2069 else FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kTRUE);
2072 delete jettracklistGenPrim;
2073 delete jettracklistGenSec;
2074 delete jettracklistRec;
2080 //___________________
2082 fTracksRecCuts->Clear();
2083 fTracksGen->Clear();
2084 fTracksAODMCCharged->Clear();
2085 fTracksAODMCChargedSec->Clear();
2086 fTracksRecQualityCuts->Clear();
2089 fJetsRecCuts->Clear();
2091 fJetsRecEff->Clear();
2094 PostData(1, fCommonHistList);
2097 //______________________________________________________________
2098 void AliAnalysisTaskIDFFTCF::Terminate(Option_t *)
2102 if(fDebug > 1) printf("AliAnalysisTaskIDFFTCF::Terminate() \n");
2105 //_________________________________________________________________________________
2106 Int_t AliAnalysisTaskIDFFTCF::GetListOfTracks(TList *list, Int_t type)
2108 // fill list of tracks selected according to type
2110 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
2113 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2117 if(!fAOD) return -1;
2119 if(!fAOD->GetTracks()) return 0;
2121 if(type==kTrackUndef) return 0;
2126 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD){
2128 // all rec. tracks, esd filter mask, eta range
2130 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
2131 AliAODTrack *tr = fAOD->GetTrack(it);
2133 if(type == kTrackAODCuts || type==kTrackAODQualityCuts){
2135 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2138 if(fTPCCutMode==kPIDN && !AliIDFFUtils::TPCCutPIDN(tr)){
2141 if(fTPCCutMode==kMIGeo && !AliIDFFUtils::TPCCutMIGeo(tr, fAOD, fStream)){
2145 if(type == kTrackAODCuts){
2146 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2147 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2148 if(tr->Pt() < fTrackPtCut) continue;
2155 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2156 // kine particles, all or rather charged
2157 if(!fMCEvent) return iCount;
2159 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2160 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2162 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2163 if(part->Charge()==0) continue;
2165 if(type == kTrackKineChargedAcceptance &&
2166 ( part->Eta() < fTrackEtaMin
2167 || part->Eta() > fTrackEtaMax
2168 || part->Phi() < fTrackPhiMin
2169 || part->Phi() > fTrackPhiMax
2170 || part->Pt() < fTrackPtCut)) continue;
2177 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
2178 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2179 if(!fAOD) return -1;
2181 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2182 if(!tca)return iCount;
2184 for(int it=0; it<tca->GetEntriesFast(); ++it){
2185 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2187 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
2188 if((type == kTrackAODMCChargedSec) && part->IsPhysicalPrimary())continue;
2190 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
2191 if(part->Charge()==0) continue;
2193 if(type==kTrackAODMCChargedSec){
2195 Int_t iMother = part->GetMother();
2196 if(iMother < 0) continue; // throw out PYTHIA stack partons + incoming protons
2200 if(type==kTrackAODMCChargedAcceptance &&
2201 ( part->Eta() > fTrackEtaMax
2202 || part->Eta() < fTrackEtaMin
2203 || part->Phi() > fTrackPhiMax
2204 || part->Phi() < fTrackPhiMin
2205 || part->Pt() < fTrackPtCut)) continue;
2217 // _______________________________________________________________________________
2218 Int_t AliAnalysisTaskIDFFTCF::GetListOfJets(TList *list, Int_t type)
2220 // fill list of jets selected according to type
2223 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2227 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
2229 if(fBranchRecJets.Length()==0){
2230 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
2231 if(fDebug>1)fAOD->Print();
2235 TClonesArray *aodRecJets = 0;
2236 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
2237 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
2238 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
2241 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
2242 if(fDebug>1)fAOD->Print();
2246 // Reorder jet pt and fill new temporary AliAODJet objects
2249 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
2251 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
2254 if( tmp->Pt() < fJetPtCut ) continue;
2255 if( type == kJetsRecAcceptance &&
2256 ( tmp->Eta() < fJetEtaMin
2257 || tmp->Eta() > fJetEtaMax
2258 || tmp->Phi() < fJetPhiMin
2259 || tmp->Phi() > fJetPhiMax )) continue;
2270 else if(type == kJetsKine || type == kJetsKineAcceptance){
2276 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
2280 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2281 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2282 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2284 if(!pythiaGenHeader){
2285 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2287 if(!hijingGenHeader){
2288 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
2291 TLorentzVector mom[4];
2293 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
2295 for(Int_t i=0; i<2; ++i){
2296 if(!mom[i].Pt()) continue;
2297 jet[i] = new AliAODJet(mom[i]);
2299 if( type == kJetsKineAcceptance &&
2300 ( jet[i]->Eta() < fJetEtaMin
2301 || jet[i]->Eta() > fJetEtaMax
2302 || jet[i]->Phi() < fJetPhiMin
2303 || jet[i]->Phi() > fJetPhiMax )) continue;
2313 // fetch the pythia generated jets
2314 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
2317 AliAODJet *jet = new AliAODJet();
2318 pythiaGenHeader->TriggerJet(ip, p);
2319 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
2321 if( type == kJetsKineAcceptance &&
2322 ( jet->Eta() < fJetEtaMin
2323 || jet->Eta() > fJetEtaMax
2324 || jet->Phi() < fJetPhiMin
2325 || jet->Phi() > fJetPhiMax )) continue;
2333 else if(type == kJetsGen || type == kJetsGenAcceptance ){
2335 if(fBranchGenJets.Length()==0){
2336 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
2340 TClonesArray *aodGenJets = 0;
2341 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
2342 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
2343 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
2347 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
2349 if(fDebug>1)fAOD->Print();
2355 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
2357 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
2360 if( tmp->Pt() < fJetPtCut ) continue;
2361 if( type == kJetsGenAcceptance &&
2362 ( tmp->Eta() < fJetEtaMin
2363 || tmp->Eta() > fJetEtaMax
2364 || tmp->Phi() < fJetPhiMin
2365 || tmp->Phi() > fJetPhiMax )) continue;
2374 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
2379 // _________________________________________________________________________________________________________
2380 void AliAnalysisTaskIDFFTCF::SetProperties(THnSparse* h, Int_t dim, const char** labels)
2382 // Set properties of THnSparse
2384 for(Int_t i=0; i<dim; i++){
2385 h->GetAxis(i)->SetTitle(labels[i]);
2386 h->GetAxis(i)->SetTitleColor(1);
2390 // __________________________________________________________________________________________
2391 void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y)
2393 //Set properties of histos (x and y title)
2397 h->GetXaxis()->SetTitleColor(1);
2398 h->GetYaxis()->SetTitleColor(1);
2401 // _________________________________________________________________________________________________________
2402 void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y, const char* z)
2404 //Set properties of histos (x,y and z title)
2409 h->GetXaxis()->SetTitleColor(1);
2410 h->GetYaxis()->SetTitleColor(1);
2411 h->GetZaxis()->SetTitleColor(1);
2414 // ________________________________________________________________________________________________________________________________________________________
2415 void AliAnalysisTaskIDFFTCF::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
2416 Double_t radius, Double_t& sumPt, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
2418 // fill list of tracks in cone around jet axis
2421 Bool_t isBadMaxPt = kFALSE;
2422 Bool_t isBadMinPt = kTRUE;
2425 jet->PxPyPz(jetMom);
2426 TVector3 jet3mom(jetMom);
2428 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
2430 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
2432 Double_t trackMom[3];
2433 track->PxPyPz(trackMom);
2434 TVector3 track3mom(trackMom);
2436 Double_t dR = jet3mom.DeltaR(track3mom);
2440 outputlist->Add(track);
2442 sumPt += track->Pt();
2444 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2445 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2450 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2451 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2456 // _________________________________________________________________________________________________________________________________________________________________
2457 void AliAnalysisTaskIDFFTCF::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
2459 // list of jet tracks from trackrefs
2461 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
2463 Bool_t isBadMaxPt = kFALSE;
2464 Bool_t isBadMinPt = kTRUE;
2466 for(Int_t itrack=0; itrack<nTracks; itrack++) {
2468 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
2470 AliError("expected ref track not found ");
2474 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
2475 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2476 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2482 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2483 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2488 // _ ________________________________________________________________________________________________________________________________
2489 void AliAnalysisTaskIDFFTCF::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
2490 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
2492 // associate generated and reconstructed tracks, fill TArrays of list indices
2494 Int_t nTracksRec = tracksRec->GetSize();
2495 Int_t nTracksGen = tracksAODMCCharged->GetSize();
2496 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2499 if(!nTracksGen) return;
2503 indexAODTr.Set(nTracksGen);
2504 indexMCTr.Set(nTracksRec);
2505 isRefGen.Set(nTracksGen);
2507 indexAODTr.Reset(-1);
2508 indexMCTr.Reset(-1);
2511 // loop over reconstructed tracks, get generated track
2513 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
2515 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2516 if(!rectrack)continue;
2517 Int_t label = TMath::Abs(rectrack->GetLabel());
2519 // find MC track in our list
2520 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
2522 Int_t listIndex = -1;
2523 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
2527 indexAODTr[listIndex] = iRec;
2528 indexMCTr[iRec] = listIndex;
2533 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
2535 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2537 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
2538 if(!gentrack)continue;
2539 Int_t pdg = gentrack->GetPdgCode();
2541 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
2542 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
2543 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
2545 isRefGen[iGen] = kTRUE;
2547 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2550 Float_t genPt = gentrack->Pt();
2551 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2553 Float_t recPt = vt->Pt();
2554 fh2PtRecVsGen->Fill(genPt,recPt);
2561 // _____________________________________________________________________________________________________________________________________________
2562 void AliAnalysisTaskIDFFTCF::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
2563 const TArrayI& indexAODTr, const TArrayS& isRefGen, Int_t pdg, Bool_t scaleGFL){
2565 // fill QA for single track reconstruction efficiency
2567 Int_t nTracksGen = tracksGen->GetSize();
2569 if(!nTracksGen) return;
2571 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2573 if(isRefGen[iGen] != 1) continue; // select primaries
2575 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
2576 if(!gentrack) continue;
2577 Double_t ptGen = gentrack->Pt();
2578 Double_t etaGen = gentrack->Eta();
2579 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2581 // apply same acc & pt cuts as for FF
2583 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
2584 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
2585 if(ptGen < fTrackPtCut) continue;
2586 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2588 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
2590 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2592 if(iRec>=0 && trackQARec){
2596 Double_t GFLcorr = 1;
2597 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2598 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2600 Double_t weight = 1;
2601 if(GFLcorr > 0) weight = 1/GFLcorr;
2603 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
2605 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
2610 // ______________________________________________________________________________________________________________________________________________________
2612 void AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
2613 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
2614 const TArrayS& isRefGen, TList* jetTrackListTR, Int_t pdg, Bool_t scaleGFL)
2616 // fill objects for jet track reconstruction efficiency or secondaries contamination
2617 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
2618 // jetTrackListTR pointer: track refs if not NULL
2621 // ensure proper normalization, even for secondaries
2622 Double_t jetPtRec = jet->Pt();
2623 ffhistRec->FillFF(-1, jetPtRec, kTRUE);
2625 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
2626 if(nTracksJet == 0) return;
2628 TList* listRecTracks = new TList();
2629 listRecTracks->Clear();
2631 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
2633 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
2634 if(!gentrack)continue;
2635 // find jet track in gen tracks list
2636 Int_t iGen = tracksGen->IndexOf(gentrack);
2639 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
2643 if(isRefGen[iGen] != 1) continue; // select primaries
2645 Double_t ptGen = gentrack->Pt();
2646 Double_t etaGen = gentrack->Eta();
2647 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2649 // gen level acc & pt cuts - skip in case of track refs
2650 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
2651 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
2652 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
2653 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2656 Double_t ptRec = -1;
2658 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2659 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
2661 Bool_t isJetTrack = kFALSE;
2662 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
2666 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
2667 if(!rectrack) continue;
2669 ptRec = rectrack->Pt();
2672 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
2673 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
2678 Double_t trackPt = ptRec;
2679 Bool_t incrementJetPt = kFALSE;
2683 //Double_t weight = 1;
2684 //if(gentrack->GetPdgCode() == -2212) weight = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2685 //else if(gentrack->GetPdgCode() == -321) weight = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2688 Double_t GFLcorr = 1;
2689 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2690 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2692 Double_t weight = 1;
2693 if(GFLcorr > 0) weight = 1/GFLcorr;
2695 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt, 0, kTRUE, weight );
2697 else ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt );
2699 listRecTracks->Add(rectrack);
2704 delete listRecTracks;
2708 // ______________________________________________________________________________________________________________________________________________________
2709 Float_t AliAnalysisTaskIDFFTCF::CalcJetArea(const Float_t etaJet, const Float_t rc) const
2711 // calculate area of jet with eta etaJet and radius rc
2713 Float_t detamax = etaJet + rc;
2714 Float_t detamin = etaJet - rc;
2715 Float_t accmax = 0.0; Float_t accmin = 0.0;
2716 if(detamax > fTrackEtaMax){ // sector outside etamax
2717 Float_t h = fTrackEtaMax - etaJet;
2718 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2720 if(detamin < fTrackEtaMin){ // sector outside etamin
2721 Float_t h = fTrackEtaMax + etaJet;
2722 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2724 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
2730 //____________________________________________________________________________________________________________________________________________
2731 void AliAnalysisTaskIDFFTCF::BookQAHistos(TList* list, AliFragFuncQATrackHistos** rec, TString strTitRec, AliFragFuncQATrackHistos** gen, TString strTitGen,
2732 AliFragFuncQATrackHistos** sec, TString strTitSec){
2736 if(strTitRec.Length()>0){
2738 *rec = new AliFragFuncQATrackHistos(strTitRec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2739 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2740 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2741 fQATrackHighPtThreshold);
2743 (*rec)->DefineHistos();
2744 (*rec)->AddToOutput(list);
2747 if(strTitGen.Length()>0){
2749 *gen = new AliFragFuncQATrackHistos(strTitGen, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2750 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2751 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2752 fQATrackHighPtThreshold);
2754 (*gen)->DefineHistos();
2755 (*gen)->AddToOutput(list);
2758 if(strTitSec.Length()>0){
2760 *sec = new AliFragFuncQATrackHistos(strTitSec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2761 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2762 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2763 fQATrackHighPtThreshold);
2765 (*sec)->DefineHistos();
2766 (*sec)->AddToOutput(list);
2771 //____________________________________________________________________________________________________________________________________________
2772 void AliAnalysisTaskIDFFTCF::BookFFHistos(TList* list, AliFragFuncHistos** rec, TString strTitRec, AliFragFuncHistos** gen, TString strTitGen,
2773 AliFragFuncHistos** sec, TString strTitSec){
2777 if(strTitRec.Length()>0){
2779 *rec = new AliFragFuncHistos(strTitRec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2780 fFFNBinsPt, fFFPtMin, fFFPtMax,
2781 fFFNBinsXi, fFFXiMin, fFFXiMax,
2782 fFFNBinsZ , fFFZMin , fFFZMax);
2784 (*rec)->DefineHistos();
2785 (*rec)->AddToOutput(list);
2788 if(strTitGen.Length()>0){
2790 *gen = new AliFragFuncHistos(strTitGen, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2791 fFFNBinsPt, fFFPtMin, fFFPtMax,
2792 fFFNBinsXi, fFFXiMin, fFFXiMax,
2793 fFFNBinsZ , fFFZMin , fFFZMax);
2795 (*gen)->DefineHistos();
2796 (*gen)->AddToOutput(list);
2799 if(strTitSec.Length()>0){
2801 *sec = new AliFragFuncHistos(strTitSec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2802 fFFNBinsPt, fFFPtMin, fFFPtMax,
2803 fFFNBinsXi, fFFXiMin, fFFXiMax,
2804 fFFNBinsZ , fFFZMin , fFFZMax);
2806 (*sec)->DefineHistos();
2807 (*sec)->AddToOutput(list);
2811 //____________________________________________________________________________________
2812 Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
2814 // GEANT-FLUKA correction for pbar from Roberto via Benjamin
2816 Double_t corr = 1. - 0.129758 * TMath::Exp(-pTmc * 0.679612);
2820 //____________________________________________________________________________________
2821 Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
2824 // GEANT-FLUKA correction for K- from Roberto via Benjamin
2826 Double_t corr = TMath::Min((0.972865 + 0.0117093 * pTmc), 1.);