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"
36 #include "AliAODInputHandler.h"
37 #include "AliAODHandler.h"
38 #include "AliESDEvent.h"
39 #include "AliAODMCParticle.h"
40 #include "AliAODJet.h"
41 #include "AliAODJetEventBackground.h"
42 #include "AliGenPythiaEventHeader.h"
43 #include "AliGenHijingEventHeader.h"
44 #include "AliInputEventHandler.h"
46 #include "AliAnalysisHelperJetTasks.h"
47 #include "AliAnalysisManager.h"
48 #include "AliAnalysisTaskSE.h"
49 #include "AliVParticle.h"
50 #include "AliVEvent.h"
52 #include "AliAnalysisTaskFragmentationFunction.h"
54 ClassImp(AliAnalysisTaskFragmentationFunction)
56 //____________________________________________________________________________
57 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
64 ,fBranchRecJets("jets")
65 ,fBranchRecBackJets("")
66 ,fBranchRecBckgClusters("")
68 ,fBranchEmbeddedJets("")
72 ,fUseAODInputJets(kTRUE)
74 ,fUsePhysicsSelection(kTRUE)
84 ,fUseExtraTracksBgr(0)
85 ,fCutFractionPtEmbedded(0)
86 ,fUseEmbeddedJetAxis(0)
95 ,fDiJetPtFractionCut(0)
109 ,fUseRecEffRecJetPtBins(0)
110 ,fUseResponseRecJetPtBins(1)
115 ,fTracksAODMCCharged(0)
116 ,fTracksAODMCChargedSec(0)
117 ,fTracksRecQualityCuts(0)
126 ,fQATrackHistosRec(0)
127 ,fQATrackHistosRecCuts(0)
128 ,fQATrackHistosGen(0)
130 ,fQAJetHistosRecCuts(0)
131 ,fQAJetHistosRecCutsLeading(0)
133 ,fQAJetHistosGenLeading(0)
134 ,fQAJetHistosRecEffLeading(0)
136 ,fFFHistosRecLeading(0)
137 ,fFFHistosRecLeadingTrack(0)
139 ,fFFHistosGenLeading(0)
140 ,fFFHistosGenLeadingTrack(0)
142 ,fIJHistosRecLeading(0)
143 ,fIJHistosRecLeadingTrack(0)
145 ,fIJHistosGenLeading(0)
146 ,fIJHistosGenLeadingTrack(0)
147 ,fFFDiJetHistosRecCuts(0)
148 ,fFFDiJetHistosRecLeading(0)
149 ,fFFDiJetHistosRecLeadingTrack(0)
150 ,fFFDiJetHistosGen(0)
151 ,fFFDiJetHistosGenLeading(0)
152 ,fFFDiJetHistosGenLeadingTrack(0)
153 ,fQADiJetHistosRecCuts(0)
154 ,fQADiJetHistosGen(0)
155 ,fPhiCorrHistosJetArea(0)
156 ,fPhiCorrHistosTransverseArea(0)
157 ,fPhiCorrHistosAwayArea(0)
158 ,fQATrackHighPtThreshold(0)
208 ,fDiJetNBinsJetInvMass(0)
209 ,fDiJetJetInvMassMin(0)
210 ,fDiJetJetInvMassMax(0)
223 ,fQADiJetNBinsInvMass(0)
224 ,fQADiJetInvMassMin(0)
225 ,fQADiJetInvMassMax(0)
226 ,fQADiJetNBinsJetPt(0)
229 ,fQADiJetNBinsDeltaPhi(0)
230 ,fQADiJetDeltaPhiMin(0)
231 ,fQADiJetDeltaPhiMax(0)
232 ,fQADiJetNBinsDeltaEta(0)
233 ,fQADiJetDeltaEtaMin(0)
234 ,fQADiJetDeltaEtaMax(0)
235 ,fQADiJetNBinsDeltaPt(0)
236 ,fQADiJetDeltaPtMin(0)
237 ,fQADiJetDeltaPtMax(0)
238 ,fQADiJetNBinsInBal(0)
252 ,fh1VertexNContributors(0)
256 ,fh2TrackPtVsDCAXY(0)
266 ,fh1nRecBckgJetsCuts(0)
268 ,fh2PtRecVsGenPrim(0)
270 ,fQATrackHistosRecEffGen(0)
271 ,fQATrackHistosRecEffRec(0)
272 ,fQATrackHistosSecRec(0)
273 ,fFFHistosRecEffGen(0)
274 ,fFFHistosRecEffRec(0)
276 ,fhnResponseSinglePt(0)
277 ,fh2SingleInvPtRecMnGenVsPtGen(0)
278 ,fhnResponseJetTrackPt(0)
282 ,fh1OutLeadingMult(0)
283 ,fh1OutLeadingStatMult(0)
286 ,fh1ASideWindowMult(0)
287 ,fh1PerpWindowMult(0)
290 ,fh1MedianClustersMult(0)
291 ,fh1OutClustersMult(0)
292 ,fh1FractionPtEmbedded(0)
294 ,fh2DeltaPtVsJetPtEmbedded(0)
295 ,fh2DeltaPtVsRecJetPtEmbedded(0)
296 ,fh1DeltaREmbedded(0)
297 ,fh2ptVsDistNN_pt50_rec(0)
298 ,fh2ptVsDistNN_pt50_nonRec(0)
299 ,fh2ptVsDistNN_pt10_rec(0)
300 ,fh2ptVsDistNN_pt10_nonRec(0)
301 ,fQABckgHisto0RecCuts(0)
303 ,fQABckgHisto1RecCuts(0)
305 ,fQABckgHisto2RecCuts(0)
307 ,fQABckgHisto3RecCuts(0)
309 ,fQABckgHisto4RecCuts(0)
311 ,fFFBckgHisto0RecCuts(0)
312 ,fFFBckgHisto0RecLeading(0)
314 ,fFFBckgHisto0GenLeading(0)
315 ,fFFBckgHisto1RecCuts(0)
316 ,fFFBckgHisto1RecLeading(0)
318 ,fFFBckgHisto1GenLeading(0)
319 ,fFFBckgHisto2RecCuts(0)
320 ,fFFBckgHisto2RecLeading(0)
322 ,fFFBckgHisto2GenLeading(0)
323 ,fFFBckgHisto3RecCuts(0)
324 ,fFFBckgHisto3RecLeading(0)
326 ,fFFBckgHisto3GenLeading(0)
327 ,fFFBckgHisto4RecCuts(0)
328 ,fFFBckgHisto4RecLeading(0)
330 ,fFFBckgHisto4GenLeading(0)
331 ,fIJBckgHisto0RecCuts(0)
332 ,fIJBckgHisto0RecLeading(0)
334 ,fIJBckgHisto0GenLeading(0)
335 ,fIJBckgHisto1RecCuts(0)
336 ,fIJBckgHisto1RecLeading(0)
338 ,fIJBckgHisto1GenLeading(0)
339 ,fIJBckgHisto2RecCuts(0)
340 ,fIJBckgHisto2RecLeading(0)
342 ,fIJBckgHisto2GenLeading(0)
343 ,fIJBckgHisto3RecCuts(0)
344 ,fIJBckgHisto3RecLeading(0)
346 ,fIJBckgHisto3GenLeading(0)
347 ,fIJBckgHisto4RecCuts(0)
348 ,fIJBckgHisto4RecLeading(0)
350 ,fIJBckgHisto4GenLeading(0)
354 // default constructor
362 //__________________________________________________________________________________________
363 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name)
364 : AliAnalysisTaskSE(name)
370 ,fBranchRecJets("jets")
371 ,fBranchRecBackJets("")
372 ,fBranchRecBckgClusters("")
374 ,fBranchEmbeddedJets("")
378 ,fUseAODInputJets(kTRUE)
380 ,fUsePhysicsSelection(kTRUE)
381 ,fEvtSelectionMask(0)
390 ,fUseExtraTracksBgr(0)
391 ,fCutFractionPtEmbedded(0)
392 ,fUseEmbeddedJetAxis(0)
393 ,fUseEmbeddedJetPt(0)
400 ,fDiJetDeltaPhiCut(0)
401 ,fDiJetPtFractionCut(0)
415 ,fUseRecEffRecJetPtBins(0)
416 ,fUseResponseRecJetPtBins(1)
421 ,fTracksAODMCCharged(0)
422 ,fTracksAODMCChargedSec(0)
423 ,fTracksRecQualityCuts(0)
432 ,fQATrackHistosRec(0)
433 ,fQATrackHistosRecCuts(0)
434 ,fQATrackHistosGen(0)
436 ,fQAJetHistosRecCuts(0)
437 ,fQAJetHistosRecCutsLeading(0)
439 ,fQAJetHistosGenLeading(0)
440 ,fQAJetHistosRecEffLeading(0)
442 ,fFFHistosRecLeading(0)
443 ,fFFHistosRecLeadingTrack(0)
445 ,fFFHistosGenLeading(0)
446 ,fFFHistosGenLeadingTrack(0)
448 ,fIJHistosRecLeading(0)
449 ,fIJHistosRecLeadingTrack(0)
451 ,fIJHistosGenLeading(0)
452 ,fIJHistosGenLeadingTrack(0)
453 ,fFFDiJetHistosRecCuts(0)
454 ,fFFDiJetHistosRecLeading(0)
455 ,fFFDiJetHistosRecLeadingTrack(0)
456 ,fFFDiJetHistosGen(0)
457 ,fFFDiJetHistosGenLeading(0)
458 ,fFFDiJetHistosGenLeadingTrack(0)
459 ,fQADiJetHistosRecCuts(0)
460 ,fQADiJetHistosGen(0)
461 ,fPhiCorrHistosJetArea(0)
462 ,fPhiCorrHistosTransverseArea(0)
463 ,fPhiCorrHistosAwayArea(0)
464 ,fQATrackHighPtThreshold(0)
514 ,fDiJetNBinsJetInvMass(0)
515 ,fDiJetJetInvMassMin(0)
516 ,fDiJetJetInvMassMax(0)
529 ,fQADiJetNBinsInvMass(0)
530 ,fQADiJetInvMassMin(0)
531 ,fQADiJetInvMassMax(0)
532 ,fQADiJetNBinsJetPt(0)
535 ,fQADiJetNBinsDeltaPhi(0)
536 ,fQADiJetDeltaPhiMin(0)
537 ,fQADiJetDeltaPhiMax(0)
538 ,fQADiJetNBinsDeltaEta(0)
539 ,fQADiJetDeltaEtaMin(0)
540 ,fQADiJetDeltaEtaMax(0)
541 ,fQADiJetNBinsDeltaPt(0)
542 ,fQADiJetDeltaPtMin(0)
543 ,fQADiJetDeltaPtMax(0)
544 ,fQADiJetNBinsInBal(0)
558 ,fh1VertexNContributors(0)
562 ,fh2TrackPtVsDCAXY(0)
572 ,fh1nRecBckgJetsCuts(0)
574 ,fh2PtRecVsGenPrim(0)
576 ,fQATrackHistosRecEffGen(0)
577 ,fQATrackHistosRecEffRec(0)
578 ,fQATrackHistosSecRec(0)
579 ,fFFHistosRecEffGen(0)
580 ,fFFHistosRecEffRec(0)
582 ,fhnResponseSinglePt(0)
583 ,fh2SingleInvPtRecMnGenVsPtGen(0)
584 ,fhnResponseJetTrackPt(0)
588 ,fh1OutLeadingMult(0)
589 ,fh1OutLeadingStatMult(0)
592 ,fh1ASideWindowMult(0)
593 ,fh1PerpWindowMult(0)
596 ,fh1MedianClustersMult(0)
597 ,fh1OutClustersMult(0)
598 ,fh1FractionPtEmbedded(0)
600 ,fh2DeltaPtVsJetPtEmbedded(0)
601 ,fh2DeltaPtVsRecJetPtEmbedded(0)
602 ,fh1DeltaREmbedded(0)
603 ,fh2ptVsDistNN_pt50_rec(0)
604 ,fh2ptVsDistNN_pt50_nonRec(0)
605 ,fh2ptVsDistNN_pt10_rec(0)
606 ,fh2ptVsDistNN_pt10_nonRec(0)
607 ,fQABckgHisto0RecCuts(0)
609 ,fQABckgHisto1RecCuts(0)
611 ,fQABckgHisto2RecCuts(0)
613 ,fQABckgHisto3RecCuts(0)
615 ,fQABckgHisto4RecCuts(0)
617 ,fFFBckgHisto0RecCuts(0)
618 ,fFFBckgHisto0RecLeading(0)
620 ,fFFBckgHisto0GenLeading(0)
621 ,fFFBckgHisto1RecCuts(0)
622 ,fFFBckgHisto1RecLeading(0)
624 ,fFFBckgHisto1GenLeading(0)
625 ,fFFBckgHisto2RecCuts(0)
626 ,fFFBckgHisto2RecLeading(0)
628 ,fFFBckgHisto2GenLeading(0)
629 ,fFFBckgHisto3RecCuts(0)
630 ,fFFBckgHisto3RecLeading(0)
632 ,fFFBckgHisto3GenLeading(0)
633 ,fFFBckgHisto4RecCuts(0)
634 ,fFFBckgHisto4RecLeading(0)
636 ,fFFBckgHisto4GenLeading(0)
637 ,fIJBckgHisto0RecCuts(0)
638 ,fIJBckgHisto0RecLeading(0)
640 ,fIJBckgHisto0GenLeading(0)
641 ,fIJBckgHisto1RecCuts(0)
642 ,fIJBckgHisto1RecLeading(0)
644 ,fIJBckgHisto1GenLeading(0)
645 ,fIJBckgHisto2RecCuts(0)
646 ,fIJBckgHisto2RecLeading(0)
648 ,fIJBckgHisto2GenLeading(0)
649 ,fIJBckgHisto3RecCuts(0)
650 ,fIJBckgHisto3RecLeading(0)
652 ,fIJBckgHisto3GenLeading(0)
653 ,fIJBckgHisto4RecCuts(0)
654 ,fIJBckgHisto4RecLeading(0)
656 ,fIJBckgHisto4GenLeading(0)
667 DefineOutput(1,TList::Class());
672 //__________________________________________________________________________________________________________________________
673 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction ©)
674 : AliAnalysisTaskSE()
677 ,fAODJets(copy.fAODJets)
678 ,fAODExtension(copy.fAODExtension)
679 ,fNonStdFile(copy.fNonStdFile)
680 ,fBranchRecJets(copy.fBranchRecJets)
681 ,fBranchRecBackJets(copy.fBranchRecBackJets)
682 ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
683 ,fBranchGenJets(copy.fBranchGenJets)
684 ,fBranchEmbeddedJets(copy.fBranchEmbeddedJets)
685 ,fTrackTypeGen(copy.fTrackTypeGen)
686 ,fJetTypeGen(copy.fJetTypeGen)
687 ,fJetTypeRecEff(copy.fJetTypeRecEff)
688 ,fUseAODInputJets(copy.fUseAODInputJets)
689 ,fFilterMask(copy.fFilterMask)
690 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
691 ,fEvtSelectionMask(copy.fEvtSelectionMask)
692 ,fEventClass(copy.fEventClass)
693 ,fMaxVertexZ(copy.fMaxVertexZ)
694 ,fTrackPtCut(copy.fTrackPtCut)
695 ,fTrackEtaMin(copy.fTrackEtaMin)
696 ,fTrackEtaMax(copy.fTrackEtaMax)
697 ,fTrackPhiMin(copy.fTrackPhiMin)
698 ,fTrackPhiMax(copy.fTrackPhiMax)
699 ,fUseExtraTracks(copy.fUseExtraTracks)
700 ,fUseExtraTracksBgr(copy.fUseExtraTracksBgr)
701 ,fCutFractionPtEmbedded(copy.fCutFractionPtEmbedded)
702 ,fUseEmbeddedJetAxis(copy.fUseEmbeddedJetAxis)
703 ,fUseEmbeddedJetPt(copy.fUseEmbeddedJetPt)
704 ,fJetPtCut(copy.fJetPtCut)
705 ,fJetEtaMin(copy.fJetEtaMin)
706 ,fJetEtaMax(copy.fJetEtaMax)
707 ,fJetPhiMin(copy.fJetPhiMin)
708 ,fJetPhiMax(copy.fJetPhiMax)
709 ,fDiJetCut(copy.fDiJetCut)
710 ,fDiJetDeltaPhiCut(copy.fDiJetDeltaPhiCut)
711 ,fDiJetPtFractionCut(copy.fDiJetPtFractionCut)
712 ,fDiJetCDFCut(copy.fDiJetCDFCut)
713 ,fDiJetKindBins(copy.fDiJetKindBins)
714 ,fFFRadius(copy.fFFRadius)
715 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
716 ,fFFMinnTracks(copy.fFFMinnTracks)
717 ,fFFBckgRadius(copy.fFFBckgRadius)
718 ,fBckgMode(copy.fBckgMode)
719 ,fIJMode(copy.fIJMode)
720 ,fQAMode(copy.fQAMode)
721 ,fFFMode(copy.fFFMode)
722 ,fDJMode(copy.fDJMode)
723 ,fEffMode(copy.fEffMode)
724 ,fPhiCorrMode(copy.fPhiCorrMode)
725 ,fUseRecEffRecJetPtBins(copy.fUseRecEffRecJetPtBins)
726 ,fUseResponseRecJetPtBins(copy.fUseResponseRecJetPtBins)
727 ,fAvgTrials(copy.fAvgTrials)
728 ,fTracksRec(copy.fTracksRec)
729 ,fTracksRecCuts(copy.fTracksRecCuts)
730 ,fTracksGen(copy.fTracksGen)
731 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
732 ,fTracksAODMCChargedSec(copy.fTracksAODMCChargedSec)
733 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
734 ,fJetsRec(copy.fJetsRec)
735 ,fJetsRecCuts(copy.fJetsRecCuts)
736 ,fJetsGen(copy.fJetsGen)
737 ,fJetsRecEff(copy.fJetsRecEff)
738 ,fJetsEmbedded(copy.fJetsEmbedded)
739 ,fBckgJetsRec(copy.fBckgJetsRec)
740 ,fBckgJetsRecCuts(copy.fBckgJetsRecCuts)
741 ,fBckgJetsGen(copy.fBckgJetsGen)
742 ,fQATrackHistosRec(copy.fQATrackHistosRec)
743 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
744 ,fQATrackHistosGen(copy.fQATrackHistosGen)
745 ,fQAJetHistosRec(copy.fQAJetHistosRec)
746 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
747 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
748 ,fQAJetHistosGen(copy.fQAJetHistosGen)
749 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
750 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
751 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
752 ,fFFHistosRecLeading(copy.fFFHistosRecLeading)
753 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
754 ,fFFHistosGen(copy.fFFHistosGen)
755 ,fFFHistosGenLeading(copy.fFFHistosGenLeading)
756 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
757 ,fIJHistosRecCuts(copy.fIJHistosRecCuts)
758 ,fIJHistosRecLeading(copy.fIJHistosRecLeading)
759 ,fIJHistosRecLeadingTrack(copy.fIJHistosRecLeadingTrack)
760 ,fIJHistosGen(copy.fIJHistosGen)
761 ,fIJHistosGenLeading(copy.fIJHistosGenLeading)
762 ,fIJHistosGenLeadingTrack(copy.fIJHistosGenLeadingTrack)
763 ,fFFDiJetHistosRecCuts(copy.fFFDiJetHistosRecCuts)
764 ,fFFDiJetHistosRecLeading(copy.fFFDiJetHistosRecLeading)
765 ,fFFDiJetHistosRecLeadingTrack(copy.fFFDiJetHistosRecLeadingTrack)
766 ,fFFDiJetHistosGen(copy.fFFDiJetHistosGen)
767 ,fFFDiJetHistosGenLeading(copy.fFFDiJetHistosGenLeading)
768 ,fFFDiJetHistosGenLeadingTrack(copy.fFFDiJetHistosGenLeadingTrack)
769 ,fQADiJetHistosRecCuts(copy.fQADiJetHistosRecCuts)
770 ,fQADiJetHistosGen(copy.fQADiJetHistosGen)
771 ,fPhiCorrHistosJetArea(copy.fPhiCorrHistosJetArea)
772 ,fPhiCorrHistosTransverseArea(copy.fPhiCorrHistosTransverseArea)
773 ,fPhiCorrHistosAwayArea(copy.fPhiCorrHistosAwayArea)
774 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
775 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
776 ,fFFJetPtMin(copy.fFFJetPtMin)
777 ,fFFJetPtMax(copy.fFFJetPtMax)
778 ,fFFNBinsPt(copy.fFFNBinsPt)
779 ,fFFPtMin(copy.fFFPtMin)
780 ,fFFPtMax(copy.fFFPtMax)
781 ,fFFNBinsXi(copy.fFFNBinsXi)
782 ,fFFXiMin(copy.fFFXiMin)
783 ,fFFXiMax(copy.fFFXiMax)
784 ,fFFNBinsZ(copy.fFFNBinsZ)
785 ,fFFZMin(copy.fFFZMin)
786 ,fFFZMax(copy.fFFZMax)
787 ,fFFLogZBins(copy.fFFLogZBins)
788 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
789 ,fQAJetPtMin(copy.fQAJetPtMin)
790 ,fQAJetPtMax(copy.fQAJetPtMax)
791 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
792 ,fQAJetEtaMin(copy.fQAJetEtaMin)
793 ,fQAJetEtaMax(copy.fQAJetEtaMax)
794 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
795 ,fQAJetPhiMin(copy.fQAJetPhiMin)
796 ,fQAJetPhiMax(copy.fQAJetPhiMax)
797 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
798 ,fQATrackPtMin(copy.fQATrackPtMin)
799 ,fQATrackPtMax(copy.fQATrackPtMax)
800 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
801 ,fQATrackEtaMin(copy.fQATrackEtaMin)
802 ,fQATrackEtaMax(copy.fQATrackEtaMax)
803 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
804 ,fQATrackPhiMin(copy.fQATrackPhiMin)
805 ,fQATrackPhiMax(copy.fQATrackPhiMax)
806 ,fIJNBinsJetPt(copy.fIJNBinsJetPt)
807 ,fIJJetPtMin(copy.fIJJetPtMin)
808 ,fIJJetPtMax(copy.fIJJetPtMax)
809 ,fIJNBinsPt(copy.fIJNBinsPt)
810 ,fIJPtMin(copy.fIJPtMin)
811 ,fIJPtMax(copy.fIJPtMax)
812 ,fIJNBinsZ(copy.fIJNBinsZ)
813 ,fIJZMin(copy.fIJZMin)
814 ,fIJZMax(copy.fIJZMax)
815 ,fIJNBinsCosTheta(copy.fIJNBinsCosTheta)
816 ,fIJCosThetaMin(copy.fIJCosThetaMin)
817 ,fIJCosThetaMax(copy.fIJCosThetaMax)
818 ,fIJNBinsTheta(copy.fIJNBinsTheta)
819 ,fIJThetaMin(copy.fIJThetaMin)
820 ,fIJThetaMax(copy.fIJThetaMax)
821 ,fIJNBinsJt(copy.fIJNBinsJt)
822 ,fIJJtMin(copy.fIJJtMin)
823 ,fIJJtMax(copy.fIJJtMax)
824 ,fDiJetNBinsJetInvMass(copy.fDiJetNBinsJetInvMass)
825 ,fDiJetJetInvMassMin(copy.fDiJetJetInvMassMin)
826 ,fDiJetJetInvMassMax(copy.fDiJetJetInvMassMax)
827 ,fDiJetNBinsJetPt(copy.fDiJetNBinsJetPt)
828 ,fDiJetJetPtMin(copy.fDiJetJetPtMin)
829 ,fDiJetJetPtMax(copy.fDiJetJetPtMax)
830 ,fDiJetNBinsPt(copy.fDiJetNBinsPt)
831 ,fDiJetPtMin(copy.fDiJetPtMin)
832 ,fDiJetPtMax(copy.fDiJetPtMax)
833 ,fDiJetNBinsXi(copy.fDiJetNBinsXi)
834 ,fDiJetXiMin(copy.fDiJetXiMin)
835 ,fDiJetXiMax(copy.fDiJetXiMax)
836 ,fDiJetNBinsZ(copy.fDiJetNBinsZ)
837 ,fDiJetZMin(copy.fDiJetZMin)
838 ,fDiJetZMax(copy.fDiJetZMax)
839 ,fQADiJetNBinsInvMass(copy.fQADiJetNBinsInvMass)
840 ,fQADiJetInvMassMin(copy.fQADiJetInvMassMin)
841 ,fQADiJetInvMassMax(copy.fQADiJetInvMassMax)
842 ,fQADiJetNBinsJetPt(copy.fQADiJetNBinsJetPt)
843 ,fQADiJetJetPtMin(copy.fQADiJetJetPtMin)
844 ,fQADiJetJetPtMax(copy.fQADiJetJetPtMax)
845 ,fQADiJetNBinsDeltaPhi(copy.fQADiJetNBinsDeltaPhi)
846 ,fQADiJetDeltaPhiMin(copy.fQADiJetDeltaPhiMin)
847 ,fQADiJetDeltaPhiMax(copy.fQADiJetDeltaPhiMax)
848 ,fQADiJetNBinsDeltaEta(copy.fQADiJetNBinsDeltaEta)
849 ,fQADiJetDeltaEtaMin(copy.fQADiJetDeltaEtaMin)
850 ,fQADiJetDeltaEtaMax(copy.fQADiJetDeltaEtaMax)
851 ,fQADiJetNBinsDeltaPt(copy.fQADiJetNBinsDeltaPt)
852 ,fQADiJetDeltaPtMin(copy.fQADiJetDeltaPtMin)
853 ,fQADiJetDeltaPtMax(copy.fQADiJetDeltaPtMax)
854 ,fQADiJetNBinsInBal(copy.fQADiJetNBinsInBal)
855 ,fQADiJetInBalMin(copy.fQADiJetInBalMin)
856 ,fQADiJetInBalMax(copy.fQADiJetInBalMax)
857 ,fPhiCorrNBinsPt(copy.fPhiCorrNBinsPt)
858 ,fPhiCorrPtMin(copy.fPhiCorrPtMin)
859 ,fPhiCorrPtMax(copy.fPhiCorrPtMax)
860 ,fPhiCorrNBinsEta(copy.fPhiCorrNBinsEta)
861 ,fPhiCorrEtaMin(copy.fPhiCorrEtaMin)
862 ,fPhiCorrEtaMax(copy.fPhiCorrEtaMax)
863 ,fPhiCorrNBinsPhi(copy.fPhiCorrNBinsPhi)
864 ,fPhiCorrPhiMin(copy.fPhiCorrPhiMin)
865 ,fPhiCorrPhiMax(copy.fPhiCorrPhiMax)
866 ,fCommonHistList(copy.fCommonHistList)
867 ,fh1EvtSelection(copy.fh1EvtSelection)
868 ,fh1VertexNContributors(copy.fh1VertexNContributors)
869 ,fh1VertexZ(copy.fh1VertexZ)
870 ,fh1EvtMult(copy.fh1EvtMult)
871 ,fh1EvtCent(copy.fh1EvtCent)
872 ,fh2TrackPtVsDCAXY(copy.fh2TrackPtVsDCAXY)
873 ,fh2TrackPtVsDCAZ(copy.fh2TrackPtVsDCAXY)
874 ,fh1Xsec(copy.fh1Xsec)
875 ,fh1Trials(copy.fh1Trials)
876 ,fh1PtHard(copy.fh1PtHard)
877 ,fh1PtHardTrials(copy.fh1PtHardTrials)
878 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
879 ,fh1nGenJets(copy.fh1nGenJets)
880 ,fh1nRecEffJets(copy.fh1nRecEffJets)
881 ,fh1nEmbeddedJets(copy.fh1nEmbeddedJets)
882 ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts)
883 ,fh1nGenBckgJets(copy.fh1nGenBckgJets)
884 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
885 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
886 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
887 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
888 ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec)
889 ,fFFHistosRecEffGen(copy.fFFHistosRecEffGen)
890 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
891 ,fFFHistosSecRec(copy.fFFHistosSecRec)
892 ,fhnResponseSinglePt(copy.fhnResponseSinglePt)
893 ,fh2SingleInvPtRecMnGenVsPtGen(copy.fh2SingleInvPtRecMnGenVsPtGen)
894 ,fhnResponseJetTrackPt(copy.fhnResponseJetTrackPt)
895 ,fhnResponseJetZ(copy.fhnResponseJetZ)
896 ,fhnResponseJetXi(copy.fhnResponseJetXi)
898 ,fh1OutLeadingMult(copy.fh1OutLeadingMult)
899 ,fh1OutLeadingStatMult(copy.fh1OutLeadingStatMult)
900 ,fh1PerpMult(copy.fh1PerpMult)
901 ,fh1ASideMult(copy.fh1ASideMult)
902 ,fh1ASideWindowMult(copy.fh1ASideWindowMult)
903 ,fh1PerpWindowMult(copy.fh1PerpWindowMult)
904 ,fh1Out2JetsMult(copy.fh1Out2JetsMult)
905 ,fh1Out3JetsMult(copy.fh1Out3JetsMult)
906 ,fh1MedianClustersMult(copy.fh1MedianClustersMult)
907 ,fh1OutClustersMult(copy.fh1OutClustersMult)
908 ,fh1FractionPtEmbedded(copy.fh1FractionPtEmbedded)
909 ,fh1IndexEmbedded(copy.fh1IndexEmbedded)
910 ,fh2DeltaPtVsJetPtEmbedded(copy.fh2DeltaPtVsJetPtEmbedded)
911 ,fh2DeltaPtVsRecJetPtEmbedded(copy.fh2DeltaPtVsRecJetPtEmbedded)
912 ,fh1DeltaREmbedded(copy.fh1DeltaREmbedded)
913 ,fh2ptVsDistNN_pt50_rec(copy.fh2ptVsDistNN_pt50_rec)
914 ,fh2ptVsDistNN_pt50_nonRec(copy.fh2ptVsDistNN_pt50_nonRec)
915 ,fh2ptVsDistNN_pt10_rec(copy.fh2ptVsDistNN_pt10_rec)
916 ,fh2ptVsDistNN_pt10_nonRec(copy.fh2ptVsDistNN_pt10_nonRec)
917 ,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
918 ,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
919 ,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
920 ,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
921 ,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
922 ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
923 ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
924 ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
925 ,fQABckgHisto4RecCuts(copy.fQABckgHisto4RecCuts)
926 ,fQABckgHisto4Gen(copy.fQABckgHisto4Gen)
927 ,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
928 ,fFFBckgHisto0RecLeading(copy.fFFBckgHisto0RecLeading)
929 ,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
930 ,fFFBckgHisto0GenLeading(copy.fFFBckgHisto0GenLeading)
931 ,fFFBckgHisto1RecCuts(copy.fFFBckgHisto1RecCuts)
932 ,fFFBckgHisto1RecLeading(copy.fFFBckgHisto1RecLeading)
933 ,fFFBckgHisto1Gen(copy.fFFBckgHisto1Gen)
934 ,fFFBckgHisto1GenLeading(copy.fFFBckgHisto1GenLeading)
935 ,fFFBckgHisto2RecCuts(copy.fFFBckgHisto2RecCuts)
936 ,fFFBckgHisto2RecLeading(copy.fFFBckgHisto2RecLeading)
937 ,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
938 ,fFFBckgHisto2GenLeading(copy.fFFBckgHisto2GenLeading)
939 ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
940 ,fFFBckgHisto3RecLeading(copy.fFFBckgHisto3RecLeading)
941 ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
942 ,fFFBckgHisto3GenLeading(copy.fFFBckgHisto3GenLeading)
943 ,fFFBckgHisto4RecCuts(copy.fFFBckgHisto4RecCuts)
944 ,fFFBckgHisto4RecLeading(copy.fFFBckgHisto4RecLeading)
945 ,fFFBckgHisto4Gen(copy.fFFBckgHisto4Gen)
946 ,fFFBckgHisto4GenLeading(copy.fFFBckgHisto4GenLeading)
947 ,fIJBckgHisto0RecCuts(copy.fIJBckgHisto0RecCuts)
948 ,fIJBckgHisto0RecLeading(copy.fIJBckgHisto0RecLeading)
949 ,fIJBckgHisto0Gen(copy.fIJBckgHisto0Gen)
950 ,fIJBckgHisto0GenLeading(copy.fIJBckgHisto0GenLeading)
951 ,fIJBckgHisto1RecCuts(copy.fIJBckgHisto1RecCuts)
952 ,fIJBckgHisto1RecLeading(copy.fIJBckgHisto1RecLeading)
953 ,fIJBckgHisto1Gen(copy.fIJBckgHisto1Gen)
954 ,fIJBckgHisto1GenLeading(copy.fIJBckgHisto1GenLeading)
955 ,fIJBckgHisto2RecCuts(copy.fIJBckgHisto2RecCuts)
956 ,fIJBckgHisto2RecLeading(copy.fIJBckgHisto2RecLeading)
957 ,fIJBckgHisto2Gen(copy.fIJBckgHisto2Gen)
958 ,fIJBckgHisto2GenLeading(copy.fIJBckgHisto2GenLeading)
959 ,fIJBckgHisto3RecCuts(copy.fIJBckgHisto3RecCuts)
960 ,fIJBckgHisto3RecLeading(copy.fIJBckgHisto3RecLeading)
961 ,fIJBckgHisto3Gen(copy.fIJBckgHisto3Gen)
962 ,fIJBckgHisto3GenLeading(copy.fIJBckgHisto3GenLeading)
963 ,fIJBckgHisto4RecCuts(copy.fIJBckgHisto4RecCuts)
964 ,fIJBckgHisto4RecLeading(copy.fIJBckgHisto4RecLeading)
965 ,fIJBckgHisto4Gen(copy.fIJBckgHisto4Gen)
966 ,fIJBckgHisto4GenLeading(copy.fIJBckgHisto4GenLeading)
967 ,fRandom(copy.fRandom)
968 ,fBckgSubMethod(copy.fBckgSubMethod)
971 fBckgType[0] = copy.fBckgType[0];
972 fBckgType[1] = copy.fBckgType[1];
973 fBckgType[2] = copy.fBckgType[2];
974 fBckgType[3] = copy.fBckgType[3];
975 fBckgType[4] = copy.fBckgType[4];
978 // _________________________________________________________________________________________________________________________________
979 AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
985 AliAnalysisTaskSE::operator=(o);
988 fAODJets = o.fAODJets;
989 fAODExtension = o.fAODExtension;
990 fNonStdFile = o.fNonStdFile;
991 fBranchRecJets = o.fBranchRecJets;
992 fBranchRecBackJets = o.fBranchRecBackJets;
993 fBranchRecBckgClusters = o.fBranchRecBckgClusters;
994 fBranchGenJets = o.fBranchGenJets;
995 fBranchEmbeddedJets = o.fBranchEmbeddedJets;
996 fTrackTypeGen = o.fTrackTypeGen;
997 fJetTypeGen = o.fJetTypeGen;
998 fJetTypeRecEff = o.fJetTypeRecEff;
999 fUseAODInputJets = o.fUseAODInputJets;
1000 fFilterMask = o.fFilterMask;
1001 fUsePhysicsSelection = o.fUsePhysicsSelection;
1002 fEvtSelectionMask = o.fEvtSelectionMask;
1003 fEventClass = o.fEventClass;
1004 fMaxVertexZ = o.fMaxVertexZ;
1005 fTrackPtCut = o.fTrackPtCut;
1006 fTrackEtaMin = o.fTrackEtaMin;
1007 fTrackEtaMax = o.fTrackEtaMax;
1008 fTrackPhiMin = o.fTrackPhiMin;
1009 fTrackPhiMax = o.fTrackPhiMax;
1010 fUseExtraTracks = o.fUseExtraTracks;
1011 fUseExtraTracksBgr = o.fUseExtraTracksBgr;
1012 fCutFractionPtEmbedded = o.fCutFractionPtEmbedded;
1013 fUseEmbeddedJetAxis = o.fUseEmbeddedJetAxis;
1014 fUseEmbeddedJetPt = o.fUseEmbeddedJetPt;
1015 fJetPtCut = o.fJetPtCut;
1016 fJetEtaMin = o.fJetEtaMin;
1017 fJetEtaMax = o.fJetEtaMax;
1018 fJetPhiMin = o.fJetPhiMin;
1019 fJetPhiMax = o.fJetPhiMin;
1020 fDiJetCut = o.fDiJetCut;
1021 fDiJetDeltaPhiCut = o.fDiJetDeltaPhiCut;
1022 fDiJetPtFractionCut = o.fDiJetPtFractionCut;
1023 fDiJetCDFCut = o.fDiJetCDFCut;
1024 fDiJetKindBins = o.fDiJetKindBins;
1025 fFFRadius = o.fFFRadius;
1026 fFFMaxTrackPt = o.fFFMaxTrackPt;
1027 fFFMinnTracks = o.fFFMinnTracks;
1028 fFFBckgRadius = o.fFFBckgRadius;
1029 fBckgMode = o.fBckgMode;
1030 fIJMode = o.fIJMode;
1031 fQAMode = o.fQAMode;
1032 fFFMode = o.fFFMode;
1033 fDJMode = o.fDJMode;
1034 fEffMode = o.fEffMode;
1035 fPhiCorrMode = o.fPhiCorrMode;
1036 fBckgType[0] = o.fBckgType[0];
1037 fBckgType[1] = o.fBckgType[1];
1038 fBckgType[2] = o.fBckgType[2];
1039 fBckgType[3] = o.fBckgType[3];
1040 fBckgType[4] = o.fBckgType[4];
1041 fUseRecEffRecJetPtBins = o.fUseRecEffRecJetPtBins;
1042 fUseResponseRecJetPtBins = o.fUseResponseRecJetPtBins;
1043 fAvgTrials = o.fAvgTrials;
1044 fTracksRec = o.fTracksRec;
1045 fTracksRecCuts = o.fTracksRecCuts;
1046 fTracksGen = o.fTracksGen;
1047 fTracksAODMCCharged = o.fTracksAODMCCharged;
1048 fTracksAODMCChargedSec = o.fTracksAODMCChargedSec;
1049 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
1050 fJetsRec = o.fJetsRec;
1051 fJetsRecCuts = o.fJetsRecCuts;
1052 fJetsGen = o.fJetsGen;
1053 fJetsRecEff = o.fJetsRecEff;
1054 fJetsEmbedded = o.fJetsEmbedded;
1055 fBckgJetsRec = o.fBckgJetsRec;
1056 fBckgJetsRecCuts = o.fBckgJetsRecCuts;
1057 fBckgJetsGen = o.fBckgJetsGen;
1058 fQATrackHistosRec = o.fQATrackHistosRec;
1059 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
1060 fQATrackHistosGen = o.fQATrackHistosGen;
1061 fQAJetHistosRec = o.fQAJetHistosRec;
1062 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
1063 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
1064 fQAJetHistosGen = o.fQAJetHistosGen;
1065 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
1066 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
1067 fFFHistosRecCuts = o.fFFHistosRecCuts;
1068 fFFHistosRecLeading = o.fFFHistosRecLeading;
1069 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
1070 fFFHistosGen = o.fFFHistosGen;
1071 fFFHistosGenLeading = o.fFFHistosGenLeading;
1072 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
1073 fIJHistosRecCuts = o.fIJHistosRecCuts;
1074 fIJHistosRecLeading = o.fIJHistosRecLeading;
1075 fIJHistosRecLeadingTrack = o.fIJHistosRecLeadingTrack;
1076 fIJHistosGen = o.fIJHistosGen;
1077 fIJHistosGenLeading = o.fIJHistosGenLeading;
1078 fIJHistosGenLeadingTrack = o.fIJHistosGenLeadingTrack;
1079 fFFDiJetHistosRecCuts = o.fFFDiJetHistosRecCuts;
1080 fFFDiJetHistosRecLeading = o.fFFDiJetHistosRecLeading;
1081 fFFDiJetHistosRecLeadingTrack = o.fFFDiJetHistosRecLeadingTrack;
1082 fFFDiJetHistosGen = o.fFFDiJetHistosGen;
1083 fFFDiJetHistosGenLeading = o.fFFDiJetHistosGenLeading;
1084 fFFDiJetHistosGenLeadingTrack = o.fFFDiJetHistosGenLeadingTrack;
1085 fQADiJetHistosRecCuts = o.fQADiJetHistosRecCuts;
1086 fQADiJetHistosGen = o.fQADiJetHistosGen;
1087 fPhiCorrHistosJetArea = o.fPhiCorrHistosJetArea;
1088 fPhiCorrHistosTransverseArea = o.fPhiCorrHistosTransverseArea;
1089 fPhiCorrHistosAwayArea = o.fPhiCorrHistosAwayArea;
1090 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
1091 fFFNBinsJetPt = o.fFFNBinsJetPt;
1092 fFFJetPtMin = o.fFFJetPtMin;
1093 fFFJetPtMax = o.fFFJetPtMax;
1094 fFFNBinsPt = o.fFFNBinsPt;
1095 fFFPtMin = o.fFFPtMin;
1096 fFFPtMax = o.fFFPtMax;
1097 fFFNBinsXi = o.fFFNBinsXi;
1098 fFFXiMin = o.fFFXiMin;
1099 fFFXiMax = o.fFFXiMax;
1100 fFFNBinsZ = o.fFFNBinsZ;
1101 fFFZMin = o.fFFZMin;
1102 fFFZMax = o.fFFZMax;
1103 fFFLogZBins = o.fFFLogZBins;
1104 fQAJetNBinsPt = o.fQAJetNBinsPt;
1105 fQAJetPtMin = o.fQAJetPtMin;
1106 fQAJetPtMax = o.fQAJetPtMax;
1107 fQAJetNBinsEta = o.fQAJetNBinsEta;
1108 fQAJetEtaMin = o.fQAJetEtaMin;
1109 fQAJetEtaMax = o.fQAJetEtaMax;
1110 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
1111 fQAJetPhiMin = o.fQAJetPhiMin;
1112 fQAJetPhiMax = o.fQAJetPhiMax;
1113 fQATrackNBinsPt = o.fQATrackNBinsPt;
1114 fQATrackPtMin = o.fQATrackPtMin;
1115 fQATrackPtMax = o.fQATrackPtMax;
1116 fQATrackNBinsEta = o.fQATrackNBinsEta;
1117 fQATrackEtaMin = o.fQATrackEtaMin;
1118 fQATrackEtaMax = o.fQATrackEtaMax;
1119 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
1120 fQATrackPhiMin = o.fQATrackPhiMin;
1121 fQATrackPhiMax = o.fQATrackPhiMax;
1122 fIJNBinsJetPt = o.fIJNBinsJetPt;
1123 fIJJetPtMin = o.fIJJetPtMin;
1124 fIJJetPtMax = o.fIJJetPtMax;
1125 fIJNBinsPt = o.fIJNBinsPt;
1126 fIJPtMin = o.fIJPtMin;
1127 fIJPtMax = o.fIJPtMax;
1128 fIJNBinsZ = o.fIJNBinsZ;
1129 fIJZMin = o.fIJZMin;
1130 fIJZMax = o.fIJZMax;
1131 fIJNBinsCosTheta = o.fIJNBinsCosTheta;
1132 fIJCosThetaMin = o.fIJCosThetaMin;
1133 fIJCosThetaMax = o.fIJCosThetaMax;
1134 fIJNBinsTheta = o.fIJNBinsTheta;
1135 fIJThetaMin = o.fIJThetaMin;
1136 fIJThetaMax = o.fIJThetaMax;
1137 fIJNBinsJt = o.fIJNBinsJt;
1138 fIJJtMin = o.fIJJtMin;
1139 fIJJtMax = o.fIJJtMax;
1140 fDiJetNBinsJetInvMass = o.fDiJetNBinsJetInvMass;
1141 fDiJetJetInvMassMin = o.fDiJetJetInvMassMin;
1142 fDiJetJetInvMassMax = o.fDiJetJetInvMassMax;
1143 fDiJetNBinsJetPt = o.fDiJetNBinsJetPt;
1144 fDiJetJetPtMin = o.fDiJetJetPtMin;
1145 fDiJetJetPtMax = o.fDiJetJetPtMax;
1146 fDiJetNBinsPt = o.fDiJetNBinsPt;
1147 fDiJetPtMin = o.fDiJetPtMin;
1148 fDiJetPtMax = o.fDiJetPtMax;
1149 fDiJetNBinsXi = o.fDiJetNBinsXi;
1150 fDiJetXiMin = o.fDiJetXiMin;
1151 fDiJetXiMax = o.fDiJetXiMax;
1152 fDiJetNBinsZ = o.fDiJetNBinsZ;
1153 fDiJetZMin = o.fDiJetZMin;
1154 fDiJetZMax = o.fDiJetZMax;
1155 fQADiJetNBinsInvMass = o.fQADiJetNBinsInvMass;
1156 fQADiJetInvMassMin = o.fQADiJetInvMassMin;
1157 fQADiJetInvMassMax = o.fQADiJetInvMassMax;
1158 fQADiJetNBinsJetPt = o.fQADiJetNBinsJetPt;
1159 fQADiJetJetPtMin = o.fQADiJetJetPtMin;
1160 fQADiJetJetPtMax = o.fQADiJetJetPtMax;
1161 fQADiJetNBinsDeltaPhi = o.fQADiJetNBinsDeltaPhi;
1162 fQADiJetDeltaPhiMin = o.fQADiJetDeltaPhiMin;
1163 fQADiJetDeltaPhiMax = o.fQADiJetDeltaPhiMax;
1164 fQADiJetNBinsDeltaEta = o.fQADiJetNBinsDeltaEta;
1165 fQADiJetDeltaEtaMin = o.fQADiJetDeltaEtaMin;
1166 fQADiJetDeltaEtaMax = o.fQADiJetDeltaEtaMax;
1167 fQADiJetNBinsDeltaPt = o.fQADiJetNBinsDeltaPt;
1168 fQADiJetDeltaPtMin = o.fQADiJetDeltaPtMin;
1169 fQADiJetDeltaPtMax = o.fQADiJetDeltaPtMax;
1170 fQADiJetNBinsInBal = o.fQADiJetNBinsInBal;
1171 fQADiJetInBalMin = o.fQADiJetInBalMin;
1172 fQADiJetInBalMax = o.fQADiJetInBalMax;
1173 fPhiCorrNBinsPt = o.fPhiCorrNBinsPt;
1174 fPhiCorrPtMin = o.fPhiCorrPtMin;
1175 fPhiCorrPtMax = o.fPhiCorrPtMax;
1176 fPhiCorrNBinsEta = o.fPhiCorrNBinsEta;
1177 fPhiCorrEtaMin = o.fPhiCorrEtaMin;
1178 fPhiCorrEtaMax = o.fPhiCorrEtaMax;
1179 fPhiCorrNBinsPhi = o.fPhiCorrNBinsPhi;
1180 fPhiCorrPhiMin = o.fPhiCorrPhiMin;
1181 fPhiCorrPhiMax = o.fPhiCorrPhiMax;
1182 fCommonHistList = o.fCommonHistList;
1183 fh1EvtSelection = o.fh1EvtSelection;
1184 fh1VertexNContributors = o.fh1VertexNContributors;
1185 fh1VertexZ = o.fh1VertexZ;
1186 fh1EvtMult = o.fh1EvtMult;
1187 fh1EvtCent = o.fh1EvtCent;
1188 fh2TrackPtVsDCAXY = o.fh2TrackPtVsDCAXY;
1189 fh2TrackPtVsDCAZ = o.fh2TrackPtVsDCAXY;
1190 fh1Xsec = o.fh1Xsec;
1191 fh1Trials = o.fh1Trials;
1192 fh1PtHard = o.fh1PtHard;
1193 fh1PtHardTrials = o.fh1PtHardTrials;
1194 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
1195 fh1nGenJets = o.fh1nGenJets;
1196 fh1nRecEffJets = o.fh1nRecEffJets;
1197 fh1nEmbeddedJets = o.fh1nEmbeddedJets;
1198 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
1199 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
1200 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
1201 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
1202 fQATrackHistosSecRec = o.fQATrackHistosSecRec;
1203 fFFHistosRecEffGen = o.fFFHistosRecEffGen;
1204 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
1205 fFFHistosSecRec = o.fFFHistosSecRec;
1206 fhnResponseSinglePt = o.fhnResponseSinglePt;
1207 fh2SingleInvPtRecMnGenVsPtGen = o.fh2SingleInvPtRecMnGenVsPtGen;
1208 fhnResponseJetTrackPt = o.fhnResponseJetTrackPt;
1209 fhnResponseJetZ = o.fhnResponseJetZ;
1210 fhnResponseJetXi = o.fhnResponseJetXi;
1212 fh1OutLeadingMult = o.fh1OutLeadingMult;
1213 fh1OutLeadingStatMult = o.fh1OutLeadingStatMult;
1214 fh1PerpMult = o.fh1PerpMult;
1215 fh1ASideMult = o.fh1ASideMult;
1216 fh1ASideWindowMult = o.fh1ASideWindowMult;
1217 fh1PerpWindowMult = o.fh1PerpWindowMult;
1218 fh1Out2JetsMult = o.fh1Out2JetsMult;
1219 fh1Out3JetsMult = o.fh1Out3JetsMult;
1220 fh1MedianClustersMult = o.fh1MedianClustersMult;
1221 fh1OutClustersMult = o.fh1OutClustersMult;
1222 fh1FractionPtEmbedded = o.fh1FractionPtEmbedded;
1223 fh1IndexEmbedded = o.fh1IndexEmbedded;
1224 fh2DeltaPtVsJetPtEmbedded = o.fh2DeltaPtVsJetPtEmbedded;
1225 fh2DeltaPtVsRecJetPtEmbedded = o.fh2DeltaPtVsRecJetPtEmbedded;
1226 fh1DeltaREmbedded = o.fh1DeltaREmbedded;
1227 fh2ptVsDistNN_pt50_rec = o.fh2ptVsDistNN_pt50_rec;
1228 fh2ptVsDistNN_pt50_nonRec = o.fh2ptVsDistNN_pt50_nonRec;
1229 fh2ptVsDistNN_pt10_rec = o.fh2ptVsDistNN_pt10_rec;
1230 fh2ptVsDistNN_pt10_nonRec = o.fh2ptVsDistNN_pt10_nonRec;
1231 fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
1232 fQABckgHisto0Gen = o.fQABckgHisto0Gen;
1233 fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
1234 fQABckgHisto1Gen = o.fQABckgHisto1Gen;
1235 fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
1236 fQABckgHisto2Gen = o.fQABckgHisto2Gen;
1237 fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
1238 fQABckgHisto3Gen = o.fQABckgHisto3Gen;
1239 fQABckgHisto4RecCuts = o.fQABckgHisto4RecCuts;
1240 fQABckgHisto4Gen = o.fQABckgHisto4Gen;
1241 fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
1242 fFFBckgHisto0RecLeading = o.fFFBckgHisto0RecLeading;
1243 fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
1244 fFFBckgHisto0GenLeading = o.fFFBckgHisto0GenLeading;
1245 fFFBckgHisto1RecCuts = o.fFFBckgHisto1RecCuts;
1246 fFFBckgHisto1RecLeading = o.fFFBckgHisto1RecLeading;
1247 fFFBckgHisto1Gen = o.fFFBckgHisto1Gen;
1248 fFFBckgHisto1GenLeading = o.fFFBckgHisto1GenLeading;
1249 fFFBckgHisto2RecCuts = o.fFFBckgHisto2RecCuts;
1250 fFFBckgHisto2RecLeading = o.fFFBckgHisto2RecLeading;
1251 fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
1252 fFFBckgHisto2GenLeading = o.fFFBckgHisto2GenLeading;
1253 fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
1254 fFFBckgHisto3RecLeading = o.fFFBckgHisto3RecLeading;
1255 fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
1256 fFFBckgHisto3GenLeading = o.fFFBckgHisto3GenLeading;
1257 fFFBckgHisto4RecCuts = o.fFFBckgHisto4RecCuts;
1258 fFFBckgHisto4RecLeading = o.fFFBckgHisto4RecLeading;
1259 fFFBckgHisto4Gen = o.fFFBckgHisto4Gen;
1260 fFFBckgHisto4GenLeading = o.fFFBckgHisto4GenLeading;
1261 fIJBckgHisto0RecCuts = o.fIJBckgHisto0RecCuts;
1262 fIJBckgHisto0RecLeading = o.fIJBckgHisto0RecLeading;
1263 fIJBckgHisto0Gen = o.fIJBckgHisto0Gen;
1264 fIJBckgHisto0GenLeading = o.fIJBckgHisto0GenLeading;
1265 fIJBckgHisto1RecCuts = o.fIJBckgHisto1RecCuts;
1266 fIJBckgHisto1RecLeading = o.fIJBckgHisto1RecLeading;
1267 fIJBckgHisto1Gen = o.fIJBckgHisto1Gen;
1268 fIJBckgHisto1GenLeading = o.fIJBckgHisto1GenLeading;
1269 fIJBckgHisto2RecCuts = o.fIJBckgHisto2RecCuts;
1270 fIJBckgHisto2RecLeading = o.fIJBckgHisto2RecLeading;
1271 fIJBckgHisto2Gen = o.fIJBckgHisto2Gen;
1272 fIJBckgHisto2GenLeading = o.fIJBckgHisto2GenLeading;
1273 fIJBckgHisto3Gen = o.fIJBckgHisto3Gen;
1274 fIJBckgHisto3GenLeading = o.fIJBckgHisto3GenLeading;
1275 fIJBckgHisto4Gen = o.fIJBckgHisto4Gen;
1276 fIJBckgHisto4GenLeading = o.fIJBckgHisto4GenLeading;
1277 fRandom = o.fRandom;
1278 fBckgSubMethod = o.fBckgSubMethod;
1284 //___________________________________________________________________________
1285 AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
1289 if(fTracksRec) delete fTracksRec;
1290 if(fTracksRecCuts) delete fTracksRecCuts;
1291 if(fTracksGen) delete fTracksGen;
1292 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
1293 if(fTracksAODMCChargedSec) delete fTracksAODMCChargedSec;
1294 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
1295 if(fJetsRec) delete fJetsRec;
1296 if(fJetsRecCuts) delete fJetsRecCuts;
1297 if(fJetsGen) delete fJetsGen;
1298 if(fJetsRecEff) delete fJetsRecEff;
1299 if(fJetsEmbedded) delete fJetsEmbedded;
1302 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1303 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1304 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1306 if(fBckgJetsRec) delete fBckgJetsRec;
1307 if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
1308 if(fBckgJetsGen) delete fBckgJetsGen;
1310 if(fRandom) delete fRandom;
1313 //______________________________________________________________________________________________________
1314 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
1315 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1316 Int_t nPt, Float_t ptMin, Float_t ptMax,
1317 Int_t nXi, Float_t xiMin, Float_t xiMax,
1318 Int_t nZ , Float_t zMin , Float_t zMax, Bool_t useLogZBins)
1320 ,fNBinsJetPt(nJetPt)
1321 ,fJetPtMin(jetPtMin)
1322 ,fJetPtMax(jetPtMax)
1332 ,fLogZBins(useLogZBins)
1339 // default constructor
1343 //___________________________________________________________________________
1344 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
1346 ,fNBinsJetPt(copy.fNBinsJetPt)
1347 ,fJetPtMin(copy.fJetPtMin)
1348 ,fJetPtMax(copy.fJetPtMax)
1349 ,fNBinsPt(copy.fNBinsPt)
1350 ,fPtMin(copy.fPtMin)
1351 ,fPtMax(copy.fPtMax)
1352 ,fNBinsXi(copy.fNBinsXi)
1353 ,fXiMin(copy.fXiMin)
1354 ,fXiMax(copy.fXiMax)
1355 ,fNBinsZ(copy.fNBinsZ)
1358 ,fLogZBins(copy.fLogZBins)
1359 ,fh2TrackPt(copy.fh2TrackPt)
1362 ,fh1JetPt(copy.fh1JetPt)
1363 ,fNameFF(copy.fNameFF)
1368 //_______________________________________________________________________________________________________________________________________________________________
1369 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
1374 TObject::operator=(o);
1375 fNBinsJetPt = o.fNBinsJetPt;
1376 fJetPtMin = o.fJetPtMin;
1377 fJetPtMax = o.fJetPtMax;
1378 fNBinsPt = o.fNBinsPt;
1381 fNBinsXi = o.fNBinsXi;
1384 fNBinsZ = o.fNBinsZ;
1387 fLogZBins = o.fLogZBins;
1388 fh2TrackPt = o.fh2TrackPt;
1391 fh1JetPt = o.fh1JetPt;
1392 fNameFF = o.fNameFF;
1398 //_________________________________________________________
1399 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
1403 if(fh1JetPt) delete fh1JetPt;
1404 if(fh2TrackPt) delete fh2TrackPt;
1405 if(fh2Xi) delete fh2Xi;
1406 if(fh2Z) delete fh2Z;
1409 //_________________________________________________________________
1410 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
1414 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
1415 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
1416 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
1418 if(!fLogZBins) fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
1419 else{ // logarithmic z binning
1422 Double_t binLimsZ[fNBinsXi+1];
1424 CalcLogZBins(fNBinsXi,fXiMin,fXiMax,binLimsZ);
1426 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, binLimsZ);
1429 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1430 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1431 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1432 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1435 //_______________________________________________________________________________________________________________________________________
1436 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::CalcLogZBins(const Int_t nBinsXi,const Double_t xiMin,const Double_t xiMax,Double_t* binLims){
1438 // calculate logarithmic binning corresponding to equidistant xi bins
1439 // expect binLims vector of size nBinsXi+1
1442 Printf("%s:%d nBinsXi == 0",(char*)__FILE__,__LINE__);
1446 Double_t step = (xiMax-xiMin)/nBinsXi;
1448 for(Int_t binZ = 0; binZ<nBinsXi; binZ++){
1450 Double_t xiUp = xiMax - binZ*step;
1451 Double_t xiLo = xiMax - (binZ+1)*step;
1453 Double_t zUp = TMath::Exp(-1*xiLo);
1454 Double_t zLo = TMath::Exp(-1*xiUp);
1456 if(binZ == 0) binLims[0] = zLo;
1457 binLims[binZ+1] = zUp;
1461 //_______________________________________________________________________________________________________________
1462 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm)
1466 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1467 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
1469 // Added for proper normalization of FF background estimation
1470 // when zero track are found in the background region
1471 if((int)trackPt==-1) return;
1473 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1474 else fh2TrackPt->Fill(jetPt,trackPt);
1477 if(jetPt>0) z = trackPt / jetPt;
1479 if(z>0) xi = TMath::Log(1/z);
1482 fh2Xi->Fill(jetPt,xi,1/norm);
1483 fh2Z->Fill(jetPt,z,1/norm);
1486 fh2Xi->Fill(jetPt,xi);
1487 fh2Z->Fill(jetPt,z);
1491 //_________________________________________________________________________________
1492 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1494 // add histos to list
1496 list->Add(fh1JetPt);
1498 list->Add(fh2TrackPt);
1503 //_________________________________________________________________________________________________________
1504 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1505 Int_t nPt, Float_t ptMin, Float_t ptMax,
1506 Int_t nEta, Float_t etaMin, Float_t etaMax,
1507 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1522 // default constructor
1525 //____________________________________________________________________________________
1526 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1528 ,fNBinsPt(copy.fNBinsPt)
1529 ,fPtMin(copy.fPtMin)
1530 ,fPtMax(copy.fPtMax)
1531 ,fNBinsEta(copy.fNBinsEta)
1532 ,fEtaMin(copy.fEtaMin)
1533 ,fEtaMax(copy.fEtaMax)
1534 ,fNBinsPhi(copy.fNBinsPhi)
1535 ,fPhiMin(copy.fPhiMin)
1536 ,fPhiMax(copy.fPhiMax)
1537 ,fh2EtaPhi(copy.fh2EtaPhi)
1539 ,fNameQAJ(copy.fNameQAJ)
1544 //________________________________________________________________________________________________________________________________________________________________________
1545 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
1550 TObject::operator=(o);
1551 fNBinsPt = o.fNBinsPt;
1554 fNBinsEta = o.fNBinsEta;
1555 fEtaMin = o.fEtaMin;
1556 fEtaMax = o.fEtaMax;
1557 fNBinsPhi = o.fNBinsPhi;
1558 fPhiMin = o.fPhiMin;
1559 fPhiMax = o.fPhiMax;
1560 fh2EtaPhi = o.fh2EtaPhi;
1562 fNameQAJ = o.fNameQAJ;
1568 //______________________________________________________________
1569 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1573 if(fh2EtaPhi) delete fh2EtaPhi;
1574 if(fh1Pt) delete fh1Pt;
1577 //____________________________________________________________________
1578 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1580 // book jet QA histos
1582 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1583 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1585 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1586 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1589 //____________________________________________________________________________________________________
1590 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1592 // fill jet QA histos
1594 fh2EtaPhi->Fill( eta, phi);
1598 //____________________________________________________________________________________
1599 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1601 // add histos to list
1603 list->Add(fh2EtaPhi);
1607 //___________________________________________________________________________________________________________
1608 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1609 Int_t nPt, Float_t ptMin, Float_t ptMax,
1610 Int_t nEta, Float_t etaMin, Float_t etaMax,
1611 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1623 ,fHighPtThreshold(ptThresh)
1630 // default constructor
1633 //__________________________________________________________________________________________
1634 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1636 ,fNBinsPt(copy.fNBinsPt)
1637 ,fPtMin(copy.fPtMin)
1638 ,fPtMax(copy.fPtMax)
1639 ,fNBinsEta(copy.fNBinsEta)
1640 ,fEtaMin(copy.fEtaMin)
1641 ,fEtaMax(copy.fEtaMax)
1642 ,fNBinsPhi(copy.fNBinsPhi)
1643 ,fPhiMin(copy.fPhiMin)
1644 ,fPhiMax(copy.fPhiMax)
1645 ,fHighPtThreshold(copy.fHighPtThreshold)
1646 ,fh2EtaPhi(copy.fh2EtaPhi)
1648 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1649 ,fh2PhiPt(copy.fh2PhiPt)
1650 ,fNameQAT(copy.fNameQAT)
1655 // _____________________________________________________________________________________________________________________________________________________________________________
1656 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1661 TObject::operator=(o);
1662 fNBinsPt = o.fNBinsPt;
1665 fNBinsEta = o.fNBinsEta;
1666 fEtaMin = o.fEtaMin;
1667 fEtaMax = o.fEtaMax;
1668 fNBinsPhi = o.fNBinsPhi;
1669 fPhiMin = o.fPhiMin;
1670 fPhiMax = o.fPhiMax;
1671 fHighPtThreshold = o.fHighPtThreshold;
1672 fh2EtaPhi = o.fh2EtaPhi;
1674 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1675 fh2PhiPt = o.fh2PhiPt;
1676 fNameQAT = o.fNameQAT;
1682 //___________________________________________________________________
1683 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1687 if(fh2EtaPhi) delete fh2EtaPhi;
1688 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1689 if(fh1Pt) delete fh1Pt;
1690 if(fh2PhiPt) delete fh2PhiPt;
1693 //______________________________________________________________________
1694 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1696 // book track QA histos
1698 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1699 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);
1700 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1701 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1703 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1704 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1705 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1706 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1709 //________________________________________________________________________________________________________
1710 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm)
1712 // fill track QA histos
1713 Float_t weight = 1.;
1714 if(weightPt) weight = pt;
1715 fh2EtaPhi->Fill( eta, phi, weight);
1716 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1717 if(norm) fh1Pt->Fill( pt, 1/norm );
1718 else fh1Pt->Fill( pt );
1719 fh2PhiPt->Fill(phi, pt);
1722 //______________________________________________________________________________________
1723 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1725 // add histos to list
1727 list->Add(fh2EtaPhi);
1728 list->Add(fh2HighPtEtaPhi);
1730 list->Add(fh2PhiPt);
1733 //______________________________________________________________________________________________________
1734 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const char* name,
1735 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1736 Int_t nPt, Float_t ptMin, Float_t ptMax,
1737 Int_t nZ , Float_t zMin , Float_t zMax,
1738 Int_t nCosTheta , Float_t costhetaMin , Float_t costhetaMax,
1739 Int_t nTheta , Float_t thetaMin , Float_t thetaMax,
1740 Int_t nJt , Float_t jtMin , Float_t jtMax)
1742 ,fNBinsJetPt(nJetPt)
1743 ,fJetPtMin(jetPtMin)
1744 ,fJetPtMax(jetPtMax)
1754 ,fNBinsTheta(nTheta)
1755 ,fThetaMin(thetaMin)
1756 ,fThetaMax(thetaMax)
1757 ,fNBinsCosTheta(nCosTheta)
1758 ,fCosThetaMin(costhetaMin)
1759 ,fCosThetaMax(costhetaMax)
1767 // default constructor
1771 //___________________________________________________________________________
1772 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const AliFragFuncIntraJetHistos& copy)
1774 ,fNBinsJetPt(copy.fNBinsJetPt)
1775 ,fJetPtMin(copy.fJetPtMin)
1776 ,fJetPtMax(copy.fJetPtMax)
1777 ,fNBinsPt(copy.fNBinsPt)
1778 ,fPtMin(copy.fPtMin)
1779 ,fPtMax(copy.fPtMax)
1780 ,fNBinsZ(copy.fNBinsZ)
1783 ,fNBinsJt(copy.fNBinsJt)
1784 ,fJtMin(copy.fJtMin)
1785 ,fJtMax(copy.fJtMax)
1786 ,fNBinsTheta(copy.fNBinsTheta)
1787 ,fThetaMin(copy.fThetaMin)
1788 ,fThetaMax(copy.fThetaMax)
1789 ,fNBinsCosTheta(copy.fNBinsCosTheta)
1790 ,fCosThetaMin(copy.fCosThetaMin)
1791 ,fCosThetaMax(copy.fCosThetaMax)
1792 ,fh2CosTheta(copy.fh2CosTheta)
1793 ,fh2PtZ(copy.fh2PtZ)
1794 ,fh3ThetaZ(copy.fh3ThetaZ)
1795 ,fh3JtTheta(copy.fh3JtTheta)
1796 ,fh3JtZ(copy.fh3JtZ)
1797 ,fNameIJ(copy.fNameIJ)
1802 //_______________________________________________________________________________________________________________________________________________________________
1803 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& o)
1808 TObject::operator=(o);
1809 fNBinsJetPt = o.fNBinsJetPt;
1810 fJetPtMin = o.fJetPtMin;
1811 fJetPtMax = o.fJetPtMax;
1812 fNBinsPt = o.fNBinsPt;
1815 fNBinsZ = o.fNBinsZ;
1818 fNBinsJt = o.fNBinsJt;
1821 fNBinsTheta = o.fNBinsTheta;
1822 fThetaMin = o.fThetaMin;
1823 fThetaMax = o.fThetaMax;
1824 fNBinsCosTheta = o.fNBinsCosTheta;
1825 fCosThetaMin = o.fCosThetaMin;
1826 fCosThetaMax = o.fCosThetaMax;
1827 fh2CosTheta = o.fh2CosTheta;
1829 fh3ThetaZ = o.fh3ThetaZ;
1830 fh3JtTheta = o.fh3JtTheta;
1832 fNameIJ = o.fNameIJ;
1838 //_________________________________________________________
1839 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::~AliFragFuncIntraJetHistos()
1844 if(fh2CosTheta) delete fh2CosTheta;
1845 if(fh2PtZ) delete fh2PtZ;
1846 if(fh3ThetaZ) delete fh3ThetaZ;
1847 if(fh3JtTheta) delete fh3JtTheta;
1848 if(fh3JtZ) delete fh3JtZ;
1852 //_________________________________________________________________
1853 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::DefineHistos()
1857 fh2CosTheta = new TH2F(Form("fh2IJcosTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsCosTheta, fCosThetaMin, fCosThetaMax);
1858 fh2PtZ = new TH2F(Form("fh2IJPtZ%s",fNameIJ.Data()),"",fNBinsPt, fPtMin, fPtMax, fNBinsZ, fZMin, fZMax);
1859 fh3ThetaZ = new TH3F(Form("fh3IJThetaZ%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsTheta, fThetaMin, fThetaMax, fNBinsZ, fZMin, fZMax);
1860 fh3JtTheta = new TH3F(Form("fh3IJJtTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax, fNBinsTheta, fThetaMin, fThetaMax);
1861 fh3JtZ = new TH3F(Form("fh3IJJtZ%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax, fNBinsZ, fZMin, fZMax);
1863 AliAnalysisTaskFragmentationFunction::SetProperties(fh2CosTheta,"jet p_{T} [GeV/c]","cos(#Theta)", "entries");
1864 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PtZ,"had p_{T} [GeV/c]","z=p_{T}^{had}/p_{T}^{jet}","entries");
1865 AliAnalysisTaskFragmentationFunction::SetProperties(fh3ThetaZ,"jet p_{T} [GeV/c]","#Theta [rad]","z=p_{T}^{had}/p_{T}^{jet}");
1866 AliAnalysisTaskFragmentationFunction::SetProperties(fh3JtTheta,"jet p_{T} [GeV/c]","j_{T} [GeV/c]","#Theta [rad]");
1867 AliAnalysisTaskFragmentationFunction::SetProperties(fh3JtZ,"jet p_{T} [GeV/c]","j_{T} [GeV/c]","z=p_{T}^{had}/p_{T}^{jet}");
1871 //_______________________________________________________________________________________________________________
1872 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::FillIntraJet(const TLorentzVector* trackV, const TLorentzVector* jetV, Float_t norm)
1874 // fill IntraJet histos
1876 Float_t cosTheta = 0.; Float_t theta = 0.;
1877 Float_t jt = 0.; Float_t z = 0.;
1878 // For Theta distribution
1879 Float_t pxT = trackV->Px();
1880 Float_t pyT = trackV->Py();
1881 Float_t pzT = trackV->Pz();
1882 Float_t ptT = trackV->Pt();
1883 Float_t pT = trackV->P();
1884 Float_t etaT = trackV->Eta();
1885 Float_t phiT = trackV->Phi(); // Check the value returned
1886 Float_t pxJ = jetV->Px();
1887 Float_t pyJ = jetV->Py();
1888 Float_t pzJ = jetV->Pz();
1889 Float_t ptJ = jetV->Pt();
1890 Float_t pJ = jetV->P();
1893 if(ptJ>0) z = (Float_t)(ptT/ptJ);
1896 cosTheta = (pxT*pxJ+pyT*pyJ+pzT*pzJ)/(pT*pJ);
1897 theta = TMath::ACos(cosTheta);
1900 TVector3 trackP; TVector3 jetP;
1904 trackP.SetPtEtaPhi(ptT,etaT,phiT);
1905 jt = TMath::Sin(trackP.Angle(jetP))*trackP.Mag();
1909 fh2CosTheta->Fill(ptJ,cosTheta,1/norm);
1910 fh2PtZ->Fill(ptT,z,1/norm);
1911 fh3ThetaZ->Fill(ptJ,theta,z,1/norm);
1912 fh3JtTheta->Fill(ptJ,jt,theta,1/norm);
1913 fh3JtZ->Fill(ptJ,jt,z,1/norm);
1916 fh2CosTheta->Fill(ptJ,cosTheta);
1917 fh2PtZ->Fill(ptT,z);
1918 fh3ThetaZ->Fill(ptJ,theta,z);
1919 fh3JtTheta->Fill(ptJ,jt,theta);
1920 fh3JtZ->Fill(ptJ,jt,z);
1925 //______________________________________________________________________________________________________
1926 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const char* name, Int_t kindSlices,
1927 Int_t nJetInvMass, Float_t jetInvMassMin, Float_t jetInvMassMax,
1928 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1929 Int_t nPt, Float_t ptMin, Float_t ptMax,
1930 Int_t nXi, Float_t xiMin, Float_t xiMax,
1931 Int_t nZ , Float_t zMin , Float_t zMax)
1933 ,fKindSlices(kindSlices)
1934 ,fNBinsJetInvMass(nJetInvMass)
1935 ,fJetInvMassMin(jetInvMassMin)
1936 ,fJetInvMassMax(jetInvMassMax)
1937 ,fNBinsJetPt(nJetPt)
1938 ,fJetPtMin(jetPtMin)
1939 ,fJetPtMax(jetPtMax)
1966 // default constructor
1970 //______________________________________________________________________________________________________
1971 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const AliFragFuncDiJetHistos& copy)
1973 ,fKindSlices(copy.fKindSlices)
1974 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1975 ,fJetInvMassMin(copy.fJetInvMassMin)
1976 ,fJetInvMassMax(copy.fJetInvMassMax)
1977 ,fNBinsJetPt(copy.fNBinsJetPt)
1978 ,fJetPtMin(copy.fJetPtMin)
1979 ,fJetPtMax(copy.fJetPtMax)
1980 ,fNBinsPt(copy.fNBinsPt)
1981 ,fPtMin(copy.fPtMin)
1982 ,fPtMax(copy.fPtMax)
1983 ,fNBinsXi(copy.fNBinsXi)
1984 ,fXiMin(copy.fXiMin)
1985 ,fXiMax(copy.fXiMax)
1986 ,fNBinsZ(copy.fNBinsZ)
1989 ,fh2TrackPtJet1(copy.fh2TrackPtJet1)
1990 ,fh2TrackPtJet2(copy.fh2TrackPtJet2)
1991 ,fh2TrackPtJet(copy.fh2TrackPtJet)
1992 ,fh1Jet1Pt(copy.fh1Jet1Pt)
1993 ,fh1Jet2Pt(copy.fh1Jet2Pt)
1994 ,fh1JetPt(copy.fh1JetPt)
1995 ,fh2Xi1(copy.fh2Xi1)
1996 ,fh2Xi2(copy.fh2Xi2)
2001 ,fh2Pt1(copy.fh2Pt1)
2002 ,fh2Pt2(copy.fh2Pt2)
2004 ,fNameDJ(copy.fNameDJ)
2006 // default constructor
2010 //_______________________________________________________________________________________________________________________________________________________________
2011 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& o)
2016 TObject::operator=(o);
2017 fKindSlices = o.fKindSlices;
2018 fNBinsJetInvMass = o.fNBinsJetInvMass;
2019 fJetInvMassMin = o.fJetInvMassMin;
2020 fJetInvMassMax = o.fJetInvMassMax;
2021 fNBinsJetPt = o.fNBinsJetPt;
2022 fJetPtMin = o.fJetPtMin;
2023 fJetPtMax = o.fJetPtMax;
2024 fNBinsPt = o.fNBinsPt;
2027 fNBinsXi = o.fNBinsXi;
2030 fNBinsZ = o.fNBinsZ;
2033 fh2TrackPtJet1 = o.fh2TrackPtJet1;
2034 fh2TrackPtJet2 = o.fh2TrackPtJet2;
2035 fh2TrackPtJet = o.fh2TrackPtJet;
2036 fh1Jet1Pt = o.fh1Jet1Pt;
2037 fh1Jet2Pt = o.fh1Jet2Pt;
2038 fh1JetPt = o.fh1JetPt;
2048 fNameDJ = o.fNameDJ;
2054 //_________________________________________________________
2055 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::~AliFragFuncDiJetHistos()
2059 if(fh2TrackPtJet1) delete fh2TrackPtJet1;
2060 if(fh2TrackPtJet2) delete fh2TrackPtJet2;
2061 if(fh2TrackPtJet ) delete fh2TrackPtJet;
2062 if(fh1Jet1Pt) delete fh1Jet1Pt;
2063 if(fh1Jet2Pt) delete fh1Jet2Pt;
2064 if(fh1JetPt) delete fh1JetPt;
2065 if(fh2Xi1) delete fh2Xi1;
2066 if(fh2Xi2) delete fh2Xi2;
2067 if(fh2Xi) delete fh2Xi;
2068 if(fh2Z1) delete fh2Z1;
2069 if(fh2Z2) delete fh2Z2;
2070 if(fh2Z) delete fh2Z;
2071 if(fh2Pt1) delete fh2Pt1;
2072 if(fh2Pt2) delete fh2Pt2;
2073 if(fh2Pt) delete fh2Pt;
2076 //________________________________________________________________________
2077 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::DefineDiJetHistos()
2079 // book DiJet histos
2084 const char *xaxis = "";
2085 if(fKindSlices == 1)
2087 nBins = fNBinsJetInvMass;
2088 min = fJetInvMassMin;
2089 max = fJetInvMassMax;
2090 xaxis = "M_{JJ} [GeV]";
2092 if(fKindSlices == 2 || fKindSlices == 3)
2094 nBins = fNBinsJetPt;
2097 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2098 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2101 fh1Jet1Pt = new TH1F(Form("fh1DJJet1Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2102 fh1Jet2Pt = new TH1F(Form("fh1DJJet2Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2103 fh1JetPt = new TH1F(Form("fh1DJJetPt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2105 fh2TrackPtJet1 = new TH2F(Form("fh2DJTrackPtJet1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2106 fh2TrackPtJet2 = new TH2F(Form("fh2DJTrackPtJet2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2107 fh2TrackPtJet = new TH2F(Form("fh2DJTrackPtJet%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2109 fh2Xi1 = new TH2F(Form("fh2DJXi1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2110 fh2Xi2 = new TH2F(Form("fh2DJXi2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2111 fh2Xi = new TH2F(Form("fh2DJXi%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2113 fh2Z1 = new TH2F(Form("fh2DJZ1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2114 fh2Z2 = new TH2F(Form("fh2DJZ2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2115 fh2Z = new TH2F(Form("fh2DJZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2117 fh2Pt1 = new TH2F(Form("fh2DJPt1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2118 fh2Pt2 = new TH2F(Form("fh2DJPt2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2119 fh2Pt = new TH2F(Form("fh2DJPtZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2121 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet1Pt, "p_{T} [GeV/c]", "entries");
2122 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet2Pt, "p_{T} [GeV/c]", "entries");
2123 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
2125 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet1, xaxis, "p_{T} [GeV/c]", "Entries");
2126 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet2, xaxis, "p_{T} [GeV/c]", "Entries");
2127 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet, xaxis, "p_{T} [GeV/c]", "Entries");
2128 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi1, xaxis, "#xi", "Entries");
2129 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi2, xaxis, "#xi", "Entries");
2130 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi, xaxis, "#xi", "Entries");
2131 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z1, xaxis, "z", "Entries");
2132 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z2, xaxis, "z", "Entries");
2133 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z, xaxis, "z", "Entries");
2134 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt1, xaxis, "p_{T} [GeV/c]", "Entries");
2135 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt2, xaxis, "p_{T} [GeV/c]", "Entries");
2136 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt, xaxis, "p_{T} [GeV/c]", "Entries");
2139 //________________________________________________________________________
2140 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::FillDiJetFF(Int_t jetType, Float_t trackPt, Float_t jetPt, Double_t jetBin, Bool_t incrementJetPt)
2146 if(incrementJetPt) fh1JetPt->Fill(jetPt);
2148 fh2TrackPtJet->Fill(jetBin, trackPt);
2150 Double_t z = trackPt / jetPt;
2152 if(z>0) xi = TMath::Log(1/z);
2154 fh2Xi->Fill(jetBin, xi);
2155 fh2Z->Fill(jetBin, z);
2159 if(incrementJetPt) fh1Jet1Pt->Fill(jetPt);
2161 fh2TrackPtJet1->Fill(jetBin, trackPt);
2163 Double_t z = trackPt / jetPt;
2165 if(z>0) xi = TMath::Log(1/z);
2167 fh2Xi1->Fill(jetBin, xi);
2168 fh2Z1->Fill(jetBin, z);
2172 if(incrementJetPt) fh1Jet2Pt->Fill(jetPt);
2174 fh2TrackPtJet2->Fill(jetBin, trackPt);
2176 Double_t z = trackPt / jetPt;
2178 if(z>0) xi = TMath::Log(1/z);
2180 fh2Xi2->Fill(jetBin, xi);
2181 fh2Z2->Fill(jetBin, z);
2187 //________________________________________________________________________
2188 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AddToOutput(TList* list)const
2190 // add histos to list
2192 list->Add(fh1Jet1Pt);
2193 list->Add(fh1Jet2Pt);
2194 list->Add(fh1JetPt);
2195 list->Add(fh2TrackPtJet1);
2196 list->Add(fh2TrackPtJet2);
2197 list->Add(fh2TrackPtJet);
2206 //______________________________________________________________________________________________________
2207 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const char* name, Int_t kindSlices,
2208 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax,
2209 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
2210 Int_t nDeltaPhi, Float_t deltaPhiMin, Float_t deltaPhiMax,
2211 Int_t nDeltaEta, Float_t deltaEtaMin, Float_t deltaEtaMax,
2212 Int_t nDeltaPt, Float_t deltaPtMin, Float_t deltaPtMax,
2213 Int_t nInBal, Float_t inBalMin, Float_t inBalMax)
2215 ,fKindSlices(kindSlices)
2216 ,fNBinsJetInvMass(nInvMass)
2217 ,fJetInvMassMin(invMassMin)
2218 ,fJetInvMassMax(invMassMax)
2219 ,fNBinsJetPt(nJetPt)
2220 ,fJetPtMin(jetPtMin)
2221 ,fJetPtMax(jetPtMax)
2222 ,fNBinsDeltaPhi(nDeltaPhi)
2223 ,fDeltaPhiMin(deltaPhiMin)
2224 ,fDeltaPhiMax(deltaPhiMax)
2225 ,fNBinsDeltaEta(nDeltaEta)
2226 ,fDeltaEtaMin(deltaEtaMin)
2227 ,fDeltaEtaMax(deltaEtaMax)
2228 ,fNBinsDeltaPt(nDeltaPt)
2229 ,fDeltaPtMin(deltaPtMin)
2230 ,fDeltaPtMax(deltaPtMax)
2231 ,fNBinsInBal(nInBal)
2232 ,fInBalMin(inBalMin)
2233 ,fInBalMax(inBalMax)
2241 // default constructor
2245 //______________________________________________________________________________________________________
2246 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const AliFragFuncQADiJetHistos& copy)
2248 ,fKindSlices(copy.fKindSlices)
2249 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
2250 ,fJetInvMassMin(copy.fJetInvMassMin)
2251 ,fJetInvMassMax(copy.fJetInvMassMax)
2252 ,fNBinsJetPt(copy.fNBinsJetPt)
2253 ,fJetPtMin(copy.fJetPtMin)
2254 ,fJetPtMax(copy.fJetPtMax)
2255 ,fNBinsDeltaPhi(copy.fNBinsDeltaPhi)
2256 ,fDeltaPhiMin(copy.fDeltaPhiMin)
2257 ,fDeltaPhiMax(copy.fDeltaPhiMax)
2258 ,fNBinsDeltaEta(copy.fNBinsDeltaEta)
2259 ,fDeltaEtaMin(copy.fDeltaEtaMin)
2260 ,fDeltaEtaMax(copy.fDeltaEtaMax)
2261 ,fNBinsDeltaPt(copy.fNBinsDeltaPt)
2262 ,fDeltaPtMin(copy.fDeltaPtMin)
2263 ,fDeltaPtMax(copy.fDeltaPtMax)
2264 ,fNBinsInBal(copy.fNBinsInBal)
2265 ,fInBalMin(copy.fInBalMin)
2266 ,fInBalMax(copy.fInBalMax)
2267 ,fh2InvMass(copy.fh2InvMass)
2268 ,fh2DeltaPhi(copy.fh2DeltaPhi)
2269 ,fh2DeltaEta(copy.fh2DeltaEta)
2270 ,fh2DeltaPt(copy.fh2DeltaPt)
2271 ,fh2InBal(copy.fh2InBal)
2272 ,fNameQADJ(copy.fNameQADJ)
2274 // default constructor
2278 //_______________________________________________________________________________________________________________________________________________________________
2279 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& o)
2284 TObject::operator=(o);
2285 fKindSlices = o.fKindSlices;
2286 fNBinsJetInvMass = o.fNBinsJetInvMass;
2287 fJetInvMassMin = o.fJetInvMassMin;
2288 fJetInvMassMax = o.fJetInvMassMax;
2289 fNBinsJetPt = o.fNBinsJetPt;
2290 fJetPtMin = o.fJetPtMin;
2291 fJetPtMax = o.fJetPtMax;
2292 fNBinsDeltaPhi = o.fNBinsDeltaPhi;
2293 fDeltaPhiMin = o.fDeltaPhiMin;
2294 fDeltaPhiMax = o.fDeltaPhiMax;
2295 fNBinsDeltaEta = o.fNBinsDeltaEta;
2296 fDeltaEtaMin = o.fDeltaEtaMin;
2297 fDeltaEtaMax = o.fDeltaEtaMax;
2298 fNBinsDeltaPt = o.fNBinsDeltaPt;
2299 fDeltaPtMin = o.fDeltaPtMin;
2300 fDeltaPtMax = o.fDeltaPtMax;
2301 fNBinsInBal = o.fNBinsInBal;
2302 fInBalMin = o.fInBalMin;
2303 fInBalMax = o.fInBalMax;
2304 fh2InvMass = o.fh2InvMass;
2305 fh2DeltaPhi = o.fh2DeltaPhi;
2306 fh2DeltaEta = o.fh2DeltaEta;
2307 fh2DeltaPt = o.fh2DeltaPt;
2308 fh2InBal = o.fh2InBal;
2309 fNameQADJ = o.fNameQADJ;
2315 //_________________________________________________________
2316 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::~AliFragFuncQADiJetHistos()
2320 if(fh2InvMass) delete fh2InvMass;
2321 if(fh2DeltaPhi) delete fh2DeltaPhi;
2322 if(fh2DeltaEta) delete fh2DeltaEta;
2323 if(fh2DeltaPt) delete fh2DeltaPt;
2324 if(fh2InBal) delete fh2InBal;
2327 //________________________________________________________________________
2328 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::DefineQADiJetHistos()
2335 const char *xaxis = "";
2336 if(fKindSlices == 1)
2338 nBins = fNBinsJetInvMass;
2339 min = fJetInvMassMin;
2340 max = fJetInvMassMax;
2341 xaxis = "M_{JJ} [GeV]";
2343 if(fKindSlices == 2 || fKindSlices == 3)
2345 nBins = fNBinsJetPt;
2348 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2349 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2353 fh2InvMass = new TH2F(Form("fh2DJInvMassPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsJetInvMass, fJetInvMassMin, fJetInvMassMax);
2354 fh2DeltaPhi = new TH2F(Form("fh2DJDeltaPhiPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPhi, fDeltaPhiMin, fDeltaPhiMax);
2355 fh2DeltaEta = new TH2F(Form("fh2DJDeltaEtaPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaEta, fDeltaEtaMin, fDeltaEtaMax);
2356 fh2DeltaPt = new TH2F(Form("fh2DJDeltaPtPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPt, fDeltaPtMin, fDeltaPtMax);
2357 fh2InBal = new TH2F(Form("fh2DJInBalPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsInBal, fInBalMin, fInBalMax);
2359 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InvMass, xaxis, "Invariant Mass", "Entries");
2360 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPhi, xaxis, "#Delta #phi", "Entries");
2361 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaEta, xaxis, "#Delta #eta", "Entries");
2362 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPt, xaxis, "#Delta p_{T}", "Entries");
2363 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InBal, xaxis, "(p_{T}^{1}-p_{T}^{2})/(p_{T}^{1}+p_{T}^{2})", "Entries");
2367 //________________________________________________________________________
2368 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::FillDiJetQA(Double_t invMass, Double_t deltaPhi, Double_t deltaEta,Double_t deltaPt, Double_t inbal, Double_t jetBin)
2372 fh2InvMass->Fill(jetBin, invMass);
2373 fh2DeltaPhi->Fill(jetBin, deltaPhi);
2374 fh2DeltaEta->Fill(jetBin, deltaEta);
2375 fh2DeltaPt->Fill(jetBin, deltaPt);
2376 fh2InBal->Fill(jetBin, inbal);
2379 //________________________________________________________________________
2380 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AddToOutput(TList* list)const
2382 // add histos to list
2384 list->Add(fh2InvMass);
2385 list->Add(fh2DeltaPhi);
2386 list->Add(fh2DeltaEta);
2387 list->Add(fh2DeltaPt);
2388 list->Add(fh2InBal);
2391 //_________________________________________________________________________________
2392 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AddToOutput(TList* list) const
2394 // add histos to list
2396 list->Add(fh2CosTheta);
2398 list->Add(fh3ThetaZ);
2399 list->Add(fh3JtTheta);
2404 //_________________________________________________________________________________
2405 Bool_t AliAnalysisTaskFragmentationFunction::Notify()
2408 // Implemented Notify() to read the cross sections
2409 // and number of trials from pyxsec.root
2410 // (taken from AliAnalysisTaskJetSpectrum2)
2412 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
2413 Float_t xsection = 0;
2414 Float_t ftrials = 1;
2418 TFile *curfile = tree->GetCurrentFile();
2420 Error("Notify","No current file");
2423 if(!fh1Xsec||!fh1Trials){
2424 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
2427 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
2428 fh1Xsec->Fill("<#sigma>",xsection);
2429 // construct a poor man average trials
2430 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
2431 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
2434 // Set seed for backg study
2435 fRandom = new TRandom3();
2436 fRandom->SetSeed(0);
2441 //__________________________________________________________________
2442 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
2444 // create output objects
2446 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
2448 // create list of tracks and jets
2450 fTracksRec = new TList();
2451 fTracksRec->SetOwner(kFALSE);
2453 fTracksRecCuts = new TList();
2454 fTracksRecCuts->SetOwner(kFALSE);
2456 fTracksGen = new TList();
2457 fTracksGen->SetOwner(kFALSE);
2459 fTracksAODMCCharged = new TList();
2460 fTracksAODMCCharged->SetOwner(kFALSE);
2462 fTracksAODMCChargedSec = new TList();
2463 fTracksAODMCChargedSec->SetOwner(kFALSE);
2465 fTracksRecQualityCuts = new TList();
2466 fTracksRecQualityCuts->SetOwner(kFALSE);
2468 fJetsRec = new TList();
2469 fJetsRec->SetOwner(kFALSE);
2470 if(fBranchRecJets.Contains("KT") && fBckgSubMethod) fJetsRec->SetOwner(kTRUE);
2472 fJetsRecCuts = new TList();
2473 fJetsRecCuts->SetOwner(kFALSE);
2474 if(fBranchRecJets.Contains("KT") && fBckgSubMethod) fJetsRecCuts->SetOwner(kTRUE);
2476 fJetsGen = new TList();
2477 fJetsGen->SetOwner(kFALSE);
2479 fJetsRecEff = new TList();
2480 fJetsRecEff->SetOwner(kFALSE);
2482 fJetsEmbedded = new TList();
2483 fJetsEmbedded->SetOwner(kFALSE);
2487 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2488 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2489 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2491 fBckgJetsRec = new TList();
2492 fBckgJetsRec->SetOwner(kFALSE);
2494 fBckgJetsRecCuts = new TList();
2495 fBckgJetsRecCuts->SetOwner(kFALSE);
2497 fBckgJetsGen = new TList();
2498 fBckgJetsGen->SetOwner(kFALSE);
2502 // Create histograms / output container
2506 fCommonHistList = new TList();
2507 fCommonHistList->SetOwner(kTRUE);
2509 Bool_t oldStatus = TH1::AddDirectoryStatus();
2510 TH1::AddDirectory(kFALSE);
2514 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
2515 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
2516 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
2517 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
2518 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
2519 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
2520 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
2522 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
2523 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
2524 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
2525 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
2526 fh2TrackPtVsDCAXY = new TH2F("fh2TrackPtVsDCAXY","",400,-0.02,0.02,100,0.,10.);
2527 fh2TrackPtVsDCAZ = new TH2F("fh2TrackPtVsDCAZ","",100,-0.050,0.050,100,0.,10.);
2529 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
2530 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
2531 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
2532 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
2533 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
2534 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
2536 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
2537 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
2538 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
2539 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
2541 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
2542 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
2547 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2548 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2549 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
2551 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
2552 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
2555 if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp || fBckgType[4]==kBckgPerp )
2556 fh1PerpMult = new TH1F("fh1PerpMult","Background multiplicity - Cone perpendicular to leading jet axis",500,0.,500.);
2557 if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide || fBckgType[4]==kBckgASide)
2558 fh1ASideMult = new TH1F("fh1ASideMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
2559 if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow || fBckgType[4]==kBckgASideWindow)
2560 fh1ASideWindowMult = new TH1F("fh1ASideWindowMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
2561 if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow || fBckgType[4]==kBckgPerpWindow)
2562 fh1PerpWindowMult = new TH1F("fh1PerpWindowMult","Background multiplicity - Cone in the perp direction of leading jet axis",500,0.,500.);
2563 if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ || fBckgType[4]==kBckgOutLJ)
2564 fh1OutLeadingMult = new TH1F("fh1OutLeadingMult","Background multiplicity - Cone outside leading jet",500,0,500.);
2565 if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat || fBckgType[4]==kBckgOutLJStat)
2566 fh1OutLeadingStatMult = new TH1F("fh1OutLeadingStatMult","Background multiplicity - Cone outside leading jet",3000,0,3000.);
2567 if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J || fBckgType[4]==kBckgOut2J)
2568 fh1Out2JetsMult = new TH1F("fh1Out2JetsMult","Background multiplicity - Cone outside 2 jets",500,0.,500.);
2569 if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J || fBckgType[4]==kBckgOut3J)
2570 fh1Out3JetsMult = new TH1F("fh1Out3JetsMult","Background multiplicity - Cone outside 3 jets",500,0.,500.);
2571 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters)
2572 fh1MedianClustersMult = new TH1F("fh1MedianClustersMult","Background multiplicity - median cluster",500,0.,500.);
2573 if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading
2574 || fBckgType[4]==kBckgClustersOutLeading)
2575 fh1OutClustersMult = new TH1F("fh1OutClustersMult","Background multiplicity - clusters outside leading jet",3000,0.,3000.);
2579 if(fBranchEmbeddedJets.Length()){
2580 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
2581 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
2582 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
2583 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
2584 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
2585 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
2589 fh2ptVsDistNN_pt50_rec = new TH2F("fh2ptVsDistNN_pt50_rec","",200,0,0.2,500,0.,100);
2590 fh2ptVsDistNN_pt50_nonRec = new TH2F("fh2ptVsDistNN_pt50_nonRec","",200,0,0.2,500,0.,100);
2591 fh2ptVsDistNN_pt10_rec = new TH2F("fh2ptVsDistNN_pt10_rec","",200,0,0.2,500,0.,100);
2592 fh2ptVsDistNN_pt10_nonRec = new TH2F("fh2ptVsDistNN_pt10_nonRec","",200,0,0.2,500,0.,100);
2596 if(fQAMode&1){ // track QA
2597 fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2598 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2599 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2600 fQATrackHighPtThreshold);
2601 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2602 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2603 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2604 fQATrackHighPtThreshold);
2605 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2606 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2607 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2608 fQATrackHighPtThreshold);
2611 if(fQAMode&2){ // jet QA
2612 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2613 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2614 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2615 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2616 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2617 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2618 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2619 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2620 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2621 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2622 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2623 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2624 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2625 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2626 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2627 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2628 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2634 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2635 fFFNBinsPt, fFFPtMin, fFFPtMax,
2636 fFFNBinsXi, fFFXiMin, fFFXiMax,
2637 fFFNBinsZ , fFFZMin , fFFZMax , fFFLogZBins);
2638 fFFHistosRecLeading = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2639 fFFNBinsPt, fFFPtMin, fFFPtMax,
2640 fFFNBinsXi, fFFXiMin, fFFXiMax,
2641 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2642 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2643 fFFNBinsPt, fFFPtMin, fFFPtMax,
2644 fFFNBinsXi, fFFXiMin, fFFXiMax,
2645 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2646 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2647 fFFNBinsPt, fFFPtMin, fFFPtMax,
2648 fFFNBinsXi, fFFXiMin, fFFXiMax,
2649 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2650 fFFHistosGenLeading = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2651 fFFNBinsPt, fFFPtMin, fFFPtMax,
2652 fFFNBinsXi, fFFXiMin, fFFXiMax,
2653 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2654 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2655 fFFNBinsPt, fFFPtMin, fFFPtMax,
2656 fFFNBinsXi, fFFXiMin, fFFXiMax,
2657 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2662 fIJHistosRecCuts = new AliFragFuncIntraJetHistos("RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2663 fIJNBinsPt, fIJPtMin, fIJPtMax,
2664 fIJNBinsZ, fIJZMin, fIJZMax,
2665 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2666 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2667 fIJNBinsJt , fIJJtMin , fIJJtMax);
2668 fIJHistosRecLeading = new AliFragFuncIntraJetHistos("RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2669 fIJNBinsPt, fIJPtMin, fIJPtMax,
2670 fIJNBinsZ, fIJZMin, fIJZMax,
2671 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2672 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2673 fIJNBinsJt , fIJJtMin , fIJJtMax);
2674 fIJHistosRecLeadingTrack = new AliFragFuncIntraJetHistos("RecLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2675 fIJNBinsPt, fIJPtMin, fIJPtMax,
2676 fIJNBinsZ, fIJZMin, fIJZMax,
2677 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2678 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2679 fIJNBinsJt , fIJJtMin , fIJJtMax);
2680 fIJHistosGen = new AliFragFuncIntraJetHistos("Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2681 fIJNBinsPt, fIJPtMin, fIJPtMax,
2682 fIJNBinsZ, fIJZMin, fIJZMax,
2683 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2684 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2685 fIJNBinsJt , fIJJtMin , fIJJtMax);
2686 fIJHistosGenLeading = new AliFragFuncIntraJetHistos("GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2687 fIJNBinsPt, fIJPtMin, fIJPtMax,
2688 fIJNBinsZ, fIJZMin, fIJZMax,
2689 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2690 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2691 fIJNBinsJt , fIJJtMin , fIJJtMax);
2692 fIJHistosGenLeadingTrack = new AliFragFuncIntraJetHistos("GenLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2693 fIJNBinsPt, fIJPtMin, fIJPtMax,
2694 fIJNBinsZ, fIJZMin, fIJZMax,
2695 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2696 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2697 fIJNBinsJt , fIJJtMin , fIJJtMax);
2702 fFFDiJetHistosRecCuts = new AliFragFuncDiJetHistos("RecCuts", fDiJetKindBins,
2703 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2704 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2705 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2706 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2707 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2708 fFFDiJetHistosRecLeading = new AliFragFuncDiJetHistos("RecLeading", fDiJetKindBins,
2709 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2710 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2711 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2712 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2713 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2714 fFFDiJetHistosRecLeadingTrack = new AliFragFuncDiJetHistos("RecLeadingTrack", fDiJetKindBins,
2715 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2716 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2717 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2718 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2719 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2721 fFFDiJetHistosGen = new AliFragFuncDiJetHistos("Gen", fDiJetKindBins,
2722 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2723 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2724 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2725 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2726 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2727 fFFDiJetHistosGenLeading = new AliFragFuncDiJetHistos("GenLeading", fDiJetKindBins,
2728 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2729 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2730 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2731 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2732 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2733 fFFDiJetHistosGenLeadingTrack = new AliFragFuncDiJetHistos("GenLeadingTrack", fDiJetKindBins,
2734 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2735 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2736 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2737 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2738 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2742 fQADiJetHistosRecCuts = new AliFragFuncQADiJetHistos("RecCuts", fDiJetKindBins,
2743 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2744 fQADiJetNBinsJetPt, fQADiJetJetPtMin, fQADiJetJetPtMax,
2745 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax ,
2746 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax ,
2747 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax,
2748 fQADiJetNBinsInBal, fQADiJetInBalMin, fQADiJetInBalMax);
2749 fQADiJetHistosGen = new AliFragFuncQADiJetHistos("Gen", fDiJetKindBins,
2750 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2751 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2752 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax,
2753 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax,
2754 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax,
2755 fQADiJetNBinsInBal, fQADiJetInBalMin, fQADiJetInBalMax);
2763 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2764 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2765 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2766 fQATrackHighPtThreshold);
2768 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2769 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2770 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2771 fQATrackHighPtThreshold);
2773 fQATrackHistosSecRec = new AliFragFuncQATrackHistos("SecRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2774 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2775 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2776 fQATrackHighPtThreshold);
2779 Int_t nBinsResponseSinglePt[2] = {fFFNBinsPt, fFFNBinsPt};
2780 Double_t binMinResponseSinglePt[2] = {fFFPtMin, fFFPtMin};
2781 Double_t binMaxResponseSinglePt[2] = {fFFPtMax, fFFPtMax};
2782 const char* labelsResponseSinglePt[2] = {"rec p_{T} [GeV/c]", "gen p_{T} [GeV/c]"};
2784 fhnResponseSinglePt = new THnSparseF("fhnResponseSinglePt","track pt gen : track pt rec",2,
2785 nBinsResponseSinglePt,binMinResponseSinglePt,binMaxResponseSinglePt);
2787 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseSinglePt,2,labelsResponseSinglePt);
2790 fh2SingleInvPtRecMnGenVsPtGen = new TH2F("fh2SingleInvPtRecMnGenVsPtGen","",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,200,-1,1);
2793 fFFHistosRecEffGen = new AliFragFuncHistos("RecEffGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2794 fFFNBinsPt, fFFPtMin, fFFPtMax,
2795 fFFNBinsXi, fFFXiMin, fFFXiMax,
2796 fFFNBinsZ , fFFZMin , fFFZMax);
2798 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2799 fFFNBinsPt, fFFPtMin, fFFPtMax,
2800 fFFNBinsXi, fFFXiMin, fFFXiMax,
2801 fFFNBinsZ , fFFZMin , fFFZMax);
2803 fFFHistosSecRec = new AliFragFuncHistos("SecRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2804 fFFNBinsPt, fFFPtMin, fFFPtMax,
2805 fFFNBinsXi, fFFXiMin, fFFXiMax,
2806 fFFNBinsZ , fFFZMin , fFFZMax);
2809 Int_t nBinsResponseJetTrackPt[3] = {fFFNBinsJetPt,fFFNBinsPt,fFFNBinsPt};
2810 Double_t binMinResponseJetTrackPt[3] = {fFFJetPtMin,fFFPtMin, fFFPtMin};
2811 Double_t binMaxResponseJetTrackPt[3] = {fFFJetPtMax,fFFPtMax,fFFPtMax};
2812 const char* labelsResponseJetTrackPt[3] = { "jet p_{T} [GeV/c]","rec p_{T} [GeV/c]", "gen p_{T} [GeV/c]"};
2814 fhnResponseJetTrackPt = new THnSparseF("fhnResponseJetTrackPt","jet pt:track pt rec:track pt gen",3,
2815 nBinsResponseJetTrackPt,binMinResponseJetTrackPt,binMaxResponseJetTrackPt);
2817 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetTrackPt,3,labelsResponseJetTrackPt);
2821 Int_t nBinsResponseJetZ[3] = {fFFNBinsJetPt, fFFNBinsZ,fFFNBinsZ};
2822 Double_t binMinResponseJetZ[3] = {fFFJetPtMin, fFFZMin, fFFZMin};
2823 Double_t binMaxResponseJetZ[3] = {fFFJetPtMax, fFFZMax, fFFZMax};
2825 fhnResponseJetZ = new THnSparseF("fhnResponseJetZ","jet pt:rec z rec:gen z",3,
2826 nBinsResponseJetZ,binMinResponseJetZ,binMaxResponseJetZ);
2830 Double_t binLims[fFFNBinsXi+1];
2831 fFFHistosRecEffGen->CalcLogZBins(fFFNBinsXi,fFFXiMin,fFFXiMax,binLims);
2833 Int_t binsZ = fFFNBinsXi;
2834 Double_t zMin = binLims[0];
2835 Double_t zMax = binLims[fFFNBinsXi];
2837 Int_t nBinsResponseJetZ[3] = {fFFNBinsJetPt, binsZ, binsZ};
2838 Double_t binMinResponseJetZ[3] = {fFFJetPtMin, zMin, zMin};
2839 Double_t binMaxResponseJetZ[3] = {fFFJetPtMax, zMax, zMax};
2841 fhnResponseJetZ = new THnSparseF("fhnResponseJetZ","jet pt:rec z rec:gen z",3,
2842 nBinsResponseJetZ,binMinResponseJetZ,binMaxResponseJetZ);
2844 fhnResponseJetZ->SetBinEdges(1,binLims);
2845 fhnResponseJetZ->SetBinEdges(2,binLims);
2848 const char* labelsResponseJetZ[3] = { "jet p_{T} [GeV/c]","rec z","gen z"};
2849 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetZ,3,labelsResponseJetZ);
2851 Int_t nBinsResponseJetXi[3] = {fFFNBinsJetPt, fFFNBinsXi,fFFNBinsXi};
2852 Double_t binMinResponseJetXi[3] = {fFFJetPtMin, fFFXiMin, fFFXiMin};
2853 Double_t binMaxResponseJetXi[3] = {fFFJetPtMax, fFFXiMax, fFFXiMax};
2854 const char* labelsResponseJetXi[3] = { "jet p_{T} [GeV/c]","rec xi","gen xi"};
2856 fhnResponseJetXi = new THnSparseF("fhnResponseJetXi","jet pt:track xi rec:track xi gen",3,
2857 nBinsResponseJetXi,binMinResponseJetXi,binMaxResponseJetXi);
2859 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetXi,3,labelsResponseJetXi);
2862 } // end: efficiency
2868 for(Int_t i=0; i<5; i++){
2869 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
2870 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
2871 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
2872 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
2873 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
2874 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
2875 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
2876 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
2877 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
2878 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
2879 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
2880 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
2881 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
2882 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
2883 else printf("Please chose background method number %d!",i);
2887 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2888 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2889 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2890 fQATrackHighPtThreshold);
2891 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2892 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2893 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2894 fQATrackHighPtThreshold);
2895 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2896 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2897 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2898 fQATrackHighPtThreshold);
2899 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2900 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2901 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2902 fQATrackHighPtThreshold);
2903 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2904 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2905 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2906 fQATrackHighPtThreshold);
2907 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2908 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2909 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2910 fQATrackHighPtThreshold);
2911 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2912 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2913 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2914 fQATrackHighPtThreshold);
2915 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2916 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2917 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2918 fQATrackHighPtThreshold);
2919 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2920 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2921 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2922 fQATrackHighPtThreshold);
2923 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2924 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2925 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2926 fQATrackHighPtThreshold);
2929 } // end: background QA
2932 // outside leading jet or 2 jets or more
2933 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2934 fFFNBinsPt, fFFPtMin, fFFPtMax,
2935 fFFNBinsXi, fFFXiMin, fFFXiMax,
2936 fFFNBinsZ , fFFZMin , fFFZMax);
2937 fFFBckgHisto0RecLeading = new AliFragFuncHistos("Bckg"+title[0]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2938 fFFNBinsPt, fFFPtMin, fFFPtMax,
2939 fFFNBinsXi, fFFXiMin, fFFXiMax,
2940 fFFNBinsZ , fFFZMin , fFFZMax);
2941 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2942 fFFNBinsPt, fFFPtMin, fFFPtMax,
2943 fFFNBinsXi, fFFXiMin, fFFXiMax,
2944 fFFNBinsZ , fFFZMin , fFFZMax);
2945 fFFBckgHisto0GenLeading = new AliFragFuncHistos("Bckg"+title[0]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2946 fFFNBinsPt, fFFPtMin, fFFPtMax,
2947 fFFNBinsXi, fFFXiMin, fFFXiMax,
2948 fFFNBinsZ , fFFZMin , fFFZMax);
2950 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2951 fFFNBinsPt, fFFPtMin, fFFPtMax,
2952 fFFNBinsXi, fFFXiMin, fFFXiMax,
2953 fFFNBinsZ , fFFZMin , fFFZMax);
2954 fFFBckgHisto1RecLeading = new AliFragFuncHistos("Bckg"+title[1]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2955 fFFNBinsPt, fFFPtMin, fFFPtMax,
2956 fFFNBinsXi, fFFXiMin, fFFXiMax,
2957 fFFNBinsZ , fFFZMin , fFFZMax);
2958 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2959 fFFNBinsPt, fFFPtMin, fFFPtMax,
2960 fFFNBinsXi, fFFXiMin, fFFXiMax,
2961 fFFNBinsZ , fFFZMin , fFFZMax);
2962 fFFBckgHisto1GenLeading = new AliFragFuncHistos("Bckg"+title[1]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2963 fFFNBinsPt, fFFPtMin, fFFPtMax,
2964 fFFNBinsXi, fFFXiMin, fFFXiMax,
2965 fFFNBinsZ , fFFZMin , fFFZMax);
2967 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2968 fFFNBinsPt, fFFPtMin, fFFPtMax,
2969 fFFNBinsXi, fFFXiMin, fFFXiMax,
2970 fFFNBinsZ , fFFZMin , fFFZMax);
2971 fFFBckgHisto2RecLeading = new AliFragFuncHistos("Bckg"+title[2]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2972 fFFNBinsPt, fFFPtMin, fFFPtMax,
2973 fFFNBinsXi, fFFXiMin, fFFXiMax,
2974 fFFNBinsZ , fFFZMin , fFFZMax);
2975 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2976 fFFNBinsPt, fFFPtMin, fFFPtMax,
2977 fFFNBinsXi, fFFXiMin, fFFXiMax,
2978 fFFNBinsZ , fFFZMin , fFFZMax);
2979 fFFBckgHisto2GenLeading = new AliFragFuncHistos("Bckg"+title[2]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2980 fFFNBinsPt, fFFPtMin, fFFPtMax,
2981 fFFNBinsXi, fFFXiMin, fFFXiMax,
2982 fFFNBinsZ , fFFZMin , fFFZMax);
2983 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2984 fFFNBinsPt, fFFPtMin, fFFPtMax,
2985 fFFNBinsXi, fFFXiMin, fFFXiMax,
2986 fFFNBinsZ , fFFZMin , fFFZMax);
2987 fFFBckgHisto3RecLeading = new AliFragFuncHistos("Bckg"+title[3]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2988 fFFNBinsPt, fFFPtMin, fFFPtMax,
2989 fFFNBinsXi, fFFXiMin, fFFXiMax,
2990 fFFNBinsZ , fFFZMin , fFFZMax);
2991 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2992 fFFNBinsPt, fFFPtMin, fFFPtMax,
2993 fFFNBinsXi, fFFXiMin, fFFXiMax,
2994 fFFNBinsZ , fFFZMin , fFFZMax);
2995 fFFBckgHisto3GenLeading = new AliFragFuncHistos("Bckg"+title[3]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2996 fFFNBinsPt, fFFPtMin, fFFPtMax,
2997 fFFNBinsXi, fFFXiMin, fFFXiMax,
2998 fFFNBinsZ , fFFZMin , fFFZMax);
2999 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
3000 fFFNBinsPt, fFFPtMin, fFFPtMax,
3001 fFFNBinsXi, fFFXiMin, fFFXiMax,
3002 fFFNBinsZ , fFFZMin , fFFZMax);
3003 fFFBckgHisto4RecLeading = new AliFragFuncHistos("Bckg"+title[4]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
3004 fFFNBinsPt, fFFPtMin, fFFPtMax,
3005 fFFNBinsXi, fFFXiMin, fFFXiMax,
3006 fFFNBinsZ , fFFZMin , fFFZMax);
3007 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
3008 fFFNBinsPt, fFFPtMin, fFFPtMax,
3009 fFFNBinsXi, fFFXiMin, fFFXiMax,
3010 fFFNBinsZ , fFFZMin , fFFZMax);
3011 fFFBckgHisto4GenLeading = new AliFragFuncHistos("Bckg"+title[4]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
3012 fFFNBinsPt, fFFPtMin, fFFPtMax,
3013 fFFNBinsXi, fFFXiMin, fFFXiMax,
3014 fFFNBinsZ , fFFZMin , fFFZMax);
3016 } // end: background FF
3019 fIJBckgHisto0RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3020 fIJNBinsPt, fIJPtMin, fIJPtMax,
3021 fIJNBinsZ, fIJZMin, fIJZMax,
3022 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3023 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3024 fIJNBinsJt , fIJJtMin , fIJJtMax);
3025 fIJBckgHisto0RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3026 fIJNBinsPt, fIJPtMin, fIJPtMax,
3027 fIJNBinsZ, fIJZMin, fIJZMax,
3028 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3029 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3030 fIJNBinsJt , fIJJtMin , fIJJtMax);
3031 fIJBckgHisto0Gen = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3032 fIJNBinsPt, fIJPtMin, fIJPtMax,
3033 fIJNBinsZ, fIJZMin, fIJZMax,
3034 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3035 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3036 fIJNBinsJt , fIJJtMin , fIJJtMax);
3037 fIJBckgHisto0GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3038 fIJNBinsPt, fIJPtMin, fIJPtMax,
3039 fIJNBinsZ, fIJZMin, fIJZMax,
3040 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3041 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3042 fIJNBinsJt , fIJJtMin , fIJJtMax);
3045 fIJBckgHisto1RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3046 fIJNBinsPt, fIJPtMin, fIJPtMax,
3047 fIJNBinsZ, fIJZMin, fIJZMax,
3048 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3049 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3050 fIJNBinsJt , fIJJtMin , fIJJtMax);
3051 fIJBckgHisto1RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3052 fIJNBinsPt, fIJPtMin, fIJPtMax,
3053 fIJNBinsZ, fIJZMin, fIJZMax,
3054 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3055 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3056 fIJNBinsJt , fIJJtMin , fIJJtMax);
3057 fIJBckgHisto1Gen = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3058 fIJNBinsPt, fIJPtMin, fIJPtMax,
3059 fIJNBinsZ, fIJZMin, fIJZMax,
3060 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3061 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3062 fIJNBinsJt , fIJJtMin , fIJJtMax);
3063 fIJBckgHisto1GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3064 fIJNBinsPt, fIJPtMin, fIJPtMax,
3065 fIJNBinsZ, fIJZMin, fIJZMax,
3066 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3067 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3068 fIJNBinsJt , fIJJtMin , fIJJtMax);
3070 fIJBckgHisto2RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3071 fIJNBinsPt, fIJPtMin, fIJPtMax,
3072 fIJNBinsZ, fIJZMin, fIJZMax,
3073 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3074 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3075 fIJNBinsJt , fIJJtMin , fIJJtMax);
3076 fIJBckgHisto2RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3077 fIJNBinsPt, fIJPtMin, fIJPtMax,
3078 fIJNBinsZ, fIJZMin, fIJZMax,
3079 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3080 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3081 fIJNBinsJt , fIJJtMin , fIJJtMax);
3082 fIJBckgHisto2Gen = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3083 fIJNBinsPt, fIJPtMin, fIJPtMax,
3084 fIJNBinsZ, fIJZMin, fIJZMax,
3085 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3086 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3087 fIJNBinsJt , fIJJtMin , fIJJtMax);
3088 fIJBckgHisto2GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3089 fIJNBinsPt, fIJPtMin, fIJPtMax,
3090 fIJNBinsZ, fIJZMin, fIJZMax,
3091 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3092 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3093 fIJNBinsJt , fIJJtMin , fIJJtMax);
3094 } // end: background intra-jet
3095 } // end: background
3098 fPhiCorrHistosJetArea = new AliFragFuncQATrackHistos("JetArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3099 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3100 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3101 fQATrackHighPtThreshold);
3103 fPhiCorrHistosTransverseArea = new AliFragFuncQATrackHistos("TransverseArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3104 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3105 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3106 fQATrackHighPtThreshold);
3108 fPhiCorrHistosAwayArea = new AliFragFuncQATrackHistos("AwayArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3109 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3110 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3111 fQATrackHighPtThreshold);
3112 } // end: phi correlation
3115 // ____________ define histograms ____________________
3118 if(fQAMode&1){ // track QA
3119 fQATrackHistosRec->DefineHistos();
3120 fQATrackHistosRecCuts->DefineHistos();
3121 fQATrackHistosGen->DefineHistos();
3124 if(fQAMode&2){ // jet QA
3125 fQAJetHistosRec->DefineHistos();
3126 fQAJetHistosRecCuts->DefineHistos();
3127 fQAJetHistosRecCutsLeading->DefineHistos();
3128 fQAJetHistosGen->DefineHistos();
3129 fQAJetHistosGenLeading->DefineHistos();
3130 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
3135 fFFHistosRecCuts->DefineHistos();
3136 fFFHistosRecLeading->DefineHistos();
3137 fFFHistosRecLeadingTrack->DefineHistos();
3138 fFFHistosGen->DefineHistos();
3139 fFFHistosGenLeading->DefineHistos();
3140 fFFHistosGenLeadingTrack->DefineHistos();
3144 fIJHistosRecCuts->DefineHistos();
3145 fIJHistosRecLeading->DefineHistos();
3146 fIJHistosRecLeadingTrack->DefineHistos();
3147 fIJHistosGen->DefineHistos();
3148 fIJHistosGenLeading->DefineHistos();
3149 fIJHistosGenLeadingTrack->DefineHistos();
3154 fFFDiJetHistosRecCuts->DefineDiJetHistos();
3155 fFFDiJetHistosRecLeading->DefineDiJetHistos();
3156 fFFDiJetHistosRecLeadingTrack->DefineDiJetHistos();
3157 fFFDiJetHistosGen->DefineDiJetHistos();
3158 fFFDiJetHistosGenLeading->DefineDiJetHistos();
3159 fFFDiJetHistosGenLeadingTrack->DefineDiJetHistos();
3163 fQADiJetHistosRecCuts->DefineQADiJetHistos();
3164 fQADiJetHistosGen->DefineQADiJetHistos();
3170 fQATrackHistosRecEffGen->DefineHistos();
3171 fQATrackHistosRecEffRec->DefineHistos();
3172 fQATrackHistosSecRec->DefineHistos();
3175 fFFHistosRecEffGen->DefineHistos();
3176 fFFHistosRecEffRec->DefineHistos();
3177 fFFHistosSecRec->DefineHistos();
3179 } // end: efficiency
3184 fFFBckgHisto0RecCuts->DefineHistos();
3185 fFFBckgHisto0RecLeading->DefineHistos();
3186 fFFBckgHisto0Gen->DefineHistos();
3187 fFFBckgHisto0GenLeading->DefineHistos();
3188 fFFBckgHisto1RecCuts->DefineHistos();
3189 fFFBckgHisto1RecLeading->DefineHistos();
3190 fFFBckgHisto1Gen->DefineHistos();
3191 fFFBckgHisto1GenLeading->DefineHistos();
3192 fFFBckgHisto2RecCuts->DefineHistos();
3193 fFFBckgHisto2RecLeading->DefineHistos();
3194 fFFBckgHisto2Gen->DefineHistos();
3195 fFFBckgHisto2GenLeading->DefineHistos();
3196 fFFBckgHisto3RecCuts->DefineHistos();
3197 fFFBckgHisto3RecLeading->DefineHistos();
3198 fFFBckgHisto3Gen->DefineHistos();
3199 fFFBckgHisto3GenLeading->DefineHistos();
3200 fFFBckgHisto4RecCuts->DefineHistos();
3201 fFFBckgHisto4RecLeading->DefineHistos();
3202 fFFBckgHisto4Gen->DefineHistos();
3203 fFFBckgHisto4GenLeading->DefineHistos();
3207 fIJBckgHisto0RecCuts->DefineHistos();
3208 fIJBckgHisto0RecLeading->DefineHistos();
3209 fIJBckgHisto0Gen->DefineHistos();
3210 fIJBckgHisto0GenLeading->DefineHistos();
3211 fIJBckgHisto1RecCuts->DefineHistos();
3212 fIJBckgHisto1RecLeading->DefineHistos();
3213 fIJBckgHisto1Gen->DefineHistos();
3214 fIJBckgHisto1GenLeading->DefineHistos();
3215 fIJBckgHisto2RecCuts->DefineHistos();
3216 fIJBckgHisto2RecLeading->DefineHistos();
3217 fIJBckgHisto2Gen->DefineHistos();
3218 fIJBckgHisto2GenLeading->DefineHistos();
3222 fQABckgHisto0RecCuts->DefineHistos();
3223 fQABckgHisto0Gen->DefineHistos();
3224 fQABckgHisto1RecCuts->DefineHistos();
3225 fQABckgHisto1Gen->DefineHistos();
3226 fQABckgHisto2RecCuts->DefineHistos();
3227 fQABckgHisto2Gen->DefineHistos();
3228 fQABckgHisto3RecCuts->DefineHistos();
3229 fQABckgHisto3Gen->DefineHistos();
3230 fQABckgHisto4RecCuts->DefineHistos();
3231 fQABckgHisto4Gen->DefineHistos();
3233 } // end: background
3236 fPhiCorrHistosJetArea->DefineHistos();
3237 fPhiCorrHistosTransverseArea->DefineHistos();
3238 fPhiCorrHistosAwayArea->DefineHistos();
3241 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
3242 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
3243 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
3245 fCommonHistList->Add(fh1EvtSelection);
3246 fCommonHistList->Add(fh1EvtMult);
3247 fCommonHistList->Add(fh1EvtCent);
3248 fCommonHistList->Add(fh2TrackPtVsDCAXY);
3249 fCommonHistList->Add(fh2TrackPtVsDCAZ);
3250 fCommonHistList->Add(fh1VertexNContributors);
3251 fCommonHistList->Add(fh1VertexZ);
3252 fCommonHistList->Add(fh1nRecJetsCuts);
3253 fCommonHistList->Add(fh1Xsec);
3254 fCommonHistList->Add(fh1Trials);
3255 fCommonHistList->Add(fh1PtHard);
3256 fCommonHistList->Add(fh1PtHardTrials);
3257 if(genJets) fCommonHistList->Add(fh1nGenJets);
3261 fFFHistosRecCuts->AddToOutput(fCommonHistList);
3262 fFFHistosRecLeading->AddToOutput(fCommonHistList);
3263 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3264 if(genJets && genTracks){
3265 fFFHistosGen->AddToOutput(fCommonHistList);
3266 fFFHistosGenLeading->AddToOutput(fCommonHistList);
3267 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3274 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
3275 fFFBckgHisto0RecLeading->AddToOutput(fCommonHistList);
3276 fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
3277 fFFBckgHisto1RecLeading->AddToOutput(fCommonHistList);
3278 fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
3279 fFFBckgHisto2RecLeading->AddToOutput(fCommonHistList);
3280 fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
3281 fFFBckgHisto3RecLeading->AddToOutput(fCommonHistList);
3282 fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
3283 fFFBckgHisto4RecLeading->AddToOutput(fCommonHistList);
3285 if(genJets && genTracks){
3286 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
3287 fFFBckgHisto0GenLeading->AddToOutput(fCommonHistList);
3288 fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
3289 fFFBckgHisto1GenLeading->AddToOutput(fCommonHistList);
3290 fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
3291 fFFBckgHisto2GenLeading->AddToOutput(fCommonHistList);
3292 fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
3293 fFFBckgHisto3GenLeading->AddToOutput(fCommonHistList);
3294 fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
3295 fFFBckgHisto4GenLeading->AddToOutput(fCommonHistList);
3300 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
3301 fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
3302 fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
3303 fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
3304 fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
3305 if(genJets && genTracks){
3306 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
3307 fQABckgHisto1Gen->AddToOutput(fCommonHistList);
3308 fQABckgHisto2Gen->AddToOutput(fCommonHistList);
3309 fQABckgHisto3Gen->AddToOutput(fCommonHistList);
3310 fQABckgHisto4Gen->AddToOutput(fCommonHistList);
3314 if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ || fBckgType[4]==kBckgOutLJ)
3315 fCommonHistList->Add(fh1OutLeadingMult);
3316 if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat || fBckgType[4]==kBckgOutLJStat)
3317 fCommonHistList->Add(fh1OutLeadingStatMult);
3318 if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp || fBckgType[4]==kBckgPerp)
3319 fCommonHistList->Add(fh1PerpMult);
3320 if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide || fBckgType[4]==kBckgASide)
3321 fCommonHistList->Add(fh1ASideMult);
3322 if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow || fBckgType[4]==kBckgASideWindow)
3323 fCommonHistList->Add(fh1ASideWindowMult);
3324 if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow || fBckgType[4]==kBckgPerpWindow)
3325 fCommonHistList->Add(fh1PerpWindowMult);
3326 if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J || fBckgType[4]==kBckgOut2J)
3327 fCommonHistList->Add(fh1Out2JetsMult);
3328 if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J || fBckgType[4]==kBckgOut3J)
3329 fCommonHistList->Add(fh1Out3JetsMult);
3330 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters)
3331 fCommonHistList->Add(fh1MedianClustersMult);
3332 if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading
3333 || fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)
3334 fCommonHistList->Add(fh1OutClustersMult);
3338 if(fBranchEmbeddedJets.Length()){
3339 fCommonHistList->Add(fh1FractionPtEmbedded);
3340 fCommonHistList->Add(fh1IndexEmbedded);
3341 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
3342 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
3343 fCommonHistList->Add(fh1DeltaREmbedded);
3344 fCommonHistList->Add(fh1nEmbeddedJets);
3348 fCommonHistList->Add(fh2ptVsDistNN_pt50_rec);
3349 fCommonHistList->Add(fh2ptVsDistNN_pt50_nonRec);
3350 fCommonHistList->Add(fh2ptVsDistNN_pt10_rec);
3351 fCommonHistList->Add(fh2ptVsDistNN_pt10_nonRec);
3356 if(fQAMode&1){ // track QA
3357 fQATrackHistosRec->AddToOutput(fCommonHistList);
3358 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
3359 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
3362 if(fQAMode&2){ // jet QA
3363 fQAJetHistosRec->AddToOutput(fCommonHistList);
3364 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
3365 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
3366 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
3368 fQAJetHistosGen->AddToOutput(fCommonHistList);
3369 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
3375 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3376 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3377 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
3378 fCommonHistList->Add(fh1nRecBckgJetsCuts);
3379 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
3384 fPhiCorrHistosJetArea->AddToOutput(fCommonHistList);
3385 fPhiCorrHistosTransverseArea->AddToOutput(fCommonHistList);
3386 fPhiCorrHistosAwayArea->AddToOutput(fCommonHistList);
3391 fIJHistosRecCuts->AddToOutput(fCommonHistList);
3392 fIJHistosRecLeading->AddToOutput(fCommonHistList);
3393 fIJHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3397 fIJBckgHisto0RecCuts->AddToOutput(fCommonHistList);
3398 fIJBckgHisto0RecLeading->AddToOutput(fCommonHistList);
3399 fIJBckgHisto1RecCuts->AddToOutput(fCommonHistList);
3400 fIJBckgHisto1RecLeading->AddToOutput(fCommonHistList);
3401 fIJBckgHisto2RecCuts->AddToOutput(fCommonHistList);
3402 fIJBckgHisto2RecLeading->AddToOutput(fCommonHistList);
3405 if(genJets && genTracks){
3406 fIJHistosGen->AddToOutput(fCommonHistList);
3407 fIJHistosGenLeading->AddToOutput(fCommonHistList);
3408 fIJHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3412 fIJBckgHisto0Gen->AddToOutput(fCommonHistList);
3413 fIJBckgHisto0GenLeading->AddToOutput(fCommonHistList);
3414 fIJBckgHisto1Gen->AddToOutput(fCommonHistList);
3415 fIJBckgHisto1GenLeading->AddToOutput(fCommonHistList);
3416 fIJBckgHisto2Gen->AddToOutput(fCommonHistList);
3417 fIJBckgHisto2GenLeading->AddToOutput(fCommonHistList);
3424 fFFDiJetHistosRecCuts->AddToOutput(fCommonHistList);
3425 fFFDiJetHistosRecLeading->AddToOutput(fCommonHistList);
3426 fFFDiJetHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3427 if(genJets && genTracks){
3428 fFFDiJetHistosGen->AddToOutput(fCommonHistList);
3429 fFFDiJetHistosGenLeading->AddToOutput(fCommonHistList);
3430 fFFDiJetHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3434 fQADiJetHistosRecCuts->AddToOutput(fCommonHistList);
3435 if(genJets && genTracks){
3436 fQADiJetHistosGen->AddToOutput(fCommonHistList);
3441 if(fEffMode && recJetsEff && genTracks){
3443 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
3444 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
3445 fQATrackHistosSecRec->AddToOutput(fCommonHistList);
3446 fCommonHistList->Add(fhnResponseSinglePt);
3447 fCommonHistList->Add(fh2SingleInvPtRecMnGenVsPtGen);
3450 fFFHistosRecEffGen->AddToOutput(fCommonHistList);
3451 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
3452 fFFHistosSecRec->AddToOutput(fCommonHistList);
3453 fCommonHistList->Add(fhnResponseJetTrackPt);
3454 fCommonHistList->Add(fhnResponseJetZ);
3455 fCommonHistList->Add(fhnResponseJetXi);
3457 fCommonHistList->Add(fh1nRecEffJets);
3458 fCommonHistList->Add(fh2PtRecVsGenPrim);
3459 fCommonHistList->Add(fh2PtRecVsGenSec);
3463 // =========== Switch on Sumw2 for all histos ===========
3464 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
3465 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
3466 if (h1) h1->Sumw2();
3468 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
3469 if(hnSparse) hnSparse->Sumw2();
3473 TH1::AddDirectory(oldStatus);
3475 PostData(1, fCommonHistList);
3479 //_______________________________________________
3480 void AliAnalysisTaskFragmentationFunction::Init()
3483 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
3487 //_____________________________________________________________
3488 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
3491 // Called for each event
3492 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
3495 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
3497 // Trigger selection
3498 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
3499 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
3501 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
3502 fh1EvtSelection->Fill(1.);
3503 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
3504 PostData(1, fCommonHistList);
3508 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
3510 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
3513 fMCEvent = MCEvent();
3515 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
3518 // get AOD event from input/ouput
3519 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
3520 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
3521 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
3522 if(fUseAODInputJets) fAODJets = fAOD;
3523 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
3526 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3527 if( handler && handler->InheritsFrom("AliAODHandler") ) {
3528 fAOD = ((AliAODHandler*)handler)->GetAOD();
3530 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
3534 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
3535 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3536 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
3537 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
3538 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
3542 if(fNonStdFile.Length()!=0){
3543 // case we have an AOD extension - fetch the jets from the extended output
3545 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
3546 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
3548 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
3553 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
3557 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
3562 // event selection **************************************************
3563 // *** event class ***
3564 Double_t centPercent = -1;
3567 if(handler->InheritsFrom("AliAODInputHandler")){
3568 // since it is not supported by the helper task define own classes
3569 centPercent = fAOD->GetHeader()->GetCentrality();
3571 if(centPercent>10) cl = 2;
3572 if(centPercent>30) cl = 3;
3573 if(centPercent>50) cl = 4;
3576 cl = AliAnalysisHelperJetTasks::EventClass();
3577 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
3580 if(cl!=fEventClass){
3581 // event not in selected event class, reject event
3582 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
3583 fh1EvtSelection->Fill(2.);
3584 PostData(1, fCommonHistList);
3589 // *** vertex cut ***
3590 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
3591 Int_t nTracksPrim = primVtx->GetNContributors();
3592 fh1VertexNContributors->Fill(nTracksPrim);
3595 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
3597 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
3598 fh1EvtSelection->Fill(3.);
3599 PostData(1, fCommonHistList);
3603 fh1VertexZ->Fill(primVtx->GetZ());
3605 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
3606 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
3607 fh1EvtSelection->Fill(4.);
3608 PostData(1, fCommonHistList);
3612 TString primVtxName(primVtx->GetName());
3614 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
3615 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
3616 fh1EvtSelection->Fill(5.);
3617 PostData(1, fCommonHistList);
3621 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
3622 fh1EvtSelection->Fill(0.);
3623 fh1EvtCent->Fill(centPercent);
3626 //___ get MC information __________________________________________________________________
3628 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
3630 Double_t ptHard = 0.;
3631 Double_t nTrials = 1; // trials for MC trigger weight for real data
3634 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
3638 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
3639 AliGenHijingEventHeader* hijingGenHeader = 0x0;
3641 if(pythiaGenHeader){
3642 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
3643 nTrials = pythiaGenHeader->Trials();
3644 ptHard = pythiaGenHeader->GetPtHard();
3646 fh1PtHard->Fill(ptHard);
3647 fh1PtHardTrials->Fill(ptHard,nTrials);
3650 } else { // no pythia, hijing?
3652 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
3654 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
3655 if(!hijingGenHeader){
3656 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
3658 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
3662 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
3667 //___ fetch jets __________________________________________________________________________
3669 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
3671 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
3672 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3673 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3675 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
3676 Int_t nRecJetsCuts = 0;
3677 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
3678 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3679 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3680 fh1nRecJetsCuts->Fill(nRecJetsCuts);
3682 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3684 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
3686 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
3687 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3689 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3690 fh1nGenJets->Fill(nGenJets);
3693 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3694 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
3695 Int_t nRecEffJets = 0;
3696 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
3697 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3698 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3699 fh1nRecEffJets->Fill(nRecEffJets);
3702 Int_t nEmbeddedJets = 0;
3703 TArrayI iEmbeddedMatchIndex;
3704 TArrayF fEmbeddedPtFraction;
3707 if(fBranchEmbeddedJets.Length()){
3708 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
3709 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
3710 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
3711 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
3712 fh1nEmbeddedJets->Fill(nEmbeddedJets);
3714 Float_t maxDist = 0.3;
3716 iEmbeddedMatchIndex.Set(nEmbeddedJets);
3717 fEmbeddedPtFraction.Set(nEmbeddedJets);
3719 iEmbeddedMatchIndex.Reset(-1);
3720 fEmbeddedPtFraction.Reset(0);
3722 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
3723 fJetsRecCuts, nRecJetsCuts,
3724 iEmbeddedMatchIndex, fEmbeddedPtFraction,
3729 //____ fetch background jets ___________________________________________________
3731 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3732 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3733 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
3735 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
3736 Int_t nRecBckgJets = 0;
3737 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
3738 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
3739 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
3741 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
3742 Int_t nRecBckgJetsCuts = 0;
3743 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
3744 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3745 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
3746 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
3748 if(0){ // protection OB - not yet implemented
3749 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3750 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
3751 Int_t nGenBckgJets = 0;
3752 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
3753 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
3754 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
3755 fh1nGenBckgJets->Fill(nGenBckgJets);
3760 //____ fetch particles __________________________________________________________
3763 if(fUseExtraTracks == 1) nT = GetListOfTracks(fTracksRec, kTrackAODExtra);
3764 else if(fUseExtraTracks == -1) nT = GetListOfTracks(fTracksRec, kTrackAODExtraonly);
3765 else nT = GetListOfTracks(fTracksRec, kTrackAOD);
3768 if(nT>=0) nRecPart = fTracksRec->GetEntries();
3769 if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3770 if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3774 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
3775 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
3776 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
3778 Int_t nRecPartCuts = 0;
3779 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
3780 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3781 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3782 fh1EvtMult->Fill(nRecPartCuts);
3786 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
3788 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
3789 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3790 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3793 //____ analysis, fill histos ___________________________________________________
3798 for(Int_t it=0; it<nRecPart; ++it){
3799 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));
3800 if(part)fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3802 for(Int_t it=0; it<nRecPartCuts; ++it){
3803 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
3804 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
3806 for(Int_t it=0; it<nGenPart; ++it){
3807 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
3808 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3811 // fill DCA to prim vertex
3812 for(Int_t it=0; it<nRecPartCuts; ++it){
3813 AliAODTrack *aodtr = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
3815 if(!aodtr) continue;
3816 if(!primVtx) continue;
3818 Double_t bfield = fAOD->GetMagneticField();
3822 AliAODTrack tmp(*aodtr);
3823 tmp.PropagateToDCA(primVtx, bfield, 5., dz, cov);
3825 Double_t dcaXY = dz[0];
3826 Double_t dcaZ = dz[1];
3828 fh2TrackPtVsDCAXY->Fill(dcaXY,tmp.Pt());
3829 fh2TrackPtVsDCAZ->Fill(dcaZ,tmp.Pt());
3836 for(Int_t ij=0; ij<nRecJets; ++ij){
3837 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
3838 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3843 if(fQAMode || fFFMode || fIJMode || fPhiCorrMode){
3844 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
3846 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
3847 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3849 if(ij==0){ // leading jet
3851 if(fQAMode&2) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3854 Double_t ptFractionEmbedded = 0;
3855 AliAODJet* embeddedJet = 0;
3857 if(fBranchEmbeddedJets.Length()){ // find embedded jet
3859 Int_t indexEmbedded = -1;
3860 for(Int_t i=0; i<nEmbeddedJets; i++){
3861 if(iEmbeddedMatchIndex[i] == ij){
3863 ptFractionEmbedded = fEmbeddedPtFraction[i];
3867 fh1IndexEmbedded->Fill(indexEmbedded);
3868 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
3870 if(indexEmbedded>-1){
3872 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
3873 if(!embeddedJet) continue;
3875 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
3876 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
3878 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
3879 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
3880 fh1DeltaREmbedded->Fill(deltaR);
3884 // get tracks in jet
3885 TList* jettracklist = new TList();
3886 Double_t sumPt = 0.;
3887 Bool_t isBadJet = kFALSE;
3888 Float_t leadTrackPt = 0.;
3889 TLorentzVector* leadTrackV = new TLorentzVector();
3892 if(GetFFRadius()<=0){
3893 GetJetTracksTrackrefs(jettracklist, jet, GetFFMaxTrackPt(), isBadJet);
3895 if(fUseEmbeddedJetAxis){
3896 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
3898 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
3901 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
3903 if(isBadJet) continue;
3905 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
3907 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3909 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3910 if(!trackVP)continue;
3911 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3913 Float_t jetPt = jet->Pt();
3914 if(fUseEmbeddedJetPt){
3915 if(embeddedJet) jetPt = embeddedJet->Pt();
3918 Float_t trackPt = trackV->Pt();
3921 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3923 if(fFFMode) fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);
3924 if(fIJMode) fIJHistosRecCuts->FillIntraJet( trackV, jet->MomentumVector() );
3926 if(it==0){ // leading track
3927 leadTrackPt = trackPt;
3928 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3930 if(fFFMode) fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
3931 if(fIJMode) fIJHistosRecLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
3933 if(fFFMode) fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);
3934 if(fIJMode) fIJHistosRecLeading->FillIntraJet( trackV, leadTrackV );
3939 // ff and ij for background study
3941 if(fBckgType[0]!=-1)
3942 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3943 fFFBckgHisto0RecCuts, fFFBckgHisto0RecLeading,
3944 fIJBckgHisto0RecCuts, fIJBckgHisto0RecLeading,
3945 fQABckgHisto0RecCuts);
3946 if(fBckgType[1]!=-1)
3947 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3948 fFFBckgHisto1RecCuts, fFFBckgHisto1RecLeading,
3949 fIJBckgHisto1RecCuts, fIJBckgHisto1RecLeading,
3950 fQABckgHisto1RecCuts);
3951 if(fBckgType[2]!=-1)
3952 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3953 fFFBckgHisto2RecCuts, fFFBckgHisto2RecLeading,
3954 fIJBckgHisto2RecCuts, fIJBckgHisto2RecLeading,
3955 fQABckgHisto2RecCuts);
3956 if(fBckgType[3]!=-1)
3957 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3958 fFFBckgHisto3RecCuts, fFFBckgHisto3RecLeading,
3959 fIJBckgHisto3RecCuts, fIJBckgHisto3RecLeading,
3960 fQABckgHisto3RecCuts);
3961 if(fBckgType[4]!=-1)
3962 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3963 fFFBckgHisto4RecCuts, fFFBckgHisto4RecLeading,
3964 fIJBckgHisto4RecCuts, fIJBckgHisto4RecLeading,
3965 fQABckgHisto4RecCuts);
3966 } // end if(fBckgMode)
3971 for(Int_t it=0; it<nRecPartCuts; ++it){
3972 AliVParticle *part = (AliVParticle*)(fTracksRecCuts->At(it));
3974 Float_t partEta = part->Eta();
3975 Float_t partPhi = part->Phi();
3976 Float_t partPt = part->Pt();
3978 fPhiCorrHistosJetArea->FillTrackQA( partEta,
3979 TVector2::Phi_mpi_pi( jet->Phi() - partPhi ),
3983 fPhiCorrHistosTransverseArea->FillTrackQA( partEta,
3984 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()/2),
3988 fPhiCorrHistosAwayArea->FillTrackQA( partEta,
3989 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()),
3993 } // end: phi-correlation
3996 delete jettracklist;
3998 } // end: cut embedded ratio
3999 } // end: leading jet
4000 } // end: rec. jets after cuts
4003 for(Int_t ij=0; ij<nGenJets; ++ij){
4005 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
4007 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
4009 if(ij==0){ // leading jet
4011 if(fQAMode&2) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
4013 TList* jettracklist = new TList();
4014 Double_t sumPt = 0.;
4015 Bool_t isBadJet = kFALSE;
4016 Float_t leadTrackPt = 0.;
4017 TLorentzVector* leadTrackV = new TLorentzVector();
4019 if(GetFFRadius()<=0){
4020 GetJetTracksTrackrefs(jettracklist, jet, GetFFMaxTrackPt(), isBadJet);
4022 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
4025 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
4026 if(isBadJet) continue;
4028 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
4030 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
4031 if(!trackVP)continue;
4032 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4034 Float_t jetPt = jet->Pt();
4035 Float_t trackPt = trackV->Pt();
4037 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4039 if(fFFMode) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
4040 if(fIJMode) fIJHistosGen->FillIntraJet( trackV, jet->MomentumVector() );
4042 if(it==0){ // leading track
4043 leadTrackPt = trackPt;
4044 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4046 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE );
4047 if(fIJMode) fIJHistosGenLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
4049 if(fFFMode) fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt );
4050 if(fIJMode) fIJHistosGenLeading->FillIntraJet( trackV, leadTrackV );
4056 delete jettracklist;
4059 } // end: QA, FF and intra-jet
4061 //_______ DiJet part _____________________________________________________
4063 if (nRecJetsCuts > 1)
4065 AliAODJet* jet1 = (AliAODJet*)(fJetsRecCuts->At(0));
4066 AliAODJet* jet2 = (AliAODJet*)(fJetsRecCuts->At(1));
4068 // DiJet deltaphi calculation
4069 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4070 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4071 Double_t deltaPhi = TMath::Abs(phi1-phi2);
4072 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4074 // DiJet CDF cut calculation
4075 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4076 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4077 Double_t sumEt = et1 + et2;
4078 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4079 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4081 // DiJet events selection
4082 Bool_t positionCut = 0;
4083 Bool_t positionEnergyCut = 0;
4087 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4088 // Position-Energy cut :
4089 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4091 if (ratio < fDiJetCDFCut) cdfCut = 1;
4095 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4096 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4097 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4101 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4102 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4103 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4104 Double_t meanEt = (Double_t)((et1+et2)/2.);
4105 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4107 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4111 if(fDJMode&2) fQADiJetHistosRecCuts->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4114 TList* jettracklist1 = new TList();
4115 Double_t sumPt1 = 0.;
4116 Bool_t isBadJet1 = kFALSE;
4117 Float_t leadTrackPt1 = 0;
4120 TList* jettracklist2 = new TList();
4121 Double_t sumPt2 = 0.;
4122 Bool_t isBadJet2 = kFALSE;
4123 Float_t leadTrackPt2 = 0;
4125 if(GetFFRadius()<=0)
4127 GetJetTracksTrackrefs(jettracklist1, jet1, GetFFMaxTrackPt(), isBadJet1);
4128 GetJetTracksTrackrefs(jettracklist2, jet2, GetFFMaxTrackPt(), isBadJet2);
4132 GetJetTracksPointing(fTracksRecCuts, jettracklist1, jet1, GetFFRadius(), sumPt1, GetFFMaxTrackPt(), isBadJet1);
4133 GetJetTracksPointing(fTracksRecCuts, jettracklist2, jet2, GetFFRadius(), sumPt2, GetFFMaxTrackPt(), isBadJet2);
4137 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet1 = kTRUE;
4138 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet2 = kTRUE;
4140 if(!(isBadJet1 || isBadJet2)){ // good jets
4142 Int_t nTracks = jettracklist1->GetSize();
4143 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4145 for(Int_t it=0; it<nTracks; ++it)
4147 if (it < jettracklist1->GetSize())
4149 AliVParticle *vp = (dynamic_cast<AliVParticle*> (jettracklist1->At(it)));
4150 Float_t trackPt1 = (vp?vp->Pt():0);
4151 Float_t jetPt1 = jet1->Pt();
4153 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4155 fFFDiJetHistosRecCuts->FillDiJetFF(1, trackPt1, jetPt1, jetBin, incrementJetPt);
4156 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt1, jetPt1, jetBin, incrementJetPt);
4160 leadTrackPt1 = trackPt1;
4162 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4163 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4166 fFFDiJetHistosRecLeading->FillDiJetFF(1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4167 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4170 if (it < jettracklist2->GetSize())
4172 Float_t trackPt2 = ((AliVParticle*)(jettracklist2->At(it)))->Pt();
4173 Float_t jetPt2 = jet2->Pt();
4175 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4177 fFFDiJetHistosRecCuts->FillDiJetFF(2, trackPt2, jetPt2, jetBin, incrementJetPt);
4178 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt2, jetPt2, jetBin, incrementJetPt);
4182 leadTrackPt2 = trackPt2;
4184 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4185 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4188 fFFDiJetHistosRecLeading->FillDiJetFF(2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4189 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4191 } // End loop on tracks
4194 delete jettracklist1;
4195 delete jettracklist2;
4197 } // End if(jetBin > 0)
4198 else { Printf("Jet bins for di-jet studies not set !");}
4200 } // End if(nRecJets > 1)
4204 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsGen->At(0));
4205 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsGen->At(1));
4208 Double_t deltaPhi = 0;
4209 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4210 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4211 deltaPhi = TMath::Abs(phi1-phi2);
4212 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4214 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4215 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4216 Double_t sumEt = et1 + et2;
4217 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4218 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4220 // DiJet events selection
4221 Bool_t positionCut = 0;
4222 Bool_t positionEnergyCut = 0;
4226 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4227 // Position-Energy cut :
4228 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4230 if (ratio < fDiJetCDFCut) cdfCut = 1;
4234 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4235 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4236 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4240 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4241 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4242 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4243 Double_t meanEt = (Double_t)((et1+et2)/2.);
4244 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4246 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4250 if(fDJMode&2) fQADiJetHistosGen->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4253 TList* jettracklist1 = new TList();
4254 Double_t sumPt1 = 0.;
4255 Bool_t isBadJet1 = kFALSE;
4256 Float_t leadTrackPt1 = 0.;
4258 TList* jettracklist2 = new TList();
4259 Double_t sumPt2 = 0.;
4260 Bool_t isBadJet2 = kFALSE;
4261 Float_t leadTrackPt2 = 0.;
4263 if(GetFFRadius()<=0)
4265 GetJetTracksTrackrefs(jettracklist1, jet1, GetFFMaxTrackPt(), isBadJet1);
4266 GetJetTracksTrackrefs(jettracklist2, jet2, GetFFMaxTrackPt(), isBadJet2);
4270 GetJetTracksPointing(fTracksGen, jettracklist1, jet1, GetFFRadius(), sumPt1, GetFFMaxTrackPt(), isBadJet1);
4271 GetJetTracksPointing(fTracksGen, jettracklist2, jet2, GetFFRadius(), sumPt2, GetFFMaxTrackPt(), isBadJet2);
4275 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet1 = kTRUE;
4276 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet2 = kTRUE;
4278 if(!(isBadJet1 || isBadJet2)){ // good jets
4280 Int_t nTracks = jettracklist1->GetSize();
4281 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4283 for(Int_t it=0; it<nTracks; ++it)
4285 if (it < jettracklist1->GetSize())
4287 Float_t trackPt1 = ((AliVParticle*)jettracklist1->At(it))->Pt();
4288 Float_t jetPt1 = jet1->Pt();
4290 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4292 fFFDiJetHistosGen->FillDiJetFF( 1, trackPt1, jetPt1, jetBin, incrementJetPt);
4293 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt1, jetPt1, jetBin, incrementJetPt);
4297 leadTrackPt1 = trackPt1;
4299 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4300 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4303 fFFDiJetHistosGenLeading->FillDiJetFF( 1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4304 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4307 if (it < jettracklist2->GetSize())
4309 Float_t trackPt2 = ((AliVParticle*)jettracklist2->At(it))->Pt();
4310 Float_t jetPt2 = jet2->Pt();
4312 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4314 fFFDiJetHistosGen->FillDiJetFF( 2, trackPt2, jetPt2, jetBin, incrementJetPt);
4315 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt2, jetPt2, jetBin, incrementJetPt);
4319 leadTrackPt2 = trackPt2;
4321 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4322 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4325 fFFDiJetHistosGenLeading->FillDiJetFF( 2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4326 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4328 } // End loop on tracks
4331 delete jettracklist1;
4332 delete jettracklist2;
4334 } // End if(jetBin > 0)
4335 else { Printf("Jet bins for di-jet studies not set !");}
4337 }// end if jet1 and jet2
4338 } // End if(nGenJets > 1)
4341 // ____ efficiency _______________________________
4343 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
4345 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
4349 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
4352 // ... and another set for secondaries (secondary MC tracks are stored in a different list)
4353 TArrayI indexAODTrSec;
4355 TArrayI indexMCTrSec;
4357 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
4358 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
4360 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
4361 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
4363 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
4364 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
4366 // associate gen and rec tracks, store indices in TArrays
4367 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
4368 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
4371 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
4372 if(fQAMode&1) FillSingleTrackResponse(fhnResponseSinglePt,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
4375 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
4377 // high-pt occupancy effect
4378 FillTwoTrackHistosRecGen(fTracksAODMCCharged, /*fTracksRecQualityCuts,indexAODTr,*/ isGenPrim);
4382 Double_t sumPtGenLeadingJetRecEff = 0;
4383 Double_t sumPtGenLeadingJetSec = 0;
4384 Double_t sumPtRecLeadingJetRecEff = 0;
4386 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4388 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
4389 Bool_t isBadJetGenPrim = kFALSE;
4390 Bool_t isBadJetGenSec = kFALSE;
4391 Bool_t isBadJetRec = kFALSE;
4394 if(ij==0){ // leading jet
4396 // for efficiency: gen tracks from pointing with gen/rec jet
4397 TList* jettracklistGenPrim = new TList();
4398 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMaxTrackPt(), isBadJetGenPrim);
4400 TList* jettracklistGenSec = new TList();
4401 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMaxTrackPt(), isBadJetGenSec);
4403 // bin efficiency in jet pt bins using rec tracks
4404 TList* jettracklistRec = new TList();
4405 GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMaxTrackPt(), isBadJetRec);
4407 Double_t jetEta = jet->Eta();
4408 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
4410 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
4411 if(GetFFMinNTracks()>0 && jettracklistGenSec->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
4412 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
4414 if(isBadJetRec) continue;
4416 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
4418 if(fFFMode) FillJetTrackHistosRecGen(fFFHistosRecEffGen,fFFHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4419 jettracklistGenPrim,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4421 if(fFFMode) FillJetTrackResponse(fhnResponseJetTrackPt,fhnResponseJetZ,fhnResponseJetXi,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4422 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseResponseRecJetPtBins);
4424 // secondaries: use jet pt from primaries
4425 if(fFFMode) FillJetTrackHistosRecGen(0x0,fFFHistosSecRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4426 jettracklistGenSec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,fUseRecEffRecJetPtBins);
4428 delete jettracklistGenPrim;
4429 delete jettracklistGenSec;
4430 delete jettracklistRec;
4435 // bckgr eff: complementary cones
4439 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4441 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecEff->At(ij));
4443 if(ij==0){ // leading jet
4445 TList* perpjettracklistGen = new TList();
4446 Double_t sumPtGen = 0.;
4448 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksGen, perpjettracklistGen, jet, GetFFRadius() , sumPtGen); // for efficiency: gen tracks perp to gen/rec jet
4450 // here could be your histos !!!
4451 // FillJetTrackRecEffHisto(fFFBckgrPerpHistosRecEffGen,fFFBckgrPerpHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,perpjettracklistGen,
4452 // fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4454 delete perpjettracklistGen;
4459 // bgr eff: outside N leading jets
4465 TList* outjettracklistGen = new TList();
4466 Double_t sumPtGen = 0.;
4468 GetTracksOutOfNJets(nCases, fTracksGen, outjettracklistGen, fJetsRecEff, sumPtGen); // for efficiency: gen tracks outide n gen/rec jets
4470 // here could be your histos !!!
4471 // FillJetTrackRecEffHisto(fFFBckgrOutHistosRecEffGen,fFFBckgrOutHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4472 // outjettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4474 delete outjettracklistGen;
4478 //___________________
4480 fTracksRec->Clear();
4481 fTracksRecCuts->Clear();
4482 fTracksGen->Clear();
4483 fTracksAODMCCharged->Clear();
4484 fTracksAODMCChargedSec->Clear();
4485 fTracksRecQualityCuts->Clear();
4488 fJetsRecCuts->Clear();
4490 fJetsRecEff->Clear();
4491 fJetsEmbedded->Clear();
4495 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
4496 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
4497 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
4499 fBckgJetsRec->Clear();
4500 fBckgJetsRecCuts->Clear();
4501 fBckgJetsGen->Clear();
4506 PostData(1, fCommonHistList);
4509 //________________________________________________________________________________________
4510 Double_t AliAnalysisTaskFragmentationFunction::InvMass(const AliAODJet* jet1, const AliAODJet* jet2)
4512 // cald DiJet inv mass
4514 Double_t invMass = 0.;
4515 invMass = TMath::Sqrt(pow(jet1->E()+jet2->E(),2) - pow(jet1->Px()+jet2->Px(),2) -
4516 pow(jet1->Py()+jet2->Py(),2) - pow(jet1->Pz()+jet2->Pz(),2));
4522 //________________________________________________________________________________________
4523 Double_t AliAnalysisTaskFragmentationFunction::GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t EtMean, Int_t kindBins)
4525 // calc DiJet bin according to kindBins parameter
4527 Double_t jetBinOk = 0.;
4528 Double_t jetBin = 0.;
4530 Float_t stepInvMass = (fDiJetJetInvMassMax - fDiJetJetInvMassMin)/fDiJetNBinsJetInvMass;
4531 Float_t stepPt = (fDiJetJetPtMax - fDiJetJetPtMin)/fDiJetNBinsJetPt;
4535 for(Int_t i=0; i<fDiJetNBinsJetInvMass; ++i)
4537 jetBin = fDiJetJetInvMassMin + i*stepInvMass + stepInvMass/2.;
4538 if(((fDiJetJetInvMassMin+i*stepInvMass) <= invMass) &&
4539 (fDiJetJetInvMassMin + (i+1)*stepInvMass) > invMass) {jetBinOk = jetBin; break;}
4540 else jetBinOk = -1.;
4543 else if (kindBins == 3)
4545 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4547 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4548 if(((fDiJetJetPtMin+i*stepPt) <= EtMean) &&
4549 (fDiJetJetPtMin + (i+1)*stepPt) > EtMean) {jetBinOk = jetBin; break;}
4550 else jetBinOk = -1.;
4553 else if (kindBins == 2)
4555 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4557 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4558 if(((fDiJetJetPtMin+i*stepPt) <= leadingJetPt) &&
4559 (fDiJetJetPtMin + (i+1)*stepPt) > leadingJetPt) {jetBinOk = jetBin; break;}
4560 else jetBinOk = -1.;
4563 else {Printf("WARNING: kindBins wrongly set ! Please make sure to call SetKindSlices() and set the kind parameter to 1, 2 or 3.\n");}
4570 //______________________________________________________________
4571 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
4575 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
4578 //_________________________________________________________________________________
4579 Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
4581 // fill list of tracks selected according to type
4583 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
4586 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4590 if(!fAOD) return -1;
4592 if(!fAOD->GetTracks()) return 0;
4594 if(type==kTrackUndef) return 0;
4598 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
4600 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
4601 if(!aodExtraTracks)return iCount;
4602 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
4603 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
4604 if (!track) continue;
4606 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
4609 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
4611 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4613 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4614 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4615 if(tr->Pt() < fTrackPtCut) continue;
4623 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
4625 // all rec. tracks, esd filter mask, eta range
4627 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
4628 AliAODTrack *tr = fAOD->GetTrack(it);
4630 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
4632 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4633 if(type == kTrackAODCuts){
4634 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4635 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4636 if(tr->Pt() < fTrackPtCut) continue;
4643 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
4644 // kine particles, all or rather charged
4645 if(!fMCEvent) return iCount;
4647 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
4648 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
4650 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
4651 if(part->Charge()==0) continue;
4653 if(type == kTrackKineChargedAcceptance &&
4654 ( part->Eta() < fTrackEtaMin
4655 || part->Eta() > fTrackEtaMax
4656 || part->Phi() < fTrackPhiMin
4657 || part->Phi() > fTrackPhiMax
4658 || part->Pt() < fTrackPtCut)) continue;
4665 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
4666 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
4667 if(!fAOD) return -1;
4669 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4670 if(!tca)return iCount;
4672 for(int it=0; it<tca->GetEntriesFast(); ++it){
4673 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
4675 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
4676 if(type == kTrackAODMCChargedSec && part->IsPhysicalPrimary())continue;
4678 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
4679 if(part->Charge()==0) continue;
4680 if(type==kTrackAODMCChargedAcceptance &&
4681 ( part->Eta() > fTrackEtaMax
4682 || part->Eta() < fTrackEtaMin
4683 || part->Phi() > fTrackPhiMax
4684 || part->Phi() < fTrackPhiMin
4685 || part->Pt() < fTrackPtCut)) continue;
4697 // _______________________________________________________________________________
4698 Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
4700 // fill list of jets selected according to type
4703 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4707 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4709 if(fBranchRecJets.Length()==0){
4710 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4711 if(fDebug>1)fAOD->Print();
4715 TClonesArray *aodRecJets = 0;
4716 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
4717 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
4718 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
4721 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
4722 if(fDebug>1)fAOD->Print();
4726 // Reorder jet pt and fill new temporary AliAODJet objects
4729 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4731 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4734 if( tmp->Pt() < fJetPtCut ) continue;
4735 if( type == kJetsRecAcceptance &&
4736 ( tmp->Eta() < fJetEtaMin
4737 || tmp->Eta() > fJetEtaMax
4738 || tmp->Phi() < fJetPhiMin
4739 || tmp->Phi() > fJetPhiMax )) continue;
4741 if(fBckgSubMethod && fBranchRecJets.Contains("B0") &&
4742 fBranchRecJets.Contains("KT")) {
4744 AliAODJet *tmpJet = GetAODBckgSubJet(tmp, fBckgSubMethod);
4746 if(!tmpJet) continue;
4763 else if(type == kJetsKine || type == kJetsKineAcceptance){
4769 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
4773 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
4774 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
4775 AliGenHijingEventHeader* hijingGenHeader = 0x0;
4777 if(!pythiaGenHeader){
4778 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
4780 if(!hijingGenHeader){
4781 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
4784 TLorentzVector mom[4];
4786 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
4788 for(Int_t i=0; i<2; ++i){
4789 if(!mom[i].Pt()) continue;
4790 jet[i] = new AliAODJet(mom[i]);
4792 if( type == kJetsKineAcceptance &&
4793 ( jet[i]->Eta() < fJetEtaMin
4794 || jet[i]->Eta() > fJetEtaMax
4795 || jet[i]->Phi() < fJetPhiMin
4796 || jet[i]->Phi() > fJetPhiMax )) continue;
4806 // fetch the pythia generated jets
4807 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
4810 AliAODJet *jet = new AliAODJet();
4811 pythiaGenHeader->TriggerJet(ip, p);
4812 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
4814 if( type == kJetsKineAcceptance &&
4815 ( jet->Eta() < fJetEtaMin
4816 || jet->Eta() > fJetEtaMax
4817 || jet->Phi() < fJetPhiMin
4818 || jet->Phi() > fJetPhiMax )) continue;
4826 else if(type == kJetsGen || type == kJetsGenAcceptance ){
4828 if(fBranchGenJets.Length()==0){
4829 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
4833 TClonesArray *aodGenJets = 0;
4834 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
4835 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
4836 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
4840 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
4842 if(fDebug>1)fAOD->Print();
4848 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
4850 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
4853 if( tmp->Pt() < fJetPtCut ) continue;
4854 if( type == kJetsGenAcceptance &&
4855 ( tmp->Eta() < fJetEtaMin
4856 || tmp->Eta() > fJetEtaMax
4857 || tmp->Phi() < fJetPhiMin
4858 || tmp->Phi() > fJetPhiMax )) continue;
4866 else if(type == kJetsEmbedded){ // embedded jets
4868 if(fBranchEmbeddedJets.Length()==0){
4869 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
4870 if(fDebug>1)fAOD->Print();
4874 TClonesArray *aodEmbeddedJets = 0;
4875 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
4876 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
4877 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
4879 if(!aodEmbeddedJets){
4880 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
4881 if(fDebug>1)fAOD->Print();
4885 // Reorder jet pt and fill new temporary AliAODJet objects
4886 Int_t nEmbeddedJets = 0;
4888 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
4890 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
4893 if( tmp->Pt() < fJetPtCut ) continue;
4894 if( tmp->Eta() < fJetEtaMin
4895 || tmp->Eta() > fJetEtaMax
4896 || tmp->Phi() < fJetPhiMin
4897 || tmp->Phi() > fJetPhiMax ) continue;
4905 return nEmbeddedJets;
4908 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
4913 // ___________________________________________________________________________________
4914 Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
4916 // fill list of bgr clusters selected according to type
4918 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4920 if(fBranchRecBckgClusters.Length()==0){
4921 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4922 if(fDebug>1)fAOD->Print();
4926 TClonesArray *aodRecJets = 0;
4927 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
4928 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
4929 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
4932 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
4933 if(fDebug>1)fAOD->Print();
4937 // Reorder jet pt and fill new temporary AliAODJet objects
4940 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4942 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4945 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
4946 if( type == kJetsRecAcceptance &&
4947 ( tmp->Eta() < fJetEtaMin
4948 || tmp->Eta() > fJetEtaMax
4949 || tmp->Phi() < fJetPhiMin
4950 || tmp->Phi() > fJetPhiMax )) continue;
4964 // MC clusters still Under construction
4970 // _________________________________________________________________________________________________________
4971 void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
4973 // Set properties of THnSparse
4975 for(Int_t i=0; i<dim; i++){
4976 h->GetAxis(i)->SetTitle(labels[i]);
4977 h->GetAxis(i)->SetTitleColor(1);
4981 // __________________________________________________________________________________________
4982 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
4984 //Set properties of histos (x and y title)
4988 h->GetXaxis()->SetTitleColor(1);
4989 h->GetYaxis()->SetTitleColor(1);
4992 // _________________________________________________________________________________________________________
4993 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
4995 //Set properties of histos (x,y and z title)
5000 h->GetXaxis()->SetTitleColor(1);
5001 h->GetYaxis()->SetTitleColor(1);
5002 h->GetZaxis()->SetTitleColor(1);
5005 // ________________________________________________________________________________________________________________________________________________________
5006 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
5007 const Double_t radius, Double_t& sumPt, const Double_t maxPt, Bool_t& isBadMaxPt)
5009 // fill list of tracks in cone around jet axis
5012 isBadMaxPt = kFALSE;
5015 jet->PxPyPz(jetMom);
5016 TVector3 jet3mom(jetMom);
5018 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5020 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5022 Double_t trackMom[3];
5023 track->PxPyPz(trackMom);
5024 TVector3 track3mom(trackMom);
5026 Double_t dR = jet3mom.DeltaR(track3mom);
5030 outputlist->Add(track);
5032 sumPt += track->Pt();
5034 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
5041 // ___________________________________________________________________________________________
5042 void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t maxPt, Bool_t& isBadMaxPt)
5044 // list of jet tracks from trackrefs
5046 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
5048 for (Int_t itrack=0; itrack<nTracks; itrack++) {
5050 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
5052 AliError("expected ref track not found ");
5056 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
5063 // _ ________________________________________________________________________________________________________________________________
5064 void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
5065 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
5067 // associate generated and reconstructed tracks, fill TArrays of list indices
5069 Int_t nTracksRec = tracksRec->GetSize();
5070 Int_t nTracksGen = tracksAODMCCharged->GetSize();
5071 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5074 if(!nTracksGen) return;
5078 indexAODTr.Set(nTracksGen);
5079 indexMCTr.Set(nTracksRec);
5080 isRefGen.Set(nTracksGen);
5082 indexAODTr.Reset(-1);
5083 indexMCTr.Reset(-1);
5086 // loop over reconstructed tracks, get generated track
5088 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
5090 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5091 if(!rectrack)continue;
5092 Int_t label = TMath::Abs(rectrack->GetLabel());
5094 // find MC track in our list
5095 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
5097 Int_t listIndex = -1;
5098 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
5102 indexAODTr[listIndex] = iRec;
5103 indexMCTr[iRec] = listIndex;
5108 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
5110 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5112 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
5113 if(!gentrack)continue;
5114 Int_t pdg = gentrack->GetPdgCode();
5116 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
5117 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
5118 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
5120 isRefGen[iGen] = kTRUE;
5122 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5125 Float_t genPt = gentrack->Pt();
5126 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5128 Float_t recPt = vt->Pt();
5129 fh2PtRecVsGen->Fill(genPt,recPt);
5136 // _____________________________________________________________________________________________________________________________________________
5137 void AliAnalysisTaskFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
5138 const TArrayI& indexAODTr, const TArrayS& isRefGen){
5140 // fill QA for single track reconstruction efficiency
5142 Int_t nTracksGen = tracksGen->GetSize();
5144 if(!nTracksGen) return;
5146 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5148 if(isRefGen[iGen] != 1) continue; // select primaries
5150 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5151 if(!gentrack) continue;
5152 Double_t ptGen = gentrack->Pt();
5153 Double_t etaGen = gentrack->Eta();
5154 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5156 // apply same acc & pt cuts as for FF
5158 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5159 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5160 if(ptGen < fTrackPtCut) continue;
5162 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
5165 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5166 if(iRec>=0 && trackQARec) trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
5170 // ______________________________________________________________________________________________________________________________________________________
5172 void AliAnalysisTaskFragmentationFunction::FillJetTrackHistosRecGen(TObject* histGen,TObject* histRec,Double_t jetPtGen,Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen,
5173 const TArrayI& indexAODTr,const TArrayS& isRefGen, const Bool_t useRecJetPt)
5175 // fill objects for jet track reconstruction efficiency or secondaries contamination
5176 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
5178 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5180 if(!nTracksJet) return;
5181 if(jetPtGen<1e-03){ // check for 0
5182 if(fDebug>0) Printf("%s:%d gen jet pt 0 - return ",(char*)__FILE__,__LINE__);
5186 Bool_t incrementJetPtGenFF = kTRUE; // needed in case we fill FFHistos
5187 Bool_t incrementJetPtRecFF = kTRUE; // needed in case we fill FFHistos
5189 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5191 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
5192 if(!gentrack)continue;
5193 // find jet track in gen tracks list
5194 Int_t iGen = tracksGen->IndexOf(gentrack);
5197 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5202 if(isRefGen[iGen] != 1) continue; // select primaries
5204 Double_t ptGen = gentrack->Pt();
5205 Double_t etaGen = gentrack->Eta();
5206 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5208 // apply same acc & pt cuts as for FF
5210 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5211 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5212 if(ptGen < fTrackPtCut) continue;
5214 Double_t z = ptGen / jetPtGen;
5216 if(z>0) xi = TMath::Log(1/z);
5218 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5219 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
5221 if(dynamic_cast<AliFragFuncHistos*>(histGen) || dynamic_cast<AliFragFuncHistos*>(histRec)){ // histGen can be NULL for secondaries -> ||
5223 // after checking can afford normal cast
5224 AliFragFuncHistos* ffhistGen = (AliFragFuncHistos*) (histGen);
5225 AliFragFuncHistos* ffhistRec = (AliFragFuncHistos*) (histRec);
5228 if(useRecJetPt) ffhistGen->FillFF( ptGen, jetPtRec, incrementJetPtGenFF );
5229 else ffhistGen->FillFF( ptGen, jetPtGen, incrementJetPtGenFF );
5231 incrementJetPtGenFF = kFALSE;
5235 if(ffhistRec && isRec){
5237 if(useRecJetPt) ffhistRec->FillFF( ptGen, jetPtRec, incrementJetPtRecFF );
5238 else ffhistRec->FillFF( ptGen, jetPtGen, incrementJetPtRecFF );
5240 incrementJetPtRecFF = kFALSE;
5243 else if(dynamic_cast<AliFragFuncIntraJetHistos*>(histGen) && dynamic_cast<AliFragFuncIntraJetHistos*>(histRec)){
5245 // eff for IJ histos ...
5251 // _____________________________________________________________________________________________________________________________________________
5252 void AliAnalysisTaskFragmentationFunction::FillTwoTrackHistosRecGen(TList* tracksGen, /*TList* tracksRec, const TArrayI& indexAODTr, */ const TArrayS& isRefGen){
5254 Int_t nTracksGen = tracksGen->GetSize();
5256 if(!nTracksGen) return;
5258 Int_t highPtIndices[nTracksGen];
5261 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5263 if(isRefGen[iGen] != 1) continue; // select primaries
5265 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5266 if(!gentrack) continue;
5267 Double_t ptGen = gentrack->Pt();
5268 Double_t etaGen = gentrack->Eta();
5269 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5271 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5272 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5275 highPtIndices[nHighPt++] = iGen;
5280 for(Int_t nHPT = 0; nHPT<nHighPt; nHPT++){ // high pt tracks loop
5282 Int_t indexHPT = highPtIndices[nHPT];
5284 AliAODMCParticle* genHPTtrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(indexHPT));
5285 if(!genHPTtrack) continue;
5287 Double_t trackMomHPT[3];
5288 genHPTtrack->PxPyPz(trackMomHPT);
5289 TVector3 track3MomHPT(trackMomHPT);
5292 Double_t distNN = 10;
5296 for(Int_t iGen=0; iGen<nTracksGen; iGen++){ // all gen tracks loop
5298 if(isRefGen[iGen] != 1) continue; // select primaries
5300 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5301 if(!gentrack) continue;
5303 Double_t ptGen = gentrack->Pt();
5304 Double_t etaGen = gentrack->Eta();
5305 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5307 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5308 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5309 if(ptGen < fTrackPtCut) continue;
5312 Double_t gentrackMom[3];
5313 gentrack->PxPyPz(gentrackMom);
5314 TVector3 gentrack3Mom(gentrackMom);
5316 Double_t dR = gentrack3Mom.DeltaR(track3MomHPT);
5318 if(iGen != indexHPT && dR<distNN){
5327 // _____________________________________________________________________________________________________________________________________________
5328 void AliAnalysisTaskFragmentationFunction::FillSingleTrackResponse(THnSparse* hnResponse, TList* tracksGen, TList* tracksRec,
5329 const TArrayI& indexAODTr, const TArrayS& isGenPrim)
5331 // fill response matrix for single tracks
5334 Int_t nTracksGen = tracksGen->GetSize();
5336 if(!nTracksGen) return;
5338 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5340 if(isGenPrim[iGen] != 1) continue; // select primaries
5342 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5343 if(!gentrack)continue;
5344 Double_t ptGen = gentrack->Pt();
5345 Double_t etaGen = gentrack->Eta();
5346 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5348 // apply same acc & pt cuts as for FF
5349 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5350 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5351 if(ptGen < fTrackPtCut) continue;
5353 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5355 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5356 if(!rectrack)continue;
5357 Double_t ptRec = rectrack->Pt();
5359 Double_t entries[2] = {ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5360 hnResponse->Fill(entries);
5362 Double_t invPtGen = 0;
5363 if(ptGen) invPtGen = 1/ptGen;
5365 Double_t invPtRec = 0;
5366 if(ptRec) invPtRec = 1/ptRec;
5368 fh2SingleInvPtRecMnGenVsPtGen->Fill(ptGen,invPtRec - invPtGen);
5374 // ______________________________________________________________________________________________________________________________________________________
5375 void AliAnalysisTaskFragmentationFunction::FillJetTrackResponse(THnSparse* hnResponsePt, THnSparse* hnResponseZ, THnSparse* hnResponseXi,
5376 Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList,
5377 const TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim,const Bool_t useRecJetPt)
5379 // fill response matrix for tracks in jets
5381 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5383 if(!nTracksJet) return;
5385 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5387 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
5388 if(!gentrack)continue;
5389 // find jet track in gen tracks list
5390 Int_t iGen = tracksGen->IndexOf(gentrack);
5393 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5397 if(isGenPrim[iGen] != 1) continue; // select primaries
5399 Double_t ptGen = gentrack->Pt();
5400 Double_t etaGen = gentrack->Eta();
5401 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5403 // apply same acc & pt cuts as for FF
5405 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5406 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5407 if(ptGen < fTrackPtCut) continue;
5409 Double_t zGen = ptGen / jetPtRec;
5411 if(zGen>0) xiGen = TMath::Log(1/zGen);
5413 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5417 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5419 Double_t ptRec = rectrack->Pt();
5421 Double_t zRec = ptRec / jetPtRec;
5423 if(zRec>0) xiRec = TMath::Log(1/zRec);
5425 Double_t jetPt = useRecJetPt ? jetPtRec : jetPtGen;
5427 Double_t entriesPt[3] = {jetPt,ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5428 Double_t entriesZ[3] = {jetPt,zRec,zGen};
5429 Double_t entriesXi[3] = {jetPt,xiRec,xiGen};
5431 hnResponsePt->Fill(entriesPt);
5432 hnResponseZ->Fill(entriesZ);
5433 hnResponseXi->Fill(entriesXi);
5439 // _____________________________________________________________________________________________________________________________________________________________________
5440 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
5442 // List of tracks in cone perpendicular to the jet azimuthal direction
5445 jet->PxPyPz(jetMom);
5447 TVector3 jet3mom(jetMom);
5448 // Rotate phi and keep eta unchanged
5449 Double_t etaTilted = jet3mom.Eta();
5450 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5451 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5453 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5456 if( fUseExtraTracksBgr != 1){
5457 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5458 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5459 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5463 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5465 Double_t trackMom[3];
5466 track->PxPyPz(trackMom);
5467 TVector3 track3mom(trackMom);
5469 Double_t deta = track3mom.Eta() - etaTilted;
5470 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
5471 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
5472 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
5475 outputlist->Add(track);
5476 sumPt += track->Pt();
5482 // ________________________________________________________________________________________________________________________________________________________
5483 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
5485 // List of tracks in cone perpendicular to the jet azimuthal direction
5488 jet->PxPyPz(jetMom);
5490 TVector3 jet3mom(jetMom);
5491 // Rotate phi and keep eta unchanged
5492 Double_t etaTilted = jet3mom.Eta();
5493 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5494 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5496 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
5500 if( fUseExtraTracksBgr != 1){
5501 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5502 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5503 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5507 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5509 Float_t trackEta = track->Eta();
5510 Float_t trackPhi = track->Phi();
5512 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
5514 if((trackPhi<=phiTilted+radius) &&
5515 (trackPhi>=phiTilted-radius) &&
5516 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
5518 outputlist->Add(track);
5519 sumPt += track->Pt();
5522 else if( phiTilted-radius < 0 )
5524 if((( trackPhi < phiTilted+radius ) ||
5525 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
5526 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5528 outputlist->Add(track);
5529 sumPt += track->Pt();
5532 else if( phiTilted+radius > 2*TMath::Pi() )
5534 if((( trackPhi > phiTilted-radius ) ||
5535 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
5536 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5538 outputlist->Add(track);
5539 sumPt += track->Pt();
5544 // Jet area - Temporarily added should be modified with the proper jet area value
5545 Float_t areaJet = CalcJetArea(etaTilted,radius);
5546 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
5548 normFactor = (Float_t) 1. / (areaJet / areaTilted);
5553 // ________________________________________________________________________________________________________________________________________________________
5554 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt)
5556 // List of tracks outside cone around N jet axis
5557 // Particles taken randomly
5560 // Int_t nj = jetlist->GetSize();
5561 Float_t rc = GetFFRadius();
5562 Float_t rcl = GetFFBckgRadius();
5564 // Estimate jet and background areas
5565 Float_t* areaJet = new Float_t[nCases];
5566 memset(areaJet, 0, sizeof(Float_t) * nCases);
5567 Float_t* areaJetLarge = new Float_t[nCases];
5568 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
5569 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5570 Float_t areaOut = areaFull;
5572 //estimate jets and background areas
5575 TList* templist = new TList();
5576 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5578 for(Int_t ij=0; ij<nCases; ++ij)
5580 // Get jet information
5581 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5584 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5585 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5586 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5589 areaJet[ij] = CalcJetArea(etaJet,rc);
5591 // Area jet larger angle
5592 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5595 areaOut = areaOut - areaJetLarge[ij];
5599 // List of all tracks outside jet areas
5600 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5603 if( fUseExtraTracksBgr != 1){
5604 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5605 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5606 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5610 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5612 Double_t trackMom[3];
5613 track->PxPyPz(trackMom);
5614 TVector3 track3mom(trackMom);
5616 Double_t *dR = new Double_t[nCases];
5617 for(Int_t ij=0; ij<nCases; ij++)
5618 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5620 if((nCases==1 && (dR[0]>rcl)) ||
5621 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5622 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5624 templist->Add(track);
5630 // Take tracks randomly
5631 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
5632 TArrayI* ar = new TArrayI(nOut);
5634 for(Int_t init=0; init<nOut; init++)
5637 Int_t *randIndex = new Int_t[nScaled];
5638 for(Int_t init2=0; init2<nScaled; init2++)
5639 randIndex[init2] = -1;
5641 // Select nScaled different random numbers in nOut
5642 for(Int_t i=0; i<nScaled; i++)
5644 Int_t* tmpArr = new Int_t[nOut-i];
5645 Int_t temp = fRandom->Integer(nOut-i);
5646 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
5648 if(ind<temp) tmpArr[ind] = (*ar)[ind];
5649 else tmpArr[ind] = (*ar)[ind+1];
5651 randIndex[i] = (*ar)[temp];
5653 ar->Set(nOut-i-1,tmpArr);
5659 for(Int_t ipart=0; ipart<nScaled; ipart++)
5661 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
5662 outputlist->Add(track);
5663 sumPt += track->Pt();
5670 delete [] areaJetLarge;
5673 delete [] randIndex;
5677 // ________________________________________________________________________________________________________________________________________________________
5678 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt, Double_t &normFactor)
5680 // List of tracks outside cone around N jet axis
5681 // All particles taken + final scaling factor
5684 Float_t rc = GetFFRadius();
5685 Float_t rcl = GetFFBckgRadius();
5687 // Estimate jet and background areas
5688 Float_t* areaJet = new Float_t[nCases];
5689 memset(areaJet, 0, sizeof(Float_t) * nCases);
5690 Float_t* areaJetLarge = new Float_t[nCases];
5691 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
5692 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5693 Float_t areaOut = areaFull;
5695 //estimate jets and background areas
5698 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5700 for(Int_t ij=0; ij<nCases; ++ij)
5702 // Get jet information
5703 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5706 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5707 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5708 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5711 areaJet[ij] = CalcJetArea(etaJet,rc);
5713 // Area jet larger angle
5714 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5716 // Outside jets area
5717 areaOut = areaOut - areaJetLarge[ij];
5721 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5724 if( fUseExtraTracksBgr != 1){
5725 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5726 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5727 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5731 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5733 Double_t trackMom[3];
5734 track->PxPyPz(trackMom);
5735 TVector3 track3mom(trackMom);
5737 Double_t *dR = new Double_t[nCases];
5738 for(Int_t ij=0; ij<nCases; ij++)
5739 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5742 (nCases==1 && (dR[0]>rcl)) ||
5743 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5744 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5746 outputlist->Add(track);
5747 sumPt += track->Pt();
5753 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
5754 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
5759 delete [] areaJetLarge;
5764 // ______________________________________________________________________________________________________________________________________________________
5765 Float_t AliAnalysisTaskFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
5767 // calculate area of jet with eta etaJet and radius rc
5769 Float_t detamax = etaJet + rc;
5770 Float_t detamin = etaJet - rc;
5771 Float_t accmax = 0.0; Float_t accmin = 0.0;
5772 if(detamax > fTrackEtaMax){ // sector outside etamax
5773 Float_t h = fTrackEtaMax - etaJet;
5774 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5776 if(detamin < fTrackEtaMin){ // sector outside etamin
5777 Float_t h = fTrackEtaMax + etaJet;
5778 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5780 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
5786 // ___________________________________________________________________________________________________________________________
5787 void AliAnalysisTaskFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
5789 // fill tracks from bckgCluster branch in list,
5790 // for all clusters outside jet cone
5791 // sum up total area of clusters
5793 Double_t rc = GetFFRadius();
5794 Double_t rcl = GetFFBckgRadius();
5796 Double_t areaTotal = 0;
5797 Double_t sumPtTotal = 0;
5799 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
5801 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
5803 Double_t dR = jet->DeltaR(bgrCluster);
5805 if(dR<rcl) continue;
5807 Double_t clusterPt = bgrCluster->Pt();
5808 Double_t area = bgrCluster->EffectiveAreaCharged();
5810 sumPtTotal += clusterPt;
5812 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
5814 for(Int_t it = 0; it<nTracksJet; it++){
5816 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5817 if( fUseExtraTracksBgr != 1){
5818 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
5819 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5820 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5824 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
5825 if(!track) continue;
5827 Float_t trackPt = track->Pt();
5828 Float_t trackEta = track->Eta();
5829 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5831 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5832 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5833 if(trackPt < fTrackPtCut) continue;
5835 outputlist->Add(track);
5839 Double_t areaJet = TMath::Pi()*rc*rc;
5840 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
5845 // _______________________________________________________________________________________________________________________
5846 void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
5848 // fill tracks from bckgCluster branch,
5849 // using cluster with median density (odd number of clusters)
5850 // or picking randomly one of the two closest to median (even number)
5854 Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
5856 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
5858 Double_t* bgrDensity = new Double_t[nBckgClusters];
5859 Int_t* indices = new Int_t[nBckgClusters];
5861 for(Int_t ij=0; ij<nBckgClusters; ++ij){
5863 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
5864 Double_t clusterPt = bgrCluster->Pt();
5865 Double_t area = bgrCluster->EffectiveAreaCharged();
5867 Double_t density = 0;
5868 if(area>0) density = clusterPt/area;
5870 bgrDensity[ij] = density;
5874 TMath::Sort(nBckgClusters, bgrDensity, indices);
5876 // get median cluster
5878 AliAODJet* medianCluster = 0;
5879 Double_t medianDensity = 0;
5881 if(TMath::Odd(nBckgClusters)){
5883 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
5884 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
5886 Double_t clusterPt = medianCluster->Pt();
5887 Double_t area = medianCluster->EffectiveAreaCharged();
5889 if(area>0) medianDensity = clusterPt/area;
5893 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
5894 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
5896 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
5897 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
5899 Double_t density1 = 0;
5900 Double_t clusterPt1 = medianCluster1->Pt();
5901 Double_t area1 = medianCluster1->EffectiveAreaCharged();
5902 if(area1>0) density1 = clusterPt1/area1;
5904 Double_t density2 = 0;
5905 Double_t clusterPt2 = medianCluster2->Pt();
5906 Double_t area2 = medianCluster2->EffectiveAreaCharged();
5907 if(area2>0) density2 = clusterPt2/area2;
5909 medianDensity = 0.5*(density1+density2);
5911 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
5914 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
5916 for(Int_t it = 0; it<nTracksJet; it++){
5918 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5919 if( fUseExtraTracksBgr != 1){
5920 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
5921 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5922 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5926 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
5927 if(!track) continue;
5929 Float_t trackPt = track->Pt();
5930 Float_t trackEta = track->Eta();
5931 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5933 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5934 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5935 if(trackPt < fTrackPtCut) continue;
5937 outputlist->Add(track);
5940 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
5941 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
5943 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
5947 delete[] bgrDensity;
5951 // ______________________________________________________________________________________________________________________________________________________
5952 void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet, Float_t leadTrackPt, TLorentzVector* leadTrackV,
5953 AliFragFuncHistos* ffbckghistocuts, AliFragFuncHistos* ffbckghistoleading,
5954 AliFragFuncIntraJetHistos* ijbckghistocuts, AliFragFuncIntraJetHistos* ijbckghistoleading,
5955 AliFragFuncQATrackHistos* qabckghistocuts){
5957 // List of tracks outside jets for background study
5958 TList* tracklistout2jets = new TList();
5959 TList* tracklistout3jets = new TList();
5960 TList* tracklistout2jetsStat = new TList();
5961 TList* tracklistout3jetsStat = new TList();
5962 Double_t sumPtOut2Jets = 0.;
5963 Double_t sumPtOut3Jets = 0.;
5964 Double_t sumPtOut2JetsStat = 0.;
5965 Double_t sumPtOut3JetsStat = 0.;
5966 Double_t normFactor2Jets = 0.;
5967 Double_t normFactor3Jets = 0.;
5969 Int_t nRecJetsCuts = fJetsRecCuts->GetEntries();
5971 if(nRecJetsCuts>1) {
5972 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
5973 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
5976 if(nRecJetsCuts>2) {
5977 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
5978 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
5981 if(type==kBckgOutLJ || type==kBckgOutAJ)
5983 TList* tracklistoutleading = new TList();
5984 Double_t sumPtOutLeading = 0.;
5985 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
5986 if(type==kBckgOutLJ) fh1OutLeadingMult->Fill(tracklistoutleading->GetSize());
5988 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
5990 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
5991 if(!trackVP) continue;
5992 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5994 Float_t jetPt = jet->Pt();
5995 Float_t trackPt = trackV->Pt();
5997 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5999 if(type==kBckgOutLJ)
6001 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
6002 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6004 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt);
6005 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6007 // Fill track QA for background
6008 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6011 // All cases included
6012 if(nRecJetsCuts==1 && type==kBckgOutAJ)
6014 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6015 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6017 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6018 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6022 // Increment jet pt with one entry in case #tracks outside jets = 0
6023 if(tracklistoutleading->GetSize()==0) {
6024 Float_t jetPt = jet->Pt();
6025 Bool_t incrementJetPt = kTRUE;
6026 if(type==kBckgOutLJ)
6028 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6029 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6031 // All cases included
6032 if(nRecJetsCuts==1 && type==kBckgOutAJ)
6034 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6035 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6038 delete tracklistoutleading;
6040 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
6042 TList* tracklistoutleadingStat = new TList();
6043 Double_t sumPtOutLeadingStat = 0.;
6044 Double_t normFactorLeading = 0.;
6046 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
6047 if(type==kBckgOutLJStat) fh1OutLeadingStatMult->Fill(tracklistoutleadingStat->GetSize());
6049 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
6051 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
6052 if(!trackVP) continue;
6053 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6055 Float_t jetPt = jet->Pt();
6056 Float_t trackPt = trackV->Pt();
6057 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6060 if(type==kBckgOutLJStat)
6062 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
6063 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading);
6065 if(fFFMode)ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
6066 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading);
6068 // Fill track QA for background
6069 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
6072 // All cases included
6073 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
6075 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
6076 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading );
6078 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
6079 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading );
6081 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6086 // Increment jet pt with one entry in case #tracks outside jets = 0
6087 if(tracklistoutleadingStat->GetSize()==0) {
6088 Float_t jetPt = jet->Pt();
6089 Bool_t incrementJetPt = kTRUE;
6090 if(type==kBckgOutLJStat)
6092 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
6093 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading);
6095 // All cases included
6096 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
6098 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
6099 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading );
6103 delete tracklistoutleadingStat;
6108 Double_t sumPtPerp = 0.;
6109 TList* tracklistperp = new TList();
6110 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp,jet,GetFFRadius(),sumPtPerp);
6111 fh1PerpMult->Fill(tracklistperp->GetSize());
6113 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
6115 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
6116 if(!trackVP)continue;
6117 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6119 Float_t jetPt = jet->Pt();
6120 Float_t trackPt = trackV->Pt();
6122 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6124 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6125 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6127 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6128 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6130 // Fill track QA for background
6131 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6135 // Increment jet pt with one entry in case #tracks outside jets = 0
6136 if(tracklistperp->GetSize()==0) {
6137 Float_t jetPt = jet->Pt();
6138 Bool_t incrementJetPt = kTRUE;
6139 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6140 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6143 delete tracklistperp;
6146 if(type==kBckgASide)
6148 Double_t sumPtASide = 0.;
6149 TList* tracklistaside = new TList();
6150 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,GetFFRadius(),sumPtASide);
6151 fh1ASideMult->Fill(tracklistaside->GetSize());
6153 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
6155 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
6156 if(!trackVP) continue;
6157 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6159 Float_t jetPt = jet->Pt();
6160 Float_t trackPt = trackV->Pt();
6162 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6164 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6165 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6167 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6168 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6170 // Fill track QA for background
6171 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6175 if(tracklistaside->GetSize()==0) {
6176 Float_t jetPt = jet->Pt();
6177 Bool_t incrementJetPt = kTRUE;
6178 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6179 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6182 delete tracklistaside;
6185 if(type==kBckgASideWindow)
6187 Double_t normFactorASide = 0.;
6188 Double_t sumPtASideW = 0.;
6189 TList* tracklistasidew = new TList();
6190 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,GetFFRadius(),sumPtASideW,normFactorASide);
6191 fh1ASideWindowMult->Fill(tracklistasidew->GetSize());
6193 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
6195 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
6196 if(!trackVP) continue;
6197 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6199 Float_t jetPt = jet->Pt();
6200 Float_t trackPt = trackV->Pt();
6201 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6203 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
6204 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorASide);
6206 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorASide );
6207 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorASide );
6209 // Fill track QA for background
6210 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
6214 if(tracklistasidew->GetSize()==0) {
6215 Float_t jetPt = jet->Pt();
6216 Bool_t incrementJetPt = kTRUE;
6217 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
6218 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorASide);
6221 delete tracklistasidew;
6224 if(type==kBckgPerpWindow)
6226 Double_t normFactorPerp = 0.;
6227 Double_t sumPtPerpW = 0.;
6228 TList* tracklistperpw = new TList();
6229 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,GetFFRadius(),sumPtPerpW,normFactorPerp);
6230 fh1PerpWindowMult->Fill(tracklistperpw->GetSize());
6232 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
6234 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
6235 if(!trackVP) continue;
6236 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6238 Float_t jetPt = jet->Pt();
6239 Float_t trackPt = trackV->Pt();
6240 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6242 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
6243 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorPerp);
6245 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorPerp );
6246 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorPerp );
6248 // Fill track QA for background
6249 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
6253 if(tracklistperpw->GetSize()==0) {
6254 Float_t jetPt = jet->Pt();
6255 Bool_t incrementJetPt = kTRUE;
6256 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
6257 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorPerp);
6260 delete tracklistperpw;
6264 if(type==kBckgOut2J || type==kBckgOutAJ)
6266 if(type==kBckgOut2J) fh1Out2JetsMult->Fill(tracklistout2jets->GetSize());
6267 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
6269 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
6270 if(!trackVP) continue;
6271 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6273 Float_t jetPt = jet->Pt();
6274 Float_t trackPt = trackV->Pt();
6276 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6278 if(type==kBckgOut2J)
6280 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6281 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6283 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6284 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6286 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6289 // All cases included
6290 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6292 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6293 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6295 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6296 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6300 // Increment jet pt with one entry in case #tracks outside jets = 0
6301 if(tracklistout2jets->GetSize()==0) {
6302 Float_t jetPt = jet->Pt();
6303 Bool_t incrementJetPt = kTRUE;
6304 if(type==kBckgOut2J)
6306 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6307 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6309 // All cases included
6310 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6312 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6313 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6319 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
6321 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
6323 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
6324 if(!trackVP) continue;
6325 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6327 Float_t jetPt = jet->Pt();
6328 Float_t trackPt = trackV->Pt();
6329 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6331 if(type==kBckgOut2JStat)
6333 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
6334 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6336 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
6337 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6339 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6342 // All cases included
6343 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6345 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
6346 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6348 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
6349 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6351 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6355 // Increment jet pt with one entry in case #tracks outside jets = 0
6356 if(tracklistout2jetsStat->GetSize()==0) {
6357 Float_t jetPt = jet->Pt();
6358 Bool_t incrementJetPt = kTRUE;
6359 if(type==kBckgOut2JStat)
6361 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6362 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets);
6364 // All cases included
6365 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6367 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6368 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets );
6374 if(type==kBckgOut3J || type==kBckgOutAJ)
6376 if(type==kBckgOut3J) fh1Out3JetsMult->Fill(tracklistout3jets->GetSize());
6378 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
6380 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
6381 if(!trackVP) continue;
6382 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6384 Float_t jetPt = jet->Pt();
6385 Float_t trackPt = trackV->Pt();
6387 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6389 if(type==kBckgOut3J)
6391 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6392 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6394 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6395 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6397 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6400 // All cases included
6401 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6403 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6404 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6406 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6407 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6411 // Increment jet pt with one entry in case #tracks outside jets = 0
6412 if(tracklistout3jets->GetSize()==0) {
6413 Float_t jetPt = jet->Pt();
6414 Bool_t incrementJetPt = kTRUE;
6415 if(type==kBckgOut3J)
6417 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6418 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6420 // All cases included
6421 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6423 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6424 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6429 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
6431 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
6433 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
6434 if(!trackVP) continue;
6435 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6437 Float_t jetPt = jet->Pt();
6438 Float_t trackPt = trackV->Pt();
6439 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6441 if(type==kBckgOut3JStat)
6443 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
6444 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6446 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets);
6447 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets);
6449 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
6452 // All cases included
6453 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6455 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
6456 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6458 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets );
6459 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets );
6461 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6466 // Increment jet pt with one entry in case #tracks outside jets = 0
6467 if(tracklistout3jetsStat->GetSize()==0) {
6468 Float_t jetPt = jet->Pt();
6469 Bool_t incrementJetPt = kTRUE;
6470 if(type==kBckgOut3JStat)
6472 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6473 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets);
6475 // All cases included
6476 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6478 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6479 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets );
6485 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
6487 TList* tracklistClustersOutLeading = new TList();
6488 Double_t normFactorClusters = 0;
6489 Float_t jetPt = jet->Pt();
6491 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
6492 fh1OutClustersMult->Fill(tracklistClustersOutLeading->GetSize());
6494 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
6496 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
6497 if(!trackVP) continue;
6498 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6500 Float_t trackPt = trackVP->Pt();
6502 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6504 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6505 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
6510 delete tracklistClustersOutLeading;
6514 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
6516 TList* tracklistClustersMedian = new TList();
6517 Double_t normFactorClusters = 0;
6518 Float_t jetPt = jet->Pt();
6520 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
6521 fh1MedianClustersMult->Fill(tracklistClustersMedian->GetSize());
6523 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
6525 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
6526 if(!trackVP) continue;
6527 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6529 Float_t trackPt = trackVP->Pt();
6531 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6533 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6534 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
6539 delete tracklistClustersMedian;
6542 delete tracklistout2jets;
6543 delete tracklistout3jets;
6544 delete tracklistout2jetsStat;
6545 delete tracklistout3jetsStat;
6549 // ______________________________________________________________________________________________________________________________________________________
6550 AliAODJet* AliAnalysisTaskFragmentationFunction::GetAODBckgSubJet(AliAODJet* jet, Int_t method)
6552 // correct jet pt for (mean bgr energy density) x (jet area)
6554 if(!fBranchRecBackJets.Length()){
6555 if(fDebug>0)Printf("%s:%d background branch name not set",(char*)__FILE__,__LINE__);
6559 static AliAODJetEventBackground* externalBackground = (AliAODJetEventBackground*)(fAOD->FindListObject(fBranchRecBackJets.Data()));
6561 if(!externalBackground){
6562 if(fDebug>0)Printf("%s:%d no external background object found in %s",(char*)__FILE__,__LINE__,fBranchRecBackJets.Data());
6566 Float_t rho = externalBackground->GetBackground(method);
6568 // Calculate background and subtract it from jet pt
6569 Float_t ptBack = rho*jet->EffectiveAreaCharged();
6570 Float_t ptSub = jet->Pt()-ptBack;
6572 // Get px, py, pz from eta, phi, pt
6573 TLorentzVector vecSub;
6574 AliAODJet *tmpJet = 0;
6576 vecSub.SetPtEtaPhiM(ptSub,jet->Eta(),jet->Phi(),0.);
6577 tmpJet = new AliAODJet(vecSub.Px(),vecSub.Py(),vecSub.Pz(),vecSub.P());