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{ // logartihmic z binning
1421 Double_t binLimsZ[fNBinsXi+1];
1424 for(Int_t binXi = fh2Xi->GetYaxis()->GetNbins(); binXi>0; binXi--){
1426 Double_t xiLo = fh2Xi->GetYaxis()->GetBinLowEdge(binXi);
1427 Double_t xiUp = fh2Xi->GetYaxis()->GetBinUpEdge(binXi);
1429 Double_t zUp = TMath::Exp(-1*xiLo);
1430 Double_t zLo = TMath::Exp(-1*xiUp);
1432 if(binZ == 0) binLimsZ[binZ] = zLo;
1433 binLimsZ[binZ+1] = zUp;
1439 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, binLimsZ);
1442 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1443 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1444 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1445 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1448 //_______________________________________________________________________________________________________________
1449 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm)
1453 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1454 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
1456 // Added for proper normalization of FF background estimation
1457 // when zero track are found in the background region
1458 if((int)trackPt==-1) return;
1460 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1461 else fh2TrackPt->Fill(jetPt,trackPt);
1464 if(jetPt>0) z = trackPt / jetPt;
1466 if(z>0) xi = TMath::Log(1/z);
1469 fh2Xi->Fill(jetPt,xi,1/norm);
1470 fh2Z->Fill(jetPt,z,1/norm);
1473 fh2Xi->Fill(jetPt,xi);
1474 fh2Z->Fill(jetPt,z);
1478 //_________________________________________________________________________________
1479 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1481 // add histos to list
1483 list->Add(fh1JetPt);
1485 list->Add(fh2TrackPt);
1490 //_________________________________________________________________________________________________________
1491 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1492 Int_t nPt, Float_t ptMin, Float_t ptMax,
1493 Int_t nEta, Float_t etaMin, Float_t etaMax,
1494 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1509 // default constructor
1512 //____________________________________________________________________________________
1513 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1515 ,fNBinsPt(copy.fNBinsPt)
1516 ,fPtMin(copy.fPtMin)
1517 ,fPtMax(copy.fPtMax)
1518 ,fNBinsEta(copy.fNBinsEta)
1519 ,fEtaMin(copy.fEtaMin)
1520 ,fEtaMax(copy.fEtaMax)
1521 ,fNBinsPhi(copy.fNBinsPhi)
1522 ,fPhiMin(copy.fPhiMin)
1523 ,fPhiMax(copy.fPhiMax)
1524 ,fh2EtaPhi(copy.fh2EtaPhi)
1526 ,fNameQAJ(copy.fNameQAJ)
1531 //________________________________________________________________________________________________________________________________________________________________________
1532 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
1537 TObject::operator=(o);
1538 fNBinsPt = o.fNBinsPt;
1541 fNBinsEta = o.fNBinsEta;
1542 fEtaMin = o.fEtaMin;
1543 fEtaMax = o.fEtaMax;
1544 fNBinsPhi = o.fNBinsPhi;
1545 fPhiMin = o.fPhiMin;
1546 fPhiMax = o.fPhiMax;
1547 fh2EtaPhi = o.fh2EtaPhi;
1549 fNameQAJ = o.fNameQAJ;
1555 //______________________________________________________________
1556 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1560 if(fh2EtaPhi) delete fh2EtaPhi;
1561 if(fh1Pt) delete fh1Pt;
1564 //____________________________________________________________________
1565 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1567 // book jet QA histos
1569 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1570 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1572 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1573 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1576 //____________________________________________________________________________________________________
1577 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1579 // fill jet QA histos
1581 fh2EtaPhi->Fill( eta, phi);
1585 //____________________________________________________________________________________
1586 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1588 // add histos to list
1590 list->Add(fh2EtaPhi);
1594 //___________________________________________________________________________________________________________
1595 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1596 Int_t nPt, Float_t ptMin, Float_t ptMax,
1597 Int_t nEta, Float_t etaMin, Float_t etaMax,
1598 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1610 ,fHighPtThreshold(ptThresh)
1617 // default constructor
1620 //__________________________________________________________________________________________
1621 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1623 ,fNBinsPt(copy.fNBinsPt)
1624 ,fPtMin(copy.fPtMin)
1625 ,fPtMax(copy.fPtMax)
1626 ,fNBinsEta(copy.fNBinsEta)
1627 ,fEtaMin(copy.fEtaMin)
1628 ,fEtaMax(copy.fEtaMax)
1629 ,fNBinsPhi(copy.fNBinsPhi)
1630 ,fPhiMin(copy.fPhiMin)
1631 ,fPhiMax(copy.fPhiMax)
1632 ,fHighPtThreshold(copy.fHighPtThreshold)
1633 ,fh2EtaPhi(copy.fh2EtaPhi)
1635 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1636 ,fh2PhiPt(copy.fh2PhiPt)
1637 ,fNameQAT(copy.fNameQAT)
1642 // _____________________________________________________________________________________________________________________________________________________________________________
1643 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1648 TObject::operator=(o);
1649 fNBinsPt = o.fNBinsPt;
1652 fNBinsEta = o.fNBinsEta;
1653 fEtaMin = o.fEtaMin;
1654 fEtaMax = o.fEtaMax;
1655 fNBinsPhi = o.fNBinsPhi;
1656 fPhiMin = o.fPhiMin;
1657 fPhiMax = o.fPhiMax;
1658 fHighPtThreshold = o.fHighPtThreshold;
1659 fh2EtaPhi = o.fh2EtaPhi;
1661 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1662 fh2PhiPt = o.fh2PhiPt;
1663 fNameQAT = o.fNameQAT;
1669 //___________________________________________________________________
1670 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1674 if(fh2EtaPhi) delete fh2EtaPhi;
1675 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1676 if(fh1Pt) delete fh1Pt;
1677 if(fh2PhiPt) delete fh2PhiPt;
1680 //______________________________________________________________________
1681 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1683 // book track QA histos
1685 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1686 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);
1687 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1688 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1690 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1691 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1692 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1693 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1696 //________________________________________________________________________________________________________
1697 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm)
1699 // fill track QA histos
1700 Float_t weight = 1.;
1701 if(weightPt) weight = pt;
1702 fh2EtaPhi->Fill( eta, phi, weight);
1703 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1704 if(norm) fh1Pt->Fill( pt, 1/norm );
1705 else fh1Pt->Fill( pt );
1706 fh2PhiPt->Fill(phi, pt);
1709 //______________________________________________________________________________________
1710 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1712 // add histos to list
1714 list->Add(fh2EtaPhi);
1715 list->Add(fh2HighPtEtaPhi);
1717 list->Add(fh2PhiPt);
1720 //______________________________________________________________________________________________________
1721 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const char* name,
1722 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1723 Int_t nPt, Float_t ptMin, Float_t ptMax,
1724 Int_t nZ , Float_t zMin , Float_t zMax,
1725 Int_t nCosTheta , Float_t costhetaMin , Float_t costhetaMax,
1726 Int_t nTheta , Float_t thetaMin , Float_t thetaMax,
1727 Int_t nJt , Float_t jtMin , Float_t jtMax)
1729 ,fNBinsJetPt(nJetPt)
1730 ,fJetPtMin(jetPtMin)
1731 ,fJetPtMax(jetPtMax)
1741 ,fNBinsTheta(nTheta)
1742 ,fThetaMin(thetaMin)
1743 ,fThetaMax(thetaMax)
1744 ,fNBinsCosTheta(nCosTheta)
1745 ,fCosThetaMin(costhetaMin)
1746 ,fCosThetaMax(costhetaMax)
1754 // default constructor
1758 //___________________________________________________________________________
1759 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const AliFragFuncIntraJetHistos& copy)
1761 ,fNBinsJetPt(copy.fNBinsJetPt)
1762 ,fJetPtMin(copy.fJetPtMin)
1763 ,fJetPtMax(copy.fJetPtMax)
1764 ,fNBinsPt(copy.fNBinsPt)
1765 ,fPtMin(copy.fPtMin)
1766 ,fPtMax(copy.fPtMax)
1767 ,fNBinsZ(copy.fNBinsZ)
1770 ,fNBinsJt(copy.fNBinsJt)
1771 ,fJtMin(copy.fJtMin)
1772 ,fJtMax(copy.fJtMax)
1773 ,fNBinsTheta(copy.fNBinsTheta)
1774 ,fThetaMin(copy.fThetaMin)
1775 ,fThetaMax(copy.fThetaMax)
1776 ,fNBinsCosTheta(copy.fNBinsCosTheta)
1777 ,fCosThetaMin(copy.fCosThetaMin)
1778 ,fCosThetaMax(copy.fCosThetaMax)
1779 ,fh2CosTheta(copy.fh2CosTheta)
1780 ,fh2PtZ(copy.fh2PtZ)
1781 ,fh3ThetaZ(copy.fh3ThetaZ)
1782 ,fh3JtTheta(copy.fh3JtTheta)
1783 ,fh3JtZ(copy.fh3JtZ)
1784 ,fNameIJ(copy.fNameIJ)
1789 //_______________________________________________________________________________________________________________________________________________________________
1790 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& o)
1795 TObject::operator=(o);
1796 fNBinsJetPt = o.fNBinsJetPt;
1797 fJetPtMin = o.fJetPtMin;
1798 fJetPtMax = o.fJetPtMax;
1799 fNBinsPt = o.fNBinsPt;
1802 fNBinsZ = o.fNBinsZ;
1805 fNBinsJt = o.fNBinsJt;
1808 fNBinsTheta = o.fNBinsTheta;
1809 fThetaMin = o.fThetaMin;
1810 fThetaMax = o.fThetaMax;
1811 fNBinsCosTheta = o.fNBinsCosTheta;
1812 fCosThetaMin = o.fCosThetaMin;
1813 fCosThetaMax = o.fCosThetaMax;
1814 fh2CosTheta = o.fh2CosTheta;
1816 fh3ThetaZ = o.fh3ThetaZ;
1817 fh3JtTheta = o.fh3JtTheta;
1819 fNameIJ = o.fNameIJ;
1825 //_________________________________________________________
1826 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::~AliFragFuncIntraJetHistos()
1831 if(fh2CosTheta) delete fh2CosTheta;
1832 if(fh2PtZ) delete fh2PtZ;
1833 if(fh3ThetaZ) delete fh3ThetaZ;
1834 if(fh3JtTheta) delete fh3JtTheta;
1835 if(fh3JtZ) delete fh3JtZ;
1839 //_________________________________________________________________
1840 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::DefineHistos()
1844 fh2CosTheta = new TH2F(Form("fh2IJcosTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsCosTheta, fCosThetaMin, fCosThetaMax);
1845 fh2PtZ = new TH2F(Form("fh2IJPtZ%s",fNameIJ.Data()),"",fNBinsPt, fPtMin, fPtMax, fNBinsZ, fZMin, fZMax);
1846 fh3ThetaZ = new TH3F(Form("fh3IJThetaZ%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsTheta, fThetaMin, fThetaMax, fNBinsZ, fZMin, fZMax);
1847 fh3JtTheta = new TH3F(Form("fh3IJJtTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax, fNBinsTheta, fThetaMin, fThetaMax);
1848 fh3JtZ = new TH3F(Form("fh3IJJtZ%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax, fNBinsZ, fZMin, fZMax);
1850 AliAnalysisTaskFragmentationFunction::SetProperties(fh2CosTheta,"jet p_{T} [GeV/c]","cos(#Theta)", "entries");
1851 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PtZ,"had p_{T} [GeV/c]","z=p_{T}^{had}/p_{T}^{jet}","entries");
1852 AliAnalysisTaskFragmentationFunction::SetProperties(fh3ThetaZ,"jet p_{T} [GeV/c]","#Theta [rad]","z=p_{T}^{had}/p_{T}^{jet}");
1853 AliAnalysisTaskFragmentationFunction::SetProperties(fh3JtTheta,"jet p_{T} [GeV/c]","j_{T} [GeV/c]","#Theta [rad]");
1854 AliAnalysisTaskFragmentationFunction::SetProperties(fh3JtZ,"jet p_{T} [GeV/c]","j_{T} [GeV/c]","z=p_{T}^{had}/p_{T}^{jet}");
1858 //_______________________________________________________________________________________________________________
1859 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::FillIntraJet(const TLorentzVector* trackV, const TLorentzVector* jetV, Float_t norm)
1861 // fill IntraJet histos
1863 Float_t cosTheta = 0.; Float_t theta = 0.;
1864 Float_t jt = 0.; Float_t z = 0.;
1865 // For Theta distribution
1866 Float_t pxT = trackV->Px();
1867 Float_t pyT = trackV->Py();
1868 Float_t pzT = trackV->Pz();
1869 Float_t ptT = trackV->Pt();
1870 Float_t pT = trackV->P();
1871 Float_t etaT = trackV->Eta();
1872 Float_t phiT = trackV->Phi(); // Check the value returned
1873 Float_t pxJ = jetV->Px();
1874 Float_t pyJ = jetV->Py();
1875 Float_t pzJ = jetV->Pz();
1876 Float_t ptJ = jetV->Pt();
1877 Float_t pJ = jetV->P();
1880 if(ptJ>0) z = (Float_t)(ptT/ptJ);
1883 cosTheta = (pxT*pxJ+pyT*pyJ+pzT*pzJ)/(pT*pJ);
1884 theta = TMath::ACos(cosTheta);
1887 TVector3 trackP; TVector3 jetP;
1891 trackP.SetPtEtaPhi(ptT,etaT,phiT);
1892 jt = TMath::Sin(trackP.Angle(jetP))*trackP.Mag();
1896 fh2CosTheta->Fill(ptJ,cosTheta,1/norm);
1897 fh2PtZ->Fill(ptT,z,1/norm);
1898 fh3ThetaZ->Fill(ptJ,theta,z,1/norm);
1899 fh3JtTheta->Fill(ptJ,jt,theta,1/norm);
1900 fh3JtZ->Fill(ptJ,jt,z,1/norm);
1903 fh2CosTheta->Fill(ptJ,cosTheta);
1904 fh2PtZ->Fill(ptT,z);
1905 fh3ThetaZ->Fill(ptJ,theta,z);
1906 fh3JtTheta->Fill(ptJ,jt,theta);
1907 fh3JtZ->Fill(ptJ,jt,z);
1912 //______________________________________________________________________________________________________
1913 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const char* name, Int_t kindSlices,
1914 Int_t nJetInvMass, Float_t jetInvMassMin, Float_t jetInvMassMax,
1915 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1916 Int_t nPt, Float_t ptMin, Float_t ptMax,
1917 Int_t nXi, Float_t xiMin, Float_t xiMax,
1918 Int_t nZ , Float_t zMin , Float_t zMax)
1920 ,fKindSlices(kindSlices)
1921 ,fNBinsJetInvMass(nJetInvMass)
1922 ,fJetInvMassMin(jetInvMassMin)
1923 ,fJetInvMassMax(jetInvMassMax)
1924 ,fNBinsJetPt(nJetPt)
1925 ,fJetPtMin(jetPtMin)
1926 ,fJetPtMax(jetPtMax)
1953 // default constructor
1957 //______________________________________________________________________________________________________
1958 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const AliFragFuncDiJetHistos& copy)
1960 ,fKindSlices(copy.fKindSlices)
1961 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1962 ,fJetInvMassMin(copy.fJetInvMassMin)
1963 ,fJetInvMassMax(copy.fJetInvMassMax)
1964 ,fNBinsJetPt(copy.fNBinsJetPt)
1965 ,fJetPtMin(copy.fJetPtMin)
1966 ,fJetPtMax(copy.fJetPtMax)
1967 ,fNBinsPt(copy.fNBinsPt)
1968 ,fPtMin(copy.fPtMin)
1969 ,fPtMax(copy.fPtMax)
1970 ,fNBinsXi(copy.fNBinsXi)
1971 ,fXiMin(copy.fXiMin)
1972 ,fXiMax(copy.fXiMax)
1973 ,fNBinsZ(copy.fNBinsZ)
1976 ,fh2TrackPtJet1(copy.fh2TrackPtJet1)
1977 ,fh2TrackPtJet2(copy.fh2TrackPtJet2)
1978 ,fh2TrackPtJet(copy.fh2TrackPtJet)
1979 ,fh1Jet1Pt(copy.fh1Jet1Pt)
1980 ,fh1Jet2Pt(copy.fh1Jet2Pt)
1981 ,fh1JetPt(copy.fh1JetPt)
1982 ,fh2Xi1(copy.fh2Xi1)
1983 ,fh2Xi2(copy.fh2Xi2)
1988 ,fh2Pt1(copy.fh2Pt1)
1989 ,fh2Pt2(copy.fh2Pt2)
1991 ,fNameDJ(copy.fNameDJ)
1993 // default constructor
1997 //_______________________________________________________________________________________________________________________________________________________________
1998 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& o)
2003 TObject::operator=(o);
2004 fKindSlices = o.fKindSlices;
2005 fNBinsJetInvMass = o.fNBinsJetInvMass;
2006 fJetInvMassMin = o.fJetInvMassMin;
2007 fJetInvMassMax = o.fJetInvMassMax;
2008 fNBinsJetPt = o.fNBinsJetPt;
2009 fJetPtMin = o.fJetPtMin;
2010 fJetPtMax = o.fJetPtMax;
2011 fNBinsPt = o.fNBinsPt;
2014 fNBinsXi = o.fNBinsXi;
2017 fNBinsZ = o.fNBinsZ;
2020 fh2TrackPtJet1 = o.fh2TrackPtJet1;
2021 fh2TrackPtJet2 = o.fh2TrackPtJet2;
2022 fh2TrackPtJet = o.fh2TrackPtJet;
2023 fh1Jet1Pt = o.fh1Jet1Pt;
2024 fh1Jet2Pt = o.fh1Jet2Pt;
2025 fh1JetPt = o.fh1JetPt;
2035 fNameDJ = o.fNameDJ;
2041 //_________________________________________________________
2042 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::~AliFragFuncDiJetHistos()
2046 if(fh2TrackPtJet1) delete fh2TrackPtJet1;
2047 if(fh2TrackPtJet2) delete fh2TrackPtJet2;
2048 if(fh2TrackPtJet ) delete fh2TrackPtJet;
2049 if(fh1Jet1Pt) delete fh1Jet1Pt;
2050 if(fh1Jet2Pt) delete fh1Jet2Pt;
2051 if(fh1JetPt) delete fh1JetPt;
2052 if(fh2Xi1) delete fh2Xi1;
2053 if(fh2Xi2) delete fh2Xi2;
2054 if(fh2Xi) delete fh2Xi;
2055 if(fh2Z1) delete fh2Z1;
2056 if(fh2Z2) delete fh2Z2;
2057 if(fh2Z) delete fh2Z;
2058 if(fh2Pt1) delete fh2Pt1;
2059 if(fh2Pt2) delete fh2Pt2;
2060 if(fh2Pt) delete fh2Pt;
2063 //________________________________________________________________________
2064 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::DefineDiJetHistos()
2066 // book DiJet histos
2071 const char *xaxis = "";
2072 if(fKindSlices == 1)
2074 nBins = fNBinsJetInvMass;
2075 min = fJetInvMassMin;
2076 max = fJetInvMassMax;
2077 xaxis = "M_{JJ} [GeV]";
2079 if(fKindSlices == 2 || fKindSlices == 3)
2081 nBins = fNBinsJetPt;
2084 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2085 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2088 fh1Jet1Pt = new TH1F(Form("fh1DJJet1Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2089 fh1Jet2Pt = new TH1F(Form("fh1DJJet2Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2090 fh1JetPt = new TH1F(Form("fh1DJJetPt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2092 fh2TrackPtJet1 = new TH2F(Form("fh2DJTrackPtJet1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2093 fh2TrackPtJet2 = new TH2F(Form("fh2DJTrackPtJet2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2094 fh2TrackPtJet = new TH2F(Form("fh2DJTrackPtJet%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2096 fh2Xi1 = new TH2F(Form("fh2DJXi1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2097 fh2Xi2 = new TH2F(Form("fh2DJXi2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2098 fh2Xi = new TH2F(Form("fh2DJXi%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2100 fh2Z1 = new TH2F(Form("fh2DJZ1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2101 fh2Z2 = new TH2F(Form("fh2DJZ2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2102 fh2Z = new TH2F(Form("fh2DJZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2104 fh2Pt1 = new TH2F(Form("fh2DJPt1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2105 fh2Pt2 = new TH2F(Form("fh2DJPt2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2106 fh2Pt = new TH2F(Form("fh2DJPtZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2108 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet1Pt, "p_{T} [GeV/c]", "entries");
2109 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet2Pt, "p_{T} [GeV/c]", "entries");
2110 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
2112 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet1, xaxis, "p_{T} [GeV/c]", "Entries");
2113 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet2, xaxis, "p_{T} [GeV/c]", "Entries");
2114 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet, xaxis, "p_{T} [GeV/c]", "Entries");
2115 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi1, xaxis, "#xi", "Entries");
2116 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi2, xaxis, "#xi", "Entries");
2117 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi, xaxis, "#xi", "Entries");
2118 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z1, xaxis, "z", "Entries");
2119 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z2, xaxis, "z", "Entries");
2120 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z, xaxis, "z", "Entries");
2121 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt1, xaxis, "p_{T} [GeV/c]", "Entries");
2122 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt2, xaxis, "p_{T} [GeV/c]", "Entries");
2123 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt, xaxis, "p_{T} [GeV/c]", "Entries");
2126 //________________________________________________________________________
2127 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::FillDiJetFF(Int_t jetType, Float_t trackPt, Float_t jetPt, Double_t jetBin, Bool_t incrementJetPt)
2133 if(incrementJetPt) fh1JetPt->Fill(jetPt);
2135 fh2TrackPtJet->Fill(jetBin, trackPt);
2137 Double_t z = trackPt / jetPt;
2139 if(z>0) xi = TMath::Log(1/z);
2141 fh2Xi->Fill(jetBin, xi);
2142 fh2Z->Fill(jetBin, z);
2146 if(incrementJetPt) fh1Jet1Pt->Fill(jetPt);
2148 fh2TrackPtJet1->Fill(jetBin, trackPt);
2150 Double_t z = trackPt / jetPt;
2152 if(z>0) xi = TMath::Log(1/z);
2154 fh2Xi1->Fill(jetBin, xi);
2155 fh2Z1->Fill(jetBin, z);
2159 if(incrementJetPt) fh1Jet2Pt->Fill(jetPt);
2161 fh2TrackPtJet2->Fill(jetBin, trackPt);
2163 Double_t z = trackPt / jetPt;
2165 if(z>0) xi = TMath::Log(1/z);
2167 fh2Xi2->Fill(jetBin, xi);
2168 fh2Z2->Fill(jetBin, z);
2174 //________________________________________________________________________
2175 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AddToOutput(TList* list)const
2177 // add histos to list
2179 list->Add(fh1Jet1Pt);
2180 list->Add(fh1Jet2Pt);
2181 list->Add(fh1JetPt);
2182 list->Add(fh2TrackPtJet1);
2183 list->Add(fh2TrackPtJet2);
2184 list->Add(fh2TrackPtJet);
2193 //______________________________________________________________________________________________________
2194 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const char* name, Int_t kindSlices,
2195 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax,
2196 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
2197 Int_t nDeltaPhi, Float_t deltaPhiMin, Float_t deltaPhiMax,
2198 Int_t nDeltaEta, Float_t deltaEtaMin, Float_t deltaEtaMax,
2199 Int_t nDeltaPt, Float_t deltaPtMin, Float_t deltaPtMax,
2200 Int_t nInBal, Float_t inBalMin, Float_t inBalMax)
2202 ,fKindSlices(kindSlices)
2203 ,fNBinsJetInvMass(nInvMass)
2204 ,fJetInvMassMin(invMassMin)
2205 ,fJetInvMassMax(invMassMax)
2206 ,fNBinsJetPt(nJetPt)
2207 ,fJetPtMin(jetPtMin)
2208 ,fJetPtMax(jetPtMax)
2209 ,fNBinsDeltaPhi(nDeltaPhi)
2210 ,fDeltaPhiMin(deltaPhiMin)
2211 ,fDeltaPhiMax(deltaPhiMax)
2212 ,fNBinsDeltaEta(nDeltaEta)
2213 ,fDeltaEtaMin(deltaEtaMin)
2214 ,fDeltaEtaMax(deltaEtaMax)
2215 ,fNBinsDeltaPt(nDeltaPt)
2216 ,fDeltaPtMin(deltaPtMin)
2217 ,fDeltaPtMax(deltaPtMax)
2218 ,fNBinsInBal(nInBal)
2219 ,fInBalMin(inBalMin)
2220 ,fInBalMax(inBalMax)
2228 // default constructor
2232 //______________________________________________________________________________________________________
2233 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const AliFragFuncQADiJetHistos& copy)
2235 ,fKindSlices(copy.fKindSlices)
2236 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
2237 ,fJetInvMassMin(copy.fJetInvMassMin)
2238 ,fJetInvMassMax(copy.fJetInvMassMax)
2239 ,fNBinsJetPt(copy.fNBinsJetPt)
2240 ,fJetPtMin(copy.fJetPtMin)
2241 ,fJetPtMax(copy.fJetPtMax)
2242 ,fNBinsDeltaPhi(copy.fNBinsDeltaPhi)
2243 ,fDeltaPhiMin(copy.fDeltaPhiMin)
2244 ,fDeltaPhiMax(copy.fDeltaPhiMax)
2245 ,fNBinsDeltaEta(copy.fNBinsDeltaEta)
2246 ,fDeltaEtaMin(copy.fDeltaEtaMin)
2247 ,fDeltaEtaMax(copy.fDeltaEtaMax)
2248 ,fNBinsDeltaPt(copy.fNBinsDeltaPt)
2249 ,fDeltaPtMin(copy.fDeltaPtMin)
2250 ,fDeltaPtMax(copy.fDeltaPtMax)
2251 ,fNBinsInBal(copy.fNBinsInBal)
2252 ,fInBalMin(copy.fInBalMin)
2253 ,fInBalMax(copy.fInBalMax)
2254 ,fh2InvMass(copy.fh2InvMass)
2255 ,fh2DeltaPhi(copy.fh2DeltaPhi)
2256 ,fh2DeltaEta(copy.fh2DeltaEta)
2257 ,fh2DeltaPt(copy.fh2DeltaPt)
2258 ,fh2InBal(copy.fh2InBal)
2259 ,fNameQADJ(copy.fNameQADJ)
2261 // default constructor
2265 //_______________________________________________________________________________________________________________________________________________________________
2266 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& o)
2271 TObject::operator=(o);
2272 fKindSlices = o.fKindSlices;
2273 fNBinsJetInvMass = o.fNBinsJetInvMass;
2274 fJetInvMassMin = o.fJetInvMassMin;
2275 fJetInvMassMax = o.fJetInvMassMax;
2276 fNBinsJetPt = o.fNBinsJetPt;
2277 fJetPtMin = o.fJetPtMin;
2278 fJetPtMax = o.fJetPtMax;
2279 fNBinsDeltaPhi = o.fNBinsDeltaPhi;
2280 fDeltaPhiMin = o.fDeltaPhiMin;
2281 fDeltaPhiMax = o.fDeltaPhiMax;
2282 fNBinsDeltaEta = o.fNBinsDeltaEta;
2283 fDeltaEtaMin = o.fDeltaEtaMin;
2284 fDeltaEtaMax = o.fDeltaEtaMax;
2285 fNBinsDeltaPt = o.fNBinsDeltaPt;
2286 fDeltaPtMin = o.fDeltaPtMin;
2287 fDeltaPtMax = o.fDeltaPtMax;
2288 fNBinsInBal = o.fNBinsInBal;
2289 fInBalMin = o.fInBalMin;
2290 fInBalMax = o.fInBalMax;
2291 fh2InvMass = o.fh2InvMass;
2292 fh2DeltaPhi = o.fh2DeltaPhi;
2293 fh2DeltaEta = o.fh2DeltaEta;
2294 fh2DeltaPt = o.fh2DeltaPt;
2295 fh2InBal = o.fh2InBal;
2296 fNameQADJ = o.fNameQADJ;
2302 //_________________________________________________________
2303 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::~AliFragFuncQADiJetHistos()
2307 if(fh2InvMass) delete fh2InvMass;
2308 if(fh2DeltaPhi) delete fh2DeltaPhi;
2309 if(fh2DeltaEta) delete fh2DeltaEta;
2310 if(fh2DeltaPt) delete fh2DeltaPt;
2311 if(fh2InBal) delete fh2InBal;
2314 //________________________________________________________________________
2315 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::DefineQADiJetHistos()
2322 const char *xaxis = "";
2323 if(fKindSlices == 1)
2325 nBins = fNBinsJetInvMass;
2326 min = fJetInvMassMin;
2327 max = fJetInvMassMax;
2328 xaxis = "M_{JJ} [GeV]";
2330 if(fKindSlices == 2 || fKindSlices == 3)
2332 nBins = fNBinsJetPt;
2335 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2336 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2340 fh2InvMass = new TH2F(Form("fh2DJInvMassPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsJetInvMass, fJetInvMassMin, fJetInvMassMax);
2341 fh2DeltaPhi = new TH2F(Form("fh2DJDeltaPhiPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPhi, fDeltaPhiMin, fDeltaPhiMax);
2342 fh2DeltaEta = new TH2F(Form("fh2DJDeltaEtaPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaEta, fDeltaEtaMin, fDeltaEtaMax);
2343 fh2DeltaPt = new TH2F(Form("fh2DJDeltaPtPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPt, fDeltaPtMin, fDeltaPtMax);
2344 fh2InBal = new TH2F(Form("fh2DJInBalPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsInBal, fInBalMin, fInBalMax);
2346 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InvMass, xaxis, "Invariant Mass", "Entries");
2347 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPhi, xaxis, "#Delta #phi", "Entries");
2348 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaEta, xaxis, "#Delta #eta", "Entries");
2349 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPt, xaxis, "#Delta p_{T}", "Entries");
2350 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InBal, xaxis, "(p_{T}^{1}-p_{T}^{2})/(p_{T}^{1}+p_{T}^{2})", "Entries");
2354 //________________________________________________________________________
2355 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::FillDiJetQA(Double_t invMass, Double_t deltaPhi, Double_t deltaEta,Double_t deltaPt, Double_t inbal, Double_t jetBin)
2359 fh2InvMass->Fill(jetBin, invMass);
2360 fh2DeltaPhi->Fill(jetBin, deltaPhi);
2361 fh2DeltaEta->Fill(jetBin, deltaEta);
2362 fh2DeltaPt->Fill(jetBin, deltaPt);
2363 fh2InBal->Fill(jetBin, inbal);
2366 //________________________________________________________________________
2367 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AddToOutput(TList* list)const
2369 // add histos to list
2371 list->Add(fh2InvMass);
2372 list->Add(fh2DeltaPhi);
2373 list->Add(fh2DeltaEta);
2374 list->Add(fh2DeltaPt);
2375 list->Add(fh2InBal);
2378 //_________________________________________________________________________________
2379 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AddToOutput(TList* list) const
2381 // add histos to list
2383 list->Add(fh2CosTheta);
2385 list->Add(fh3ThetaZ);
2386 list->Add(fh3JtTheta);
2391 //_________________________________________________________________________________
2392 Bool_t AliAnalysisTaskFragmentationFunction::Notify()
2395 // Implemented Notify() to read the cross sections
2396 // and number of trials from pyxsec.root
2397 // (taken from AliAnalysisTaskJetSpectrum2)
2399 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
2400 Float_t xsection = 0;
2401 Float_t ftrials = 1;
2405 TFile *curfile = tree->GetCurrentFile();
2407 Error("Notify","No current file");
2410 if(!fh1Xsec||!fh1Trials){
2411 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
2414 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
2415 fh1Xsec->Fill("<#sigma>",xsection);
2416 // construct a poor man average trials
2417 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
2418 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
2421 // Set seed for backg study
2422 fRandom = new TRandom3();
2423 fRandom->SetSeed(0);
2430 //__________________________________________________________________
2431 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
2433 // create output objects
2435 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
2437 // create list of tracks and jets
2439 fTracksRec = new TList();
2440 fTracksRec->SetOwner(kFALSE);
2442 fTracksRecCuts = new TList();
2443 fTracksRecCuts->SetOwner(kFALSE);
2445 fTracksGen = new TList();
2446 fTracksGen->SetOwner(kFALSE);
2448 fTracksAODMCCharged = new TList();
2449 fTracksAODMCCharged->SetOwner(kFALSE);
2451 fTracksAODMCChargedSec = new TList();
2452 fTracksAODMCChargedSec->SetOwner(kFALSE);
2454 fTracksRecQualityCuts = new TList();
2455 fTracksRecQualityCuts->SetOwner(kFALSE);
2457 fJetsRec = new TList();
2458 fJetsRec->SetOwner(kFALSE);
2459 if(fBranchRecJets.Contains("KT") && fBckgSubMethod) fJetsRec->SetOwner(kTRUE);
2461 fJetsRecCuts = new TList();
2462 fJetsRecCuts->SetOwner(kFALSE);
2463 if(fBranchRecJets.Contains("KT") && fBckgSubMethod) fJetsRecCuts->SetOwner(kTRUE);
2465 fJetsGen = new TList();
2466 fJetsGen->SetOwner(kFALSE);
2468 fJetsRecEff = new TList();
2469 fJetsRecEff->SetOwner(kFALSE);
2471 fJetsEmbedded = new TList();
2472 fJetsEmbedded->SetOwner(kFALSE);
2476 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2477 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2478 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2480 fBckgJetsRec = new TList();
2481 fBckgJetsRec->SetOwner(kFALSE);
2483 fBckgJetsRecCuts = new TList();
2484 fBckgJetsRecCuts->SetOwner(kFALSE);
2486 fBckgJetsGen = new TList();
2487 fBckgJetsGen->SetOwner(kFALSE);
2491 // Create histograms / output container
2495 fCommonHistList = new TList();
2496 fCommonHistList->SetOwner(kTRUE);
2498 Bool_t oldStatus = TH1::AddDirectoryStatus();
2499 TH1::AddDirectory(kFALSE);
2503 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
2504 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
2505 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
2506 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
2507 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
2508 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
2509 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
2511 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
2512 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
2513 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
2514 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
2515 fh2TrackPtVsDCAXY = new TH2F("fh2TrackPtVsDCAXY","",400,-0.02,0.02,100,0.,10.);
2516 fh2TrackPtVsDCAZ = new TH2F("fh2TrackPtVsDCAZ","",100,-0.050,0.050,100,0.,10.);
2518 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
2519 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
2520 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
2521 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
2522 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
2523 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
2525 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
2526 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
2527 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
2528 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
2530 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
2531 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
2536 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2537 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2538 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
2540 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
2541 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
2544 if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp || fBckgType[4]==kBckgPerp )
2545 fh1PerpMult = new TH1F("fh1PerpMult","Background multiplicity - Cone perpendicular to leading jet axis",500,0.,500.);
2546 if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide || fBckgType[4]==kBckgASide)
2547 fh1ASideMult = new TH1F("fh1ASideMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
2548 if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow || fBckgType[4]==kBckgASideWindow)
2549 fh1ASideWindowMult = new TH1F("fh1ASideWindowMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
2550 if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow || fBckgType[4]==kBckgPerpWindow)
2551 fh1PerpWindowMult = new TH1F("fh1PerpWindowMult","Background multiplicity - Cone in the perp direction of leading jet axis",500,0.,500.);
2552 if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ || fBckgType[4]==kBckgOutLJ)
2553 fh1OutLeadingMult = new TH1F("fh1OutLeadingMult","Background multiplicity - Cone outside leading jet",500,0,500.);
2554 if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat || fBckgType[4]==kBckgOutLJStat)
2555 fh1OutLeadingStatMult = new TH1F("fh1OutLeadingStatMult","Background multiplicity - Cone outside leading jet",3000,0,3000.);
2556 if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J || fBckgType[4]==kBckgOut2J)
2557 fh1Out2JetsMult = new TH1F("fh1Out2JetsMult","Background multiplicity - Cone outside 2 jets",500,0.,500.);
2558 if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J || fBckgType[4]==kBckgOut3J)
2559 fh1Out3JetsMult = new TH1F("fh1Out3JetsMult","Background multiplicity - Cone outside 3 jets",500,0.,500.);
2560 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters)
2561 fh1MedianClustersMult = new TH1F("fh1MedianClustersMult","Background multiplicity - median cluster",500,0.,500.);
2562 if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading
2563 || fBckgType[4]==kBckgClustersOutLeading)
2564 fh1OutClustersMult = new TH1F("fh1OutClustersMult","Background multiplicity - clusters outside leading jet",3000,0.,3000.);
2568 if(fBranchEmbeddedJets.Length()){
2569 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
2570 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
2571 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
2572 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
2573 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
2574 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
2578 fh2ptVsDistNN_pt50_rec = new TH2F("fh2ptVsDistNN_pt50_rec","",200,0,0.2,500,0.,100);
2579 fh2ptVsDistNN_pt50_nonRec = new TH2F("fh2ptVsDistNN_pt50_nonRec","",200,0,0.2,500,0.,100);
2580 fh2ptVsDistNN_pt10_rec = new TH2F("fh2ptVsDistNN_pt10_rec","",200,0,0.2,500,0.,100);
2581 fh2ptVsDistNN_pt10_nonRec = new TH2F("fh2ptVsDistNN_pt10_nonRec","",200,0,0.2,500,0.,100);
2585 if(fQAMode&1){ // track QA
2586 fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2587 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2588 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2589 fQATrackHighPtThreshold);
2590 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2591 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2592 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2593 fQATrackHighPtThreshold);
2594 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2595 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2596 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2597 fQATrackHighPtThreshold);
2600 if(fQAMode&2){ // jet QA
2601 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2602 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2603 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2604 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2605 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2606 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2607 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2608 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2609 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2610 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2611 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2612 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2613 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2614 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2615 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2616 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2617 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2623 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2624 fFFNBinsPt, fFFPtMin, fFFPtMax,
2625 fFFNBinsXi, fFFXiMin, fFFXiMax,
2626 fFFNBinsZ , fFFZMin , fFFZMax , fFFLogZBins);
2627 fFFHistosRecLeading = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2628 fFFNBinsPt, fFFPtMin, fFFPtMax,
2629 fFFNBinsXi, fFFXiMin, fFFXiMax,
2630 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2631 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2632 fFFNBinsPt, fFFPtMin, fFFPtMax,
2633 fFFNBinsXi, fFFXiMin, fFFXiMax,
2634 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2635 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2636 fFFNBinsPt, fFFPtMin, fFFPtMax,
2637 fFFNBinsXi, fFFXiMin, fFFXiMax,
2638 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2639 fFFHistosGenLeading = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2640 fFFNBinsPt, fFFPtMin, fFFPtMax,
2641 fFFNBinsXi, fFFXiMin, fFFXiMax,
2642 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2643 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2644 fFFNBinsPt, fFFPtMin, fFFPtMax,
2645 fFFNBinsXi, fFFXiMin, fFFXiMax,
2646 fFFNBinsZ , fFFZMin , fFFZMax, fFFLogZBins);
2651 fIJHistosRecCuts = new AliFragFuncIntraJetHistos("RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2652 fIJNBinsPt, fIJPtMin, fIJPtMax,
2653 fIJNBinsZ, fIJZMin, fIJZMax,
2654 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2655 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2656 fIJNBinsJt , fIJJtMin , fIJJtMax);
2657 fIJHistosRecLeading = new AliFragFuncIntraJetHistos("RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2658 fIJNBinsPt, fIJPtMin, fIJPtMax,
2659 fIJNBinsZ, fIJZMin, fIJZMax,
2660 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2661 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2662 fIJNBinsJt , fIJJtMin , fIJJtMax);
2663 fIJHistosRecLeadingTrack = new AliFragFuncIntraJetHistos("RecLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2664 fIJNBinsPt, fIJPtMin, fIJPtMax,
2665 fIJNBinsZ, fIJZMin, fIJZMax,
2666 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2667 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2668 fIJNBinsJt , fIJJtMin , fIJJtMax);
2669 fIJHistosGen = new AliFragFuncIntraJetHistos("Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2670 fIJNBinsPt, fIJPtMin, fIJPtMax,
2671 fIJNBinsZ, fIJZMin, fIJZMax,
2672 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2673 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2674 fIJNBinsJt , fIJJtMin , fIJJtMax);
2675 fIJHistosGenLeading = new AliFragFuncIntraJetHistos("GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2676 fIJNBinsPt, fIJPtMin, fIJPtMax,
2677 fIJNBinsZ, fIJZMin, fIJZMax,
2678 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2679 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2680 fIJNBinsJt , fIJJtMin , fIJJtMax);
2681 fIJHistosGenLeadingTrack = new AliFragFuncIntraJetHistos("GenLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2682 fIJNBinsPt, fIJPtMin, fIJPtMax,
2683 fIJNBinsZ, fIJZMin, fIJZMax,
2684 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2685 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2686 fIJNBinsJt , fIJJtMin , fIJJtMax);
2691 fFFDiJetHistosRecCuts = new AliFragFuncDiJetHistos("RecCuts", fDiJetKindBins,
2692 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2693 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2694 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2695 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2696 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2697 fFFDiJetHistosRecLeading = new AliFragFuncDiJetHistos("RecLeading", fDiJetKindBins,
2698 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2699 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2700 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2701 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2702 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2703 fFFDiJetHistosRecLeadingTrack = new AliFragFuncDiJetHistos("RecLeadingTrack", fDiJetKindBins,
2704 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2705 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2706 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2707 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2708 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2710 fFFDiJetHistosGen = new AliFragFuncDiJetHistos("Gen", fDiJetKindBins,
2711 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2712 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2713 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2714 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2715 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2716 fFFDiJetHistosGenLeading = new AliFragFuncDiJetHistos("GenLeading", fDiJetKindBins,
2717 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2718 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2719 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2720 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2721 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2722 fFFDiJetHistosGenLeadingTrack = new AliFragFuncDiJetHistos("GenLeadingTrack", fDiJetKindBins,
2723 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2724 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2725 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2726 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2727 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2731 fQADiJetHistosRecCuts = new AliFragFuncQADiJetHistos("RecCuts", fDiJetKindBins,
2732 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2733 fQADiJetNBinsJetPt, fQADiJetJetPtMin, fQADiJetJetPtMax,
2734 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax ,
2735 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax ,
2736 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax,
2737 fQADiJetNBinsInBal, fQADiJetInBalMin, fQADiJetInBalMax);
2738 fQADiJetHistosGen = new AliFragFuncQADiJetHistos("Gen", fDiJetKindBins,
2739 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2740 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2741 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax,
2742 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax,
2743 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax,
2744 fQADiJetNBinsInBal, fQADiJetInBalMin, fQADiJetInBalMax);
2752 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2753 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2754 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2755 fQATrackHighPtThreshold);
2757 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2758 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2759 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2760 fQATrackHighPtThreshold);
2762 fQATrackHistosSecRec = new AliFragFuncQATrackHistos("SecRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2763 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2764 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2765 fQATrackHighPtThreshold);
2768 Int_t nBinsResponseSinglePt[2] = {fFFNBinsPt, fFFNBinsPt};
2769 Double_t binMinResponseSinglePt[2] = {fFFPtMin, fFFPtMin};
2770 Double_t binMaxResponseSinglePt[2] = {fFFPtMax, fFFPtMax};
2771 const char* labelsResponseSinglePt[2] = {"rec p_{T} [GeV/c]", "gen p_{T} [GeV/c]"};
2773 fhnResponseSinglePt = new THnSparseF("fhnResponseSinglePt","track pt gen : track pt rec",2,
2774 nBinsResponseSinglePt,binMinResponseSinglePt,binMaxResponseSinglePt);
2776 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseSinglePt,2,labelsResponseSinglePt);
2779 fh2SingleInvPtRecMnGenVsPtGen = new TH2F("fh2SingleInvPtRecMnGenVsPtGen","",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,200,-1,1);
2782 fFFHistosRecEffGen = new AliFragFuncHistos("RecEffGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2783 fFFNBinsPt, fFFPtMin, fFFPtMax,
2784 fFFNBinsXi, fFFXiMin, fFFXiMax,
2785 fFFNBinsZ , fFFZMin , fFFZMax);
2787 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2788 fFFNBinsPt, fFFPtMin, fFFPtMax,
2789 fFFNBinsXi, fFFXiMin, fFFXiMax,
2790 fFFNBinsZ , fFFZMin , fFFZMax);
2792 fFFHistosSecRec = new AliFragFuncHistos("SecRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2793 fFFNBinsPt, fFFPtMin, fFFPtMax,
2794 fFFNBinsXi, fFFXiMin, fFFXiMax,
2795 fFFNBinsZ , fFFZMin , fFFZMax);
2798 Int_t nBinsResponseJetTrackPt[3] = {fFFNBinsJetPt,fFFNBinsPt,fFFNBinsPt};
2799 Double_t binMinResponseJetTrackPt[3] = {fFFJetPtMin,fFFPtMin, fFFPtMin};
2800 Double_t binMaxResponseJetTrackPt[3] = {fFFJetPtMax,fFFPtMax,fFFPtMax};
2801 const char* labelsResponseJetTrackPt[3] = { "jet p_{T} [GeV/c]","rec p_{T} [GeV/c]", "gen p_{T} [GeV/c]"};
2803 fhnResponseJetTrackPt = new THnSparseF("fhnResponseJetTrackPt","jet pt:track pt rec:track pt gen",3,
2804 nBinsResponseJetTrackPt,binMinResponseJetTrackPt,binMaxResponseJetTrackPt);
2806 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetTrackPt,3,labelsResponseJetTrackPt);
2808 Int_t nBinsResponseJetZ[3] = {fFFNBinsJetPt, fFFNBinsZ,fFFNBinsZ};
2809 Double_t binMinResponseJetZ[3] = {fFFJetPtMin, fFFZMin, fFFZMin};
2810 Double_t binMaxResponseJetZ[3] = {fFFJetPtMax, fFFZMax, fFFZMax};
2811 const char* labelsResponseJetZ[3] = { "jet p_{T} [GeV/c]","rec z","gen z"};
2813 fhnResponseJetZ = new THnSparseF("fhnResponseJetZ","jet pt:track pt rec:track pt gen",3,
2814 nBinsResponseJetZ,binMinResponseJetZ,binMaxResponseJetZ);
2816 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetZ,3,labelsResponseJetZ);
2818 Int_t nBinsResponseJetXi[3] = {fFFNBinsJetPt, fFFNBinsXi,fFFNBinsXi};
2819 Double_t binMinResponseJetXi[3] = {fFFJetPtMin, fFFXiMin, fFFXiMin};
2820 Double_t binMaxResponseJetXi[3] = {fFFJetPtMax, fFFXiMax, fFFXiMax};
2821 const char* labelsResponseJetXi[3] = { "jet p_{T} [GeV/c]","rec xi","gen xi"};
2823 fhnResponseJetXi = new THnSparseF("fhnResponseJetXi","jet pt:track xi rec:track xi gen",3,
2824 nBinsResponseJetXi,binMinResponseJetXi,binMaxResponseJetXi);
2826 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetXi,3,labelsResponseJetXi);
2829 } // end: efficiency
2835 for(Int_t i=0; i<5; i++){
2836 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
2837 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
2838 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
2839 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
2840 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
2841 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
2842 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
2843 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
2844 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
2845 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
2846 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
2847 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
2848 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
2849 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
2850 else printf("Please chose background method number %d!",i);
2854 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2855 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2856 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2857 fQATrackHighPtThreshold);
2858 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2859 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2860 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2861 fQATrackHighPtThreshold);
2862 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2863 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2864 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2865 fQATrackHighPtThreshold);
2866 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2867 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2868 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2869 fQATrackHighPtThreshold);
2870 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2871 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2872 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2873 fQATrackHighPtThreshold);
2874 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2875 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2876 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2877 fQATrackHighPtThreshold);
2878 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2879 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2880 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2881 fQATrackHighPtThreshold);
2882 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2883 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2884 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2885 fQATrackHighPtThreshold);
2886 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2887 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2888 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2889 fQATrackHighPtThreshold);
2890 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2891 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2892 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2893 fQATrackHighPtThreshold);
2896 } // end: background QA
2899 // outside leading jet or 2 jets or more
2900 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2901 fFFNBinsPt, fFFPtMin, fFFPtMax,
2902 fFFNBinsXi, fFFXiMin, fFFXiMax,
2903 fFFNBinsZ , fFFZMin , fFFZMax);
2904 fFFBckgHisto0RecLeading = new AliFragFuncHistos("Bckg"+title[0]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2905 fFFNBinsPt, fFFPtMin, fFFPtMax,
2906 fFFNBinsXi, fFFXiMin, fFFXiMax,
2907 fFFNBinsZ , fFFZMin , fFFZMax);
2908 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2909 fFFNBinsPt, fFFPtMin, fFFPtMax,
2910 fFFNBinsXi, fFFXiMin, fFFXiMax,
2911 fFFNBinsZ , fFFZMin , fFFZMax);
2912 fFFBckgHisto0GenLeading = new AliFragFuncHistos("Bckg"+title[0]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2913 fFFNBinsPt, fFFPtMin, fFFPtMax,
2914 fFFNBinsXi, fFFXiMin, fFFXiMax,
2915 fFFNBinsZ , fFFZMin , fFFZMax);
2917 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2918 fFFNBinsPt, fFFPtMin, fFFPtMax,
2919 fFFNBinsXi, fFFXiMin, fFFXiMax,
2920 fFFNBinsZ , fFFZMin , fFFZMax);
2921 fFFBckgHisto1RecLeading = new AliFragFuncHistos("Bckg"+title[1]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2922 fFFNBinsPt, fFFPtMin, fFFPtMax,
2923 fFFNBinsXi, fFFXiMin, fFFXiMax,
2924 fFFNBinsZ , fFFZMin , fFFZMax);
2925 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2926 fFFNBinsPt, fFFPtMin, fFFPtMax,
2927 fFFNBinsXi, fFFXiMin, fFFXiMax,
2928 fFFNBinsZ , fFFZMin , fFFZMax);
2929 fFFBckgHisto1GenLeading = new AliFragFuncHistos("Bckg"+title[1]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2930 fFFNBinsPt, fFFPtMin, fFFPtMax,
2931 fFFNBinsXi, fFFXiMin, fFFXiMax,
2932 fFFNBinsZ , fFFZMin , fFFZMax);
2934 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2935 fFFNBinsPt, fFFPtMin, fFFPtMax,
2936 fFFNBinsXi, fFFXiMin, fFFXiMax,
2937 fFFNBinsZ , fFFZMin , fFFZMax);
2938 fFFBckgHisto2RecLeading = new AliFragFuncHistos("Bckg"+title[2]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2939 fFFNBinsPt, fFFPtMin, fFFPtMax,
2940 fFFNBinsXi, fFFXiMin, fFFXiMax,
2941 fFFNBinsZ , fFFZMin , fFFZMax);
2942 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2943 fFFNBinsPt, fFFPtMin, fFFPtMax,
2944 fFFNBinsXi, fFFXiMin, fFFXiMax,
2945 fFFNBinsZ , fFFZMin , fFFZMax);
2946 fFFBckgHisto2GenLeading = new AliFragFuncHistos("Bckg"+title[2]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2947 fFFNBinsPt, fFFPtMin, fFFPtMax,
2948 fFFNBinsXi, fFFXiMin, fFFXiMax,
2949 fFFNBinsZ , fFFZMin , fFFZMax);
2950 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2951 fFFNBinsPt, fFFPtMin, fFFPtMax,
2952 fFFNBinsXi, fFFXiMin, fFFXiMax,
2953 fFFNBinsZ , fFFZMin , fFFZMax);
2954 fFFBckgHisto3RecLeading = new AliFragFuncHistos("Bckg"+title[3]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2955 fFFNBinsPt, fFFPtMin, fFFPtMax,
2956 fFFNBinsXi, fFFXiMin, fFFXiMax,
2957 fFFNBinsZ , fFFZMin , fFFZMax);
2958 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2959 fFFNBinsPt, fFFPtMin, fFFPtMax,
2960 fFFNBinsXi, fFFXiMin, fFFXiMax,
2961 fFFNBinsZ , fFFZMin , fFFZMax);
2962 fFFBckgHisto3GenLeading = new AliFragFuncHistos("Bckg"+title[3]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2963 fFFNBinsPt, fFFPtMin, fFFPtMax,
2964 fFFNBinsXi, fFFXiMin, fFFXiMax,
2965 fFFNBinsZ , fFFZMin , fFFZMax);
2966 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2967 fFFNBinsPt, fFFPtMin, fFFPtMax,
2968 fFFNBinsXi, fFFXiMin, fFFXiMax,
2969 fFFNBinsZ , fFFZMin , fFFZMax);
2970 fFFBckgHisto4RecLeading = new AliFragFuncHistos("Bckg"+title[4]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2971 fFFNBinsPt, fFFPtMin, fFFPtMax,
2972 fFFNBinsXi, fFFXiMin, fFFXiMax,
2973 fFFNBinsZ , fFFZMin , fFFZMax);
2974 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2975 fFFNBinsPt, fFFPtMin, fFFPtMax,
2976 fFFNBinsXi, fFFXiMin, fFFXiMax,
2977 fFFNBinsZ , fFFZMin , fFFZMax);
2978 fFFBckgHisto4GenLeading = new AliFragFuncHistos("Bckg"+title[4]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2979 fFFNBinsPt, fFFPtMin, fFFPtMax,
2980 fFFNBinsXi, fFFXiMin, fFFXiMax,
2981 fFFNBinsZ , fFFZMin , fFFZMax);
2983 } // end: background FF
2986 fIJBckgHisto0RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2987 fIJNBinsPt, fIJPtMin, fIJPtMax,
2988 fIJNBinsZ, fIJZMin, fIJZMax,
2989 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2990 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2991 fIJNBinsJt , fIJJtMin , fIJJtMax);
2992 fIJBckgHisto0RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2993 fIJNBinsPt, fIJPtMin, fIJPtMax,
2994 fIJNBinsZ, fIJZMin, fIJZMax,
2995 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2996 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2997 fIJNBinsJt , fIJJtMin , fIJJtMax);
2998 fIJBckgHisto0Gen = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2999 fIJNBinsPt, fIJPtMin, fIJPtMax,
3000 fIJNBinsZ, fIJZMin, fIJZMax,
3001 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3002 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3003 fIJNBinsJt , fIJJtMin , fIJJtMax);
3004 fIJBckgHisto0GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3005 fIJNBinsPt, fIJPtMin, fIJPtMax,
3006 fIJNBinsZ, fIJZMin, fIJZMax,
3007 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3008 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3009 fIJNBinsJt , fIJJtMin , fIJJtMax);
3012 fIJBckgHisto1RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3013 fIJNBinsPt, fIJPtMin, fIJPtMax,
3014 fIJNBinsZ, fIJZMin, fIJZMax,
3015 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3016 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3017 fIJNBinsJt , fIJJtMin , fIJJtMax);
3018 fIJBckgHisto1RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3019 fIJNBinsPt, fIJPtMin, fIJPtMax,
3020 fIJNBinsZ, fIJZMin, fIJZMax,
3021 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3022 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3023 fIJNBinsJt , fIJJtMin , fIJJtMax);
3024 fIJBckgHisto1Gen = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3025 fIJNBinsPt, fIJPtMin, fIJPtMax,
3026 fIJNBinsZ, fIJZMin, fIJZMax,
3027 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3028 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3029 fIJNBinsJt , fIJJtMin , fIJJtMax);
3030 fIJBckgHisto1GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3031 fIJNBinsPt, fIJPtMin, fIJPtMax,
3032 fIJNBinsZ, fIJZMin, fIJZMax,
3033 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3034 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3035 fIJNBinsJt , fIJJtMin , fIJJtMax);
3037 fIJBckgHisto2RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3038 fIJNBinsPt, fIJPtMin, fIJPtMax,
3039 fIJNBinsZ, fIJZMin, fIJZMax,
3040 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3041 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3042 fIJNBinsJt , fIJJtMin , fIJJtMax);
3043 fIJBckgHisto2RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3044 fIJNBinsPt, fIJPtMin, fIJPtMax,
3045 fIJNBinsZ, fIJZMin, fIJZMax,
3046 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3047 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3048 fIJNBinsJt , fIJJtMin , fIJJtMax);
3049 fIJBckgHisto2Gen = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3050 fIJNBinsPt, fIJPtMin, fIJPtMax,
3051 fIJNBinsZ, fIJZMin, fIJZMax,
3052 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3053 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3054 fIJNBinsJt , fIJJtMin , fIJJtMax);
3055 fIJBckgHisto2GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3056 fIJNBinsPt, fIJPtMin, fIJPtMax,
3057 fIJNBinsZ, fIJZMin, fIJZMax,
3058 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3059 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3060 fIJNBinsJt , fIJJtMin , fIJJtMax);
3061 } // end: background intra-jet
3062 } // end: background
3065 fPhiCorrHistosJetArea = new AliFragFuncQATrackHistos("JetArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3066 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3067 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3068 fQATrackHighPtThreshold);
3070 fPhiCorrHistosTransverseArea = new AliFragFuncQATrackHistos("TransverseArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3071 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3072 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3073 fQATrackHighPtThreshold);
3075 fPhiCorrHistosAwayArea = new AliFragFuncQATrackHistos("AwayArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3076 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3077 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3078 fQATrackHighPtThreshold);
3079 } // end: phi correlation
3082 // ____________ define histograms ____________________
3085 if(fQAMode&1){ // track QA
3086 fQATrackHistosRec->DefineHistos();
3087 fQATrackHistosRecCuts->DefineHistos();
3088 fQATrackHistosGen->DefineHistos();
3091 if(fQAMode&2){ // jet QA
3092 fQAJetHistosRec->DefineHistos();
3093 fQAJetHistosRecCuts->DefineHistos();
3094 fQAJetHistosRecCutsLeading->DefineHistos();
3095 fQAJetHistosGen->DefineHistos();
3096 fQAJetHistosGenLeading->DefineHistos();
3097 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
3102 fFFHistosRecCuts->DefineHistos();
3103 fFFHistosRecLeading->DefineHistos();
3104 fFFHistosRecLeadingTrack->DefineHistos();
3105 fFFHistosGen->DefineHistos();
3106 fFFHistosGenLeading->DefineHistos();
3107 fFFHistosGenLeadingTrack->DefineHistos();
3111 fIJHistosRecCuts->DefineHistos();
3112 fIJHistosRecLeading->DefineHistos();
3113 fIJHistosRecLeadingTrack->DefineHistos();
3114 fIJHistosGen->DefineHistos();
3115 fIJHistosGenLeading->DefineHistos();
3116 fIJHistosGenLeadingTrack->DefineHistos();
3121 fFFDiJetHistosRecCuts->DefineDiJetHistos();
3122 fFFDiJetHistosRecLeading->DefineDiJetHistos();
3123 fFFDiJetHistosRecLeadingTrack->DefineDiJetHistos();
3124 fFFDiJetHistosGen->DefineDiJetHistos();
3125 fFFDiJetHistosGenLeading->DefineDiJetHistos();
3126 fFFDiJetHistosGenLeadingTrack->DefineDiJetHistos();
3130 fQADiJetHistosRecCuts->DefineQADiJetHistos();
3131 fQADiJetHistosGen->DefineQADiJetHistos();
3137 fQATrackHistosRecEffGen->DefineHistos();
3138 fQATrackHistosRecEffRec->DefineHistos();
3139 fQATrackHistosSecRec->DefineHistos();
3142 fFFHistosRecEffGen->DefineHistos();
3143 fFFHistosRecEffRec->DefineHistos();
3144 fFFHistosSecRec->DefineHistos();
3146 } // end: efficiency
3151 fFFBckgHisto0RecCuts->DefineHistos();
3152 fFFBckgHisto0RecLeading->DefineHistos();
3153 fFFBckgHisto0Gen->DefineHistos();
3154 fFFBckgHisto0GenLeading->DefineHistos();
3155 fFFBckgHisto1RecCuts->DefineHistos();
3156 fFFBckgHisto1RecLeading->DefineHistos();
3157 fFFBckgHisto1Gen->DefineHistos();
3158 fFFBckgHisto1GenLeading->DefineHistos();
3159 fFFBckgHisto2RecCuts->DefineHistos();
3160 fFFBckgHisto2RecLeading->DefineHistos();
3161 fFFBckgHisto2Gen->DefineHistos();
3162 fFFBckgHisto2GenLeading->DefineHistos();
3163 fFFBckgHisto3RecCuts->DefineHistos();
3164 fFFBckgHisto3RecLeading->DefineHistos();
3165 fFFBckgHisto3Gen->DefineHistos();
3166 fFFBckgHisto3GenLeading->DefineHistos();
3167 fFFBckgHisto4RecCuts->DefineHistos();
3168 fFFBckgHisto4RecLeading->DefineHistos();
3169 fFFBckgHisto4Gen->DefineHistos();
3170 fFFBckgHisto4GenLeading->DefineHistos();
3174 fIJBckgHisto0RecCuts->DefineHistos();
3175 fIJBckgHisto0RecLeading->DefineHistos();
3176 fIJBckgHisto0Gen->DefineHistos();
3177 fIJBckgHisto0GenLeading->DefineHistos();
3178 fIJBckgHisto1RecCuts->DefineHistos();
3179 fIJBckgHisto1RecLeading->DefineHistos();
3180 fIJBckgHisto1Gen->DefineHistos();
3181 fIJBckgHisto1GenLeading->DefineHistos();
3182 fIJBckgHisto2RecCuts->DefineHistos();
3183 fIJBckgHisto2RecLeading->DefineHistos();
3184 fIJBckgHisto2Gen->DefineHistos();
3185 fIJBckgHisto2GenLeading->DefineHistos();
3189 fQABckgHisto0RecCuts->DefineHistos();
3190 fQABckgHisto0Gen->DefineHistos();
3191 fQABckgHisto1RecCuts->DefineHistos();
3192 fQABckgHisto1Gen->DefineHistos();
3193 fQABckgHisto2RecCuts->DefineHistos();
3194 fQABckgHisto2Gen->DefineHistos();
3195 fQABckgHisto3RecCuts->DefineHistos();
3196 fQABckgHisto3Gen->DefineHistos();
3197 fQABckgHisto4RecCuts->DefineHistos();
3198 fQABckgHisto4Gen->DefineHistos();
3200 } // end: background
3203 fPhiCorrHistosJetArea->DefineHistos();
3204 fPhiCorrHistosTransverseArea->DefineHistos();
3205 fPhiCorrHistosAwayArea->DefineHistos();
3208 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
3209 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
3210 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
3212 fCommonHistList->Add(fh1EvtSelection);
3213 fCommonHistList->Add(fh1EvtMult);
3214 fCommonHistList->Add(fh1EvtCent);
3215 fCommonHistList->Add(fh2TrackPtVsDCAXY);
3216 fCommonHistList->Add(fh2TrackPtVsDCAZ);
3217 fCommonHistList->Add(fh1VertexNContributors);
3218 fCommonHistList->Add(fh1VertexZ);
3219 fCommonHistList->Add(fh1nRecJetsCuts);
3220 if(genJets && genTracks){
3221 fCommonHistList->Add(fh1Xsec);
3222 fCommonHistList->Add(fh1Trials);
3223 fCommonHistList->Add(fh1PtHard);
3224 fCommonHistList->Add(fh1PtHardTrials);
3225 if(genJets) fCommonHistList->Add(fh1nGenJets);
3230 fFFHistosRecCuts->AddToOutput(fCommonHistList);
3231 fFFHistosRecLeading->AddToOutput(fCommonHistList);
3232 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3233 if(genJets && genTracks){
3234 fCommonHistList->Add(fh1Xsec);
3235 fCommonHistList->Add(fh1Trials);
3236 fCommonHistList->Add(fh1PtHard);
3237 fCommonHistList->Add(fh1PtHardTrials);
3238 if(genJets) fCommonHistList->Add(fh1nGenJets);
3240 fFFHistosGen->AddToOutput(fCommonHistList);
3241 fFFHistosGenLeading->AddToOutput(fCommonHistList);
3242 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3249 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
3250 fFFBckgHisto0RecLeading->AddToOutput(fCommonHistList);
3251 fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
3252 fFFBckgHisto1RecLeading->AddToOutput(fCommonHistList);
3253 fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
3254 fFFBckgHisto2RecLeading->AddToOutput(fCommonHistList);
3255 fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
3256 fFFBckgHisto3RecLeading->AddToOutput(fCommonHistList);
3257 fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
3258 fFFBckgHisto4RecLeading->AddToOutput(fCommonHistList);
3260 if(genJets && genTracks){
3261 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
3262 fFFBckgHisto0GenLeading->AddToOutput(fCommonHistList);
3263 fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
3264 fFFBckgHisto1GenLeading->AddToOutput(fCommonHistList);
3265 fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
3266 fFFBckgHisto2GenLeading->AddToOutput(fCommonHistList);
3267 fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
3268 fFFBckgHisto3GenLeading->AddToOutput(fCommonHistList);
3269 fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
3270 fFFBckgHisto4GenLeading->AddToOutput(fCommonHistList);
3275 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
3276 fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
3277 fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
3278 fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
3279 fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
3280 if(genJets && genTracks){
3281 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
3282 fQABckgHisto1Gen->AddToOutput(fCommonHistList);
3283 fQABckgHisto2Gen->AddToOutput(fCommonHistList);
3284 fQABckgHisto3Gen->AddToOutput(fCommonHistList);
3285 fQABckgHisto4Gen->AddToOutput(fCommonHistList);
3289 if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ || fBckgType[4]==kBckgOutLJ)
3290 fCommonHistList->Add(fh1OutLeadingMult);
3291 if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat || fBckgType[4]==kBckgOutLJStat)
3292 fCommonHistList->Add(fh1OutLeadingStatMult);
3293 if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp || fBckgType[4]==kBckgPerp)
3294 fCommonHistList->Add(fh1PerpMult);
3295 if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide || fBckgType[4]==kBckgASide)
3296 fCommonHistList->Add(fh1ASideMult);
3297 if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow || fBckgType[4]==kBckgASideWindow)
3298 fCommonHistList->Add(fh1ASideWindowMult);
3299 if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow || fBckgType[4]==kBckgPerpWindow)
3300 fCommonHistList->Add(fh1PerpWindowMult);
3301 if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J || fBckgType[4]==kBckgOut2J)
3302 fCommonHistList->Add(fh1Out2JetsMult);
3303 if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J || fBckgType[4]==kBckgOut3J)
3304 fCommonHistList->Add(fh1Out3JetsMult);
3305 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters)
3306 fCommonHistList->Add(fh1MedianClustersMult);
3307 if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading
3308 || fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)
3309 fCommonHistList->Add(fh1OutClustersMult);
3313 if(fBranchEmbeddedJets.Length()){
3314 fCommonHistList->Add(fh1FractionPtEmbedded);
3315 fCommonHistList->Add(fh1IndexEmbedded);
3316 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
3317 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
3318 fCommonHistList->Add(fh1DeltaREmbedded);
3319 fCommonHistList->Add(fh1nEmbeddedJets);
3323 fCommonHistList->Add(fh2ptVsDistNN_pt50_rec);
3324 fCommonHistList->Add(fh2ptVsDistNN_pt50_nonRec);
3325 fCommonHistList->Add(fh2ptVsDistNN_pt10_rec);
3326 fCommonHistList->Add(fh2ptVsDistNN_pt10_nonRec);
3331 if(fQAMode&1){ // track QA
3332 fQATrackHistosRec->AddToOutput(fCommonHistList);
3333 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
3334 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
3337 if(fQAMode&2){ // jet QA
3338 fQAJetHistosRec->AddToOutput(fCommonHistList);
3339 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
3340 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
3341 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
3343 fQAJetHistosGen->AddToOutput(fCommonHistList);
3344 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
3350 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3351 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3352 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
3353 fCommonHistList->Add(fh1nRecBckgJetsCuts);
3354 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
3359 fPhiCorrHistosJetArea->AddToOutput(fCommonHistList);
3360 fPhiCorrHistosTransverseArea->AddToOutput(fCommonHistList);
3361 fPhiCorrHistosAwayArea->AddToOutput(fCommonHistList);
3366 fIJHistosRecCuts->AddToOutput(fCommonHistList);
3367 fIJHistosRecLeading->AddToOutput(fCommonHistList);
3368 fIJHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3372 fIJBckgHisto0RecCuts->AddToOutput(fCommonHistList);
3373 fIJBckgHisto0RecLeading->AddToOutput(fCommonHistList);
3374 fIJBckgHisto1RecCuts->AddToOutput(fCommonHistList);
3375 fIJBckgHisto1RecLeading->AddToOutput(fCommonHistList);
3376 fIJBckgHisto2RecCuts->AddToOutput(fCommonHistList);
3377 fIJBckgHisto2RecLeading->AddToOutput(fCommonHistList);
3380 if(genJets && genTracks){
3381 fIJHistosGen->AddToOutput(fCommonHistList);
3382 fIJHistosGenLeading->AddToOutput(fCommonHistList);
3383 fIJHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3387 fIJBckgHisto0Gen->AddToOutput(fCommonHistList);
3388 fIJBckgHisto0GenLeading->AddToOutput(fCommonHistList);
3389 fIJBckgHisto1Gen->AddToOutput(fCommonHistList);
3390 fIJBckgHisto1GenLeading->AddToOutput(fCommonHistList);
3391 fIJBckgHisto2Gen->AddToOutput(fCommonHistList);
3392 fIJBckgHisto2GenLeading->AddToOutput(fCommonHistList);
3399 fFFDiJetHistosRecCuts->AddToOutput(fCommonHistList);
3400 fFFDiJetHistosRecLeading->AddToOutput(fCommonHistList);
3401 fFFDiJetHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3402 if(genJets && genTracks){
3403 fFFDiJetHistosGen->AddToOutput(fCommonHistList);
3404 fFFDiJetHistosGenLeading->AddToOutput(fCommonHistList);
3405 fFFDiJetHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3409 fQADiJetHistosRecCuts->AddToOutput(fCommonHistList);
3410 if(genJets && genTracks){
3411 fQADiJetHistosGen->AddToOutput(fCommonHistList);
3416 if(fEffMode && recJetsEff && genTracks){
3418 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
3419 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
3420 fQATrackHistosSecRec->AddToOutput(fCommonHistList);
3421 fCommonHistList->Add(fhnResponseSinglePt);
3422 fCommonHistList->Add(fh2SingleInvPtRecMnGenVsPtGen);
3425 fFFHistosRecEffGen->AddToOutput(fCommonHistList);
3426 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
3427 fFFHistosSecRec->AddToOutput(fCommonHistList);
3428 fCommonHistList->Add(fhnResponseJetTrackPt);
3429 fCommonHistList->Add(fhnResponseJetZ);
3430 fCommonHistList->Add(fhnResponseJetXi);
3432 fCommonHistList->Add(fh1nRecEffJets);
3433 fCommonHistList->Add(fh2PtRecVsGenPrim);
3434 fCommonHistList->Add(fh2PtRecVsGenSec);
3438 // =========== Switch on Sumw2 for all histos ===========
3439 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
3440 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
3441 if (h1) h1->Sumw2();
3443 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
3444 if(hnSparse) hnSparse->Sumw2();
3448 TH1::AddDirectory(oldStatus);
3450 PostData(1, fCommonHistList);
3454 //_______________________________________________
3455 void AliAnalysisTaskFragmentationFunction::Init()
3458 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
3462 //_____________________________________________________________
3463 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
3466 // Called for each event
3467 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
3470 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
3472 // Trigger selection
3473 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
3474 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
3476 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
3477 fh1EvtSelection->Fill(1.);
3478 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
3479 PostData(1, fCommonHistList);
3483 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
3485 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
3488 fMCEvent = MCEvent();
3490 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
3493 // get AOD event from input/ouput
3494 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
3495 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
3496 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
3497 if(fUseAODInputJets) fAODJets = fAOD;
3498 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
3501 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3502 if( handler && handler->InheritsFrom("AliAODHandler") ) {
3503 fAOD = ((AliAODHandler*)handler)->GetAOD();
3505 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
3509 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
3510 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3511 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
3512 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
3513 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
3517 if(fNonStdFile.Length()!=0){
3518 // case we have an AOD extension - fetch the jets from the extended output
3520 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
3521 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
3523 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
3528 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
3532 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
3537 // event selection **************************************************
3538 // *** event class ***
3539 Double_t centPercent = -1;
3542 if(handler->InheritsFrom("AliAODInputHandler")){
3543 // since it is not supported by the helper task define own classes
3544 centPercent = fAOD->GetHeader()->GetCentrality();
3546 if(centPercent>10) cl = 2;
3547 if(centPercent>30) cl = 3;
3548 if(centPercent>50) cl = 4;
3551 cl = AliAnalysisHelperJetTasks::EventClass();
3552 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
3555 if(cl!=fEventClass){
3556 // event not in selected event class, reject event
3557 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
3558 fh1EvtSelection->Fill(2.);
3559 PostData(1, fCommonHistList);
3564 // *** vertex cut ***
3565 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
3566 Int_t nTracksPrim = primVtx->GetNContributors();
3567 fh1VertexNContributors->Fill(nTracksPrim);
3570 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
3572 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
3573 fh1EvtSelection->Fill(3.);
3574 PostData(1, fCommonHistList);
3578 fh1VertexZ->Fill(primVtx->GetZ());
3580 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
3581 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
3582 fh1EvtSelection->Fill(4.);
3583 PostData(1, fCommonHistList);
3587 TString primVtxName(primVtx->GetName());
3589 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
3590 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
3591 fh1EvtSelection->Fill(5.);
3592 PostData(1, fCommonHistList);
3596 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
3597 fh1EvtSelection->Fill(0.);
3598 fh1EvtCent->Fill(centPercent);
3601 //___ get MC information __________________________________________________________________
3603 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
3605 Double_t ptHard = 0.;
3606 Double_t nTrials = 1; // trials for MC trigger weight for real data
3609 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
3613 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
3614 AliGenHijingEventHeader* hijingGenHeader = 0x0;
3616 if(pythiaGenHeader){
3617 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
3618 nTrials = pythiaGenHeader->Trials();
3619 ptHard = pythiaGenHeader->GetPtHard();
3621 fh1PtHard->Fill(ptHard);
3622 fh1PtHardTrials->Fill(ptHard,nTrials);
3625 } else { // no pythia, hijing?
3627 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
3629 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
3630 if(!hijingGenHeader){
3631 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
3633 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
3637 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
3642 //___ fetch jets __________________________________________________________________________
3644 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
3646 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
3647 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3648 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3650 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
3651 Int_t nRecJetsCuts = 0;
3652 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
3653 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3654 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3655 fh1nRecJetsCuts->Fill(nRecJetsCuts);
3657 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3659 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
3661 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
3662 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3664 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3665 fh1nGenJets->Fill(nGenJets);
3668 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3669 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
3670 Int_t nRecEffJets = 0;
3671 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
3672 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3673 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3674 fh1nRecEffJets->Fill(nRecEffJets);
3677 Int_t nEmbeddedJets = 0;
3678 TArrayI iEmbeddedMatchIndex;
3679 TArrayF fEmbeddedPtFraction;
3682 if(fBranchEmbeddedJets.Length()){
3683 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
3684 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
3685 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
3686 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
3687 fh1nEmbeddedJets->Fill(nEmbeddedJets);
3689 Float_t maxDist = 0.3;
3691 iEmbeddedMatchIndex.Set(nEmbeddedJets);
3692 fEmbeddedPtFraction.Set(nEmbeddedJets);
3694 iEmbeddedMatchIndex.Reset(-1);
3695 fEmbeddedPtFraction.Reset(0);
3697 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
3698 fJetsRecCuts, nRecJetsCuts,
3699 iEmbeddedMatchIndex, fEmbeddedPtFraction,
3704 //____ fetch background jets ___________________________________________________
3706 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3707 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3708 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
3710 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
3711 Int_t nRecBckgJets = 0;
3712 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
3713 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
3714 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
3716 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
3717 Int_t nRecBckgJetsCuts = 0;
3718 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
3719 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3720 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
3721 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
3723 if(0){ // protection OB - not yet implemented
3724 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3725 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
3726 Int_t nGenBckgJets = 0;
3727 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
3728 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
3729 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
3730 fh1nGenBckgJets->Fill(nGenBckgJets);
3735 //____ fetch particles __________________________________________________________
3738 if(fUseExtraTracks == 1) nT = GetListOfTracks(fTracksRec, kTrackAODExtra);
3739 else if(fUseExtraTracks == -1) nT = GetListOfTracks(fTracksRec, kTrackAODExtraonly);
3740 else nT = GetListOfTracks(fTracksRec, kTrackAOD);
3743 if(nT>=0) nRecPart = fTracksRec->GetEntries();
3744 if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3745 if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3749 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
3750 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
3751 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
3753 Int_t nRecPartCuts = 0;
3754 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
3755 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3756 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3757 fh1EvtMult->Fill(nRecPartCuts);
3761 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
3763 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
3764 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3765 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3768 //____ analysis, fill histos ___________________________________________________
3773 for(Int_t it=0; it<nRecPart; ++it){
3774 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));
3775 if(part)fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3777 for(Int_t it=0; it<nRecPartCuts; ++it){
3778 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
3779 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
3781 for(Int_t it=0; it<nGenPart; ++it){
3782 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
3783 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3786 // fill DCA to prim vertex
3787 for(Int_t it=0; it<nRecPartCuts; ++it){
3788 AliAODTrack *aodtr = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
3790 if(!aodtr) continue;
3791 if(!primVtx) continue;
3793 Double_t bfield = fAOD->GetMagneticField();
3797 AliAODTrack tmp(*aodtr);
3798 tmp.PropagateToDCA(primVtx, bfield, 5., dz, cov);
3800 Double_t dcaXY = dz[0];
3801 Double_t dcaZ = dz[1];
3803 fh2TrackPtVsDCAXY->Fill(dcaXY,tmp.Pt());
3804 fh2TrackPtVsDCAZ->Fill(dcaZ,tmp.Pt());
3811 for(Int_t ij=0; ij<nRecJets; ++ij){
3812 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
3813 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3818 if(fQAMode || fFFMode || fIJMode || fPhiCorrMode){
3819 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
3821 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
3822 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3824 if(ij==0){ // leading jet
3826 if(fQAMode&2) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3829 Double_t ptFractionEmbedded = 0;
3830 AliAODJet* embeddedJet = 0;
3832 if(fBranchEmbeddedJets.Length()){ // find embedded jet
3834 Int_t indexEmbedded = -1;
3835 for(Int_t i=0; i<nEmbeddedJets; i++){
3836 if(iEmbeddedMatchIndex[i] == ij){
3838 ptFractionEmbedded = fEmbeddedPtFraction[i];
3842 fh1IndexEmbedded->Fill(indexEmbedded);
3843 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
3845 if(indexEmbedded>-1){
3847 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
3848 if(!embeddedJet) continue;
3850 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
3851 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
3853 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
3854 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
3855 fh1DeltaREmbedded->Fill(deltaR);
3859 // get tracks in jet
3860 TList* jettracklist = new TList();
3861 Double_t sumPt = 0.;
3862 Bool_t isBadJet = kFALSE;
3863 Float_t leadTrackPt = 0.;
3864 TLorentzVector* leadTrackV = new TLorentzVector();
3867 if(GetFFRadius()<=0){
3868 GetJetTracksTrackrefs(jettracklist, jet, GetFFMaxTrackPt(), isBadJet);
3870 if(fUseEmbeddedJetAxis){
3871 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
3873 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
3876 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
3878 if(isBadJet) continue;
3880 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
3882 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3884 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3885 if(!trackVP)continue;
3886 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3888 Float_t jetPt = jet->Pt();
3889 if(fUseEmbeddedJetPt){
3890 if(embeddedJet) jetPt = embeddedJet->Pt();
3893 Float_t trackPt = trackV->Pt();
3896 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3898 if(fFFMode) fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);
3899 if(fIJMode) fIJHistosRecCuts->FillIntraJet( trackV, jet->MomentumVector() );
3901 if(it==0){ // leading track
3902 leadTrackPt = trackPt;
3903 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3905 if(fFFMode) fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
3906 if(fIJMode) fIJHistosRecLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
3908 if(fFFMode) fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);
3909 if(fIJMode) fIJHistosRecLeading->FillIntraJet( trackV, leadTrackV );
3914 // ff and ij for background study
3916 if(fBckgType[0]!=-1)
3917 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3918 fFFBckgHisto0RecCuts, fFFBckgHisto0RecLeading,
3919 fIJBckgHisto0RecCuts, fIJBckgHisto0RecLeading,
3920 fQABckgHisto0RecCuts);
3921 if(fBckgType[1]!=-1)
3922 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3923 fFFBckgHisto1RecCuts, fFFBckgHisto1RecLeading,
3924 fIJBckgHisto1RecCuts, fIJBckgHisto1RecLeading,
3925 fQABckgHisto1RecCuts);
3926 if(fBckgType[2]!=-1)
3927 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3928 fFFBckgHisto2RecCuts, fFFBckgHisto2RecLeading,
3929 fIJBckgHisto2RecCuts, fIJBckgHisto2RecLeading,
3930 fQABckgHisto2RecCuts);
3931 if(fBckgType[3]!=-1)
3932 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3933 fFFBckgHisto3RecCuts, fFFBckgHisto3RecLeading,
3934 fIJBckgHisto3RecCuts, fIJBckgHisto3RecLeading,
3935 fQABckgHisto3RecCuts);
3936 if(fBckgType[4]!=-1)
3937 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3938 fFFBckgHisto4RecCuts, fFFBckgHisto4RecLeading,
3939 fIJBckgHisto4RecCuts, fIJBckgHisto4RecLeading,
3940 fQABckgHisto4RecCuts);
3941 } // end if(fBckgMode)
3946 for(Int_t it=0; it<nRecPartCuts; ++it){
3947 AliVParticle *part = (AliVParticle*)(fTracksRecCuts->At(it));
3949 Float_t partEta = part->Eta();
3950 Float_t partPhi = part->Phi();
3951 Float_t partPt = part->Pt();
3953 fPhiCorrHistosJetArea->FillTrackQA( partEta,
3954 TVector2::Phi_mpi_pi( jet->Phi() - partPhi ),
3958 fPhiCorrHistosTransverseArea->FillTrackQA( partEta,
3959 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()/2),
3963 fPhiCorrHistosAwayArea->FillTrackQA( partEta,
3964 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()),
3968 } // end: phi-correlation
3971 delete jettracklist;
3973 } // end: cut embedded ratio
3974 } // end: leading jet
3975 } // end: rec. jets after cuts
3978 for(Int_t ij=0; ij<nGenJets; ++ij){
3980 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
3982 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3984 if(ij==0){ // leading jet
3986 if(fQAMode&2) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3988 TList* jettracklist = new TList();
3989 Double_t sumPt = 0.;
3990 Bool_t isBadJet = kFALSE;
3991 Float_t leadTrackPt = 0.;
3992 TLorentzVector* leadTrackV = new TLorentzVector();
3994 if(GetFFRadius()<=0){
3995 GetJetTracksTrackrefs(jettracklist, jet, GetFFMaxTrackPt(), isBadJet);
3997 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
4000 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
4001 if(isBadJet) continue;
4003 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
4005 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
4006 if(!trackVP)continue;
4007 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4009 Float_t jetPt = jet->Pt();
4010 Float_t trackPt = trackV->Pt();
4012 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4014 if(fFFMode) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
4015 if(fIJMode) fIJHistosGen->FillIntraJet( trackV, jet->MomentumVector() );
4017 if(it==0){ // leading track
4018 leadTrackPt = trackPt;
4019 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4021 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE );
4022 if(fIJMode) fIJHistosGenLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
4024 if(fFFMode) fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt );
4025 if(fIJMode) fIJHistosGenLeading->FillIntraJet( trackV, leadTrackV );
4031 delete jettracklist;
4034 } // end: QA, FF and intra-jet
4036 //_______ DiJet part _____________________________________________________
4038 if (nRecJetsCuts > 1)
4040 AliAODJet* jet1 = (AliAODJet*)(fJetsRecCuts->At(0));
4041 AliAODJet* jet2 = (AliAODJet*)(fJetsRecCuts->At(1));
4043 // DiJet deltaphi calculation
4044 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4045 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4046 Double_t deltaPhi = TMath::Abs(phi1-phi2);
4047 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4049 // DiJet CDF cut calculation
4050 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4051 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4052 Double_t sumEt = et1 + et2;
4053 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4054 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4056 // DiJet events selection
4057 Bool_t positionCut = 0;
4058 Bool_t positionEnergyCut = 0;
4062 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4063 // Position-Energy cut :
4064 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4066 if (ratio < fDiJetCDFCut) cdfCut = 1;
4070 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4071 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4072 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4076 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4077 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4078 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4079 Double_t meanEt = (Double_t)((et1+et2)/2.);
4080 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4082 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4086 if(fDJMode&2) fQADiJetHistosRecCuts->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4089 TList* jettracklist1 = new TList();
4090 Double_t sumPt1 = 0.;
4091 Bool_t isBadJet1 = kFALSE;
4092 Float_t leadTrackPt1 = 0;
4095 TList* jettracklist2 = new TList();
4096 Double_t sumPt2 = 0.;
4097 Bool_t isBadJet2 = kFALSE;
4098 Float_t leadTrackPt2 = 0;
4100 if(GetFFRadius()<=0)
4102 GetJetTracksTrackrefs(jettracklist1, jet1, GetFFMaxTrackPt(), isBadJet1);
4103 GetJetTracksTrackrefs(jettracklist2, jet2, GetFFMaxTrackPt(), isBadJet2);
4107 GetJetTracksPointing(fTracksRecCuts, jettracklist1, jet1, GetFFRadius(), sumPt1, GetFFMaxTrackPt(), isBadJet1);
4108 GetJetTracksPointing(fTracksRecCuts, jettracklist2, jet2, GetFFRadius(), sumPt2, GetFFMaxTrackPt(), isBadJet2);
4112 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet1 = kTRUE;
4113 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet2 = kTRUE;
4115 if(!(isBadJet1 || isBadJet2)){ // good jets
4117 Int_t nTracks = jettracklist1->GetSize();
4118 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4120 for(Int_t it=0; it<nTracks; ++it)
4122 if (it < jettracklist1->GetSize())
4124 AliVParticle *vp = (dynamic_cast<AliVParticle*> (jettracklist1->At(it)));
4125 Float_t trackPt1 = (vp?vp->Pt():0);
4126 Float_t jetPt1 = jet1->Pt();
4128 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4130 fFFDiJetHistosRecCuts->FillDiJetFF(1, trackPt1, jetPt1, jetBin, incrementJetPt);
4131 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt1, jetPt1, jetBin, incrementJetPt);
4135 leadTrackPt1 = trackPt1;
4137 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4138 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4141 fFFDiJetHistosRecLeading->FillDiJetFF(1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4142 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4145 if (it < jettracklist2->GetSize())
4147 Float_t trackPt2 = ((AliVParticle*)(jettracklist2->At(it)))->Pt();
4148 Float_t jetPt2 = jet2->Pt();
4150 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4152 fFFDiJetHistosRecCuts->FillDiJetFF(2, trackPt2, jetPt2, jetBin, incrementJetPt);
4153 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt2, jetPt2, jetBin, incrementJetPt);
4157 leadTrackPt2 = trackPt2;
4159 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4160 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4163 fFFDiJetHistosRecLeading->FillDiJetFF(2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4164 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4166 } // End loop on tracks
4169 delete jettracklist1;
4170 delete jettracklist2;
4172 } // End if(jetBin > 0)
4173 else { Printf("Jet bins for di-jet studies not set !");}
4175 } // End if(nRecJets > 1)
4179 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsGen->At(0));
4180 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsGen->At(1));
4183 Double_t deltaPhi = 0;
4184 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4185 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4186 deltaPhi = TMath::Abs(phi1-phi2);
4187 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4189 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4190 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4191 Double_t sumEt = et1 + et2;
4192 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4193 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4195 // DiJet events selection
4196 Bool_t positionCut = 0;
4197 Bool_t positionEnergyCut = 0;
4201 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4202 // Position-Energy cut :
4203 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4205 if (ratio < fDiJetCDFCut) cdfCut = 1;
4209 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4210 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4211 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4215 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4216 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4217 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4218 Double_t meanEt = (Double_t)((et1+et2)/2.);
4219 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4221 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4225 if(fDJMode&2) fQADiJetHistosGen->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4228 TList* jettracklist1 = new TList();
4229 Double_t sumPt1 = 0.;
4230 Bool_t isBadJet1 = kFALSE;
4231 Float_t leadTrackPt1 = 0.;
4233 TList* jettracklist2 = new TList();
4234 Double_t sumPt2 = 0.;
4235 Bool_t isBadJet2 = kFALSE;
4236 Float_t leadTrackPt2 = 0.;
4238 if(GetFFRadius()<=0)
4240 GetJetTracksTrackrefs(jettracklist1, jet1, GetFFMaxTrackPt(), isBadJet1);
4241 GetJetTracksTrackrefs(jettracklist2, jet2, GetFFMaxTrackPt(), isBadJet2);
4245 GetJetTracksPointing(fTracksGen, jettracklist1, jet1, GetFFRadius(), sumPt1, GetFFMaxTrackPt(), isBadJet1);
4246 GetJetTracksPointing(fTracksGen, jettracklist2, jet2, GetFFRadius(), sumPt2, GetFFMaxTrackPt(), isBadJet2);
4250 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet1 = kTRUE;
4251 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet2 = kTRUE;
4253 if(!(isBadJet1 || isBadJet2)){ // good jets
4255 Int_t nTracks = jettracklist1->GetSize();
4256 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4258 for(Int_t it=0; it<nTracks; ++it)
4260 if (it < jettracklist1->GetSize())
4262 Float_t trackPt1 = ((AliVParticle*)jettracklist1->At(it))->Pt();
4263 Float_t jetPt1 = jet1->Pt();
4265 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4267 fFFDiJetHistosGen->FillDiJetFF( 1, trackPt1, jetPt1, jetBin, incrementJetPt);
4268 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt1, jetPt1, jetBin, incrementJetPt);
4272 leadTrackPt1 = trackPt1;
4274 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4275 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4278 fFFDiJetHistosGenLeading->FillDiJetFF( 1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4279 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4282 if (it < jettracklist2->GetSize())
4284 Float_t trackPt2 = ((AliVParticle*)jettracklist2->At(it))->Pt();
4285 Float_t jetPt2 = jet2->Pt();
4287 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4289 fFFDiJetHistosGen->FillDiJetFF( 2, trackPt2, jetPt2, jetBin, incrementJetPt);
4290 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt2, jetPt2, jetBin, incrementJetPt);
4294 leadTrackPt2 = trackPt2;
4296 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4297 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4300 fFFDiJetHistosGenLeading->FillDiJetFF( 2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4301 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4303 } // End loop on tracks
4306 delete jettracklist1;
4307 delete jettracklist2;
4309 } // End if(jetBin > 0)
4310 else { Printf("Jet bins for di-jet studies not set !");}
4312 }// end if jet1 and jet2
4313 } // End if(nGenJets > 1)
4316 // ____ efficiency _______________________________
4318 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
4320 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
4324 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
4327 // ... and another set for secondaries (secondary MC tracks are stored in a different list)
4328 TArrayI indexAODTrSec;
4330 TArrayI indexMCTrSec;
4332 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
4333 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
4335 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
4336 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
4338 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
4339 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
4341 // associate gen and rec tracks, store indices in TArrays
4342 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
4343 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
4346 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
4347 if(fQAMode&1) FillSingleTrackResponse(fhnResponseSinglePt,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
4350 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
4352 // high-pt occupancy effect
4353 FillTwoTrackHistosRecGen(fTracksAODMCCharged, /*fTracksRecQualityCuts,indexAODTr,*/ isGenPrim);
4357 Double_t sumPtGenLeadingJetRecEff = 0;
4358 Double_t sumPtGenLeadingJetSec = 0;
4359 Double_t sumPtRecLeadingJetRecEff = 0;
4361 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4363 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
4364 Bool_t isBadJetGenPrim = kFALSE;
4365 Bool_t isBadJetGenSec = kFALSE;
4366 Bool_t isBadJetRec = kFALSE;
4369 if(ij==0){ // leading jet
4371 // for efficiency: gen tracks from pointing with gen/rec jet
4372 TList* jettracklistGenPrim = new TList();
4373 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMaxTrackPt(), isBadJetGenPrim);
4375 TList* jettracklistGenSec = new TList();
4376 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMaxTrackPt(), isBadJetGenSec);
4378 // bin efficiency in jet pt bins using rec tracks
4379 TList* jettracklistRec = new TList();
4380 GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMaxTrackPt(), isBadJetRec);
4382 Double_t jetEta = jet->Eta();
4383 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
4385 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
4386 if(GetFFMinNTracks()>0 && jettracklistGenSec->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
4387 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
4389 if(isBadJetRec) continue;
4391 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
4393 if(fFFMode) FillJetTrackHistosRecGen(fFFHistosRecEffGen,fFFHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4394 jettracklistGenPrim,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4396 if(fFFMode) FillJetTrackResponse(fhnResponseJetTrackPt,fhnResponseJetZ,fhnResponseJetXi,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4397 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseResponseRecJetPtBins);
4399 // secondaries: use jet pt from primaries
4400 if(fFFMode) FillJetTrackHistosRecGen(0x0,fFFHistosSecRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4401 jettracklistGenSec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,fUseRecEffRecJetPtBins);
4403 delete jettracklistGenPrim;
4404 delete jettracklistGenSec;
4405 delete jettracklistRec;
4410 // bckgr eff: complementary cones
4414 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4416 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecEff->At(ij));
4418 if(ij==0){ // leading jet
4420 TList* perpjettracklistGen = new TList();
4421 Double_t sumPtGen = 0.;
4423 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksGen, perpjettracklistGen, jet, GetFFRadius() , sumPtGen); // for efficiency: gen tracks perp to gen/rec jet
4425 // here could be your histos !!!
4426 // FillJetTrackRecEffHisto(fFFBckgrPerpHistosRecEffGen,fFFBckgrPerpHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,perpjettracklistGen,
4427 // fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4429 delete perpjettracklistGen;
4434 // bgr eff: outside N leading jets
4440 TList* outjettracklistGen = new TList();
4441 Double_t sumPtGen = 0.;
4443 GetTracksOutOfNJets(nCases, fTracksGen, outjettracklistGen, fJetsRecEff, sumPtGen); // for efficiency: gen tracks outide n gen/rec jets
4445 // here could be your histos !!!
4446 // FillJetTrackRecEffHisto(fFFBckgrOutHistosRecEffGen,fFFBckgrOutHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4447 // outjettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4449 delete outjettracklistGen;
4453 //___________________
4455 fTracksRec->Clear();
4456 fTracksRecCuts->Clear();
4457 fTracksGen->Clear();
4458 fTracksAODMCCharged->Clear();
4459 fTracksAODMCChargedSec->Clear();
4460 fTracksRecQualityCuts->Clear();
4463 fJetsRecCuts->Clear();
4465 fJetsRecEff->Clear();
4466 fJetsEmbedded->Clear();
4470 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
4471 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
4472 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
4474 fBckgJetsRec->Clear();
4475 fBckgJetsRecCuts->Clear();
4476 fBckgJetsGen->Clear();
4481 PostData(1, fCommonHistList);
4484 //________________________________________________________________________________________
4485 Double_t AliAnalysisTaskFragmentationFunction::InvMass(const AliAODJet* jet1, const AliAODJet* jet2)
4487 // cald DiJet inv mass
4489 Double_t invMass = 0.;
4490 invMass = TMath::Sqrt(pow(jet1->E()+jet2->E(),2) - pow(jet1->Px()+jet2->Px(),2) -
4491 pow(jet1->Py()+jet2->Py(),2) - pow(jet1->Pz()+jet2->Pz(),2));
4497 //________________________________________________________________________________________
4498 Double_t AliAnalysisTaskFragmentationFunction::GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t EtMean, Int_t kindBins)
4500 // calc DiJet bin according to kindBins parameter
4502 Double_t jetBinOk = 0.;
4503 Double_t jetBin = 0.;
4505 Float_t stepInvMass = (fDiJetJetInvMassMax - fDiJetJetInvMassMin)/fDiJetNBinsJetInvMass;
4506 Float_t stepPt = (fDiJetJetPtMax - fDiJetJetPtMin)/fDiJetNBinsJetPt;
4510 for(Int_t i=0; i<fDiJetNBinsJetInvMass; ++i)
4512 jetBin = fDiJetJetInvMassMin + i*stepInvMass + stepInvMass/2.;
4513 if(((fDiJetJetInvMassMin+i*stepInvMass) <= invMass) &&
4514 (fDiJetJetInvMassMin + (i+1)*stepInvMass) > invMass) {jetBinOk = jetBin; break;}
4515 else jetBinOk = -1.;
4518 else if (kindBins == 3)
4520 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4522 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4523 if(((fDiJetJetPtMin+i*stepPt) <= EtMean) &&
4524 (fDiJetJetPtMin + (i+1)*stepPt) > EtMean) {jetBinOk = jetBin; break;}
4525 else jetBinOk = -1.;
4528 else if (kindBins == 2)
4530 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4532 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4533 if(((fDiJetJetPtMin+i*stepPt) <= leadingJetPt) &&
4534 (fDiJetJetPtMin + (i+1)*stepPt) > leadingJetPt) {jetBinOk = jetBin; break;}
4535 else jetBinOk = -1.;
4538 else {Printf("WARNING: kindBins wrongly set ! Please make sure to call SetKindSlices() and set the kind parameter to 1, 2 or 3.\n");}
4545 //______________________________________________________________
4546 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
4550 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
4553 //_________________________________________________________________________________
4554 Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
4556 // fill list of tracks selected according to type
4558 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
4561 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4565 if(!fAOD) return -1;
4567 if(!fAOD->GetTracks()) return 0;
4569 if(type==kTrackUndef) return 0;
4573 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
4575 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
4576 if(!aodExtraTracks)return iCount;
4577 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
4578 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
4579 if (!track) continue;
4581 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
4584 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
4586 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4588 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4589 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4590 if(tr->Pt() < fTrackPtCut) continue;
4598 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
4600 // all rec. tracks, esd filter mask, eta range
4602 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
4603 AliAODTrack *tr = fAOD->GetTrack(it);
4605 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
4607 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4608 if(type == kTrackAODCuts){
4609 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4610 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4611 if(tr->Pt() < fTrackPtCut) continue;
4618 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
4619 // kine particles, all or rather charged
4620 if(!fMCEvent) return iCount;
4622 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
4623 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
4625 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
4626 if(part->Charge()==0) continue;
4628 if(type == kTrackKineChargedAcceptance &&
4629 ( part->Eta() < fTrackEtaMin
4630 || part->Eta() > fTrackEtaMax
4631 || part->Phi() < fTrackPhiMin
4632 || part->Phi() > fTrackPhiMax
4633 || part->Pt() < fTrackPtCut)) continue;
4640 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
4641 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
4642 if(!fAOD) return -1;
4644 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4645 if(!tca)return iCount;
4647 for(int it=0; it<tca->GetEntriesFast(); ++it){
4648 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
4650 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
4651 if(type == kTrackAODMCChargedSec && part->IsPhysicalPrimary())continue;
4653 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
4654 if(part->Charge()==0) continue;
4655 if(type==kTrackAODMCChargedAcceptance &&
4656 ( part->Eta() > fTrackEtaMax
4657 || part->Eta() < fTrackEtaMin
4658 || part->Phi() > fTrackPhiMax
4659 || part->Phi() < fTrackPhiMin
4660 || part->Pt() < fTrackPtCut)) continue;
4672 // _______________________________________________________________________________
4673 Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
4675 // fill list of jets selected according to type
4678 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4682 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4684 if(fBranchRecJets.Length()==0){
4685 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4686 if(fDebug>1)fAOD->Print();
4690 TClonesArray *aodRecJets = 0;
4691 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
4692 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
4693 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
4696 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
4697 if(fDebug>1)fAOD->Print();
4701 // Reorder jet pt and fill new temporary AliAODJet objects
4704 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4706 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4709 if( tmp->Pt() < fJetPtCut ) continue;
4710 if( type == kJetsRecAcceptance &&
4711 ( tmp->Eta() < fJetEtaMin
4712 || tmp->Eta() > fJetEtaMax
4713 || tmp->Phi() < fJetPhiMin
4714 || tmp->Phi() > fJetPhiMax )) continue;
4716 if(fBckgSubMethod && fBranchRecJets.Contains("B0") &&
4717 fBranchRecJets.Contains("KT")) {
4719 AliAODJet *tmpJet = GetAODBckgSubJet(tmp, fBckgSubMethod);
4721 if(!tmpJet) continue;
4738 else if(type == kJetsKine || type == kJetsKineAcceptance){
4744 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
4748 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
4749 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
4750 AliGenHijingEventHeader* hijingGenHeader = 0x0;
4752 if(!pythiaGenHeader){
4753 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
4755 if(!hijingGenHeader){
4756 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
4759 TLorentzVector mom[4];
4761 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
4763 for(Int_t i=0; i<2; ++i){
4764 if(!mom[i].Pt()) continue;
4765 jet[i] = new AliAODJet(mom[i]);
4767 if( type == kJetsKineAcceptance &&
4768 ( jet[i]->Eta() < fJetEtaMin
4769 || jet[i]->Eta() > fJetEtaMax
4770 || jet[i]->Phi() < fJetPhiMin
4771 || jet[i]->Phi() > fJetPhiMax )) continue;
4781 // fetch the pythia generated jets
4782 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
4785 AliAODJet *jet = new AliAODJet();
4786 pythiaGenHeader->TriggerJet(ip, p);
4787 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
4789 if( type == kJetsKineAcceptance &&
4790 ( jet->Eta() < fJetEtaMin
4791 || jet->Eta() > fJetEtaMax
4792 || jet->Phi() < fJetPhiMin
4793 || jet->Phi() > fJetPhiMax )) continue;
4801 else if(type == kJetsGen || type == kJetsGenAcceptance ){
4803 if(fBranchGenJets.Length()==0){
4804 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
4808 TClonesArray *aodGenJets = 0;
4809 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
4810 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
4811 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
4815 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
4817 if(fDebug>1)fAOD->Print();
4823 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
4825 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
4828 if( tmp->Pt() < fJetPtCut ) continue;
4829 if( type == kJetsGenAcceptance &&
4830 ( tmp->Eta() < fJetEtaMin
4831 || tmp->Eta() > fJetEtaMax
4832 || tmp->Phi() < fJetPhiMin
4833 || tmp->Phi() > fJetPhiMax )) continue;
4841 else if(type == kJetsEmbedded){ // embedded jets
4843 if(fBranchEmbeddedJets.Length()==0){
4844 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
4845 if(fDebug>1)fAOD->Print();
4849 TClonesArray *aodEmbeddedJets = 0;
4850 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
4851 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
4852 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
4854 if(!aodEmbeddedJets){
4855 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
4856 if(fDebug>1)fAOD->Print();
4860 // Reorder jet pt and fill new temporary AliAODJet objects
4861 Int_t nEmbeddedJets = 0;
4863 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
4865 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
4868 if( tmp->Pt() < fJetPtCut ) continue;
4869 if( tmp->Eta() < fJetEtaMin
4870 || tmp->Eta() > fJetEtaMax
4871 || tmp->Phi() < fJetPhiMin
4872 || tmp->Phi() > fJetPhiMax ) continue;
4880 return nEmbeddedJets;
4883 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
4888 // ___________________________________________________________________________________
4889 Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
4891 // fill list of bgr clusters selected according to type
4893 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4895 if(fBranchRecBckgClusters.Length()==0){
4896 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4897 if(fDebug>1)fAOD->Print();
4901 TClonesArray *aodRecJets = 0;
4902 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
4903 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
4904 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
4907 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
4908 if(fDebug>1)fAOD->Print();
4912 // Reorder jet pt and fill new temporary AliAODJet objects
4915 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4917 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4920 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
4921 if( type == kJetsRecAcceptance &&
4922 ( tmp->Eta() < fJetEtaMin
4923 || tmp->Eta() > fJetEtaMax
4924 || tmp->Phi() < fJetPhiMin
4925 || tmp->Phi() > fJetPhiMax )) continue;
4939 // MC clusters still Under construction
4945 // _________________________________________________________________________________________________________
4946 void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
4948 // Set properties of THnSparse
4950 for(Int_t i=0; i<dim; i++){
4951 h->GetAxis(i)->SetTitle(labels[i]);
4952 h->GetAxis(i)->SetTitleColor(1);
4956 // __________________________________________________________________________________________
4957 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
4959 //Set properties of histos (x and y title)
4963 h->GetXaxis()->SetTitleColor(1);
4964 h->GetYaxis()->SetTitleColor(1);
4967 // _________________________________________________________________________________________________________
4968 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
4970 //Set properties of histos (x,y and z title)
4975 h->GetXaxis()->SetTitleColor(1);
4976 h->GetYaxis()->SetTitleColor(1);
4977 h->GetZaxis()->SetTitleColor(1);
4980 // ________________________________________________________________________________________________________________________________________________________
4981 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
4982 const Double_t radius, Double_t& sumPt, const Double_t maxPt, Bool_t& isBadMaxPt)
4984 // fill list of tracks in cone around jet axis
4987 isBadMaxPt = kFALSE;
4990 jet->PxPyPz(jetMom);
4991 TVector3 jet3mom(jetMom);
4993 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4995 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4997 Double_t trackMom[3];
4998 track->PxPyPz(trackMom);
4999 TVector3 track3mom(trackMom);
5001 Double_t dR = jet3mom.DeltaR(track3mom);
5005 outputlist->Add(track);
5007 sumPt += track->Pt();
5009 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
5016 // ___________________________________________________________________________________________
5017 void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t maxPt, Bool_t& isBadMaxPt)
5019 // list of jet tracks from trackrefs
5021 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
5023 for (Int_t itrack=0; itrack<nTracks; itrack++) {
5025 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
5027 AliError("expected ref track not found ");
5031 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
5038 // _ ________________________________________________________________________________________________________________________________
5039 void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
5040 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
5042 // associate generated and reconstructed tracks, fill TArrays of list indices
5044 Int_t nTracksRec = tracksRec->GetSize();
5045 Int_t nTracksGen = tracksAODMCCharged->GetSize();
5046 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5049 if(!nTracksGen) return;
5053 indexAODTr.Set(nTracksGen);
5054 indexMCTr.Set(nTracksRec);
5055 isRefGen.Set(nTracksGen);
5057 indexAODTr.Reset(-1);
5058 indexMCTr.Reset(-1);
5061 // loop over reconstructed tracks, get generated track
5063 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
5065 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5066 if(!rectrack)continue;
5067 Int_t label = TMath::Abs(rectrack->GetLabel());
5069 // find MC track in our list
5070 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
5072 Int_t listIndex = -1;
5073 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
5077 indexAODTr[listIndex] = iRec;
5078 indexMCTr[iRec] = listIndex;
5083 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
5085 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5087 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
5088 if(!gentrack)continue;
5089 Int_t pdg = gentrack->GetPdgCode();
5091 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
5092 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
5093 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
5095 isRefGen[iGen] = kTRUE;
5097 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5100 Float_t genPt = gentrack->Pt();
5101 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5103 Float_t recPt = vt->Pt();
5104 fh2PtRecVsGen->Fill(genPt,recPt);
5111 // _____________________________________________________________________________________________________________________________________________
5112 void AliAnalysisTaskFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
5113 const TArrayI& indexAODTr, const TArrayS& isRefGen){
5115 // fill QA for single track reconstruction efficiency
5117 Int_t nTracksGen = tracksGen->GetSize();
5119 if(!nTracksGen) return;
5121 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5123 if(isRefGen[iGen] != 1) continue; // select primaries
5125 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5126 if(!gentrack) continue;
5127 Double_t ptGen = gentrack->Pt();
5128 Double_t etaGen = gentrack->Eta();
5129 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5131 // apply same acc & pt cuts as for FF
5133 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5134 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5135 if(ptGen < fTrackPtCut) continue;
5137 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
5140 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5141 if(iRec>=0 && trackQARec) trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
5145 // ______________________________________________________________________________________________________________________________________________________
5147 void AliAnalysisTaskFragmentationFunction::FillJetTrackHistosRecGen(TObject* histGen,TObject* histRec,Double_t jetPtGen,Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen,
5148 const TArrayI& indexAODTr,const TArrayS& isRefGen, const Bool_t useRecJetPt)
5150 // fill objects for jet track reconstruction efficiency or secondaries contamination
5151 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
5153 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5155 if(!nTracksJet) return;
5157 Bool_t incrementJetPtGenFF = kTRUE; // needed in case we fill FFHistos
5158 Bool_t incrementJetPtRecFF = kTRUE; // needed in case we fill FFHistos
5160 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5162 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
5163 if(!gentrack)continue;
5164 // find jet track in gen tracks list
5165 Int_t iGen = tracksGen->IndexOf(gentrack);
5168 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5173 if(isRefGen[iGen] != 1) continue; // select primaries
5175 Double_t ptGen = gentrack->Pt();
5176 Double_t etaGen = gentrack->Eta();
5177 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5179 // apply same acc & pt cuts as for FF
5181 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5182 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5183 if(ptGen < fTrackPtCut) continue;
5185 Double_t z = ptGen / jetPtGen;
5187 if(z>0) xi = TMath::Log(1/z);
5189 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5190 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
5192 if(dynamic_cast<AliFragFuncHistos*>(histGen) || dynamic_cast<AliFragFuncHistos*>(histRec)){ // histGen can be NULL for secondaries -> ||
5194 // after checking can afford normal cast
5195 AliFragFuncHistos* ffhistGen = (AliFragFuncHistos*) (histGen);
5196 AliFragFuncHistos* ffhistRec = (AliFragFuncHistos*) (histRec);
5199 if(useRecJetPt) ffhistGen->FillFF( ptGen, jetPtRec, incrementJetPtGenFF );
5200 else ffhistGen->FillFF( ptGen, jetPtGen, incrementJetPtGenFF );
5202 incrementJetPtGenFF = kFALSE;
5206 if(ffhistRec && isRec){
5208 if(useRecJetPt) ffhistRec->FillFF( ptGen, jetPtRec, incrementJetPtRecFF );
5209 else ffhistRec->FillFF( ptGen, jetPtGen, incrementJetPtRecFF );
5211 incrementJetPtRecFF = kFALSE;
5214 else if(dynamic_cast<AliFragFuncIntraJetHistos*>(histGen) && dynamic_cast<AliFragFuncIntraJetHistos*>(histRec)){
5216 // eff for IJ histos ...
5222 // _____________________________________________________________________________________________________________________________________________
5223 void AliAnalysisTaskFragmentationFunction::FillTwoTrackHistosRecGen(TList* tracksGen, /*TList* tracksRec, const TArrayI& indexAODTr, */ const TArrayS& isRefGen){
5225 Int_t nTracksGen = tracksGen->GetSize();
5227 if(!nTracksGen) return;
5229 Int_t highPtIndices[nTracksGen];
5232 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5234 if(isRefGen[iGen] != 1) continue; // select primaries
5236 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5237 if(!gentrack) continue;
5238 Double_t ptGen = gentrack->Pt();
5239 Double_t etaGen = gentrack->Eta();
5240 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5242 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5243 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5246 highPtIndices[nHighPt++] = iGen;
5251 for(Int_t nHPT = 0; nHPT<nHighPt; nHPT++){ // high pt tracks loop
5253 Int_t indexHPT = highPtIndices[nHPT];
5255 AliAODMCParticle* genHPTtrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(indexHPT));
5256 if(!genHPTtrack) continue;
5258 Double_t trackMomHPT[3];
5259 genHPTtrack->PxPyPz(trackMomHPT);
5260 TVector3 track3MomHPT(trackMomHPT);
5263 Double_t distNN = 10;
5267 for(Int_t iGen=0; iGen<nTracksGen; iGen++){ // all gen tracks loop
5269 if(isRefGen[iGen] != 1) continue; // select primaries
5271 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5272 if(!gentrack) continue;
5274 Double_t ptGen = gentrack->Pt();
5275 Double_t etaGen = gentrack->Eta();
5276 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5278 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5279 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5280 if(ptGen < fTrackPtCut) continue;
5283 Double_t gentrackMom[3];
5284 gentrack->PxPyPz(gentrackMom);
5285 TVector3 gentrack3Mom(gentrackMom);
5287 Double_t dR = gentrack3Mom.DeltaR(track3MomHPT);
5289 if(iGen != indexHPT && dR<distNN){
5298 // _____________________________________________________________________________________________________________________________________________
5299 void AliAnalysisTaskFragmentationFunction::FillSingleTrackResponse(THnSparse* hnResponse, TList* tracksGen, TList* tracksRec,
5300 const TArrayI& indexAODTr, const TArrayS& isGenPrim)
5302 // fill response matrix for single tracks
5305 Int_t nTracksGen = tracksGen->GetSize();
5307 if(!nTracksGen) return;
5309 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5311 if(isGenPrim[iGen] != 1) continue; // select primaries
5313 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5314 if(!gentrack)continue;
5315 Double_t ptGen = gentrack->Pt();
5316 Double_t etaGen = gentrack->Eta();
5317 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5319 // apply same acc & pt cuts as for FF
5320 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5321 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5322 if(ptGen < fTrackPtCut) continue;
5324 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5326 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5327 if(!rectrack)continue;
5328 Double_t ptRec = rectrack->Pt();
5330 Double_t entries[2] = {ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5331 hnResponse->Fill(entries);
5333 Double_t invPtGen = 0;
5334 if(ptGen) invPtGen = 1/ptGen;
5336 Double_t invPtRec = 0;
5337 if(ptRec) invPtRec = 1/ptRec;
5339 fh2SingleInvPtRecMnGenVsPtGen->Fill(ptGen,invPtRec - invPtGen);
5345 // ______________________________________________________________________________________________________________________________________________________
5346 void AliAnalysisTaskFragmentationFunction::FillJetTrackResponse(THnSparse* hnResponsePt, THnSparse* hnResponseZ, THnSparse* hnResponseXi,
5347 Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList,
5348 const TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim,const Bool_t useRecJetPt)
5350 // fill response matrix for tracks in jets
5352 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5354 if(!nTracksJet) return;
5356 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5358 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
5359 if(!gentrack)continue;
5360 // find jet track in gen tracks list
5361 Int_t iGen = tracksGen->IndexOf(gentrack);
5364 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5368 if(isGenPrim[iGen] != 1) continue; // select primaries
5370 Double_t ptGen = gentrack->Pt();
5371 Double_t etaGen = gentrack->Eta();
5372 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5374 // apply same acc & pt cuts as for FF
5376 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5377 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5378 if(ptGen < fTrackPtCut) continue;
5380 Double_t zGen = ptGen / jetPtRec;
5382 if(zGen>0) xiGen = TMath::Log(1/zGen);
5384 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5388 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5390 Double_t ptRec = rectrack->Pt();
5392 Double_t zRec = ptRec / jetPtRec;
5394 if(zRec>0) xiRec = TMath::Log(1/zRec);
5396 Double_t jetPt = useRecJetPt ? jetPtRec : jetPtGen;
5398 Double_t entriesPt[3] = {jetPt,ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5399 Double_t entriesZ[3] = {jetPt,zRec,zGen};
5400 Double_t entriesXi[3] = {jetPt,xiRec,xiGen};
5402 hnResponsePt->Fill(entriesPt);
5403 hnResponseZ->Fill(entriesZ);
5404 hnResponseXi->Fill(entriesXi);
5410 // _____________________________________________________________________________________________________________________________________________________________________
5411 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
5413 // List of tracks in cone perpendicular to the jet azimuthal direction
5416 jet->PxPyPz(jetMom);
5418 TVector3 jet3mom(jetMom);
5419 // Rotate phi and keep eta unchanged
5420 Double_t etaTilted = jet3mom.Eta();
5421 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5422 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5424 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5427 if( fUseExtraTracksBgr != 1){
5428 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5429 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5430 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5434 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5436 Double_t trackMom[3];
5437 track->PxPyPz(trackMom);
5438 TVector3 track3mom(trackMom);
5440 Double_t deta = track3mom.Eta() - etaTilted;
5441 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
5442 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
5443 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
5446 outputlist->Add(track);
5447 sumPt += track->Pt();
5453 // ________________________________________________________________________________________________________________________________________________________
5454 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
5456 // List of tracks in cone perpendicular to the jet azimuthal direction
5459 jet->PxPyPz(jetMom);
5461 TVector3 jet3mom(jetMom);
5462 // Rotate phi and keep eta unchanged
5463 Double_t etaTilted = jet3mom.Eta();
5464 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5465 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5467 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
5471 if( fUseExtraTracksBgr != 1){
5472 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5473 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5474 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5478 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5480 Float_t trackEta = track->Eta();
5481 Float_t trackPhi = track->Phi();
5483 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
5485 if((trackPhi<=phiTilted+radius) &&
5486 (trackPhi>=phiTilted-radius) &&
5487 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
5489 outputlist->Add(track);
5490 sumPt += track->Pt();
5493 else if( phiTilted-radius < 0 )
5495 if((( trackPhi < phiTilted+radius ) ||
5496 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
5497 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5499 outputlist->Add(track);
5500 sumPt += track->Pt();
5503 else if( phiTilted+radius > 2*TMath::Pi() )
5505 if((( trackPhi > phiTilted-radius ) ||
5506 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
5507 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5509 outputlist->Add(track);
5510 sumPt += track->Pt();
5515 // Jet area - Temporarily added should be modified with the proper jet area value
5516 Float_t areaJet = CalcJetArea(etaTilted,radius);
5517 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
5519 normFactor = (Float_t) 1. / (areaJet / areaTilted);
5524 // ________________________________________________________________________________________________________________________________________________________
5525 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt)
5527 // List of tracks outside cone around N jet axis
5528 // Particles taken randomly
5531 // Int_t nj = jetlist->GetSize();
5532 Float_t rc = GetFFRadius();
5533 Float_t rcl = GetFFBckgRadius();
5535 // Estimate jet and background areas
5536 Float_t* areaJet = new Float_t[nCases];
5537 memset(areaJet, 0, sizeof(Float_t) * nCases);
5538 Float_t* areaJetLarge = new Float_t[nCases];
5539 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
5540 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5541 Float_t areaOut = areaFull;
5543 //estimate jets and background areas
5546 TList* templist = new TList();
5547 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5549 for(Int_t ij=0; ij<nCases; ++ij)
5551 // Get jet information
5552 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5555 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5556 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5557 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5560 areaJet[ij] = CalcJetArea(etaJet,rc);
5562 // Area jet larger angle
5563 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5566 areaOut = areaOut - areaJetLarge[ij];
5570 // List of all tracks outside jet areas
5571 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5574 if( fUseExtraTracksBgr != 1){
5575 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5576 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5577 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5581 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5583 Double_t trackMom[3];
5584 track->PxPyPz(trackMom);
5585 TVector3 track3mom(trackMom);
5587 Double_t *dR = new Double_t[nCases];
5588 for(Int_t ij=0; ij<nCases; ij++)
5589 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5591 if((nCases==1 && (dR[0]>rcl)) ||
5592 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5593 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5595 templist->Add(track);
5601 // Take tracks randomly
5602 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
5603 TArrayI* ar = new TArrayI(nOut);
5605 for(Int_t init=0; init<nOut; init++)
5608 Int_t *randIndex = new Int_t[nScaled];
5609 for(Int_t init2=0; init2<nScaled; init2++)
5610 randIndex[init2] = -1;
5612 // Select nScaled different random numbers in nOut
5613 for(Int_t i=0; i<nScaled; i++)
5615 Int_t* tmpArr = new Int_t[nOut-i];
5616 Int_t temp = fRandom->Integer(nOut-i);
5617 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
5619 if(ind<temp) tmpArr[ind] = (*ar)[ind];
5620 else tmpArr[ind] = (*ar)[ind+1];
5622 randIndex[i] = (*ar)[temp];
5624 ar->Set(nOut-i-1,tmpArr);
5630 for(Int_t ipart=0; ipart<nScaled; ipart++)
5632 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
5633 outputlist->Add(track);
5634 sumPt += track->Pt();
5641 delete [] areaJetLarge;
5644 delete [] randIndex;
5648 // ________________________________________________________________________________________________________________________________________________________
5649 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt, Double_t &normFactor)
5651 // List of tracks outside cone around N jet axis
5652 // All particles taken + final scaling factor
5655 Float_t rc = GetFFRadius();
5656 Float_t rcl = GetFFBckgRadius();
5658 // Estimate jet and background areas
5659 Float_t* areaJet = new Float_t[nCases];
5660 memset(areaJet, 0, sizeof(Float_t) * nCases);
5661 Float_t* areaJetLarge = new Float_t[nCases];
5662 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
5663 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5664 Float_t areaOut = areaFull;
5666 //estimate jets and background areas
5669 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5671 for(Int_t ij=0; ij<nCases; ++ij)
5673 // Get jet information
5674 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5677 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5678 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5679 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5682 areaJet[ij] = CalcJetArea(etaJet,rc);
5684 // Area jet larger angle
5685 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5687 // Outside jets area
5688 areaOut = areaOut - areaJetLarge[ij];
5692 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5695 if( fUseExtraTracksBgr != 1){
5696 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5697 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5698 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5702 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5704 Double_t trackMom[3];
5705 track->PxPyPz(trackMom);
5706 TVector3 track3mom(trackMom);
5708 Double_t *dR = new Double_t[nCases];
5709 for(Int_t ij=0; ij<nCases; ij++)
5710 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5713 (nCases==1 && (dR[0]>rcl)) ||
5714 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5715 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5717 outputlist->Add(track);
5718 sumPt += track->Pt();
5724 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
5725 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
5730 delete [] areaJetLarge;
5735 // ______________________________________________________________________________________________________________________________________________________
5736 Float_t AliAnalysisTaskFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
5738 // calculate area of jet with eta etaJet and radius rc
5740 Float_t detamax = etaJet + rc;
5741 Float_t detamin = etaJet - rc;
5742 Float_t accmax = 0.0; Float_t accmin = 0.0;
5743 if(detamax > fTrackEtaMax){ // sector outside etamax
5744 Float_t h = fTrackEtaMax - etaJet;
5745 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5747 if(detamin < fTrackEtaMin){ // sector outside etamin
5748 Float_t h = fTrackEtaMax + etaJet;
5749 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5751 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
5757 // ___________________________________________________________________________________________________________________________
5758 void AliAnalysisTaskFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
5760 // fill tracks from bckgCluster branch in list,
5761 // for all clusters outside jet cone
5762 // sum up total area of clusters
5764 Double_t rc = GetFFRadius();
5765 Double_t rcl = GetFFBckgRadius();
5767 Double_t areaTotal = 0;
5768 Double_t sumPtTotal = 0;
5770 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
5772 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
5774 Double_t dR = jet->DeltaR(bgrCluster);
5776 if(dR<rcl) continue;
5778 Double_t clusterPt = bgrCluster->Pt();
5779 Double_t area = bgrCluster->EffectiveAreaCharged();
5781 sumPtTotal += clusterPt;
5783 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
5785 for(Int_t it = 0; it<nTracksJet; it++){
5787 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5788 if( fUseExtraTracksBgr != 1){
5789 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
5790 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5791 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5795 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
5796 if(!track) continue;
5798 Float_t trackPt = track->Pt();
5799 Float_t trackEta = track->Eta();
5800 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5802 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5803 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5804 if(trackPt < fTrackPtCut) continue;
5806 outputlist->Add(track);
5810 Double_t areaJet = TMath::Pi()*rc*rc;
5811 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
5816 // _______________________________________________________________________________________________________________________
5817 void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
5819 // fill tracks from bckgCluster branch,
5820 // using cluster with median density (odd number of clusters)
5821 // or picking randomly one of the two closest to median (even number)
5825 Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
5827 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
5829 Double_t* bgrDensity = new Double_t[nBckgClusters];
5830 Int_t* indices = new Int_t[nBckgClusters];
5832 for(Int_t ij=0; ij<nBckgClusters; ++ij){
5834 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
5835 Double_t clusterPt = bgrCluster->Pt();
5836 Double_t area = bgrCluster->EffectiveAreaCharged();
5838 Double_t density = 0;
5839 if(area>0) density = clusterPt/area;
5841 bgrDensity[ij] = density;
5845 TMath::Sort(nBckgClusters, bgrDensity, indices);
5847 // get median cluster
5849 AliAODJet* medianCluster = 0;
5850 Double_t medianDensity = 0;
5852 if(TMath::Odd(nBckgClusters)){
5854 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
5855 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
5857 Double_t clusterPt = medianCluster->Pt();
5858 Double_t area = medianCluster->EffectiveAreaCharged();
5860 if(area>0) medianDensity = clusterPt/area;
5864 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
5865 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
5867 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
5868 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
5870 Double_t density1 = 0;
5871 Double_t clusterPt1 = medianCluster1->Pt();
5872 Double_t area1 = medianCluster1->EffectiveAreaCharged();
5873 if(area1>0) density1 = clusterPt1/area1;
5875 Double_t density2 = 0;
5876 Double_t clusterPt2 = medianCluster2->Pt();
5877 Double_t area2 = medianCluster2->EffectiveAreaCharged();
5878 if(area2>0) density2 = clusterPt2/area2;
5880 medianDensity = 0.5*(density1+density2);
5882 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
5885 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
5887 for(Int_t it = 0; it<nTracksJet; it++){
5889 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5890 if( fUseExtraTracksBgr != 1){
5891 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
5892 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5893 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5897 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
5898 if(!track) continue;
5900 Float_t trackPt = track->Pt();
5901 Float_t trackEta = track->Eta();
5902 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5904 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5905 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5906 if(trackPt < fTrackPtCut) continue;
5908 outputlist->Add(track);
5911 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
5912 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
5914 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
5918 delete[] bgrDensity;
5922 // ______________________________________________________________________________________________________________________________________________________
5923 void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet, Float_t leadTrackPt, TLorentzVector* leadTrackV,
5924 AliFragFuncHistos* ffbckghistocuts, AliFragFuncHistos* ffbckghistoleading,
5925 AliFragFuncIntraJetHistos* ijbckghistocuts, AliFragFuncIntraJetHistos* ijbckghistoleading,
5926 AliFragFuncQATrackHistos* qabckghistocuts){
5928 // List of tracks outside jets for background study
5929 TList* tracklistout2jets = new TList();
5930 TList* tracklistout3jets = new TList();
5931 TList* tracklistout2jetsStat = new TList();
5932 TList* tracklistout3jetsStat = new TList();
5933 Double_t sumPtOut2Jets = 0.;
5934 Double_t sumPtOut3Jets = 0.;
5935 Double_t sumPtOut2JetsStat = 0.;
5936 Double_t sumPtOut3JetsStat = 0.;
5937 Double_t normFactor2Jets = 0.;
5938 Double_t normFactor3Jets = 0.;
5940 Int_t nRecJetsCuts = fJetsRecCuts->GetEntries();
5942 if(nRecJetsCuts>1) {
5943 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
5944 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
5947 if(nRecJetsCuts>2) {
5948 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
5949 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
5952 if(type==kBckgOutLJ || type==kBckgOutAJ)
5954 TList* tracklistoutleading = new TList();
5955 Double_t sumPtOutLeading = 0.;
5956 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
5957 if(type==kBckgOutLJ) fh1OutLeadingMult->Fill(tracklistoutleading->GetSize());
5959 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
5961 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
5962 if(!trackVP) continue;
5963 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5965 Float_t jetPt = jet->Pt();
5966 Float_t trackPt = trackV->Pt();
5968 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5970 if(type==kBckgOutLJ)
5972 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
5973 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
5975 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt);
5976 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
5978 // Fill track QA for background
5979 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5982 // All cases included
5983 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5985 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5986 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
5988 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
5989 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
5993 // Increment jet pt with one entry in case #tracks outside jets = 0
5994 if(tracklistoutleading->GetSize()==0) {
5995 Float_t jetPt = jet->Pt();
5996 Bool_t incrementJetPt = kTRUE;
5997 if(type==kBckgOutLJ)
5999 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6000 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6002 // All cases included
6003 if(nRecJetsCuts==1 && type==kBckgOutAJ)
6005 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6006 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6009 delete tracklistoutleading;
6011 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
6013 TList* tracklistoutleadingStat = new TList();
6014 Double_t sumPtOutLeadingStat = 0.;
6015 Double_t normFactorLeading = 0.;
6017 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
6018 if(type==kBckgOutLJStat) fh1OutLeadingStatMult->Fill(tracklistoutleadingStat->GetSize());
6020 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
6022 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
6023 if(!trackVP) continue;
6024 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6026 Float_t jetPt = jet->Pt();
6027 Float_t trackPt = trackV->Pt();
6028 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6031 if(type==kBckgOutLJStat)
6033 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
6034 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading);
6036 if(fFFMode)ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
6037 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading);
6039 // Fill track QA for background
6040 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
6043 // All cases included
6044 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
6046 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
6047 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading );
6049 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
6050 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading );
6052 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6057 // Increment jet pt with one entry in case #tracks outside jets = 0
6058 if(tracklistoutleadingStat->GetSize()==0) {
6059 Float_t jetPt = jet->Pt();
6060 Bool_t incrementJetPt = kTRUE;
6061 if(type==kBckgOutLJStat)
6063 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
6064 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading);
6066 // All cases included
6067 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
6069 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
6070 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading );
6074 delete tracklistoutleadingStat;
6079 Double_t sumPtPerp = 0.;
6080 TList* tracklistperp = new TList();
6081 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp,jet,GetFFRadius(),sumPtPerp);
6082 fh1PerpMult->Fill(tracklistperp->GetSize());
6084 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
6086 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
6087 if(!trackVP)continue;
6088 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6090 Float_t jetPt = jet->Pt();
6091 Float_t trackPt = trackV->Pt();
6093 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6095 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6096 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6098 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6099 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6101 // Fill track QA for background
6102 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6106 // Increment jet pt with one entry in case #tracks outside jets = 0
6107 if(tracklistperp->GetSize()==0) {
6108 Float_t jetPt = jet->Pt();
6109 Bool_t incrementJetPt = kTRUE;
6110 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6111 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6114 delete tracklistperp;
6117 if(type==kBckgASide)
6119 Double_t sumPtASide = 0.;
6120 TList* tracklistaside = new TList();
6121 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,GetFFRadius(),sumPtASide);
6122 fh1ASideMult->Fill(tracklistaside->GetSize());
6124 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
6126 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
6127 if(!trackVP) continue;
6128 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6130 Float_t jetPt = jet->Pt();
6131 Float_t trackPt = trackV->Pt();
6133 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6135 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6136 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6138 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6139 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6141 // Fill track QA for background
6142 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6146 if(tracklistaside->GetSize()==0) {
6147 Float_t jetPt = jet->Pt();
6148 Bool_t incrementJetPt = kTRUE;
6149 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6150 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6153 delete tracklistaside;
6156 if(type==kBckgASideWindow)
6158 Double_t normFactorASide = 0.;
6159 Double_t sumPtASideW = 0.;
6160 TList* tracklistasidew = new TList();
6161 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,GetFFRadius(),sumPtASideW,normFactorASide);
6162 fh1ASideWindowMult->Fill(tracklistasidew->GetSize());
6164 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
6166 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
6167 if(!trackVP) continue;
6168 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6170 Float_t jetPt = jet->Pt();
6171 Float_t trackPt = trackV->Pt();
6172 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6174 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
6175 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorASide);
6177 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorASide );
6178 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorASide );
6180 // Fill track QA for background
6181 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
6185 if(tracklistasidew->GetSize()==0) {
6186 Float_t jetPt = jet->Pt();
6187 Bool_t incrementJetPt = kTRUE;
6188 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
6189 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorASide);
6192 delete tracklistasidew;
6195 if(type==kBckgPerpWindow)
6197 Double_t normFactorPerp = 0.;
6198 Double_t sumPtPerpW = 0.;
6199 TList* tracklistperpw = new TList();
6200 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,GetFFRadius(),sumPtPerpW,normFactorPerp);
6201 fh1PerpWindowMult->Fill(tracklistperpw->GetSize());
6203 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
6205 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
6206 if(!trackVP) continue;
6207 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6209 Float_t jetPt = jet->Pt();
6210 Float_t trackPt = trackV->Pt();
6211 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6213 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
6214 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorPerp);
6216 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorPerp );
6217 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorPerp );
6219 // Fill track QA for background
6220 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
6224 if(tracklistperpw->GetSize()==0) {
6225 Float_t jetPt = jet->Pt();
6226 Bool_t incrementJetPt = kTRUE;
6227 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
6228 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorPerp);
6231 delete tracklistperpw;
6235 if(type==kBckgOut2J || type==kBckgOutAJ)
6237 if(type==kBckgOut2J) fh1Out2JetsMult->Fill(tracklistout2jets->GetSize());
6238 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
6240 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
6241 if(!trackVP) continue;
6242 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6244 Float_t jetPt = jet->Pt();
6245 Float_t trackPt = trackV->Pt();
6247 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6249 if(type==kBckgOut2J)
6251 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6252 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6254 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6255 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6257 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6260 // All cases included
6261 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6263 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6264 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6266 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6267 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6271 // Increment jet pt with one entry in case #tracks outside jets = 0
6272 if(tracklistout2jets->GetSize()==0) {
6273 Float_t jetPt = jet->Pt();
6274 Bool_t incrementJetPt = kTRUE;
6275 if(type==kBckgOut2J)
6277 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6278 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6280 // All cases included
6281 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6283 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6284 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6290 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
6292 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
6294 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
6295 if(!trackVP) continue;
6296 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6298 Float_t jetPt = jet->Pt();
6299 Float_t trackPt = trackV->Pt();
6300 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6302 if(type==kBckgOut2JStat)
6304 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
6305 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6307 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
6308 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6310 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6313 // All cases included
6314 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6316 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
6317 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6319 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
6320 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6322 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6326 // Increment jet pt with one entry in case #tracks outside jets = 0
6327 if(tracklistout2jetsStat->GetSize()==0) {
6328 Float_t jetPt = jet->Pt();
6329 Bool_t incrementJetPt = kTRUE;
6330 if(type==kBckgOut2JStat)
6332 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6333 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets);
6335 // All cases included
6336 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6338 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6339 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets );
6345 if(type==kBckgOut3J || type==kBckgOutAJ)
6347 if(type==kBckgOut3J) fh1Out3JetsMult->Fill(tracklistout3jets->GetSize());
6349 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
6351 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
6352 if(!trackVP) continue;
6353 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6355 Float_t jetPt = jet->Pt();
6356 Float_t trackPt = trackV->Pt();
6358 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6360 if(type==kBckgOut3J)
6362 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6363 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6365 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6366 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6368 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6371 // All cases included
6372 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6374 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6375 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6377 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6378 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6382 // Increment jet pt with one entry in case #tracks outside jets = 0
6383 if(tracklistout3jets->GetSize()==0) {
6384 Float_t jetPt = jet->Pt();
6385 Bool_t incrementJetPt = kTRUE;
6386 if(type==kBckgOut3J)
6388 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6389 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6391 // All cases included
6392 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6394 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6395 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6400 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
6402 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
6404 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
6405 if(!trackVP) continue;
6406 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6408 Float_t jetPt = jet->Pt();
6409 Float_t trackPt = trackV->Pt();
6410 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6412 if(type==kBckgOut3JStat)
6414 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
6415 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6417 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets);
6418 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets);
6420 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
6423 // All cases included
6424 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6426 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
6427 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6429 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets );
6430 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets );
6432 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6437 // Increment jet pt with one entry in case #tracks outside jets = 0
6438 if(tracklistout3jetsStat->GetSize()==0) {
6439 Float_t jetPt = jet->Pt();
6440 Bool_t incrementJetPt = kTRUE;
6441 if(type==kBckgOut3JStat)
6443 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6444 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets);
6446 // All cases included
6447 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6449 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6450 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets );
6456 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
6458 TList* tracklistClustersOutLeading = new TList();
6459 Double_t normFactorClusters = 0;
6460 Float_t jetPt = jet->Pt();
6462 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
6463 fh1OutClustersMult->Fill(tracklistClustersOutLeading->GetSize());
6465 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
6467 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
6468 if(!trackVP) continue;
6469 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6471 Float_t trackPt = trackVP->Pt();
6473 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6475 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6476 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
6481 delete tracklistClustersOutLeading;
6485 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
6487 TList* tracklistClustersMedian = new TList();
6488 Double_t normFactorClusters = 0;
6489 Float_t jetPt = jet->Pt();
6491 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
6492 fh1MedianClustersMult->Fill(tracklistClustersMedian->GetSize());
6494 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
6496 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->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 tracklistClustersMedian;
6513 delete tracklistout2jets;
6514 delete tracklistout3jets;
6515 delete tracklistout2jetsStat;
6516 delete tracklistout3jetsStat;
6520 // ______________________________________________________________________________________________________________________________________________________
6521 AliAODJet* AliAnalysisTaskFragmentationFunction::GetAODBckgSubJet(AliAODJet* jet, Int_t method)
6523 // correct jet pt for (mean bgr energy density) x (jet area)
6525 if(!fBranchRecBackJets.Length()){
6526 if(fDebug>0)Printf("%s:%d background branch name not set",(char*)__FILE__,__LINE__);
6530 static AliAODJetEventBackground* externalBackground = (AliAODJetEventBackground*)(fAOD->FindListObject(fBranchRecBackJets.Data()));
6532 if(!externalBackground){
6533 if(fDebug>0)Printf("%s:%d no external background object found in %s",(char*)__FILE__,__LINE__,fBranchRecBackJets.Data());
6537 Float_t rho = externalBackground->GetBackground(method);
6539 // Calculate background and subtract it from jet pt
6540 Float_t ptBack = rho*jet->EffectiveAreaCharged();
6541 Float_t ptSub = jet->Pt()-ptBack;
6543 // Get px, py, pz from eta, phi, pt
6544 TLorentzVector vecSub;
6545 AliAODJet *tmpJet = 0;
6547 vecSub.SetPtEtaPhiM(ptSub,jet->Eta(),jet->Phi(),0.);
6548 tmpJet = new AliAODJet(vecSub.Px(),vecSub.Py(),vecSub.Pz(),vecSub.P());