1 // *************************************************************************
3 // * Task for ID Fragmentation Function Analysis *
5 // *************************************************************************
8 /**************************************************************************
9 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
11 * Author: The ALICE Off-line Project. *
12 * Contributors are mentioned in the code where appropriate. *
14 * Permission to use, copy, modify and distribute this software and its *
15 * documentation strictly for non-commercial purposes is hereby granted *
16 * without fee, provided that the above copyright notice appears in all *
17 * copies and that both the copyright notice and this permission notice *
18 * appear in the supporting documentation. The authors make no claims *
19 * about the suitability of this software for any purpose. It is *
20 * provided "as is" without express or implied warranty. *
21 **************************************************************************/
30 #include "THnSparse.h"
37 #include "AliAODInputHandler.h"
38 #include "AliAODHandler.h"
39 #include "AliESDEvent.h"
40 #include "AliAODMCParticle.h"
41 #include "AliAODJet.h"
42 #include "AliAODJetEventBackground.h"
43 #include "AliGenPythiaEventHeader.h"
44 #include "AliGenHijingEventHeader.h"
45 #include "AliInputEventHandler.h"
47 #include "AliAnalysisHelperJetTasks.h"
48 #include "AliAnalysisManager.h"
49 #include "AliAnalysisTaskSE.h"
50 #include "AliVParticle.h"
51 #include "AliVEvent.h"
53 #include "AliAnalysisTaskPID.h"
54 #include "AliPIDResponse.h"
56 #include "AliAnalysisTaskIDFragmentationFunction.h"
61 ClassImp(AliAnalysisTaskIDFragmentationFunction)
63 //____________________________________________________________________________
64 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction()
71 ,fBranchRecJets("jets")
72 ,fBranchRecBckgClusters("")
74 ,fBranchEmbeddedJets("")
78 ,fUseAODInputJets(kTRUE)
80 ,fUsePhysicsSelection(kTRUE)
90 ,fUseExtraTracksBgr(0)
91 ,fCutFractionPtEmbedded(0)
92 ,fUseEmbeddedJetAxis(0)
112 ,fTracksRecCutsEfficiency(0)
114 ,fTracksAODMCCharged(0)
115 ,fTracksAODMCChargedSecNS(0)
116 ,fTracksAODMCChargedSecS(0)
117 ,fTracksRecQualityCuts(0)
126 ,fQATrackHistosRecCuts(0)
127 ,fQATrackHistosGen(0)
129 ,fQAJetHistosRecCuts(0)
130 ,fQAJetHistosRecCutsLeading(0)
132 ,fQAJetHistosGenLeading(0)
133 ,fQAJetHistosRecEffLeading(0)
135 ,fFFHistosRecCutsInc(0)
136 ,fFFHistosRecLeadingTrack(0)
139 ,fFFHistosGenLeadingTrack(0)
140 ,fQATrackHighPtThreshold(0)
173 ,fh1VertexNContributors(0)
185 ,fh1nRecBckgJetsCuts(0)
187 ,fh2PtRecVsGenPrim(0)
191 ,fQATrackHistosRecEffGen(0)
192 ,fQATrackHistosRecEffRec(0)
193 ,fQATrackHistosSecRecNS(0)
194 ,fQATrackHistosSecRecS(0)
195 ,fQATrackHistosSecRecSsc(0)
196 ,fFFHistosRecEffRec(0)
197 ,fFFHistosSecRecNS(0)
199 ,fFFHistosSecRecSsc(0)
206 ,fh1FractionPtEmbedded(0)
208 ,fh2DeltaPtVsJetPtEmbedded(0)
209 ,fh2DeltaPtVsRecJetPtEmbedded(0)
210 ,fh1DeltaREmbedded(0)
211 ,fQABckgHisto0RecCuts(0)
213 ,fQABckgHisto1RecCuts(0)
215 ,fQABckgHisto2RecCuts(0)
217 ,fQABckgHisto3RecCuts(0)
219 ,fQABckgHisto4RecCuts(0)
221 ,fFFBckgHisto0RecCuts(0)
223 ,fFFBckgHisto1RecCuts(0)
225 ,fFFBckgHisto2RecCuts(0)
227 ,fFFBckgHisto3RecCuts(0)
229 ,fFFBckgHisto4RecCuts(0)
231 ,fFFBckgHisto0RecEffRec(0)
232 ,fFFBckgHisto0SecRecNS(0)
233 ,fFFBckgHisto0SecRecS(0)
234 ,fFFBckgHisto0SecRecSsc(0)
236 ,fProNtracksLeadingJet(0)
238 ,fProNtracksLeadingJetGen(0)
239 ,fProDelR80pcPtGen(0)
240 ,fProNtracksLeadingJetBgrPerp2(0)
241 ,fProNtracksLeadingJetRecPrim(0)
242 ,fProDelR80pcPtRecPrim(0)
243 ,fProNtracksLeadingJetRecSecNS(0)
244 ,fProNtracksLeadingJetRecSecS(0)
245 ,fProNtracksLeadingJetRecSecSsc(0)
249 ,fOnlyLeadingJets(kFALSE)
252 ,fNumInclusivePIDtasks(0)
254 ,fNameInclusivePIDtask(0x0)
255 ,fNameJetPIDtask(0x0)
256 ,fInclusivePIDtask(0x0)
258 ,fUseInclusivePIDtask(kFALSE)
259 ,fUseJetPIDtask(kFALSE)
262 // default constructor
269 for(Int_t ii=0; ii<5; ii++){
270 fProDelRPtSum[ii] = 0;
271 fProDelRPtSumGen[ii] = 0;
272 fProDelRPtSumBgrPerp2[ii] = 0;
273 fProDelRPtSumRecPrim[ii] = 0;
274 fProDelRPtSumRecSecNS[ii] = 0;
275 fProDelRPtSumRecSecS[ii] = 0;
276 fProDelRPtSumRecSecSsc[ii] = 0;
279 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
280 fIDFFHistosRecCuts[i] = 0x0;
281 fIDFFHistosGen[i] = 0x0;
283 fhDCA_XY_prim_MCID[i] = 0x0;
284 fhDCA_Z_prim_MCID[i] = 0x0;
286 fhDCA_XY_sec_MCID[i] = 0x0;
287 fhDCA_Z_sec_MCID[i] = 0x0;
291 //_______________________________________________________________________________________________
292 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction(const char *name)
293 : AliAnalysisTaskSE(name)
299 ,fBranchRecJets("jets")
300 ,fBranchRecBckgClusters("")
302 ,fBranchEmbeddedJets("")
306 ,fUseAODInputJets(kTRUE)
308 ,fUsePhysicsSelection(kTRUE)
309 ,fEvtSelectionMask(0)
318 ,fUseExtraTracksBgr(0)
319 ,fCutFractionPtEmbedded(0)
320 ,fUseEmbeddedJetAxis(0)
321 ,fUseEmbeddedJetPt(0)
340 ,fTracksRecCutsEfficiency(0)
342 ,fTracksAODMCCharged(0)
343 ,fTracksAODMCChargedSecNS(0)
344 ,fTracksAODMCChargedSecS(0)
345 ,fTracksRecQualityCuts(0)
354 ,fQATrackHistosRecCuts(0)
355 ,fQATrackHistosGen(0)
357 ,fQAJetHistosRecCuts(0)
358 ,fQAJetHistosRecCutsLeading(0)
360 ,fQAJetHistosGenLeading(0)
361 ,fQAJetHistosRecEffLeading(0)
363 ,fFFHistosRecCutsInc(0)
364 ,fFFHistosRecLeadingTrack(0)
367 ,fFFHistosGenLeadingTrack(0)
368 ,fQATrackHighPtThreshold(0)
401 ,fh1VertexNContributors(0)
413 ,fh1nRecBckgJetsCuts(0)
415 ,fh2PtRecVsGenPrim(0)
419 ,fQATrackHistosRecEffGen(0)
420 ,fQATrackHistosRecEffRec(0)
421 ,fQATrackHistosSecRecNS(0)
422 ,fQATrackHistosSecRecS(0)
423 ,fQATrackHistosSecRecSsc(0)
424 ,fFFHistosRecEffRec(0)
425 ,fFFHistosSecRecNS(0)
427 ,fFFHistosSecRecSsc(0)
434 ,fh1FractionPtEmbedded(0)
436 ,fh2DeltaPtVsJetPtEmbedded(0)
437 ,fh2DeltaPtVsRecJetPtEmbedded(0)
438 ,fh1DeltaREmbedded(0)
439 ,fQABckgHisto0RecCuts(0)
441 ,fQABckgHisto1RecCuts(0)
443 ,fQABckgHisto2RecCuts(0)
445 ,fQABckgHisto3RecCuts(0)
447 ,fQABckgHisto4RecCuts(0)
449 ,fFFBckgHisto0RecCuts(0)
451 ,fFFBckgHisto1RecCuts(0)
453 ,fFFBckgHisto2RecCuts(0)
455 ,fFFBckgHisto3RecCuts(0)
457 ,fFFBckgHisto4RecCuts(0)
459 ,fFFBckgHisto0RecEffRec(0)
460 ,fFFBckgHisto0SecRecNS(0)
461 ,fFFBckgHisto0SecRecS(0)
462 ,fFFBckgHisto0SecRecSsc(0)
464 ,fProNtracksLeadingJet(0)
466 ,fProNtracksLeadingJetGen(0)
467 ,fProDelR80pcPtGen(0)
468 ,fProNtracksLeadingJetBgrPerp2(0)
469 ,fProNtracksLeadingJetRecPrim(0)
470 ,fProDelR80pcPtRecPrim(0)
471 ,fProNtracksLeadingJetRecSecNS(0)
472 ,fProNtracksLeadingJetRecSecS(0)
473 ,fProNtracksLeadingJetRecSecSsc(0)
475 ,fOnlyLeadingJets(kFALSE)
477 ,fNumInclusivePIDtasks(0)
479 ,fNameInclusivePIDtask(0x0)
480 ,fNameJetPIDtask(0x0)
481 ,fInclusivePIDtask(0x0)
483 ,fUseInclusivePIDtask(kFALSE)
484 ,fUseJetPIDtask(kFALSE)
494 for(Int_t ii=0; ii<5; ii++){
495 fProDelRPtSum[ii] = 0;
496 fProDelRPtSumGen[ii] = 0;
497 fProDelRPtSumBgrPerp2[ii] = 0;
498 fProDelRPtSumRecPrim[ii] = 0;
499 fProDelRPtSumRecSecNS[ii] = 0;
500 fProDelRPtSumRecSecS[ii] = 0;
501 fProDelRPtSumRecSecSsc[ii] = 0;
504 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
505 fIDFFHistosRecCuts[i] = 0x0;
506 fIDFFHistosGen[i] = 0x0;
508 fhDCA_XY_prim_MCID[i] = 0x0;
509 fhDCA_Z_prim_MCID[i] = 0x0;
511 fhDCA_XY_sec_MCID[i] = 0x0;
512 fhDCA_Z_sec_MCID[i] = 0x0;
515 DefineOutput(1,TList::Class());
518 //__________________________________________________________________________________________________________________________
519 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction(const AliAnalysisTaskIDFragmentationFunction ©)
520 : AliAnalysisTaskSE()
523 ,fAODJets(copy.fAODJets)
524 ,fAODExtension(copy.fAODExtension)
525 ,fNonStdFile(copy.fNonStdFile)
526 ,fBranchRecJets(copy.fBranchRecJets)
527 ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
528 ,fBranchGenJets(copy.fBranchGenJets)
529 ,fBranchEmbeddedJets(copy.fBranchEmbeddedJets)
530 ,fTrackTypeGen(copy.fTrackTypeGen)
531 ,fJetTypeGen(copy.fJetTypeGen)
532 ,fJetTypeRecEff(copy.fJetTypeRecEff)
533 ,fUseAODInputJets(copy.fUseAODInputJets)
534 ,fFilterMask(copy.fFilterMask)
535 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
536 ,fEvtSelectionMask(copy.fEvtSelectionMask)
537 ,fEventClass(copy.fEventClass)
538 ,fMaxVertexZ(copy.fMaxVertexZ)
539 ,fTrackPtCut(copy.fTrackPtCut)
540 ,fTrackEtaMin(copy.fTrackEtaMin)
541 ,fTrackEtaMax(copy.fTrackEtaMax)
542 ,fTrackPhiMin(copy.fTrackPhiMin)
543 ,fTrackPhiMax(copy.fTrackPhiMax)
544 ,fUseExtraTracks(copy.fUseExtraTracks)
545 ,fUseExtraTracksBgr(copy.fUseExtraTracksBgr)
546 ,fCutFractionPtEmbedded(copy.fCutFractionPtEmbedded)
547 ,fUseEmbeddedJetAxis(copy.fUseEmbeddedJetAxis)
548 ,fUseEmbeddedJetPt(copy.fUseEmbeddedJetPt)
549 ,fJetPtCut(copy.fJetPtCut)
550 ,fJetEtaMin(copy.fJetEtaMin)
551 ,fJetEtaMax(copy.fJetEtaMax)
552 ,fJetPhiMin(copy.fJetPhiMin)
553 ,fJetPhiMax(copy.fJetPhiMax)
554 ,fFFRadius(copy.fFFRadius)
555 ,fFFMinLTrackPt(copy.fFFMinLTrackPt)
556 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
557 ,fFFMinnTracks(copy.fFFMinnTracks)
558 ,fFFBckgRadius(copy.fFFBckgRadius)
559 ,fBckgMode(copy.fBckgMode)
560 ,fQAMode(copy.fQAMode)
561 ,fFFMode(copy.fFFMode)
562 ,fIDFFMode(copy.fIDFFMode)
563 ,fEffMode(copy.fEffMode)
564 ,fJSMode(copy.fJSMode)
565 ,fAvgTrials(copy.fAvgTrials)
566 ,fTracksRecCuts(copy.fTracksRecCuts)
567 ,fTracksRecCutsEfficiency(copy.fTracksRecCutsEfficiency)
568 ,fTracksGen(copy.fTracksGen)
569 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
570 ,fTracksAODMCChargedSecNS(copy.fTracksAODMCChargedSecNS)
571 ,fTracksAODMCChargedSecS(copy.fTracksAODMCChargedSecS)
572 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
573 ,fJetsRec(copy.fJetsRec)
574 ,fJetsRecCuts(copy.fJetsRecCuts)
575 ,fJetsGen(copy.fJetsGen)
576 ,fJetsRecEff(copy.fJetsRecEff)
577 ,fJetsEmbedded(copy.fJetsEmbedded)
578 ,fBckgJetsRec(copy.fBckgJetsRec)
579 ,fBckgJetsRecCuts(copy.fBckgJetsRecCuts)
580 ,fBckgJetsGen(copy.fBckgJetsGen)
581 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
582 ,fQATrackHistosGen(copy.fQATrackHistosGen)
583 ,fQAJetHistosRec(copy.fQAJetHistosRec)
584 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
585 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
586 ,fQAJetHistosGen(copy.fQAJetHistosGen)
587 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
588 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
589 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
590 ,fFFHistosRecCutsInc(copy.fFFHistosRecCutsInc)
591 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
592 ,fFFHistosGen(copy.fFFHistosGen)
593 ,fFFHistosGenInc(copy.fFFHistosGenInc)
594 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
595 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
596 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
597 ,fFFJetPtMin(copy.fFFJetPtMin)
598 ,fFFJetPtMax(copy.fFFJetPtMax)
599 ,fFFNBinsPt(copy.fFFNBinsPt)
600 ,fFFPtMin(copy.fFFPtMin)
601 ,fFFPtMax(copy.fFFPtMax)
602 ,fFFNBinsXi(copy.fFFNBinsXi)
603 ,fFFXiMin(copy.fFFXiMin)
604 ,fFFXiMax(copy.fFFXiMax)
605 ,fFFNBinsZ(copy.fFFNBinsZ)
606 ,fFFZMin(copy.fFFZMin)
607 ,fFFZMax(copy.fFFZMax)
608 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
609 ,fQAJetPtMin(copy.fQAJetPtMin)
610 ,fQAJetPtMax(copy.fQAJetPtMax)
611 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
612 ,fQAJetEtaMin(copy.fQAJetEtaMin)
613 ,fQAJetEtaMax(copy.fQAJetEtaMax)
614 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
615 ,fQAJetPhiMin(copy.fQAJetPhiMin)
616 ,fQAJetPhiMax(copy.fQAJetPhiMax)
617 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
618 ,fQATrackPtMin(copy.fQATrackPtMin)
619 ,fQATrackPtMax(copy.fQATrackPtMax)
620 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
621 ,fQATrackEtaMin(copy.fQATrackEtaMin)
622 ,fQATrackEtaMax(copy.fQATrackEtaMax)
623 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
624 ,fQATrackPhiMin(copy.fQATrackPhiMin)
625 ,fQATrackPhiMax(copy.fQATrackPhiMax)
626 ,fCommonHistList(copy.fCommonHistList)
627 ,fh1EvtSelection(copy.fh1EvtSelection)
628 ,fh1VertexNContributors(copy.fh1VertexNContributors)
629 ,fh1VertexZ(copy.fh1VertexZ)
630 ,fh1EvtMult(copy.fh1EvtMult)
631 ,fh1EvtCent(copy.fh1EvtCent)
632 ,fh1Xsec(copy.fh1Xsec)
633 ,fh1Trials(copy.fh1Trials)
634 ,fh1PtHard(copy.fh1PtHard)
635 ,fh1PtHardTrials(copy.fh1PtHardTrials)
636 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
637 ,fh1nGenJets(copy.fh1nGenJets)
638 ,fh1nRecEffJets(copy.fh1nRecEffJets)
639 ,fh1nEmbeddedJets(copy.fh1nEmbeddedJets)
640 ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts)
641 ,fh1nGenBckgJets(copy.fh1nGenBckgJets)
642 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
643 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
644 ,fhDCA_XY(copy.fhDCA_XY)
645 ,fhDCA_Z(copy.fhDCA_Z)
646 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
647 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
648 ,fQATrackHistosSecRecNS(copy.fQATrackHistosSecRecNS)
649 ,fQATrackHistosSecRecS(copy.fQATrackHistosSecRecS)
650 ,fQATrackHistosSecRecSsc(copy.fQATrackHistosSecRecSsc)
651 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
652 ,fFFHistosSecRecNS(copy.fFFHistosSecRecNS)
653 ,fFFHistosSecRecS(copy.fFFHistosSecRecS)
654 ,fFFHistosSecRecSsc(copy.fFFHistosSecRecSsc)
656 ,fh1BckgMult0(copy.fh1BckgMult0)
657 ,fh1BckgMult1(copy.fh1BckgMult1)
658 ,fh1BckgMult2(copy.fh1BckgMult2)
659 ,fh1BckgMult3(copy.fh1BckgMult3)
660 ,fh1BckgMult4(copy.fh1BckgMult4)
661 ,fh1FractionPtEmbedded(copy.fh1FractionPtEmbedded)
662 ,fh1IndexEmbedded(copy.fh1IndexEmbedded)
663 ,fh2DeltaPtVsJetPtEmbedded(copy.fh2DeltaPtVsJetPtEmbedded)
664 ,fh2DeltaPtVsRecJetPtEmbedded(copy.fh2DeltaPtVsRecJetPtEmbedded)
665 ,fh1DeltaREmbedded(copy.fh1DeltaREmbedded)
666 ,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
667 ,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
668 ,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
669 ,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
670 ,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
671 ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
672 ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
673 ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
674 ,fQABckgHisto4RecCuts(copy.fQABckgHisto4RecCuts)
675 ,fQABckgHisto4Gen(copy.fQABckgHisto4Gen)
676 ,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
677 ,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
678 ,fFFBckgHisto1RecCuts(copy.fFFBckgHisto1RecCuts)
679 ,fFFBckgHisto1Gen(copy.fFFBckgHisto1Gen)
680 ,fFFBckgHisto2RecCuts(copy.fFFBckgHisto2RecCuts)
681 ,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
682 ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
683 ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
684 ,fFFBckgHisto4RecCuts(copy.fFFBckgHisto4RecCuts)
685 ,fFFBckgHisto4Gen(copy.fFFBckgHisto4Gen)
686 ,fFFBckgHisto0RecEffRec(copy.fFFBckgHisto0RecEffRec)
687 ,fFFBckgHisto0SecRecNS(copy.fFFBckgHisto0SecRecNS)
688 ,fFFBckgHisto0SecRecS(copy.fFFBckgHisto0SecRecS)
689 ,fFFBckgHisto0SecRecSsc(copy.fFFBckgHisto0SecRecSsc)
691 ,fProNtracksLeadingJet(copy.fProNtracksLeadingJet)
692 ,fProDelR80pcPt(copy.fProDelR80pcPt)
693 ,fProNtracksLeadingJetGen(copy.fProNtracksLeadingJetGen)
694 ,fProDelR80pcPtGen(copy.fProDelR80pcPtGen)
695 ,fProNtracksLeadingJetBgrPerp2(copy.fProNtracksLeadingJetBgrPerp2)
696 ,fProNtracksLeadingJetRecPrim(copy.fProNtracksLeadingJetRecPrim)
697 ,fProDelR80pcPtRecPrim(copy.fProDelR80pcPtRecPrim)
698 ,fProNtracksLeadingJetRecSecNS(copy.fProNtracksLeadingJetRecSecNS)
699 ,fProNtracksLeadingJetRecSecS(copy.fProNtracksLeadingJetRecSecS)
700 ,fProNtracksLeadingJetRecSecSsc(copy.fProNtracksLeadingJetRecSecSsc)
701 ,fRandom(copy.fRandom)
702 ,fOnlyLeadingJets(copy.fOnlyLeadingJets)
704 ,fNumInclusivePIDtasks(copy.fNumInclusivePIDtasks)
705 ,fNumJetPIDtasks(copy.fNumJetPIDtasks)
706 ,fNameInclusivePIDtask(0x0)
707 ,fNameJetPIDtask(0x0)
708 ,fInclusivePIDtask(0x0)
710 ,fUseInclusivePIDtask(copy.fUseInclusivePIDtask)
711 ,fUseJetPIDtask(copy.fUseJetPIDtask)
715 fBckgType[0] = copy.fBckgType[0];
716 fBckgType[1] = copy.fBckgType[1];
717 fBckgType[2] = copy.fBckgType[2];
718 fBckgType[3] = copy.fBckgType[3];
719 fBckgType[4] = copy.fBckgType[4];
722 for(Int_t ii=0; ii<5; ii++){
723 fProDelRPtSum[ii] = copy.fProDelRPtSum[ii];
724 fProDelRPtSumGen[ii] = copy.fProDelRPtSumGen[ii];
725 fProDelRPtSumBgrPerp2[ii] = copy.fProDelRPtSumBgrPerp2[ii];
726 fProDelRPtSumRecPrim[ii] = copy.fProDelRPtSumRecPrim[ii];
727 fProDelRPtSumRecSecNS[ii] = copy.fProDelRPtSumRecSecNS[ii];
728 fProDelRPtSumRecSecS[ii] = copy.fProDelRPtSumRecSecS[ii];
729 fProDelRPtSumRecSecSsc[ii] = copy.fProDelRPtSumRecSecSsc[ii];
732 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
733 fIDFFHistosRecCuts[i] = 0x0;
734 if (copy.fIDFFHistosRecCuts[i])
735 fIDFFHistosRecCuts[i] = copy.fIDFFHistosRecCuts[i];
737 fIDFFHistosGen[i] = 0x0;
738 if (copy.fIDFFHistosGen[i])
739 fIDFFHistosGen[i] = copy.fIDFFHistosGen[i];
742 fhDCA_XY_prim_MCID[i] = 0x0;
743 if (copy.fhDCA_XY_prim_MCID[i])
744 fhDCA_XY_prim_MCID[i] = copy.fhDCA_XY_prim_MCID[i];
746 fhDCA_Z_prim_MCID[i] = 0x0;
747 if (copy.fhDCA_Z_prim_MCID[i])
748 fhDCA_Z_prim_MCID[i] = copy.fhDCA_Z_prim_MCID[i];
750 fhDCA_XY_sec_MCID[i] = 0x0;
751 if (copy.fhDCA_XY_sec_MCID[i])
752 fhDCA_XY_sec_MCID[i] = copy.fhDCA_XY_sec_MCID[i];
754 fhDCA_Z_sec_MCID[i] = 0x0;
755 if (copy.fhDCA_Z_sec_MCID[i])
756 fhDCA_Z_sec_MCID[i] = copy.fhDCA_Z_sec_MCID[i];
759 if (fNumInclusivePIDtasks > 0) {
760 fNameInclusivePIDtask = new TString[fNumInclusivePIDtasks];
761 fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
763 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
764 fNameInclusivePIDtask[i] = "";
765 fInclusivePIDtask[i] = 0x0;
767 if (copy.fNameInclusivePIDtask[i])
768 fNameInclusivePIDtask[i] = copy.fNameInclusivePIDtask[i];
770 if (copy.fInclusivePIDtask[i])
771 fInclusivePIDtask[i] = copy.fInclusivePIDtask[i];
775 if (fNumJetPIDtasks > 0) {
776 fNameJetPIDtask = new TString[fNumJetPIDtasks];
777 fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
779 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
780 fNameJetPIDtask[i] = "";
781 fJetPIDtask[i] = 0x0;
783 if (copy.fNameJetPIDtask[i])
784 fNameJetPIDtask[i] = copy.fNameJetPIDtask[i];
786 if (copy.fJetPIDtask[i])
787 fJetPIDtask[i] = copy.fJetPIDtask[i];
792 // _________________________________________________________________________________________________________________________________
793 AliAnalysisTaskIDFragmentationFunction& AliAnalysisTaskIDFragmentationFunction::operator=(const AliAnalysisTaskIDFragmentationFunction& o)
799 AliAnalysisTaskSE::operator=(o);
802 fAODJets = o.fAODJets;
803 fAODExtension = o.fAODExtension;
804 fNonStdFile = o.fNonStdFile;
805 fBranchRecJets = o.fBranchRecJets;
806 fBranchRecBckgClusters = o.fBranchRecBckgClusters;
807 fBranchGenJets = o.fBranchGenJets;
808 fBranchEmbeddedJets = o.fBranchEmbeddedJets;
809 fTrackTypeGen = o.fTrackTypeGen;
810 fJetTypeGen = o.fJetTypeGen;
811 fJetTypeRecEff = o.fJetTypeRecEff;
812 fUseAODInputJets = o.fUseAODInputJets;
813 fFilterMask = o.fFilterMask;
814 fUsePhysicsSelection = o.fUsePhysicsSelection;
815 fEvtSelectionMask = o.fEvtSelectionMask;
816 fEventClass = o.fEventClass;
817 fMaxVertexZ = o.fMaxVertexZ;
818 fTrackPtCut = o.fTrackPtCut;
819 fTrackEtaMin = o.fTrackEtaMin;
820 fTrackEtaMax = o.fTrackEtaMax;
821 fTrackPhiMin = o.fTrackPhiMin;
822 fTrackPhiMax = o.fTrackPhiMax;
823 fUseExtraTracks = o.fUseExtraTracks;
824 fUseExtraTracksBgr = o.fUseExtraTracksBgr;
825 fCutFractionPtEmbedded = o.fCutFractionPtEmbedded;
826 fUseEmbeddedJetAxis = o.fUseEmbeddedJetAxis;
827 fUseEmbeddedJetPt = o.fUseEmbeddedJetPt;
828 fJetPtCut = o.fJetPtCut;
829 fJetEtaMin = o.fJetEtaMin;
830 fJetEtaMax = o.fJetEtaMax;
831 fJetPhiMin = o.fJetPhiMin;
832 fJetPhiMax = o.fJetPhiMin;
833 fFFRadius = o.fFFRadius;
834 fFFMinLTrackPt = o.fFFMinLTrackPt;
835 fFFMaxTrackPt = o.fFFMaxTrackPt;
836 fFFMinnTracks = o.fFFMinnTracks;
837 fFFBckgRadius = o.fFFBckgRadius;
838 fBckgMode = o.fBckgMode;
841 fIDFFMode = o.fIDFFMode;
842 fEffMode = o.fEffMode;
844 fBckgType[0] = o.fBckgType[0];
845 fBckgType[1] = o.fBckgType[1];
846 fBckgType[2] = o.fBckgType[2];
847 fBckgType[3] = o.fBckgType[3];
848 fBckgType[4] = o.fBckgType[4];
849 fAvgTrials = o.fAvgTrials;
850 fTracksRecCuts = o.fTracksRecCuts;
851 fTracksRecCutsEfficiency = o.fTracksRecCutsEfficiency;
852 fTracksGen = o.fTracksGen;
853 fTracksAODMCCharged = o.fTracksAODMCCharged;
854 fTracksAODMCChargedSecNS = o.fTracksAODMCChargedSecNS;
855 fTracksAODMCChargedSecS = o.fTracksAODMCChargedSecS;
856 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
857 fJetsRec = o.fJetsRec;
858 fJetsRecCuts = o.fJetsRecCuts;
859 fJetsGen = o.fJetsGen;
860 fJetsRecEff = o.fJetsRecEff;
861 fJetsEmbedded = o.fJetsEmbedded;
862 fBckgJetsRec = o.fBckgJetsRec;
863 fBckgJetsRecCuts = o.fBckgJetsRecCuts;
864 fBckgJetsGen = o.fBckgJetsGen;
865 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
866 fQATrackHistosGen = o.fQATrackHistosGen;
867 fQAJetHistosRec = o.fQAJetHistosRec;
868 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
869 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
870 fQAJetHistosGen = o.fQAJetHistosGen;
871 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
872 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
873 fFFHistosRecCuts = o.fFFHistosRecCuts;
874 fFFHistosRecCutsInc = o.fFFHistosRecCutsInc;
875 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
876 fFFHistosGen = o.fFFHistosGen;
877 fFFHistosGenInc = o.fFFHistosGenInc;
878 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
879 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
880 fFFNBinsJetPt = o.fFFNBinsJetPt;
881 fFFJetPtMin = o.fFFJetPtMin;
882 fFFJetPtMax = o.fFFJetPtMax;
883 fFFNBinsPt = o.fFFNBinsPt;
884 fFFPtMin = o.fFFPtMin;
885 fFFPtMax = o.fFFPtMax;
886 fFFNBinsXi = o.fFFNBinsXi;
887 fFFXiMin = o.fFFXiMin;
888 fFFXiMax = o.fFFXiMax;
889 fFFNBinsZ = o.fFFNBinsZ;
892 fQAJetNBinsPt = o.fQAJetNBinsPt;
893 fQAJetPtMin = o.fQAJetPtMin;
894 fQAJetPtMax = o.fQAJetPtMax;
895 fQAJetNBinsEta = o.fQAJetNBinsEta;
896 fQAJetEtaMin = o.fQAJetEtaMin;
897 fQAJetEtaMax = o.fQAJetEtaMax;
898 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
899 fQAJetPhiMin = o.fQAJetPhiMin;
900 fQAJetPhiMax = o.fQAJetPhiMax;
901 fQATrackNBinsPt = o.fQATrackNBinsPt;
902 fQATrackPtMin = o.fQATrackPtMin;
903 fQATrackPtMax = o.fQATrackPtMax;
904 fQATrackNBinsEta = o.fQATrackNBinsEta;
905 fQATrackEtaMin = o.fQATrackEtaMin;
906 fQATrackEtaMax = o.fQATrackEtaMax;
907 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
908 fQATrackPhiMin = o.fQATrackPhiMin;
909 fQATrackPhiMax = o.fQATrackPhiMax;
910 fCommonHistList = o.fCommonHistList;
911 fh1EvtSelection = o.fh1EvtSelection;
912 fh1VertexNContributors = o.fh1VertexNContributors;
913 fh1VertexZ = o.fh1VertexZ;
914 fh1EvtMult = o.fh1EvtMult;
915 fh1EvtCent = o.fh1EvtCent;
917 fh1Trials = o.fh1Trials;
918 fh1PtHard = o.fh1PtHard;
919 fh1PtHardTrials = o.fh1PtHardTrials;
920 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
921 fh1nGenJets = o.fh1nGenJets;
922 fh1nRecEffJets = o.fh1nRecEffJets;
923 fh1nEmbeddedJets = o.fh1nEmbeddedJets;
924 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
925 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
926 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
927 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
928 fQATrackHistosSecRecNS = o.fQATrackHistosSecRecNS;
929 fQATrackHistosSecRecS = o.fQATrackHistosSecRecS;
930 fQATrackHistosSecRecSsc = o.fQATrackHistosSecRecSsc;
931 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
932 fFFHistosSecRecNS = o.fFFHistosSecRecNS;
933 fFFHistosSecRecS = o.fFFHistosSecRecS;
934 fFFHistosSecRecSsc = o.fFFHistosSecRecSsc;
936 fh1BckgMult0 = o.fh1BckgMult0;
937 fh1BckgMult1 = o.fh1BckgMult1;
938 fh1BckgMult2 = o.fh1BckgMult2;
939 fh1BckgMult3 = o.fh1BckgMult3;
940 fh1BckgMult4 = o.fh1BckgMult4;
941 fh1FractionPtEmbedded = o.fh1FractionPtEmbedded;
942 fh1IndexEmbedded = o.fh1IndexEmbedded;
943 fh2DeltaPtVsJetPtEmbedded = o.fh2DeltaPtVsJetPtEmbedded;
944 fh2DeltaPtVsRecJetPtEmbedded = o.fh2DeltaPtVsRecJetPtEmbedded;
945 fh1DeltaREmbedded = o.fh1DeltaREmbedded;
946 fhDCA_XY = o.fhDCA_XY;
948 fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
949 fQABckgHisto0Gen = o.fQABckgHisto0Gen;
950 fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
951 fQABckgHisto1Gen = o.fQABckgHisto1Gen;
952 fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
953 fQABckgHisto2Gen = o.fQABckgHisto2Gen;
954 fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
955 fQABckgHisto3Gen = o.fQABckgHisto3Gen;
956 fQABckgHisto4RecCuts = o.fQABckgHisto4RecCuts;
957 fQABckgHisto4Gen = o.fQABckgHisto4Gen;
958 fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
959 fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
960 fFFBckgHisto1RecCuts = o.fFFBckgHisto1RecCuts;
961 fFFBckgHisto1Gen = o.fFFBckgHisto1Gen;
962 fFFBckgHisto2RecCuts = o.fFFBckgHisto2RecCuts;
963 fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
964 fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
965 fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
966 fFFBckgHisto4RecCuts = o.fFFBckgHisto4RecCuts;
967 fFFBckgHisto4Gen = o.fFFBckgHisto4Gen;
968 fFFBckgHisto0RecEffRec = o.fFFBckgHisto0RecEffRec;
969 fFFBckgHisto0SecRecNS = o.fFFBckgHisto0SecRecNS;
970 fFFBckgHisto0SecRecS = o.fFFBckgHisto0SecRecS;
971 fFFBckgHisto0SecRecSsc = o.fFFBckgHisto0SecRecSsc;
972 fProNtracksLeadingJet = o.fProNtracksLeadingJet;
973 fProDelR80pcPt = o.fProDelR80pcPt;
974 fProNtracksLeadingJetGen = o.fProNtracksLeadingJetGen;
975 fProDelR80pcPtGen = o.fProDelR80pcPtGen;
976 fProNtracksLeadingJetBgrPerp2 = o.fProNtracksLeadingJetBgrPerp2;
977 fProNtracksLeadingJetRecPrim = o.fProNtracksLeadingJetRecPrim;
978 fProDelR80pcPtRecPrim = o.fProDelR80pcPtRecPrim;
979 fProNtracksLeadingJetRecSecNS = o.fProNtracksLeadingJetRecSecNS;
980 fProNtracksLeadingJetRecSecS = o.fProNtracksLeadingJetRecSecS;
981 fProNtracksLeadingJetRecSecSsc = o.fProNtracksLeadingJetRecSecSsc;
983 fOnlyLeadingJets = o.fOnlyLeadingJets;
986 fUseInclusivePIDtask = o.fUseInclusivePIDtask;
987 fUseJetPIDtask = o.fUseJetPIDtask;
991 for(Int_t ii=0; ii<5; ii++){
992 fProDelRPtSum[ii] = o.fProDelRPtSum[ii];
993 fProDelRPtSumGen[ii] = o.fProDelRPtSumGen[ii];
994 fProDelRPtSumBgrPerp2[ii] = o.fProDelRPtSumBgrPerp2[ii];
995 fProDelRPtSumRecPrim[ii] = o.fProDelRPtSumRecPrim[ii];
996 fProDelRPtSumRecSecNS[ii] = o.fProDelRPtSumRecSecNS[ii];
997 fProDelRPtSumRecSecS[ii] = o.fProDelRPtSumRecSecS[ii];
998 fProDelRPtSumRecSecSsc[ii] = o.fProDelRPtSumRecSecSsc[ii];
1001 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
1002 fIDFFHistosRecCuts[i] = 0x0;
1003 if (o.fIDFFHistosRecCuts[i])
1004 fIDFFHistosRecCuts[i] = o.fIDFFHistosRecCuts[i];
1006 fIDFFHistosGen[i] = 0x0;
1007 if (o.fIDFFHistosGen[i])
1008 fIDFFHistosGen[i] = o.fIDFFHistosGen[i];
1010 fhDCA_XY_prim_MCID[i] = 0x0;
1011 if (o.fhDCA_XY_prim_MCID[i])
1012 fhDCA_XY_prim_MCID[i] = o.fhDCA_XY_prim_MCID[i];
1014 fhDCA_Z_prim_MCID[i] = 0x0;
1015 if (o.fhDCA_Z_prim_MCID[i])
1016 fhDCA_Z_prim_MCID[i] = o.fhDCA_Z_prim_MCID[i];
1018 fhDCA_XY_sec_MCID[i] = 0x0;
1019 if (o.fhDCA_XY_sec_MCID[i])
1020 fhDCA_XY_sec_MCID[i] = o.fhDCA_XY_sec_MCID[i];
1022 fhDCA_Z_sec_MCID[i] = 0x0;
1023 if (o.fhDCA_Z_sec_MCID[i])
1024 fhDCA_Z_sec_MCID[i] = o.fhDCA_Z_sec_MCID[i];
1029 if (fNumJetPIDtasks > 0) {
1030 delete [] fNameJetPIDtask;
1031 fNameJetPIDtask = 0x0;
1033 delete [] fJetPIDtask;
1037 fNumJetPIDtasks = o.fNumJetPIDtasks;
1040 if (fNumInclusivePIDtasks > 0) {
1041 delete [] fNameInclusivePIDtask;
1042 fNameInclusivePIDtask = 0x0;
1044 delete [] fInclusivePIDtask;
1045 fInclusivePIDtask = 0x0;
1048 fNumInclusivePIDtasks = o.fNumInclusivePIDtasks;
1051 if (fNumInclusivePIDtasks > 0) {
1052 fNameInclusivePIDtask = new TString[fNumInclusivePIDtasks];
1053 fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
1055 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
1056 fNameInclusivePIDtask[i] = "";
1057 fInclusivePIDtask[i] = 0x0;
1059 if (o.fNameInclusivePIDtask[i])
1060 fNameInclusivePIDtask[i] = o.fNameInclusivePIDtask[i];
1062 if (o.fInclusivePIDtask[i])
1063 fInclusivePIDtask[i] = o.fInclusivePIDtask[i];
1067 if (fNumJetPIDtasks > 0) {
1068 fNameJetPIDtask = new TString[fNumJetPIDtasks];
1069 fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
1071 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
1072 fNameJetPIDtask[i] = "";
1073 fJetPIDtask[i] = 0x0;
1075 if (o.fNameJetPIDtask[i])
1076 fNameJetPIDtask[i] = o.fNameJetPIDtask[i];
1078 if (o.fJetPIDtask[i])
1079 fJetPIDtask[i] = o.fJetPIDtask[i];
1086 //___________________________________________________________________________
1087 AliAnalysisTaskIDFragmentationFunction::~AliAnalysisTaskIDFragmentationFunction()
1091 if(fTracksRecCuts) delete fTracksRecCuts;
1092 if(fTracksRecCutsEfficiency) delete fTracksRecCutsEfficiency;
1093 if(fTracksGen) delete fTracksGen;
1094 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
1095 if(fTracksAODMCChargedSecNS) delete fTracksAODMCChargedSecNS;
1096 if(fTracksAODMCChargedSecS) delete fTracksAODMCChargedSecS;
1097 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
1098 if(fJetsRec) delete fJetsRec;
1099 if(fJetsRecCuts) delete fJetsRecCuts;
1100 if(fJetsGen) delete fJetsGen;
1101 if(fJetsRecEff) delete fJetsRecEff;
1102 if(fJetsEmbedded) delete fJetsEmbedded;
1105 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1106 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1107 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1109 if(fBckgJetsRec) delete fBckgJetsRec;
1110 if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
1111 if(fBckgJetsGen) delete fBckgJetsGen;
1113 if(fRandom) delete fRandom;
1115 delete [] fNameInclusivePIDtask;
1116 fNameInclusivePIDtask = 0x0;
1118 delete [] fInclusivePIDtask;
1119 fInclusivePIDtask = 0x0;
1121 delete [] fNameJetPIDtask;
1122 fNameJetPIDtask = 0x0;
1124 delete [] fJetPIDtask;
1128 //______________________________________________________________________________________________________
1129 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
1130 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1131 Int_t nPt, Float_t ptMin, Float_t ptMax,
1132 Int_t nXi, Float_t xiMin, Float_t xiMax,
1133 Int_t nZ , Float_t zMin , Float_t zMax)
1135 ,fNBinsJetPt(nJetPt)
1136 ,fJetPtMin(jetPtMin)
1137 ,fJetPtMax(jetPtMax)
1153 // default constructor
1157 //___________________________________________________________________________
1158 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
1160 ,fNBinsJetPt(copy.fNBinsJetPt)
1161 ,fJetPtMin(copy.fJetPtMin)
1162 ,fJetPtMax(copy.fJetPtMax)
1163 ,fNBinsPt(copy.fNBinsPt)
1164 ,fPtMin(copy.fPtMin)
1165 ,fPtMax(copy.fPtMax)
1166 ,fNBinsXi(copy.fNBinsXi)
1167 ,fXiMin(copy.fXiMin)
1168 ,fXiMax(copy.fXiMax)
1169 ,fNBinsZ(copy.fNBinsZ)
1172 ,fh2TrackPt(copy.fh2TrackPt)
1175 ,fh1JetPt(copy.fh1JetPt)
1176 ,fNameFF(copy.fNameFF)
1181 //_______________________________________________________________________________________________________________________________________________________________
1182 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos& o)
1187 TObject::operator=(o);
1188 fNBinsJetPt = o.fNBinsJetPt;
1189 fJetPtMin = o.fJetPtMin;
1190 fJetPtMax = o.fJetPtMax;
1191 fNBinsPt = o.fNBinsPt;
1194 fNBinsXi = o.fNBinsXi;
1197 fNBinsZ = o.fNBinsZ;
1200 fh2TrackPt = o.fh2TrackPt;
1203 fh1JetPt = o.fh1JetPt;
1204 fNameFF = o.fNameFF;
1210 //_________________________________________________________
1211 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
1215 if(fh1JetPt) delete fh1JetPt;
1216 if(fh2TrackPt) delete fh2TrackPt;
1217 if(fh2Xi) delete fh2Xi;
1218 if(fh2Z) delete fh2Z;
1221 //_________________________________________________________________
1222 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::DefineHistos()
1226 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
1227 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
1228 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
1229 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
1231 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1232 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1233 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1234 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1237 //_______________________________________________________________________________________________________________
1238 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm,
1239 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1243 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1244 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
1246 // Added for proper normalization of FF background estimation
1247 // when zero track are found in the background region
1248 if((int)trackPt==-1) return;
1250 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1251 else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,trackPt,scaleFacStrangeness);
1252 else fh2TrackPt->Fill(jetPt,trackPt);
1254 Double_t z = -1., xi = -1.;
1255 AliAnalysisTaskPID::GetJetTrackObservables(trackPt, jetPt, z, xi);
1259 fh2Xi->Fill(jetPt,xi,1/norm);
1260 fh2Z->Fill(jetPt,z,1/norm);
1262 else if(scaleStrangeness){
1263 fh2Xi->Fill(jetPt,xi,scaleFacStrangeness);
1264 fh2Z->Fill(jetPt,z,scaleFacStrangeness);
1267 fh2Xi->Fill(jetPt,xi);
1268 fh2Z->Fill(jetPt,z);
1272 //_________________________________________________________________________________
1273 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1275 // add histos to list
1277 list->Add(fh1JetPt);
1279 list->Add(fh2TrackPt);
1284 //_________________________________________________________________________________________________________
1285 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1286 Int_t nPt, Float_t ptMin, Float_t ptMax,
1287 Int_t nEta, Float_t etaMin, Float_t etaMax,
1288 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1303 // default constructor
1306 //____________________________________________________________________________________
1307 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1309 ,fNBinsPt(copy.fNBinsPt)
1310 ,fPtMin(copy.fPtMin)
1311 ,fPtMax(copy.fPtMax)
1312 ,fNBinsEta(copy.fNBinsEta)
1313 ,fEtaMin(copy.fEtaMin)
1314 ,fEtaMax(copy.fEtaMax)
1315 ,fNBinsPhi(copy.fNBinsPhi)
1316 ,fPhiMin(copy.fPhiMin)
1317 ,fPhiMax(copy.fPhiMax)
1318 ,fh2EtaPhi(copy.fh2EtaPhi)
1320 ,fNameQAJ(copy.fNameQAJ)
1325 //________________________________________________________________________________________________________________________________________________________________________
1326 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos& o)
1331 TObject::operator=(o);
1332 fNBinsPt = o.fNBinsPt;
1335 fNBinsEta = o.fNBinsEta;
1336 fEtaMin = o.fEtaMin;
1337 fEtaMax = o.fEtaMax;
1338 fNBinsPhi = o.fNBinsPhi;
1339 fPhiMin = o.fPhiMin;
1340 fPhiMax = o.fPhiMax;
1341 fh2EtaPhi = o.fh2EtaPhi;
1343 fNameQAJ = o.fNameQAJ;
1349 //______________________________________________________________
1350 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1354 if(fh2EtaPhi) delete fh2EtaPhi;
1355 if(fh1Pt) delete fh1Pt;
1358 //____________________________________________________________________
1359 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1361 // book jet QA histos
1363 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1364 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1366 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1367 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1370 //____________________________________________________________________________________________________
1371 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1373 // fill jet QA histos
1375 fh2EtaPhi->Fill( eta, phi);
1379 //____________________________________________________________________________________
1380 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1382 // add histos to list
1384 list->Add(fh2EtaPhi);
1388 //___________________________________________________________________________________________________________
1389 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1390 Int_t nPt, Float_t ptMin, Float_t ptMax,
1391 Int_t nEta, Float_t etaMin, Float_t etaMax,
1392 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1404 ,fHighPtThreshold(ptThresh)
1411 // default constructor
1414 //__________________________________________________________________________________________
1415 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1417 ,fNBinsPt(copy.fNBinsPt)
1418 ,fPtMin(copy.fPtMin)
1419 ,fPtMax(copy.fPtMax)
1420 ,fNBinsEta(copy.fNBinsEta)
1421 ,fEtaMin(copy.fEtaMin)
1422 ,fEtaMax(copy.fEtaMax)
1423 ,fNBinsPhi(copy.fNBinsPhi)
1424 ,fPhiMin(copy.fPhiMin)
1425 ,fPhiMax(copy.fPhiMax)
1426 ,fHighPtThreshold(copy.fHighPtThreshold)
1427 ,fh2EtaPhi(copy.fh2EtaPhi)
1429 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1430 ,fh2PhiPt(copy.fh2PhiPt)
1431 ,fNameQAT(copy.fNameQAT)
1436 // _____________________________________________________________________________________________________________________________________________________________________________
1437 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos& o)
1442 TObject::operator=(o);
1443 fNBinsPt = o.fNBinsPt;
1446 fNBinsEta = o.fNBinsEta;
1447 fEtaMin = o.fEtaMin;
1448 fEtaMax = o.fEtaMax;
1449 fNBinsPhi = o.fNBinsPhi;
1450 fPhiMin = o.fPhiMin;
1451 fPhiMax = o.fPhiMax;
1452 fHighPtThreshold = o.fHighPtThreshold;
1453 fh2EtaPhi = o.fh2EtaPhi;
1455 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1456 fh2PhiPt = o.fh2PhiPt;
1457 fNameQAT = o.fNameQAT;
1463 //___________________________________________________________________
1464 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1468 if(fh2EtaPhi) delete fh2EtaPhi;
1469 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1470 if(fh1Pt) delete fh1Pt;
1471 if(fh2PhiPt) delete fh2PhiPt;
1474 //______________________________________________________________________
1475 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1477 // book track QA histos
1479 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1480 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);
1481 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1482 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1484 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1485 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1486 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1487 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1490 //________________________________________________________________________________________________________
1491 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm,
1492 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1494 // fill track QA histos
1495 Float_t weight = 1.;
1496 if(weightPt) weight = pt;
1497 fh2EtaPhi->Fill( eta, phi, weight);
1498 if(scaleStrangeness) fh2EtaPhi->Fill( eta, phi, scaleFacStrangeness);
1499 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1500 if(pt > fHighPtThreshold && scaleStrangeness) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1501 if(norm) fh1Pt->Fill( pt, 1/norm );
1502 else if(scaleStrangeness) fh1Pt->Fill(pt,scaleFacStrangeness);
1503 else fh1Pt->Fill( pt );
1505 if(scaleFacStrangeness) fh2PhiPt->Fill(phi, pt, scaleFacStrangeness);
1506 else fh2PhiPt->Fill(phi, pt);
1509 //______________________________________________________________________________________
1510 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1512 // add histos to list
1514 list->Add(fh2EtaPhi);
1515 list->Add(fh2HighPtEtaPhi);
1517 list->Add(fh2PhiPt);
1520 //_________________________________________________________________________________
1521 Bool_t AliAnalysisTaskIDFragmentationFunction::Notify()
1524 // Implemented Notify() to read the cross sections
1525 // and number of trials from pyxsec.root
1526 // (taken from AliAnalysisTaskJetSpectrum2)
1528 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
1529 Float_t xsection = 0;
1530 Float_t ftrials = 1;
1534 TFile *curfile = tree->GetCurrentFile();
1536 Error("Notify","No current file");
1540 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
1542 if (fUseInclusivePIDtask) {
1543 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
1544 fInclusivePIDtask[i]->FillXsec(xsection);
1547 if (fUseJetPIDtask) {
1548 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
1549 fJetPIDtask[i]->FillXsec(xsection);
1552 if(!fh1Xsec||!fh1Trials){
1553 Printf("%s:%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1557 fh1Xsec->Fill("<#sigma>",xsection);
1558 // construct a poor man average trials
1559 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1560 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
1563 // Set seed for backg study
1565 fRandom = new TRandom3();
1566 fRandom->SetSeed(0);
1571 //__________________________________________________________________
1572 void AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()
1574 // create output objects
1576 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()");
1578 // create list of tracks and jets
1580 fTracksRecCuts = new TList();
1581 fTracksRecCuts->SetOwner(kFALSE);
1583 fTracksRecCutsEfficiency = new TList();
1584 fTracksRecCutsEfficiency->SetOwner(kFALSE);
1586 fTracksGen = new TList();
1587 fTracksGen->SetOwner(kFALSE);
1589 fTracksAODMCCharged = new TList();
1590 fTracksAODMCCharged->SetOwner(kFALSE);
1592 fTracksAODMCChargedSecNS = new TList();
1593 fTracksAODMCChargedSecNS->SetOwner(kFALSE);
1595 fTracksAODMCChargedSecS = new TList();
1596 fTracksAODMCChargedSecS->SetOwner(kFALSE);
1598 fTracksRecQualityCuts = new TList();
1599 fTracksRecQualityCuts->SetOwner(kFALSE);
1601 fJetsRec = new TList();
1602 fJetsRec->SetOwner(kFALSE);
1604 fJetsRecCuts = new TList();
1605 fJetsRecCuts->SetOwner(kFALSE);
1607 fJetsGen = new TList();
1608 fJetsGen->SetOwner(kFALSE);
1610 fJetsRecEff = new TList();
1611 fJetsRecEff->SetOwner(kFALSE);
1613 fJetsEmbedded = new TList();
1614 fJetsEmbedded->SetOwner(kFALSE);
1618 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1619 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1620 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1622 fBckgJetsRec = new TList();
1623 fBckgJetsRec->SetOwner(kFALSE);
1625 fBckgJetsRecCuts = new TList();
1626 fBckgJetsRecCuts->SetOwner(kFALSE);
1628 fBckgJetsGen = new TList();
1629 fBckgJetsGen->SetOwner(kFALSE);
1633 // Create histograms / output container
1637 fCommonHistList = new TList();
1638 fCommonHistList->SetOwner(kTRUE);
1640 Bool_t oldStatus = TH1::AddDirectoryStatus();
1641 TH1::AddDirectory(kFALSE);
1645 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1646 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
1647 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
1648 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1649 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1650 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1651 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
1653 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
1654 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1655 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
1656 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1658 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1659 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1660 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1661 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1662 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1663 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1665 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1666 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1667 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1668 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1670 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1671 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1674 if(fBranchEmbeddedJets.Length()){
1675 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
1676 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
1677 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
1678 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
1679 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
1680 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1685 if(fQAMode&1){ // track QA
1686 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1687 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1688 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1689 fQATrackHighPtThreshold);
1690 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1691 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1692 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1693 fQATrackHighPtThreshold);
1696 if(fQAMode&2){ // jet QA
1697 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1698 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1699 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1700 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1701 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1702 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1703 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1704 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1705 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1706 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1707 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1708 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1709 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1710 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1711 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1712 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1713 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1717 if(fFFMode || fIDFFMode){
1719 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1720 fFFNBinsPt, fFFPtMin, fFFPtMax,
1721 fFFNBinsXi, fFFXiMin, fFFXiMax,
1722 fFFNBinsZ , fFFZMin , fFFZMax );
1725 fFFHistosRecCutsInc = new AliFragFuncHistos("RecCutsInc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1726 fFFNBinsPt, fFFPtMin, fFFPtMax,
1727 fFFNBinsXi, fFFXiMin, fFFXiMax,
1728 fFFNBinsZ , fFFZMin , fFFZMax );
1731 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1732 fFFNBinsPt, fFFPtMin, fFFPtMax,
1733 fFFNBinsXi, fFFXiMin, fFFXiMax,
1734 fFFNBinsZ , fFFZMin , fFFZMax );
1736 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1737 fFFNBinsPt, fFFPtMin, fFFPtMax,
1738 fFFNBinsXi, fFFXiMin, fFFXiMax,
1739 fFFNBinsZ , fFFZMin , fFFZMax);
1741 fFFHistosGenInc = new AliFragFuncHistos("GenInc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1742 fFFNBinsPt, fFFPtMin, fFFPtMax,
1743 fFFNBinsXi, fFFXiMin, fFFXiMax,
1744 fFFNBinsZ , fFFZMin , fFFZMax);
1746 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1747 fFFNBinsPt, fFFPtMin, fFFPtMax,
1748 fFFNBinsXi, fFFXiMin, fFFXiMax,
1749 fFFNBinsZ , fFFZMin , fFFZMax);
1752 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
1753 fIDFFHistosRecCuts[i] = new AliFragFuncHistos(Form("RecCuts_%s", AliPID::ParticleName(i)), fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1754 fFFNBinsPt, fFFPtMin, fFFPtMax,
1755 fFFNBinsXi, fFFXiMin, fFFXiMax,
1756 fFFNBinsZ , fFFZMin , fFFZMax );
1757 fIDFFHistosGen[i] = new AliFragFuncHistos(Form("Gen_%s", AliPID::ParticleName(i)), fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1758 fFFNBinsPt, fFFPtMin, fFFPtMax,
1759 fFFNBinsXi, fFFXiMin, fFFXiMax,
1760 fFFNBinsZ , fFFZMin , fFFZMax );
1769 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1770 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1771 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1772 fQATrackHighPtThreshold);
1774 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1775 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1776 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1777 fQATrackHighPtThreshold);
1779 fQATrackHistosSecRecNS = new AliFragFuncQATrackHistos("SecRecNS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1780 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1781 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1782 fQATrackHighPtThreshold);
1784 fQATrackHistosSecRecS = new AliFragFuncQATrackHistos("SecRecS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1785 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1786 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1787 fQATrackHighPtThreshold);
1789 fQATrackHistosSecRecSsc = new AliFragFuncQATrackHistos("SecRecSsc", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1790 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1791 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1792 fQATrackHighPtThreshold);
1796 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1797 fFFNBinsPt, fFFPtMin, fFFPtMax,
1798 fFFNBinsXi, fFFXiMin, fFFXiMax,
1799 fFFNBinsZ , fFFZMin , fFFZMax);
1801 fFFHistosSecRecNS = new AliFragFuncHistos("SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1802 fFFNBinsPt, fFFPtMin, fFFPtMax,
1803 fFFNBinsXi, fFFXiMin, fFFXiMax,
1804 fFFNBinsZ , fFFZMin , fFFZMax);
1806 fFFHistosSecRecS = new AliFragFuncHistos("SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1807 fFFNBinsPt, fFFPtMin, fFFPtMax,
1808 fFFNBinsXi, fFFXiMin, fFFXiMax,
1809 fFFNBinsZ , fFFZMin , fFFZMax);
1811 fFFHistosSecRecSsc = new AliFragFuncHistos("SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1812 fFFNBinsPt, fFFPtMin, fFFPtMax,
1813 fFFNBinsXi, fFFXiMin, fFFXiMax,
1814 fFFNBinsZ , fFFZMin , fFFZMax);
1817 } // end: efficiency
1821 if(fBckgType[0]==kBckgNone){
1822 AliError("no bgr method selected !");
1826 for(Int_t i=0; i<5; i++){
1827 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
1828 else if(fBckgType[i]==kBckgPerp2) title[i]="Perp2";
1829 else if(fBckgType[i]==kBckgPerp2Area) title[i]="Perp2Area";
1830 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
1831 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
1832 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
1833 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
1834 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
1835 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
1836 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
1837 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
1838 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
1839 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
1840 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
1841 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
1842 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
1843 else if(fBckgType[i]==kBckgNone) title[i]="";
1844 else printf("Please chose background method number %d!",i);
1848 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1849 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1850 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
1852 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
1853 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
1857 fh1BckgMult0 = new TH1F("fh1BckgMult0","bckg mult "+title[0],500,0,500);
1858 if(fBckgType[1] != kBckgNone) fh1BckgMult1 = new TH1F("fh1BckgMult1","bckg mult "+title[1],500,0,500);
1859 if(fBckgType[2] != kBckgNone) fh1BckgMult2 = new TH1F("fh1BckgMult2","bckg mult "+title[2],500,0,500);
1860 if(fBckgType[3] != kBckgNone) fh1BckgMult3 = new TH1F("fh1BckgMult3","bckg mult "+title[3],500,0,500);
1861 if(fBckgType[4] != kBckgNone) fh1BckgMult4 = new TH1F("fh1BckgMult4","bckg mult "+title[4],500,0,500);
1865 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1866 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1867 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1868 fQATrackHighPtThreshold);
1869 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1870 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1871 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1872 fQATrackHighPtThreshold);
1874 if(fBckgType[1] != kBckgNone){
1875 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1876 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1877 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1878 fQATrackHighPtThreshold);
1879 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1880 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1881 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1882 fQATrackHighPtThreshold);
1884 if(fBckgType[2] != kBckgNone){
1885 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1886 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1887 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1888 fQATrackHighPtThreshold);
1889 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1890 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1891 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1892 fQATrackHighPtThreshold);
1894 if(fBckgType[3] != kBckgNone){
1895 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1896 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1897 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1898 fQATrackHighPtThreshold);
1899 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1900 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1901 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1902 fQATrackHighPtThreshold);
1904 if(fBckgType[4] != kBckgNone){
1905 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1906 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1907 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1908 fQATrackHighPtThreshold);
1909 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1910 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1911 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1912 fQATrackHighPtThreshold);
1914 } // end: background QA
1917 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1918 fFFNBinsPt, fFFPtMin, fFFPtMax,
1919 fFFNBinsXi, fFFXiMin, fFFXiMax,
1920 fFFNBinsZ , fFFZMin , fFFZMax);
1922 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1923 fFFNBinsPt, fFFPtMin, fFFPtMax,
1924 fFFNBinsXi, fFFXiMin, fFFXiMax,
1925 fFFNBinsZ , fFFZMin , fFFZMax);
1927 if(fBckgType[1] != kBckgNone){
1928 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1929 fFFNBinsPt, fFFPtMin, fFFPtMax,
1930 fFFNBinsXi, fFFXiMin, fFFXiMax,
1931 fFFNBinsZ , fFFZMin , fFFZMax);
1932 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1933 fFFNBinsPt, fFFPtMin, fFFPtMax,
1934 fFFNBinsXi, fFFXiMin, fFFXiMax,
1935 fFFNBinsZ , fFFZMin , fFFZMax);
1937 if(fBckgType[2] != kBckgNone){
1938 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1939 fFFNBinsPt, fFFPtMin, fFFPtMax,
1940 fFFNBinsXi, fFFXiMin, fFFXiMax,
1941 fFFNBinsZ , fFFZMin , fFFZMax);
1943 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1944 fFFNBinsPt, fFFPtMin, fFFPtMax,
1945 fFFNBinsXi, fFFXiMin, fFFXiMax,
1946 fFFNBinsZ , fFFZMin , fFFZMax);
1948 if(fBckgType[3] != kBckgNone){
1949 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1950 fFFNBinsPt, fFFPtMin, fFFPtMax,
1951 fFFNBinsXi, fFFXiMin, fFFXiMax,
1952 fFFNBinsZ , fFFZMin , fFFZMax);
1954 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1955 fFFNBinsPt, fFFPtMin, fFFPtMax,
1956 fFFNBinsXi, fFFXiMin, fFFXiMax,
1957 fFFNBinsZ , fFFZMin , fFFZMax);
1959 if(fBckgType[4] != kBckgNone){
1960 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1961 fFFNBinsPt, fFFPtMin, fFFPtMax,
1962 fFFNBinsXi, fFFXiMin, fFFXiMax,
1963 fFFNBinsZ , fFFZMin , fFFZMax);
1965 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1966 fFFNBinsPt, fFFPtMin, fFFPtMax,
1967 fFFNBinsXi, fFFXiMin, fFFXiMax,
1968 fFFNBinsZ , fFFZMin , fFFZMax);
1971 fFFBckgHisto0RecEffRec = new AliFragFuncHistos("Bckg"+title[0]+"RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1972 fFFNBinsPt, fFFPtMin, fFFPtMax,
1973 fFFNBinsXi, fFFXiMin, fFFXiMax,
1974 fFFNBinsZ , fFFZMin , fFFZMax);
1976 fFFBckgHisto0SecRecNS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1977 fFFNBinsPt, fFFPtMin, fFFPtMax,
1978 fFFNBinsXi, fFFXiMin, fFFXiMax,
1979 fFFNBinsZ , fFFZMin , fFFZMax);
1981 fFFBckgHisto0SecRecS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1982 fFFNBinsPt, fFFPtMin, fFFPtMax,
1983 fFFNBinsXi, fFFXiMin, fFFXiMax,
1984 fFFNBinsZ , fFFZMin , fFFZMax);
1986 fFFBckgHisto0SecRecSsc = new AliFragFuncHistos("Bckg"+title[0]+"SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1987 fFFNBinsPt, fFFPtMin, fFFPtMax,
1988 fFFNBinsXi, fFFXiMin, fFFXiMax,
1989 fFFNBinsZ , fFFZMin , fFFZMax);
1992 } // end: background FF
1995 } // end: background
1998 // ____________ define histograms ____________________
2001 if(fQAMode&1){ // track QA
2002 fQATrackHistosRecCuts->DefineHistos();
2003 fQATrackHistosGen->DefineHistos();
2006 if(fQAMode&2){ // jet QA
2007 fQAJetHistosRec->DefineHistos();
2008 fQAJetHistosRecCuts->DefineHistos();
2009 fQAJetHistosRecCutsLeading->DefineHistos();
2010 fQAJetHistosGen->DefineHistos();
2011 fQAJetHistosGenLeading->DefineHistos();
2012 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
2016 if(fFFMode || fIDFFMode){
2017 fFFHistosRecCuts->DefineHistos();
2018 fFFHistosRecCutsInc->DefineHistos();
2019 fFFHistosRecLeadingTrack->DefineHistos();
2020 fFFHistosGen->DefineHistos();
2021 fFFHistosGenInc->DefineHistos();
2022 fFFHistosGenLeadingTrack->DefineHistos();
2025 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
2026 fIDFFHistosRecCuts[i]->DefineHistos();
2027 fIDFFHistosGen[i]->DefineHistos();
2034 fQATrackHistosRecEffGen->DefineHistos();
2035 fQATrackHistosRecEffRec->DefineHistos();
2036 fQATrackHistosSecRecNS->DefineHistos();
2037 fQATrackHistosSecRecS->DefineHistos();
2038 fQATrackHistosSecRecSsc->DefineHistos();
2041 fFFHistosRecEffRec->DefineHistos();
2042 fFFHistosSecRecNS->DefineHistos();
2043 fFFHistosSecRecS->DefineHistos();
2044 fFFHistosSecRecSsc->DefineHistos();
2046 } // end: efficiency
2051 fFFBckgHisto0RecCuts->DefineHistos();
2052 fFFBckgHisto0Gen->DefineHistos();
2053 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->DefineHistos();
2054 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->DefineHistos();
2055 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->DefineHistos();
2056 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->DefineHistos();
2057 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->DefineHistos();
2058 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->DefineHistos();
2059 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->DefineHistos();
2060 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->DefineHistos();
2063 fFFBckgHisto0RecEffRec->DefineHistos();
2064 fFFBckgHisto0SecRecNS->DefineHistos();
2065 fFFBckgHisto0SecRecS->DefineHistos();
2066 fFFBckgHisto0SecRecSsc->DefineHistos();
2071 fQABckgHisto0RecCuts->DefineHistos();
2072 fQABckgHisto0Gen->DefineHistos();
2073 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->DefineHistos();
2074 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->DefineHistos();
2075 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->DefineHistos();
2076 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->DefineHistos();
2077 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->DefineHistos();
2078 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->DefineHistos();
2079 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->DefineHistos();
2080 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->DefineHistos();
2082 } // end: background
2085 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
2086 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
2087 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
2089 fCommonHistList->Add(fh1EvtSelection);
2090 fCommonHistList->Add(fh1EvtMult);
2091 fCommonHistList->Add(fh1EvtCent);
2092 fCommonHistList->Add(fh1VertexNContributors);
2093 fCommonHistList->Add(fh1VertexZ);
2094 fCommonHistList->Add(fh1nRecJetsCuts);
2095 fCommonHistList->Add(fh1Xsec);
2096 fCommonHistList->Add(fh1Trials);
2097 fCommonHistList->Add(fh1PtHard);
2098 fCommonHistList->Add(fh1PtHardTrials);
2100 if(genJets) fCommonHistList->Add(fh1nGenJets);
2104 fFFHistosRecCuts->AddToOutput(fCommonHistList);
2105 fFFHistosRecCutsInc->AddToOutput(fCommonHistList);
2106 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
2108 if(genJets && genTracks){
2109 fFFHistosGen->AddToOutput(fCommonHistList);
2110 fFFHistosGenInc->AddToOutput(fCommonHistList);
2111 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
2115 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
2116 if(genJets && genTracks)
2117 fIDFFHistosGen[i]->AddToOutput(fCommonHistList);
2118 fIDFFHistosRecCuts[i]->AddToOutput(fCommonHistList);
2126 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
2127 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
2128 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
2129 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
2130 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
2132 if(genJets && genTracks){
2133 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
2134 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
2135 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
2136 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
2137 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
2141 fFFBckgHisto0RecEffRec->AddToOutput(fCommonHistList);
2142 fFFBckgHisto0SecRecNS->AddToOutput(fCommonHistList);
2143 fFFBckgHisto0SecRecS->AddToOutput(fCommonHistList);
2144 fFFBckgHisto0SecRecSsc->AddToOutput(fCommonHistList);
2149 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
2150 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
2151 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
2152 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
2153 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
2154 if(genJets && genTracks){
2155 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
2156 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->AddToOutput(fCommonHistList);
2157 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->AddToOutput(fCommonHistList);
2158 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->AddToOutput(fCommonHistList);
2159 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->AddToOutput(fCommonHistList);
2163 if(fh1BckgMult0) fCommonHistList->Add(fh1BckgMult0);
2164 if(fBckgType[1] != kBckgNone) fCommonHistList->Add(fh1BckgMult1);
2165 if(fBckgType[2] != kBckgNone) fCommonHistList->Add(fh1BckgMult2);
2166 if(fBckgType[3] != kBckgNone) fCommonHistList->Add(fh1BckgMult3);
2167 if(fBckgType[4] != kBckgNone) fCommonHistList->Add(fh1BckgMult4);
2171 if(fBranchEmbeddedJets.Length()){
2172 fCommonHistList->Add(fh1FractionPtEmbedded);
2173 fCommonHistList->Add(fh1IndexEmbedded);
2174 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
2175 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
2176 fCommonHistList->Add(fh1DeltaREmbedded);
2177 fCommonHistList->Add(fh1nEmbeddedJets);
2183 if(fQAMode&1){ // track QA
2184 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
2185 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
2188 if(fQAMode&2){ // jet QA
2189 fQAJetHistosRec->AddToOutput(fCommonHistList);
2190 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
2191 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
2192 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
2194 fQAJetHistosGen->AddToOutput(fCommonHistList);
2195 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
2201 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2202 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2203 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
2204 fCommonHistList->Add(fh1nRecBckgJetsCuts);
2205 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
2209 if(fEffMode && recJetsEff && genTracks){
2211 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
2212 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
2213 fQATrackHistosSecRecNS->AddToOutput(fCommonHistList);
2214 fQATrackHistosSecRecS->AddToOutput(fCommonHistList);
2215 fQATrackHistosSecRecSsc->AddToOutput(fCommonHistList);
2218 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
2219 fFFHistosSecRecNS->AddToOutput(fCommonHistList);
2220 fFFHistosSecRecS->AddToOutput(fCommonHistList);
2221 fFFHistosSecRecSsc->AddToOutput(fCommonHistList);
2223 fCommonHistList->Add(fh1nRecEffJets);
2224 fCommonHistList->Add(fh2PtRecVsGenPrim);
2225 fCommonHistList->Add(fh2PtRecVsGenSec);
2231 fProNtracksLeadingJet = new TProfile("AvgNoOfTracksLeadingJet","AvgNoOfTracksLeadingJet",100,0,250,0,50);
2232 fProDelR80pcPt = new TProfile("AvgdelR80pcPt","AvgdelR80pcPt",100,0,250,0,1);
2234 if(genJets && genTracks){
2235 fProNtracksLeadingJetGen = new TProfile("AvgNoOfTracksLeadingJetGen","AvgNoOfTracksLeadingJetGen",100,0,250,0,50);
2236 fProDelR80pcPtGen = new TProfile("AvgdelR80pcPtGen","AvgdelR80pcPtGen",100,0,250,0,1);
2240 fProNtracksLeadingJetBgrPerp2 = new TProfile("AvgNoOfTracksLeadingJetBgrPerp2","AvgNoOfTracksLeadingJetBgrPerp2",100,0,250,0,50);
2243 fProNtracksLeadingJetRecPrim = new TProfile("AvgNoOfTracksLeadingJetRecPrim","AvgNoOfTracksLeadingJetRecPrim",100,0,250,0,50);
2244 fProDelR80pcPtRecPrim = new TProfile("AvgdelR80pcPtRecPrim","AvgdelR80pcPtRecPrim",100,0,250,0,1);
2245 fProNtracksLeadingJetRecSecNS = new TProfile("AvgNoOfTracksLeadingJetRecSecNS","AvgNoOfTracksLeadingJetRecSecNS",100,0,250,0,50);
2246 fProNtracksLeadingJetRecSecS = new TProfile("AvgNoOfTracksLeadingJetRecSecS","AvgNoOfTracksLeadingJetRecSecS",100,0,250,0,50);
2247 fProNtracksLeadingJetRecSecSsc = new TProfile("AvgNoOfTracksLeadingJetRecSecSsc","AvgNoOfTracksLeadingJetRecSecSsc",100,0,250,0,50);
2251 for(Int_t ii=0; ii<5; ii++){
2252 if(ii==0)strTitJS = "_JetPt20to30";
2253 if(ii==1)strTitJS = "_JetPt30to40";
2254 if(ii==2)strTitJS = "_JetPt40to60";
2255 if(ii==3)strTitJS = "_JetPt60to80";
2256 if(ii==4)strTitJS = "_JetPt80to100";
2258 fProDelRPtSum[ii] = new TProfile(Form("AvgPtSumDelR%s",strTitJS.Data()),Form("AvgPtSumDelR%s",strTitJS.Data()),50,0,1,0,250);
2259 if(genJets && genTracks)
2260 fProDelRPtSumGen[ii] = new TProfile(Form("AvgPtSumDelRGen%s",strTitJS.Data()),Form("AvgPtSumDelRGen%s",strTitJS.Data()),50,0,1,0,250);
2262 fProDelRPtSumBgrPerp2[ii] = new TProfile(Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),50,0,1,0,250);
2264 fProDelRPtSumRecPrim[ii] = new TProfile(Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),50,0,1,0,250);
2265 fProDelRPtSumRecSecNS[ii] = new TProfile(Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),50,0,1,0,250);
2266 fProDelRPtSumRecSecS[ii] = new TProfile(Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),50,0,1,0,250);
2267 fProDelRPtSumRecSecSsc[ii] = new TProfile(Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),50,0,1,0,250);
2271 fCommonHistList->Add(fProNtracksLeadingJet);
2272 fCommonHistList->Add(fProDelR80pcPt);
2273 for(int ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSum[ii]);
2275 if(genJets && genTracks){
2276 fCommonHistList->Add(fProNtracksLeadingJetGen);
2277 fCommonHistList->Add(fProDelR80pcPtGen);
2278 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumGen[ii]);
2282 fCommonHistList->Add(fProNtracksLeadingJetBgrPerp2);
2283 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumBgrPerp2[ii]);
2287 fCommonHistList->Add(fProNtracksLeadingJetRecPrim);
2288 fCommonHistList->Add(fProDelR80pcPtRecPrim);
2289 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecPrim[ii]);
2291 fCommonHistList->Add(fProNtracksLeadingJetRecSecNS);
2292 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecNS[ii]);
2294 fCommonHistList->Add(fProNtracksLeadingJetRecSecS);
2295 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecS[ii]);
2297 fCommonHistList->Add(fProNtracksLeadingJetRecSecSsc);
2298 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecSsc[ii]);
2302 // Load PID framework if desired
2303 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Loading PID framework");
2305 fUseJetPIDtask = fIDFFMode || fFFMode;
2306 fUseInclusivePIDtask = fQAMode && (fQAMode&1);
2308 if (fUseJetPIDtask || fUseInclusivePIDtask) {
2309 TObjArray* tasks = AliAnalysisManager::GetAnalysisManager()->GetTasks();
2311 Printf("ERROR loading PID tasks: Failed to retrieve tasks from analysis manager!\n");
2313 fUseJetPIDtask = kFALSE;
2314 fUseInclusivePIDtask = kFALSE;
2317 if (fUseJetPIDtask) {
2318 delete [] fJetPIDtask;
2321 if (fNumJetPIDtasks > 0) {
2322 fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
2324 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2325 fJetPIDtask[i] = (AliAnalysisTaskPID*)tasks->FindObject(fNameJetPIDtask[i].Data());
2327 if (!fJetPIDtask[i]) {
2328 Printf("ERROR: Failed to load jet pid task!\n");
2329 fUseJetPIDtask = kFALSE;
2334 Printf("WARNING: zero jet pid tasks!\n");
2335 fUseJetPIDtask = kFALSE;
2339 if (fUseInclusivePIDtask) {
2340 delete [] fInclusivePIDtask;
2341 fInclusivePIDtask = 0x0;
2343 if (fNumInclusivePIDtasks > 0) {
2344 fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
2346 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2347 fInclusivePIDtask[i] = (AliAnalysisTaskPID*)tasks->FindObject(fNameInclusivePIDtask[i].Data());
2349 if (!fInclusivePIDtask[i]) {
2350 Printf("ERROR: Failed to load inclusive pid task!\n");
2351 fUseInclusivePIDtask = kFALSE;
2356 Printf("WARNING: zero inclusive pid tasks!\n");
2357 fUseInclusivePIDtask = kFALSE;
2362 if (fUseJetPIDtask) {
2363 const Int_t nPtBins = 68;
2364 Double_t binsPt[nPtBins+1] = {0. , 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
2365 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95,
2366 1.0, 1.1 , 1.2, 1.3 , 1.4, 1.5 , 1.6, 1.7 , 1.8, 1.9 ,
2367 2.0, 2.2 , 2.4, 2.6 , 2.8, 3.0 , 3.2, 3.4 , 3.6, 3.8 ,
2368 4.0, 4.5 , 5.0, 5.5 , 6.0, 6.5 , 7.0, 8.0 , 9.0, 10.0,
2369 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
2370 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
2372 const Int_t DCAbins = 320;
2373 const Double_t DCA_Z_max = 3.5;
2374 const Double_t DCA_XY_max = 2.5;
2376 fhDCA_XY = new TH2F("fhDCA_XY", "All rec. tracks;#it{p}_{T} (GeV/#it{c});DCA_{XY}", nPtBins, binsPt, DCAbins, -DCA_XY_max, DCA_XY_max);
2377 fhDCA_Z = new TH2F("fhDCA_Z", "All rec. tracks;#it{p}_{T} (GeV/#it{c});DCA_{Z}", nPtBins, binsPt, DCAbins, -DCA_Z_max, DCA_Z_max);
2378 fCommonHistList->Add(fhDCA_XY);
2379 fCommonHistList->Add(fhDCA_Z);
2381 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
2382 fhDCA_XY_prim_MCID[i] = new TH2F(Form("fhDCA_XY_prim_MCID_%s", AliPID::ParticleShortName(i)),
2383 Form("Rec. %s (prim.);#it{p}_{T} (GeV/#it{c});DCA_{XY}", AliPID::ParticleLatexName(i)),
2384 nPtBins, binsPt, DCAbins, -DCA_XY_max, DCA_XY_max);
2385 fhDCA_Z_prim_MCID[i] = new TH2F(Form("fhDCA_Z_prim_MCID_%s", AliPID::ParticleShortName(i)),
2386 Form("Rec. %s (prim.);#it{p}_{T} (GeV/#it{c});DCA_{Z}", AliPID::ParticleLatexName(i)),
2387 nPtBins, binsPt, DCAbins, -DCA_Z_max, DCA_Z_max);
2388 fCommonHistList->Add(fhDCA_XY_prim_MCID[i]);
2389 fCommonHistList->Add(fhDCA_Z_prim_MCID[i]);
2391 fhDCA_XY_sec_MCID[i] = new TH2F(Form("fhDCA_XY_sec_MCID_%s", AliPID::ParticleShortName(i)),
2392 Form("Rec. %s (sec.);#it{p}_{T} (GeV/#it{c});DCA_{XY}", AliPID::ParticleLatexName(i)),
2393 nPtBins, binsPt, DCAbins, -DCA_XY_max, DCA_XY_max);
2394 fhDCA_Z_sec_MCID[i] = new TH2F(Form("fhDCA_Z_sec_MCID_%s", AliPID::ParticleShortName(i)),
2395 Form("Rec. %s (sec.);#it{p}_{T} (GeV/#it{c});DCA_{Z}", AliPID::ParticleLatexName(i)),
2396 nPtBins, binsPt, DCAbins, -DCA_Z_max, DCA_Z_max);
2397 fCommonHistList->Add(fhDCA_XY_sec_MCID[i]);
2398 fCommonHistList->Add(fhDCA_Z_sec_MCID[i]);
2403 // =========== Switch on Sumw2 for all histos ===========
2404 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
2405 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
2406 if (h1) h1->Sumw2();
2408 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
2409 if(hnSparse) hnSparse->Sumw2();
2413 TH1::AddDirectory(oldStatus);
2415 if(fDebug > 2) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Posting Output");
2417 PostData(1, fCommonHistList);
2419 if(fDebug > 2) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Done");
2422 //_______________________________________________
2423 void AliAnalysisTaskIDFragmentationFunction::Init()
2426 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::Init()");
2430 //_____________________________________________________________
2431 void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
2434 // Called for each event
2436 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserExec()");
2439 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
2441 // Trigger selection
2442 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
2443 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
2445 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
2446 fh1EvtSelection->Fill(1.);
2447 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
2448 PostData(1, fCommonHistList);
2452 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
2454 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
2457 fMCEvent = MCEvent();
2459 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
2462 // get AOD event from input/ouput
2463 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2464 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
2465 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
2466 if(fUseAODInputJets) fAODJets = fAOD;
2467 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
2470 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2471 if( handler && handler->InheritsFrom("AliAODHandler") ) {
2472 fAOD = ((AliAODHandler*)handler)->GetAOD();
2474 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
2478 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
2479 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2480 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
2481 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
2482 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
2486 if(fNonStdFile.Length()!=0){
2487 // case we have an AOD extension - fetch the jets from the extended output
2489 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
2490 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
2492 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
2497 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
2501 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
2506 // event selection **************************************************
2507 // *** event class ***
2508 AliVEvent* evtForCentDetermination = handler->InheritsFrom("AliAODInputHandler") ? fAOD : InputEvent();
2510 Double_t centPercent = -1;
2513 if(handler->InheritsFrom("AliAODInputHandler")){
2514 // since it is not supported by the helper task define own classes
2515 centPercent = fAOD->GetHeader()->GetCentrality();
2517 if(centPercent>10) cl = 2;
2518 if(centPercent>30) cl = 3;
2519 if(centPercent>50) cl = 4;
2522 cl = AliAnalysisHelperJetTasks::EventClass();
2523 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
2526 if(cl!=fEventClass){
2527 // event not in selected event class, reject event
2528 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
2529 fh1EvtSelection->Fill(2.);
2530 PostData(1, fCommonHistList);
2536 // Count events with trigger selection, note: Set centrality percentile fix to -1 for pp for PID framework
2537 if (fUseJetPIDtask) {
2538 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2539 fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSel);
2543 if (fUseInclusivePIDtask) {
2544 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2545 fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSel);
2549 // *** vertex cut ***
2550 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
2552 Printf("%s:%d Primary vertex not found", (char*)__FILE__,__LINE__);
2556 Int_t nTracksPrim = primVtx->GetNContributors();
2557 fh1VertexNContributors->Fill(nTracksPrim);
2560 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
2561 if(nTracksPrim <= 0) {
2562 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
2563 fh1EvtSelection->Fill(3.);
2564 PostData(1, fCommonHistList);
2568 TString primVtxName(primVtx->GetName());
2570 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
2571 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
2572 fh1EvtSelection->Fill(5.);
2573 PostData(1, fCommonHistList);
2577 // Count events with trigger selection and vtx cut, note: Set centrality percentile fix to -1 for pp for PID framework
2578 if (fUseJetPIDtask) {
2579 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2580 fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCut);
2584 if (fUseInclusivePIDtask) {
2585 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2586 fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCut);
2590 fh1VertexZ->Fill(primVtx->GetZ());
2592 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
2593 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2594 fh1EvtSelection->Fill(4.);
2595 PostData(1, fCommonHistList);
2599 // Count events with trigger selection and vtx cut, note: Set centrality percentile fix to -1 for pp for PID framework
2600 if (fUseJetPIDtask) {
2601 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2602 fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCutAndZvtxCut);
2606 if (fUseInclusivePIDtask) {
2607 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2608 fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCutAndZvtxCut);
2612 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
2613 fh1EvtSelection->Fill(0.);
2614 fh1EvtCent->Fill(centPercent);
2616 // Set centrality percentile fix to -1 for pp to be used for the PID framework
2622 // Call ConfigureTaskForCurrentEvent of PID tasks to ensure that everything is set up properly for the current event
2623 // (e.g. run/period dependence of max eta variation map)
2624 if (fUseInclusivePIDtask) {
2625 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2626 fInclusivePIDtask[i]->ConfigureTaskForCurrentEvent(fAOD);
2629 if (fUseJetPIDtask) {
2630 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
2631 fJetPIDtask[i]->ConfigureTaskForCurrentEvent(fAOD);
2636 //___ get MC information __________________________________________________________________
2638 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2640 if (fUseInclusivePIDtask) {
2641 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2642 fInclusivePIDtask[i]->FillPythiaTrials(fAvgTrials);
2645 if (fUseJetPIDtask) {
2646 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
2647 fJetPIDtask[i]->FillPythiaTrials(fAvgTrials);
2650 Double_t ptHard = 0.;
2651 Double_t nTrials = 1; // trials for MC trigger weight for real data
2654 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2658 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2659 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2661 if(pythiaGenHeader){
2662 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
2663 nTrials = pythiaGenHeader->Trials();
2664 ptHard = pythiaGenHeader->GetPtHard();
2666 fh1PtHard->Fill(ptHard);
2667 fh1PtHardTrials->Fill(ptHard,nTrials);
2669 } else { // no pythia, hijing?
2671 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
2673 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2674 if(!hijingGenHeader){
2675 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
2677 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
2681 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2685 //___ fetch jets __________________________________________________________________________
2687 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
2689 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
2690 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2691 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2693 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
2694 Int_t nRecJetsCuts = 0;
2695 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
2696 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2697 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2698 fh1nRecJetsCuts->Fill(nRecJetsCuts);
2700 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2702 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
2704 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
2705 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2707 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2708 fh1nGenJets->Fill(nGenJets);
2711 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2712 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
2713 Int_t nRecEffJets = 0;
2714 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
2715 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2716 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2717 fh1nRecEffJets->Fill(nRecEffJets);
2720 Int_t nEmbeddedJets = 0;
2721 TArrayI iEmbeddedMatchIndex;
2722 TArrayF fEmbeddedPtFraction;
2725 if(fBranchEmbeddedJets.Length()){
2726 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
2727 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
2728 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2729 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2730 fh1nEmbeddedJets->Fill(nEmbeddedJets);
2732 Float_t maxDist = 0.3;
2734 iEmbeddedMatchIndex.Set(nEmbeddedJets);
2735 fEmbeddedPtFraction.Set(nEmbeddedJets);
2737 iEmbeddedMatchIndex.Reset(-1);
2738 fEmbeddedPtFraction.Reset(0);
2740 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
2741 fJetsRecCuts, nRecJetsCuts,
2742 iEmbeddedMatchIndex, fEmbeddedPtFraction,
2747 //____ fetch background clusters ___________________________________________________
2749 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2750 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2751 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2753 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
2754 Int_t nRecBckgJets = 0;
2755 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
2756 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2757 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2759 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
2760 Int_t nRecBckgJetsCuts = 0;
2761 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
2762 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2763 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
2764 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
2766 if(0){ // protection OB - not yet implemented
2767 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2768 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
2769 Int_t nGenBckgJets = 0;
2770 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
2771 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2772 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2773 fh1nGenBckgJets->Fill(nGenBckgJets);
2778 //____ fetch particles __________________________________________________________
2781 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
2782 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
2783 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
2785 Int_t nRecPartCuts = 0;
2786 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
2787 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2788 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",
2789 (char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2790 fh1EvtMult->Fill(nRecPartCuts);
2793 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
2795 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
2796 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2797 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2799 // Just cut on filterBit, but take the full acceptance
2800 Int_t nTCutsEfficiency = GetListOfTracks(fTracksRecCutsEfficiency, kTrackAODQualityCuts);
2801 Int_t nRecPartCutsEfficiency = 0;
2802 if(nTCutsEfficiency>=0) nRecPartCutsEfficiency = fTracksRecCutsEfficiency->GetEntries();
2803 if(fDebug>2)Printf("%s:%d Selected Rec tracks efficiency after cuts: %d %d",(char*)__FILE__,__LINE__,
2804 nTCutsEfficiency,nRecPartCutsEfficiency);
2805 if(nRecPartCutsEfficiency != nTCutsEfficiency) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",
2806 (char*)__FILE__,__LINE__,nTCutsEfficiency,nRecPartCutsEfficiency);
2808 AliPIDResponse* pidResponse = 0x0;
2809 Bool_t tuneOnDataTPC = kFALSE;
2810 if (fUseJetPIDtask || fUseInclusivePIDtask) {
2811 if (!inputHandler) {
2812 AliFatal("Input handler needed");
2816 // PID response object
2817 pidResponse = inputHandler->GetPIDResponse();
2819 AliFatal("PIDResponse object was not created");
2823 tuneOnDataTPC = pidResponse->IsTunedOnData() &&
2824 ((pidResponse->GetTunedOnDataMask() & AliPIDResponse::kDetTPC) == AliPIDResponse::kDetTPC);
2829 if(fDebug>2)Printf("%s:%d Starting processing...",(char*)__FILE__,__LINE__);
2831 //____ analysis, fill histos ___________________________________________________
2836 TClonesArray *tca = fUseInclusivePIDtask ? dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName())) : 0x0;
2838 // Fill efficiency for generated primaries and also fill histos for generated yields (primaries + all)
2839 // Efficiency, inclusive - particle level
2840 if (fUseInclusivePIDtask && tca) {
2841 for (Int_t it = 0; it < tca->GetEntriesFast(); it++) {
2842 AliAODMCParticle* part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2846 // Define clean MC sample with corresponding particle level track cuts:
2847 // - MC-track must be in desired eta range
2848 // - MC-track must be physical primary
2849 // - Species must be one of those in question
2851 if (part->Eta() > fTrackEtaMax || part->Eta() < fTrackEtaMin)
2854 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(part->GetPdgCode());
2856 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
2857 // and only affect the efficiencies for all (i.e. not identified) what is desired!
2858 //if (mcID == AliPID::kUnknown)
2861 if (!part->IsPhysicalPrimary())
2864 Int_t iMother = part->GetMother();
2866 continue; // Not a physical primary
2869 Double_t pT = part->Pt();
2871 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
2872 Double_t chargeMC = part->Charge() / 3.;
2874 if (TMath::Abs(chargeMC) < 0.01)
2875 continue; // Reject neutral particles (only relevant, if mcID is not used)
2877 Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { static_cast<Double_t>(mcID), pT, centPercent, -1, -1, -1, -1 };
2879 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2880 if (fInclusivePIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(part->Eta()))) {
2881 valuesGenYield[fInclusivePIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
2882 fInclusivePIDtask[i]->FillGeneratedYield(valuesGenYield);
2886 Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), pT, part->Eta(), chargeMC,
2887 centPercent, -1, -1, -1 };// no jet pT etc since inclusive spectrum
2888 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2889 fInclusivePIDtask[i]->FillEfficiencyContainer(valuesEff, AliAnalysisTaskPID::kStepGenWithGenCuts);
2893 if(fUseInclusivePIDtask){
2894 //Efficiency, inclusive - detector level
2895 for(Int_t it=0; it<nRecPartCutsEfficiency; ++it){
2896 // fill inclusive tracks XXX, they have the same track cuts!
2897 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCutsEfficiency->At(it));
2899 Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod)
2900 : inclusiveaod->GetTPCsignal();
2905 Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(inclusiveaod, InputEvent());
2906 Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(inclusiveaod);
2908 Int_t label = TMath::Abs(inclusiveaod->GetLabel());
2910 // find MC track in our list, if available
2911 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
2915 pdg = gentrack->GetPdgCode();
2917 // For efficiency: Reconstructed track has survived all cuts on the detector level (no cut on eta acceptance)
2918 // and has an associated MC track
2919 // -> Check whether associated MC track belongs to the clean MC sample defined above,
2920 // i.e. survives the particle level track cuts
2922 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
2924 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
2925 // and only affect the efficiencies for all (i.e. not identified) what is desired!
2926 //if (mcID == AliPID::kUnknown)
2929 // Fill efficiency for reconstructed primaries
2930 if (!gentrack->IsPhysicalPrimary())
2933 * Int_t iMother = gentrack->GetMother();
2935 * continue; // Not a physical primary
2938 if (gentrack->Eta() > fTrackEtaMax || gentrack->Eta() < fTrackEtaMin)
2941 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
2942 Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), gentrack->Pt(), gentrack->Eta(), gentrack->Charge() / 3.,
2944 -1, -1, -1 };// no jet pT etc since inclusive spectrum
2945 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2946 if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
2947 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
2948 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))
2949 fInclusivePIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
2952 Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), inclusiveaod->Pt(), inclusiveaod->Eta(),
2953 static_cast<Double_t>(inclusiveaod->Charge()), centPercent,
2954 -1, -1, -1 };// no jet pT etc since inclusive spectrum
2955 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2956 if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
2957 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
2958 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))
2959 fInclusivePIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
2967 for(Int_t it=0; it<nRecPartCuts; ++it){
2968 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
2969 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
2971 // fill inclusive tracks XXX, they have the same track cuts!
2972 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
2974 if(fUseInclusivePIDtask){
2975 Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod)
2976 : inclusiveaod->GetTPCsignal();
2981 Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(inclusiveaod, InputEvent());
2982 Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(inclusiveaod);
2984 Int_t label = TMath::Abs(inclusiveaod->GetLabel());
2986 // find MC track in our list, if available
2987 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
2991 pdg = gentrack->GetPdgCode();
2993 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2994 if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
2995 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
2996 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut())) {
2997 if (fInclusivePIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(inclusiveaod->Eta())))
2998 fInclusivePIDtask[i]->ProcessTrack(inclusiveaod, pdg, centPercent, -1); // no jet pT since inclusive spectrum
3003 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
3004 Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), inclusiveaod->Pt(), inclusiveaod->Eta(),
3005 static_cast<Double_t>(inclusiveaod->Charge()), centPercent,
3007 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3008 if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3009 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3010 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))
3011 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
3014 Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
3015 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3016 if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3017 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3018 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))
3019 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3020 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
3024 if (gentrack->IsPhysicalPrimary()) {
3025 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3026 Double_t valueGenAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), gentrack->Pt(), gentrack->Eta(),
3027 gentrack->Charge() / 3., centPercent, -1, -1,
3030 Double_t valuePtResolution[AliAnalysisTaskPID::kPtResNumAxes] = { -1, gentrack->Pt(), inclusiveaod->Pt(),
3031 gentrack->Charge() / 3., centPercent };
3033 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3034 if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3035 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3036 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut())) {
3037 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3038 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
3039 fInclusivePIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
3040 AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
3042 fInclusivePIDtask[i]->FillPtResolution(mcID, valuePtResolution);
3050 for(Int_t it=0; it<nGenPart; ++it){
3051 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
3052 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3058 for(Int_t ij=0; ij<nRecJets; ++ij){
3059 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
3060 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3065 if(fQAMode || fFFMode){
3067 for(Int_t ij=0; ij<nGenJets; ++ij){
3068 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
3072 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3074 if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3076 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
3077 TList* jettracklist = new TList();
3078 Double_t sumPt = 0.;
3079 Bool_t isBadJet = kFALSE;
3081 if(GetFFRadius()<=0){
3082 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3084 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3087 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
3088 if(isBadJet) continue;
3090 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3092 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3093 if(!trackVP)continue;
3094 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3096 Float_t jetPt = jet->Pt();
3097 Float_t trackPt = trackV->Pt();
3099 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3101 if(fFFMode && (ij==0)) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
3102 if(fFFMode) fFFHistosGenInc->FillFF( trackPt, jetPt, incrementJetPt );
3103 if(it==0){ // leading track
3104 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( trackPt, jetPt, kTRUE );
3107 if (fUseJetPIDtask && incrementJetPt) {
3108 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3109 fJetPIDtask[i]->FillGenJets(fJetPIDtask[i]->GetCentralityPercentile(evtForCentDetermination), jetPt);
3113 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(trackVP->PdgCode());
3114 if (mcID != AliPID::kUnknown) {
3115 // WARNING: The number of jets for the different species does not make sense -> One has to take
3116 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
3117 // not to get confused
3118 fIDFFHistosGen[mcID]->FillFF(trackPt, jetPt, kFALSE);
3121 Int_t pidWeightedSpecies = fJetPIDtask->GetRandomParticleTypeAccordingToParticleFractions(trackPt, jetPt, centPercent, kTRUE);
3122 if (pidWeightedSpecies < 0 || pidWeightedSpecies >= AliPID::kSPECIES) {
3123 Printf("Failed to determine particle ID for track in jet (gen) -> ID FF histos not filled with this track!");
3124 Printf("Track details: trackPt %f, jetPt %f, centrality %f!", trackPt, jetPt, centPercent);
3127 // WARNING: The number of jets for the different species does not make sense -> One has to take
3128 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
3129 // not to get confused
3130 fIDFFHistosGen[pidWeightedSpecies]->FillFF(trackPt, jetPt, kFALSE);
3137 // Efficiency, jets - particle level
3138 if (fUseJetPIDtask) {
3139 AliAODMCParticle* part = dynamic_cast<AliAODMCParticle*>(jettracklist->At(it));
3141 AliError("expected ref track not found ");
3144 // Fill efficiency for generated primaries and also fill histos for generated yields (primaries + all)
3145 if (part->Eta() > fTrackEtaMax || part->Eta() < fTrackEtaMin)
3148 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(part->GetPdgCode());
3150 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
3151 // and only affect the efficiencies for all (i.e. not identified) what is desired!
3152 //if (mcID == AliPID::kUnknown)
3155 if (!part->IsPhysicalPrimary())
3158 // Int_t iMother = part->GetMother();
3159 // if (iMother >= 0)
3160 // continue; // Not a physical primary
3163 Double_t z = -1., xi = -1.;
3164 AliAnalysisTaskPID::GetJetTrackObservables(trackPt, jetPt, z, xi);
3166 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3167 Double_t chargeMC = part->Charge() / 3.;
3169 if (TMath::Abs(chargeMC) < 0.01)
3170 continue; // Reject neutral particles (only relevant, if mcID is not used)
3172 Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { static_cast<Double_t>(mcID), trackPt, centPercent, jetPt, z, xi, chargeMC };
3174 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3175 if (fJetPIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(part->Eta()))) {
3176 valuesGenYield[fJetPIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
3177 fJetPIDtask[i]->FillGeneratedYield(valuesGenYield);
3182 Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), trackPt, part->Eta(), chargeMC,
3183 centPercent, jetPt, z, xi };
3184 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3185 fJetPIDtask[i]->FillEfficiencyContainer(valuesEff, AliAnalysisTaskPID::kStepGenWithGenCuts);
3190 if(fBckgType[0]!=kBckgNone)
3191 FillBckgHistos(fBckgType[0], fTracksGen, fJetsGen, jet,
3192 fFFBckgHisto0Gen, fQABckgHisto0Gen);
3193 if(fBckgType[1]!=kBckgNone)
3194 FillBckgHistos(fBckgType[1], fTracksGen, fJetsGen, jet,
3195 fFFBckgHisto1Gen, fQABckgHisto1Gen);
3196 if(fBckgType[2]!=kBckgNone)
3197 FillBckgHistos(fBckgType[2], fTracksGen, fJetsGen, jet,
3198 fFFBckgHisto2Gen, fQABckgHisto2Gen);
3199 if(fBckgType[3]!=kBckgNone)
3200 FillBckgHistos(fBckgType[3], fTracksGen, fJetsGen, jet,
3201 fFFBckgHisto3Gen, fQABckgHisto3Gen);
3202 if(fBckgType[4]!=kBckgNone)
3203 FillBckgHistos(fBckgType[4], fTracksGen, fJetsGen, jet,
3204 fFFBckgHisto4Gen, fQABckgHisto4Gen);
3205 } // end if(fBckgMode)
3208 if(fJSMode) FillJetShape(jet, jettracklist, fProNtracksLeadingJetGen, fProDelRPtSumGen, fProDelR80pcPtGen);
3210 delete jettracklist;
3215 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
3217 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
3218 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3219 if(fQAMode&2 && (ij==0)) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3221 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
3223 Double_t ptFractionEmbedded = 0;
3224 AliAODJet* embeddedJet = 0;
3226 if(fBranchEmbeddedJets.Length()){ // find embedded jet
3228 Int_t indexEmbedded = -1;
3229 for(Int_t i=0; i<nEmbeddedJets; i++){
3230 if(iEmbeddedMatchIndex[i] == ij){
3232 ptFractionEmbedded = fEmbeddedPtFraction[i];
3236 fh1IndexEmbedded->Fill(indexEmbedded);
3237 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
3239 if(indexEmbedded>-1){
3241 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
3242 if(!embeddedJet) continue;
3244 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
3245 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
3247 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
3248 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
3249 fh1DeltaREmbedded->Fill(deltaR);
3253 // get tracks in jet
3254 TList* jettracklist = new TList();
3255 Double_t sumPt = 0.;
3256 Bool_t isBadJet = kFALSE;
3258 if(GetFFRadius()<=0){
3259 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3261 if(fUseEmbeddedJetAxis){
3262 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3264 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3267 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
3269 if(isBadJet) continue;
3271 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
3273 TClonesArray *tca = fUseJetPIDtask ? dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName())) : 0x0;
3275 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3276 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
3277 if(!aodtrack) continue;
3279 Double_t pT = aodtrack->Pt();
3280 Float_t jetPt = jet->Pt();
3281 if(fUseEmbeddedJetPt){
3282 if(embeddedJet) jetPt = embeddedJet->Pt();
3286 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3288 if(fFFMode && (ij==0)) fFFHistosRecCuts->FillFF(pT, jetPt, incrementJetPt);
3289 if(fFFMode) fFFHistosRecCutsInc->FillFF(pT, jetPt, incrementJetPt);
3291 if(it==0){ // leading track
3292 if(fFFMode) fFFHistosRecLeadingTrack->FillFF(pT, jetPt, kTRUE);
3295 if (fUseJetPIDtask && incrementJetPt) {
3296 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3297 fJetPIDtask[i]->FillRecJets(fJetPIDtask[i]->GetCentralityPercentile(evtForCentDetermination), jetPt);
3300 if (fUseJetPIDtask) {
3301 Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(aodtrack)
3302 : aodtrack->GetTPCsignal();
3307 Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(aodtrack, InputEvent());
3308 Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(aodtrack);
3310 Int_t label = TMath::Abs(aodtrack->GetLabel());
3312 // Find MC track in our list, if available
3313 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
3315 Int_t mcID = AliPID::kUnknown;
3318 pdg = gentrack->GetPdgCode();
3320 // Secondaries, jets
3321 mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
3323 Double_t z = -1., xi = -1.;
3324 AliAnalysisTaskPID::GetJetTrackObservables(pT, jetPt, z, xi);
3326 Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), pT, aodtrack->Eta(), static_cast<Double_t>(aodtrack->Charge()),
3327 centPercent, jetPt, z, xi };
3328 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3329 if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3330 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3331 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))
3332 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
3335 Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
3336 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3337 if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3338 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3339 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))
3340 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3341 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
3345 if (gentrack->IsPhysicalPrimary()) {
3346 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3347 Double_t genPt = gentrack->Pt();
3348 Double_t genZ = -1., genXi = -1.;
3349 AliAnalysisTaskPID::GetJetTrackObservables(genPt, jetPt, genZ, genXi);
3350 Double_t valueGenAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), genPt, gentrack->Eta(),
3351 gentrack->Charge() / 3., centPercent, jetPt, genZ,
3354 Double_t valuePtResolution[AliAnalysisTaskPID::kPtResNumAxes] = { jetPt, genPt, pT, gentrack->Charge() / 3., centPercent };
3356 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3357 if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3358 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3359 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut())) {
3360 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3361 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
3362 fJetPIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
3363 AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
3365 fJetPIDtask[i]->FillPtResolution(mcID, valuePtResolution);
3371 Bool_t filledDCA = kFALSE;
3373 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3374 if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3375 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3376 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut())) {
3377 if (fJetPIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(aodtrack->Eta()))) {
3378 fJetPIDtask[i]->ProcessTrack(aodtrack, pdg, centPercent, jetPt);
3380 // Fill DCA histo (once) if at least one of the PID tasks accecpts the track
3384 Double_t dca[2] = {0., 0.}; // 0: xy; 1: z
3385 if (aodtrack->IsGlobalConstrained()) {
3386 dca[0] = aodtrack->DCA();
3387 dca[1] = aodtrack->ZAtDCA();
3390 Double_t v[3] = {0, };
3391 Double_t pos[3] = {0, };
3393 aodtrack->GetXYZ(pos);
3394 dca[0] = pos[0] - v[0];
3395 dca[1] = pos[1] - v[1];
3398 // "Unidentified" for data and MC
3399 fhDCA_XY->Fill(pT, dca[0]);
3400 fhDCA_Z->Fill(pT, dca[1]);
3402 // "Identified" for MC
3403 if (gentrack && mcID != AliPID::kUnknown) {
3405 if (gentrack->IsPhysicalPrimary()) {
3406 fhDCA_XY_prim_MCID[mcID]->Fill(pT, dca[0]);
3407 fhDCA_Z_prim_MCID[mcID]->Fill(pT, dca[1]);
3410 fhDCA_XY_sec_MCID[mcID]->Fill(pT, dca[0]);
3411 fhDCA_Z_sec_MCID[mcID]->Fill(pT, dca[1]);
3419 if (fIDFFMode && ((!fJetPIDtask[0]->GetUseTPCCutMIGeo() && !fJetPIDtask[0]->GetUseTPCnclCut()) ||
3420 (survivedTPCCutMIGeo && fJetPIDtask[0]->GetUseTPCCutMIGeo()) ||
3421 (survivedTPCnclCut && fJetPIDtask[0]->GetUseTPCnclCut()))) {
3422 // NOTE: Just take particle fraction from first task (should anyway be the same for all tasks)
3423 Int_t pidWeightedSpecies = fJetPIDtask[0]->GetRandomParticleTypeAccordingToParticleFractions(pT, jetPt,
3424 centPercent, kTRUE);
3425 if (pidWeightedSpecies < 0 || pidWeightedSpecies >= AliPID::kSPECIES) {
3426 Printf("Failed to determine particle ID for track in jet (recCuts) -> ID FF histos not filled with this track!");
3427 Printf("Track details: trackPt %f, jetPt %f, centrality %f!", pT, jetPt, centPercent);
3430 // WARNING: The number of jets for the different species does not make sense -> One has to take
3431 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
3432 // not to get confused
3433 fIDFFHistosRecCuts[pidWeightedSpecies]->FillFF(aodtrack->Pt(), jetPt, kFALSE);
3437 // Efficiency, jets - detector level
3439 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
3440 // and only affect the efficiencies for all (i.e. not identified) what is desired!
3441 //if (mcID == AliPID::kUnknown)
3444 // Fill efficiency for reconstructed primaries
3445 if (!gentrack->IsPhysicalPrimary())
3448 Int_t iMother = gentrack->GetMother();
3450 continue; // Not a physical primary
3453 if (gentrack->Eta() > fTrackEtaMax || gentrack->Eta() < fTrackEtaMin)
3456 Double_t genZ = -1., genXi = -1.;
3457 Double_t genPt = gentrack->Pt();
3458 AliAnalysisTaskPID::GetJetTrackObservables(genPt, jetPt, genZ, genXi);
3460 Double_t measZ = -1., measXi = -1.;
3461 Double_t measPt = aodtrack->Pt();
3462 AliAnalysisTaskPID::GetJetTrackObservables(measPt, jetPt, measZ, measXi);
3465 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3466 Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), genPt, gentrack->Eta(), gentrack->Charge() / 3.,
3467 centPercent, jetPt, genZ, genXi };
3468 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3469 if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3470 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3471 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))
3472 fJetPIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
3475 Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), measPt, aodtrack->Eta(), static_cast<Double_t>(aodtrack->Charge()),
3476 centPercent, jetPt, measZ, measXi };
3477 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3478 if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3479 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3480 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))
3481 fJetPIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
3488 if(fBckgMode && (ij==0)){
3489 if(fBckgType[0]!=kBckgNone)
3490 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet,
3491 fFFBckgHisto0RecCuts,fQABckgHisto0RecCuts, fh1BckgMult0);
3492 if(fBckgType[1]!=kBckgNone)
3493 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet,
3494 fFFBckgHisto1RecCuts,fQABckgHisto1RecCuts, fh1BckgMult1);
3495 if(fBckgType[2]!=kBckgNone)
3496 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet,
3497 fFFBckgHisto2RecCuts,fQABckgHisto2RecCuts, fh1BckgMult1);
3498 if(fBckgType[3]!=kBckgNone)
3499 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet,
3500 fFFBckgHisto3RecCuts,fQABckgHisto3RecCuts, fh1BckgMult2);
3501 if(fBckgType[4]!=kBckgNone)
3502 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet,
3503 fFFBckgHisto4RecCuts,fQABckgHisto4RecCuts, fh1BckgMult3);
3504 } // end if(fBckgMode)
3507 if(fJSMode && (ij==0)) FillJetShape(jet, jettracklist, fProNtracksLeadingJet, fProDelRPtSum, fProDelR80pcPt);
3509 delete jettracklist;
3511 } // end: cut embedded ratio
3512 } // end: leading jet or all jets
3513 } // end: rec. jets after cuts
3514 } // end: QA, FF and intra-jet
3517 // ____ efficiency _______________________________
3519 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
3521 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
3525 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
3528 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
3529 TArrayI indexAODTrSecNS;
3531 TArrayI indexMCTrSecNS;
3533 TArrayI indexAODTrSecS;
3535 TArrayI indexMCTrSecS;
3537 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
3538 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
3540 Int_t nTracksAODMCChargedSecNS = GetListOfTracks(fTracksAODMCChargedSecNS, kTrackAODMCChargedSecNS);
3541 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecNS);
3543 Int_t nTracksAODMCChargedSecS = GetListOfTracks(fTracksAODMCChargedSecS, kTrackAODMCChargedSecS);
3544 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks S: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecS);
3546 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
3547 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
3549 // associate gen and rec tracks, store indices in TArrays
3550 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
3551 AssociateGenRec(fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,indexMCTrSecNS,isGenSecNS,fh2PtRecVsGenSec);
3552 AssociateGenRec(fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,indexMCTrSecS,isGenSecS,fh2PtRecVsGenSec);
3555 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
3558 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecNS,fTracksAODMCChargedSecNS,indexAODTrSecNS,isGenSecNS);
3559 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecS,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS);
3560 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecSsc,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS,kTRUE);
3564 Double_t sumPtGenLeadingJetRecEff = 0;
3565 Double_t sumPtGenLeadingJetSec = 0;
3566 Double_t sumPtRecLeadingJetRecEff = 0;
3568 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
3570 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
3572 Bool_t isBadJetGenPrim = kFALSE;
3573 Bool_t isBadJetGenSec = kFALSE;
3574 Bool_t isBadJetRec = kFALSE;
3577 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
3579 // for efficiency: gen tracks from pointing with gen/rec jet
3580 TList* jettracklistGenPrim = new TList();
3582 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
3583 // note : FF recEff gen histos will be somewhat useless in this approach
3585 if(GetFFRadius() >0)
3586 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
3588 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
3590 TList* jettracklistGenSecNS = new TList();
3591 if(GetFFRadius() >0)
3592 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3594 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3596 TList* jettracklistGenSecS = new TList();
3597 if(GetFFRadius() >0)
3598 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3600 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3603 // bin efficiency in jet pt bins using rec tracks
3604 TList* jettracklistRec = new TList();
3605 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
3606 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
3609 Double_t jetEta = jet->Eta();
3610 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
3612 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
3613 if(GetFFMinNTracks()>0 && jettracklistGenSecNS->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
3614 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
3616 if(isBadJetRec) continue;
3618 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
3622 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
3623 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
3624 0,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
3626 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
3627 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
3628 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
3631 // secondaries: use jet pt from primaries
3632 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
3633 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts, indexAODTrSecNS,isGenSecNS,
3634 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
3636 else FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
3637 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS,
3638 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
3640 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecS,jet,
3641 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3642 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
3644 else FillJetTrackHistosRec(fFFHistosSecRecS,jet,
3645 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3646 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
3648 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
3649 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3650 0,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
3652 else FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
3653 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3654 jettracklistRec,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
3657 delete jettracklistGenPrim;
3658 delete jettracklistGenSecNS;
3659 delete jettracklistGenSecS;
3660 delete jettracklistRec;
3663 if(fBckgMode && fFFMode){
3665 TList* perpjettracklistGen = new TList();
3666 TList* perpjettracklistGen1 = new TList();
3667 TList* perpjettracklistGen2 = new TList();
3669 //Double_t sumPtGenPerp = 0.;
3670 Double_t sumPtGenPerp1 = 0.;
3671 Double_t sumPtGenPerp2 = 0.;
3672 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerp1);
3673 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen2, jet, TMath::Abs(GetFFRadius()) ,
3676 perpjettracklistGen->AddAll(perpjettracklistGen1);
3677 perpjettracklistGen->AddAll(perpjettracklistGen2);
3678 //sumPtGenPerp = 0.5*(sumPtGenPerp1+sumPtGenPerp2);
3680 TList* perpjettracklistGenSecNS = new TList();
3681 TList* perpjettracklistGenSecNS1 = new TList();
3682 TList* perpjettracklistGenSecNS2 = new TList();
3684 //Double_t sumPtGenPerpNS = 0.;
3685 Double_t sumPtGenPerpNS1 = 0.;
3686 Double_t sumPtGenPerpNS2 = 0.;
3687 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS1, jet, TMath::Abs(GetFFRadius()) ,
3689 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS2, jet, TMath::Abs(GetFFRadius()) ,
3692 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS1);
3693 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS2);
3694 //sumPtGenPerpNS = 0.5*(sumPtGenPerpNS1+sumPtGenPerpNS2);
3697 TList* perpjettracklistGenSecS = new TList();
3698 TList* perpjettracklistGenSecS1 = new TList();
3699 TList* perpjettracklistGenSecS2 = new TList();
3701 //Double_t sumPtGenPerpS = 0.;
3702 Double_t sumPtGenPerpS1 = 0.;
3703 Double_t sumPtGenPerpS2 = 0.;
3704 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS1, jet, TMath::Abs(GetFFRadius()) ,
3706 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS2, jet, TMath::Abs(GetFFRadius()) ,
3709 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS1);
3710 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS2);
3711 //sumPtGenPerpS = 0.5*(sumPtGenPerpS1+sumPtGenPerpS2);
3714 if(perpjettracklistGen->GetSize() != perpjettracklistGen1->GetSize() + perpjettracklistGen2->GetSize()){
3715 cout<<" ERROR: perpjettracklistGen size "<<perpjettracklistGen->GetSize()<<" perp1 "<<perpjettracklistGen1->GetSize()
3716 <<" perp2 "<<perpjettracklistGen2->GetSize()<<endl;
3720 if(perpjettracklistGenSecNS->GetSize() != perpjettracklistGenSecNS1->GetSize() + perpjettracklistGenSecNS2->GetSize()){
3721 cout<<" ERROR: perpjettracklistGenSecNS size "<<perpjettracklistGenSecNS->GetSize()<<" perp1 "<<perpjettracklistGenSecNS1->GetSize()
3722 <<" perp2 "<<perpjettracklistGenSecNS2->GetSize()<<endl;
3726 if(perpjettracklistGenSecS->GetSize() != perpjettracklistGenSecS1->GetSize() + perpjettracklistGenSecS2->GetSize()){
3727 cout<<" ERROR: perpjettracklistGenSecS size "<<perpjettracklistGenSecS->GetSize()<<" perp1 "<<perpjettracklistGenSecS1->GetSize()
3728 <<" perp2 "<<perpjettracklistGenSecS2->GetSize()<<endl;
3733 FillJetTrackHistosRec(fFFBckgHisto0RecEffRec,jet,
3734 perpjettracklistGen,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
3736 FillJetTrackHistosRec(fFFBckgHisto0SecRecNS,jet,
3737 perpjettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS);
3739 FillJetTrackHistosRec(fFFBckgHisto0SecRecS,jet,
3740 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS);
3742 FillJetTrackHistosRec(fFFBckgHisto0SecRecSsc,jet,
3743 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,0,kTRUE);
3746 delete perpjettracklistGen;
3747 delete perpjettracklistGen1;
3748 delete perpjettracklistGen2;
3750 delete perpjettracklistGenSecNS;
3751 delete perpjettracklistGenSecNS1;
3752 delete perpjettracklistGenSecNS2;
3754 delete perpjettracklistGenSecS;
3755 delete perpjettracklistGenSecS1;
3756 delete perpjettracklistGenSecS2;
3763 //___________________
3765 fTracksRecCuts->Clear();
3766 fTracksRecCutsEfficiency->Clear();
3767 fTracksGen->Clear();
3768 fTracksAODMCCharged->Clear();
3769 fTracksAODMCChargedSecNS->Clear();
3770 fTracksAODMCChargedSecS->Clear();
3771 fTracksRecQualityCuts->Clear();
3774 fJetsRecCuts->Clear();
3776 fJetsRecEff->Clear();
3777 fJetsEmbedded->Clear();
3781 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3782 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3783 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
3785 fBckgJetsRec->Clear();
3786 fBckgJetsRecCuts->Clear();
3787 fBckgJetsGen->Clear();
3792 PostData(1, fCommonHistList);
3794 if (fUseJetPIDtask) {
3795 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3796 fJetPIDtask[i]->PostOutputData();
3800 if (fUseInclusivePIDtask) {
3801 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3802 fInclusivePIDtask[i]->PostOutputData();
3807 //______________________________________________________________
3808 void AliAnalysisTaskIDFragmentationFunction::Terminate(Option_t *)
3812 if(fDebug > 1) printf("AliAnalysisTaskIDFragmentationFunction::Terminate() \n");
3815 //_________________________________________________________________________________
3816 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
3818 // fill list of tracks selected according to type
3820 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
3823 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
3827 if(!fAOD) return -1;
3829 if(!fAOD->GetTracks()) return 0;
3831 if(type==kTrackUndef) return 0;
3835 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
3837 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
3838 if(!aodExtraTracks)return iCount;
3839 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
3840 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
3841 if (!track) continue;
3843 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
3846 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
3848 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
3850 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
3851 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
3852 if(tr->Pt() < fTrackPtCut) continue;
3860 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
3862 // all rec. tracks, esd filter mask, eta range
3864 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
3865 AliAODTrack *tr = fAOD->GetTrack(it);
3867 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
3869 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
3870 if(type == kTrackAODCuts){
3871 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
3872 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
3873 if(tr->Pt() < fTrackPtCut) continue;
3880 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
3881 // kine particles, all or rather charged
3882 if(!fMCEvent) return iCount;
3884 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
3885 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
3887 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
3888 if(part->Charge()==0) continue;
3890 if(type == kTrackKineChargedAcceptance &&
3891 ( part->Eta() < fTrackEtaMin
3892 || part->Eta() > fTrackEtaMax
3893 || part->Phi() < fTrackPhiMin
3894 || part->Phi() > fTrackPhiMax
3895 || part->Pt() < fTrackPtCut)) continue;
3902 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS) {
3903 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
3904 if(!fAOD) return -1;
3906 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3907 if(!tca)return iCount;
3909 for(int it=0; it<tca->GetEntriesFast(); ++it){
3910 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
3912 if(type != kTrackAODMCChargedSecNS && type != kTrackAODMCChargedSecS && !part->IsPhysicalPrimary())continue;
3913 if((type == kTrackAODMCChargedSecNS || type == kTrackAODMCChargedSecS) && part->IsPhysicalPrimary())continue;
3915 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
3916 if(part->Charge()==0) continue;
3918 if(type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
3919 Bool_t isFromStrange = kFALSE;
3920 Int_t iMother = part->GetMother();
3922 AliAODMCParticle *partM = dynamic_cast<AliAODMCParticle*>(tca->At(iMother));
3923 if(!partM) continue;
3925 Int_t codeM = TMath::Abs(partM->GetPdgCode());
3926 Int_t mfl = Int_t (codeM/ TMath::Power(10, Int_t(TMath::Log10(codeM))));
3928 if (mfl == 3 && codeM != 3) isFromStrange = kTRUE;
3929 if(codeM == 130) isFromStrange = kTRUE; // K0 long
3930 if(part->IsSecondaryFromMaterial()) isFromStrange = kFALSE; // strange resonances from hadronic showers ?
3933 // cout<<" mfl "<<mfl<<" codeM "<<partM->GetPdgCode()<<" code this track "<<part->GetPdgCode()<<endl;
3934 // cout<<" index this track "<<it<<" index daughter 0 "<<partM->GetDaughter(0)<<" 1 "<<partM->GetDaughter(1)<<endl;
3937 if(type==kTrackAODMCChargedSecNS && isFromStrange) continue;
3938 if(type==kTrackAODMCChargedSecS && !isFromStrange) continue;
3942 if(type==kTrackAODMCChargedAcceptance &&
3943 ( part->Eta() > fTrackEtaMax
3944 || part->Eta() < fTrackEtaMin
3945 || part->Phi() > fTrackPhiMax
3946 || part->Phi() < fTrackPhiMin
3947 || part->Pt() < fTrackPtCut)) continue;
3959 // _______________________________________________________________________________
3960 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfJets(TList *list, Int_t type)
3962 // fill list of jets selected according to type
3965 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
3969 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
3971 if(fBranchRecJets.Length()==0){
3972 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
3973 if(fDebug>1)fAOD->Print();
3977 TClonesArray *aodRecJets = 0;
3978 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
3979 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
3980 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
3983 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
3984 if(fDebug>1)fAOD->Print();
3988 // Reorder jet pt and fill new temporary AliAODJet objects
3991 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
3993 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
3996 if( tmp->Pt() < fJetPtCut ) continue;
3997 if( type == kJetsRecAcceptance &&
3998 ( tmp->Eta() < fJetEtaMin
3999 || tmp->Eta() > fJetEtaMax
4000 || tmp->Phi() < fJetPhiMin
4001 || tmp->Phi() > fJetPhiMax )) continue;
4012 else if(type == kJetsKine || type == kJetsKineAcceptance){
4018 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
4022 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
4023 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
4024 AliGenHijingEventHeader* hijingGenHeader = 0x0;
4026 if(!pythiaGenHeader){
4027 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
4029 if(!hijingGenHeader){
4030 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
4033 TLorentzVector mom[4];
4035 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
4037 for(Int_t i=0; i<2; ++i){
4038 if(!mom[i].Pt()) continue;
4039 jet[i] = new AliAODJet(mom[i]);
4041 if( type == kJetsKineAcceptance &&
4042 ( jet[i]->Eta() < fJetEtaMin
4043 || jet[i]->Eta() > fJetEtaMax
4044 || jet[i]->Phi() < fJetPhiMin
4045 || jet[i]->Phi() > fJetPhiMax )) continue;
4055 // fetch the pythia generated jets
4056 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
4059 AliAODJet *jet = new AliAODJet();
4060 pythiaGenHeader->TriggerJet(ip, p);
4061 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
4063 if( type == kJetsKineAcceptance &&
4064 ( jet->Eta() < fJetEtaMin
4065 || jet->Eta() > fJetEtaMax
4066 || jet->Phi() < fJetPhiMin
4067 || jet->Phi() > fJetPhiMax )) continue;
4075 else if(type == kJetsGen || type == kJetsGenAcceptance ){
4077 if(fBranchGenJets.Length()==0){
4078 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
4082 TClonesArray *aodGenJets = 0;
4083 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
4084 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
4085 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
4089 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
4091 if(fDebug>1)fAOD->Print();
4097 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
4099 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
4102 if( tmp->Pt() < fJetPtCut ) continue;
4103 if( type == kJetsGenAcceptance &&
4104 ( tmp->Eta() < fJetEtaMin
4105 || tmp->Eta() > fJetEtaMax
4106 || tmp->Phi() < fJetPhiMin
4107 || tmp->Phi() > fJetPhiMax )) continue;
4115 else if(type == kJetsEmbedded){ // embedded jets
4117 if(fBranchEmbeddedJets.Length()==0){
4118 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
4119 if(fDebug>1)fAOD->Print();
4123 TClonesArray *aodEmbeddedJets = 0;
4124 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
4125 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
4126 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
4128 if(!aodEmbeddedJets){
4129 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
4130 if(fDebug>1)fAOD->Print();
4134 // Reorder jet pt and fill new temporary AliAODJet objects
4135 Int_t nEmbeddedJets = 0;
4137 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
4139 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
4142 if( tmp->Pt() < fJetPtCut ) continue;
4143 if( tmp->Eta() < fJetEtaMin
4144 || tmp->Eta() > fJetEtaMax
4145 || tmp->Phi() < fJetPhiMin
4146 || tmp->Phi() > fJetPhiMax ) continue;
4154 return nEmbeddedJets;
4157 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
4162 // ___________________________________________________________________________________
4163 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
4165 // fill list of bgr clusters selected according to type
4167 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4169 if(fBranchRecBckgClusters.Length()==0){
4170 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4171 if(fDebug>1)fAOD->Print();
4175 TClonesArray *aodRecJets = 0;
4176 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
4177 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
4178 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
4181 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
4182 if(fDebug>1)fAOD->Print();
4186 // Reorder jet pt and fill new temporary AliAODJet objects
4189 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4191 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4194 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
4195 if( type == kJetsRecAcceptance &&
4196 ( tmp->Eta() < fJetEtaMin
4197 || tmp->Eta() > fJetEtaMax
4198 || tmp->Phi() < fJetPhiMin
4199 || tmp->Phi() > fJetPhiMax )) continue;
4213 // MC clusters still Under construction
4219 // _________________________________________________________________________________________________________
4220 void AliAnalysisTaskIDFragmentationFunction::SetProperties(THnSparse* h, Int_t dim, const char** labels)
4222 // Set properties of THnSparse
4224 for(Int_t i=0; i<dim; i++){
4225 h->GetAxis(i)->SetTitle(labels[i]);
4226 h->GetAxis(i)->SetTitleColor(1);
4230 // __________________________________________________________________________________________
4231 void AliAnalysisTaskIDFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
4233 //Set properties of histos (x and y title)
4237 h->GetXaxis()->SetTitleColor(1);
4238 h->GetYaxis()->SetTitleColor(1);
4241 // _________________________________________________________________________________________________________
4242 void AliAnalysisTaskIDFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
4244 //Set properties of histos (x,y and z title)
4249 h->GetXaxis()->SetTitleColor(1);
4250 h->GetYaxis()->SetTitleColor(1);
4251 h->GetZaxis()->SetTitleColor(1);
4254 // ________________________________________________________________________________________________________________________________________________________
4255 void AliAnalysisTaskIDFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
4256 Double_t radius, Double_t& sumPt, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
4258 // fill list of tracks in cone around jet axis
4261 Bool_t isBadMaxPt = kFALSE;
4262 Bool_t isBadMinPt = kTRUE;
4265 jet->PxPyPz(jetMom);
4266 TVector3 jet3mom(jetMom);
4268 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4270 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4272 Double_t trackMom[3];
4273 track->PxPyPz(trackMom);
4274 TVector3 track3mom(trackMom);
4276 Double_t dR = jet3mom.DeltaR(track3mom);
4280 outputlist->Add(track);
4282 sumPt += track->Pt();
4284 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
4285 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
4290 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
4291 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
4296 // _________________________________________________________________________________________________________________________________________________________________
4297 void AliAnalysisTaskIDFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
4299 // list of jet tracks from trackrefs
4301 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
4303 Bool_t isBadMaxPt = kFALSE;
4304 Bool_t isBadMinPt = kTRUE;
4306 for(Int_t itrack=0; itrack<nTracks; itrack++) {
4308 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
4310 AliError("expected ref track not found ");
4314 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
4315 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
4316 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
4322 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
4323 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
4328 // _ ________________________________________________________________________________________________________________________________
4329 void AliAnalysisTaskIDFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
4330 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
4332 // associate generated and reconstructed tracks, fill TArrays of list indices
4334 Int_t nTracksRec = tracksRec->GetSize();
4335 Int_t nTracksGen = tracksAODMCCharged->GetSize();
4336 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4339 if(!nTracksGen) return;
4343 indexAODTr.Set(nTracksGen);
4344 indexMCTr.Set(nTracksRec);
4345 isRefGen.Set(nTracksGen);
4347 indexAODTr.Reset(-1);
4348 indexMCTr.Reset(-1);
4351 // loop over reconstructed tracks, get generated track
4353 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
4355 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
4356 if(!rectrack)continue;
4357 Int_t label = TMath::Abs(rectrack->GetLabel());
4359 // find MC track in our list
4360 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
4362 Int_t listIndex = -1;
4363 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
4367 indexAODTr[listIndex] = iRec;
4368 indexMCTr[iRec] = listIndex;
4373 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
4375 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4377 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
4378 if(!gentrack)continue;
4379 Int_t pdg = gentrack->GetPdgCode();
4381 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
4382 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
4383 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
4385 isRefGen[iGen] = kTRUE;
4387 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4390 Float_t genPt = gentrack->Pt();
4391 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
4393 Float_t recPt = vt->Pt();
4394 fh2PtRecVsGen->Fill(genPt,recPt);
4401 // _____________________________________________________________________________________________________________________________________________
4402 void AliAnalysisTaskIDFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
4403 const TArrayI& indexAODTr, const TArrayS& isRefGen, Bool_t scaleStrangeness){
4405 // fill QA for single track reconstruction efficiency
4407 Int_t nTracksGen = tracksGen->GetSize();
4409 if(!nTracksGen) return;
4411 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4413 if(isRefGen[iGen] != 1) continue; // select primaries
4415 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
4416 if(!gentrack) continue;
4417 Double_t ptGen = gentrack->Pt();
4418 Double_t etaGen = gentrack->Eta();
4419 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
4421 // apply same acc & pt cuts as for FF GetMCStrangenessFactorCMS
4423 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
4424 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
4425 if(ptGen < fTrackPtCut) continue;
4427 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
4429 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4431 if(iRec>=0 && trackQARec){
4432 if(scaleStrangeness){
4433 //Double_t weight = GetMCStrangenessFactor(ptGen);
4434 Double_t weight = GetMCStrangenessFactorCMS(gentrack);
4435 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
4437 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
4442 // ______________________________________________________________________________________________________________________________________________________
4444 void AliAnalysisTaskIDFragmentationFunction::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
4445 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
4446 const TArrayS& isRefGen, TList* jetTrackListTR, Bool_t scaleStrangeness,
4447 Bool_t fillJS, TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt)
4449 // fill objects for jet track reconstruction efficiency or secondaries contamination
4450 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
4451 // jetTrackListTR pointer: track refs if not NULL
4454 // ensure proper normalization, even for secondaries
4455 Double_t jetPtRec = jet->Pt();
4456 ffhistRec->FillFF(-1, jetPtRec, kTRUE);
4458 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
4459 if(nTracksJet == 0) return;
4461 TList* listRecTracks = new TList();
4462 listRecTracks->Clear();
4464 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
4466 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
4467 if(!gentrack)continue;
4468 // find jet track in gen tracks list
4469 Int_t iGen = tracksGen->IndexOf(gentrack);
4472 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
4476 if(isRefGen[iGen] != 1) continue; // select primaries
4478 Double_t ptGen = gentrack->Pt();
4479 Double_t etaGen = gentrack->Eta();
4480 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
4482 // gen level acc & pt cuts - skip in case of track refs
4483 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
4484 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
4485 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
4488 Double_t ptRec = -1;
4490 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4491 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
4493 Bool_t isJetTrack = kFALSE;
4494 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
4498 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
4499 if(!rectrack) continue;
4501 ptRec = rectrack->Pt();
4504 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
4505 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
4510 Double_t trackPt = ptRec;
4511 Bool_t incrementJetPt = kFALSE;
4513 if(scaleStrangeness){
4514 //Double_t weight = GetMCStrangenessFactor(ptGen);
4515 Double_t weight = GetMCStrangenessFactorCMS(gentrack);
4517 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt, 0, kTRUE, weight );
4520 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt );
4523 listRecTracks->Add(rectrack);
4530 if(fillJS) FillJetShape(jet,listRecTracks,hProNtracksLeadingJet, hProDelRPtSum, hProDelR80pcPt,0,0,scaleStrangeness);
4532 delete listRecTracks;
4536 // _____________________________________________________________________________________________________________________________________________________________________
4537 void AliAnalysisTaskIDFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
4539 // List of tracks in cone perpendicular to the jet azimuthal direction
4542 jet->PxPyPz(jetMom);
4544 TVector3 jet3mom(jetMom);
4545 // Rotate phi and keep eta unchanged
4546 Double_t etaTilted = jet3mom.Eta();
4547 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
4548 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
4550 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4553 if( fUseExtraTracksBgr != 1){
4554 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4555 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4556 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4560 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4562 Double_t trackMom[3];
4563 track->PxPyPz(trackMom);
4564 TVector3 track3mom(trackMom);
4566 Double_t deta = track3mom.Eta() - etaTilted;
4567 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
4568 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
4569 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
4573 outputlist->Add(track);
4574 sumPt += track->Pt();
4580 // ________________________________________________________________________________________________________________________________________________________
4581 void AliAnalysisTaskIDFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
4583 // List of tracks in cone perpendicular to the jet azimuthal direction
4586 jet->PxPyPz(jetMom);
4588 TVector3 jet3mom(jetMom);
4589 // Rotate phi and keep eta unchanged
4590 Double_t etaTilted = jet3mom.Eta();
4591 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
4592 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
4594 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
4598 if( fUseExtraTracksBgr != 1){
4599 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4600 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4601 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4605 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4607 Float_t trackEta = track->Eta();
4608 Float_t trackPhi = track->Phi();
4610 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
4612 if((trackPhi<=phiTilted+radius) &&
4613 (trackPhi>=phiTilted-radius) &&
4614 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
4616 outputlist->Add(track);
4617 sumPt += track->Pt();
4620 else if( phiTilted-radius < 0 )
4622 if((( trackPhi < phiTilted+radius ) ||
4623 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
4624 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
4626 outputlist->Add(track);
4627 sumPt += track->Pt();
4630 else if( phiTilted+radius > 2*TMath::Pi() )
4632 if((( trackPhi > phiTilted-radius ) ||
4633 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
4634 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
4636 outputlist->Add(track);
4637 sumPt += track->Pt();
4642 // Jet area - Temporarily added should be modified with the proper jet area value
4643 Float_t areaJet = CalcJetArea(etaTilted,radius);
4644 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
4646 normFactor = (Float_t) 1. / (areaJet / areaTilted);
4651 // ________________________________________________________________________________________________________________________________________________________
4652 void AliAnalysisTaskIDFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, const TList* jetlist,
4655 // List of tracks outside cone around N jet axis
4656 // Particles taken randomly
4659 // Int_t nj = jetlist->GetSize();
4660 Float_t rc = TMath::Abs(GetFFRadius());
4661 Float_t rcl = GetFFBckgRadius();
4663 // Estimate jet and background areas
4664 Float_t* areaJet = new Float_t[nCases];
4665 memset(areaJet, 0, sizeof(Float_t) * nCases);
4666 Float_t* areaJetLarge = new Float_t[nCases];
4667 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
4668 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
4669 Float_t areaOut = areaFull;
4671 //estimate jets and background areas
4674 TList* templist = new TList();
4675 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
4677 for(Int_t ij=0; ij<nCases; ++ij)
4679 // Get jet information
4680 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
4683 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
4684 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
4685 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
4688 areaJet[ij] = CalcJetArea(etaJet,rc);
4690 // Area jet larger angle
4691 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
4694 areaOut = areaOut - areaJetLarge[ij];
4698 // List of all tracks outside jet areas
4699 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4702 if( fUseExtraTracksBgr != 1){
4703 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4704 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4705 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4709 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4712 Double_t trackMom[3];
4713 track->PxPyPz(trackMom);
4714 TVector3 track3mom(trackMom);
4716 Double_t *dR = new Double_t[nCases];
4717 for(Int_t ij=0; ij<nCases; ij++)
4718 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
4720 if((nCases==1 && (dR[0]>rcl)) ||
4721 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
4722 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
4724 templist->Add(track);
4730 // Take tracks randomly
4731 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
4732 TArrayI* ar = new TArrayI(nOut);
4734 for(Int_t init=0; init<nOut; init++)
4737 Int_t *randIndex = new Int_t[nScaled];
4738 for(Int_t init2=0; init2<nScaled; init2++)
4739 randIndex[init2] = -1;
4741 // Select nScaled different random numbers in nOut
4742 for(Int_t i=0; i<nScaled; i++)
4744 Int_t* tmpArr = new Int_t[nOut-i];
4745 Int_t temp = fRandom->Integer(nOut-i);
4746 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
4748 if(ind<temp) tmpArr[ind] = (*ar)[ind];
4749 else tmpArr[ind] = (*ar)[ind+1];
4751 randIndex[i] = (*ar)[temp];
4753 ar->Set(nOut-i-1,tmpArr);
4759 for(Int_t ipart=0; ipart<nScaled; ipart++)
4761 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
4762 outputlist->Add(track);
4763 sumPt += track->Pt();
4770 delete [] areaJetLarge;
4773 delete [] randIndex;
4777 // ________________________________________________________________________________________________________________________________________________________
4778 void AliAnalysisTaskIDFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist,
4779 const TList* jetlist, Double_t& sumPt, Double_t &normFactor)
4781 // List of tracks outside cone around N jet axis
4782 // All particles taken + final scaling factor
4785 Float_t rc = TMath::Abs(GetFFRadius());
4786 Float_t rcl = GetFFBckgRadius();
4788 // Estimate jet and background areas
4789 Float_t* areaJet = new Float_t[nCases];
4790 memset(areaJet, 0, sizeof(Float_t) * nCases);
4791 Float_t* areaJetLarge = new Float_t[nCases];
4792 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
4793 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
4794 Float_t areaOut = areaFull;
4796 //estimate jets and background areas
4799 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
4801 for(Int_t ij=0; ij<nCases; ++ij)
4803 // Get jet information
4804 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
4807 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
4808 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
4809 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
4812 areaJet[ij] = CalcJetArea(etaJet,rc);
4814 // Area jet larger angle
4815 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
4817 // Outside jets area
4818 areaOut = areaOut - areaJetLarge[ij];
4822 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4825 if( fUseExtraTracksBgr != 1){
4826 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4827 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4828 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4832 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4834 Double_t trackMom[3];
4835 track->PxPyPz(trackMom);
4836 TVector3 track3mom(trackMom);
4838 Double_t *dR = new Double_t[nCases];
4839 for(Int_t ij=0; ij<nCases; ij++)
4840 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
4843 (nCases==1 && (dR[0]>rcl)) ||
4844 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
4845 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
4847 outputlist->Add(track);
4848 sumPt += track->Pt();
4854 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
4855 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
4860 delete [] areaJetLarge;
4865 // ______________________________________________________________________________________________________________________________________________________
4866 Float_t AliAnalysisTaskIDFragmentationFunction::CalcJetArea(Float_t etaJet, Float_t rc) const
4868 // calculate area of jet with eta etaJet and radius rc
4870 Float_t detamax = etaJet + rc;
4871 Float_t detamin = etaJet - rc;
4872 Float_t accmax = 0.0; Float_t accmin = 0.0;
4873 if(detamax > fTrackEtaMax){ // sector outside etamax
4874 Float_t h = fTrackEtaMax - etaJet;
4875 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
4877 if(detamin < fTrackEtaMin){ // sector outside etamin
4878 Float_t h = fTrackEtaMax + etaJet;
4879 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
4881 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
4887 // ___________________________________________________________________________________________________________________________
4888 void AliAnalysisTaskIDFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
4890 // fill tracks from bckgCluster branch in list,
4891 // for all clusters outside jet cone
4892 // sum up total area of clusters
4894 Double_t rc = GetFFRadius();
4895 Double_t rcl = GetFFBckgRadius();
4897 Double_t areaTotal = 0;
4898 Double_t sumPtTotal = 0;
4900 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
4902 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
4904 Double_t dR = jet->DeltaR(bgrCluster);
4906 if(dR<rcl) continue;
4908 Double_t clusterPt = bgrCluster->Pt();
4909 Double_t area = bgrCluster->EffectiveAreaCharged();
4911 sumPtTotal += clusterPt;
4913 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
4915 for(Int_t it = 0; it<nTracksJet; it++){
4917 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
4918 if( fUseExtraTracksBgr != 1){
4919 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
4920 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4921 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4925 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
4926 if(!track) continue;
4928 Float_t trackPt = track->Pt();
4929 Float_t trackEta = track->Eta();
4930 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
4932 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
4933 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
4934 if(trackPt < fTrackPtCut) continue;
4936 outputlist->Add(track);
4940 Double_t areaJet = TMath::Pi()*rc*rc;
4941 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
4946 // _______________________________________________________________________________________________________________________
4947 void AliAnalysisTaskIDFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
4949 // fill tracks from bckgCluster branch,
4950 // using cluster with median density (odd number of clusters)
4951 // or picking randomly one of the two closest to median (even number)
4955 const Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
4957 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
4959 Double_t* bgrDensity = new Double_t[nBckgClusters];
4960 Int_t* indices = new Int_t[nBckgClusters];
4962 for(Int_t ij=0; ij<nBckgClusters; ++ij){
4964 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
4965 Double_t clusterPt = bgrCluster->Pt();
4966 Double_t area = bgrCluster->EffectiveAreaCharged();
4968 Double_t density = 0;
4969 if(area>0) density = clusterPt/area;
4971 bgrDensity[ij] = density;
4975 TMath::Sort(nBckgClusters, bgrDensity, indices);
4977 // get median cluster
4979 AliAODJet* medianCluster = 0;
4980 //Double_t medianDensity = 0;
4982 if(TMath::Odd(nBckgClusters)){
4984 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
4985 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
4987 //Double_t clusterPt = medianCluster->Pt();
4988 //Double_t area = medianCluster->EffectiveAreaCharged();
4990 //if(area>0) medianDensity = clusterPt/area;
4994 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
4995 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
4997 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
4998 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
5000 //Double_t density1 = 0;
5001 //Double_t clusterPt1 = medianCluster1->Pt();
5002 //Double_t area1 = medianCluster1->EffectiveAreaCharged();
5003 //if(area1>0) density1 = clusterPt1/area1;
5005 //Double_t density2 = 0;
5006 //Double_t clusterPt2 = medianCluster2->Pt();
5007 //Double_t area2 = medianCluster2->EffectiveAreaCharged();
5008 //if(area2>0) density2 = clusterPt2/area2;
5010 //medianDensity = 0.5*(density1+density2);
5012 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
5015 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
5017 for(Int_t it = 0; it<nTracksJet; it++){
5019 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5020 if( fUseExtraTracksBgr != 1){
5021 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
5022 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5023 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5027 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
5028 if(!track) continue;
5030 Float_t trackPt = track->Pt();
5031 Float_t trackEta = track->Eta();
5032 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5034 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5035 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5036 if(trackPt < fTrackPtCut) continue;
5038 outputlist->Add(track);
5041 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
5042 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
5044 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
5048 delete[] bgrDensity;
5052 // ______________________________________________________________________________________________________________________________________________________
5053 void AliAnalysisTaskIDFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet,
5054 AliFragFuncHistos* ffbckghistocuts, AliFragFuncQATrackHistos* qabckghistocuts, TH1F* fh1Mult){
5056 // List of tracks outside jets for background study
5057 TList* tracklistout2jets = new TList();
5058 TList* tracklistout3jets = new TList();
5059 TList* tracklistout2jetsStat = new TList();
5060 TList* tracklistout3jetsStat = new TList();
5061 Double_t sumPtOut2Jets = 0.;
5062 Double_t sumPtOut3Jets = 0.;
5063 Double_t sumPtOut2JetsStat = 0.;
5064 Double_t sumPtOut3JetsStat = 0.;
5065 Double_t normFactor2Jets = 0.;
5066 Double_t normFactor3Jets = 0.;
5068 Int_t nRecJetsCuts = inputjetlist->GetEntries();
5070 if(nRecJetsCuts>1) {
5071 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
5072 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
5075 if(nRecJetsCuts>2) {
5076 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
5077 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
5080 if(type==kBckgOutLJ || type==kBckgOutAJ)
5082 TList* tracklistoutleading = new TList();
5083 Double_t sumPtOutLeading = 0.;
5084 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
5085 if(type==kBckgOutLJ && fh1Mult) fh1Mult->Fill(tracklistoutleading->GetSize());
5087 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
5089 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
5090 if(!trackVP) continue;
5091 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5093 Float_t jetPt = jet->Pt();
5094 Float_t trackPt = trackV->Pt();
5096 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5098 if(type==kBckgOutLJ)
5100 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
5102 // Fill track QA for background
5103 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5106 // All cases included
5107 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5109 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5113 // Increment jet pt with one entry in case #tracks outside jets = 0
5114 if(tracklistoutleading->GetSize()==0) {
5115 Float_t jetPt = jet->Pt();
5116 Bool_t incrementJetPt = kTRUE;
5117 if(type==kBckgOutLJ)
5119 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5121 // All cases included
5122 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5124 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5127 delete tracklistoutleading;
5129 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
5131 TList* tracklistoutleadingStat = new TList();
5132 Double_t sumPtOutLeadingStat = 0.;
5133 Double_t normFactorLeading = 0.;
5135 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
5136 if(type==kBckgOutLJStat && fh1Mult) fh1Mult->Fill(tracklistoutleadingStat->GetSize());
5138 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
5140 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
5141 if(!trackVP) continue;
5142 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5144 Float_t jetPt = jet->Pt();
5145 Float_t trackPt = trackV->Pt();
5146 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5149 if(type==kBckgOutLJStat)
5151 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
5153 // Fill track QA for background
5154 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
5157 // All cases included
5158 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
5160 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
5161 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5166 // Increment jet pt with one entry in case #tracks outside jets = 0
5167 if(tracklistoutleadingStat->GetSize()==0) {
5168 Float_t jetPt = jet->Pt();
5169 Bool_t incrementJetPt = kTRUE;
5170 if(type==kBckgOutLJStat)
5172 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
5174 // All cases included
5175 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
5177 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
5181 delete tracklistoutleadingStat;
5184 if(type==kBckgPerp || type==kBckgPerp2 || type==kBckgPerp2Area)
5186 Double_t sumPtPerp1 = 0.;
5187 Double_t sumPtPerp2 = 0.;
5188 TList* tracklistperp = new TList();
5189 TList* tracklistperp1 = new TList();
5190 TList* tracklistperp2 = new TList();
5193 if(type == kBckgPerp2) norm = 2; // in FillFF() scaleFac = 1/norm = 0.5 - account for double area;
5194 if(type == kBckgPerp2Area) norm = 2*TMath::Pi()*TMath::Abs(GetFFRadius())*TMath::Abs(GetFFRadius()) / jet->EffectiveAreaCharged(); // in FillFF() scaleFac = 1/norm;
5196 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp1,jet,TMath::Abs(GetFFRadius()),sumPtPerp1);
5197 if(type==kBckgPerp2 || type==kBckgPerp2Area) GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2., inputtracklist,tracklistperp2,jet,TMath::Abs(GetFFRadius()),sumPtPerp2);
5199 tracklistperp->AddAll(tracklistperp1);
5200 tracklistperp->AddAll(tracklistperp2);
5202 if(tracklistperp->GetSize() != tracklistperp1->GetSize() + tracklistperp2->GetSize()){
5203 cout<<" ERROR: tracklistperp size "<<tracklistperp->GetSize()<<" perp1 "<<tracklistperp1->GetSize()<<" perp2 "<<tracklistperp2->GetSize()<<endl;
5207 if(fh1Mult) fh1Mult->Fill(tracklistperp->GetSize());
5209 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
5211 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
5212 if(!trackVP)continue;
5213 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5215 Float_t jetPt = jet->Pt();
5216 Float_t trackPt = trackV->Pt();
5218 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5220 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, norm );
5222 // Fill track QA for background
5223 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5227 // Increment jet pt with one entry in case #tracks outside jets = 0
5228 if(tracklistperp->GetSize()==0) {
5229 Float_t jetPt = jet->Pt();
5230 Bool_t incrementJetPt = kTRUE;
5231 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5236 // fill for tracklistperp1/2 separately, divide norm by 2
5237 if(type==kBckgPerp){
5238 FillJetShape(jet, tracklistperp, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
5240 if(type==kBckgPerp2){
5241 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
5242 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0., kFALSE);
5244 if(type==kBckgPerp2Area){ // divide norm by 2: listperp1/2 filled separately
5245 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0.5*norm, kFALSE);
5246 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0.5*norm, kFALSE);
5250 delete tracklistperp;
5251 delete tracklistperp1;
5252 delete tracklistperp2;
5255 if(type==kBckgASide)
5257 Double_t sumPtASide = 0.;
5258 TList* tracklistaside = new TList();
5259 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,TMath::Abs(GetFFRadius()),sumPtASide);
5260 if(fh1Mult) fh1Mult->Fill(tracklistaside->GetSize());
5262 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
5264 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
5265 if(!trackVP) continue;
5266 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5268 Float_t jetPt = jet->Pt();
5269 Float_t trackPt = trackV->Pt();
5271 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5273 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5275 // Fill track QA for background
5276 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5280 if(tracklistaside->GetSize()==0) {
5281 Float_t jetPt = jet->Pt();
5282 Bool_t incrementJetPt = kTRUE;
5283 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5286 delete tracklistaside;
5289 if(type==kBckgASideWindow)
5291 Double_t normFactorASide = 0.;
5292 Double_t sumPtASideW = 0.;
5293 TList* tracklistasidew = new TList();
5294 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,TMath::Abs(GetFFRadius()),sumPtASideW,normFactorASide);
5295 if(fh1Mult) fh1Mult->Fill(tracklistasidew->GetSize());
5297 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
5299 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
5300 if(!trackVP) continue;
5301 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5303 Float_t jetPt = jet->Pt();
5304 Float_t trackPt = trackV->Pt();
5305 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5307 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
5309 // Fill track QA for background
5310 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
5314 if(tracklistasidew->GetSize()==0) {
5315 Float_t jetPt = jet->Pt();
5316 Bool_t incrementJetPt = kTRUE;
5317 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
5320 delete tracklistasidew;
5323 if(type==kBckgPerpWindow)
5325 Double_t normFactorPerp = 0.;
5326 Double_t sumPtPerpW = 0.;
5327 TList* tracklistperpw = new TList();
5328 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,TMath::Abs(GetFFRadius()),sumPtPerpW,normFactorPerp);
5329 if(fh1Mult) fh1Mult->Fill(tracklistperpw->GetSize());
5331 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
5333 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
5334 if(!trackVP) continue;
5335 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5337 Float_t jetPt = jet->Pt();
5338 Float_t trackPt = trackV->Pt();
5339 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5341 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
5343 // Fill track QA for background
5344 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
5348 if(tracklistperpw->GetSize()==0) {
5349 Float_t jetPt = jet->Pt();
5350 Bool_t incrementJetPt = kTRUE;
5351 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
5354 delete tracklistperpw;
5358 if(type==kBckgOut2J || type==kBckgOutAJ)
5360 if(type==kBckgOut2J && fh1Mult) fh1Mult->Fill(tracklistout2jets->GetSize());
5361 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
5363 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
5364 if(!trackVP) continue;
5365 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5367 Float_t jetPt = jet->Pt();
5368 Float_t trackPt = trackV->Pt();
5370 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5372 if(type==kBckgOut2J)
5374 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5375 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5378 // All cases included
5379 if(nRecJetsCuts==2 && type==kBckgOutAJ)
5381 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5386 // Increment jet pt with one entry in case #tracks outside jets = 0
5387 if(tracklistout2jets->GetSize()==0) {
5388 Float_t jetPt = jet->Pt();
5389 Bool_t incrementJetPt = kTRUE;
5390 if(type==kBckgOut2J)
5392 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5394 // All cases included
5395 if(nRecJetsCuts==2 && type==kBckgOutAJ)
5397 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5402 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
5404 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
5406 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
5407 if(!trackVP) continue;
5408 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5410 Float_t jetPt = jet->Pt();
5411 Float_t trackPt = trackV->Pt();
5412 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5414 if(type==kBckgOut2JStat)
5416 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
5418 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5421 // All cases included
5422 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
5424 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
5426 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5430 // Increment jet pt with one entry in case #tracks outside jets = 0
5431 if(tracklistout2jetsStat->GetSize()==0) {
5432 Float_t jetPt = jet->Pt();
5433 Bool_t incrementJetPt = kTRUE;
5434 if(type==kBckgOut2JStat)
5436 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
5438 // All cases included
5439 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
5441 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
5447 if(type==kBckgOut3J || type==kBckgOutAJ)
5449 if(type==kBckgOut3J && fh1Mult) fh1Mult->Fill(tracklistout3jets->GetSize());
5451 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
5453 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
5454 if(!trackVP) continue;
5455 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5457 Float_t jetPt = jet->Pt();
5458 Float_t trackPt = trackV->Pt();
5460 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5462 if(type==kBckgOut3J)
5464 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5466 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5469 // All cases included
5470 if(nRecJetsCuts==3 && type==kBckgOutAJ)
5472 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5477 // Increment jet pt with one entry in case #tracks outside jets = 0
5478 if(tracklistout3jets->GetSize()==0) {
5479 Float_t jetPt = jet->Pt();
5480 Bool_t incrementJetPt = kTRUE;
5481 if(type==kBckgOut3J)
5483 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5485 // All cases included
5486 if(nRecJetsCuts==3 && type==kBckgOutAJ)
5488 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5493 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
5495 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
5497 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
5498 if(!trackVP) continue;
5499 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5501 Float_t jetPt = jet->Pt();
5502 Float_t trackPt = trackV->Pt();
5503 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5505 if(type==kBckgOut3JStat)
5507 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
5509 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
5512 // All cases included
5513 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
5515 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
5517 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5522 // Increment jet pt with one entry in case #tracks outside jets = 0
5523 if(tracklistout3jetsStat->GetSize()==0) {
5524 Float_t jetPt = jet->Pt();
5525 Bool_t incrementJetPt = kTRUE;
5526 if(type==kBckgOut3JStat)
5528 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
5530 // All cases included
5531 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
5533 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
5539 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
5541 TList* tracklistClustersOutLeading = new TList();
5542 Double_t normFactorClusters = 0;
5543 Float_t jetPt = jet->Pt();
5545 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
5546 if(fh1Mult) fh1Mult->Fill(tracklistClustersOutLeading->GetSize());
5548 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
5550 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
5551 if(!trackVP) continue;
5552 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5554 Float_t trackPt = trackVP->Pt();
5556 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5558 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
5559 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5564 delete tracklistClustersOutLeading;
5568 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
5570 TList* tracklistClustersMedian = new TList();
5571 Double_t normFactorClusters = 0;
5572 Float_t jetPt = jet->Pt();
5574 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
5575 if(fh1Mult) fh1Mult->Fill(tracklistClustersMedian->GetSize());
5577 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
5579 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
5580 if(!trackVP) continue;
5581 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5583 Float_t trackPt = trackVP->Pt();
5585 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5587 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
5588 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5593 delete tracklistClustersMedian;
5596 delete tracklistout2jets;
5597 delete tracklistout3jets;
5598 delete tracklistout2jetsStat;
5599 delete tracklistout3jetsStat;
5602 //_____________________________________________________________________________________
5603 Double_t AliAnalysisTaskIDFragmentationFunction::GetMCStrangenessFactor(Double_t pt) const
5605 // factor strangeness data/MC as function of pt from UE analysis (Sara Vallero)
5609 if(0.150<pt && pt<0.200) alpha = 3.639;
5610 if(0.200<pt && pt<0.250) alpha = 2.097;
5611 if(0.250<pt && pt<0.300) alpha = 1.930;
5612 if(0.300<pt && pt<0.350) alpha = 1.932;
5613 if(0.350<pt && pt<0.400) alpha = 1.943;
5614 if(0.400<pt && pt<0.450) alpha = 1.993;
5615 if(0.450<pt && pt<0.500) alpha = 1.989;
5616 if(0.500<pt && pt<0.600) alpha = 1.963;
5617 if(0.600<pt && pt<0.700) alpha = 1.917;
5618 if(0.700<pt && pt<0.800) alpha = 1.861;
5619 if(0.800<pt && pt<0.900) alpha = 1.820;
5620 if(0.900<pt && pt<1.000) alpha = 1.741;
5621 if(1.000<pt && pt<1.500) alpha = 0.878;
5626 //__________________________________________________________________________________________________
5627 Double_t AliAnalysisTaskIDFragmentationFunction::GetMCStrangenessFactorCMS(AliAODMCParticle* daughter) const
5629 // strangeness ratio MC/data as function of mother pt from CMS data in |eta|<2.0
5631 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5634 AliAODMCParticle* currentMother = daughter;
5635 AliAODMCParticle* currentDaughter = daughter;
5638 // find first primary mother K0s, Lambda or Xi
5641 Int_t daughterPDG = currentDaughter->GetPdgCode();
5643 Int_t motherLabel = currentDaughter->GetMother();
5644 if(motherLabel >= tca->GetEntriesFast()){ // protection
5645 currentMother = currentDaughter;
5649 currentMother = (AliAODMCParticle*) tca->At(motherLabel);
5652 currentMother = currentDaughter;
5656 Int_t motherPDG = currentMother->GetPdgCode();
5658 // phys. primary found ?
5659 if(currentMother->IsPhysicalPrimary()) break;
5661 if(TMath::Abs(daughterPDG) == 321){ // K+/K- e.g. from phi (ref data not feeddown corrected)
5662 currentMother = currentDaughter; break;
5664 if(TMath::Abs(motherPDG) == 310 ){ // K0s e.g. from phi (ref data not feeddown corrected)
5667 if(TMath::Abs(motherPDG) == 3212 && TMath::Abs(daughterPDG) == 3122){ // mother Sigma0, daughter Lambda (this case not included in feeddown corr.)
5668 currentMother = currentDaughter; break;
5671 currentDaughter = currentMother;
5675 Int_t motherPDG = currentMother->GetPdgCode();
5676 Double_t motherGenPt = currentMother->Pt();
5678 return AliAnalysisTaskPID::GetMCStrangenessFactorCMS(motherPDG, motherGenPt);
5681 // _________________________________________________________________________________
5682 void AliAnalysisTaskIDFragmentationFunction::FillJetShape(AliAODJet* jet, TList* list,
5683 TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt,
5684 Double_t dPhiUE, Double_t normUE, Bool_t scaleStrangeness)
5686 // Fill jet shape histos
5688 const Int_t kNbinsR = 50;
5689 const Float_t kBinWidthR = 0.02;
5691 Int_t nJetTracks = list->GetEntries();
5693 Float_t pTsumA[kNbinsR] = {0.0};
5695 Float_t *delRA = new Float_t[nJetTracks];
5696 Float_t *trackPtA = new Float_t[nJetTracks];
5697 Int_t *index = new Int_t[nJetTracks];
5699 for(Int_t i=0; i<nJetTracks; i++){
5706 jet->PxPyPz(jetMom);
5707 TVector3 jet3mom(jetMom);
5709 if(TMath::Abs(dPhiUE)>0){
5710 Double_t phiTilted = jet3mom.Phi();
5711 phiTilted += dPhiUE;
5712 phiTilted = TVector2::Phi_0_2pi(phiTilted);
5713 jet3mom.SetPhi(phiTilted);
5716 Double_t jetPt = jet->Pt();
5717 Double_t sumWeights = 0;
5719 for (Int_t j =0; j<nJetTracks; j++){
5721 AliVParticle* track = dynamic_cast<AliVParticle*>(list->At(j));
5724 Double_t trackMom[3];
5725 track->PxPyPz(trackMom);
5726 TVector3 track3mom(trackMom);
5728 Double_t dR = jet3mom.DeltaR(track3mom);
5731 trackPtA[j] = track->Pt();
5733 Double_t weight = GetMCStrangenessFactor(track->Pt()); // more correctly should be gen pt
5734 sumWeights += weight;
5736 for(Int_t ibin=1; ibin<=kNbinsR; ibin++){
5737 Float_t xlow = kBinWidthR*(ibin-1);
5738 Float_t xup = kBinWidthR*ibin;
5739 if(xlow <= dR && dR < xup){
5741 if(scaleStrangeness) pTsumA[ibin-1] += track->Pt()*weight;
5742 else pTsumA[ibin-1] += track->Pt();
5750 for(Int_t ibin=0; ibin<kNbinsR; ibin++){
5751 Float_t fR = kBinWidthR*(ibin+0.5);
5753 for(Int_t k=0; k<5; k++){
5754 if(k==0){jetPtMin=20.0;jetPtMax=30.0;}
5755 if(k==1){jetPtMin=30.0;jetPtMax=40.0;}
5756 if(k==2){jetPtMin=40.0;jetPtMax=60.0;}
5757 if(k==3){jetPtMin=60.0;jetPtMax=80.0;}
5758 if(k==4){jetPtMin=80.0;jetPtMax=100.0;}
5759 if(jetPt>jetPtMin && jetPt<jetPtMax){
5761 hProDelRPtSum[k]->Fill(fR,pTsumA[ibin]);
5767 if(scaleStrangeness) hProNtracksLeadingJet->Fill(jetPt,sumWeights);
5768 else hProNtracksLeadingJet->Fill(jetPt,nJetTracks);
5770 if(normUE) hProNtracksLeadingJet->Fill(jetPt,nJetTracks/normUE);
5775 Float_t delRPtSum80pc = 0;
5777 TMath::Sort(nJetTracks,delRA,index,0);
5779 for(Int_t ii=0; ii<nJetTracks; ii++){
5781 if(scaleStrangeness){
5782 Double_t weight = GetMCStrangenessFactor(trackPtA[index[ii]]); // more correctly should be gen pt
5783 pTsum += weight*trackPtA[index[ii]];
5785 else pTsum += trackPtA[index[ii]];
5788 if(pTsum/jetPt >= 0.8000){
5789 delRPtSum80pc = delRA[index[ii]];
5793 hProDelR80pcPt->Fill(jetPt,delRPtSum80pc);
5802 // _________________________________________________________________________________
5803 Bool_t AliAnalysisTaskIDFragmentationFunction::IsSecondaryWithStrangeMotherMC(AliAODMCParticle* part)
5805 // Check whether particle is a secondary with strange mother, i.e. returns kTRUE if a strange mother is found
5806 // and the particle is NOT a physical primary. In all other cases kFALSE is returned
5808 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5812 if (part->IsPhysicalPrimary())
5815 Int_t iMother = part->GetMother();
5820 AliAODMCParticle* partM = dynamic_cast<AliAODMCParticle*>(tca->At(iMother));
5824 Int_t codeM = TMath::Abs(partM->GetPdgCode());
5825 Int_t mfl = Int_t(codeM / TMath::Power(10, Int_t(TMath::Log10(codeM))));
5826 if (mfl == 3 && codeM != 3) // codeM = 3 is for s quark