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)
83 ,fUseExtraTracksBgr(0)
84 ,fCutFractionPtEmbedded(0)
85 ,fUseEmbeddedJetAxis(0)
94 ,fDiJetPtFractionCut(0)
108 ,fUseRecEffRecJetPtBins(0)
109 ,fUseResponseRecJetPtBins(1)
114 ,fTracksAODMCCharged(0)
115 ,fTracksAODMCChargedSec(0)
116 ,fTracksRecQualityCuts(0)
125 ,fQATrackHistosRec(0)
126 ,fQATrackHistosRecCuts(0)
127 ,fQATrackHistosGen(0)
129 ,fQAJetHistosRecCuts(0)
130 ,fQAJetHistosRecCutsLeading(0)
132 ,fQAJetHistosGenLeading(0)
133 ,fQAJetHistosRecEffLeading(0)
135 ,fFFHistosRecLeading(0)
136 ,fFFHistosRecLeadingTrack(0)
138 ,fFFHistosGenLeading(0)
139 ,fFFHistosGenLeadingTrack(0)
141 ,fIJHistosRecLeading(0)
142 ,fIJHistosRecLeadingTrack(0)
144 ,fIJHistosGenLeading(0)
145 ,fIJHistosGenLeadingTrack(0)
146 ,fFFDiJetHistosRecCuts(0)
147 ,fFFDiJetHistosRecLeading(0)
148 ,fFFDiJetHistosRecLeadingTrack(0)
149 ,fFFDiJetHistosGen(0)
150 ,fFFDiJetHistosGenLeading(0)
151 ,fFFDiJetHistosGenLeadingTrack(0)
152 ,fQADiJetHistosRecCuts(0)
153 ,fQADiJetHistosGen(0)
154 ,fPhiCorrHistosJetArea(0)
155 ,fPhiCorrHistosTransverseArea(0)
156 ,fPhiCorrHistosAwayArea(0)
157 ,fQATrackHighPtThreshold(0)
206 ,fDiJetNBinsJetInvMass(0)
207 ,fDiJetJetInvMassMin(0)
208 ,fDiJetJetInvMassMax(0)
221 ,fQADiJetNBinsInvMass(0)
222 ,fQADiJetInvMassMin(0)
223 ,fQADiJetInvMassMax(0)
224 ,fQADiJetNBinsJetPt(0)
227 ,fQADiJetNBinsDeltaPhi(0)
228 ,fQADiJetDeltaPhiMin(0)
229 ,fQADiJetDeltaPhiMax(0)
230 ,fQADiJetNBinsDeltaEta(0)
231 ,fQADiJetDeltaEtaMin(0)
232 ,fQADiJetDeltaEtaMax(0)
233 ,fQADiJetNBinsDeltaPt(0)
234 ,fQADiJetDeltaPtMin(0)
235 ,fQADiJetDeltaPtMax(0)
236 ,fQADiJetNBinsInBal(0)
250 ,fh1VertexNContributors(0)
254 ,fh2TrackPtVsDCAXY(0)
264 ,fh1nRecBckgJetsCuts(0)
266 ,fh2PtRecVsGenPrim(0)
268 ,fQATrackHistosRecEffGen(0)
269 ,fQATrackHistosRecEffRec(0)
270 ,fQATrackHistosSecRec(0)
271 ,fFFHistosRecEffGen(0)
272 ,fFFHistosRecEffRec(0)
274 ,fhnResponseSinglePt(0)
275 ,fh2SingleInvPtRecMnGenVsPtGen(0)
276 ,fhnResponseJetTrackPt(0)
280 ,fh1OutLeadingMult(0)
281 ,fh1OutLeadingStatMult(0)
284 ,fh1ASideWindowMult(0)
285 ,fh1PerpWindowMult(0)
288 ,fh1MedianClustersMult(0)
289 ,fh1OutClustersMult(0)
290 ,fh1FractionPtEmbedded(0)
292 ,fh2DeltaPtVsJetPtEmbedded(0)
293 ,fh2DeltaPtVsRecJetPtEmbedded(0)
294 ,fh1DeltaREmbedded(0)
295 ,fh2ptVsDistNN_pt50_rec(0)
296 ,fh2ptVsDistNN_pt50_nonRec(0)
297 ,fh2ptVsDistNN_pt10_rec(0)
298 ,fh2ptVsDistNN_pt10_nonRec(0)
299 ,fQABckgHisto0RecCuts(0)
301 ,fQABckgHisto1RecCuts(0)
303 ,fQABckgHisto2RecCuts(0)
305 ,fQABckgHisto3RecCuts(0)
307 ,fQABckgHisto4RecCuts(0)
309 ,fFFBckgHisto0RecCuts(0)
310 ,fFFBckgHisto0RecLeading(0)
312 ,fFFBckgHisto0GenLeading(0)
313 ,fFFBckgHisto1RecCuts(0)
314 ,fFFBckgHisto1RecLeading(0)
316 ,fFFBckgHisto1GenLeading(0)
317 ,fFFBckgHisto2RecCuts(0)
318 ,fFFBckgHisto2RecLeading(0)
320 ,fFFBckgHisto2GenLeading(0)
321 ,fFFBckgHisto3RecCuts(0)
322 ,fFFBckgHisto3RecLeading(0)
324 ,fFFBckgHisto3GenLeading(0)
325 ,fFFBckgHisto4RecCuts(0)
326 ,fFFBckgHisto4RecLeading(0)
328 ,fFFBckgHisto4GenLeading(0)
329 ,fIJBckgHisto0RecCuts(0)
330 ,fIJBckgHisto0RecLeading(0)
332 ,fIJBckgHisto0GenLeading(0)
333 ,fIJBckgHisto1RecCuts(0)
334 ,fIJBckgHisto1RecLeading(0)
336 ,fIJBckgHisto1GenLeading(0)
337 ,fIJBckgHisto2RecCuts(0)
338 ,fIJBckgHisto2RecLeading(0)
340 ,fIJBckgHisto2GenLeading(0)
341 ,fIJBckgHisto3RecCuts(0)
342 ,fIJBckgHisto3RecLeading(0)
344 ,fIJBckgHisto3GenLeading(0)
345 ,fIJBckgHisto4RecCuts(0)
346 ,fIJBckgHisto4RecLeading(0)
348 ,fIJBckgHisto4GenLeading(0)
352 // default constructor
360 //__________________________________________________________________________________________
361 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name)
362 : AliAnalysisTaskSE(name)
368 ,fBranchRecJets("jets")
369 ,fBranchRecBackJets("")
370 ,fBranchRecBckgClusters("")
372 ,fBranchEmbeddedJets("")
376 ,fUseAODInputJets(kTRUE)
378 ,fUsePhysicsSelection(kTRUE)
387 ,fUseExtraTracksBgr(0)
388 ,fCutFractionPtEmbedded(0)
389 ,fUseEmbeddedJetAxis(0)
390 ,fUseEmbeddedJetPt(0)
397 ,fDiJetDeltaPhiCut(0)
398 ,fDiJetPtFractionCut(0)
412 ,fUseRecEffRecJetPtBins(0)
413 ,fUseResponseRecJetPtBins(1)
418 ,fTracksAODMCCharged(0)
419 ,fTracksAODMCChargedSec(0)
420 ,fTracksRecQualityCuts(0)
429 ,fQATrackHistosRec(0)
430 ,fQATrackHistosRecCuts(0)
431 ,fQATrackHistosGen(0)
433 ,fQAJetHistosRecCuts(0)
434 ,fQAJetHistosRecCutsLeading(0)
436 ,fQAJetHistosGenLeading(0)
437 ,fQAJetHistosRecEffLeading(0)
439 ,fFFHistosRecLeading(0)
440 ,fFFHistosRecLeadingTrack(0)
442 ,fFFHistosGenLeading(0)
443 ,fFFHistosGenLeadingTrack(0)
445 ,fIJHistosRecLeading(0)
446 ,fIJHistosRecLeadingTrack(0)
448 ,fIJHistosGenLeading(0)
449 ,fIJHistosGenLeadingTrack(0)
450 ,fFFDiJetHistosRecCuts(0)
451 ,fFFDiJetHistosRecLeading(0)
452 ,fFFDiJetHistosRecLeadingTrack(0)
453 ,fFFDiJetHistosGen(0)
454 ,fFFDiJetHistosGenLeading(0)
455 ,fFFDiJetHistosGenLeadingTrack(0)
456 ,fQADiJetHistosRecCuts(0)
457 ,fQADiJetHistosGen(0)
458 ,fPhiCorrHistosJetArea(0)
459 ,fPhiCorrHistosTransverseArea(0)
460 ,fPhiCorrHistosAwayArea(0)
461 ,fQATrackHighPtThreshold(0)
510 ,fDiJetNBinsJetInvMass(0)
511 ,fDiJetJetInvMassMin(0)
512 ,fDiJetJetInvMassMax(0)
525 ,fQADiJetNBinsInvMass(0)
526 ,fQADiJetInvMassMin(0)
527 ,fQADiJetInvMassMax(0)
528 ,fQADiJetNBinsJetPt(0)
531 ,fQADiJetNBinsDeltaPhi(0)
532 ,fQADiJetDeltaPhiMin(0)
533 ,fQADiJetDeltaPhiMax(0)
534 ,fQADiJetNBinsDeltaEta(0)
535 ,fQADiJetDeltaEtaMin(0)
536 ,fQADiJetDeltaEtaMax(0)
537 ,fQADiJetNBinsDeltaPt(0)
538 ,fQADiJetDeltaPtMin(0)
539 ,fQADiJetDeltaPtMax(0)
540 ,fQADiJetNBinsInBal(0)
554 ,fh1VertexNContributors(0)
558 ,fh2TrackPtVsDCAXY(0)
568 ,fh1nRecBckgJetsCuts(0)
570 ,fh2PtRecVsGenPrim(0)
572 ,fQATrackHistosRecEffGen(0)
573 ,fQATrackHistosRecEffRec(0)
574 ,fQATrackHistosSecRec(0)
575 ,fFFHistosRecEffGen(0)
576 ,fFFHistosRecEffRec(0)
578 ,fhnResponseSinglePt(0)
579 ,fh2SingleInvPtRecMnGenVsPtGen(0)
580 ,fhnResponseJetTrackPt(0)
584 ,fh1OutLeadingMult(0)
585 ,fh1OutLeadingStatMult(0)
588 ,fh1ASideWindowMult(0)
589 ,fh1PerpWindowMult(0)
592 ,fh1MedianClustersMult(0)
593 ,fh1OutClustersMult(0)
594 ,fh1FractionPtEmbedded(0)
596 ,fh2DeltaPtVsJetPtEmbedded(0)
597 ,fh2DeltaPtVsRecJetPtEmbedded(0)
598 ,fh1DeltaREmbedded(0)
599 ,fh2ptVsDistNN_pt50_rec(0)
600 ,fh2ptVsDistNN_pt50_nonRec(0)
601 ,fh2ptVsDistNN_pt10_rec(0)
602 ,fh2ptVsDistNN_pt10_nonRec(0)
603 ,fQABckgHisto0RecCuts(0)
605 ,fQABckgHisto1RecCuts(0)
607 ,fQABckgHisto2RecCuts(0)
609 ,fQABckgHisto3RecCuts(0)
611 ,fQABckgHisto4RecCuts(0)
613 ,fFFBckgHisto0RecCuts(0)
614 ,fFFBckgHisto0RecLeading(0)
616 ,fFFBckgHisto0GenLeading(0)
617 ,fFFBckgHisto1RecCuts(0)
618 ,fFFBckgHisto1RecLeading(0)
620 ,fFFBckgHisto1GenLeading(0)
621 ,fFFBckgHisto2RecCuts(0)
622 ,fFFBckgHisto2RecLeading(0)
624 ,fFFBckgHisto2GenLeading(0)
625 ,fFFBckgHisto3RecCuts(0)
626 ,fFFBckgHisto3RecLeading(0)
628 ,fFFBckgHisto3GenLeading(0)
629 ,fFFBckgHisto4RecCuts(0)
630 ,fFFBckgHisto4RecLeading(0)
632 ,fFFBckgHisto4GenLeading(0)
633 ,fIJBckgHisto0RecCuts(0)
634 ,fIJBckgHisto0RecLeading(0)
636 ,fIJBckgHisto0GenLeading(0)
637 ,fIJBckgHisto1RecCuts(0)
638 ,fIJBckgHisto1RecLeading(0)
640 ,fIJBckgHisto1GenLeading(0)
641 ,fIJBckgHisto2RecCuts(0)
642 ,fIJBckgHisto2RecLeading(0)
644 ,fIJBckgHisto2GenLeading(0)
645 ,fIJBckgHisto3RecCuts(0)
646 ,fIJBckgHisto3RecLeading(0)
648 ,fIJBckgHisto3GenLeading(0)
649 ,fIJBckgHisto4RecCuts(0)
650 ,fIJBckgHisto4RecLeading(0)
652 ,fIJBckgHisto4GenLeading(0)
663 DefineOutput(1,TList::Class());
668 //__________________________________________________________________________________________________________________________
669 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction ©)
670 : AliAnalysisTaskSE()
673 ,fAODJets(copy.fAODJets)
674 ,fAODExtension(copy.fAODExtension)
675 ,fNonStdFile(copy.fNonStdFile)
676 ,fBranchRecJets(copy.fBranchRecJets)
677 ,fBranchRecBackJets(copy.fBranchRecBackJets)
678 ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
679 ,fBranchGenJets(copy.fBranchGenJets)
680 ,fBranchEmbeddedJets(copy.fBranchEmbeddedJets)
681 ,fTrackTypeGen(copy.fTrackTypeGen)
682 ,fJetTypeGen(copy.fJetTypeGen)
683 ,fJetTypeRecEff(copy.fJetTypeRecEff)
684 ,fUseAODInputJets(copy.fUseAODInputJets)
685 ,fFilterMask(copy.fFilterMask)
686 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
687 ,fEventClass(copy.fEventClass)
688 ,fMaxVertexZ(copy.fMaxVertexZ)
689 ,fTrackPtCut(copy.fTrackPtCut)
690 ,fTrackEtaMin(copy.fTrackEtaMin)
691 ,fTrackEtaMax(copy.fTrackEtaMax)
692 ,fTrackPhiMin(copy.fTrackPhiMin)
693 ,fTrackPhiMax(copy.fTrackPhiMax)
694 ,fUseExtraTracks(copy.fUseExtraTracks)
695 ,fUseExtraTracksBgr(copy.fUseExtraTracksBgr)
696 ,fCutFractionPtEmbedded(copy.fCutFractionPtEmbedded)
697 ,fUseEmbeddedJetAxis(copy.fUseEmbeddedJetAxis)
698 ,fUseEmbeddedJetPt(copy.fUseEmbeddedJetPt)
699 ,fJetPtCut(copy.fJetPtCut)
700 ,fJetEtaMin(copy.fJetEtaMin)
701 ,fJetEtaMax(copy.fJetEtaMax)
702 ,fJetPhiMin(copy.fJetPhiMin)
703 ,fJetPhiMax(copy.fJetPhiMax)
704 ,fDiJetCut(copy.fDiJetCut)
705 ,fDiJetDeltaPhiCut(copy.fDiJetDeltaPhiCut)
706 ,fDiJetPtFractionCut(copy.fDiJetPtFractionCut)
707 ,fDiJetCDFCut(copy.fDiJetCDFCut)
708 ,fDiJetKindBins(copy.fDiJetKindBins)
709 ,fFFRadius(copy.fFFRadius)
710 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
711 ,fFFMinnTracks(copy.fFFMinnTracks)
712 ,fFFBckgRadius(copy.fFFBckgRadius)
713 ,fBckgMode(copy.fBckgMode)
714 ,fIJMode(copy.fIJMode)
715 ,fQAMode(copy.fQAMode)
716 ,fFFMode(copy.fFFMode)
717 ,fDJMode(copy.fDJMode)
718 ,fEffMode(copy.fEffMode)
719 ,fPhiCorrMode(copy.fPhiCorrMode)
720 ,fUseRecEffRecJetPtBins(copy.fUseRecEffRecJetPtBins)
721 ,fUseResponseRecJetPtBins(copy.fUseResponseRecJetPtBins)
722 ,fAvgTrials(copy.fAvgTrials)
723 ,fTracksRec(copy.fTracksRec)
724 ,fTracksRecCuts(copy.fTracksRecCuts)
725 ,fTracksGen(copy.fTracksGen)
726 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
727 ,fTracksAODMCChargedSec(copy.fTracksAODMCChargedSec)
728 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
729 ,fJetsRec(copy.fJetsRec)
730 ,fJetsRecCuts(copy.fJetsRecCuts)
731 ,fJetsGen(copy.fJetsGen)
732 ,fJetsRecEff(copy.fJetsRecEff)
733 ,fJetsEmbedded(copy.fJetsEmbedded)
734 ,fBckgJetsRec(copy.fBckgJetsRec)
735 ,fBckgJetsRecCuts(copy.fBckgJetsRecCuts)
736 ,fBckgJetsGen(copy.fBckgJetsGen)
737 ,fQATrackHistosRec(copy.fQATrackHistosRec)
738 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
739 ,fQATrackHistosGen(copy.fQATrackHistosGen)
740 ,fQAJetHistosRec(copy.fQAJetHistosRec)
741 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
742 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
743 ,fQAJetHistosGen(copy.fQAJetHistosGen)
744 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
745 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
746 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
747 ,fFFHistosRecLeading(copy.fFFHistosRecLeading)
748 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
749 ,fFFHistosGen(copy.fFFHistosGen)
750 ,fFFHistosGenLeading(copy.fFFHistosGenLeading)
751 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
752 ,fIJHistosRecCuts(copy.fIJHistosRecCuts)
753 ,fIJHistosRecLeading(copy.fIJHistosRecLeading)
754 ,fIJHistosRecLeadingTrack(copy.fIJHistosRecLeadingTrack)
755 ,fIJHistosGen(copy.fIJHistosGen)
756 ,fIJHistosGenLeading(copy.fIJHistosGenLeading)
757 ,fIJHistosGenLeadingTrack(copy.fIJHistosGenLeadingTrack)
758 ,fFFDiJetHistosRecCuts(copy.fFFDiJetHistosRecCuts)
759 ,fFFDiJetHistosRecLeading(copy.fFFDiJetHistosRecLeading)
760 ,fFFDiJetHistosRecLeadingTrack(copy.fFFDiJetHistosRecLeadingTrack)
761 ,fFFDiJetHistosGen(copy.fFFDiJetHistosGen)
762 ,fFFDiJetHistosGenLeading(copy.fFFDiJetHistosGenLeading)
763 ,fFFDiJetHistosGenLeadingTrack(copy.fFFDiJetHistosGenLeadingTrack)
764 ,fQADiJetHistosRecCuts(copy.fQADiJetHistosRecCuts)
765 ,fQADiJetHistosGen(copy.fQADiJetHistosGen)
766 ,fPhiCorrHistosJetArea(copy.fPhiCorrHistosJetArea)
767 ,fPhiCorrHistosTransverseArea(copy.fPhiCorrHistosTransverseArea)
768 ,fPhiCorrHistosAwayArea(copy.fPhiCorrHistosAwayArea)
769 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
770 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
771 ,fFFJetPtMin(copy.fFFJetPtMin)
772 ,fFFJetPtMax(copy.fFFJetPtMax)
773 ,fFFNBinsPt(copy.fFFNBinsPt)
774 ,fFFPtMin(copy.fFFPtMin)
775 ,fFFPtMax(copy.fFFPtMax)
776 ,fFFNBinsXi(copy.fFFNBinsXi)
777 ,fFFXiMin(copy.fFFXiMin)
778 ,fFFXiMax(copy.fFFXiMax)
779 ,fFFNBinsZ(copy.fFFNBinsZ)
780 ,fFFZMin(copy.fFFZMin)
781 ,fFFZMax(copy.fFFZMax)
782 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
783 ,fQAJetPtMin(copy.fQAJetPtMin)
784 ,fQAJetPtMax(copy.fQAJetPtMax)
785 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
786 ,fQAJetEtaMin(copy.fQAJetEtaMin)
787 ,fQAJetEtaMax(copy.fQAJetEtaMax)
788 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
789 ,fQAJetPhiMin(copy.fQAJetPhiMin)
790 ,fQAJetPhiMax(copy.fQAJetPhiMax)
791 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
792 ,fQATrackPtMin(copy.fQATrackPtMin)
793 ,fQATrackPtMax(copy.fQATrackPtMax)
794 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
795 ,fQATrackEtaMin(copy.fQATrackEtaMin)
796 ,fQATrackEtaMax(copy.fQATrackEtaMax)
797 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
798 ,fQATrackPhiMin(copy.fQATrackPhiMin)
799 ,fQATrackPhiMax(copy.fQATrackPhiMax)
800 ,fIJNBinsJetPt(copy.fIJNBinsJetPt)
801 ,fIJJetPtMin(copy.fIJJetPtMin)
802 ,fIJJetPtMax(copy.fIJJetPtMax)
803 ,fIJNBinsPt(copy.fIJNBinsPt)
804 ,fIJPtMin(copy.fIJPtMin)
805 ,fIJPtMax(copy.fIJPtMax)
806 ,fIJNBinsZ(copy.fIJNBinsZ)
807 ,fIJZMin(copy.fIJZMin)
808 ,fIJZMax(copy.fIJZMax)
809 ,fIJNBinsCosTheta(copy.fIJNBinsCosTheta)
810 ,fIJCosThetaMin(copy.fIJCosThetaMin)
811 ,fIJCosThetaMax(copy.fIJCosThetaMax)
812 ,fIJNBinsTheta(copy.fIJNBinsTheta)
813 ,fIJThetaMin(copy.fIJThetaMin)
814 ,fIJThetaMax(copy.fIJThetaMax)
815 ,fIJNBinsJt(copy.fIJNBinsJt)
816 ,fIJJtMin(copy.fIJJtMin)
817 ,fIJJtMax(copy.fIJJtMax)
818 ,fDiJetNBinsJetInvMass(copy.fDiJetNBinsJetInvMass)
819 ,fDiJetJetInvMassMin(copy.fDiJetJetInvMassMin)
820 ,fDiJetJetInvMassMax(copy.fDiJetJetInvMassMax)
821 ,fDiJetNBinsJetPt(copy.fDiJetNBinsJetPt)
822 ,fDiJetJetPtMin(copy.fDiJetJetPtMin)
823 ,fDiJetJetPtMax(copy.fDiJetJetPtMax)
824 ,fDiJetNBinsPt(copy.fDiJetNBinsPt)
825 ,fDiJetPtMin(copy.fDiJetPtMin)
826 ,fDiJetPtMax(copy.fDiJetPtMax)
827 ,fDiJetNBinsXi(copy.fDiJetNBinsXi)
828 ,fDiJetXiMin(copy.fDiJetXiMin)
829 ,fDiJetXiMax(copy.fDiJetXiMax)
830 ,fDiJetNBinsZ(copy.fDiJetNBinsZ)
831 ,fDiJetZMin(copy.fDiJetZMin)
832 ,fDiJetZMax(copy.fDiJetZMax)
833 ,fQADiJetNBinsInvMass(copy.fQADiJetNBinsInvMass)
834 ,fQADiJetInvMassMin(copy.fQADiJetInvMassMin)
835 ,fQADiJetInvMassMax(copy.fQADiJetInvMassMax)
836 ,fQADiJetNBinsJetPt(copy.fQADiJetNBinsJetPt)
837 ,fQADiJetJetPtMin(copy.fQADiJetJetPtMin)
838 ,fQADiJetJetPtMax(copy.fQADiJetJetPtMax)
839 ,fQADiJetNBinsDeltaPhi(copy.fQADiJetNBinsDeltaPhi)
840 ,fQADiJetDeltaPhiMin(copy.fQADiJetDeltaPhiMin)
841 ,fQADiJetDeltaPhiMax(copy.fQADiJetDeltaPhiMax)
842 ,fQADiJetNBinsDeltaEta(copy.fQADiJetNBinsDeltaEta)
843 ,fQADiJetDeltaEtaMin(copy.fQADiJetDeltaEtaMin)
844 ,fQADiJetDeltaEtaMax(copy.fQADiJetDeltaEtaMax)
845 ,fQADiJetNBinsDeltaPt(copy.fQADiJetNBinsDeltaPt)
846 ,fQADiJetDeltaPtMin(copy.fQADiJetDeltaPtMin)
847 ,fQADiJetDeltaPtMax(copy.fQADiJetDeltaPtMax)
848 ,fQADiJetNBinsInBal(copy.fQADiJetNBinsInBal)
849 ,fQADiJetInBalMin(copy.fQADiJetInBalMin)
850 ,fQADiJetInBalMax(copy.fQADiJetInBalMax)
851 ,fPhiCorrNBinsPt(copy.fPhiCorrNBinsPt)
852 ,fPhiCorrPtMin(copy.fPhiCorrPtMin)
853 ,fPhiCorrPtMax(copy.fPhiCorrPtMax)
854 ,fPhiCorrNBinsEta(copy.fPhiCorrNBinsEta)
855 ,fPhiCorrEtaMin(copy.fPhiCorrEtaMin)
856 ,fPhiCorrEtaMax(copy.fPhiCorrEtaMax)
857 ,fPhiCorrNBinsPhi(copy.fPhiCorrNBinsPhi)
858 ,fPhiCorrPhiMin(copy.fPhiCorrPhiMin)
859 ,fPhiCorrPhiMax(copy.fPhiCorrPhiMax)
860 ,fCommonHistList(copy.fCommonHistList)
861 ,fh1EvtSelection(copy.fh1EvtSelection)
862 ,fh1VertexNContributors(copy.fh1VertexNContributors)
863 ,fh1VertexZ(copy.fh1VertexZ)
864 ,fh1EvtMult(copy.fh1EvtMult)
865 ,fh1EvtCent(copy.fh1EvtCent)
866 ,fh2TrackPtVsDCAXY(copy.fh2TrackPtVsDCAXY)
867 ,fh2TrackPtVsDCAZ(copy.fh2TrackPtVsDCAXY)
868 ,fh1Xsec(copy.fh1Xsec)
869 ,fh1Trials(copy.fh1Trials)
870 ,fh1PtHard(copy.fh1PtHard)
871 ,fh1PtHardTrials(copy.fh1PtHardTrials)
872 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
873 ,fh1nGenJets(copy.fh1nGenJets)
874 ,fh1nRecEffJets(copy.fh1nRecEffJets)
875 ,fh1nEmbeddedJets(copy.fh1nEmbeddedJets)
876 ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts)
877 ,fh1nGenBckgJets(copy.fh1nGenBckgJets)
878 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
879 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
880 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
881 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
882 ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec)
883 ,fFFHistosRecEffGen(copy.fFFHistosRecEffGen)
884 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
885 ,fFFHistosSecRec(copy.fFFHistosSecRec)
886 ,fhnResponseSinglePt(copy.fhnResponseSinglePt)
887 ,fh2SingleInvPtRecMnGenVsPtGen(copy.fh2SingleInvPtRecMnGenVsPtGen)
888 ,fhnResponseJetTrackPt(copy.fhnResponseJetTrackPt)
889 ,fhnResponseJetZ(copy.fhnResponseJetZ)
890 ,fhnResponseJetXi(copy.fhnResponseJetXi)
892 ,fh1OutLeadingMult(copy.fh1OutLeadingMult)
893 ,fh1OutLeadingStatMult(copy.fh1OutLeadingStatMult)
894 ,fh1PerpMult(copy.fh1PerpMult)
895 ,fh1ASideMult(copy.fh1ASideMult)
896 ,fh1ASideWindowMult(copy.fh1ASideWindowMult)
897 ,fh1PerpWindowMult(copy.fh1PerpWindowMult)
898 ,fh1Out2JetsMult(copy.fh1Out2JetsMult)
899 ,fh1Out3JetsMult(copy.fh1Out3JetsMult)
900 ,fh1MedianClustersMult(copy.fh1MedianClustersMult)
901 ,fh1OutClustersMult(copy.fh1OutClustersMult)
902 ,fh1FractionPtEmbedded(copy.fh1FractionPtEmbedded)
903 ,fh1IndexEmbedded(copy.fh1IndexEmbedded)
904 ,fh2DeltaPtVsJetPtEmbedded(copy.fh2DeltaPtVsJetPtEmbedded)
905 ,fh2DeltaPtVsRecJetPtEmbedded(copy.fh2DeltaPtVsRecJetPtEmbedded)
906 ,fh1DeltaREmbedded(copy.fh1DeltaREmbedded)
907 ,fh2ptVsDistNN_pt50_rec(copy.fh2ptVsDistNN_pt50_rec)
908 ,fh2ptVsDistNN_pt50_nonRec(copy.fh2ptVsDistNN_pt50_nonRec)
909 ,fh2ptVsDistNN_pt10_rec(copy.fh2ptVsDistNN_pt10_rec)
910 ,fh2ptVsDistNN_pt10_nonRec(copy.fh2ptVsDistNN_pt10_nonRec)
911 ,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
912 ,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
913 ,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
914 ,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
915 ,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
916 ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
917 ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
918 ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
919 ,fQABckgHisto4RecCuts(copy.fQABckgHisto4RecCuts)
920 ,fQABckgHisto4Gen(copy.fQABckgHisto4Gen)
921 ,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
922 ,fFFBckgHisto0RecLeading(copy.fFFBckgHisto0RecLeading)
923 ,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
924 ,fFFBckgHisto0GenLeading(copy.fFFBckgHisto0GenLeading)
925 ,fFFBckgHisto1RecCuts(copy.fFFBckgHisto1RecCuts)
926 ,fFFBckgHisto1RecLeading(copy.fFFBckgHisto1RecLeading)
927 ,fFFBckgHisto1Gen(copy.fFFBckgHisto1Gen)
928 ,fFFBckgHisto1GenLeading(copy.fFFBckgHisto1GenLeading)
929 ,fFFBckgHisto2RecCuts(copy.fFFBckgHisto2RecCuts)
930 ,fFFBckgHisto2RecLeading(copy.fFFBckgHisto2RecLeading)
931 ,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
932 ,fFFBckgHisto2GenLeading(copy.fFFBckgHisto2GenLeading)
933 ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
934 ,fFFBckgHisto3RecLeading(copy.fFFBckgHisto3RecLeading)
935 ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
936 ,fFFBckgHisto3GenLeading(copy.fFFBckgHisto3GenLeading)
937 ,fFFBckgHisto4RecCuts(copy.fFFBckgHisto4RecCuts)
938 ,fFFBckgHisto4RecLeading(copy.fFFBckgHisto4RecLeading)
939 ,fFFBckgHisto4Gen(copy.fFFBckgHisto4Gen)
940 ,fFFBckgHisto4GenLeading(copy.fFFBckgHisto4GenLeading)
941 ,fIJBckgHisto0RecCuts(copy.fIJBckgHisto0RecCuts)
942 ,fIJBckgHisto0RecLeading(copy.fIJBckgHisto0RecLeading)
943 ,fIJBckgHisto0Gen(copy.fIJBckgHisto0Gen)
944 ,fIJBckgHisto0GenLeading(copy.fIJBckgHisto0GenLeading)
945 ,fIJBckgHisto1RecCuts(copy.fIJBckgHisto1RecCuts)
946 ,fIJBckgHisto1RecLeading(copy.fIJBckgHisto1RecLeading)
947 ,fIJBckgHisto1Gen(copy.fIJBckgHisto1Gen)
948 ,fIJBckgHisto1GenLeading(copy.fIJBckgHisto1GenLeading)
949 ,fIJBckgHisto2RecCuts(copy.fIJBckgHisto2RecCuts)
950 ,fIJBckgHisto2RecLeading(copy.fIJBckgHisto2RecLeading)
951 ,fIJBckgHisto2Gen(copy.fIJBckgHisto2Gen)
952 ,fIJBckgHisto2GenLeading(copy.fIJBckgHisto2GenLeading)
953 ,fIJBckgHisto3RecCuts(copy.fIJBckgHisto3RecCuts)
954 ,fIJBckgHisto3RecLeading(copy.fIJBckgHisto3RecLeading)
955 ,fIJBckgHisto3Gen(copy.fIJBckgHisto3Gen)
956 ,fIJBckgHisto3GenLeading(copy.fIJBckgHisto3GenLeading)
957 ,fIJBckgHisto4RecCuts(copy.fIJBckgHisto4RecCuts)
958 ,fIJBckgHisto4RecLeading(copy.fIJBckgHisto4RecLeading)
959 ,fIJBckgHisto4Gen(copy.fIJBckgHisto4Gen)
960 ,fIJBckgHisto4GenLeading(copy.fIJBckgHisto4GenLeading)
961 ,fRandom(copy.fRandom)
962 ,fBckgSubMethod(copy.fBckgSubMethod)
965 fBckgType[0] = copy.fBckgType[0];
966 fBckgType[1] = copy.fBckgType[1];
967 fBckgType[2] = copy.fBckgType[2];
968 fBckgType[3] = copy.fBckgType[3];
969 fBckgType[4] = copy.fBckgType[4];
972 // _________________________________________________________________________________________________________________________________
973 AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
979 AliAnalysisTaskSE::operator=(o);
982 fAODJets = o.fAODJets;
983 fAODExtension = o.fAODExtension;
984 fNonStdFile = o.fNonStdFile;
985 fBranchRecJets = o.fBranchRecJets;
986 fBranchRecBackJets = o.fBranchRecBackJets;
987 fBranchRecBckgClusters = o.fBranchRecBckgClusters;
988 fBranchGenJets = o.fBranchGenJets;
989 fBranchEmbeddedJets = o.fBranchEmbeddedJets;
990 fTrackTypeGen = o.fTrackTypeGen;
991 fJetTypeGen = o.fJetTypeGen;
992 fJetTypeRecEff = o.fJetTypeRecEff;
993 fUseAODInputJets = o.fUseAODInputJets;
994 fFilterMask = o.fFilterMask;
995 fUsePhysicsSelection = o.fUsePhysicsSelection;
996 fEventClass = o.fEventClass;
997 fMaxVertexZ = o.fMaxVertexZ;
998 fTrackPtCut = o.fTrackPtCut;
999 fTrackEtaMin = o.fTrackEtaMin;
1000 fTrackEtaMax = o.fTrackEtaMax;
1001 fTrackPhiMin = o.fTrackPhiMin;
1002 fTrackPhiMax = o.fTrackPhiMax;
1003 fUseExtraTracks = o.fUseExtraTracks;
1004 fUseExtraTracksBgr = o.fUseExtraTracksBgr;
1005 fCutFractionPtEmbedded = o.fCutFractionPtEmbedded;
1006 fUseEmbeddedJetAxis = o.fUseEmbeddedJetAxis;
1007 fUseEmbeddedJetPt = o.fUseEmbeddedJetPt;
1008 fJetPtCut = o.fJetPtCut;
1009 fJetEtaMin = o.fJetEtaMin;
1010 fJetEtaMax = o.fJetEtaMax;
1011 fJetPhiMin = o.fJetPhiMin;
1012 fJetPhiMax = o.fJetPhiMin;
1013 fDiJetCut = o.fDiJetCut;
1014 fDiJetDeltaPhiCut = o.fDiJetDeltaPhiCut;
1015 fDiJetPtFractionCut = o.fDiJetPtFractionCut;
1016 fDiJetCDFCut = o.fDiJetCDFCut;
1017 fDiJetKindBins = o.fDiJetKindBins;
1018 fFFRadius = o.fFFRadius;
1019 fFFMaxTrackPt = o.fFFMaxTrackPt;
1020 fFFMinnTracks = o.fFFMinnTracks;
1021 fFFBckgRadius = o.fFFBckgRadius;
1022 fBckgMode = o.fBckgMode;
1023 fIJMode = o.fIJMode;
1024 fQAMode = o.fQAMode;
1025 fFFMode = o.fFFMode;
1026 fDJMode = o.fDJMode;
1027 fEffMode = o.fEffMode;
1028 fPhiCorrMode = o.fPhiCorrMode;
1029 fBckgType[0] = o.fBckgType[0];
1030 fBckgType[1] = o.fBckgType[1];
1031 fBckgType[2] = o.fBckgType[2];
1032 fBckgType[3] = o.fBckgType[3];
1033 fBckgType[4] = o.fBckgType[4];
1034 fUseRecEffRecJetPtBins = o.fUseRecEffRecJetPtBins;
1035 fUseResponseRecJetPtBins = o.fUseResponseRecJetPtBins;
1036 fAvgTrials = o.fAvgTrials;
1037 fTracksRec = o.fTracksRec;
1038 fTracksRecCuts = o.fTracksRecCuts;
1039 fTracksGen = o.fTracksGen;
1040 fTracksAODMCCharged = o.fTracksAODMCCharged;
1041 fTracksAODMCChargedSec = o.fTracksAODMCChargedSec;
1042 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
1043 fJetsRec = o.fJetsRec;
1044 fJetsRecCuts = o.fJetsRecCuts;
1045 fJetsGen = o.fJetsGen;
1046 fJetsRecEff = o.fJetsRecEff;
1047 fJetsEmbedded = o.fJetsEmbedded;
1048 fBckgJetsRec = o.fBckgJetsRec;
1049 fBckgJetsRecCuts = o.fBckgJetsRecCuts;
1050 fBckgJetsGen = o.fBckgJetsGen;
1051 fQATrackHistosRec = o.fQATrackHistosRec;
1052 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
1053 fQATrackHistosGen = o.fQATrackHistosGen;
1054 fQAJetHistosRec = o.fQAJetHistosRec;
1055 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
1056 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
1057 fQAJetHistosGen = o.fQAJetHistosGen;
1058 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
1059 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
1060 fFFHistosRecCuts = o.fFFHistosRecCuts;
1061 fFFHistosRecLeading = o.fFFHistosRecLeading;
1062 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
1063 fFFHistosGen = o.fFFHistosGen;
1064 fFFHistosGenLeading = o.fFFHistosGenLeading;
1065 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
1066 fIJHistosRecCuts = o.fIJHistosRecCuts;
1067 fIJHistosRecLeading = o.fIJHistosRecLeading;
1068 fIJHistosRecLeadingTrack = o.fIJHistosRecLeadingTrack;
1069 fIJHistosGen = o.fIJHistosGen;
1070 fIJHistosGenLeading = o.fIJHistosGenLeading;
1071 fIJHistosGenLeadingTrack = o.fIJHistosGenLeadingTrack;
1072 fFFDiJetHistosRecCuts = o.fFFDiJetHistosRecCuts;
1073 fFFDiJetHistosRecLeading = o.fFFDiJetHistosRecLeading;
1074 fFFDiJetHistosRecLeadingTrack = o.fFFDiJetHistosRecLeadingTrack;
1075 fFFDiJetHistosGen = o.fFFDiJetHistosGen;
1076 fFFDiJetHistosGenLeading = o.fFFDiJetHistosGenLeading;
1077 fFFDiJetHistosGenLeadingTrack = o.fFFDiJetHistosGenLeadingTrack;
1078 fQADiJetHistosRecCuts = o.fQADiJetHistosRecCuts;
1079 fQADiJetHistosGen = o.fQADiJetHistosGen;
1080 fPhiCorrHistosJetArea = o.fPhiCorrHistosJetArea;
1081 fPhiCorrHistosTransverseArea = o.fPhiCorrHistosTransverseArea;
1082 fPhiCorrHistosAwayArea = o.fPhiCorrHistosAwayArea;
1083 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
1084 fFFNBinsJetPt = o.fFFNBinsJetPt;
1085 fFFJetPtMin = o.fFFJetPtMin;
1086 fFFJetPtMax = o.fFFJetPtMax;
1087 fFFNBinsPt = o.fFFNBinsPt;
1088 fFFPtMin = o.fFFPtMin;
1089 fFFPtMax = o.fFFPtMax;
1090 fFFNBinsXi = o.fFFNBinsXi;
1091 fFFXiMin = o.fFFXiMin;
1092 fFFXiMax = o.fFFXiMax;
1093 fFFNBinsZ = o.fFFNBinsZ;
1094 fFFZMin = o.fFFZMin;
1095 fFFZMax = o.fFFZMax;
1096 fQAJetNBinsPt = o.fQAJetNBinsPt;
1097 fQAJetPtMin = o.fQAJetPtMin;
1098 fQAJetPtMax = o.fQAJetPtMax;
1099 fQAJetNBinsEta = o.fQAJetNBinsEta;
1100 fQAJetEtaMin = o.fQAJetEtaMin;
1101 fQAJetEtaMax = o.fQAJetEtaMax;
1102 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
1103 fQAJetPhiMin = o.fQAJetPhiMin;
1104 fQAJetPhiMax = o.fQAJetPhiMax;
1105 fQATrackNBinsPt = o.fQATrackNBinsPt;
1106 fQATrackPtMin = o.fQATrackPtMin;
1107 fQATrackPtMax = o.fQATrackPtMax;
1108 fQATrackNBinsEta = o.fQATrackNBinsEta;
1109 fQATrackEtaMin = o.fQATrackEtaMin;
1110 fQATrackEtaMax = o.fQATrackEtaMax;
1111 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
1112 fQATrackPhiMin = o.fQATrackPhiMin;
1113 fQATrackPhiMax = o.fQATrackPhiMax;
1114 fIJNBinsJetPt = o.fIJNBinsJetPt;
1115 fIJJetPtMin = o.fIJJetPtMin;
1116 fIJJetPtMax = o.fIJJetPtMax;
1117 fIJNBinsPt = o.fIJNBinsPt;
1118 fIJPtMin = o.fIJPtMin;
1119 fIJPtMax = o.fIJPtMax;
1120 fIJNBinsZ = o.fIJNBinsZ;
1121 fIJZMin = o.fIJZMin;
1122 fIJZMax = o.fIJZMax;
1123 fIJNBinsCosTheta = o.fIJNBinsCosTheta;
1124 fIJCosThetaMin = o.fIJCosThetaMin;
1125 fIJCosThetaMax = o.fIJCosThetaMax;
1126 fIJNBinsTheta = o.fIJNBinsTheta;
1127 fIJThetaMin = o.fIJThetaMin;
1128 fIJThetaMax = o.fIJThetaMax;
1129 fIJNBinsJt = o.fIJNBinsJt;
1130 fIJJtMin = o.fIJJtMin;
1131 fIJJtMax = o.fIJJtMax;
1132 fDiJetNBinsJetInvMass = o.fDiJetNBinsJetInvMass;
1133 fDiJetJetInvMassMin = o.fDiJetJetInvMassMin;
1134 fDiJetJetInvMassMax = o.fDiJetJetInvMassMax;
1135 fDiJetNBinsJetPt = o.fDiJetNBinsJetPt;
1136 fDiJetJetPtMin = o.fDiJetJetPtMin;
1137 fDiJetJetPtMax = o.fDiJetJetPtMax;
1138 fDiJetNBinsPt = o.fDiJetNBinsPt;
1139 fDiJetPtMin = o.fDiJetPtMin;
1140 fDiJetPtMax = o.fDiJetPtMax;
1141 fDiJetNBinsXi = o.fDiJetNBinsXi;
1142 fDiJetXiMin = o.fDiJetXiMin;
1143 fDiJetXiMax = o.fDiJetXiMax;
1144 fDiJetNBinsZ = o.fDiJetNBinsZ;
1145 fDiJetZMin = o.fDiJetZMin;
1146 fDiJetZMax = o.fDiJetZMax;
1147 fQADiJetNBinsInvMass = o.fQADiJetNBinsInvMass;
1148 fQADiJetInvMassMin = o.fQADiJetInvMassMin;
1149 fQADiJetInvMassMax = o.fQADiJetInvMassMax;
1150 fQADiJetNBinsJetPt = o.fQADiJetNBinsJetPt;
1151 fQADiJetJetPtMin = o.fQADiJetJetPtMin;
1152 fQADiJetJetPtMax = o.fQADiJetJetPtMax;
1153 fQADiJetNBinsDeltaPhi = o.fQADiJetNBinsDeltaPhi;
1154 fQADiJetDeltaPhiMin = o.fQADiJetDeltaPhiMin;
1155 fQADiJetDeltaPhiMax = o.fQADiJetDeltaPhiMax;
1156 fQADiJetNBinsDeltaEta = o.fQADiJetNBinsDeltaEta;
1157 fQADiJetDeltaEtaMin = o.fQADiJetDeltaEtaMin;
1158 fQADiJetDeltaEtaMax = o.fQADiJetDeltaEtaMax;
1159 fQADiJetNBinsDeltaPt = o.fQADiJetNBinsDeltaPt;
1160 fQADiJetDeltaPtMin = o.fQADiJetDeltaPtMin;
1161 fQADiJetDeltaPtMax = o.fQADiJetDeltaPtMax;
1162 fQADiJetNBinsInBal = o.fQADiJetNBinsInBal;
1163 fQADiJetInBalMin = o.fQADiJetInBalMin;
1164 fQADiJetInBalMax = o.fQADiJetInBalMax;
1165 fPhiCorrNBinsPt = o.fPhiCorrNBinsPt;
1166 fPhiCorrPtMin = o.fPhiCorrPtMin;
1167 fPhiCorrPtMax = o.fPhiCorrPtMax;
1168 fPhiCorrNBinsEta = o.fPhiCorrNBinsEta;
1169 fPhiCorrEtaMin = o.fPhiCorrEtaMin;
1170 fPhiCorrEtaMax = o.fPhiCorrEtaMax;
1171 fPhiCorrNBinsPhi = o.fPhiCorrNBinsPhi;
1172 fPhiCorrPhiMin = o.fPhiCorrPhiMin;
1173 fPhiCorrPhiMax = o.fPhiCorrPhiMax;
1174 fCommonHistList = o.fCommonHistList;
1175 fh1EvtSelection = o.fh1EvtSelection;
1176 fh1VertexNContributors = o.fh1VertexNContributors;
1177 fh1VertexZ = o.fh1VertexZ;
1178 fh1EvtMult = o.fh1EvtMult;
1179 fh1EvtCent = o.fh1EvtCent;
1180 fh2TrackPtVsDCAXY = o.fh2TrackPtVsDCAXY;
1181 fh2TrackPtVsDCAZ = o.fh2TrackPtVsDCAXY;
1182 fh1Xsec = o.fh1Xsec;
1183 fh1Trials = o.fh1Trials;
1184 fh1PtHard = o.fh1PtHard;
1185 fh1PtHardTrials = o.fh1PtHardTrials;
1186 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
1187 fh1nGenJets = o.fh1nGenJets;
1188 fh1nRecEffJets = o.fh1nRecEffJets;
1189 fh1nEmbeddedJets = o.fh1nEmbeddedJets;
1190 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
1191 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
1192 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
1193 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
1194 fQATrackHistosSecRec = o.fQATrackHistosSecRec;
1195 fFFHistosRecEffGen = o.fFFHistosRecEffGen;
1196 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
1197 fFFHistosSecRec = o.fFFHistosSecRec;
1198 fhnResponseSinglePt = o.fhnResponseSinglePt;
1199 fh2SingleInvPtRecMnGenVsPtGen = o.fh2SingleInvPtRecMnGenVsPtGen;
1200 fhnResponseJetTrackPt = o.fhnResponseJetTrackPt;
1201 fhnResponseJetZ = o.fhnResponseJetZ;
1202 fhnResponseJetXi = o.fhnResponseJetXi;
1204 fh1OutLeadingMult = o.fh1OutLeadingMult;
1205 fh1OutLeadingStatMult = o.fh1OutLeadingStatMult;
1206 fh1PerpMult = o.fh1PerpMult;
1207 fh1ASideMult = o.fh1ASideMult;
1208 fh1ASideWindowMult = o.fh1ASideWindowMult;
1209 fh1PerpWindowMult = o.fh1PerpWindowMult;
1210 fh1Out2JetsMult = o.fh1Out2JetsMult;
1211 fh1Out3JetsMult = o.fh1Out3JetsMult;
1212 fh1MedianClustersMult = o.fh1MedianClustersMult;
1213 fh1OutClustersMult = o.fh1OutClustersMult;
1214 fh1FractionPtEmbedded = o.fh1FractionPtEmbedded;
1215 fh1IndexEmbedded = o.fh1IndexEmbedded;
1216 fh2DeltaPtVsJetPtEmbedded = o.fh2DeltaPtVsJetPtEmbedded;
1217 fh2DeltaPtVsRecJetPtEmbedded = o.fh2DeltaPtVsRecJetPtEmbedded;
1218 fh1DeltaREmbedded = o.fh1DeltaREmbedded;
1219 fh2ptVsDistNN_pt50_rec = o.fh2ptVsDistNN_pt50_rec;
1220 fh2ptVsDistNN_pt50_nonRec = o.fh2ptVsDistNN_pt50_nonRec;
1221 fh2ptVsDistNN_pt10_rec = o.fh2ptVsDistNN_pt10_rec;
1222 fh2ptVsDistNN_pt10_nonRec = o.fh2ptVsDistNN_pt10_nonRec;
1223 fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
1224 fQABckgHisto0Gen = o.fQABckgHisto0Gen;
1225 fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
1226 fQABckgHisto1Gen = o.fQABckgHisto1Gen;
1227 fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
1228 fQABckgHisto2Gen = o.fQABckgHisto2Gen;
1229 fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
1230 fQABckgHisto3Gen = o.fQABckgHisto3Gen;
1231 fQABckgHisto4RecCuts = o.fQABckgHisto4RecCuts;
1232 fQABckgHisto4Gen = o.fQABckgHisto4Gen;
1233 fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
1234 fFFBckgHisto0RecLeading = o.fFFBckgHisto0RecLeading;
1235 fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
1236 fFFBckgHisto0GenLeading = o.fFFBckgHisto0GenLeading;
1237 fFFBckgHisto1RecCuts = o.fFFBckgHisto1RecCuts;
1238 fFFBckgHisto1RecLeading = o.fFFBckgHisto1RecLeading;
1239 fFFBckgHisto1Gen = o.fFFBckgHisto1Gen;
1240 fFFBckgHisto1GenLeading = o.fFFBckgHisto1GenLeading;
1241 fFFBckgHisto2RecCuts = o.fFFBckgHisto2RecCuts;
1242 fFFBckgHisto2RecLeading = o.fFFBckgHisto2RecLeading;
1243 fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
1244 fFFBckgHisto2GenLeading = o.fFFBckgHisto2GenLeading;
1245 fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
1246 fFFBckgHisto3RecLeading = o.fFFBckgHisto3RecLeading;
1247 fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
1248 fFFBckgHisto3GenLeading = o.fFFBckgHisto3GenLeading;
1249 fFFBckgHisto4RecCuts = o.fFFBckgHisto4RecCuts;
1250 fFFBckgHisto4RecLeading = o.fFFBckgHisto4RecLeading;
1251 fFFBckgHisto4Gen = o.fFFBckgHisto4Gen;
1252 fFFBckgHisto4GenLeading = o.fFFBckgHisto4GenLeading;
1253 fIJBckgHisto0RecCuts = o.fIJBckgHisto0RecCuts;
1254 fIJBckgHisto0RecLeading = o.fIJBckgHisto0RecLeading;
1255 fIJBckgHisto0Gen = o.fIJBckgHisto0Gen;
1256 fIJBckgHisto0GenLeading = o.fIJBckgHisto0GenLeading;
1257 fIJBckgHisto1RecCuts = o.fIJBckgHisto1RecCuts;
1258 fIJBckgHisto1RecLeading = o.fIJBckgHisto1RecLeading;
1259 fIJBckgHisto1Gen = o.fIJBckgHisto1Gen;
1260 fIJBckgHisto1GenLeading = o.fIJBckgHisto1GenLeading;
1261 fIJBckgHisto2RecCuts = o.fIJBckgHisto2RecCuts;
1262 fIJBckgHisto2RecLeading = o.fIJBckgHisto2RecLeading;
1263 fIJBckgHisto2Gen = o.fIJBckgHisto2Gen;
1264 fIJBckgHisto2GenLeading = o.fIJBckgHisto2GenLeading;
1265 fIJBckgHisto3Gen = o.fIJBckgHisto3Gen;
1266 fIJBckgHisto3GenLeading = o.fIJBckgHisto3GenLeading;
1267 fIJBckgHisto4Gen = o.fIJBckgHisto4Gen;
1268 fIJBckgHisto4GenLeading = o.fIJBckgHisto4GenLeading;
1269 fRandom = o.fRandom;
1270 fBckgSubMethod = o.fBckgSubMethod;
1276 //___________________________________________________________________________
1277 AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
1281 if(fTracksRec) delete fTracksRec;
1282 if(fTracksRecCuts) delete fTracksRecCuts;
1283 if(fTracksGen) delete fTracksGen;
1284 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
1285 if(fTracksAODMCChargedSec) delete fTracksAODMCChargedSec;
1286 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
1287 if(fJetsRec) delete fJetsRec;
1288 if(fJetsRecCuts) delete fJetsRecCuts;
1289 if(fJetsGen) delete fJetsGen;
1290 if(fJetsRecEff) delete fJetsRecEff;
1291 if(fJetsEmbedded) delete fJetsEmbedded;
1294 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1295 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1296 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1298 if(fBckgJetsRec) delete fBckgJetsRec;
1299 if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
1300 if(fBckgJetsGen) delete fBckgJetsGen;
1302 if(fRandom) delete fRandom;
1305 //______________________________________________________________________________________________________
1306 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
1307 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1308 Int_t nPt, Float_t ptMin, Float_t ptMax,
1309 Int_t nXi, Float_t xiMin, Float_t xiMax,
1310 Int_t nZ , Float_t zMin , Float_t zMax )
1312 ,fNBinsJetPt(nJetPt)
1313 ,fJetPtMin(jetPtMin)
1314 ,fJetPtMax(jetPtMax)
1330 // default constructor
1334 //___________________________________________________________________________
1335 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
1337 ,fNBinsJetPt(copy.fNBinsJetPt)
1338 ,fJetPtMin(copy.fJetPtMin)
1339 ,fJetPtMax(copy.fJetPtMax)
1340 ,fNBinsPt(copy.fNBinsPt)
1341 ,fPtMin(copy.fPtMin)
1342 ,fPtMax(copy.fPtMax)
1343 ,fNBinsXi(copy.fNBinsXi)
1344 ,fXiMin(copy.fXiMin)
1345 ,fXiMax(copy.fXiMax)
1346 ,fNBinsZ(copy.fNBinsZ)
1349 ,fh2TrackPt(copy.fh2TrackPt)
1352 ,fh1JetPt(copy.fh1JetPt)
1353 ,fNameFF(copy.fNameFF)
1358 //_______________________________________________________________________________________________________________________________________________________________
1359 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
1364 TObject::operator=(o);
1365 fNBinsJetPt = o.fNBinsJetPt;
1366 fJetPtMin = o.fJetPtMin;
1367 fJetPtMax = o.fJetPtMax;
1368 fNBinsPt = o.fNBinsPt;
1371 fNBinsXi = o.fNBinsXi;
1374 fNBinsZ = o.fNBinsZ;
1377 fh2TrackPt = o.fh2TrackPt;
1380 fh1JetPt = o.fh1JetPt;
1381 fNameFF = o.fNameFF;
1387 //_________________________________________________________
1388 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
1392 if(fh1JetPt) delete fh1JetPt;
1393 if(fh2TrackPt) delete fh2TrackPt;
1394 if(fh2Xi) delete fh2Xi;
1395 if(fh2Z) delete fh2Z;
1398 //_________________________________________________________________
1399 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
1403 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
1404 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
1405 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
1406 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
1408 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1409 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1410 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1411 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1414 //_______________________________________________________________________________________________________________
1415 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm)
1419 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1420 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
1422 // Added for proper normalization of FF background estimation
1423 // when zero track are found in the background region
1424 if((int)trackPt==-1) return;
1426 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1427 else fh2TrackPt->Fill(jetPt,trackPt);
1430 if(jetPt>0) z = trackPt / jetPt;
1432 if(z>0) xi = TMath::Log(1/z);
1435 fh2Xi->Fill(jetPt,xi,1/norm);
1436 fh2Z->Fill(jetPt,z,1/norm);
1439 fh2Xi->Fill(jetPt,xi);
1440 fh2Z->Fill(jetPt,z);
1444 //_________________________________________________________________________________
1445 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1447 // add histos to list
1449 list->Add(fh1JetPt);
1451 list->Add(fh2TrackPt);
1456 //_________________________________________________________________________________________________________
1457 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1458 Int_t nPt, Float_t ptMin, Float_t ptMax,
1459 Int_t nEta, Float_t etaMin, Float_t etaMax,
1460 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1475 // default constructor
1478 //____________________________________________________________________________________
1479 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1481 ,fNBinsPt(copy.fNBinsPt)
1482 ,fPtMin(copy.fPtMin)
1483 ,fPtMax(copy.fPtMax)
1484 ,fNBinsEta(copy.fNBinsEta)
1485 ,fEtaMin(copy.fEtaMin)
1486 ,fEtaMax(copy.fEtaMax)
1487 ,fNBinsPhi(copy.fNBinsPhi)
1488 ,fPhiMin(copy.fPhiMin)
1489 ,fPhiMax(copy.fPhiMax)
1490 ,fh2EtaPhi(copy.fh2EtaPhi)
1492 ,fNameQAJ(copy.fNameQAJ)
1497 //________________________________________________________________________________________________________________________________________________________________________
1498 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
1503 TObject::operator=(o);
1504 fNBinsPt = o.fNBinsPt;
1507 fNBinsEta = o.fNBinsEta;
1508 fEtaMin = o.fEtaMin;
1509 fEtaMax = o.fEtaMax;
1510 fNBinsPhi = o.fNBinsPhi;
1511 fPhiMin = o.fPhiMin;
1512 fPhiMax = o.fPhiMax;
1513 fh2EtaPhi = o.fh2EtaPhi;
1515 fNameQAJ = o.fNameQAJ;
1521 //______________________________________________________________
1522 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1526 if(fh2EtaPhi) delete fh2EtaPhi;
1527 if(fh1Pt) delete fh1Pt;
1530 //____________________________________________________________________
1531 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1533 // book jet QA histos
1535 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1536 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1538 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1539 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1542 //____________________________________________________________________________________________________
1543 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1545 // fill jet QA histos
1547 fh2EtaPhi->Fill( eta, phi);
1551 //____________________________________________________________________________________
1552 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1554 // add histos to list
1556 list->Add(fh2EtaPhi);
1560 //___________________________________________________________________________________________________________
1561 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1562 Int_t nPt, Float_t ptMin, Float_t ptMax,
1563 Int_t nEta, Float_t etaMin, Float_t etaMax,
1564 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1576 ,fHighPtThreshold(ptThresh)
1583 // default constructor
1586 //__________________________________________________________________________________________
1587 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1589 ,fNBinsPt(copy.fNBinsPt)
1590 ,fPtMin(copy.fPtMin)
1591 ,fPtMax(copy.fPtMax)
1592 ,fNBinsEta(copy.fNBinsEta)
1593 ,fEtaMin(copy.fEtaMin)
1594 ,fEtaMax(copy.fEtaMax)
1595 ,fNBinsPhi(copy.fNBinsPhi)
1596 ,fPhiMin(copy.fPhiMin)
1597 ,fPhiMax(copy.fPhiMax)
1598 ,fHighPtThreshold(copy.fHighPtThreshold)
1599 ,fh2EtaPhi(copy.fh2EtaPhi)
1601 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1602 ,fh2PhiPt(copy.fh2PhiPt)
1603 ,fNameQAT(copy.fNameQAT)
1608 // _____________________________________________________________________________________________________________________________________________________________________________
1609 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1614 TObject::operator=(o);
1615 fNBinsPt = o.fNBinsPt;
1618 fNBinsEta = o.fNBinsEta;
1619 fEtaMin = o.fEtaMin;
1620 fEtaMax = o.fEtaMax;
1621 fNBinsPhi = o.fNBinsPhi;
1622 fPhiMin = o.fPhiMin;
1623 fPhiMax = o.fPhiMax;
1624 fHighPtThreshold = o.fHighPtThreshold;
1625 fh2EtaPhi = o.fh2EtaPhi;
1627 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1628 fh2PhiPt = o.fh2PhiPt;
1629 fNameQAT = o.fNameQAT;
1635 //___________________________________________________________________
1636 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1640 if(fh2EtaPhi) delete fh2EtaPhi;
1641 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1642 if(fh1Pt) delete fh1Pt;
1643 if(fh2PhiPt) delete fh2PhiPt;
1646 //______________________________________________________________________
1647 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1649 // book track QA histos
1651 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1652 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);
1653 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1654 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1656 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1657 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1658 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1659 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1662 //________________________________________________________________________________________________________
1663 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm)
1665 // fill track QA histos
1666 Float_t weight = 1.;
1667 if(weightPt) weight = pt;
1668 fh2EtaPhi->Fill( eta, phi, weight);
1669 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1670 if(norm) fh1Pt->Fill( pt, 1/norm );
1671 else fh1Pt->Fill( pt );
1672 fh2PhiPt->Fill(phi, pt);
1675 //______________________________________________________________________________________
1676 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1678 // add histos to list
1680 list->Add(fh2EtaPhi);
1681 list->Add(fh2HighPtEtaPhi);
1683 list->Add(fh2PhiPt);
1686 //______________________________________________________________________________________________________
1687 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const char* name,
1688 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1689 Int_t nPt, Float_t ptMin, Float_t ptMax,
1690 Int_t nZ , Float_t zMin , Float_t zMax,
1691 Int_t nCosTheta , Float_t costhetaMin , Float_t costhetaMax,
1692 Int_t nTheta , Float_t thetaMin , Float_t thetaMax,
1693 Int_t nJt , Float_t jtMin , Float_t jtMax)
1695 ,fNBinsJetPt(nJetPt)
1696 ,fJetPtMin(jetPtMin)
1697 ,fJetPtMax(jetPtMax)
1707 ,fNBinsTheta(nTheta)
1708 ,fThetaMin(thetaMin)
1709 ,fThetaMax(thetaMax)
1710 ,fNBinsCosTheta(nCosTheta)
1711 ,fCosThetaMin(costhetaMin)
1712 ,fCosThetaMax(costhetaMax)
1720 // default constructor
1724 //___________________________________________________________________________
1725 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const AliFragFuncIntraJetHistos& copy)
1727 ,fNBinsJetPt(copy.fNBinsJetPt)
1728 ,fJetPtMin(copy.fJetPtMin)
1729 ,fJetPtMax(copy.fJetPtMax)
1730 ,fNBinsPt(copy.fNBinsPt)
1731 ,fPtMin(copy.fPtMin)
1732 ,fPtMax(copy.fPtMax)
1733 ,fNBinsZ(copy.fNBinsZ)
1736 ,fNBinsJt(copy.fNBinsJt)
1737 ,fJtMin(copy.fJtMin)
1738 ,fJtMax(copy.fJtMax)
1739 ,fNBinsTheta(copy.fNBinsTheta)
1740 ,fThetaMin(copy.fThetaMin)
1741 ,fThetaMax(copy.fThetaMax)
1742 ,fNBinsCosTheta(copy.fNBinsCosTheta)
1743 ,fCosThetaMin(copy.fCosThetaMin)
1744 ,fCosThetaMax(copy.fCosThetaMax)
1745 ,fh2CosTheta(copy.fh2CosTheta)
1746 ,fh2PtZ(copy.fh2PtZ)
1747 ,fh3ThetaZ(copy.fh3ThetaZ)
1748 ,fh3JtTheta(copy.fh3JtTheta)
1749 ,fh3JtZ(copy.fh3JtZ)
1750 ,fNameIJ(copy.fNameIJ)
1755 //_______________________________________________________________________________________________________________________________________________________________
1756 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& o)
1761 TObject::operator=(o);
1762 fNBinsJetPt = o.fNBinsJetPt;
1763 fJetPtMin = o.fJetPtMin;
1764 fJetPtMax = o.fJetPtMax;
1765 fNBinsPt = o.fNBinsPt;
1768 fNBinsZ = o.fNBinsZ;
1771 fNBinsJt = o.fNBinsJt;
1774 fNBinsTheta = o.fNBinsTheta;
1775 fThetaMin = o.fThetaMin;
1776 fThetaMax = o.fThetaMax;
1777 fNBinsCosTheta = o.fNBinsCosTheta;
1778 fCosThetaMin = o.fCosThetaMin;
1779 fCosThetaMax = o.fCosThetaMax;
1780 fh2CosTheta = o.fh2CosTheta;
1782 fh3ThetaZ = o.fh3ThetaZ;
1783 fh3JtTheta = o.fh3JtTheta;
1785 fNameIJ = o.fNameIJ;
1791 //_________________________________________________________
1792 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::~AliFragFuncIntraJetHistos()
1797 if(fh2CosTheta) delete fh2CosTheta;
1798 if(fh2PtZ) delete fh2PtZ;
1799 if(fh3ThetaZ) delete fh3ThetaZ;
1800 if(fh3JtTheta) delete fh3JtTheta;
1801 if(fh3JtZ) delete fh3JtZ;
1805 //_________________________________________________________________
1806 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::DefineHistos()
1810 fh2CosTheta = new TH2F(Form("fh2IJcosTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsCosTheta, fCosThetaMin, fCosThetaMax);
1811 fh2PtZ = new TH2F(Form("fh2IJPtZ%s",fNameIJ.Data()),"",fNBinsPt, fPtMin, fPtMax, fNBinsZ, fZMin, fZMax);
1812 fh3ThetaZ = new TH3F(Form("fh3IJThetaZ%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsTheta, fThetaMin, fThetaMax, fNBinsZ, fZMin, fZMax);
1813 fh3JtTheta = new TH3F(Form("fh3IJJtTheta%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax, fNBinsTheta, fThetaMin, fThetaMax);
1814 fh3JtZ = new TH3F(Form("fh3IJJtZ%s",fNameIJ.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax, fNBinsZ, fZMin, fZMax);
1816 AliAnalysisTaskFragmentationFunction::SetProperties(fh2CosTheta,"jet p_{T} [GeV/c]","cos(#Theta)", "entries");
1817 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PtZ,"had p_{T} [GeV/c]","z=p_{T}^{had}/p_{T}^{jet}","entries");
1818 AliAnalysisTaskFragmentationFunction::SetProperties(fh3ThetaZ,"jet p_{T} [GeV/c]","#Theta [rad]","z=p_{T}^{had}/p_{T}^{jet}");
1819 AliAnalysisTaskFragmentationFunction::SetProperties(fh3JtTheta,"jet p_{T} [GeV/c]","j_{T} [GeV/c]","#Theta [rad]");
1820 AliAnalysisTaskFragmentationFunction::SetProperties(fh3JtZ,"jet p_{T} [GeV/c]","j_{T} [GeV/c]","z=p_{T}^{had}/p_{T}^{jet}");
1824 //_______________________________________________________________________________________________________________
1825 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::FillIntraJet(const TLorentzVector* trackV, const TLorentzVector* jetV, Float_t norm)
1827 // fill IntraJet histos
1829 Float_t cosTheta = 0.; Float_t theta = 0.;
1830 Float_t jt = 0.; Float_t z = 0.;
1831 // For Theta distribution
1832 Float_t pxT = trackV->Px();
1833 Float_t pyT = trackV->Py();
1834 Float_t pzT = trackV->Pz();
1835 Float_t ptT = trackV->Pt();
1836 Float_t pT = trackV->P();
1837 Float_t etaT = trackV->Eta();
1838 Float_t phiT = trackV->Phi(); // Check the value returned
1839 Float_t pxJ = jetV->Px();
1840 Float_t pyJ = jetV->Py();
1841 Float_t pzJ = jetV->Pz();
1842 Float_t ptJ = jetV->Pt();
1843 Float_t pJ = jetV->P();
1846 if(ptJ>0) z = (Float_t)(ptT/ptJ);
1849 cosTheta = (pxT*pxJ+pyT*pyJ+pzT*pzJ)/(pT*pJ);
1850 theta = TMath::ACos(cosTheta);
1853 TVector3 trackP; TVector3 jetP;
1857 trackP.SetPtEtaPhi(ptT,etaT,phiT);
1858 jt = TMath::Sin(trackP.Angle(jetP))*trackP.Mag();
1862 fh2CosTheta->Fill(ptJ,cosTheta,1/norm);
1863 fh2PtZ->Fill(ptT,z,1/norm);
1864 fh3ThetaZ->Fill(ptJ,theta,z,1/norm);
1865 fh3JtTheta->Fill(ptJ,jt,theta,1/norm);
1866 fh3JtZ->Fill(ptJ,jt,z,1/norm);
1869 fh2CosTheta->Fill(ptJ,cosTheta);
1870 fh2PtZ->Fill(ptT,z);
1871 fh3ThetaZ->Fill(ptJ,theta,z);
1872 fh3JtTheta->Fill(ptJ,jt,theta);
1873 fh3JtZ->Fill(ptJ,jt,z);
1878 //______________________________________________________________________________________________________
1879 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const char* name, Int_t kindSlices,
1880 Int_t nJetInvMass, Float_t jetInvMassMin, Float_t jetInvMassMax,
1881 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1882 Int_t nPt, Float_t ptMin, Float_t ptMax,
1883 Int_t nXi, Float_t xiMin, Float_t xiMax,
1884 Int_t nZ , Float_t zMin , Float_t zMax)
1886 ,fKindSlices(kindSlices)
1887 ,fNBinsJetInvMass(nJetInvMass)
1888 ,fJetInvMassMin(jetInvMassMin)
1889 ,fJetInvMassMax(jetInvMassMax)
1890 ,fNBinsJetPt(nJetPt)
1891 ,fJetPtMin(jetPtMin)
1892 ,fJetPtMax(jetPtMax)
1919 // default constructor
1923 //______________________________________________________________________________________________________
1924 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const AliFragFuncDiJetHistos& copy)
1926 ,fKindSlices(copy.fKindSlices)
1927 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1928 ,fJetInvMassMin(copy.fJetInvMassMin)
1929 ,fJetInvMassMax(copy.fJetInvMassMax)
1930 ,fNBinsJetPt(copy.fNBinsJetPt)
1931 ,fJetPtMin(copy.fJetPtMin)
1932 ,fJetPtMax(copy.fJetPtMax)
1933 ,fNBinsPt(copy.fNBinsPt)
1934 ,fPtMin(copy.fPtMin)
1935 ,fPtMax(copy.fPtMax)
1936 ,fNBinsXi(copy.fNBinsXi)
1937 ,fXiMin(copy.fXiMin)
1938 ,fXiMax(copy.fXiMax)
1939 ,fNBinsZ(copy.fNBinsZ)
1942 ,fh2TrackPtJet1(copy.fh2TrackPtJet1)
1943 ,fh2TrackPtJet2(copy.fh2TrackPtJet2)
1944 ,fh2TrackPtJet(copy.fh2TrackPtJet)
1945 ,fh1Jet1Pt(copy.fh1Jet1Pt)
1946 ,fh1Jet2Pt(copy.fh1Jet2Pt)
1947 ,fh1JetPt(copy.fh1JetPt)
1948 ,fh2Xi1(copy.fh2Xi1)
1949 ,fh2Xi2(copy.fh2Xi2)
1954 ,fh2Pt1(copy.fh2Pt1)
1955 ,fh2Pt2(copy.fh2Pt2)
1957 ,fNameDJ(copy.fNameDJ)
1959 // default constructor
1963 //_______________________________________________________________________________________________________________________________________________________________
1964 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& o)
1969 TObject::operator=(o);
1970 fKindSlices = o.fKindSlices;
1971 fNBinsJetInvMass = o.fNBinsJetInvMass;
1972 fJetInvMassMin = o.fJetInvMassMin;
1973 fJetInvMassMax = o.fJetInvMassMax;
1974 fNBinsJetPt = o.fNBinsJetPt;
1975 fJetPtMin = o.fJetPtMin;
1976 fJetPtMax = o.fJetPtMax;
1977 fNBinsPt = o.fNBinsPt;
1980 fNBinsXi = o.fNBinsXi;
1983 fNBinsZ = o.fNBinsZ;
1986 fh2TrackPtJet1 = o.fh2TrackPtJet1;
1987 fh2TrackPtJet2 = o.fh2TrackPtJet2;
1988 fh2TrackPtJet = o.fh2TrackPtJet;
1989 fh1Jet1Pt = o.fh1Jet1Pt;
1990 fh1Jet2Pt = o.fh1Jet2Pt;
1991 fh1JetPt = o.fh1JetPt;
2001 fNameDJ = o.fNameDJ;
2007 //_________________________________________________________
2008 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::~AliFragFuncDiJetHistos()
2012 if(fh2TrackPtJet1) delete fh2TrackPtJet1;
2013 if(fh2TrackPtJet2) delete fh2TrackPtJet2;
2014 if(fh2TrackPtJet ) delete fh2TrackPtJet;
2015 if(fh1Jet1Pt) delete fh1Jet1Pt;
2016 if(fh1Jet2Pt) delete fh1Jet2Pt;
2017 if(fh1JetPt) delete fh1JetPt;
2018 if(fh2Xi1) delete fh2Xi1;
2019 if(fh2Xi2) delete fh2Xi2;
2020 if(fh2Xi) delete fh2Xi;
2021 if(fh2Z1) delete fh2Z1;
2022 if(fh2Z2) delete fh2Z2;
2023 if(fh2Z) delete fh2Z;
2024 if(fh2Pt1) delete fh2Pt1;
2025 if(fh2Pt2) delete fh2Pt2;
2026 if(fh2Pt) delete fh2Pt;
2029 //________________________________________________________________________
2030 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::DefineDiJetHistos()
2032 // book DiJet histos
2037 const char *xaxis = "";
2038 if(fKindSlices == 1)
2040 nBins = fNBinsJetInvMass;
2041 min = fJetInvMassMin;
2042 max = fJetInvMassMax;
2043 xaxis = "M_{JJ} [GeV]";
2045 if(fKindSlices == 2 || fKindSlices == 3)
2047 nBins = fNBinsJetPt;
2050 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2051 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2054 fh1Jet1Pt = new TH1F(Form("fh1DJJet1Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2055 fh1Jet2Pt = new TH1F(Form("fh1DJJet2Pt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2056 fh1JetPt = new TH1F(Form("fh1DJJetPt%s", fNameDJ.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
2058 fh2TrackPtJet1 = new TH2F(Form("fh2DJTrackPtJet1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2059 fh2TrackPtJet2 = new TH2F(Form("fh2DJTrackPtJet2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2060 fh2TrackPtJet = new TH2F(Form("fh2DJTrackPtJet%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2062 fh2Xi1 = new TH2F(Form("fh2DJXi1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2063 fh2Xi2 = new TH2F(Form("fh2DJXi2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2064 fh2Xi = new TH2F(Form("fh2DJXi%s", fNameDJ.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
2066 fh2Z1 = new TH2F(Form("fh2DJZ1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2067 fh2Z2 = new TH2F(Form("fh2DJZ2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2068 fh2Z = new TH2F(Form("fh2DJZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
2070 fh2Pt1 = new TH2F(Form("fh2DJPt1%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2071 fh2Pt2 = new TH2F(Form("fh2DJPt2%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2072 fh2Pt = new TH2F(Form("fh2DJPtZ%s", fNameDJ.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
2074 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet1Pt, "p_{T} [GeV/c]", "entries");
2075 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet2Pt, "p_{T} [GeV/c]", "entries");
2076 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
2078 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet1, xaxis, "p_{T} [GeV/c]", "Entries");
2079 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet2, xaxis, "p_{T} [GeV/c]", "Entries");
2080 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet, xaxis, "p_{T} [GeV/c]", "Entries");
2081 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi1, xaxis, "#xi", "Entries");
2082 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi2, xaxis, "#xi", "Entries");
2083 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi, xaxis, "#xi", "Entries");
2084 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z1, xaxis, "z", "Entries");
2085 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z2, xaxis, "z", "Entries");
2086 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z, xaxis, "z", "Entries");
2087 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt1, xaxis, "p_{T} [GeV/c]", "Entries");
2088 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt2, xaxis, "p_{T} [GeV/c]", "Entries");
2089 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt, xaxis, "p_{T} [GeV/c]", "Entries");
2092 //________________________________________________________________________
2093 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::FillDiJetFF(Int_t jetType, Float_t trackPt, Float_t jetPt, Double_t jetBin, Bool_t incrementJetPt)
2099 if(incrementJetPt) fh1JetPt->Fill(jetPt);
2101 fh2TrackPtJet->Fill(jetBin, trackPt);
2103 Double_t z = trackPt / jetPt;
2105 if(z>0) xi = TMath::Log(1/z);
2107 fh2Xi->Fill(jetBin, xi);
2108 fh2Z->Fill(jetBin, z);
2112 if(incrementJetPt) fh1Jet1Pt->Fill(jetPt);
2114 fh2TrackPtJet1->Fill(jetBin, trackPt);
2116 Double_t z = trackPt / jetPt;
2118 if(z>0) xi = TMath::Log(1/z);
2120 fh2Xi1->Fill(jetBin, xi);
2121 fh2Z1->Fill(jetBin, z);
2125 if(incrementJetPt) fh1Jet2Pt->Fill(jetPt);
2127 fh2TrackPtJet2->Fill(jetBin, trackPt);
2129 Double_t z = trackPt / jetPt;
2131 if(z>0) xi = TMath::Log(1/z);
2133 fh2Xi2->Fill(jetBin, xi);
2134 fh2Z2->Fill(jetBin, z);
2140 //________________________________________________________________________
2141 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AddToOutput(TList* list)const
2143 // add histos to list
2145 list->Add(fh1Jet1Pt);
2146 list->Add(fh1Jet2Pt);
2147 list->Add(fh1JetPt);
2148 list->Add(fh2TrackPtJet1);
2149 list->Add(fh2TrackPtJet2);
2150 list->Add(fh2TrackPtJet);
2159 //______________________________________________________________________________________________________
2160 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const char* name, Int_t kindSlices,
2161 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax,
2162 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
2163 Int_t nDeltaPhi, Float_t deltaPhiMin, Float_t deltaPhiMax,
2164 Int_t nDeltaEta, Float_t deltaEtaMin, Float_t deltaEtaMax,
2165 Int_t nDeltaPt, Float_t deltaPtMin, Float_t deltaPtMax,
2166 Int_t nInBal, Float_t inBalMin, Float_t inBalMax)
2168 ,fKindSlices(kindSlices)
2169 ,fNBinsJetInvMass(nInvMass)
2170 ,fJetInvMassMin(invMassMin)
2171 ,fJetInvMassMax(invMassMax)
2172 ,fNBinsJetPt(nJetPt)
2173 ,fJetPtMin(jetPtMin)
2174 ,fJetPtMax(jetPtMax)
2175 ,fNBinsDeltaPhi(nDeltaPhi)
2176 ,fDeltaPhiMin(deltaPhiMin)
2177 ,fDeltaPhiMax(deltaPhiMax)
2178 ,fNBinsDeltaEta(nDeltaEta)
2179 ,fDeltaEtaMin(deltaEtaMin)
2180 ,fDeltaEtaMax(deltaEtaMax)
2181 ,fNBinsDeltaPt(nDeltaPt)
2182 ,fDeltaPtMin(deltaPtMin)
2183 ,fDeltaPtMax(deltaPtMax)
2184 ,fNBinsInBal(nInBal)
2185 ,fInBalMin(inBalMin)
2186 ,fInBalMax(inBalMax)
2194 // default constructor
2198 //______________________________________________________________________________________________________
2199 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const AliFragFuncQADiJetHistos& copy)
2201 ,fKindSlices(copy.fKindSlices)
2202 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
2203 ,fJetInvMassMin(copy.fJetInvMassMin)
2204 ,fJetInvMassMax(copy.fJetInvMassMax)
2205 ,fNBinsJetPt(copy.fNBinsJetPt)
2206 ,fJetPtMin(copy.fJetPtMin)
2207 ,fJetPtMax(copy.fJetPtMax)
2208 ,fNBinsDeltaPhi(copy.fNBinsDeltaPhi)
2209 ,fDeltaPhiMin(copy.fDeltaPhiMin)
2210 ,fDeltaPhiMax(copy.fDeltaPhiMax)
2211 ,fNBinsDeltaEta(copy.fNBinsDeltaEta)
2212 ,fDeltaEtaMin(copy.fDeltaEtaMin)
2213 ,fDeltaEtaMax(copy.fDeltaEtaMax)
2214 ,fNBinsDeltaPt(copy.fNBinsDeltaPt)
2215 ,fDeltaPtMin(copy.fDeltaPtMin)
2216 ,fDeltaPtMax(copy.fDeltaPtMax)
2217 ,fNBinsInBal(copy.fNBinsInBal)
2218 ,fInBalMin(copy.fInBalMin)
2219 ,fInBalMax(copy.fInBalMax)
2220 ,fh2InvMass(copy.fh2InvMass)
2221 ,fh2DeltaPhi(copy.fh2DeltaPhi)
2222 ,fh2DeltaEta(copy.fh2DeltaEta)
2223 ,fh2DeltaPt(copy.fh2DeltaPt)
2224 ,fh2InBal(copy.fh2InBal)
2225 ,fNameQADJ(copy.fNameQADJ)
2227 // default constructor
2231 //_______________________________________________________________________________________________________________________________________________________________
2232 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& o)
2237 TObject::operator=(o);
2238 fKindSlices = o.fKindSlices;
2239 fNBinsJetInvMass = o.fNBinsJetInvMass;
2240 fJetInvMassMin = o.fJetInvMassMin;
2241 fJetInvMassMax = o.fJetInvMassMax;
2242 fNBinsJetPt = o.fNBinsJetPt;
2243 fJetPtMin = o.fJetPtMin;
2244 fJetPtMax = o.fJetPtMax;
2245 fNBinsDeltaPhi = o.fNBinsDeltaPhi;
2246 fDeltaPhiMin = o.fDeltaPhiMin;
2247 fDeltaPhiMax = o.fDeltaPhiMax;
2248 fNBinsDeltaEta = o.fNBinsDeltaEta;
2249 fDeltaEtaMin = o.fDeltaEtaMin;
2250 fDeltaEtaMax = o.fDeltaEtaMax;
2251 fNBinsDeltaPt = o.fNBinsDeltaPt;
2252 fDeltaPtMin = o.fDeltaPtMin;
2253 fDeltaPtMax = o.fDeltaPtMax;
2254 fNBinsInBal = o.fNBinsInBal;
2255 fInBalMin = o.fInBalMin;
2256 fInBalMax = o.fInBalMax;
2257 fh2InvMass = o.fh2InvMass;
2258 fh2DeltaPhi = o.fh2DeltaPhi;
2259 fh2DeltaEta = o.fh2DeltaEta;
2260 fh2DeltaPt = o.fh2DeltaPt;
2261 fh2InBal = o.fh2InBal;
2262 fNameQADJ = o.fNameQADJ;
2268 //_________________________________________________________
2269 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::~AliFragFuncQADiJetHistos()
2273 if(fh2InvMass) delete fh2InvMass;
2274 if(fh2DeltaPhi) delete fh2DeltaPhi;
2275 if(fh2DeltaEta) delete fh2DeltaEta;
2276 if(fh2DeltaPt) delete fh2DeltaPt;
2277 if(fh2InBal) delete fh2InBal;
2280 //________________________________________________________________________
2281 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::DefineQADiJetHistos()
2288 const char *xaxis = "";
2289 if(fKindSlices == 1)
2291 nBins = fNBinsJetInvMass;
2292 min = fJetInvMassMin;
2293 max = fJetInvMassMax;
2294 xaxis = "M_{JJ} [GeV]";
2296 if(fKindSlices == 2 || fKindSlices == 3)
2298 nBins = fNBinsJetPt;
2301 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
2302 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
2306 fh2InvMass = new TH2F(Form("fh2DJInvMassPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsJetInvMass, fJetInvMassMin, fJetInvMassMax);
2307 fh2DeltaPhi = new TH2F(Form("fh2DJDeltaPhiPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPhi, fDeltaPhiMin, fDeltaPhiMax);
2308 fh2DeltaEta = new TH2F(Form("fh2DJDeltaEtaPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaEta, fDeltaEtaMin, fDeltaEtaMax);
2309 fh2DeltaPt = new TH2F(Form("fh2DJDeltaPtPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsDeltaPt, fDeltaPtMin, fDeltaPtMax);
2310 fh2InBal = new TH2F(Form("fh2DJInBalPositionCut%s", fNameQADJ.Data()), "",nBins, min, max, fNBinsInBal, fInBalMin, fInBalMax);
2312 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InvMass, xaxis, "Invariant Mass", "Entries");
2313 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPhi, xaxis, "#Delta #phi", "Entries");
2314 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaEta, xaxis, "#Delta #eta", "Entries");
2315 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPt, xaxis, "#Delta p_{T}", "Entries");
2316 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InBal, xaxis, "(p_{T}^{1}-p_{T}^{2})/(p_{T}^{1}+p_{T}^{2})", "Entries");
2320 //________________________________________________________________________
2321 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::FillDiJetQA(Double_t invMass, Double_t deltaPhi, Double_t deltaEta,Double_t deltaPt, Double_t inbal, Double_t jetBin)
2325 fh2InvMass->Fill(jetBin, invMass);
2326 fh2DeltaPhi->Fill(jetBin, deltaPhi);
2327 fh2DeltaEta->Fill(jetBin, deltaEta);
2328 fh2DeltaPt->Fill(jetBin, deltaPt);
2329 fh2InBal->Fill(jetBin, inbal);
2332 //________________________________________________________________________
2333 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AddToOutput(TList* list)const
2335 // add histos to list
2337 list->Add(fh2InvMass);
2338 list->Add(fh2DeltaPhi);
2339 list->Add(fh2DeltaEta);
2340 list->Add(fh2DeltaPt);
2341 list->Add(fh2InBal);
2344 //_________________________________________________________________________________
2345 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AddToOutput(TList* list) const
2347 // add histos to list
2349 list->Add(fh2CosTheta);
2351 list->Add(fh3ThetaZ);
2352 list->Add(fh3JtTheta);
2357 //_________________________________________________________________________________
2358 Bool_t AliAnalysisTaskFragmentationFunction::Notify()
2361 // Implemented Notify() to read the cross sections
2362 // and number of trials from pyxsec.root
2363 // (taken from AliAnalysisTaskJetSpectrum2)
2365 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
2366 Float_t xsection = 0;
2367 Float_t ftrials = 1;
2371 TFile *curfile = tree->GetCurrentFile();
2373 Error("Notify","No current file");
2376 if(!fh1Xsec||!fh1Trials){
2377 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
2380 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
2381 fh1Xsec->Fill("<#sigma>",xsection);
2382 // construct a poor man average trials
2383 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
2384 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
2387 // Set seed for backg study
2388 fRandom = new TRandom3();
2389 fRandom->SetSeed(0);
2396 //__________________________________________________________________
2397 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
2399 // create output objects
2401 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
2403 // create list of tracks and jets
2405 fTracksRec = new TList();
2406 fTracksRec->SetOwner(kFALSE);
2408 fTracksRecCuts = new TList();
2409 fTracksRecCuts->SetOwner(kFALSE);
2411 fTracksGen = new TList();
2412 fTracksGen->SetOwner(kFALSE);
2414 fTracksAODMCCharged = new TList();
2415 fTracksAODMCCharged->SetOwner(kFALSE);
2417 fTracksAODMCChargedSec = new TList();
2418 fTracksAODMCChargedSec->SetOwner(kFALSE);
2420 fTracksRecQualityCuts = new TList();
2421 fTracksRecQualityCuts->SetOwner(kFALSE);
2423 fJetsRec = new TList();
2424 fJetsRec->SetOwner(kFALSE);
2425 if(fBranchRecJets.Contains("KT") && fBckgSubMethod) fJetsRec->SetOwner(kTRUE);
2427 fJetsRecCuts = new TList();
2428 fJetsRecCuts->SetOwner(kFALSE);
2429 if(fBranchRecJets.Contains("KT") && fBckgSubMethod) fJetsRecCuts->SetOwner(kTRUE);
2431 fJetsGen = new TList();
2432 fJetsGen->SetOwner(kFALSE);
2434 fJetsRecEff = new TList();
2435 fJetsRecEff->SetOwner(kFALSE);
2437 fJetsEmbedded = new TList();
2438 fJetsEmbedded->SetOwner(kFALSE);
2440 // fJetsKine = new TList();
2441 // fJetsKine->SetOwner(kTRUE); // delete AOD jets using mom from Kine Tree via TList::Clear()
2444 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2445 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2446 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2448 fBckgJetsRec = new TList();
2449 fBckgJetsRec->SetOwner(kFALSE);
2451 fBckgJetsRecCuts = new TList();
2452 fBckgJetsRecCuts->SetOwner(kFALSE);
2454 fBckgJetsGen = new TList();
2455 fBckgJetsGen->SetOwner(kFALSE);
2459 // Create histograms / output container
2463 fCommonHistList = new TList();
2465 Bool_t oldStatus = TH1::AddDirectoryStatus();
2466 TH1::AddDirectory(kFALSE);
2470 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
2471 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
2472 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
2473 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
2474 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
2475 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
2476 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
2478 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
2479 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
2480 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
2481 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
2482 fh2TrackPtVsDCAXY = new TH2F("fh2TrackPtVsDCAXY","",400,-0.02,0.02,100,0.,10.);
2483 fh2TrackPtVsDCAZ = new TH2F("fh2TrackPtVsDCAZ","",100,-0.050,0.050,100,0.,10.);
2485 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
2486 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
2487 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
2488 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
2489 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
2490 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
2492 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
2493 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
2494 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
2495 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
2497 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
2498 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
2503 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2504 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2505 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
2507 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
2508 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
2511 if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp || fBckgType[4]==kBckgPerp )
2512 fh1PerpMult = new TH1F("fh1PerpMult","Background multiplicity - Cone perpendicular to leading jet axis",500,0.,500.);
2513 if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide || fBckgType[4]==kBckgASide)
2514 fh1ASideMult = new TH1F("fh1ASideMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
2515 if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow || fBckgType[4]==kBckgASideWindow)
2516 fh1ASideWindowMult = new TH1F("fh1ASideWindowMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
2517 if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow || fBckgType[4]==kBckgPerpWindow)
2518 fh1PerpWindowMult = new TH1F("fh1PerpWindowMult","Background multiplicity - Cone in the perp direction of leading jet axis",500,0.,500.);
2519 if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ || fBckgType[4]==kBckgOutLJ)
2520 fh1OutLeadingMult = new TH1F("fh1OutLeadingMult","Background multiplicity - Cone outside leading jet",500,0,500.);
2521 if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat || fBckgType[4]==kBckgOutLJStat)
2522 fh1OutLeadingStatMult = new TH1F("fh1OutLeadingStatMult","Background multiplicity - Cone outside leading jet",3000,0,3000.);
2523 if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J || fBckgType[4]==kBckgOut2J)
2524 fh1Out2JetsMult = new TH1F("fh1Out2JetsMult","Background multiplicity - Cone outside 2 jets",500,0.,500.);
2525 if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J || fBckgType[4]==kBckgOut3J)
2526 fh1Out3JetsMult = new TH1F("fh1Out3JetsMult","Background multiplicity - Cone outside 3 jets",500,0.,500.);
2527 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters)
2528 fh1MedianClustersMult = new TH1F("fh1MedianClustersMult","Background multiplicity - median cluster",500,0.,500.);
2529 if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading
2530 || fBckgType[4]==kBckgClustersOutLeading)
2531 fh1OutClustersMult = new TH1F("fh1OutClustersMult","Background multiplicity - clusters outside leading jet",3000,0.,3000.);
2535 if(fBranchEmbeddedJets.Length()){
2536 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
2537 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
2538 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
2539 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
2540 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
2541 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
2545 fh2ptVsDistNN_pt50_rec = new TH2F("fh2ptVsDistNN_pt50_rec","",200,0,0.2,500,0.,100);
2546 fh2ptVsDistNN_pt50_nonRec = new TH2F("fh2ptVsDistNN_pt50_nonRec","",200,0,0.2,500,0.,100);
2547 fh2ptVsDistNN_pt10_rec = new TH2F("fh2ptVsDistNN_pt10_rec","",200,0,0.2,500,0.,100);
2548 fh2ptVsDistNN_pt10_nonRec = new TH2F("fh2ptVsDistNN_pt10_nonRec","",200,0,0.2,500,0.,100);
2552 if(fQAMode&1){ // track QA
2553 fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2554 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2555 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2556 fQATrackHighPtThreshold);
2557 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2558 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2559 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2560 fQATrackHighPtThreshold);
2561 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2562 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2563 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2564 fQATrackHighPtThreshold);
2567 if(fQAMode&2){ // jet QA
2568 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2569 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2570 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2571 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2572 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2573 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2574 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2575 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2576 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2577 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2578 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2579 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2580 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2581 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
2582 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2583 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
2584 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
2589 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2590 fFFNBinsPt, fFFPtMin, fFFPtMax,
2591 fFFNBinsXi, fFFXiMin, fFFXiMax,
2592 fFFNBinsZ , fFFZMin , fFFZMax);
2593 fFFHistosRecLeading = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2594 fFFNBinsPt, fFFPtMin, fFFPtMax,
2595 fFFNBinsXi, fFFXiMin, fFFXiMax,
2596 fFFNBinsZ , fFFZMin , fFFZMax);
2597 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2598 fFFNBinsPt, fFFPtMin, fFFPtMax,
2599 fFFNBinsXi, fFFXiMin, fFFXiMax,
2600 fFFNBinsZ , fFFZMin , fFFZMax);
2601 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2602 fFFNBinsPt, fFFPtMin, fFFPtMax,
2603 fFFNBinsXi, fFFXiMin, fFFXiMax,
2604 fFFNBinsZ , fFFZMin , fFFZMax);
2605 fFFHistosGenLeading = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2606 fFFNBinsPt, fFFPtMin, fFFPtMax,
2607 fFFNBinsXi, fFFXiMin, fFFXiMax,
2608 fFFNBinsZ , fFFZMin , fFFZMax);
2609 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2610 fFFNBinsPt, fFFPtMin, fFFPtMax,
2611 fFFNBinsXi, fFFXiMin, fFFXiMax,
2612 fFFNBinsZ , fFFZMin , fFFZMax);
2617 fIJHistosRecCuts = new AliFragFuncIntraJetHistos("RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2618 fIJNBinsPt, fIJPtMin, fIJPtMax,
2619 fIJNBinsZ, fIJZMin, fIJZMax,
2620 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2621 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2622 fIJNBinsJt , fIJJtMin , fIJJtMax);
2623 fIJHistosRecLeading = new AliFragFuncIntraJetHistos("RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2624 fIJNBinsPt, fIJPtMin, fIJPtMax,
2625 fIJNBinsZ, fIJZMin, fIJZMax,
2626 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2627 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2628 fIJNBinsJt , fIJJtMin , fIJJtMax);
2629 fIJHistosRecLeadingTrack = new AliFragFuncIntraJetHistos("RecLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2630 fIJNBinsPt, fIJPtMin, fIJPtMax,
2631 fIJNBinsZ, fIJZMin, fIJZMax,
2632 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2633 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2634 fIJNBinsJt , fIJJtMin , fIJJtMax);
2635 fIJHistosGen = new AliFragFuncIntraJetHistos("Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2636 fIJNBinsPt, fIJPtMin, fIJPtMax,
2637 fIJNBinsZ, fIJZMin, fIJZMax,
2638 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2639 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2640 fIJNBinsJt , fIJJtMin , fIJJtMax);
2641 fIJHistosGenLeading = new AliFragFuncIntraJetHistos("GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2642 fIJNBinsPt, fIJPtMin, fIJPtMax,
2643 fIJNBinsZ, fIJZMin, fIJZMax,
2644 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2645 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2646 fIJNBinsJt , fIJJtMin , fIJJtMax);
2647 fIJHistosGenLeadingTrack = new AliFragFuncIntraJetHistos("GenLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2648 fIJNBinsPt, fIJPtMin, fIJPtMax,
2649 fIJNBinsZ, fIJZMin, fIJZMax,
2650 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2651 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2652 fIJNBinsJt , fIJJtMin , fIJJtMax);
2657 fFFDiJetHistosRecCuts = new AliFragFuncDiJetHistos("RecCuts", fDiJetKindBins,
2658 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2659 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2660 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2661 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2662 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2663 fFFDiJetHistosRecLeading = new AliFragFuncDiJetHistos("RecLeading", fDiJetKindBins,
2664 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2665 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2666 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2667 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2668 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2669 fFFDiJetHistosRecLeadingTrack = new AliFragFuncDiJetHistos("RecLeadingTrack", fDiJetKindBins,
2670 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2671 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2672 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2673 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2674 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2676 fFFDiJetHistosGen = new AliFragFuncDiJetHistos("Gen", fDiJetKindBins,
2677 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2678 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2679 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2680 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2681 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2682 fFFDiJetHistosGenLeading = new AliFragFuncDiJetHistos("GenLeading", fDiJetKindBins,
2683 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2684 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2685 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2686 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2687 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2688 fFFDiJetHistosGenLeadingTrack = new AliFragFuncDiJetHistos("GenLeadingTrack", fDiJetKindBins,
2689 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
2690 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2691 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
2692 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
2693 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
2697 fQADiJetHistosRecCuts = new AliFragFuncQADiJetHistos("RecCuts", fDiJetKindBins,
2698 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2699 fQADiJetNBinsJetPt, fQADiJetJetPtMin, fQADiJetJetPtMax,
2700 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax ,
2701 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax ,
2702 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax,
2703 fQADiJetNBinsInBal, fQADiJetInBalMin, fQADiJetInBalMax);
2704 fQADiJetHistosGen = new AliFragFuncQADiJetHistos("Gen", fDiJetKindBins,
2705 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
2706 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
2707 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax,
2708 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax,
2709 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax,
2710 fQADiJetNBinsInBal, fQADiJetInBalMin, fQADiJetInBalMax);
2718 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2719 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2720 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2721 fQATrackHighPtThreshold);
2723 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2724 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2725 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2726 fQATrackHighPtThreshold);
2728 fQATrackHistosSecRec = new AliFragFuncQATrackHistos("SecRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2729 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2730 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2731 fQATrackHighPtThreshold);
2734 Int_t nBinsResponseSinglePt[2] = {fFFNBinsPt, fFFNBinsPt};
2735 Double_t binMinResponseSinglePt[2] = {fFFPtMin, fFFPtMin};
2736 Double_t binMaxResponseSinglePt[2] = {fFFPtMax, fFFPtMax};
2737 const char* labelsResponseSinglePt[2] = {"rec p_{T} [GeV/c]", "gen p_{T} [GeV/c]"};
2739 fhnResponseSinglePt = new THnSparseF("fhnResponseSinglePt","track pt gen : track pt rec",2,
2740 nBinsResponseSinglePt,binMinResponseSinglePt,binMaxResponseSinglePt);
2742 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseSinglePt,2,labelsResponseSinglePt);
2745 fh2SingleInvPtRecMnGenVsPtGen = new TH2F("fh2SingleInvPtRecMnGenVsPtGen","",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,200,-1,1);
2748 fFFHistosRecEffGen = new AliFragFuncHistos("RecEffGen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2749 fFFNBinsPt, fFFPtMin, fFFPtMax,
2750 fFFNBinsXi, fFFXiMin, fFFXiMax,
2751 fFFNBinsZ , fFFZMin , fFFZMax);
2753 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2754 fFFNBinsPt, fFFPtMin, fFFPtMax,
2755 fFFNBinsXi, fFFXiMin, fFFXiMax,
2756 fFFNBinsZ , fFFZMin , fFFZMax);
2758 fFFHistosSecRec = new AliFragFuncHistos("SecRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2759 fFFNBinsPt, fFFPtMin, fFFPtMax,
2760 fFFNBinsXi, fFFXiMin, fFFXiMax,
2761 fFFNBinsZ , fFFZMin , fFFZMax);
2764 Int_t nBinsResponseJetTrackPt[3] = {fFFNBinsJetPt,fFFNBinsPt,fFFNBinsPt};
2765 Double_t binMinResponseJetTrackPt[3] = {fFFJetPtMin,fFFPtMin, fFFPtMin};
2766 Double_t binMaxResponseJetTrackPt[3] = {fFFJetPtMax,fFFPtMax,fFFPtMax};
2767 const char* labelsResponseJetTrackPt[3] = { "jet p_{T} [GeV/c]","rec p_{T} [GeV/c]", "gen p_{T} [GeV/c]"};
2769 fhnResponseJetTrackPt = new THnSparseF("fhnResponseJetTrackPt","jet pt:track pt rec:track pt gen",3,
2770 nBinsResponseJetTrackPt,binMinResponseJetTrackPt,binMaxResponseJetTrackPt);
2772 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetTrackPt,3,labelsResponseJetTrackPt);
2774 Int_t nBinsResponseJetZ[3] = {fFFNBinsJetPt, fFFNBinsZ,fFFNBinsZ};
2775 Double_t binMinResponseJetZ[3] = {fFFJetPtMin, fFFZMin, fFFZMin};
2776 Double_t binMaxResponseJetZ[3] = {fFFJetPtMax, fFFZMax, fFFZMax};
2777 const char* labelsResponseJetZ[3] = { "jet p_{T} [GeV/c]","rec z","gen z"};
2779 fhnResponseJetZ = new THnSparseF("fhnResponseJetZ","jet pt:track pt rec:track pt gen",3,
2780 nBinsResponseJetZ,binMinResponseJetZ,binMaxResponseJetZ);
2782 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetZ,3,labelsResponseJetZ);
2784 Int_t nBinsResponseJetXi[3] = {fFFNBinsJetPt, fFFNBinsXi,fFFNBinsXi};
2785 Double_t binMinResponseJetXi[3] = {fFFJetPtMin, fFFXiMin, fFFXiMin};
2786 Double_t binMaxResponseJetXi[3] = {fFFJetPtMax, fFFXiMax, fFFXiMax};
2787 const char* labelsResponseJetXi[3] = { "jet p_{T} [GeV/c]","rec xi","gen xi"};
2789 fhnResponseJetXi = new THnSparseF("fhnResponseJetXi","jet pt:track xi rec:track xi gen",3,
2790 nBinsResponseJetXi,binMinResponseJetXi,binMaxResponseJetXi);
2792 AliAnalysisTaskFragmentationFunction::SetProperties(fhnResponseJetXi,3,labelsResponseJetXi);
2795 } // end: efficiency
2801 for(Int_t i=0; i<5; i++){
2802 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
2803 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
2804 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
2805 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
2806 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
2807 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
2808 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
2809 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
2810 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
2811 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
2812 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
2813 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
2814 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
2815 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
2816 else printf("Please chose background method number %d!",i);
2820 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2821 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2822 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2823 fQATrackHighPtThreshold);
2824 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2825 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2826 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2827 fQATrackHighPtThreshold);
2828 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2829 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2830 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2831 fQATrackHighPtThreshold);
2832 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2833 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2834 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2835 fQATrackHighPtThreshold);
2836 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2837 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2838 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2839 fQATrackHighPtThreshold);
2840 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2841 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2842 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2843 fQATrackHighPtThreshold);
2844 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2845 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2846 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2847 fQATrackHighPtThreshold);
2848 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2849 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2850 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2851 fQATrackHighPtThreshold);
2852 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2853 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2854 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2855 fQATrackHighPtThreshold);
2856 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2857 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2858 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2859 fQATrackHighPtThreshold);
2862 } // end: background QA
2865 // outside leading jet or 2 jets or more
2866 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2867 fFFNBinsPt, fFFPtMin, fFFPtMax,
2868 fFFNBinsXi, fFFXiMin, fFFXiMax,
2869 fFFNBinsZ , fFFZMin , fFFZMax);
2870 fFFBckgHisto0RecLeading = new AliFragFuncHistos("Bckg"+title[0]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2871 fFFNBinsPt, fFFPtMin, fFFPtMax,
2872 fFFNBinsXi, fFFXiMin, fFFXiMax,
2873 fFFNBinsZ , fFFZMin , fFFZMax);
2874 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2875 fFFNBinsPt, fFFPtMin, fFFPtMax,
2876 fFFNBinsXi, fFFXiMin, fFFXiMax,
2877 fFFNBinsZ , fFFZMin , fFFZMax);
2878 fFFBckgHisto0GenLeading = new AliFragFuncHistos("Bckg"+title[0]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2879 fFFNBinsPt, fFFPtMin, fFFPtMax,
2880 fFFNBinsXi, fFFXiMin, fFFXiMax,
2881 fFFNBinsZ , fFFZMin , fFFZMax);
2883 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2884 fFFNBinsPt, fFFPtMin, fFFPtMax,
2885 fFFNBinsXi, fFFXiMin, fFFXiMax,
2886 fFFNBinsZ , fFFZMin , fFFZMax);
2887 fFFBckgHisto1RecLeading = new AliFragFuncHistos("Bckg"+title[1]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2888 fFFNBinsPt, fFFPtMin, fFFPtMax,
2889 fFFNBinsXi, fFFXiMin, fFFXiMax,
2890 fFFNBinsZ , fFFZMin , fFFZMax);
2891 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2892 fFFNBinsPt, fFFPtMin, fFFPtMax,
2893 fFFNBinsXi, fFFXiMin, fFFXiMax,
2894 fFFNBinsZ , fFFZMin , fFFZMax);
2895 fFFBckgHisto1GenLeading = new AliFragFuncHistos("Bckg"+title[1]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2896 fFFNBinsPt, fFFPtMin, fFFPtMax,
2897 fFFNBinsXi, fFFXiMin, fFFXiMax,
2898 fFFNBinsZ , fFFZMin , fFFZMax);
2900 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2901 fFFNBinsPt, fFFPtMin, fFFPtMax,
2902 fFFNBinsXi, fFFXiMin, fFFXiMax,
2903 fFFNBinsZ , fFFZMin , fFFZMax);
2904 fFFBckgHisto2RecLeading = new AliFragFuncHistos("Bckg"+title[2]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2905 fFFNBinsPt, fFFPtMin, fFFPtMax,
2906 fFFNBinsXi, fFFXiMin, fFFXiMax,
2907 fFFNBinsZ , fFFZMin , fFFZMax);
2908 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2909 fFFNBinsPt, fFFPtMin, fFFPtMax,
2910 fFFNBinsXi, fFFXiMin, fFFXiMax,
2911 fFFNBinsZ , fFFZMin , fFFZMax);
2912 fFFBckgHisto2GenLeading = new AliFragFuncHistos("Bckg"+title[2]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2913 fFFNBinsPt, fFFPtMin, fFFPtMax,
2914 fFFNBinsXi, fFFXiMin, fFFXiMax,
2915 fFFNBinsZ , fFFZMin , fFFZMax);
2916 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2917 fFFNBinsPt, fFFPtMin, fFFPtMax,
2918 fFFNBinsXi, fFFXiMin, fFFXiMax,
2919 fFFNBinsZ , fFFZMin , fFFZMax);
2920 fFFBckgHisto3RecLeading = new AliFragFuncHistos("Bckg"+title[3]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2921 fFFNBinsPt, fFFPtMin, fFFPtMax,
2922 fFFNBinsXi, fFFXiMin, fFFXiMax,
2923 fFFNBinsZ , fFFZMin , fFFZMax);
2924 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2925 fFFNBinsPt, fFFPtMin, fFFPtMax,
2926 fFFNBinsXi, fFFXiMin, fFFXiMax,
2927 fFFNBinsZ , fFFZMin , fFFZMax);
2928 fFFBckgHisto3GenLeading = new AliFragFuncHistos("Bckg"+title[3]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2929 fFFNBinsPt, fFFPtMin, fFFPtMax,
2930 fFFNBinsXi, fFFXiMin, fFFXiMax,
2931 fFFNBinsZ , fFFZMin , fFFZMax);
2932 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2933 fFFNBinsPt, fFFPtMin, fFFPtMax,
2934 fFFNBinsXi, fFFXiMin, fFFXiMax,
2935 fFFNBinsZ , fFFZMin , fFFZMax);
2936 fFFBckgHisto4RecLeading = new AliFragFuncHistos("Bckg"+title[4]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2937 fFFNBinsPt, fFFPtMin, fFFPtMax,
2938 fFFNBinsXi, fFFXiMin, fFFXiMax,
2939 fFFNBinsZ , fFFZMin , fFFZMax);
2940 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2941 fFFNBinsPt, fFFPtMin, fFFPtMax,
2942 fFFNBinsXi, fFFXiMin, fFFXiMax,
2943 fFFNBinsZ , fFFZMin , fFFZMax);
2944 fFFBckgHisto4GenLeading = new AliFragFuncHistos("Bckg"+title[4]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2945 fFFNBinsPt, fFFPtMin, fFFPtMax,
2946 fFFNBinsXi, fFFXiMin, fFFXiMax,
2947 fFFNBinsZ , fFFZMin , fFFZMax);
2949 } // end: background FF
2952 fIJBckgHisto0RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2953 fIJNBinsPt, fIJPtMin, fIJPtMax,
2954 fIJNBinsZ, fIJZMin, fIJZMax,
2955 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2956 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2957 fIJNBinsJt , fIJJtMin , fIJJtMax);
2958 fIJBckgHisto0RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2959 fIJNBinsPt, fIJPtMin, fIJPtMax,
2960 fIJNBinsZ, fIJZMin, fIJZMax,
2961 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2962 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2963 fIJNBinsJt , fIJJtMin , fIJJtMax);
2964 fIJBckgHisto0Gen = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2965 fIJNBinsPt, fIJPtMin, fIJPtMax,
2966 fIJNBinsZ, fIJZMin, fIJZMax,
2967 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2968 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2969 fIJNBinsJt , fIJJtMin , fIJJtMax);
2970 fIJBckgHisto0GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[0]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2971 fIJNBinsPt, fIJPtMin, fIJPtMax,
2972 fIJNBinsZ, fIJZMin, fIJZMax,
2973 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2974 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2975 fIJNBinsJt , fIJJtMin , fIJJtMax);
2978 fIJBckgHisto1RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2979 fIJNBinsPt, fIJPtMin, fIJPtMax,
2980 fIJNBinsZ, fIJZMin, fIJZMax,
2981 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2982 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2983 fIJNBinsJt , fIJJtMin , fIJJtMax);
2984 fIJBckgHisto1RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2985 fIJNBinsPt, fIJPtMin, fIJPtMax,
2986 fIJNBinsZ, fIJZMin, fIJZMax,
2987 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2988 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2989 fIJNBinsJt , fIJJtMin , fIJJtMax);
2990 fIJBckgHisto1Gen = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2991 fIJNBinsPt, fIJPtMin, fIJPtMax,
2992 fIJNBinsZ, fIJZMin, fIJZMax,
2993 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
2994 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
2995 fIJNBinsJt , fIJJtMin , fIJJtMax);
2996 fIJBckgHisto1GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[1]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
2997 fIJNBinsPt, fIJPtMin, fIJPtMax,
2998 fIJNBinsZ, fIJZMin, fIJZMax,
2999 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3000 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3001 fIJNBinsJt , fIJJtMin , fIJJtMax);
3003 fIJBckgHisto2RecCuts = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3004 fIJNBinsPt, fIJPtMin, fIJPtMax,
3005 fIJNBinsZ, fIJZMin, fIJZMax,
3006 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3007 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3008 fIJNBinsJt , fIJJtMin , fIJJtMax);
3009 fIJBckgHisto2RecLeading = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3010 fIJNBinsPt, fIJPtMin, fIJPtMax,
3011 fIJNBinsZ, fIJZMin, fIJZMax,
3012 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3013 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3014 fIJNBinsJt , fIJJtMin , fIJJtMax);
3015 fIJBckgHisto2Gen = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3016 fIJNBinsPt, fIJPtMin, fIJPtMax,
3017 fIJNBinsZ, fIJZMin, fIJZMax,
3018 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3019 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3020 fIJNBinsJt , fIJJtMin , fIJJtMax);
3021 fIJBckgHisto2GenLeading = new AliFragFuncIntraJetHistos("Bckg"+title[2]+"GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
3022 fIJNBinsPt, fIJPtMin, fIJPtMax,
3023 fIJNBinsZ, fIJZMin, fIJZMax,
3024 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
3025 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
3026 fIJNBinsJt , fIJJtMin , fIJJtMax);
3027 } // end: background intra-jet
3028 } // end: background
3031 fPhiCorrHistosJetArea = new AliFragFuncQATrackHistos("JetArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3032 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3033 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3034 fQATrackHighPtThreshold);
3036 fPhiCorrHistosTransverseArea = new AliFragFuncQATrackHistos("TransverseArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3037 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3038 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3039 fQATrackHighPtThreshold);
3041 fPhiCorrHistosAwayArea = new AliFragFuncQATrackHistos("AwayArea", fPhiCorrNBinsPt, fPhiCorrPtMin, fPhiCorrPtMax,
3042 fPhiCorrNBinsEta, fPhiCorrEtaMin, fPhiCorrEtaMax,
3043 fPhiCorrNBinsPhi, fPhiCorrPhiMin, fPhiCorrPhiMax,
3044 fQATrackHighPtThreshold);
3045 } // end: phi correlation
3048 // ____________ define histograms ____________________
3051 if(fQAMode&1){ // track QA
3052 fQATrackHistosRec->DefineHistos();
3053 fQATrackHistosRecCuts->DefineHistos();
3054 fQATrackHistosGen->DefineHistos();
3057 if(fQAMode&2){ // jet QA
3058 fQAJetHistosRec->DefineHistos();
3059 fQAJetHistosRecCuts->DefineHistos();
3060 fQAJetHistosRecCutsLeading->DefineHistos();
3061 fQAJetHistosGen->DefineHistos();
3062 fQAJetHistosGenLeading->DefineHistos();
3063 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
3068 fFFHistosRecCuts->DefineHistos();
3069 fFFHistosRecLeading->DefineHistos();
3070 fFFHistosRecLeadingTrack->DefineHistos();
3071 fFFHistosGen->DefineHistos();
3072 fFFHistosGenLeading->DefineHistos();
3073 fFFHistosGenLeadingTrack->DefineHistos();
3077 fIJHistosRecCuts->DefineHistos();
3078 fIJHistosRecLeading->DefineHistos();
3079 fIJHistosRecLeadingTrack->DefineHistos();
3080 fIJHistosGen->DefineHistos();
3081 fIJHistosGenLeading->DefineHistos();
3082 fIJHistosGenLeadingTrack->DefineHistos();
3087 fFFDiJetHistosRecCuts->DefineDiJetHistos();
3088 fFFDiJetHistosRecLeading->DefineDiJetHistos();
3089 fFFDiJetHistosRecLeadingTrack->DefineDiJetHistos();
3090 fFFDiJetHistosGen->DefineDiJetHistos();
3091 fFFDiJetHistosGenLeading->DefineDiJetHistos();
3092 fFFDiJetHistosGenLeadingTrack->DefineDiJetHistos();
3096 fQADiJetHistosRecCuts->DefineQADiJetHistos();
3097 fQADiJetHistosGen->DefineQADiJetHistos();
3103 fQATrackHistosRecEffGen->DefineHistos();
3104 fQATrackHistosRecEffRec->DefineHistos();
3105 fQATrackHistosSecRec->DefineHistos();
3108 fFFHistosRecEffGen->DefineHistos();
3109 fFFHistosRecEffRec->DefineHistos();
3110 fFFHistosSecRec->DefineHistos();
3112 } // end: efficiency
3117 fFFBckgHisto0RecCuts->DefineHistos();
3118 fFFBckgHisto0RecLeading->DefineHistos();
3119 fFFBckgHisto0Gen->DefineHistos();
3120 fFFBckgHisto0GenLeading->DefineHistos();
3121 fFFBckgHisto1RecCuts->DefineHistos();
3122 fFFBckgHisto1RecLeading->DefineHistos();
3123 fFFBckgHisto1Gen->DefineHistos();
3124 fFFBckgHisto1GenLeading->DefineHistos();
3125 fFFBckgHisto2RecCuts->DefineHistos();
3126 fFFBckgHisto2RecLeading->DefineHistos();
3127 fFFBckgHisto2Gen->DefineHistos();
3128 fFFBckgHisto2GenLeading->DefineHistos();
3129 fFFBckgHisto3RecCuts->DefineHistos();
3130 fFFBckgHisto3RecLeading->DefineHistos();
3131 fFFBckgHisto3Gen->DefineHistos();
3132 fFFBckgHisto3GenLeading->DefineHistos();
3133 fFFBckgHisto4RecCuts->DefineHistos();
3134 fFFBckgHisto4RecLeading->DefineHistos();
3135 fFFBckgHisto4Gen->DefineHistos();
3136 fFFBckgHisto4GenLeading->DefineHistos();
3140 fIJBckgHisto0RecCuts->DefineHistos();
3141 fIJBckgHisto0RecLeading->DefineHistos();
3142 fIJBckgHisto0Gen->DefineHistos();
3143 fIJBckgHisto0GenLeading->DefineHistos();
3144 fIJBckgHisto1RecCuts->DefineHistos();
3145 fIJBckgHisto1RecLeading->DefineHistos();
3146 fIJBckgHisto1Gen->DefineHistos();
3147 fIJBckgHisto1GenLeading->DefineHistos();
3148 fIJBckgHisto2RecCuts->DefineHistos();
3149 fIJBckgHisto2RecLeading->DefineHistos();
3150 fIJBckgHisto2Gen->DefineHistos();
3151 fIJBckgHisto2GenLeading->DefineHistos();
3155 fQABckgHisto0RecCuts->DefineHistos();
3156 fQABckgHisto0Gen->DefineHistos();
3157 fQABckgHisto1RecCuts->DefineHistos();
3158 fQABckgHisto1Gen->DefineHistos();
3159 fQABckgHisto2RecCuts->DefineHistos();
3160 fQABckgHisto2Gen->DefineHistos();
3161 fQABckgHisto3RecCuts->DefineHistos();
3162 fQABckgHisto3Gen->DefineHistos();
3163 fQABckgHisto4RecCuts->DefineHistos();
3164 fQABckgHisto4Gen->DefineHistos();
3166 } // end: background
3169 fPhiCorrHistosJetArea->DefineHistos();
3170 fPhiCorrHistosTransverseArea->DefineHistos();
3171 fPhiCorrHistosAwayArea->DefineHistos();
3174 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
3175 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
3176 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
3178 fCommonHistList->Add(fh1EvtSelection);
3179 fCommonHistList->Add(fh1EvtMult);
3180 fCommonHistList->Add(fh1EvtCent);
3181 fCommonHistList->Add(fh2TrackPtVsDCAXY);
3182 fCommonHistList->Add(fh2TrackPtVsDCAZ);
3183 fCommonHistList->Add(fh1VertexNContributors);
3184 fCommonHistList->Add(fh1VertexZ);
3185 fCommonHistList->Add(fh1nRecJetsCuts);
3186 if(genJets && genTracks){
3187 fCommonHistList->Add(fh1Xsec);
3188 fCommonHistList->Add(fh1Trials);
3189 fCommonHistList->Add(fh1PtHard);
3190 fCommonHistList->Add(fh1PtHardTrials);
3191 if(genJets) fCommonHistList->Add(fh1nGenJets);
3196 fFFHistosRecCuts->AddToOutput(fCommonHistList);
3197 fFFHistosRecLeading->AddToOutput(fCommonHistList);
3198 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3199 if(genJets && genTracks){
3200 fCommonHistList->Add(fh1Xsec);
3201 fCommonHistList->Add(fh1Trials);
3202 fCommonHistList->Add(fh1PtHard);
3203 fCommonHistList->Add(fh1PtHardTrials);
3204 if(genJets) fCommonHistList->Add(fh1nGenJets);
3206 fFFHistosGen->AddToOutput(fCommonHistList);
3207 fFFHistosGenLeading->AddToOutput(fCommonHistList);
3208 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3215 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
3216 fFFBckgHisto0RecLeading->AddToOutput(fCommonHistList);
3217 fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
3218 fFFBckgHisto1RecLeading->AddToOutput(fCommonHistList);
3219 fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
3220 fFFBckgHisto2RecLeading->AddToOutput(fCommonHistList);
3221 fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
3222 fFFBckgHisto3RecLeading->AddToOutput(fCommonHistList);
3223 fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
3224 fFFBckgHisto4RecLeading->AddToOutput(fCommonHistList);
3226 if(genJets && genTracks){
3227 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
3228 fFFBckgHisto0GenLeading->AddToOutput(fCommonHistList);
3229 fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
3230 fFFBckgHisto1GenLeading->AddToOutput(fCommonHistList);
3231 fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
3232 fFFBckgHisto2GenLeading->AddToOutput(fCommonHistList);
3233 fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
3234 fFFBckgHisto3GenLeading->AddToOutput(fCommonHistList);
3235 fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
3236 fFFBckgHisto4GenLeading->AddToOutput(fCommonHistList);
3241 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
3242 fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
3243 fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
3244 fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
3245 fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
3246 if(genJets && genTracks){
3247 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
3248 fQABckgHisto1Gen->AddToOutput(fCommonHistList);
3249 fQABckgHisto2Gen->AddToOutput(fCommonHistList);
3250 fQABckgHisto3Gen->AddToOutput(fCommonHistList);
3251 fQABckgHisto4Gen->AddToOutput(fCommonHistList);
3255 if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ || fBckgType[4]==kBckgOutLJ)
3256 fCommonHistList->Add(fh1OutLeadingMult);
3257 if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat || fBckgType[4]==kBckgOutLJStat)
3258 fCommonHistList->Add(fh1OutLeadingStatMult);
3259 if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp || fBckgType[4]==kBckgPerp)
3260 fCommonHistList->Add(fh1PerpMult);
3261 if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide || fBckgType[4]==kBckgASide)
3262 fCommonHistList->Add(fh1ASideMult);
3263 if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow || fBckgType[4]==kBckgASideWindow)
3264 fCommonHistList->Add(fh1ASideWindowMult);
3265 if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow || fBckgType[4]==kBckgPerpWindow)
3266 fCommonHistList->Add(fh1PerpWindowMult);
3267 if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J || fBckgType[4]==kBckgOut2J)
3268 fCommonHistList->Add(fh1Out2JetsMult);
3269 if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J || fBckgType[4]==kBckgOut3J)
3270 fCommonHistList->Add(fh1Out3JetsMult);
3271 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters)
3272 fCommonHistList->Add(fh1MedianClustersMult);
3273 if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading
3274 || fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)
3275 fCommonHistList->Add(fh1OutClustersMult);
3279 if(fBranchEmbeddedJets.Length()){
3280 fCommonHistList->Add(fh1FractionPtEmbedded);
3281 fCommonHistList->Add(fh1IndexEmbedded);
3282 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
3283 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
3284 fCommonHistList->Add(fh1DeltaREmbedded);
3285 fCommonHistList->Add(fh1nEmbeddedJets);
3289 fCommonHistList->Add(fh2ptVsDistNN_pt50_rec);
3290 fCommonHistList->Add(fh2ptVsDistNN_pt50_nonRec);
3291 fCommonHistList->Add(fh2ptVsDistNN_pt10_rec);
3292 fCommonHistList->Add(fh2ptVsDistNN_pt10_nonRec);
3297 if(fQAMode&1){ // track QA
3298 fQATrackHistosRec->AddToOutput(fCommonHistList);
3299 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
3300 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
3303 if(fQAMode&2){ // jet QA
3304 fQAJetHistosRec->AddToOutput(fCommonHistList);
3305 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
3306 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
3307 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
3309 fQAJetHistosGen->AddToOutput(fCommonHistList);
3310 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
3316 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3317 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3318 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
3319 fCommonHistList->Add(fh1nRecBckgJetsCuts);
3320 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
3325 fPhiCorrHistosJetArea->AddToOutput(fCommonHistList);
3326 fPhiCorrHistosTransverseArea->AddToOutput(fCommonHistList);
3327 fPhiCorrHistosAwayArea->AddToOutput(fCommonHistList);
3332 fIJHistosRecCuts->AddToOutput(fCommonHistList);
3333 fIJHistosRecLeading->AddToOutput(fCommonHistList);
3334 fIJHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3338 fIJBckgHisto0RecCuts->AddToOutput(fCommonHistList);
3339 fIJBckgHisto0RecLeading->AddToOutput(fCommonHistList);
3340 fIJBckgHisto1RecCuts->AddToOutput(fCommonHistList);
3341 fIJBckgHisto1RecLeading->AddToOutput(fCommonHistList);
3342 fIJBckgHisto2RecCuts->AddToOutput(fCommonHistList);
3343 fIJBckgHisto2RecLeading->AddToOutput(fCommonHistList);
3346 if(genJets && genTracks){
3347 fIJHistosGen->AddToOutput(fCommonHistList);
3348 fIJHistosGenLeading->AddToOutput(fCommonHistList);
3349 fIJHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3353 fIJBckgHisto0Gen->AddToOutput(fCommonHistList);
3354 fIJBckgHisto0GenLeading->AddToOutput(fCommonHistList);
3355 fIJBckgHisto1Gen->AddToOutput(fCommonHistList);
3356 fIJBckgHisto1GenLeading->AddToOutput(fCommonHistList);
3357 fIJBckgHisto2Gen->AddToOutput(fCommonHistList);
3358 fIJBckgHisto2GenLeading->AddToOutput(fCommonHistList);
3365 fFFDiJetHistosRecCuts->AddToOutput(fCommonHistList);
3366 fFFDiJetHistosRecLeading->AddToOutput(fCommonHistList);
3367 fFFDiJetHistosRecLeadingTrack->AddToOutput(fCommonHistList);
3368 if(genJets && genTracks){
3369 fFFDiJetHistosGen->AddToOutput(fCommonHistList);
3370 fFFDiJetHistosGenLeading->AddToOutput(fCommonHistList);
3371 fFFDiJetHistosGenLeadingTrack->AddToOutput(fCommonHistList);
3375 fQADiJetHistosRecCuts->AddToOutput(fCommonHistList);
3376 if(genJets && genTracks){
3377 fQADiJetHistosGen->AddToOutput(fCommonHistList);
3382 if(fEffMode && recJetsEff && genTracks){
3384 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
3385 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
3386 fQATrackHistosSecRec->AddToOutput(fCommonHistList);
3387 fCommonHistList->Add(fhnResponseSinglePt);
3388 fCommonHistList->Add(fh2SingleInvPtRecMnGenVsPtGen);
3391 fFFHistosRecEffGen->AddToOutput(fCommonHistList);
3392 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
3393 fFFHistosSecRec->AddToOutput(fCommonHistList);
3394 fCommonHistList->Add(fhnResponseJetTrackPt);
3395 fCommonHistList->Add(fhnResponseJetZ);
3396 fCommonHistList->Add(fhnResponseJetXi);
3398 fCommonHistList->Add(fh1nRecEffJets);
3399 fCommonHistList->Add(fh2PtRecVsGenPrim);
3400 fCommonHistList->Add(fh2PtRecVsGenSec);
3404 // =========== Switch on Sumw2 for all histos ===========
3405 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
3406 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
3407 if (h1) h1->Sumw2();
3409 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
3410 if(hnSparse) hnSparse->Sumw2();
3414 TH1::AddDirectory(oldStatus);
3416 PostData(1, fCommonHistList);
3419 //_______________________________________________
3420 void AliAnalysisTaskFragmentationFunction::Init()
3423 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
3427 //_____________________________________________________________
3428 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
3431 // Called for each event
3432 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
3435 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
3436 // Trigger selection
3438 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
3439 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
3440 if(!(inputHandler->IsEventSelected() & AliVEvent::kMB)){
3441 if(inputHandler->InheritsFrom("AliESDInputHandler") && fUsePhysicsSelection){ // PhysicsSelection only with ESD input
3442 fh1EvtSelection->Fill(1.);
3443 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
3444 PostData(1, fCommonHistList);
3449 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
3451 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
3454 fMCEvent = MCEvent();
3456 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
3459 // get AOD event from input/ouput
3460 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
3461 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
3462 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
3463 if(fUseAODInputJets) fAODJets = fAOD;
3464 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
3467 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3468 if( handler && handler->InheritsFrom("AliAODHandler") ) {
3469 fAOD = ((AliAODHandler*)handler)->GetAOD();
3471 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
3475 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
3476 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
3477 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
3478 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
3479 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
3483 if(fNonStdFile.Length()!=0){
3484 // case we have an AOD extension - fetch the jets from the extended output
3486 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
3487 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
3489 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
3494 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
3498 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
3503 // event selection **************************************************
3504 // *** event class ***
3505 Double_t centPercent = -1;
3508 if(handler->InheritsFrom("AliAODInputHandler")){
3509 // since it is not supported by the helper task define own classes
3510 centPercent = fAOD->GetHeader()->GetCentrality();
3512 if(centPercent>10) cl = 2;
3513 if(centPercent>30) cl = 3;
3514 if(centPercent>50) cl = 4;
3517 cl = AliAnalysisHelperJetTasks::EventClass();
3518 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
3521 if(cl!=fEventClass){
3522 // event not in selected event class, reject event
3523 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
3524 fh1EvtSelection->Fill(2.);
3525 PostData(1, fCommonHistList);
3530 // *** vertex cut ***
3531 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
3532 Int_t nTracksPrim = primVtx->GetNContributors();
3533 fh1VertexNContributors->Fill(nTracksPrim);
3536 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
3538 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
3539 fh1EvtSelection->Fill(3.);
3540 PostData(1, fCommonHistList);
3544 fh1VertexZ->Fill(primVtx->GetZ());
3546 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
3547 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
3548 fh1EvtSelection->Fill(4.);
3549 PostData(1, fCommonHistList);
3553 TString primVtxName(primVtx->GetName());
3555 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
3556 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
3557 fh1EvtSelection->Fill(5.);
3558 PostData(1, fCommonHistList);
3562 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
3563 fh1EvtSelection->Fill(0.);
3564 fh1EvtCent->Fill(centPercent);
3567 //___ get MC information __________________________________________________________________
3569 Double_t ptHard = 0.;
3570 Double_t nTrials = 1; // trials for MC trigger weight for real data
3573 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
3577 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
3578 AliGenHijingEventHeader* hijingGenHeader = 0x0;
3580 if(pythiaGenHeader){
3581 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
3582 nTrials = pythiaGenHeader->Trials();
3583 ptHard = pythiaGenHeader->GetPtHard();
3585 fh1PtHard->Fill(ptHard);
3586 fh1PtHardTrials->Fill(ptHard,nTrials);
3589 } else { // no pythia, hijing?
3591 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
3593 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
3594 if(!hijingGenHeader){
3595 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
3597 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
3601 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
3606 //___ fetch jets __________________________________________________________________________
3608 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
3610 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
3611 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3612 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
3614 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
3615 Int_t nRecJetsCuts = 0;
3616 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
3617 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3618 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3619 fh1nRecJetsCuts->Fill(nRecJetsCuts);
3621 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3623 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
3625 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
3626 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3628 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
3629 fh1nGenJets->Fill(nGenJets);
3632 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3633 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
3634 Int_t nRecEffJets = 0;
3635 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
3636 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3637 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
3638 fh1nRecEffJets->Fill(nRecEffJets);
3641 Int_t nEmbeddedJets = 0;
3642 TArrayI iEmbeddedMatchIndex;
3643 TArrayF fEmbeddedPtFraction;
3646 if(fBranchEmbeddedJets.Length()){
3647 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
3648 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
3649 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
3650 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
3651 fh1nEmbeddedJets->Fill(nEmbeddedJets);
3653 Float_t maxDist = 0.3;
3655 iEmbeddedMatchIndex.Set(nEmbeddedJets);
3656 fEmbeddedPtFraction.Set(nEmbeddedJets);
3658 iEmbeddedMatchIndex.Reset(-1);
3659 fEmbeddedPtFraction.Reset(0);
3661 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
3662 fJetsRecCuts, nRecJetsCuts,
3663 iEmbeddedMatchIndex, fEmbeddedPtFraction,
3668 //____ fetch background jets ___________________________________________________
3670 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3671 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3672 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
3674 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
3675 Int_t nRecBckgJets = 0;
3676 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
3677 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
3678 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
3680 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
3681 Int_t nRecBckgJetsCuts = 0;
3682 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
3683 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
3684 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
3685 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
3687 if(0){ // protection OB - not yet implemented
3688 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
3689 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
3690 Int_t nGenBckgJets = 0;
3691 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
3692 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
3693 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
3694 fh1nGenBckgJets->Fill(nGenBckgJets);
3699 //____ fetch particles __________________________________________________________
3702 if(fUseExtraTracks == 1) nT = GetListOfTracks(fTracksRec, kTrackAODExtra);
3703 else if(fUseExtraTracks == -1) nT = GetListOfTracks(fTracksRec, kTrackAODExtraonly);
3704 else nT = GetListOfTracks(fTracksRec, kTrackAOD);
3707 if(nT>=0) nRecPart = fTracksRec->GetEntries();
3708 if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3709 if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
3713 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
3714 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
3715 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
3717 Int_t nRecPartCuts = 0;
3718 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
3719 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3720 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
3721 fh1EvtMult->Fill(nRecPartCuts);
3725 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
3727 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
3728 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3729 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
3732 //____ analysis, fill histos ___________________________________________________
3737 for(Int_t it=0; it<nRecPart; ++it){
3738 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));
3739 if(part)fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3741 for(Int_t it=0; it<nRecPartCuts; ++it){
3742 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
3743 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
3745 for(Int_t it=0; it<nGenPart; ++it){
3746 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
3747 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3750 // fill DCA to prim vertex
3751 for(Int_t it=0; it<nRecPartCuts; ++it){
3752 AliAODTrack *aodtr = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
3754 if(!aodtr) continue;
3755 if(!primVtx) continue;
3757 Double_t bfield = fAOD->GetMagneticField();
3761 AliAODTrack tmp(*aodtr);
3762 tmp.PropagateToDCA(primVtx, bfield, 5., dz, cov);
3764 Double_t dcaXY = dz[0];
3765 Double_t dcaZ = dz[1];
3767 fh2TrackPtVsDCAXY->Fill(dcaXY,tmp.Pt());
3768 fh2TrackPtVsDCAZ->Fill(dcaZ,tmp.Pt());
3775 for(Int_t ij=0; ij<nRecJets; ++ij){
3776 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
3777 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3782 if(fQAMode || fFFMode || fIJMode || fPhiCorrMode){
3783 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
3785 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
3786 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3788 if(ij==0){ // leading jet
3790 if(fQAMode&2) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3793 Double_t ptFractionEmbedded = 0;
3794 AliAODJet* embeddedJet = 0;
3796 if(fBranchEmbeddedJets.Length()){ // find embedded jet
3798 Int_t indexEmbedded = -1;
3799 for(Int_t i=0; i<nEmbeddedJets; i++){
3800 if(iEmbeddedMatchIndex[i] == ij){
3802 ptFractionEmbedded = fEmbeddedPtFraction[i];
3806 fh1IndexEmbedded->Fill(indexEmbedded);
3807 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
3809 if(indexEmbedded>-1){
3811 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
3812 if(!embeddedJet) continue;
3814 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
3815 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
3817 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
3818 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
3819 fh1DeltaREmbedded->Fill(deltaR);
3823 // get tracks in jet
3824 TList* jettracklist = new TList();
3825 Double_t sumPt = 0.;
3826 Bool_t isBadJet = kFALSE;
3827 Float_t leadTrackPt = 0.;
3828 TLorentzVector* leadTrackV = new TLorentzVector();
3831 if(GetFFRadius()<=0){
3832 GetJetTracksTrackrefs(jettracklist, jet, GetFFMaxTrackPt(), isBadJet);
3834 if(fUseEmbeddedJetAxis){
3835 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
3837 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
3840 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
3842 std::cout<<" here, isBadJet "<<isBadJet<<std::endl;
3844 if(isBadJet) continue;
3847 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
3849 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3851 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3852 if(!trackVP)continue;
3853 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3855 Float_t jetPt = jet->Pt();
3856 if(fUseEmbeddedJetPt){
3857 if(embeddedJet) jetPt = embeddedJet->Pt();
3860 Float_t trackPt = trackV->Pt();
3863 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3865 if(fFFMode) fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);
3866 if(fIJMode) fIJHistosRecCuts->FillIntraJet( trackV, jet->MomentumVector() );
3868 if(it==0){ // leading track
3869 leadTrackPt = trackPt;
3870 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3872 if(fFFMode) fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
3873 if(fIJMode) fIJHistosRecLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
3875 if(fFFMode) fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);
3876 if(fIJMode) fIJHistosRecLeading->FillIntraJet( trackV, leadTrackV );
3881 // ff and ij for background study
3883 if(fBckgType[0]!=-1)
3884 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3885 fFFBckgHisto0RecCuts, fFFBckgHisto0RecLeading,
3886 fIJBckgHisto0RecCuts, fIJBckgHisto0RecLeading,
3887 fQABckgHisto0RecCuts);
3888 if(fBckgType[1]!=-1)
3889 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3890 fFFBckgHisto1RecCuts, fFFBckgHisto1RecLeading,
3891 fIJBckgHisto1RecCuts, fIJBckgHisto1RecLeading,
3892 fQABckgHisto1RecCuts);
3893 if(fBckgType[2]!=-1)
3894 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3895 fFFBckgHisto2RecCuts, fFFBckgHisto2RecLeading,
3896 fIJBckgHisto2RecCuts, fIJBckgHisto2RecLeading,
3897 fQABckgHisto2RecCuts);
3898 if(fBckgType[3]!=-1)
3899 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3900 fFFBckgHisto3RecCuts, fFFBckgHisto3RecLeading,
3901 fIJBckgHisto3RecCuts, fIJBckgHisto3RecLeading,
3902 fQABckgHisto3RecCuts);
3903 if(fBckgType[4]!=-1)
3904 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
3905 fFFBckgHisto4RecCuts, fFFBckgHisto4RecLeading,
3906 fIJBckgHisto4RecCuts, fIJBckgHisto4RecLeading,
3907 fQABckgHisto4RecCuts);
3908 } // end if(fBckgMode)
3913 for(Int_t it=0; it<nRecPartCuts; ++it){
3914 AliVParticle *part = (AliVParticle*)(fTracksRecCuts->At(it));
3916 Float_t partEta = part->Eta();
3917 Float_t partPhi = part->Phi();
3918 Float_t partPt = part->Pt();
3920 fPhiCorrHistosJetArea->FillTrackQA( partEta,
3921 TVector2::Phi_mpi_pi( jet->Phi() - partPhi ),
3925 fPhiCorrHistosTransverseArea->FillTrackQA( partEta,
3926 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()/2),
3930 fPhiCorrHistosAwayArea->FillTrackQA( partEta,
3931 TVector2::Phi_mpi_pi( jet->Phi() - partPhi + TMath::Pi()),
3935 } // end: phi-correlation
3938 delete jettracklist;
3940 } // end: cut embedded ratio
3941 } // end: leading jet
3942 } // end: rec. jets after cuts
3945 for(Int_t ij=0; ij<nGenJets; ++ij){
3947 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
3949 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3951 if(ij==0){ // leading jet
3953 if(fQAMode&2) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3955 TList* jettracklist = new TList();
3956 Double_t sumPt = 0.;
3957 Bool_t isBadJet = kFALSE;
3958 Float_t leadTrackPt = 0.;
3959 TLorentzVector* leadTrackV = new TLorentzVector();
3961 if(GetFFRadius()<=0){
3962 GetJetTracksTrackrefs(jettracklist, jet, GetFFMaxTrackPt(), isBadJet);
3964 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMaxTrackPt(), isBadJet);
3967 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
3968 if(isBadJet) continue;
3970 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3972 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3973 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3975 Float_t jetPt = jet->Pt();
3976 Float_t trackPt = trackV->Pt();
3978 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3980 if(fFFMode) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
3981 if(fIJMode) fIJHistosGen->FillIntraJet( trackV, jet->MomentumVector() );
3983 if(it==0){ // leading track
3984 leadTrackPt = trackPt;
3985 leadTrackV->SetPxPyPzE(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3987 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE );
3988 if(fIJMode) fIJHistosGenLeadingTrack->FillIntraJet( leadTrackV, jet->MomentumVector() );
3990 if(fFFMode) fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt );
3991 if(fIJMode) fIJHistosGenLeading->FillIntraJet( trackV, leadTrackV );
3997 delete jettracklist;
4000 } // end: QA, FF and intra-jet
4002 //_______ DiJet part _____________________________________________________
4004 if (nRecJetsCuts > 1)
4006 AliAODJet* jet1 = (AliAODJet*)(fJetsRecCuts->At(0));
4007 AliAODJet* jet2 = (AliAODJet*)(fJetsRecCuts->At(1));
4009 // DiJet deltaphi calculation
4010 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4011 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4012 Double_t deltaPhi = TMath::Abs(phi1-phi2);
4013 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4015 // DiJet CDF cut calculation
4016 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4017 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4018 Double_t sumEt = et1 + et2;
4019 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4020 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4022 // DiJet events selection
4023 Bool_t positionCut = 0;
4024 Bool_t positionEnergyCut = 0;
4028 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4029 // Position-Energy cut :
4030 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4032 if (ratio < fDiJetCDFCut) cdfCut = 1;
4036 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4037 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4038 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4042 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4043 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4044 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4045 Double_t meanEt = (Double_t)((et1+et2)/2.);
4046 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4048 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4052 if(fDJMode&2) fQADiJetHistosRecCuts->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4055 TList* jettracklist1 = new TList();
4056 Double_t sumPt1 = 0.;
4057 Bool_t isBadJet1 = kFALSE;
4058 Float_t leadTrackPt1 = 0;
4061 TList* jettracklist2 = new TList();
4062 Double_t sumPt2 = 0.;
4063 Bool_t isBadJet2 = kFALSE;
4064 Float_t leadTrackPt2 = 0;
4066 if(GetFFRadius()<=0)
4068 GetJetTracksTrackrefs(jettracklist1, jet1, GetFFMaxTrackPt(), isBadJet1);
4069 GetJetTracksTrackrefs(jettracklist2, jet2, GetFFMaxTrackPt(), isBadJet2);
4073 GetJetTracksPointing(fTracksRecCuts, jettracklist1, jet1, GetFFRadius(), sumPt1, GetFFMaxTrackPt(), isBadJet1);
4074 GetJetTracksPointing(fTracksRecCuts, jettracklist2, jet2, GetFFRadius(), sumPt2, GetFFMaxTrackPt(), isBadJet2);
4078 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet1 = kTRUE;
4079 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet2 = kTRUE;
4081 if(!(isBadJet1 || isBadJet2)){ // good jets
4083 Int_t nTracks = jettracklist1->GetSize();
4084 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4086 for(Int_t it=0; it<nTracks; ++it)
4088 if (it < jettracklist1->GetSize())
4090 AliVParticle *vp = (dynamic_cast<AliVParticle*> (jettracklist1->At(it)));
4091 Float_t trackPt1 = (vp?vp->Pt():0);
4092 Float_t jetPt1 = jet1->Pt();
4094 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4096 fFFDiJetHistosRecCuts->FillDiJetFF(1, trackPt1, jetPt1, jetBin, incrementJetPt);
4097 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt1, jetPt1, jetBin, incrementJetPt);
4101 leadTrackPt1 = trackPt1;
4103 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4104 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4107 fFFDiJetHistosRecLeading->FillDiJetFF(1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4108 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4111 if (it < jettracklist2->GetSize())
4113 Float_t trackPt2 = ((AliVParticle*)(jettracklist2->At(it)))->Pt();
4114 Float_t jetPt2 = jet2->Pt();
4116 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4118 fFFDiJetHistosRecCuts->FillDiJetFF(2, trackPt2, jetPt2, jetBin, incrementJetPt);
4119 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt2, jetPt2, jetBin, incrementJetPt);
4123 leadTrackPt2 = trackPt2;
4125 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4126 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4129 fFFDiJetHistosRecLeading->FillDiJetFF(2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4130 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4132 } // End loop on tracks
4135 delete jettracklist1;
4136 delete jettracklist2;
4138 } // End if(jetBin > 0)
4139 else { Printf("Jet bins for di-jet studies not set !");}
4141 } // End if(nRecJets > 1)
4145 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsGen->At(0));
4146 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsGen->At(1));
4149 Double_t deltaPhi = 0;
4150 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
4151 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
4152 deltaPhi = TMath::Abs(phi1-phi2);
4153 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
4155 Double_t et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
4156 Double_t et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
4157 Double_t sumEt = et1 + et2;
4158 Double_t normEt1PlusEt2 = TMath::Sqrt(et1*et1+et2*et2+2*et1*et2*TMath::Cos(deltaPhi));
4159 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
4161 // DiJet events selection
4162 Bool_t positionCut = 0;
4163 Bool_t positionEnergyCut = 0;
4167 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
4168 // Position-Energy cut :
4169 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
4171 if (ratio < fDiJetCDFCut) cdfCut = 1;
4175 if (fDiJetCut == 1 && positionCut == 1) go = 1;
4176 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
4177 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
4181 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
4182 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
4183 Double_t inbal = (jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt());
4184 Double_t meanEt = (Double_t)((et1+et2)/2.);
4185 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
4187 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
4191 if(fDJMode&2) fQADiJetHistosGen->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, inbal, jetBin);
4194 TList* jettracklist1 = new TList();
4195 Double_t sumPt1 = 0.;
4196 Bool_t isBadJet1 = kFALSE;
4197 Float_t leadTrackPt1 = 0.;
4199 TList* jettracklist2 = new TList();
4200 Double_t sumPt2 = 0.;
4201 Bool_t isBadJet2 = kFALSE;
4202 Float_t leadTrackPt2 = 0.;
4204 if(GetFFRadius()<=0)
4206 GetJetTracksTrackrefs(jettracklist1, jet1, GetFFMaxTrackPt(), isBadJet1);
4207 GetJetTracksTrackrefs(jettracklist2, jet2, GetFFMaxTrackPt(), isBadJet2);
4211 GetJetTracksPointing(fTracksGen, jettracklist1, jet1, GetFFRadius(), sumPt1, GetFFMaxTrackPt(), isBadJet1);
4212 GetJetTracksPointing(fTracksGen, jettracklist2, jet2, GetFFRadius(), sumPt2, GetFFMaxTrackPt(), isBadJet2);
4216 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet1 = kTRUE;
4217 if(GetFFMinNTracks()>0 && jettracklist1->GetSize()<=GetFFMinNTracks()) isBadJet2 = kTRUE;
4219 if(!(isBadJet1 || isBadJet2)){ // good jets
4221 Int_t nTracks = jettracklist1->GetSize();
4222 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
4224 for(Int_t it=0; it<nTracks; ++it)
4226 if (it < jettracklist1->GetSize())
4228 Float_t trackPt1 = ((AliVParticle*)jettracklist1->At(it))->Pt();
4229 Float_t jetPt1 = jet1->Pt();
4231 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4233 fFFDiJetHistosGen->FillDiJetFF( 1, trackPt1, jetPt1, jetBin, incrementJetPt);
4234 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt1, jetPt1, jetBin, incrementJetPt);
4238 leadTrackPt1 = trackPt1;
4240 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 1, leadTrackPt1, jetPt1, jetBin, kTRUE);
4241 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt1, jetPt1, jetBin, kTRUE);
4244 fFFDiJetHistosGenLeading->FillDiJetFF( 1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4245 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
4248 if (it < jettracklist2->GetSize())
4250 Float_t trackPt2 = ((AliVParticle*)jettracklist2->At(it))->Pt();
4251 Float_t jetPt2 = jet2->Pt();
4253 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4255 fFFDiJetHistosGen->FillDiJetFF( 2, trackPt2, jetPt2, jetBin, incrementJetPt);
4256 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt2, jetPt2, jetBin, incrementJetPt);
4260 leadTrackPt2 = trackPt2;
4262 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 2, leadTrackPt2, jetPt2, jetBin, kTRUE);
4263 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt2, jetPt2, jetBin, kTRUE);
4266 fFFDiJetHistosGenLeading->FillDiJetFF( 2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4267 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
4269 } // End loop on tracks
4272 delete jettracklist1;
4273 delete jettracklist2;
4275 } // End if(jetBin > 0)
4276 else { Printf("Jet bins for di-jet studies not set !");}
4278 }// end if jet1 and jet2
4279 } // End if(nGenJets > 1)
4282 // ____ efficiency _______________________________
4284 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
4286 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
4290 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
4293 // ... and another set for secondaries (secondary MC tracks are stored in a different list)
4294 TArrayI indexAODTrSec;
4296 TArrayI indexMCTrSec;
4298 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
4299 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
4301 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
4302 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
4304 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
4305 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
4307 // associate gen and rec tracks, store indices in TArrays
4308 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
4309 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
4312 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
4313 if(fQAMode&1) FillSingleTrackResponse(fhnResponseSinglePt,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
4316 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
4318 // high-pt occupancy effect
4319 FillTwoTrackHistosRecGen(fTracksAODMCCharged, /*fTracksRecQualityCuts,indexAODTr,*/ isGenPrim);
4323 Double_t sumPtGenLeadingJetRecEff = 0;
4324 Double_t sumPtGenLeadingJetSec = 0;
4325 Double_t sumPtRecLeadingJetRecEff = 0;
4327 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4329 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
4330 Bool_t isBadJetGenPrim = kFALSE;
4331 Bool_t isBadJetGenSec = kFALSE;
4332 Bool_t isBadJetRec = kFALSE;
4335 if(ij==0){ // leading jet
4337 // for efficiency: gen tracks from pointing with gen/rec jet
4338 TList* jettracklistGenPrim = new TList();
4339 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMaxTrackPt(), isBadJetGenPrim);
4341 TList* jettracklistGenSec = new TList();
4342 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMaxTrackPt(), isBadJetGenSec);
4344 // bin efficiency in jet pt bins using rec tracks
4345 TList* jettracklistRec = new TList();
4346 GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMaxTrackPt(), isBadJetRec);
4348 Double_t jetEta = jet->Eta();
4349 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
4351 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
4352 if(GetFFMinNTracks()>0 && jettracklistGenSec->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
4353 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
4355 if(isBadJetRec) continue;
4357 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
4359 if(fFFMode) FillJetTrackHistosRecGen(fFFHistosRecEffGen,fFFHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4360 jettracklistGenPrim,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4362 if(fFFMode) FillJetTrackResponse(fhnResponseJetTrackPt,fhnResponseJetZ,fhnResponseJetXi,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4363 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseResponseRecJetPtBins);
4365 // secondaries: use jet pt from primaries
4366 if(fFFMode) FillJetTrackHistosRecGen(0x0,fFFHistosSecRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4367 jettracklistGenSec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,fUseRecEffRecJetPtBins);
4369 delete jettracklistGenPrim;
4370 delete jettracklistGenSec;
4371 delete jettracklistRec;
4376 // bckgr eff: complementary cones
4380 for(Int_t ij=0; ij<nRecEffJets; ++ij){
4382 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecEff->At(ij));
4384 if(ij==0){ // leading jet
4386 TList* perpjettracklistGen = new TList();
4387 Double_t sumPtGen = 0.;
4389 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksGen, perpjettracklistGen, jet, GetFFRadius() , sumPtGen); // for efficiency: gen tracks perp to gen/rec jet
4391 // here could be your histos !!!
4392 // FillJetTrackRecEffHisto(fFFBckgrPerpHistosRecEffGen,fFFBckgrPerpHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,perpjettracklistGen,
4393 // fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4395 delete perpjettracklistGen;
4400 // bgr eff: outside N leading jets
4406 TList* outjettracklistGen = new TList();
4407 Double_t sumPtGen = 0.;
4409 GetTracksOutOfNJets(nCases, fTracksGen, outjettracklistGen, fJetsRecEff, sumPtGen); // for efficiency: gen tracks outide n gen/rec jets
4411 // here could be your histos !!!
4412 // FillJetTrackRecEffHisto(fFFBckgrOutHistosRecEffGen,fFFBckgrOutHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
4413 // outjettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
4415 delete outjettracklistGen;
4419 //___________________
4421 fTracksRec->Clear();
4422 fTracksRecCuts->Clear();
4423 fTracksGen->Clear();
4424 fTracksAODMCCharged->Clear();
4425 fTracksAODMCChargedSec->Clear();
4426 fTracksRecQualityCuts->Clear();
4429 fJetsRecCuts->Clear();
4431 fJetsRecEff->Clear();
4432 fJetsEmbedded->Clear();
4436 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
4437 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
4438 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
4440 fBckgJetsRec->Clear();
4441 fBckgJetsRecCuts->Clear();
4442 fBckgJetsGen->Clear();
4447 PostData(1, fCommonHistList);
4450 //________________________________________________________________________________________
4451 Double_t AliAnalysisTaskFragmentationFunction::InvMass(const AliAODJet* jet1, const AliAODJet* jet2)
4453 // cald DiJet inv mass
4455 Double_t invMass = 0.;
4456 invMass = TMath::Sqrt(pow(jet1->E()+jet2->E(),2) - pow(jet1->Px()+jet2->Px(),2) -
4457 pow(jet1->Py()+jet2->Py(),2) - pow(jet1->Pz()+jet2->Pz(),2));
4463 //________________________________________________________________________________________
4464 Double_t AliAnalysisTaskFragmentationFunction::GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t EtMean, Int_t kindBins)
4466 // calc DiJet bin according to kindBins parameter
4468 Double_t jetBinOk = 0.;
4469 Double_t jetBin = 0.;
4471 Float_t stepInvMass = (fDiJetJetInvMassMax - fDiJetJetInvMassMin)/fDiJetNBinsJetInvMass;
4472 Float_t stepPt = (fDiJetJetPtMax - fDiJetJetPtMin)/fDiJetNBinsJetPt;
4476 for(Int_t i=0; i<fDiJetNBinsJetInvMass; ++i)
4478 jetBin = fDiJetJetInvMassMin + i*stepInvMass + stepInvMass/2.;
4479 if(((fDiJetJetInvMassMin+i*stepInvMass) <= invMass) &&
4480 (fDiJetJetInvMassMin + (i+1)*stepInvMass) > invMass) {jetBinOk = jetBin; break;}
4481 else jetBinOk = -1.;
4484 else if (kindBins == 3)
4486 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4488 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4489 if(((fDiJetJetPtMin+i*stepPt) <= EtMean) &&
4490 (fDiJetJetPtMin + (i+1)*stepPt) > EtMean) {jetBinOk = jetBin; break;}
4491 else jetBinOk = -1.;
4494 else if (kindBins == 2)
4496 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
4498 jetBin = fDiJetJetPtMin + i*stepPt + stepPt/2.;
4499 if(((fDiJetJetPtMin+i*stepPt) <= leadingJetPt) &&
4500 (fDiJetJetPtMin + (i+1)*stepPt) > leadingJetPt) {jetBinOk = jetBin; break;}
4501 else jetBinOk = -1.;
4504 else {Printf("WARNING: kindBins wrongly set ! Please make sure to call SetKindSlices() and set the kind parameter to 1, 2 or 3.\n");}
4511 //______________________________________________________________
4512 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
4516 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
4519 //_________________________________________________________________________________
4520 Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
4522 // fill list of tracks selected according to type
4524 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
4527 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4531 if(!fAOD) return -1;
4533 if(!fAOD->GetTracks()) return 0;
4535 if(type==kTrackUndef) return 0;
4539 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
4541 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
4542 if(!aodExtraTracks)return iCount;
4543 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
4544 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
4545 if (!track) continue;
4547 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
4550 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
4552 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4554 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4555 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4556 if(tr->Pt() < fTrackPtCut) continue;
4564 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
4566 // all rec. tracks, esd filter mask, eta range
4568 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
4569 AliAODTrack *tr = fAOD->GetTrack(it);
4571 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
4573 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4574 if(type == kTrackAODCuts){
4575 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4576 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4577 if(tr->Pt() < fTrackPtCut) continue;
4584 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
4585 // kine particles, all or rather charged
4586 if(!fMCEvent) return iCount;
4588 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
4589 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
4591 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
4592 if(part->Charge()==0) continue;
4594 if(type == kTrackKineChargedAcceptance &&
4595 ( part->Eta() < fTrackEtaMin
4596 || part->Eta() > fTrackEtaMax
4597 || part->Phi() < fTrackPhiMin
4598 || part->Phi() > fTrackPhiMax
4599 || part->Pt() < fTrackPtCut)) continue;
4606 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
4607 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
4608 if(!fAOD) return -1;
4610 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4611 if(!tca)return iCount;
4613 for(int it=0; it<tca->GetEntriesFast(); ++it){
4614 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
4616 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
4617 if(type == kTrackAODMCChargedSec && part->IsPhysicalPrimary())continue;
4619 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
4620 if(part->Charge()==0) continue;
4621 if(type==kTrackAODMCChargedAcceptance &&
4622 ( part->Eta() > fTrackEtaMax
4623 || part->Eta() < fTrackEtaMin
4624 || part->Phi() > fTrackPhiMax
4625 || part->Phi() < fTrackPhiMin
4626 || part->Pt() < fTrackPtCut)) continue;
4638 // _______________________________________________________________________________
4639 Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
4641 // fill list of jets selected according to type
4644 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4648 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4650 if(fBranchRecJets.Length()==0){
4651 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4652 if(fDebug>1)fAOD->Print();
4656 TClonesArray *aodRecJets = 0;
4657 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
4658 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
4659 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
4662 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
4663 if(fDebug>1)fAOD->Print();
4667 // Reorder jet pt and fill new temporary AliAODJet objects
4670 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4672 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4675 if( tmp->Pt() < fJetPtCut ) continue;
4676 if( type == kJetsRecAcceptance &&
4677 ( tmp->Eta() < fJetEtaMin
4678 || tmp->Eta() > fJetEtaMax
4679 || tmp->Phi() < fJetPhiMin
4680 || tmp->Phi() > fJetPhiMax )) continue;
4682 if(fBckgSubMethod && fBranchRecJets.Contains("B0") &&
4683 fBranchRecJets.Contains("KT")) {
4685 AliAODJet *tmpJet = GetAODBckgSubJet(tmp, fBckgSubMethod);
4687 if(!tmpJet) continue;
4704 else if(type == kJetsKine || type == kJetsKineAcceptance){
4710 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
4714 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
4715 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
4716 AliGenHijingEventHeader* hijingGenHeader = 0x0;
4718 if(!pythiaGenHeader){
4719 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
4721 if(!hijingGenHeader){
4722 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
4725 TLorentzVector mom[4];
4727 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
4729 for(Int_t i=0; i<2; ++i){
4730 if(!mom[i].Pt()) continue;
4731 jet[i] = new AliAODJet(mom[i]);
4733 if( type == kJetsKineAcceptance &&
4734 ( jet[i]->Eta() < fJetEtaMin
4735 || jet[i]->Eta() > fJetEtaMax
4736 || jet[i]->Phi() < fJetPhiMin
4737 || jet[i]->Phi() > fJetPhiMax )) continue;
4747 // fetch the pythia generated jets
4748 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
4751 AliAODJet *jet = new AliAODJet();
4752 pythiaGenHeader->TriggerJet(ip, p);
4753 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
4755 if( type == kJetsKineAcceptance &&
4756 ( jet->Eta() < fJetEtaMin
4757 || jet->Eta() > fJetEtaMax
4758 || jet->Phi() < fJetPhiMin
4759 || jet->Phi() > fJetPhiMax )) continue;
4767 else if(type == kJetsGen || type == kJetsGenAcceptance ){
4769 if(fBranchGenJets.Length()==0){
4770 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
4774 TClonesArray *aodGenJets = 0;
4775 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
4776 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
4777 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
4781 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
4783 if(fDebug>1)fAOD->Print();
4789 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
4791 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
4794 if( tmp->Pt() < fJetPtCut ) continue;
4795 if( type == kJetsGenAcceptance &&
4796 ( tmp->Eta() < fJetEtaMin
4797 || tmp->Eta() > fJetEtaMax
4798 || tmp->Phi() < fJetPhiMin
4799 || tmp->Phi() > fJetPhiMax )) continue;
4807 else if(type == kJetsEmbedded){ // embedded jets
4809 if(fBranchEmbeddedJets.Length()==0){
4810 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
4811 if(fDebug>1)fAOD->Print();
4815 TClonesArray *aodEmbeddedJets = 0;
4816 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
4817 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
4818 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
4820 if(!aodEmbeddedJets){
4821 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
4822 if(fDebug>1)fAOD->Print();
4826 // Reorder jet pt and fill new temporary AliAODJet objects
4827 Int_t nEmbeddedJets = 0;
4829 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
4831 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
4834 if( tmp->Pt() < fJetPtCut ) continue;
4835 if( tmp->Eta() < fJetEtaMin
4836 || tmp->Eta() > fJetEtaMax
4837 || tmp->Phi() < fJetPhiMin
4838 || tmp->Phi() > fJetPhiMax ) continue;
4846 return nEmbeddedJets;
4849 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
4854 // ___________________________________________________________________________________
4855 Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
4857 // fill list of bgr clusters selected according to type
4859 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4861 if(fBranchRecBckgClusters.Length()==0){
4862 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4863 if(fDebug>1)fAOD->Print();
4867 TClonesArray *aodRecJets = 0;
4868 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
4869 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
4870 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
4873 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
4874 if(fDebug>1)fAOD->Print();
4878 // Reorder jet pt and fill new temporary AliAODJet objects
4881 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4883 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4886 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
4887 if( type == kJetsRecAcceptance &&
4888 ( tmp->Eta() < fJetEtaMin
4889 || tmp->Eta() > fJetEtaMax
4890 || tmp->Phi() < fJetPhiMin
4891 || tmp->Phi() > fJetPhiMax )) continue;
4905 // MC clusters still Under construction
4911 // _________________________________________________________________________________________________________
4912 void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
4914 // Set properties of THnSparse
4916 for(Int_t i=0; i<dim; i++){
4917 h->GetAxis(i)->SetTitle(labels[i]);
4918 h->GetAxis(i)->SetTitleColor(1);
4922 // __________________________________________________________________________________________
4923 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
4925 //Set properties of histos (x and y title)
4929 h->GetXaxis()->SetTitleColor(1);
4930 h->GetYaxis()->SetTitleColor(1);
4933 // _________________________________________________________________________________________________________
4934 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
4936 //Set properties of histos (x,y and z title)
4941 h->GetXaxis()->SetTitleColor(1);
4942 h->GetYaxis()->SetTitleColor(1);
4943 h->GetZaxis()->SetTitleColor(1);
4946 // ________________________________________________________________________________________________________________________________________________________
4947 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
4948 const Double_t radius, Double_t& sumPt, const Double_t maxPt, Bool_t& isBadMaxPt)
4950 // fill list of tracks in cone around jet axis
4953 isBadMaxPt = kFALSE;
4955 std::cout<<" enter GetJetTracksPointing, maxPt "<<maxPt<<std::endl;
4958 jet->PxPyPz(jetMom);
4959 TVector3 jet3mom(jetMom);
4961 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4963 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4965 Double_t trackMom[3];
4966 track->PxPyPz(trackMom);
4967 TVector3 track3mom(trackMom);
4969 Double_t dR = jet3mom.DeltaR(track3mom);
4973 outputlist->Add(track);
4975 sumPt += track->Pt();
4977 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
4978 if(maxPt>0 && track->Pt()>maxPt) std::cout<<" found bad jet, track pt "<<track->Pt()<<" max Pt "<<maxPt<<std::endl;
4982 std::cout<<" leave GetJetTracksPointing, maxPt "<<maxPt<<" isBadMaxPt "<<isBadMaxPt<<std::endl;
4988 // ___________________________________________________________________________________________
4989 void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t maxPt, Bool_t& isBadMaxPt)
4991 // list of jet tracks from trackrefs
4993 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
4995 for (Int_t itrack=0; itrack<nTracks; itrack++) {
4997 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
4999 AliError("expected ref track not found ");
5003 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
5010 // _ ________________________________________________________________________________________________________________________________
5011 void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
5012 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
5014 // associate generated and reconstructed tracks, fill TArrays of list indices
5016 Int_t nTracksRec = tracksRec->GetSize();
5017 Int_t nTracksGen = tracksAODMCCharged->GetSize();
5018 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5021 if(!nTracksGen) return;
5025 indexAODTr.Set(nTracksGen);
5026 indexMCTr.Set(nTracksRec);
5027 isRefGen.Set(nTracksGen);
5029 indexAODTr.Reset(-1);
5030 indexMCTr.Reset(-1);
5033 // loop over reconstructed tracks, get generated track
5035 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
5037 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5038 if(!rectrack)continue;
5039 Int_t label = TMath::Abs(rectrack->GetLabel());
5041 // find MC track in our list
5042 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
5044 Int_t listIndex = -1;
5045 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
5049 indexAODTr[listIndex] = iRec;
5050 indexMCTr[iRec] = listIndex;
5055 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
5057 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5059 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
5060 if(!gentrack)continue;
5061 Int_t pdg = gentrack->GetPdgCode();
5063 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
5064 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
5065 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
5067 isRefGen[iGen] = kTRUE;
5069 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5072 Float_t genPt = gentrack->Pt();
5073 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5075 Float_t recPt = vt->Pt();
5076 fh2PtRecVsGen->Fill(genPt,recPt);
5083 // _____________________________________________________________________________________________________________________________________________
5084 void AliAnalysisTaskFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
5085 const TArrayI& indexAODTr, const TArrayS& isRefGen){
5087 // fill QA for single track reconstruction efficiency
5089 Int_t nTracksGen = tracksGen->GetSize();
5091 if(!nTracksGen) return;
5093 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5095 if(isRefGen[iGen] != 1) continue; // select primaries
5097 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5098 if(!gentrack) continue;
5099 Double_t ptGen = gentrack->Pt();
5100 Double_t etaGen = gentrack->Eta();
5101 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5103 // apply same acc & pt cuts as for FF
5105 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5106 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5107 if(ptGen < fTrackPtCut) continue;
5109 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
5112 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5113 if(iRec>=0 && trackQARec) trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
5117 // ______________________________________________________________________________________________________________________________________________________
5119 void AliAnalysisTaskFragmentationFunction::FillJetTrackHistosRecGen(TObject* histGen,TObject* histRec,Double_t jetPtGen,Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen,
5120 const TArrayI& indexAODTr,const TArrayS& isRefGen, const Bool_t useRecJetPt)
5122 // fill objects for jet track reconstruction efficiency or secondaries contamination
5123 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
5125 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5127 if(!nTracksJet) return;
5129 Bool_t incrementJetPtGenFF = kTRUE; // needed in case we fill FFHistos
5130 Bool_t incrementJetPtRecFF = kTRUE; // needed in case we fill FFHistos
5132 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5134 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
5135 if(!gentrack)continue;
5136 // find jet track in gen tracks list
5137 Int_t iGen = tracksGen->IndexOf(gentrack);
5140 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5145 if(isRefGen[iGen] != 1) continue; // select primaries
5147 Double_t ptGen = gentrack->Pt();
5148 Double_t etaGen = gentrack->Eta();
5149 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5151 // apply same acc & pt cuts as for FF
5153 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5154 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5155 if(ptGen < fTrackPtCut) continue;
5157 Double_t z = ptGen / jetPtGen;
5159 if(z>0) xi = TMath::Log(1/z);
5161 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5162 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
5164 if(dynamic_cast<AliFragFuncHistos*>(histGen) || dynamic_cast<AliFragFuncHistos*>(histRec)){ // histGen can be NULL for secondaries -> ||
5166 // after checking can afford normal cast
5167 AliFragFuncHistos* ffhistGen = (AliFragFuncHistos*) (histGen);
5168 AliFragFuncHistos* ffhistRec = (AliFragFuncHistos*) (histRec);
5171 if(useRecJetPt) ffhistGen->FillFF( ptGen, jetPtRec, incrementJetPtGenFF );
5172 else ffhistGen->FillFF( ptGen, jetPtGen, incrementJetPtGenFF );
5174 incrementJetPtGenFF = kFALSE;
5178 if(ffhistRec && isRec){
5180 if(useRecJetPt) ffhistRec->FillFF( ptGen, jetPtRec, incrementJetPtRecFF );
5181 else ffhistRec->FillFF( ptGen, jetPtGen, incrementJetPtRecFF );
5183 incrementJetPtRecFF = kFALSE;
5186 else if(dynamic_cast<AliFragFuncIntraJetHistos*>(histGen) && dynamic_cast<AliFragFuncIntraJetHistos*>(histRec)){
5188 // eff for IJ histos ...
5194 // _____________________________________________________________________________________________________________________________________________
5195 void AliAnalysisTaskFragmentationFunction::FillTwoTrackHistosRecGen(TList* tracksGen, /*TList* tracksRec, const TArrayI& indexAODTr, */ const TArrayS& isRefGen){
5197 Int_t nTracksGen = tracksGen->GetSize();
5199 if(!nTracksGen) return;
5201 Int_t highPtIndices[nTracksGen];
5204 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5206 if(isRefGen[iGen] != 1) continue; // select primaries
5208 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5209 if(!gentrack) continue;
5210 Double_t ptGen = gentrack->Pt();
5211 Double_t etaGen = gentrack->Eta();
5212 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5214 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5215 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5218 highPtIndices[nHighPt++] = iGen;
5223 for(Int_t nHPT = 0; nHPT<nHighPt; nHPT++){ // high pt tracks loop
5225 Int_t indexHPT = highPtIndices[nHPT];
5227 AliAODMCParticle* genHPTtrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(indexHPT));
5228 if(!genHPTtrack) continue;
5230 Double_t trackMomHPT[3];
5231 genHPTtrack->PxPyPz(trackMomHPT);
5232 TVector3 track3MomHPT(trackMomHPT);
5235 Double_t distNN = 10;
5239 for(Int_t iGen=0; iGen<nTracksGen; iGen++){ // all gen tracks loop
5241 if(isRefGen[iGen] != 1) continue; // select primaries
5243 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5244 if(!gentrack) continue;
5246 Double_t ptGen = gentrack->Pt();
5247 Double_t etaGen = gentrack->Eta();
5248 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5250 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5251 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5252 if(ptGen < fTrackPtCut) continue;
5255 Double_t gentrackMom[3];
5256 gentrack->PxPyPz(gentrackMom);
5257 TVector3 gentrack3Mom(gentrackMom);
5259 Double_t dR = gentrack3Mom.DeltaR(track3MomHPT);
5261 if(iGen != indexHPT && dR<distNN){
5270 // _____________________________________________________________________________________________________________________________________________
5271 void AliAnalysisTaskFragmentationFunction::FillSingleTrackResponse(THnSparse* hnResponse, TList* tracksGen, TList* tracksRec,
5272 const TArrayI& indexAODTr, const TArrayS& isGenPrim)
5274 // fill response matrix for single tracks
5277 Int_t nTracksGen = tracksGen->GetSize();
5279 if(!nTracksGen) return;
5281 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
5283 if(isGenPrim[iGen] != 1) continue; // select primaries
5285 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
5286 if(!gentrack)continue;
5287 Double_t ptGen = gentrack->Pt();
5288 Double_t etaGen = gentrack->Eta();
5289 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5291 // apply same acc & pt cuts as for FF
5292 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5293 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5294 if(ptGen < fTrackPtCut) continue;
5296 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5298 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5299 if(!rectrack)continue;
5300 Double_t ptRec = rectrack->Pt();
5302 Double_t entries[2] = {ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5303 hnResponse->Fill(entries);
5305 Double_t invPtGen = 0;
5306 if(ptGen) invPtGen = 1/ptGen;
5308 Double_t invPtRec = 0;
5309 if(ptRec) invPtRec = 1/ptRec;
5311 fh2SingleInvPtRecMnGenVsPtGen->Fill(ptGen,invPtRec - invPtGen);
5317 // ______________________________________________________________________________________________________________________________________________________
5318 void AliAnalysisTaskFragmentationFunction::FillJetTrackResponse(THnSparse* hnResponsePt, THnSparse* hnResponseZ, THnSparse* hnResponseXi,
5319 Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList,
5320 const TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim,const Bool_t useRecJetPt)
5322 // fill response matrix for tracks in jets
5324 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
5326 if(!nTracksJet) return;
5328 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
5330 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
5331 if(!gentrack)continue;
5332 // find jet track in gen tracks list
5333 Int_t iGen = tracksGen->IndexOf(gentrack);
5336 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
5340 if(isGenPrim[iGen] != 1) continue; // select primaries
5342 Double_t ptGen = gentrack->Pt();
5343 Double_t etaGen = gentrack->Eta();
5344 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
5346 // apply same acc & pt cuts as for FF
5348 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
5349 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
5350 if(ptGen < fTrackPtCut) continue;
5352 Double_t zGen = ptGen / jetPtRec;
5354 if(zGen>0) xiGen = TMath::Log(1/zGen);
5356 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
5360 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
5362 Double_t ptRec = rectrack->Pt();
5364 Double_t zRec = ptRec / jetPtRec;
5366 if(zRec>0) xiRec = TMath::Log(1/zRec);
5368 Double_t jetPt = useRecJetPt ? jetPtRec : jetPtGen;
5370 Double_t entriesPt[3] = {jetPt,ptRec,ptGen}; // AliCorrFW convention: gen vs rec
5371 Double_t entriesZ[3] = {jetPt,zRec,zGen};
5372 Double_t entriesXi[3] = {jetPt,xiRec,xiGen};
5374 hnResponsePt->Fill(entriesPt);
5375 hnResponseZ->Fill(entriesZ);
5376 hnResponseXi->Fill(entriesXi);
5382 // _____________________________________________________________________________________________________________________________________________________________________
5383 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
5385 // List of tracks in cone perpendicular to the jet azimuthal direction
5388 jet->PxPyPz(jetMom);
5390 TVector3 jet3mom(jetMom);
5391 // Rotate phi and keep eta unchanged
5392 Double_t etaTilted = jet3mom.Eta();
5393 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5394 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5396 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5399 if( fUseExtraTracksBgr != 1){
5400 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5401 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5402 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5406 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5408 Double_t trackMom[3];
5409 track->PxPyPz(trackMom);
5410 TVector3 track3mom(trackMom);
5412 Double_t deta = track3mom.Eta() - etaTilted;
5413 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
5414 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
5415 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
5418 outputlist->Add(track);
5419 sumPt += track->Pt();
5425 // ________________________________________________________________________________________________________________________________________________________
5426 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
5428 // List of tracks in cone perpendicular to the jet azimuthal direction
5431 jet->PxPyPz(jetMom);
5433 TVector3 jet3mom(jetMom);
5434 // Rotate phi and keep eta unchanged
5435 Double_t etaTilted = jet3mom.Eta();
5436 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
5437 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
5439 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
5443 if( fUseExtraTracksBgr != 1){
5444 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5445 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5446 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5450 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5452 Float_t trackEta = track->Eta();
5453 Float_t trackPhi = track->Phi();
5455 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
5457 if((trackPhi<=phiTilted+radius) &&
5458 (trackPhi>=phiTilted-radius) &&
5459 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
5461 outputlist->Add(track);
5462 sumPt += track->Pt();
5465 else if( phiTilted-radius < 0 )
5467 if((( trackPhi < phiTilted+radius ) ||
5468 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
5469 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5471 outputlist->Add(track);
5472 sumPt += track->Pt();
5475 else if( phiTilted+radius > 2*TMath::Pi() )
5477 if((( trackPhi > phiTilted-radius ) ||
5478 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
5479 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
5481 outputlist->Add(track);
5482 sumPt += track->Pt();
5487 // Jet area - Temporarily added should be modified with the proper jet area value
5488 Float_t areaJet = CalcJetArea(etaTilted,radius);
5489 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
5491 normFactor = (Float_t) 1. / (areaJet / areaTilted);
5496 // ________________________________________________________________________________________________________________________________________________________
5497 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt)
5499 // List of tracks outside cone around N jet axis
5500 // Particles taken randomly
5503 // Int_t nj = jetlist->GetSize();
5504 Float_t rc = GetFFRadius();
5505 Float_t rcl = GetFFBckgRadius();
5507 // Estimate jet and background areas
5508 Float_t* areaJet = new Float_t[nCases];
5509 memset(areaJet, 0, sizeof(Float_t) * nCases);
5510 Float_t* areaJetLarge = new Float_t[nCases];
5511 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
5512 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5513 Float_t areaOut = areaFull;
5515 //estimate jets and background areas
5518 TList* templist = new TList();
5519 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5521 for(Int_t ij=0; ij<nCases; ++ij)
5523 // Get jet information
5524 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5527 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5528 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5529 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5532 areaJet[ij] = CalcJetArea(etaJet,rc);
5534 // Area jet larger angle
5535 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5538 areaOut = areaOut - areaJetLarge[ij];
5542 // List of all tracks outside jet areas
5543 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5546 if( fUseExtraTracksBgr != 1){
5547 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5548 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5549 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5553 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5555 Double_t trackMom[3];
5556 track->PxPyPz(trackMom);
5557 TVector3 track3mom(trackMom);
5559 Double_t *dR = new Double_t[nCases];
5560 for(Int_t ij=0; ij<nCases; ij++)
5561 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5563 if((nCases==1 && (dR[0]>rcl)) ||
5564 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5565 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5567 templist->Add(track);
5573 // Take tracks randomly
5574 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
5575 TArrayI* ar = new TArrayI(nOut);
5577 for(Int_t init=0; init<nOut; init++)
5580 Int_t *randIndex = new Int_t[nScaled];
5581 for(Int_t init2=0; init2<nScaled; init2++)
5582 randIndex[init2] = -1;
5584 // Select nScaled different random numbers in nOut
5585 for(Int_t i=0; i<nScaled; i++)
5587 Int_t* tmpArr = new Int_t[nOut-i];
5588 Int_t temp = fRandom->Integer(nOut-i);
5589 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
5591 if(ind<temp) tmpArr[ind] = (*ar)[ind];
5592 else tmpArr[ind] = (*ar)[ind+1];
5594 randIndex[i] = (*ar)[temp];
5596 ar->Set(nOut-i-1,tmpArr);
5602 for(Int_t ipart=0; ipart<nScaled; ipart++)
5604 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
5605 outputlist->Add(track);
5606 sumPt += track->Pt();
5613 delete [] areaJetLarge;
5616 delete [] randIndex;
5620 // ________________________________________________________________________________________________________________________________________________________
5621 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt, Double_t &normFactor)
5623 // List of tracks outside cone around N jet axis
5624 // All particles taken + final scaling factor
5627 Float_t rc = GetFFRadius();
5628 Float_t rcl = GetFFBckgRadius();
5630 // Estimate jet and background areas
5631 Float_t* areaJet = new Float_t[nCases];
5632 memset(areaJet, 0, sizeof(Float_t) * nCases);
5633 Float_t* areaJetLarge = new Float_t[nCases];
5634 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
5635 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
5636 Float_t areaOut = areaFull;
5638 //estimate jets and background areas
5641 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
5643 for(Int_t ij=0; ij<nCases; ++ij)
5645 // Get jet information
5646 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
5649 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
5650 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
5651 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
5654 areaJet[ij] = CalcJetArea(etaJet,rc);
5656 // Area jet larger angle
5657 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
5659 // Outside jets area
5660 areaOut = areaOut - areaJetLarge[ij];
5664 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
5667 if( fUseExtraTracksBgr != 1){
5668 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
5669 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5670 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5674 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5676 Double_t trackMom[3];
5677 track->PxPyPz(trackMom);
5678 TVector3 track3mom(trackMom);
5680 Double_t *dR = new Double_t[nCases];
5681 for(Int_t ij=0; ij<nCases; ij++)
5682 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
5685 (nCases==1 && (dR[0]>rcl)) ||
5686 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
5687 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
5689 outputlist->Add(track);
5690 sumPt += track->Pt();
5696 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
5697 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
5702 delete [] areaJetLarge;
5707 // ______________________________________________________________________________________________________________________________________________________
5708 Float_t AliAnalysisTaskFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
5710 // calculate area of jet with eta etaJet and radius rc
5712 Float_t detamax = etaJet + rc;
5713 Float_t detamin = etaJet - rc;
5714 Float_t accmax = 0.0; Float_t accmin = 0.0;
5715 if(detamax > fTrackEtaMax){ // sector outside etamax
5716 Float_t h = fTrackEtaMax - etaJet;
5717 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5719 if(detamin < fTrackEtaMin){ // sector outside etamin
5720 Float_t h = fTrackEtaMax + etaJet;
5721 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5723 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
5729 // ___________________________________________________________________________________________________________________________
5730 void AliAnalysisTaskFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
5732 // fill tracks from bckgCluster branch in list,
5733 // for all clusters outside jet cone
5734 // sum up total area of clusters
5736 Double_t rc = GetFFRadius();
5737 Double_t rcl = GetFFBckgRadius();
5739 Double_t areaTotal = 0;
5740 Double_t sumPtTotal = 0;
5742 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
5744 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
5746 Double_t dR = jet->DeltaR(bgrCluster);
5748 if(dR<rcl) continue;
5750 Double_t clusterPt = bgrCluster->Pt();
5751 Double_t area = bgrCluster->EffectiveAreaCharged();
5753 sumPtTotal += clusterPt;
5755 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
5757 for(Int_t it = 0; it<nTracksJet; it++){
5759 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5760 if( fUseExtraTracksBgr != 1){
5761 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
5762 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5763 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5767 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
5768 if(!track) continue;
5770 Float_t trackPt = track->Pt();
5771 Float_t trackEta = track->Eta();
5772 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5774 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5775 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5776 if(trackPt < fTrackPtCut) continue;
5778 outputlist->Add(track);
5782 Double_t areaJet = TMath::Pi()*rc*rc;
5783 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
5788 // _______________________________________________________________________________________________________________________
5789 void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
5791 // fill tracks from bckgCluster branch,
5792 // using cluster with median density (odd number of clusters)
5793 // or picking randomly one of the two closest to median (even number)
5797 Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
5799 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
5801 Double_t* bgrDensity = new Double_t[nBckgClusters];
5802 Int_t* indices = new Int_t[nBckgClusters];
5804 for(Int_t ij=0; ij<nBckgClusters; ++ij){
5806 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
5807 Double_t clusterPt = bgrCluster->Pt();
5808 Double_t area = bgrCluster->EffectiveAreaCharged();
5810 Double_t density = 0;
5811 if(area>0) density = clusterPt/area;
5813 bgrDensity[ij] = density;
5817 TMath::Sort(nBckgClusters, bgrDensity, indices);
5819 // get median cluster
5821 AliAODJet* medianCluster = 0;
5822 Double_t medianDensity = 0;
5824 if(TMath::Odd(nBckgClusters)){
5826 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
5827 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
5829 Double_t clusterPt = medianCluster->Pt();
5830 Double_t area = medianCluster->EffectiveAreaCharged();
5832 if(area>0) medianDensity = clusterPt/area;
5836 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
5837 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
5839 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
5840 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
5842 Double_t density1 = 0;
5843 Double_t clusterPt1 = medianCluster1->Pt();
5844 Double_t area1 = medianCluster1->EffectiveAreaCharged();
5845 if(area1>0) density1 = clusterPt1/area1;
5847 Double_t density2 = 0;
5848 Double_t clusterPt2 = medianCluster2->Pt();
5849 Double_t area2 = medianCluster2->EffectiveAreaCharged();
5850 if(area2>0) density2 = clusterPt2/area2;
5852 medianDensity = 0.5*(density1+density2);
5854 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
5857 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
5859 for(Int_t it = 0; it<nTracksJet; it++){
5861 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5862 if( fUseExtraTracksBgr != 1){
5863 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
5864 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5865 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5869 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
5870 if(!track) continue;
5872 Float_t trackPt = track->Pt();
5873 Float_t trackEta = track->Eta();
5874 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5876 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5877 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5878 if(trackPt < fTrackPtCut) continue;
5880 outputlist->Add(track);
5883 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
5884 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
5886 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
5890 delete[] bgrDensity;
5894 // ______________________________________________________________________________________________________________________________________________________
5895 void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet, Float_t leadTrackPt, TLorentzVector* leadTrackV,
5896 AliFragFuncHistos* ffbckghistocuts, AliFragFuncHistos* ffbckghistoleading,
5897 AliFragFuncIntraJetHistos* ijbckghistocuts, AliFragFuncIntraJetHistos* ijbckghistoleading,
5898 AliFragFuncQATrackHistos* qabckghistocuts){
5900 // List of tracks outside jets for background study
5901 TList* tracklistout2jets = new TList();
5902 TList* tracklistout3jets = new TList();
5903 TList* tracklistout2jetsStat = new TList();
5904 TList* tracklistout3jetsStat = new TList();
5905 Double_t sumPtOut2Jets = 0.;
5906 Double_t sumPtOut3Jets = 0.;
5907 Double_t sumPtOut2JetsStat = 0.;
5908 Double_t sumPtOut3JetsStat = 0.;
5909 Double_t normFactor2Jets = 0.;
5910 Double_t normFactor3Jets = 0.;
5912 Int_t nRecJetsCuts = fJetsRecCuts->GetEntries();
5914 if(nRecJetsCuts>1) {
5915 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
5916 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
5919 if(nRecJetsCuts>2) {
5920 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
5921 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
5924 if(type==kBckgOutLJ || type==kBckgOutAJ)
5926 TList* tracklistoutleading = new TList();
5927 Double_t sumPtOutLeading = 0.;
5928 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
5929 if(type==kBckgOutLJ) fh1OutLeadingMult->Fill(tracklistoutleading->GetSize());
5931 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
5933 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
5934 if(!trackVP) continue;
5935 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5937 Float_t jetPt = jet->Pt();
5938 Float_t trackPt = trackV->Pt();
5940 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5942 if(type==kBckgOutLJ)
5944 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
5945 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
5947 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt);
5948 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
5950 // Fill track QA for background
5951 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5954 // All cases included
5955 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5957 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5958 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
5960 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
5961 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
5965 // Increment jet pt with one entry in case #tracks outside jets = 0
5966 if(tracklistoutleading->GetSize()==0) {
5967 Float_t jetPt = jet->Pt();
5968 Bool_t incrementJetPt = kTRUE;
5969 if(type==kBckgOutLJ)
5971 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5972 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
5974 // All cases included
5975 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5977 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5978 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
5981 delete tracklistoutleading;
5983 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
5985 TList* tracklistoutleadingStat = new TList();
5986 Double_t sumPtOutLeadingStat = 0.;
5987 Double_t normFactorLeading = 0.;
5989 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
5990 if(type==kBckgOutLJStat) fh1OutLeadingStatMult->Fill(tracklistoutleadingStat->GetSize());
5992 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
5994 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
5995 if(!trackVP) continue;
5996 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5998 Float_t jetPt = jet->Pt();
5999 Float_t trackPt = trackV->Pt();
6000 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6003 if(type==kBckgOutLJStat)
6005 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
6006 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading);
6008 if(fFFMode)ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
6009 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading);
6011 // Fill track QA for background
6012 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
6015 // All cases included
6016 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
6018 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
6019 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorLeading );
6021 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
6022 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading );
6024 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6029 // Increment jet pt with one entry in case #tracks outside jets = 0
6030 if(tracklistoutleadingStat->GetSize()==0) {
6031 Float_t jetPt = jet->Pt();
6032 Bool_t incrementJetPt = kTRUE;
6033 if(type==kBckgOutLJStat)
6035 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
6036 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading);
6038 // All cases included
6039 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
6041 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
6042 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorLeading );
6046 delete tracklistoutleadingStat;
6051 Double_t sumPtPerp = 0.;
6052 TList* tracklistperp = new TList();
6053 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp,jet,GetFFRadius(),sumPtPerp);
6054 fh1PerpMult->Fill(tracklistperp->GetSize());
6056 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
6058 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
6059 if(!trackVP)continue;
6060 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6062 Float_t jetPt = jet->Pt();
6063 Float_t trackPt = trackV->Pt();
6065 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6067 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6068 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6070 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6071 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6073 // Fill track QA for background
6074 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6078 // Increment jet pt with one entry in case #tracks outside jets = 0
6079 if(tracklistperp->GetSize()==0) {
6080 Float_t jetPt = jet->Pt();
6081 Bool_t incrementJetPt = kTRUE;
6082 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6083 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6086 delete tracklistperp;
6089 if(type==kBckgASide)
6091 Double_t sumPtASide = 0.;
6092 TList* tracklistaside = new TList();
6093 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,GetFFRadius(),sumPtASide);
6094 fh1ASideMult->Fill(tracklistaside->GetSize());
6096 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
6098 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
6099 if(!trackVP) continue;
6100 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6102 Float_t jetPt = jet->Pt();
6103 Float_t trackPt = trackV->Pt();
6105 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6107 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6108 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6110 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6111 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6113 // Fill track QA for background
6114 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6118 if(tracklistaside->GetSize()==0) {
6119 Float_t jetPt = jet->Pt();
6120 Bool_t incrementJetPt = kTRUE;
6121 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6122 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6125 delete tracklistaside;
6128 if(type==kBckgASideWindow)
6130 Double_t normFactorASide = 0.;
6131 Double_t sumPtASideW = 0.;
6132 TList* tracklistasidew = new TList();
6133 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,GetFFRadius(),sumPtASideW,normFactorASide);
6134 fh1ASideWindowMult->Fill(tracklistasidew->GetSize());
6136 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
6138 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
6139 if(!trackVP) continue;
6140 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6142 Float_t jetPt = jet->Pt();
6143 Float_t trackPt = trackV->Pt();
6144 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6146 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
6147 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorASide);
6149 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorASide );
6150 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorASide );
6152 // Fill track QA for background
6153 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
6157 if(tracklistasidew->GetSize()==0) {
6158 Float_t jetPt = jet->Pt();
6159 Bool_t incrementJetPt = kTRUE;
6160 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
6161 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorASide);
6164 delete tracklistasidew;
6167 if(type==kBckgPerpWindow)
6169 Double_t normFactorPerp = 0.;
6170 Double_t sumPtPerpW = 0.;
6171 TList* tracklistperpw = new TList();
6172 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,GetFFRadius(),sumPtPerpW,normFactorPerp);
6173 fh1PerpWindowMult->Fill(tracklistperpw->GetSize());
6175 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
6177 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
6178 if(!trackVP) continue;
6179 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6181 Float_t jetPt = jet->Pt();
6182 Float_t trackPt = trackV->Pt();
6183 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6185 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
6186 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactorPerp);
6188 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorPerp );
6189 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorPerp );
6191 // Fill track QA for background
6192 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
6196 if(tracklistperpw->GetSize()==0) {
6197 Float_t jetPt = jet->Pt();
6198 Bool_t incrementJetPt = kTRUE;
6199 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
6200 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactorPerp);
6203 delete tracklistperpw;
6207 if(type==kBckgOut2J || type==kBckgOutAJ)
6209 if(type==kBckgOut2J) fh1Out2JetsMult->Fill(tracklistout2jets->GetSize());
6210 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
6212 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
6213 if(!trackVP) continue;
6214 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6216 Float_t jetPt = jet->Pt();
6217 Float_t trackPt = trackV->Pt();
6219 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6221 if(type==kBckgOut2J)
6223 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6224 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6226 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6227 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6229 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6232 // All cases included
6233 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6235 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6236 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6238 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6239 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6243 // Increment jet pt with one entry in case #tracks outside jets = 0
6244 if(tracklistout2jets->GetSize()==0) {
6245 Float_t jetPt = jet->Pt();
6246 Bool_t incrementJetPt = kTRUE;
6247 if(type==kBckgOut2J)
6249 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6250 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6252 // All cases included
6253 if(nRecJetsCuts==2 && type==kBckgOutAJ)
6255 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6256 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6262 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
6264 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
6266 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
6267 if(!trackVP) continue;
6268 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6270 Float_t jetPt = jet->Pt();
6271 Float_t trackPt = trackV->Pt();
6272 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6274 if(type==kBckgOut2JStat)
6276 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
6277 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6279 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
6280 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6282 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6285 // All cases included
6286 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6288 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
6289 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor2Jets );
6291 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
6292 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
6294 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6298 // Increment jet pt with one entry in case #tracks outside jets = 0
6299 if(tracklistout2jetsStat->GetSize()==0) {
6300 Float_t jetPt = jet->Pt();
6301 Bool_t incrementJetPt = kTRUE;
6302 if(type==kBckgOut2JStat)
6304 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6305 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets);
6307 // All cases included
6308 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
6310 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
6311 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor2Jets );
6317 if(type==kBckgOut3J || type==kBckgOutAJ)
6319 if(type==kBckgOut3J) fh1Out3JetsMult->Fill(tracklistout3jets->GetSize());
6321 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
6323 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
6324 if(!trackVP) continue;
6325 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6327 Float_t jetPt = jet->Pt();
6328 Float_t trackPt = trackV->Pt();
6330 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6332 if(type==kBckgOut3J)
6334 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6335 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6337 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6338 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6340 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
6343 // All cases included
6344 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6346 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
6347 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector() );
6349 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt );
6350 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV );
6354 // Increment jet pt with one entry in case #tracks outside jets = 0
6355 if(tracklistout3jets->GetSize()==0) {
6356 Float_t jetPt = jet->Pt();
6357 Bool_t incrementJetPt = kTRUE;
6358 if(type==kBckgOut3J)
6360 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6361 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6363 // All cases included
6364 if(nRecJetsCuts==3 && type==kBckgOutAJ)
6366 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
6367 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt );
6372 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
6374 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
6376 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
6377 if(!trackVP) continue;
6378 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6380 Float_t jetPt = jet->Pt();
6381 Float_t trackPt = trackV->Pt();
6382 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6384 if(type==kBckgOut3JStat)
6386 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
6387 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6389 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets);
6390 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets);
6392 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
6395 // All cases included
6396 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6398 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
6399 if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
6401 if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets );
6402 if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets );
6404 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
6409 // Increment jet pt with one entry in case #tracks outside jets = 0
6410 if(tracklistout3jetsStat->GetSize()==0) {
6411 Float_t jetPt = jet->Pt();
6412 Bool_t incrementJetPt = kTRUE;
6413 if(type==kBckgOut3JStat)
6415 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6416 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets);
6418 // All cases included
6419 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
6421 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
6422 if(fFFMode) ffbckghistoleading->FillFF( -1., leadTrackPt , incrementJetPt, normFactor3Jets );
6428 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
6430 TList* tracklistClustersOutLeading = new TList();
6431 Double_t normFactorClusters = 0;
6432 Float_t jetPt = jet->Pt();
6434 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
6435 fh1OutClustersMult->Fill(tracklistClustersOutLeading->GetSize());
6437 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
6439 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
6440 if(!trackVP) continue;
6441 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6443 Float_t trackPt = trackVP->Pt();
6445 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6447 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6448 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
6453 delete tracklistClustersOutLeading;
6457 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
6459 TList* tracklistClustersMedian = new TList();
6460 Double_t normFactorClusters = 0;
6461 Float_t jetPt = jet->Pt();
6463 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
6464 fh1MedianClustersMult->Fill(tracklistClustersMedian->GetSize());
6466 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
6468 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
6469 if(!trackVP) continue;
6470 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
6472 Float_t trackPt = trackVP->Pt();
6474 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
6476 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
6477 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
6482 delete tracklistClustersMedian;
6485 delete tracklistout2jets;
6486 delete tracklistout3jets;
6487 delete tracklistout2jetsStat;
6488 delete tracklistout3jetsStat;
6492 // ______________________________________________________________________________________________________________________________________________________
6493 AliAODJet* AliAnalysisTaskFragmentationFunction::GetAODBckgSubJet(AliAODJet* jet, Int_t method)
6495 // correct jet pt for (mean bgr energy density) x (jet area)
6497 if(!fBranchRecBackJets.Length()){
6498 if(fDebug>0)Printf("%s:%d background branch name not set",(char*)__FILE__,__LINE__);
6502 static AliAODJetEventBackground* externalBackground = (AliAODJetEventBackground*)(fAOD->FindListObject(fBranchRecBackJets.Data()));
6504 if(!externalBackground){
6505 if(fDebug>0)Printf("%s:%d no external background object found in %s",(char*)__FILE__,__LINE__,fBranchRecBackJets.Data());
6509 Float_t rho = externalBackground->GetBackground(method);
6511 // Calculate background and subtract it from jet pt
6512 Float_t ptBack = rho*jet->EffectiveAreaCharged();
6513 Float_t ptSub = jet->Pt()-ptBack;
6515 // Get px, py, pz from eta, phi, pt
6516 TLorentzVector vecSub;
6517 AliAODJet *tmpJet = 0;
6519 vecSub.SetPtEtaPhiM(ptSub,jet->Eta(),jet->Phi(),0.);
6520 tmpJet = new AliAODJet(vecSub.Px(),vecSub.Py(),vecSub.Pz(),vecSub.P());