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 "AliAnalysisUtils.h"
51 #include "AliVParticle.h"
52 #include "AliVEvent.h"
54 #include "AliAnalysisTaskPID.h"
55 #include "AliPIDResponse.h"
57 #include "AliAnalysisTaskIDFragmentationFunction.h"
62 ClassImp(AliAnalysisTaskIDFragmentationFunction)
64 //____________________________________________________________________________
65 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction()
72 ,fBranchRecJets("jets")
73 ,fBranchRecBckgClusters("")
75 ,fBranchEmbeddedJets("")
79 ,fUseAODInputJets(kTRUE)
81 ,fUsePhysicsSelection(kTRUE)
91 ,fUseExtraTracksBgr(0)
92 ,fCutFractionPtEmbedded(0)
93 ,fUseEmbeddedJetAxis(0)
113 ,fTracksRecCutsEfficiency(0)
115 ,fTracksAODMCCharged(0)
116 ,fTracksAODMCChargedSecNS(0)
117 ,fTracksAODMCChargedSecS(0)
118 ,fTracksRecQualityCuts(0)
127 ,fQATrackHistosRecCuts(0)
128 ,fQATrackHistosGen(0)
130 ,fQAJetHistosRecCuts(0)
131 ,fQAJetHistosRecCutsLeading(0)
133 ,fQAJetHistosGenLeading(0)
134 ,fQAJetHistosRecEffLeading(0)
136 ,fFFHistosRecCutsInc(0)
137 ,fFFHistosRecLeadingTrack(0)
140 ,fFFHistosGenLeadingTrack(0)
141 ,fQATrackHighPtThreshold(0)
175 ,fh1VertexNContributors(0)
187 ,fh1nRecBckgJetsCuts(0)
189 ,fh2PtRecVsGenPrim(0)
193 ,fhJetPtRefMultEta5(0)
194 ,fhJetPtRefMultEta8(0)
195 ,fhJetPtMultPercent(0)
196 ,fQATrackHistosRecEffGen(0)
197 ,fQATrackHistosRecEffRec(0)
198 ,fQATrackHistosSecRecNS(0)
199 ,fQATrackHistosSecRecS(0)
200 ,fQATrackHistosSecRecSsc(0)
201 ,fFFHistosRecEffRec(0)
202 ,fFFHistosSecRecNS(0)
204 ,fFFHistosSecRecSsc(0)
211 ,fh1FractionPtEmbedded(0)
213 ,fh2DeltaPtVsJetPtEmbedded(0)
214 ,fh2DeltaPtVsRecJetPtEmbedded(0)
215 ,fh1DeltaREmbedded(0)
216 ,fQABckgHisto0RecCuts(0)
218 ,fQABckgHisto1RecCuts(0)
220 ,fQABckgHisto2RecCuts(0)
222 ,fQABckgHisto3RecCuts(0)
224 ,fQABckgHisto4RecCuts(0)
226 ,fFFBckgHisto0RecCuts(0)
228 ,fFFBckgHisto1RecCuts(0)
230 ,fFFBckgHisto2RecCuts(0)
232 ,fFFBckgHisto3RecCuts(0)
234 ,fFFBckgHisto4RecCuts(0)
236 ,fFFBckgHisto0RecEffRec(0)
237 ,fFFBckgHisto0SecRecNS(0)
238 ,fFFBckgHisto0SecRecS(0)
239 ,fFFBckgHisto0SecRecSsc(0)
241 ,fProNtracksLeadingJet(0)
243 ,fProNtracksLeadingJetGen(0)
244 ,fProDelR80pcPtGen(0)
245 ,fProNtracksLeadingJetBgrPerp2(0)
246 ,fProNtracksLeadingJetRecPrim(0)
247 ,fProDelR80pcPtRecPrim(0)
248 ,fProNtracksLeadingJetRecSecNS(0)
249 ,fProNtracksLeadingJetRecSecS(0)
250 ,fProNtracksLeadingJetRecSecSsc(0)
254 ,fOnlyLeadingJets(kFALSE)
259 ,fNumInclusivePIDtasks(0)
261 ,fNameInclusivePIDtask(0x0)
262 ,fNameJetPIDtask(0x0)
263 ,fInclusivePIDtask(0x0)
265 ,fUseInclusivePIDtask(kFALSE)
266 ,fUseJetPIDtask(kFALSE)
269 // default constructor
276 for(Int_t ii=0; ii<5; ii++){
277 fProDelRPtSum[ii] = 0;
278 fProDelRPtSumGen[ii] = 0;
279 fProDelRPtSumBgrPerp2[ii] = 0;
280 fProDelRPtSumRecPrim[ii] = 0;
281 fProDelRPtSumRecSecNS[ii] = 0;
282 fProDelRPtSumRecSecS[ii] = 0;
283 fProDelRPtSumRecSecSsc[ii] = 0;
286 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
287 fIDFFHistosRecCuts[i] = 0x0;
288 fIDFFHistosGen[i] = 0x0;
290 fhDCA_XY_prim_MCID[i] = 0x0;
291 fhDCA_Z_prim_MCID[i] = 0x0;
293 fhDCA_XY_sec_MCID[i] = 0x0;
294 fhDCA_Z_sec_MCID[i] = 0x0;
298 //_______________________________________________________________________________________________
299 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction(const char *name)
300 : AliAnalysisTaskSE(name)
306 ,fBranchRecJets("jets")
307 ,fBranchRecBckgClusters("")
309 ,fBranchEmbeddedJets("")
313 ,fUseAODInputJets(kTRUE)
315 ,fUsePhysicsSelection(kTRUE)
316 ,fEvtSelectionMask(0)
325 ,fUseExtraTracksBgr(0)
326 ,fCutFractionPtEmbedded(0)
327 ,fUseEmbeddedJetAxis(0)
328 ,fUseEmbeddedJetPt(0)
347 ,fTracksRecCutsEfficiency(0)
349 ,fTracksAODMCCharged(0)
350 ,fTracksAODMCChargedSecNS(0)
351 ,fTracksAODMCChargedSecS(0)
352 ,fTracksRecQualityCuts(0)
361 ,fQATrackHistosRecCuts(0)
362 ,fQATrackHistosGen(0)
364 ,fQAJetHistosRecCuts(0)
365 ,fQAJetHistosRecCutsLeading(0)
367 ,fQAJetHistosGenLeading(0)
368 ,fQAJetHistosRecEffLeading(0)
370 ,fFFHistosRecCutsInc(0)
371 ,fFFHistosRecLeadingTrack(0)
374 ,fFFHistosGenLeadingTrack(0)
375 ,fQATrackHighPtThreshold(0)
409 ,fh1VertexNContributors(0)
421 ,fh1nRecBckgJetsCuts(0)
423 ,fh2PtRecVsGenPrim(0)
427 ,fhJetPtRefMultEta5(0)
428 ,fhJetPtRefMultEta8(0)
429 ,fhJetPtMultPercent(0)
430 ,fQATrackHistosRecEffGen(0)
431 ,fQATrackHistosRecEffRec(0)
432 ,fQATrackHistosSecRecNS(0)
433 ,fQATrackHistosSecRecS(0)
434 ,fQATrackHistosSecRecSsc(0)
435 ,fFFHistosRecEffRec(0)
436 ,fFFHistosSecRecNS(0)
438 ,fFFHistosSecRecSsc(0)
445 ,fh1FractionPtEmbedded(0)
447 ,fh2DeltaPtVsJetPtEmbedded(0)
448 ,fh2DeltaPtVsRecJetPtEmbedded(0)
449 ,fh1DeltaREmbedded(0)
450 ,fQABckgHisto0RecCuts(0)
452 ,fQABckgHisto1RecCuts(0)
454 ,fQABckgHisto2RecCuts(0)
456 ,fQABckgHisto3RecCuts(0)
458 ,fQABckgHisto4RecCuts(0)
460 ,fFFBckgHisto0RecCuts(0)
462 ,fFFBckgHisto1RecCuts(0)
464 ,fFFBckgHisto2RecCuts(0)
466 ,fFFBckgHisto3RecCuts(0)
468 ,fFFBckgHisto4RecCuts(0)
470 ,fFFBckgHisto0RecEffRec(0)
471 ,fFFBckgHisto0SecRecNS(0)
472 ,fFFBckgHisto0SecRecS(0)
473 ,fFFBckgHisto0SecRecSsc(0)
475 ,fProNtracksLeadingJet(0)
477 ,fProNtracksLeadingJetGen(0)
478 ,fProDelR80pcPtGen(0)
479 ,fProNtracksLeadingJetBgrPerp2(0)
480 ,fProNtracksLeadingJetRecPrim(0)
481 ,fProDelR80pcPtRecPrim(0)
482 ,fProNtracksLeadingJetRecSecNS(0)
483 ,fProNtracksLeadingJetRecSecS(0)
484 ,fProNtracksLeadingJetRecSecSsc(0)
486 ,fOnlyLeadingJets(kFALSE)
489 ,fNumInclusivePIDtasks(0)
491 ,fNameInclusivePIDtask(0x0)
492 ,fNameJetPIDtask(0x0)
493 ,fInclusivePIDtask(0x0)
495 ,fUseInclusivePIDtask(kFALSE)
496 ,fUseJetPIDtask(kFALSE)
506 for(Int_t ii=0; ii<5; ii++){
507 fProDelRPtSum[ii] = 0;
508 fProDelRPtSumGen[ii] = 0;
509 fProDelRPtSumBgrPerp2[ii] = 0;
510 fProDelRPtSumRecPrim[ii] = 0;
511 fProDelRPtSumRecSecNS[ii] = 0;
512 fProDelRPtSumRecSecS[ii] = 0;
513 fProDelRPtSumRecSecSsc[ii] = 0;
516 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
517 fIDFFHistosRecCuts[i] = 0x0;
518 fIDFFHistosGen[i] = 0x0;
520 fhDCA_XY_prim_MCID[i] = 0x0;
521 fhDCA_Z_prim_MCID[i] = 0x0;
523 fhDCA_XY_sec_MCID[i] = 0x0;
524 fhDCA_Z_sec_MCID[i] = 0x0;
527 DefineOutput(1,TList::Class());
530 //__________________________________________________________________________________________________________________________
531 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction(const AliAnalysisTaskIDFragmentationFunction ©)
532 : AliAnalysisTaskSE()
535 ,fAODJets(copy.fAODJets)
536 ,fAODExtension(copy.fAODExtension)
537 ,fNonStdFile(copy.fNonStdFile)
538 ,fBranchRecJets(copy.fBranchRecJets)
539 ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
540 ,fBranchGenJets(copy.fBranchGenJets)
541 ,fBranchEmbeddedJets(copy.fBranchEmbeddedJets)
542 ,fTrackTypeGen(copy.fTrackTypeGen)
543 ,fJetTypeGen(copy.fJetTypeGen)
544 ,fJetTypeRecEff(copy.fJetTypeRecEff)
545 ,fUseAODInputJets(copy.fUseAODInputJets)
546 ,fFilterMask(copy.fFilterMask)
547 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
548 ,fEvtSelectionMask(copy.fEvtSelectionMask)
549 ,fEventClass(copy.fEventClass)
550 ,fMaxVertexZ(copy.fMaxVertexZ)
551 ,fTrackPtCut(copy.fTrackPtCut)
552 ,fTrackEtaMin(copy.fTrackEtaMin)
553 ,fTrackEtaMax(copy.fTrackEtaMax)
554 ,fTrackPhiMin(copy.fTrackPhiMin)
555 ,fTrackPhiMax(copy.fTrackPhiMax)
556 ,fUseExtraTracks(copy.fUseExtraTracks)
557 ,fUseExtraTracksBgr(copy.fUseExtraTracksBgr)
558 ,fCutFractionPtEmbedded(copy.fCutFractionPtEmbedded)
559 ,fUseEmbeddedJetAxis(copy.fUseEmbeddedJetAxis)
560 ,fUseEmbeddedJetPt(copy.fUseEmbeddedJetPt)
561 ,fJetPtCut(copy.fJetPtCut)
562 ,fJetEtaMin(copy.fJetEtaMin)
563 ,fJetEtaMax(copy.fJetEtaMax)
564 ,fJetPhiMin(copy.fJetPhiMin)
565 ,fJetPhiMax(copy.fJetPhiMax)
566 ,fFFRadius(copy.fFFRadius)
567 ,fFFMinLTrackPt(copy.fFFMinLTrackPt)
568 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
569 ,fFFMinnTracks(copy.fFFMinnTracks)
570 ,fFFBckgRadius(copy.fFFBckgRadius)
571 ,fBckgMode(copy.fBckgMode)
572 ,fQAMode(copy.fQAMode)
573 ,fFFMode(copy.fFFMode)
574 ,fIDFFMode(copy.fIDFFMode)
575 ,fEffMode(copy.fEffMode)
576 ,fJSMode(copy.fJSMode)
577 ,fAvgTrials(copy.fAvgTrials)
578 ,fTracksRecCuts(copy.fTracksRecCuts)
579 ,fTracksRecCutsEfficiency(copy.fTracksRecCutsEfficiency)
580 ,fTracksGen(copy.fTracksGen)
581 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
582 ,fTracksAODMCChargedSecNS(copy.fTracksAODMCChargedSecNS)
583 ,fTracksAODMCChargedSecS(copy.fTracksAODMCChargedSecS)
584 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
585 ,fJetsRec(copy.fJetsRec)
586 ,fJetsRecCuts(copy.fJetsRecCuts)
587 ,fJetsGen(copy.fJetsGen)
588 ,fJetsRecEff(copy.fJetsRecEff)
589 ,fJetsEmbedded(copy.fJetsEmbedded)
590 ,fBckgJetsRec(copy.fBckgJetsRec)
591 ,fBckgJetsRecCuts(copy.fBckgJetsRecCuts)
592 ,fBckgJetsGen(copy.fBckgJetsGen)
593 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
594 ,fQATrackHistosGen(copy.fQATrackHistosGen)
595 ,fQAJetHistosRec(copy.fQAJetHistosRec)
596 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
597 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
598 ,fQAJetHistosGen(copy.fQAJetHistosGen)
599 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
600 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
601 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
602 ,fFFHistosRecCutsInc(copy.fFFHistosRecCutsInc)
603 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
604 ,fFFHistosGen(copy.fFFHistosGen)
605 ,fFFHistosGenInc(copy.fFFHistosGenInc)
606 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
607 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
608 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
609 ,fFFJetPtMin(copy.fFFJetPtMin)
610 ,fFFJetPtMax(copy.fFFJetPtMax)
611 ,fFFNBinsPt(copy.fFFNBinsPt)
612 ,fFFPtMin(copy.fFFPtMin)
613 ,fFFPtMax(copy.fFFPtMax)
614 ,fFFNBinsXi(copy.fFFNBinsXi)
615 ,fFFXiMin(copy.fFFXiMin)
616 ,fFFXiMax(copy.fFFXiMax)
617 ,fFFNBinsZ(copy.fFFNBinsZ)
618 ,fFFZMin(copy.fFFZMin)
619 ,fFFZMax(copy.fFFZMax)
620 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
621 ,fQAJetPtMin(copy.fQAJetPtMin)
622 ,fQAJetPtMax(copy.fQAJetPtMax)
623 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
624 ,fQAJetEtaMin(copy.fQAJetEtaMin)
625 ,fQAJetEtaMax(copy.fQAJetEtaMax)
626 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
627 ,fQAJetPhiMin(copy.fQAJetPhiMin)
628 ,fQAJetPhiMax(copy.fQAJetPhiMax)
629 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
630 ,fQATrackPtMin(copy.fQATrackPtMin)
631 ,fQATrackPtMax(copy.fQATrackPtMax)
632 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
633 ,fQATrackEtaMin(copy.fQATrackEtaMin)
634 ,fQATrackEtaMax(copy.fQATrackEtaMax)
635 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
636 ,fQATrackPhiMin(copy.fQATrackPhiMin)
637 ,fQATrackPhiMax(copy.fQATrackPhiMax)
638 ,fCommonHistList(copy.fCommonHistList)
639 ,fh1EvtSelection(copy.fh1EvtSelection)
640 ,fh1VtxSelection(copy.fh1VtxSelection)
641 ,fh1VertexNContributors(copy.fh1VertexNContributors)
642 ,fh1VertexZ(copy.fh1VertexZ)
643 ,fh1EvtMult(copy.fh1EvtMult)
644 ,fh1EvtCent(copy.fh1EvtCent)
645 ,fh1Xsec(copy.fh1Xsec)
646 ,fh1Trials(copy.fh1Trials)
647 ,fh1PtHard(copy.fh1PtHard)
648 ,fh1PtHardTrials(copy.fh1PtHardTrials)
649 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
650 ,fh1nGenJets(copy.fh1nGenJets)
651 ,fh1nRecEffJets(copy.fh1nRecEffJets)
652 ,fh1nEmbeddedJets(copy.fh1nEmbeddedJets)
653 ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts)
654 ,fh1nGenBckgJets(copy.fh1nGenBckgJets)
655 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
656 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
657 ,fhDCA_XY(copy.fhDCA_XY)
658 ,fhDCA_Z(copy.fhDCA_Z)
659 ,fhJetPtRefMultEta5(copy.fhJetPtRefMultEta5)
660 ,fhJetPtRefMultEta8(copy.fhJetPtRefMultEta8)
661 ,fhJetPtMultPercent(copy.fhJetPtMultPercent)
662 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
663 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
664 ,fQATrackHistosSecRecNS(copy.fQATrackHistosSecRecNS)
665 ,fQATrackHistosSecRecS(copy.fQATrackHistosSecRecS)
666 ,fQATrackHistosSecRecSsc(copy.fQATrackHistosSecRecSsc)
667 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
668 ,fFFHistosSecRecNS(copy.fFFHistosSecRecNS)
669 ,fFFHistosSecRecS(copy.fFFHistosSecRecS)
670 ,fFFHistosSecRecSsc(copy.fFFHistosSecRecSsc)
672 ,fh1BckgMult0(copy.fh1BckgMult0)
673 ,fh1BckgMult1(copy.fh1BckgMult1)
674 ,fh1BckgMult2(copy.fh1BckgMult2)
675 ,fh1BckgMult3(copy.fh1BckgMult3)
676 ,fh1BckgMult4(copy.fh1BckgMult4)
677 ,fh1FractionPtEmbedded(copy.fh1FractionPtEmbedded)
678 ,fh1IndexEmbedded(copy.fh1IndexEmbedded)
679 ,fh2DeltaPtVsJetPtEmbedded(copy.fh2DeltaPtVsJetPtEmbedded)
680 ,fh2DeltaPtVsRecJetPtEmbedded(copy.fh2DeltaPtVsRecJetPtEmbedded)
681 ,fh1DeltaREmbedded(copy.fh1DeltaREmbedded)
682 ,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
683 ,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
684 ,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
685 ,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
686 ,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
687 ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
688 ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
689 ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
690 ,fQABckgHisto4RecCuts(copy.fQABckgHisto4RecCuts)
691 ,fQABckgHisto4Gen(copy.fQABckgHisto4Gen)
692 ,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
693 ,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
694 ,fFFBckgHisto1RecCuts(copy.fFFBckgHisto1RecCuts)
695 ,fFFBckgHisto1Gen(copy.fFFBckgHisto1Gen)
696 ,fFFBckgHisto2RecCuts(copy.fFFBckgHisto2RecCuts)
697 ,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
698 ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
699 ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
700 ,fFFBckgHisto4RecCuts(copy.fFFBckgHisto4RecCuts)
701 ,fFFBckgHisto4Gen(copy.fFFBckgHisto4Gen)
702 ,fFFBckgHisto0RecEffRec(copy.fFFBckgHisto0RecEffRec)
703 ,fFFBckgHisto0SecRecNS(copy.fFFBckgHisto0SecRecNS)
704 ,fFFBckgHisto0SecRecS(copy.fFFBckgHisto0SecRecS)
705 ,fFFBckgHisto0SecRecSsc(copy.fFFBckgHisto0SecRecSsc)
707 ,fProNtracksLeadingJet(copy.fProNtracksLeadingJet)
708 ,fProDelR80pcPt(copy.fProDelR80pcPt)
709 ,fProNtracksLeadingJetGen(copy.fProNtracksLeadingJetGen)
710 ,fProDelR80pcPtGen(copy.fProDelR80pcPtGen)
711 ,fProNtracksLeadingJetBgrPerp2(copy.fProNtracksLeadingJetBgrPerp2)
712 ,fProNtracksLeadingJetRecPrim(copy.fProNtracksLeadingJetRecPrim)
713 ,fProDelR80pcPtRecPrim(copy.fProDelR80pcPtRecPrim)
714 ,fProNtracksLeadingJetRecSecNS(copy.fProNtracksLeadingJetRecSecNS)
715 ,fProNtracksLeadingJetRecSecS(copy.fProNtracksLeadingJetRecSecS)
716 ,fProNtracksLeadingJetRecSecSsc(copy.fProNtracksLeadingJetRecSecSsc)
717 ,fRandom(copy.fRandom)
718 ,fOnlyLeadingJets(copy.fOnlyLeadingJets)
719 ,fAnaUtils(copy.fAnaUtils)
721 ,fNumInclusivePIDtasks(copy.fNumInclusivePIDtasks)
722 ,fNumJetPIDtasks(copy.fNumJetPIDtasks)
723 ,fNameInclusivePIDtask(0x0)
724 ,fNameJetPIDtask(0x0)
725 ,fInclusivePIDtask(0x0)
727 ,fUseInclusivePIDtask(copy.fUseInclusivePIDtask)
728 ,fUseJetPIDtask(copy.fUseJetPIDtask)
732 fBckgType[0] = copy.fBckgType[0];
733 fBckgType[1] = copy.fBckgType[1];
734 fBckgType[2] = copy.fBckgType[2];
735 fBckgType[3] = copy.fBckgType[3];
736 fBckgType[4] = copy.fBckgType[4];
739 for(Int_t ii=0; ii<5; ii++){
740 fProDelRPtSum[ii] = copy.fProDelRPtSum[ii];
741 fProDelRPtSumGen[ii] = copy.fProDelRPtSumGen[ii];
742 fProDelRPtSumBgrPerp2[ii] = copy.fProDelRPtSumBgrPerp2[ii];
743 fProDelRPtSumRecPrim[ii] = copy.fProDelRPtSumRecPrim[ii];
744 fProDelRPtSumRecSecNS[ii] = copy.fProDelRPtSumRecSecNS[ii];
745 fProDelRPtSumRecSecS[ii] = copy.fProDelRPtSumRecSecS[ii];
746 fProDelRPtSumRecSecSsc[ii] = copy.fProDelRPtSumRecSecSsc[ii];
749 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
750 fIDFFHistosRecCuts[i] = 0x0;
751 if (copy.fIDFFHistosRecCuts[i])
752 fIDFFHistosRecCuts[i] = copy.fIDFFHistosRecCuts[i];
754 fIDFFHistosGen[i] = 0x0;
755 if (copy.fIDFFHistosGen[i])
756 fIDFFHistosGen[i] = copy.fIDFFHistosGen[i];
759 fhDCA_XY_prim_MCID[i] = 0x0;
760 if (copy.fhDCA_XY_prim_MCID[i])
761 fhDCA_XY_prim_MCID[i] = copy.fhDCA_XY_prim_MCID[i];
763 fhDCA_Z_prim_MCID[i] = 0x0;
764 if (copy.fhDCA_Z_prim_MCID[i])
765 fhDCA_Z_prim_MCID[i] = copy.fhDCA_Z_prim_MCID[i];
767 fhDCA_XY_sec_MCID[i] = 0x0;
768 if (copy.fhDCA_XY_sec_MCID[i])
769 fhDCA_XY_sec_MCID[i] = copy.fhDCA_XY_sec_MCID[i];
771 fhDCA_Z_sec_MCID[i] = 0x0;
772 if (copy.fhDCA_Z_sec_MCID[i])
773 fhDCA_Z_sec_MCID[i] = copy.fhDCA_Z_sec_MCID[i];
776 if (fNumInclusivePIDtasks > 0) {
777 fNameInclusivePIDtask = new TString[fNumInclusivePIDtasks];
778 fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
780 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
781 fNameInclusivePIDtask[i] = "";
782 fInclusivePIDtask[i] = 0x0;
784 if (copy.fNameInclusivePIDtask[i])
785 fNameInclusivePIDtask[i] = copy.fNameInclusivePIDtask[i];
787 if (copy.fInclusivePIDtask[i])
788 fInclusivePIDtask[i] = copy.fInclusivePIDtask[i];
792 if (fNumJetPIDtasks > 0) {
793 fNameJetPIDtask = new TString[fNumJetPIDtasks];
794 fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
796 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
797 fNameJetPIDtask[i] = "";
798 fJetPIDtask[i] = 0x0;
800 if (copy.fNameJetPIDtask[i])
801 fNameJetPIDtask[i] = copy.fNameJetPIDtask[i];
803 if (copy.fJetPIDtask[i])
804 fJetPIDtask[i] = copy.fJetPIDtask[i];
809 // _________________________________________________________________________________________________________________________________
810 AliAnalysisTaskIDFragmentationFunction& AliAnalysisTaskIDFragmentationFunction::operator=(const AliAnalysisTaskIDFragmentationFunction& o)
816 AliAnalysisTaskSE::operator=(o);
819 fAODJets = o.fAODJets;
820 fAODExtension = o.fAODExtension;
821 fNonStdFile = o.fNonStdFile;
822 fBranchRecJets = o.fBranchRecJets;
823 fBranchRecBckgClusters = o.fBranchRecBckgClusters;
824 fBranchGenJets = o.fBranchGenJets;
825 fBranchEmbeddedJets = o.fBranchEmbeddedJets;
826 fTrackTypeGen = o.fTrackTypeGen;
827 fJetTypeGen = o.fJetTypeGen;
828 fJetTypeRecEff = o.fJetTypeRecEff;
829 fUseAODInputJets = o.fUseAODInputJets;
830 fFilterMask = o.fFilterMask;
831 fUsePhysicsSelection = o.fUsePhysicsSelection;
832 fEvtSelectionMask = o.fEvtSelectionMask;
833 fEventClass = o.fEventClass;
834 fMaxVertexZ = o.fMaxVertexZ;
835 fTrackPtCut = o.fTrackPtCut;
836 fTrackEtaMin = o.fTrackEtaMin;
837 fTrackEtaMax = o.fTrackEtaMax;
838 fTrackPhiMin = o.fTrackPhiMin;
839 fTrackPhiMax = o.fTrackPhiMax;
840 fUseExtraTracks = o.fUseExtraTracks;
841 fUseExtraTracksBgr = o.fUseExtraTracksBgr;
842 fCutFractionPtEmbedded = o.fCutFractionPtEmbedded;
843 fUseEmbeddedJetAxis = o.fUseEmbeddedJetAxis;
844 fUseEmbeddedJetPt = o.fUseEmbeddedJetPt;
845 fJetPtCut = o.fJetPtCut;
846 fJetEtaMin = o.fJetEtaMin;
847 fJetEtaMax = o.fJetEtaMax;
848 fJetPhiMin = o.fJetPhiMin;
849 fJetPhiMax = o.fJetPhiMin;
850 fFFRadius = o.fFFRadius;
851 fFFMinLTrackPt = o.fFFMinLTrackPt;
852 fFFMaxTrackPt = o.fFFMaxTrackPt;
853 fFFMinnTracks = o.fFFMinnTracks;
854 fFFBckgRadius = o.fFFBckgRadius;
855 fBckgMode = o.fBckgMode;
858 fIDFFMode = o.fIDFFMode;
859 fEffMode = o.fEffMode;
861 fBckgType[0] = o.fBckgType[0];
862 fBckgType[1] = o.fBckgType[1];
863 fBckgType[2] = o.fBckgType[2];
864 fBckgType[3] = o.fBckgType[3];
865 fBckgType[4] = o.fBckgType[4];
866 fAvgTrials = o.fAvgTrials;
867 fTracksRecCuts = o.fTracksRecCuts;
868 fTracksRecCutsEfficiency = o.fTracksRecCutsEfficiency;
869 fTracksGen = o.fTracksGen;
870 fTracksAODMCCharged = o.fTracksAODMCCharged;
871 fTracksAODMCChargedSecNS = o.fTracksAODMCChargedSecNS;
872 fTracksAODMCChargedSecS = o.fTracksAODMCChargedSecS;
873 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
874 fJetsRec = o.fJetsRec;
875 fJetsRecCuts = o.fJetsRecCuts;
876 fJetsGen = o.fJetsGen;
877 fJetsRecEff = o.fJetsRecEff;
878 fJetsEmbedded = o.fJetsEmbedded;
879 fBckgJetsRec = o.fBckgJetsRec;
880 fBckgJetsRecCuts = o.fBckgJetsRecCuts;
881 fBckgJetsGen = o.fBckgJetsGen;
882 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
883 fQATrackHistosGen = o.fQATrackHistosGen;
884 fQAJetHistosRec = o.fQAJetHistosRec;
885 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
886 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
887 fQAJetHistosGen = o.fQAJetHistosGen;
888 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
889 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
890 fFFHistosRecCuts = o.fFFHistosRecCuts;
891 fFFHistosRecCutsInc = o.fFFHistosRecCutsInc;
892 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
893 fFFHistosGen = o.fFFHistosGen;
894 fFFHistosGenInc = o.fFFHistosGenInc;
895 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
896 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
897 fFFNBinsJetPt = o.fFFNBinsJetPt;
898 fFFJetPtMin = o.fFFJetPtMin;
899 fFFJetPtMax = o.fFFJetPtMax;
900 fFFNBinsPt = o.fFFNBinsPt;
901 fFFPtMin = o.fFFPtMin;
902 fFFPtMax = o.fFFPtMax;
903 fFFNBinsXi = o.fFFNBinsXi;
904 fFFXiMin = o.fFFXiMin;
905 fFFXiMax = o.fFFXiMax;
906 fFFNBinsZ = o.fFFNBinsZ;
909 fQAJetNBinsPt = o.fQAJetNBinsPt;
910 fQAJetPtMin = o.fQAJetPtMin;
911 fQAJetPtMax = o.fQAJetPtMax;
912 fQAJetNBinsEta = o.fQAJetNBinsEta;
913 fQAJetEtaMin = o.fQAJetEtaMin;
914 fQAJetEtaMax = o.fQAJetEtaMax;
915 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
916 fQAJetPhiMin = o.fQAJetPhiMin;
917 fQAJetPhiMax = o.fQAJetPhiMax;
918 fQATrackNBinsPt = o.fQATrackNBinsPt;
919 fQATrackPtMin = o.fQATrackPtMin;
920 fQATrackPtMax = o.fQATrackPtMax;
921 fQATrackNBinsEta = o.fQATrackNBinsEta;
922 fQATrackEtaMin = o.fQATrackEtaMin;
923 fQATrackEtaMax = o.fQATrackEtaMax;
924 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
925 fQATrackPhiMin = o.fQATrackPhiMin;
926 fQATrackPhiMax = o.fQATrackPhiMax;
927 fCommonHistList = o.fCommonHistList;
928 fh1EvtSelection = o.fh1EvtSelection;
929 fh1VtxSelection = o.fh1VtxSelection;
930 fh1VertexNContributors = o.fh1VertexNContributors;
931 fh1VertexZ = o.fh1VertexZ;
932 fh1EvtMult = o.fh1EvtMult;
933 fh1EvtCent = o.fh1EvtCent;
935 fh1Trials = o.fh1Trials;
936 fh1PtHard = o.fh1PtHard;
937 fh1PtHardTrials = o.fh1PtHardTrials;
938 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
939 fh1nGenJets = o.fh1nGenJets;
940 fh1nRecEffJets = o.fh1nRecEffJets;
941 fh1nEmbeddedJets = o.fh1nEmbeddedJets;
942 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
943 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
944 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
945 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
946 fQATrackHistosSecRecNS = o.fQATrackHistosSecRecNS;
947 fQATrackHistosSecRecS = o.fQATrackHistosSecRecS;
948 fQATrackHistosSecRecSsc = o.fQATrackHistosSecRecSsc;
949 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
950 fFFHistosSecRecNS = o.fFFHistosSecRecNS;
951 fFFHistosSecRecS = o.fFFHistosSecRecS;
952 fFFHistosSecRecSsc = o.fFFHistosSecRecSsc;
954 fh1BckgMult0 = o.fh1BckgMult0;
955 fh1BckgMult1 = o.fh1BckgMult1;
956 fh1BckgMult2 = o.fh1BckgMult2;
957 fh1BckgMult3 = o.fh1BckgMult3;
958 fh1BckgMult4 = o.fh1BckgMult4;
959 fh1FractionPtEmbedded = o.fh1FractionPtEmbedded;
960 fh1IndexEmbedded = o.fh1IndexEmbedded;
961 fh2DeltaPtVsJetPtEmbedded = o.fh2DeltaPtVsJetPtEmbedded;
962 fh2DeltaPtVsRecJetPtEmbedded = o.fh2DeltaPtVsRecJetPtEmbedded;
963 fh1DeltaREmbedded = o.fh1DeltaREmbedded;
964 fhDCA_XY = o.fhDCA_XY;
966 fhJetPtRefMultEta5 = o.fhJetPtRefMultEta5;
967 fhJetPtRefMultEta8 = o.fhJetPtRefMultEta8;
968 fhJetPtMultPercent = o.fhJetPtMultPercent;
969 fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
970 fQABckgHisto0Gen = o.fQABckgHisto0Gen;
971 fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
972 fQABckgHisto1Gen = o.fQABckgHisto1Gen;
973 fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
974 fQABckgHisto2Gen = o.fQABckgHisto2Gen;
975 fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
976 fQABckgHisto3Gen = o.fQABckgHisto3Gen;
977 fQABckgHisto4RecCuts = o.fQABckgHisto4RecCuts;
978 fQABckgHisto4Gen = o.fQABckgHisto4Gen;
979 fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
980 fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
981 fFFBckgHisto1RecCuts = o.fFFBckgHisto1RecCuts;
982 fFFBckgHisto1Gen = o.fFFBckgHisto1Gen;
983 fFFBckgHisto2RecCuts = o.fFFBckgHisto2RecCuts;
984 fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
985 fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
986 fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
987 fFFBckgHisto4RecCuts = o.fFFBckgHisto4RecCuts;
988 fFFBckgHisto4Gen = o.fFFBckgHisto4Gen;
989 fFFBckgHisto0RecEffRec = o.fFFBckgHisto0RecEffRec;
990 fFFBckgHisto0SecRecNS = o.fFFBckgHisto0SecRecNS;
991 fFFBckgHisto0SecRecS = o.fFFBckgHisto0SecRecS;
992 fFFBckgHisto0SecRecSsc = o.fFFBckgHisto0SecRecSsc;
993 fProNtracksLeadingJet = o.fProNtracksLeadingJet;
994 fProDelR80pcPt = o.fProDelR80pcPt;
995 fProNtracksLeadingJetGen = o.fProNtracksLeadingJetGen;
996 fProDelR80pcPtGen = o.fProDelR80pcPtGen;
997 fProNtracksLeadingJetBgrPerp2 = o.fProNtracksLeadingJetBgrPerp2;
998 fProNtracksLeadingJetRecPrim = o.fProNtracksLeadingJetRecPrim;
999 fProDelR80pcPtRecPrim = o.fProDelR80pcPtRecPrim;
1000 fProNtracksLeadingJetRecSecNS = o.fProNtracksLeadingJetRecSecNS;
1001 fProNtracksLeadingJetRecSecS = o.fProNtracksLeadingJetRecSecS;
1002 fProNtracksLeadingJetRecSecSsc = o.fProNtracksLeadingJetRecSecSsc;
1003 fRandom = o.fRandom;
1004 fOnlyLeadingJets = o.fOnlyLeadingJets;
1005 fAnaUtils = o.fAnaUtils;
1008 fUseInclusivePIDtask = o.fUseInclusivePIDtask;
1009 fUseJetPIDtask = o.fUseJetPIDtask;
1013 for(Int_t ii=0; ii<5; ii++){
1014 fProDelRPtSum[ii] = o.fProDelRPtSum[ii];
1015 fProDelRPtSumGen[ii] = o.fProDelRPtSumGen[ii];
1016 fProDelRPtSumBgrPerp2[ii] = o.fProDelRPtSumBgrPerp2[ii];
1017 fProDelRPtSumRecPrim[ii] = o.fProDelRPtSumRecPrim[ii];
1018 fProDelRPtSumRecSecNS[ii] = o.fProDelRPtSumRecSecNS[ii];
1019 fProDelRPtSumRecSecS[ii] = o.fProDelRPtSumRecSecS[ii];
1020 fProDelRPtSumRecSecSsc[ii] = o.fProDelRPtSumRecSecSsc[ii];
1023 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
1024 fIDFFHistosRecCuts[i] = 0x0;
1025 if (o.fIDFFHistosRecCuts[i])
1026 fIDFFHistosRecCuts[i] = o.fIDFFHistosRecCuts[i];
1028 fIDFFHistosGen[i] = 0x0;
1029 if (o.fIDFFHistosGen[i])
1030 fIDFFHistosGen[i] = o.fIDFFHistosGen[i];
1032 fhDCA_XY_prim_MCID[i] = 0x0;
1033 if (o.fhDCA_XY_prim_MCID[i])
1034 fhDCA_XY_prim_MCID[i] = o.fhDCA_XY_prim_MCID[i];
1036 fhDCA_Z_prim_MCID[i] = 0x0;
1037 if (o.fhDCA_Z_prim_MCID[i])
1038 fhDCA_Z_prim_MCID[i] = o.fhDCA_Z_prim_MCID[i];
1040 fhDCA_XY_sec_MCID[i] = 0x0;
1041 if (o.fhDCA_XY_sec_MCID[i])
1042 fhDCA_XY_sec_MCID[i] = o.fhDCA_XY_sec_MCID[i];
1044 fhDCA_Z_sec_MCID[i] = 0x0;
1045 if (o.fhDCA_Z_sec_MCID[i])
1046 fhDCA_Z_sec_MCID[i] = o.fhDCA_Z_sec_MCID[i];
1051 if (fNumJetPIDtasks > 0) {
1052 delete [] fNameJetPIDtask;
1053 fNameJetPIDtask = 0x0;
1055 delete [] fJetPIDtask;
1059 fNumJetPIDtasks = o.fNumJetPIDtasks;
1062 if (fNumInclusivePIDtasks > 0) {
1063 delete [] fNameInclusivePIDtask;
1064 fNameInclusivePIDtask = 0x0;
1066 delete [] fInclusivePIDtask;
1067 fInclusivePIDtask = 0x0;
1070 fNumInclusivePIDtasks = o.fNumInclusivePIDtasks;
1073 if (fNumInclusivePIDtasks > 0) {
1074 fNameInclusivePIDtask = new TString[fNumInclusivePIDtasks];
1075 fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
1077 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
1078 fNameInclusivePIDtask[i] = "";
1079 fInclusivePIDtask[i] = 0x0;
1081 if (o.fNameInclusivePIDtask[i])
1082 fNameInclusivePIDtask[i] = o.fNameInclusivePIDtask[i];
1084 if (o.fInclusivePIDtask[i])
1085 fInclusivePIDtask[i] = o.fInclusivePIDtask[i];
1089 if (fNumJetPIDtasks > 0) {
1090 fNameJetPIDtask = new TString[fNumJetPIDtasks];
1091 fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
1093 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
1094 fNameJetPIDtask[i] = "";
1095 fJetPIDtask[i] = 0x0;
1097 if (o.fNameJetPIDtask[i])
1098 fNameJetPIDtask[i] = o.fNameJetPIDtask[i];
1100 if (o.fJetPIDtask[i])
1101 fJetPIDtask[i] = o.fJetPIDtask[i];
1108 //___________________________________________________________________________
1109 AliAnalysisTaskIDFragmentationFunction::~AliAnalysisTaskIDFragmentationFunction()
1113 if(fTracksRecCuts) delete fTracksRecCuts;
1114 if(fTracksRecCutsEfficiency) delete fTracksRecCutsEfficiency;
1115 if(fTracksGen) delete fTracksGen;
1116 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
1117 if(fTracksAODMCChargedSecNS) delete fTracksAODMCChargedSecNS;
1118 if(fTracksAODMCChargedSecS) delete fTracksAODMCChargedSecS;
1119 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
1120 if(fJetsRec) delete fJetsRec;
1121 if(fJetsRecCuts) delete fJetsRecCuts;
1122 if(fJetsGen) delete fJetsGen;
1123 if(fJetsRecEff) delete fJetsRecEff;
1124 if(fJetsEmbedded) delete fJetsEmbedded;
1127 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1128 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1129 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1131 if(fBckgJetsRec) delete fBckgJetsRec;
1132 if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
1133 if(fBckgJetsGen) delete fBckgJetsGen;
1135 if(fRandom) delete fRandom;
1137 delete [] fNameInclusivePIDtask;
1138 fNameInclusivePIDtask = 0x0;
1140 delete [] fInclusivePIDtask;
1141 fInclusivePIDtask = 0x0;
1143 delete [] fNameJetPIDtask;
1144 fNameJetPIDtask = 0x0;
1146 delete [] fJetPIDtask;
1153 //______________________________________________________________________________________________________
1154 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
1155 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1156 Int_t nPt, Float_t ptMin, Float_t ptMax,
1157 Int_t nXi, Float_t xiMin, Float_t xiMax,
1158 Int_t nZ , Float_t zMin , Float_t zMax)
1160 ,fNBinsJetPt(nJetPt)
1161 ,fJetPtMin(jetPtMin)
1162 ,fJetPtMax(jetPtMax)
1178 // default constructor
1182 //___________________________________________________________________________
1183 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
1185 ,fNBinsJetPt(copy.fNBinsJetPt)
1186 ,fJetPtMin(copy.fJetPtMin)
1187 ,fJetPtMax(copy.fJetPtMax)
1188 ,fNBinsPt(copy.fNBinsPt)
1189 ,fPtMin(copy.fPtMin)
1190 ,fPtMax(copy.fPtMax)
1191 ,fNBinsXi(copy.fNBinsXi)
1192 ,fXiMin(copy.fXiMin)
1193 ,fXiMax(copy.fXiMax)
1194 ,fNBinsZ(copy.fNBinsZ)
1197 ,fh2TrackPt(copy.fh2TrackPt)
1200 ,fh1JetPt(copy.fh1JetPt)
1201 ,fNameFF(copy.fNameFF)
1206 //_______________________________________________________________________________________________________________________________________________________________
1207 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos& o)
1212 TObject::operator=(o);
1213 fNBinsJetPt = o.fNBinsJetPt;
1214 fJetPtMin = o.fJetPtMin;
1215 fJetPtMax = o.fJetPtMax;
1216 fNBinsPt = o.fNBinsPt;
1219 fNBinsXi = o.fNBinsXi;
1222 fNBinsZ = o.fNBinsZ;
1225 fh2TrackPt = o.fh2TrackPt;
1228 fh1JetPt = o.fh1JetPt;
1229 fNameFF = o.fNameFF;
1235 //_________________________________________________________
1236 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
1240 if(fh1JetPt) delete fh1JetPt;
1241 if(fh2TrackPt) delete fh2TrackPt;
1242 if(fh2Xi) delete fh2Xi;
1243 if(fh2Z) delete fh2Z;
1246 //_________________________________________________________________
1247 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::DefineHistos()
1251 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
1252 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
1253 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
1254 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
1256 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1257 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1258 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1259 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1262 //_______________________________________________________________________________________________________________
1263 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm,
1264 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1268 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1269 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
1271 // Added for proper normalization of FF background estimation
1272 // when zero track are found in the background region
1273 if((int)trackPt==-1) return;
1275 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1276 else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,trackPt,scaleFacStrangeness);
1277 else fh2TrackPt->Fill(jetPt,trackPt);
1279 Double_t z = -1., xi = -1.;
1280 AliAnalysisTaskPID::GetJetTrackObservables(trackPt, jetPt, z, xi);
1284 fh2Xi->Fill(jetPt,xi,1/norm);
1285 fh2Z->Fill(jetPt,z,1/norm);
1287 else if(scaleStrangeness){
1288 fh2Xi->Fill(jetPt,xi,scaleFacStrangeness);
1289 fh2Z->Fill(jetPt,z,scaleFacStrangeness);
1292 fh2Xi->Fill(jetPt,xi);
1293 fh2Z->Fill(jetPt,z);
1297 //_________________________________________________________________________________
1298 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1300 // add histos to list
1302 list->Add(fh1JetPt);
1304 list->Add(fh2TrackPt);
1309 //_________________________________________________________________________________________________________
1310 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1311 Int_t nPt, Float_t ptMin, Float_t ptMax,
1312 Int_t nEta, Float_t etaMin, Float_t etaMax,
1313 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1328 // default constructor
1331 //____________________________________________________________________________________
1332 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1334 ,fNBinsPt(copy.fNBinsPt)
1335 ,fPtMin(copy.fPtMin)
1336 ,fPtMax(copy.fPtMax)
1337 ,fNBinsEta(copy.fNBinsEta)
1338 ,fEtaMin(copy.fEtaMin)
1339 ,fEtaMax(copy.fEtaMax)
1340 ,fNBinsPhi(copy.fNBinsPhi)
1341 ,fPhiMin(copy.fPhiMin)
1342 ,fPhiMax(copy.fPhiMax)
1343 ,fh2EtaPhi(copy.fh2EtaPhi)
1345 ,fNameQAJ(copy.fNameQAJ)
1350 //________________________________________________________________________________________________________________________________________________________________________
1351 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos& o)
1356 TObject::operator=(o);
1357 fNBinsPt = o.fNBinsPt;
1360 fNBinsEta = o.fNBinsEta;
1361 fEtaMin = o.fEtaMin;
1362 fEtaMax = o.fEtaMax;
1363 fNBinsPhi = o.fNBinsPhi;
1364 fPhiMin = o.fPhiMin;
1365 fPhiMax = o.fPhiMax;
1366 fh2EtaPhi = o.fh2EtaPhi;
1368 fNameQAJ = o.fNameQAJ;
1374 //______________________________________________________________
1375 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1379 if(fh2EtaPhi) delete fh2EtaPhi;
1380 if(fh1Pt) delete fh1Pt;
1383 //____________________________________________________________________
1384 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1386 // book jet QA histos
1388 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1389 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1391 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1392 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1395 //____________________________________________________________________________________________________
1396 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1398 // fill jet QA histos
1400 fh2EtaPhi->Fill( eta, phi);
1404 //____________________________________________________________________________________
1405 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1407 // add histos to list
1409 list->Add(fh2EtaPhi);
1413 //___________________________________________________________________________________________________________
1414 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1415 Int_t nPt, Float_t ptMin, Float_t ptMax,
1416 Int_t nEta, Float_t etaMin, Float_t etaMax,
1417 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1429 ,fHighPtThreshold(ptThresh)
1436 // default constructor
1439 //__________________________________________________________________________________________
1440 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1442 ,fNBinsPt(copy.fNBinsPt)
1443 ,fPtMin(copy.fPtMin)
1444 ,fPtMax(copy.fPtMax)
1445 ,fNBinsEta(copy.fNBinsEta)
1446 ,fEtaMin(copy.fEtaMin)
1447 ,fEtaMax(copy.fEtaMax)
1448 ,fNBinsPhi(copy.fNBinsPhi)
1449 ,fPhiMin(copy.fPhiMin)
1450 ,fPhiMax(copy.fPhiMax)
1451 ,fHighPtThreshold(copy.fHighPtThreshold)
1452 ,fh2EtaPhi(copy.fh2EtaPhi)
1454 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1455 ,fh2PhiPt(copy.fh2PhiPt)
1456 ,fNameQAT(copy.fNameQAT)
1461 // _____________________________________________________________________________________________________________________________________________________________________________
1462 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos& o)
1467 TObject::operator=(o);
1468 fNBinsPt = o.fNBinsPt;
1471 fNBinsEta = o.fNBinsEta;
1472 fEtaMin = o.fEtaMin;
1473 fEtaMax = o.fEtaMax;
1474 fNBinsPhi = o.fNBinsPhi;
1475 fPhiMin = o.fPhiMin;
1476 fPhiMax = o.fPhiMax;
1477 fHighPtThreshold = o.fHighPtThreshold;
1478 fh2EtaPhi = o.fh2EtaPhi;
1480 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1481 fh2PhiPt = o.fh2PhiPt;
1482 fNameQAT = o.fNameQAT;
1488 //___________________________________________________________________
1489 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1493 if(fh2EtaPhi) delete fh2EtaPhi;
1494 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1495 if(fh1Pt) delete fh1Pt;
1496 if(fh2PhiPt) delete fh2PhiPt;
1499 //______________________________________________________________________
1500 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1502 // book track QA histos
1504 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1505 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);
1506 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1507 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1509 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1510 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1511 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1512 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1515 //________________________________________________________________________________________________________
1516 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm,
1517 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1519 // fill track QA histos
1520 Float_t weight = 1.;
1521 if(weightPt) weight = pt;
1522 fh2EtaPhi->Fill( eta, phi, weight);
1523 if(scaleStrangeness) fh2EtaPhi->Fill( eta, phi, scaleFacStrangeness);
1524 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1525 if(pt > fHighPtThreshold && scaleStrangeness) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1526 if(norm) fh1Pt->Fill( pt, 1/norm );
1527 else if(scaleStrangeness) fh1Pt->Fill(pt,scaleFacStrangeness);
1528 else fh1Pt->Fill( pt );
1530 if(scaleFacStrangeness) fh2PhiPt->Fill(phi, pt, scaleFacStrangeness);
1531 else fh2PhiPt->Fill(phi, pt);
1534 //______________________________________________________________________________________
1535 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1537 // add histos to list
1539 list->Add(fh2EtaPhi);
1540 list->Add(fh2HighPtEtaPhi);
1542 list->Add(fh2PhiPt);
1545 //_________________________________________________________________________________
1546 Bool_t AliAnalysisTaskIDFragmentationFunction::Notify()
1549 // Implemented Notify() to read the cross sections
1550 // and number of trials from pyxsec.root
1551 // (taken from AliAnalysisTaskJetSpectrum2)
1553 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
1554 Float_t xsection = 0;
1555 Float_t ftrials = 1;
1559 TFile *curfile = tree->GetCurrentFile();
1561 Error("Notify","No current file");
1565 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
1567 if (fUseInclusivePIDtask) {
1568 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
1569 fInclusivePIDtask[i]->FillXsec(xsection);
1572 if (fUseJetPIDtask) {
1573 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
1574 fJetPIDtask[i]->FillXsec(xsection);
1577 if(!fh1Xsec||!fh1Trials){
1578 Printf("%s:%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1582 fh1Xsec->Fill("<#sigma>",xsection);
1583 // construct a poor man average trials
1584 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1585 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
1588 // Set seed for backg study
1590 fRandom = new TRandom3();
1591 fRandom->SetSeed(0);
1596 //__________________________________________________________________
1597 void AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()
1599 // create output objects
1601 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()");
1603 // create list of tracks and jets
1605 fTracksRecCuts = new TList();
1606 fTracksRecCuts->SetOwner(kFALSE);
1608 fTracksRecCutsEfficiency = new TList();
1609 fTracksRecCutsEfficiency->SetOwner(kFALSE);
1611 fTracksGen = new TList();
1612 fTracksGen->SetOwner(kFALSE);
1614 fTracksAODMCCharged = new TList();
1615 fTracksAODMCCharged->SetOwner(kFALSE);
1617 fTracksAODMCChargedSecNS = new TList();
1618 fTracksAODMCChargedSecNS->SetOwner(kFALSE);
1620 fTracksAODMCChargedSecS = new TList();
1621 fTracksAODMCChargedSecS->SetOwner(kFALSE);
1623 fTracksRecQualityCuts = new TList();
1624 fTracksRecQualityCuts->SetOwner(kFALSE);
1626 fJetsRec = new TList();
1627 fJetsRec->SetOwner(kFALSE);
1629 fJetsRecCuts = new TList();
1630 fJetsRecCuts->SetOwner(kFALSE);
1632 fJetsGen = new TList();
1633 fJetsGen->SetOwner(kFALSE);
1635 fJetsRecEff = new TList();
1636 fJetsRecEff->SetOwner(kFALSE);
1638 fJetsEmbedded = new TList();
1639 fJetsEmbedded->SetOwner(kFALSE);
1643 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1644 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1645 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1647 fBckgJetsRec = new TList();
1648 fBckgJetsRec->SetOwner(kFALSE);
1650 fBckgJetsRecCuts = new TList();
1651 fBckgJetsRecCuts->SetOwner(kFALSE);
1653 fBckgJetsGen = new TList();
1654 fBckgJetsGen->SetOwner(kFALSE);
1658 // Create histograms / output container
1662 fCommonHistList = new TList();
1663 fCommonHistList->SetOwner(kTRUE);
1665 Bool_t oldStatus = TH1::AddDirectoryStatus();
1666 TH1::AddDirectory(kFALSE);
1670 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1671 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
1672 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
1673 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1674 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1675 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1676 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
1678 fh1VtxSelection = new TH1F("fh1VtxSelection", "Vertex Selection", 10, -1, 9);
1679 fh1VtxSelection->GetXaxis()->SetBinLabel(1,"Undef");
1680 fh1VtxSelection->GetXaxis()->SetBinLabel(2,"Primary");
1681 fh1VtxSelection->GetXaxis()->SetBinLabel(3,"Kink");
1682 fh1VtxSelection->GetXaxis()->SetBinLabel(4,"V0");
1683 fh1VtxSelection->GetXaxis()->SetBinLabel(5,"Cascade");
1684 fh1VtxSelection->GetXaxis()->SetBinLabel(6,"Multi");
1685 fh1VtxSelection->GetXaxis()->SetBinLabel(7,"SPD");
1686 fh1VtxSelection->GetXaxis()->SetBinLabel(8,"PileUpSPD");
1687 fh1VtxSelection->GetXaxis()->SetBinLabel(9,"PileUpTracks");
1688 fh1VtxSelection->GetXaxis()->SetBinLabel(10,"TPC");
1690 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
1691 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1692 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
1693 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1695 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1696 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1697 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1698 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1699 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1700 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1702 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1703 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1704 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1705 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1707 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1708 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1711 if(fBranchEmbeddedJets.Length()){
1712 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
1713 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
1714 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
1715 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
1716 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
1717 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1722 if(fQAMode&1){ // track QA
1723 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1724 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1725 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1726 fQATrackHighPtThreshold);
1727 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1728 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1729 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1730 fQATrackHighPtThreshold);
1733 if(fQAMode&2){ // jet QA
1734 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1735 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1736 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1737 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1738 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1739 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1740 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1741 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1742 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1743 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1744 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1745 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1746 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1747 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1748 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1749 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1750 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1754 if(fFFMode || fIDFFMode){
1756 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1757 fFFNBinsPt, fFFPtMin, fFFPtMax,
1758 fFFNBinsXi, fFFXiMin, fFFXiMax,
1759 fFFNBinsZ , fFFZMin , fFFZMax );
1762 fFFHistosRecCutsInc = new AliFragFuncHistos("RecCutsInc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1763 fFFNBinsPt, fFFPtMin, fFFPtMax,
1764 fFFNBinsXi, fFFXiMin, fFFXiMax,
1765 fFFNBinsZ , fFFZMin , fFFZMax );
1768 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1769 fFFNBinsPt, fFFPtMin, fFFPtMax,
1770 fFFNBinsXi, fFFXiMin, fFFXiMax,
1771 fFFNBinsZ , fFFZMin , fFFZMax );
1773 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1774 fFFNBinsPt, fFFPtMin, fFFPtMax,
1775 fFFNBinsXi, fFFXiMin, fFFXiMax,
1776 fFFNBinsZ , fFFZMin , fFFZMax);
1778 fFFHistosGenInc = new AliFragFuncHistos("GenInc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1779 fFFNBinsPt, fFFPtMin, fFFPtMax,
1780 fFFNBinsXi, fFFXiMin, fFFXiMax,
1781 fFFNBinsZ , fFFZMin , fFFZMax);
1783 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1784 fFFNBinsPt, fFFPtMin, fFFPtMax,
1785 fFFNBinsXi, fFFXiMin, fFFXiMax,
1786 fFFNBinsZ , fFFZMin , fFFZMax);
1789 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
1790 fIDFFHistosRecCuts[i] = new AliFragFuncHistos(Form("RecCuts_%s", AliPID::ParticleName(i)), fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1791 fFFNBinsPt, fFFPtMin, fFFPtMax,
1792 fFFNBinsXi, fFFXiMin, fFFXiMax,
1793 fFFNBinsZ , fFFZMin , fFFZMax );
1794 fIDFFHistosGen[i] = new AliFragFuncHistos(Form("Gen_%s", AliPID::ParticleName(i)), fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1795 fFFNBinsPt, fFFPtMin, fFFPtMax,
1796 fFFNBinsXi, fFFXiMin, fFFXiMax,
1797 fFFNBinsZ , fFFZMin , fFFZMax );
1806 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1807 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1808 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1809 fQATrackHighPtThreshold);
1811 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1812 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1813 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1814 fQATrackHighPtThreshold);
1816 fQATrackHistosSecRecNS = new AliFragFuncQATrackHistos("SecRecNS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1817 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1818 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1819 fQATrackHighPtThreshold);
1821 fQATrackHistosSecRecS = new AliFragFuncQATrackHistos("SecRecS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1822 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1823 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1824 fQATrackHighPtThreshold);
1826 fQATrackHistosSecRecSsc = new AliFragFuncQATrackHistos("SecRecSsc", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1827 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1828 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1829 fQATrackHighPtThreshold);
1833 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1834 fFFNBinsPt, fFFPtMin, fFFPtMax,
1835 fFFNBinsXi, fFFXiMin, fFFXiMax,
1836 fFFNBinsZ , fFFZMin , fFFZMax);
1838 fFFHistosSecRecNS = new AliFragFuncHistos("SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1839 fFFNBinsPt, fFFPtMin, fFFPtMax,
1840 fFFNBinsXi, fFFXiMin, fFFXiMax,
1841 fFFNBinsZ , fFFZMin , fFFZMax);
1843 fFFHistosSecRecS = new AliFragFuncHistos("SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1844 fFFNBinsPt, fFFPtMin, fFFPtMax,
1845 fFFNBinsXi, fFFXiMin, fFFXiMax,
1846 fFFNBinsZ , fFFZMin , fFFZMax);
1848 fFFHistosSecRecSsc = new AliFragFuncHistos("SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1849 fFFNBinsPt, fFFPtMin, fFFPtMax,
1850 fFFNBinsXi, fFFXiMin, fFFXiMax,
1851 fFFNBinsZ , fFFZMin , fFFZMax);
1854 } // end: efficiency
1858 if(fBckgType[0]==kBckgNone){
1859 AliError("no bgr method selected !");
1863 for(Int_t i=0; i<5; i++){
1864 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
1865 else if(fBckgType[i]==kBckgPerp2) title[i]="Perp2";
1866 else if(fBckgType[i]==kBckgPerp2Area) title[i]="Perp2Area";
1867 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
1868 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
1869 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
1870 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
1871 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
1872 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
1873 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
1874 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
1875 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
1876 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
1877 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
1878 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
1879 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
1880 else if(fBckgType[i]==kBckgNone) title[i]="";
1881 else printf("Please chose background method number %d!",i);
1885 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1886 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1887 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
1889 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
1890 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
1894 fh1BckgMult0 = new TH1F("fh1BckgMult0","bckg mult "+title[0],500,0,500);
1895 if(fBckgType[1] != kBckgNone) fh1BckgMult1 = new TH1F("fh1BckgMult1","bckg mult "+title[1],500,0,500);
1896 if(fBckgType[2] != kBckgNone) fh1BckgMult2 = new TH1F("fh1BckgMult2","bckg mult "+title[2],500,0,500);
1897 if(fBckgType[3] != kBckgNone) fh1BckgMult3 = new TH1F("fh1BckgMult3","bckg mult "+title[3],500,0,500);
1898 if(fBckgType[4] != kBckgNone) fh1BckgMult4 = new TH1F("fh1BckgMult4","bckg mult "+title[4],500,0,500);
1902 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1903 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1904 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1905 fQATrackHighPtThreshold);
1906 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1907 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1908 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1909 fQATrackHighPtThreshold);
1911 if(fBckgType[1] != kBckgNone){
1912 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1913 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1914 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1915 fQATrackHighPtThreshold);
1916 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1917 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1918 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1919 fQATrackHighPtThreshold);
1921 if(fBckgType[2] != kBckgNone){
1922 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1923 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1924 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1925 fQATrackHighPtThreshold);
1926 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1927 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1928 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1929 fQATrackHighPtThreshold);
1931 if(fBckgType[3] != kBckgNone){
1932 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1933 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1934 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1935 fQATrackHighPtThreshold);
1936 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1937 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1938 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1939 fQATrackHighPtThreshold);
1941 if(fBckgType[4] != kBckgNone){
1942 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1943 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1944 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1945 fQATrackHighPtThreshold);
1946 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1947 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1948 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1949 fQATrackHighPtThreshold);
1951 } // end: background QA
1954 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1955 fFFNBinsPt, fFFPtMin, fFFPtMax,
1956 fFFNBinsXi, fFFXiMin, fFFXiMax,
1957 fFFNBinsZ , fFFZMin , fFFZMax);
1959 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1960 fFFNBinsPt, fFFPtMin, fFFPtMax,
1961 fFFNBinsXi, fFFXiMin, fFFXiMax,
1962 fFFNBinsZ , fFFZMin , fFFZMax);
1964 if(fBckgType[1] != kBckgNone){
1965 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1966 fFFNBinsPt, fFFPtMin, fFFPtMax,
1967 fFFNBinsXi, fFFXiMin, fFFXiMax,
1968 fFFNBinsZ , fFFZMin , fFFZMax);
1969 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1970 fFFNBinsPt, fFFPtMin, fFFPtMax,
1971 fFFNBinsXi, fFFXiMin, fFFXiMax,
1972 fFFNBinsZ , fFFZMin , fFFZMax);
1974 if(fBckgType[2] != kBckgNone){
1975 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1976 fFFNBinsPt, fFFPtMin, fFFPtMax,
1977 fFFNBinsXi, fFFXiMin, fFFXiMax,
1978 fFFNBinsZ , fFFZMin , fFFZMax);
1980 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1981 fFFNBinsPt, fFFPtMin, fFFPtMax,
1982 fFFNBinsXi, fFFXiMin, fFFXiMax,
1983 fFFNBinsZ , fFFZMin , fFFZMax);
1985 if(fBckgType[3] != kBckgNone){
1986 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1987 fFFNBinsPt, fFFPtMin, fFFPtMax,
1988 fFFNBinsXi, fFFXiMin, fFFXiMax,
1989 fFFNBinsZ , fFFZMin , fFFZMax);
1991 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1992 fFFNBinsPt, fFFPtMin, fFFPtMax,
1993 fFFNBinsXi, fFFXiMin, fFFXiMax,
1994 fFFNBinsZ , fFFZMin , fFFZMax);
1996 if(fBckgType[4] != kBckgNone){
1997 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1998 fFFNBinsPt, fFFPtMin, fFFPtMax,
1999 fFFNBinsXi, fFFXiMin, fFFXiMax,
2000 fFFNBinsZ , fFFZMin , fFFZMax);
2002 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2003 fFFNBinsPt, fFFPtMin, fFFPtMax,
2004 fFFNBinsXi, fFFXiMin, fFFXiMax,
2005 fFFNBinsZ , fFFZMin , fFFZMax);
2008 fFFBckgHisto0RecEffRec = new AliFragFuncHistos("Bckg"+title[0]+"RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2009 fFFNBinsPt, fFFPtMin, fFFPtMax,
2010 fFFNBinsXi, fFFXiMin, fFFXiMax,
2011 fFFNBinsZ , fFFZMin , fFFZMax);
2013 fFFBckgHisto0SecRecNS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2014 fFFNBinsPt, fFFPtMin, fFFPtMax,
2015 fFFNBinsXi, fFFXiMin, fFFXiMax,
2016 fFFNBinsZ , fFFZMin , fFFZMax);
2018 fFFBckgHisto0SecRecS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2019 fFFNBinsPt, fFFPtMin, fFFPtMax,
2020 fFFNBinsXi, fFFXiMin, fFFXiMax,
2021 fFFNBinsZ , fFFZMin , fFFZMax);
2023 fFFBckgHisto0SecRecSsc = new AliFragFuncHistos("Bckg"+title[0]+"SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2024 fFFNBinsPt, fFFPtMin, fFFPtMax,
2025 fFFNBinsXi, fFFXiMin, fFFXiMax,
2026 fFFNBinsZ , fFFZMin , fFFZMax);
2029 } // end: background FF
2032 } // end: background
2035 // ____________ define histograms ____________________
2038 if(fQAMode&1){ // track QA
2039 fQATrackHistosRecCuts->DefineHistos();
2040 fQATrackHistosGen->DefineHistos();
2043 if(fQAMode&2){ // jet QA
2044 fQAJetHistosRec->DefineHistos();
2045 fQAJetHistosRecCuts->DefineHistos();
2046 fQAJetHistosRecCutsLeading->DefineHistos();
2047 fQAJetHistosGen->DefineHistos();
2048 fQAJetHistosGenLeading->DefineHistos();
2049 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
2053 if(fFFMode || fIDFFMode){
2054 fFFHistosRecCuts->DefineHistos();
2055 fFFHistosRecCutsInc->DefineHistos();
2056 fFFHistosRecLeadingTrack->DefineHistos();
2057 fFFHistosGen->DefineHistos();
2058 fFFHistosGenInc->DefineHistos();
2059 fFFHistosGenLeadingTrack->DefineHistos();
2062 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
2063 fIDFFHistosRecCuts[i]->DefineHistos();
2064 fIDFFHistosGen[i]->DefineHistos();
2071 fQATrackHistosRecEffGen->DefineHistos();
2072 fQATrackHistosRecEffRec->DefineHistos();
2073 fQATrackHistosSecRecNS->DefineHistos();
2074 fQATrackHistosSecRecS->DefineHistos();
2075 fQATrackHistosSecRecSsc->DefineHistos();
2078 fFFHistosRecEffRec->DefineHistos();
2079 fFFHistosSecRecNS->DefineHistos();
2080 fFFHistosSecRecS->DefineHistos();
2081 fFFHistosSecRecSsc->DefineHistos();
2083 } // end: efficiency
2088 fFFBckgHisto0RecCuts->DefineHistos();
2089 fFFBckgHisto0Gen->DefineHistos();
2090 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->DefineHistos();
2091 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->DefineHistos();
2092 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->DefineHistos();
2093 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->DefineHistos();
2094 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->DefineHistos();
2095 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->DefineHistos();
2096 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->DefineHistos();
2097 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->DefineHistos();
2100 fFFBckgHisto0RecEffRec->DefineHistos();
2101 fFFBckgHisto0SecRecNS->DefineHistos();
2102 fFFBckgHisto0SecRecS->DefineHistos();
2103 fFFBckgHisto0SecRecSsc->DefineHistos();
2108 fQABckgHisto0RecCuts->DefineHistos();
2109 fQABckgHisto0Gen->DefineHistos();
2110 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->DefineHistos();
2111 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->DefineHistos();
2112 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->DefineHistos();
2113 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->DefineHistos();
2114 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->DefineHistos();
2115 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->DefineHistos();
2116 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->DefineHistos();
2117 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->DefineHistos();
2119 } // end: background
2122 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
2123 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
2124 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
2126 fCommonHistList->Add(fh1EvtSelection);
2127 fCommonHistList->Add(fh1VtxSelection);
2128 fCommonHistList->Add(fh1EvtMult);
2129 fCommonHistList->Add(fh1EvtCent);
2130 fCommonHistList->Add(fh1VertexNContributors);
2131 fCommonHistList->Add(fh1VertexZ);
2132 fCommonHistList->Add(fh1nRecJetsCuts);
2133 fCommonHistList->Add(fh1Xsec);
2134 fCommonHistList->Add(fh1Trials);
2135 fCommonHistList->Add(fh1PtHard);
2136 fCommonHistList->Add(fh1PtHardTrials);
2138 if(genJets) fCommonHistList->Add(fh1nGenJets);
2142 fFFHistosRecCuts->AddToOutput(fCommonHistList);
2143 fFFHistosRecCutsInc->AddToOutput(fCommonHistList);
2144 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
2146 if(genJets && genTracks){
2147 fFFHistosGen->AddToOutput(fCommonHistList);
2148 fFFHistosGenInc->AddToOutput(fCommonHistList);
2149 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
2153 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
2154 if(genJets && genTracks)
2155 fIDFFHistosGen[i]->AddToOutput(fCommonHistList);
2156 fIDFFHistosRecCuts[i]->AddToOutput(fCommonHistList);
2164 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
2165 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
2166 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
2167 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
2168 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
2170 if(genJets && genTracks){
2171 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
2172 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
2173 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
2174 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
2175 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
2179 fFFBckgHisto0RecEffRec->AddToOutput(fCommonHistList);
2180 fFFBckgHisto0SecRecNS->AddToOutput(fCommonHistList);
2181 fFFBckgHisto0SecRecS->AddToOutput(fCommonHistList);
2182 fFFBckgHisto0SecRecSsc->AddToOutput(fCommonHistList);
2187 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
2188 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
2189 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
2190 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
2191 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
2192 if(genJets && genTracks){
2193 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
2194 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->AddToOutput(fCommonHistList);
2195 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->AddToOutput(fCommonHistList);
2196 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->AddToOutput(fCommonHistList);
2197 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->AddToOutput(fCommonHistList);
2201 if(fh1BckgMult0) fCommonHistList->Add(fh1BckgMult0);
2202 if(fBckgType[1] != kBckgNone) fCommonHistList->Add(fh1BckgMult1);
2203 if(fBckgType[2] != kBckgNone) fCommonHistList->Add(fh1BckgMult2);
2204 if(fBckgType[3] != kBckgNone) fCommonHistList->Add(fh1BckgMult3);
2205 if(fBckgType[4] != kBckgNone) fCommonHistList->Add(fh1BckgMult4);
2209 if(fBranchEmbeddedJets.Length()){
2210 fCommonHistList->Add(fh1FractionPtEmbedded);
2211 fCommonHistList->Add(fh1IndexEmbedded);
2212 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
2213 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
2214 fCommonHistList->Add(fh1DeltaREmbedded);
2215 fCommonHistList->Add(fh1nEmbeddedJets);
2221 if(fQAMode&1){ // track QA
2222 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
2223 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
2226 if(fQAMode&2){ // jet QA
2227 fQAJetHistosRec->AddToOutput(fCommonHistList);
2228 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
2229 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
2230 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
2232 fQAJetHistosGen->AddToOutput(fCommonHistList);
2233 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
2239 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2240 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2241 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
2242 fCommonHistList->Add(fh1nRecBckgJetsCuts);
2243 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
2247 if(fEffMode && recJetsEff && genTracks){
2249 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
2250 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
2251 fQATrackHistosSecRecNS->AddToOutput(fCommonHistList);
2252 fQATrackHistosSecRecS->AddToOutput(fCommonHistList);
2253 fQATrackHistosSecRecSsc->AddToOutput(fCommonHistList);
2256 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
2257 fFFHistosSecRecNS->AddToOutput(fCommonHistList);
2258 fFFHistosSecRecS->AddToOutput(fCommonHistList);
2259 fFFHistosSecRecSsc->AddToOutput(fCommonHistList);
2261 fCommonHistList->Add(fh1nRecEffJets);
2262 fCommonHistList->Add(fh2PtRecVsGenPrim);
2263 fCommonHistList->Add(fh2PtRecVsGenSec);
2269 fProNtracksLeadingJet = new TProfile("AvgNoOfTracksLeadingJet","AvgNoOfTracksLeadingJet",100,0,250,0,50);
2270 fProDelR80pcPt = new TProfile("AvgdelR80pcPt","AvgdelR80pcPt",100,0,250,0,1);
2272 if(genJets && genTracks){
2273 fProNtracksLeadingJetGen = new TProfile("AvgNoOfTracksLeadingJetGen","AvgNoOfTracksLeadingJetGen",100,0,250,0,50);
2274 fProDelR80pcPtGen = new TProfile("AvgdelR80pcPtGen","AvgdelR80pcPtGen",100,0,250,0,1);
2278 fProNtracksLeadingJetBgrPerp2 = new TProfile("AvgNoOfTracksLeadingJetBgrPerp2","AvgNoOfTracksLeadingJetBgrPerp2",100,0,250,0,50);
2281 fProNtracksLeadingJetRecPrim = new TProfile("AvgNoOfTracksLeadingJetRecPrim","AvgNoOfTracksLeadingJetRecPrim",100,0,250,0,50);
2282 fProDelR80pcPtRecPrim = new TProfile("AvgdelR80pcPtRecPrim","AvgdelR80pcPtRecPrim",100,0,250,0,1);
2283 fProNtracksLeadingJetRecSecNS = new TProfile("AvgNoOfTracksLeadingJetRecSecNS","AvgNoOfTracksLeadingJetRecSecNS",100,0,250,0,50);
2284 fProNtracksLeadingJetRecSecS = new TProfile("AvgNoOfTracksLeadingJetRecSecS","AvgNoOfTracksLeadingJetRecSecS",100,0,250,0,50);
2285 fProNtracksLeadingJetRecSecSsc = new TProfile("AvgNoOfTracksLeadingJetRecSecSsc","AvgNoOfTracksLeadingJetRecSecSsc",100,0,250,0,50);
2289 for(Int_t ii=0; ii<5; ii++){
2290 if(ii==0)strTitJS = "_JetPt20to30";
2291 if(ii==1)strTitJS = "_JetPt30to40";
2292 if(ii==2)strTitJS = "_JetPt40to60";
2293 if(ii==3)strTitJS = "_JetPt60to80";
2294 if(ii==4)strTitJS = "_JetPt80to100";
2296 fProDelRPtSum[ii] = new TProfile(Form("AvgPtSumDelR%s",strTitJS.Data()),Form("AvgPtSumDelR%s",strTitJS.Data()),50,0,1,0,250);
2297 if(genJets && genTracks)
2298 fProDelRPtSumGen[ii] = new TProfile(Form("AvgPtSumDelRGen%s",strTitJS.Data()),Form("AvgPtSumDelRGen%s",strTitJS.Data()),50,0,1,0,250);
2300 fProDelRPtSumBgrPerp2[ii] = new TProfile(Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),50,0,1,0,250);
2302 fProDelRPtSumRecPrim[ii] = new TProfile(Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),50,0,1,0,250);
2303 fProDelRPtSumRecSecNS[ii] = new TProfile(Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),50,0,1,0,250);
2304 fProDelRPtSumRecSecS[ii] = new TProfile(Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),50,0,1,0,250);
2305 fProDelRPtSumRecSecSsc[ii] = new TProfile(Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),50,0,1,0,250);
2309 fCommonHistList->Add(fProNtracksLeadingJet);
2310 fCommonHistList->Add(fProDelR80pcPt);
2311 for(int ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSum[ii]);
2313 if(genJets && genTracks){
2314 fCommonHistList->Add(fProNtracksLeadingJetGen);
2315 fCommonHistList->Add(fProDelR80pcPtGen);
2316 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumGen[ii]);
2320 fCommonHistList->Add(fProNtracksLeadingJetBgrPerp2);
2321 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumBgrPerp2[ii]);
2325 fCommonHistList->Add(fProNtracksLeadingJetRecPrim);
2326 fCommonHistList->Add(fProDelR80pcPtRecPrim);
2327 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecPrim[ii]);
2329 fCommonHistList->Add(fProNtracksLeadingJetRecSecNS);
2330 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecNS[ii]);
2332 fCommonHistList->Add(fProNtracksLeadingJetRecSecS);
2333 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecS[ii]);
2335 fCommonHistList->Add(fProNtracksLeadingJetRecSecSsc);
2336 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecSsc[ii]);
2340 // Default analysis utils
2341 fAnaUtils = new AliAnalysisUtils();
2343 // Not used yet, but to be save, forward vertex z cut to analysis utils object
2344 fAnaUtils->SetMaxVtxZ(fMaxVertexZ);
2346 // Load PID framework if desired
2347 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Loading PID framework");
2349 fUseJetPIDtask = fIDFFMode || fFFMode;
2350 fUseInclusivePIDtask = fQAMode && (fQAMode&1);
2352 if (fUseJetPIDtask || fUseInclusivePIDtask) {
2353 TObjArray* tasks = AliAnalysisManager::GetAnalysisManager()->GetTasks();
2355 Printf("ERROR loading PID tasks: Failed to retrieve tasks from analysis manager!\n");
2357 fUseJetPIDtask = kFALSE;
2358 fUseInclusivePIDtask = kFALSE;
2361 if (fUseJetPIDtask) {
2362 delete [] fJetPIDtask;
2365 if (fNumJetPIDtasks > 0) {
2366 fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
2368 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2369 fJetPIDtask[i] = (AliAnalysisTaskPID*)tasks->FindObject(fNameJetPIDtask[i].Data());
2371 if (!fJetPIDtask[i]) {
2372 Printf("ERROR: Failed to load jet pid task!\n");
2373 fUseJetPIDtask = kFALSE;
2378 Printf("WARNING: zero jet pid tasks!\n");
2379 fUseJetPIDtask = kFALSE;
2383 if (fUseInclusivePIDtask) {
2384 delete [] fInclusivePIDtask;
2385 fInclusivePIDtask = 0x0;
2387 if (fNumInclusivePIDtasks > 0) {
2388 fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
2390 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2391 fInclusivePIDtask[i] = (AliAnalysisTaskPID*)tasks->FindObject(fNameInclusivePIDtask[i].Data());
2393 if (!fInclusivePIDtask[i]) {
2394 Printf("ERROR: Failed to load inclusive pid task!\n");
2395 fUseInclusivePIDtask = kFALSE;
2400 Printf("WARNING: zero inclusive pid tasks!\n");
2401 fUseInclusivePIDtask = kFALSE;
2406 const Int_t nRefMultBins = 100;
2407 const Double_t refMultUp = 100.;
2408 const Double_t refMultDown = 0.;
2410 const Int_t nJetPtBins = 20;
2411 const Double_t jetPtUp = 100.;
2412 const Double_t jetPtDown = 0.;
2414 const Int_t nCentBins = 12;
2415 const Double_t binsCentpp[nCentBins+1] = { 0, 0.01, 0.1, 1, 5, 10, 15, 20, 30, 40, 50, 70, 100};
2417 fhJetPtRefMultEta5 = new TH2F("fhJetPtRefMultEta5",
2418 "Correlation between jet energy and event multiplicity (|#eta| < 0.5);Ref. mult. (|#eta| < 0.5);#it{p}_{T, jet}^{ch} (GeV/#it{c})",
2419 nRefMultBins, refMultDown, refMultUp, nJetPtBins, jetPtDown, jetPtUp);
2420 fhJetPtRefMultEta8 = new TH2F("fhJetPtRefMultEta8",
2421 "Correlation between jet energy and event multiplicity (|#eta| < 0.8);Ref. mult. (|#eta| < 0.8);#it{p}_{T, jet}^{ch} (GeV/#it{c})",
2422 nRefMultBins, refMultDown, refMultUp, nJetPtBins, jetPtDown, jetPtUp);
2423 fhJetPtMultPercent = new TH2F("fhJetPtMultPercent",
2424 "Correlation between jet energy and event multiplicity percentile (V0M);Multiplicity Percentile (V0M);#it{p}_{T, jet}^{ch} (GeV/#it{c})",
2425 nCentBins, binsCentpp, nJetPtBins, jetPtDown, jetPtUp);
2426 fCommonHistList->Add(fhJetPtRefMultEta5);
2427 fCommonHistList->Add(fhJetPtRefMultEta8);
2428 fCommonHistList->Add(fhJetPtMultPercent);
2430 if (fUseJetPIDtask) {
2431 const Int_t nPtBins = 68;
2432 Double_t binsPt[nPtBins+1] = {0. , 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45,
2433 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95,
2434 1.0, 1.1 , 1.2, 1.3 , 1.4, 1.5 , 1.6, 1.7 , 1.8, 1.9 ,
2435 2.0, 2.2 , 2.4, 2.6 , 2.8, 3.0 , 3.2, 3.4 , 3.6, 3.8 ,
2436 4.0, 4.5 , 5.0, 5.5 , 6.0, 6.5 , 7.0, 8.0 , 9.0, 10.0,
2437 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
2438 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
2440 const Int_t DCAbins = 320;
2441 const Double_t DCA_Z_max = 3.5;
2442 const Double_t DCA_XY_max = 2.5;
2444 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);
2445 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);
2446 fCommonHistList->Add(fhDCA_XY);
2447 fCommonHistList->Add(fhDCA_Z);
2449 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
2450 fhDCA_XY_prim_MCID[i] = new TH2F(Form("fhDCA_XY_prim_MCID_%s", AliPID::ParticleShortName(i)),
2451 Form("Rec. %s (prim.);#it{p}_{T} (GeV/#it{c});DCA_{XY}", AliPID::ParticleLatexName(i)),
2452 nPtBins, binsPt, DCAbins, -DCA_XY_max, DCA_XY_max);
2453 fhDCA_Z_prim_MCID[i] = new TH2F(Form("fhDCA_Z_prim_MCID_%s", AliPID::ParticleShortName(i)),
2454 Form("Rec. %s (prim.);#it{p}_{T} (GeV/#it{c});DCA_{Z}", AliPID::ParticleLatexName(i)),
2455 nPtBins, binsPt, DCAbins, -DCA_Z_max, DCA_Z_max);
2456 fCommonHistList->Add(fhDCA_XY_prim_MCID[i]);
2457 fCommonHistList->Add(fhDCA_Z_prim_MCID[i]);
2459 fhDCA_XY_sec_MCID[i] = new TH2F(Form("fhDCA_XY_sec_MCID_%s", AliPID::ParticleShortName(i)),
2460 Form("Rec. %s (sec.);#it{p}_{T} (GeV/#it{c});DCA_{XY}", AliPID::ParticleLatexName(i)),
2461 nPtBins, binsPt, DCAbins, -DCA_XY_max, DCA_XY_max);
2462 fhDCA_Z_sec_MCID[i] = new TH2F(Form("fhDCA_Z_sec_MCID_%s", AliPID::ParticleShortName(i)),
2463 Form("Rec. %s (sec.);#it{p}_{T} (GeV/#it{c});DCA_{Z}", AliPID::ParticleLatexName(i)),
2464 nPtBins, binsPt, DCAbins, -DCA_Z_max, DCA_Z_max);
2465 fCommonHistList->Add(fhDCA_XY_sec_MCID[i]);
2466 fCommonHistList->Add(fhDCA_Z_sec_MCID[i]);
2471 // =========== Switch on Sumw2 for all histos ===========
2472 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
2473 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
2474 if (h1) h1->Sumw2();
2476 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
2477 if(hnSparse) hnSparse->Sumw2();
2481 TH1::AddDirectory(oldStatus);
2483 if(fDebug > 2) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Posting Output");
2485 PostData(1, fCommonHistList);
2487 if(fDebug > 2) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Done");
2490 //_______________________________________________
2491 void AliAnalysisTaskIDFragmentationFunction::Init()
2494 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::Init()");
2498 //_____________________________________________________________
2499 void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
2502 // Called for each event
2504 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserExec()");
2507 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
2509 // Trigger selection
2510 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
2511 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
2513 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
2514 fh1EvtSelection->Fill(1.);
2515 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
2516 PostData(1, fCommonHistList);
2520 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
2522 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
2525 fMCEvent = MCEvent();
2527 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
2530 // get AOD event from input/ouput
2531 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2532 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
2533 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
2534 if(fUseAODInputJets) fAODJets = fAOD;
2535 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
2538 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2539 if( handler && handler->InheritsFrom("AliAODHandler") ) {
2540 fAOD = ((AliAODHandler*)handler)->GetAOD();
2542 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
2546 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
2547 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2548 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
2549 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
2550 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
2554 if(fNonStdFile.Length()!=0){
2555 // case we have an AOD extension - fetch the jets from the extended output
2557 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
2558 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
2560 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
2565 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
2569 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
2574 // event selection **************************************************
2575 // *** event class ***
2576 AliVEvent* evtForCentDetermination = handler->InheritsFrom("AliAODInputHandler") ? fAOD : InputEvent();
2578 Double_t centPercent = -1;
2581 if(handler->InheritsFrom("AliAODInputHandler")){
2582 // since it is not supported by the helper task define own classes
2583 centPercent = ((AliVAODHeader*)fAOD->GetHeader())->GetCentrality();
2585 if(centPercent>10) cl = 2;
2586 if(centPercent>30) cl = 3;
2587 if(centPercent>50) cl = 4;
2590 cl = AliAnalysisHelperJetTasks::EventClass();
2591 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
2594 if(cl!=fEventClass){
2595 // event not in selected event class, reject event
2596 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
2597 fh1EvtSelection->Fill(2.);
2598 PostData(1, fCommonHistList);
2603 // Retrieve reference multiplicities in |eta|<0.8 and <0.5
2605 AliAODHeader * header = dynamic_cast<AliAODHeader*>(fAOD->GetHeader());
2606 if(!header) AliFatal("Not a standard AOD");
2608 const Int_t refMult5 = header->GetRefMultiplicityComb05();
2609 const Int_t refMult8 = header->GetRefMultiplicityComb08();
2610 const Double_t centPercentPP = fAnaUtils->GetMultiplicityPercentile(fAOD, "V0M");
2613 // Count events with trigger selection, note: Set centrality percentile fix to -1 for pp for PID framework
2614 if (fUseJetPIDtask) {
2615 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2616 fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSel);
2620 if (fUseInclusivePIDtask) {
2621 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2622 fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSel);
2626 // *** vertex cut ***
2627 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
2629 Printf("%s:%d Primary vertex not found", (char*)__FILE__,__LINE__);
2633 Int_t nTracksPrim = primVtx->GetNContributors();
2634 fh1VertexNContributors->Fill(nTracksPrim);
2637 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
2638 if(nTracksPrim <= 0) {
2639 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
2640 fh1EvtSelection->Fill(3.);
2641 PostData(1, fCommonHistList);
2645 TString primVtxName(primVtx->GetName());
2647 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
2648 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
2649 fh1EvtSelection->Fill(5.);
2650 PostData(1, fCommonHistList);
2654 // Count events with trigger selection and vtx cut, note: Set centrality percentile fix to -1 for pp for PID framework
2655 if (fUseJetPIDtask) {
2656 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2657 fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCut);
2661 if (fUseInclusivePIDtask) {
2662 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2663 fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCut);
2667 fh1VertexZ->Fill(primVtx->GetZ());
2669 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
2670 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2671 fh1EvtSelection->Fill(4.);
2672 PostData(1, fCommonHistList);
2676 // Count events with trigger selection, vtx cut and z vtx cut, note: Set centrality percentile fix to -1 for pp for PID framework
2677 if (fUseJetPIDtask) {
2678 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2679 fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCutAndZvtxCutNoPileUpRejection);
2683 if (fUseInclusivePIDtask) {
2684 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2685 fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCutAndZvtxCutNoPileUpRejection);
2690 // Store for each task, whether this task would tag this event as pile-up or not
2691 const Int_t arrSizeJet = TMath::Max(1, fNumJetPIDtasks);
2692 const Int_t arrSizeInclusive = TMath::Max(1, fNumInclusivePIDtasks);
2693 Bool_t isPileUpJetPIDtask[arrSizeJet];
2694 Bool_t isPileUpInclusivePIDtask[arrSizeInclusive];
2696 for (Int_t i = 0; i < arrSizeJet; i++)
2697 isPileUpJetPIDtask[i] = kFALSE;
2699 for (Int_t i = 0; i < arrSizeInclusive; i++)
2700 isPileUpInclusivePIDtask[i] = kFALSE;
2702 // Check whether there is at least one task that does not reject the event (saves processing time in the following code)
2703 Bool_t isPileUpForAllJetPIDTasks = kTRUE;
2704 Bool_t isPileUpForAllInclusivePIDTasks = kTRUE;
2706 // Count events with trigger selection, vtx cut, z vtx cut and after pile-up rejection (if enabled in that task)
2707 // Note: Set centrality percentile fix to -1 for pp for PID framework
2708 if (fUseJetPIDtask) {
2709 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2710 isPileUpJetPIDtask[i] = fJetPIDtask[i]->GetIsPileUp(fAOD, fJetPIDtask[i]->GetPileUpRejectionType());
2711 if (!isPileUpJetPIDtask[i])
2712 fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCutAndZvtxCut);
2714 isPileUpForAllJetPIDTasks = isPileUpForAllJetPIDTasks && isPileUpJetPIDtask[i];
2718 if (fUseInclusivePIDtask) {
2719 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2720 isPileUpInclusivePIDtask[i] = fInclusivePIDtask[i]->GetIsPileUp(fAOD, fInclusivePIDtask[i]->GetPileUpRejectionType());
2721 if (!isPileUpInclusivePIDtask[i])
2722 fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCutAndZvtxCut);
2724 isPileUpForAllInclusivePIDTasks = isPileUpForAllInclusivePIDTasks && isPileUpInclusivePIDtask[i];
2729 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
2730 fh1EvtSelection->Fill(0.);
2731 fh1VtxSelection->Fill(primVtx->GetType());
2732 fh1EvtCent->Fill(centPercent);
2734 // Set centrality percentile fix to -1 for pp to be used for the PID framework
2740 // Call ConfigureTaskForCurrentEvent of PID tasks to ensure that everything is set up properly for the current event
2741 // (e.g. run/period dependence of max eta variation map)
2742 if (fUseInclusivePIDtask) {
2743 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2744 if (!isPileUpInclusivePIDtask[i])
2745 fInclusivePIDtask[i]->ConfigureTaskForCurrentEvent(fAOD);
2748 if (fUseJetPIDtask) {
2749 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
2750 if (!isPileUpJetPIDtask[i])
2751 fJetPIDtask[i]->ConfigureTaskForCurrentEvent(fAOD);
2756 //___ get MC information __________________________________________________________________
2758 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2760 if (fUseInclusivePIDtask) {
2761 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2762 if (!isPileUpInclusivePIDtask[i])
2763 fInclusivePIDtask[i]->FillPythiaTrials(fAvgTrials);
2767 if (fUseJetPIDtask) {
2768 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2769 if (!isPileUpJetPIDtask[i])
2770 fJetPIDtask[i]->FillPythiaTrials(fAvgTrials);
2774 Double_t ptHard = 0.;
2775 Double_t nTrials = 1; // trials for MC trigger weight for real data
2778 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2782 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2783 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2785 if(pythiaGenHeader){
2786 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
2787 nTrials = pythiaGenHeader->Trials();
2788 ptHard = pythiaGenHeader->GetPtHard();
2790 fh1PtHard->Fill(ptHard);
2791 fh1PtHardTrials->Fill(ptHard,nTrials);
2793 } else { // no pythia, hijing?
2795 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
2797 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2798 if(!hijingGenHeader){
2799 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
2801 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
2805 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2809 //___ fetch jets __________________________________________________________________________
2811 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
2813 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
2814 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2815 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2817 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
2818 Int_t nRecJetsCuts = 0;
2819 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
2820 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2821 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2822 fh1nRecJetsCuts->Fill(nRecJetsCuts);
2824 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2826 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
2828 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
2829 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2831 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2832 fh1nGenJets->Fill(nGenJets);
2835 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2836 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
2837 Int_t nRecEffJets = 0;
2838 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
2839 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2840 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2841 fh1nRecEffJets->Fill(nRecEffJets);
2844 Int_t nEmbeddedJets = 0;
2845 TArrayI iEmbeddedMatchIndex;
2846 TArrayF fEmbeddedPtFraction;
2849 if(fBranchEmbeddedJets.Length()){
2850 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
2851 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
2852 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2853 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2854 fh1nEmbeddedJets->Fill(nEmbeddedJets);
2856 Float_t maxDist = 0.3;
2858 iEmbeddedMatchIndex.Set(nEmbeddedJets);
2859 fEmbeddedPtFraction.Set(nEmbeddedJets);
2861 iEmbeddedMatchIndex.Reset(-1);
2862 fEmbeddedPtFraction.Reset(0);
2864 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
2865 fJetsRecCuts, nRecJetsCuts,
2866 iEmbeddedMatchIndex, fEmbeddedPtFraction,
2871 //____ fetch background clusters ___________________________________________________
2873 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2874 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2875 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2877 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
2878 Int_t nRecBckgJets = 0;
2879 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
2880 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2881 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2883 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
2884 Int_t nRecBckgJetsCuts = 0;
2885 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
2886 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2887 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
2888 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
2890 if(0){ // protection OB - not yet implemented
2891 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2892 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
2893 Int_t nGenBckgJets = 0;
2894 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
2895 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2896 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2897 fh1nGenBckgJets->Fill(nGenBckgJets);
2902 //____ fetch particles __________________________________________________________
2905 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
2906 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
2907 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
2909 Int_t nRecPartCuts = 0;
2910 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
2911 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2912 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",
2913 (char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2914 fh1EvtMult->Fill(nRecPartCuts);
2917 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
2919 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
2920 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2921 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2923 // Just cut on filterBit, but take the full acceptance
2924 Int_t nTCutsEfficiency = GetListOfTracks(fTracksRecCutsEfficiency, kTrackAODQualityCuts);
2925 Int_t nRecPartCutsEfficiency = 0;
2926 if(nTCutsEfficiency>=0) nRecPartCutsEfficiency = fTracksRecCutsEfficiency->GetEntries();
2927 if(fDebug>2)Printf("%s:%d Selected Rec tracks efficiency after cuts: %d %d",(char*)__FILE__,__LINE__,
2928 nTCutsEfficiency,nRecPartCutsEfficiency);
2929 if(nRecPartCutsEfficiency != nTCutsEfficiency) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",
2930 (char*)__FILE__,__LINE__,nTCutsEfficiency,nRecPartCutsEfficiency);
2932 AliPIDResponse* pidResponse = 0x0;
2933 Bool_t tuneOnDataTPC = kFALSE;
2934 if (fUseJetPIDtask || fUseInclusivePIDtask) {
2935 if (!inputHandler) {
2936 AliFatal("Input handler needed");
2940 // PID response object
2941 pidResponse = inputHandler->GetPIDResponse();
2943 AliFatal("PIDResponse object was not created");
2947 tuneOnDataTPC = pidResponse->IsTunedOnData() &&
2948 ((pidResponse->GetTunedOnDataMask() & AliPIDResponse::kDetTPC) == AliPIDResponse::kDetTPC);
2953 if(fDebug>2)Printf("%s:%d Starting processing...",(char*)__FILE__,__LINE__);
2955 //____ analysis, fill histos ___________________________________________________
2960 TClonesArray *tca = fUseInclusivePIDtask ? dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName())) : 0x0;
2962 // Fill efficiency for generated primaries and also fill histos for generated yields (primaries + all)
2963 // Efficiency, inclusive - particle level
2964 if (fUseInclusivePIDtask && tca && !isPileUpForAllInclusivePIDTasks) {
2965 for (Int_t it = 0; it < tca->GetEntriesFast(); it++) {
2966 AliAODMCParticle* part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2970 // Define clean MC sample with corresponding particle level track cuts:
2971 // - MC-track must be in desired eta range
2972 // - MC-track must be physical primary
2973 // - Species must be one of those in question
2975 if (part->Eta() > fTrackEtaMax || part->Eta() < fTrackEtaMin)
2978 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(part->GetPdgCode());
2980 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
2981 // and only affect the efficiencies for all (i.e. not identified) what is desired!
2982 //if (mcID == AliPID::kUnknown)
2985 if (!part->IsPhysicalPrimary())
2988 Int_t iMother = part->GetMother();
2990 continue; // Not a physical primary
2993 Double_t pT = part->Pt();
2995 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
2996 Double_t chargeMC = part->Charge() / 3.;
2998 if (TMath::Abs(chargeMC) < 0.01)
2999 continue; // Reject neutral particles (only relevant, if mcID is not used)
3001 Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { static_cast<Double_t>(mcID), pT, centPercent, -1, -1, -1, -1 };
3003 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3004 if (!isPileUpInclusivePIDtask[i] && fInclusivePIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(part->Eta()))) {
3005 valuesGenYield[fInclusivePIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
3006 fInclusivePIDtask[i]->FillGeneratedYield(valuesGenYield);
3010 Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), pT, part->Eta(), chargeMC,
3011 centPercent, -1, -1, -1 };// no jet pT etc since inclusive spectrum
3012 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3013 if (!isPileUpInclusivePIDtask[i])
3014 fInclusivePIDtask[i]->FillEfficiencyContainer(valuesEff, AliAnalysisTaskPID::kStepGenWithGenCuts);
3019 if (fUseInclusivePIDtask && !isPileUpForAllInclusivePIDTasks) {
3020 //Efficiency, inclusive - detector level
3021 for(Int_t it=0; it<nRecPartCutsEfficiency; ++it){
3022 // fill inclusive tracks XXX, they have the same track cuts!
3023 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCutsEfficiency->At(it));
3025 Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod)
3026 : inclusiveaod->GetTPCsignal();
3031 Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(inclusiveaod, InputEvent());
3032 Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(inclusiveaod);
3034 Int_t label = TMath::Abs(inclusiveaod->GetLabel());
3036 // find MC track in our list, if available
3037 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
3041 pdg = gentrack->GetPdgCode();
3043 // For efficiency: Reconstructed track has survived all cuts on the detector level (no cut on eta acceptance)
3044 // and has an associated MC track
3045 // -> Check whether associated MC track belongs to the clean MC sample defined above,
3046 // i.e. survives the particle level track cuts
3048 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
3050 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
3051 // and only affect the efficiencies for all (i.e. not identified) what is desired!
3052 //if (mcID == AliPID::kUnknown)
3055 // Fill efficiency for reconstructed primaries
3056 if (!gentrack->IsPhysicalPrimary())
3059 * Int_t iMother = gentrack->GetMother();
3061 * continue; // Not a physical primary
3064 if (gentrack->Eta() > fTrackEtaMax || gentrack->Eta() < fTrackEtaMin)
3067 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3068 Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), gentrack->Pt(), gentrack->Eta(), gentrack->Charge() / 3.,
3070 -1, -1, -1 };// no jet pT etc since inclusive spectrum
3071 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3072 if (!isPileUpInclusivePIDtask[i] &&
3073 ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3074 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3075 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut())))
3076 fInclusivePIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
3079 Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), inclusiveaod->Pt(), inclusiveaod->Eta(),
3080 static_cast<Double_t>(inclusiveaod->Charge()), centPercent,
3081 -1, -1, -1 };// no jet pT etc since inclusive spectrum
3082 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3083 if (!isPileUpInclusivePIDtask[i] &&
3084 ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3085 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3086 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut())))
3087 fInclusivePIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
3095 for(Int_t it=0; it<nRecPartCuts; ++it){
3096 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
3097 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
3099 // fill inclusive tracks XXX, they have the same track cuts!
3100 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
3102 if (fUseInclusivePIDtask && !isPileUpForAllInclusivePIDTasks) {
3103 Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod)
3104 : inclusiveaod->GetTPCsignal();
3109 Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(inclusiveaod, InputEvent());
3110 Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(inclusiveaod);
3112 Int_t label = TMath::Abs(inclusiveaod->GetLabel());
3114 // find MC track in our list, if available
3115 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
3119 pdg = gentrack->GetPdgCode();
3121 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3122 if (!isPileUpInclusivePIDtask[i] &&
3123 ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3124 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3125 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))) {
3126 if (fInclusivePIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(inclusiveaod->Eta())))
3127 fInclusivePIDtask[i]->ProcessTrack(inclusiveaod, pdg, centPercent, -1); // no jet pT since inclusive spectrum
3132 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
3133 Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), inclusiveaod->Pt(), inclusiveaod->Eta(),
3134 static_cast<Double_t>(inclusiveaod->Charge()), centPercent,
3136 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3137 if (!isPileUpInclusivePIDtask[i] &&
3138 ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3139 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3140 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut())))
3141 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
3144 Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
3145 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3146 if (!isPileUpInclusivePIDtask[i] &&
3147 ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3148 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3149 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut())))
3150 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3151 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
3155 if (gentrack->IsPhysicalPrimary()) {
3156 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3157 Double_t valueGenAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), gentrack->Pt(), gentrack->Eta(),
3158 gentrack->Charge() / 3., centPercent, -1, -1,
3161 Double_t valuePtResolution[AliAnalysisTaskPID::kPtResNumAxes] = { -1, gentrack->Pt(), inclusiveaod->Pt(),
3162 gentrack->Charge() / 3., centPercent };
3164 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3165 if (!isPileUpInclusivePIDtask[i] &&
3166 ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
3167 (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
3168 (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))) {
3169 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3170 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
3171 fInclusivePIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
3172 AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
3174 fInclusivePIDtask[i]->FillPtResolution(mcID, valuePtResolution);
3182 for(Int_t it=0; it<nGenPart; ++it){
3183 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
3184 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
3190 for(Int_t ij=0; ij<nRecJets; ++ij){
3191 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
3192 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3197 if(fQAMode || fFFMode){
3199 for(Int_t ij=0; ij<nGenJets; ++ij){
3200 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
3204 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3206 if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3208 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
3209 TList* jettracklist = new TList();
3210 Double_t sumPt = 0.;
3211 Bool_t isBadJet = kFALSE;
3213 if(GetFFRadius()<=0){
3214 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3216 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3219 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
3220 if(isBadJet) continue;
3222 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3224 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
3225 if(!trackVP)continue;
3226 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
3228 Float_t jetPt = jet->Pt();
3229 Float_t trackPt = trackV->Pt();
3231 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3233 if(fFFMode && (ij==0)) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
3234 if(fFFMode) fFFHistosGenInc->FillFF( trackPt, jetPt, incrementJetPt );
3235 if(it==0){ // leading track
3236 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( trackPt, jetPt, kTRUE );
3239 if (fUseJetPIDtask && incrementJetPt) {
3240 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3241 if (!isPileUpJetPIDtask[i])
3242 fJetPIDtask[i]->FillGenJets(fJetPIDtask[i]->GetCentralityPercentile(evtForCentDetermination), jetPt);
3247 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(trackVP->PdgCode());
3248 if (mcID != AliPID::kUnknown) {
3249 // WARNING: The number of jets for the different species does not make sense -> One has to take
3250 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
3251 // not to get confused
3252 fIDFFHistosGen[mcID]->FillFF(trackPt, jetPt, kFALSE);
3255 Int_t pidWeightedSpecies = fJetPIDtask->GetRandomParticleTypeAccordingToParticleFractions(trackPt, jetPt, centPercent, kTRUE);
3256 if (pidWeightedSpecies < 0 || pidWeightedSpecies >= AliPID::kSPECIES) {
3257 Printf("Failed to determine particle ID for track in jet (gen) -> ID FF histos not filled with this track!");
3258 Printf("Track details: trackPt %f, jetPt %f, centrality %f!", trackPt, jetPt, centPercent);
3261 // WARNING: The number of jets for the different species does not make sense -> One has to take
3262 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
3263 // not to get confused
3264 fIDFFHistosGen[pidWeightedSpecies]->FillFF(trackPt, jetPt, kFALSE);
3271 // Efficiency, jets - particle level
3272 if (fUseJetPIDtask && !isPileUpForAllJetPIDTasks) {
3273 AliAODMCParticle* part = dynamic_cast<AliAODMCParticle*>(jettracklist->At(it));
3275 AliError("expected ref track not found ");
3278 // Fill efficiency for generated primaries and also fill histos for generated yields (primaries + all)
3279 if (part->Eta() > fTrackEtaMax || part->Eta() < fTrackEtaMin)
3282 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(part->GetPdgCode());
3284 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
3285 // and only affect the efficiencies for all (i.e. not identified) what is desired!
3286 //if (mcID == AliPID::kUnknown)
3289 if (!part->IsPhysicalPrimary())
3292 // Int_t iMother = part->GetMother();
3293 // if (iMother >= 0)
3294 // continue; // Not a physical primary
3297 Double_t z = -1., xi = -1.;
3298 AliAnalysisTaskPID::GetJetTrackObservables(trackPt, jetPt, z, xi);
3300 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3301 Double_t chargeMC = part->Charge() / 3.;
3303 if (TMath::Abs(chargeMC) < 0.01)
3304 continue; // Reject neutral particles (only relevant, if mcID is not used)
3306 Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { static_cast<Double_t>(mcID), trackPt, centPercent, jetPt, z, xi, chargeMC };
3308 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3309 if (!isPileUpJetPIDtask[i] && fJetPIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(part->Eta()))) {
3310 valuesGenYield[fJetPIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
3311 fJetPIDtask[i]->FillGeneratedYield(valuesGenYield);
3316 Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), trackPt, part->Eta(), chargeMC,
3317 centPercent, jetPt, z, xi };
3318 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3319 if (!isPileUpJetPIDtask[i])
3320 fJetPIDtask[i]->FillEfficiencyContainer(valuesEff, AliAnalysisTaskPID::kStepGenWithGenCuts);
3326 if(fBckgType[0]!=kBckgNone)
3327 FillBckgHistos(fBckgType[0], fTracksGen, fJetsGen, jet,
3328 fFFBckgHisto0Gen, fQABckgHisto0Gen);
3329 if(fBckgType[1]!=kBckgNone)
3330 FillBckgHistos(fBckgType[1], fTracksGen, fJetsGen, jet,
3331 fFFBckgHisto1Gen, fQABckgHisto1Gen);
3332 if(fBckgType[2]!=kBckgNone)
3333 FillBckgHistos(fBckgType[2], fTracksGen, fJetsGen, jet,
3334 fFFBckgHisto2Gen, fQABckgHisto2Gen);
3335 if(fBckgType[3]!=kBckgNone)
3336 FillBckgHistos(fBckgType[3], fTracksGen, fJetsGen, jet,
3337 fFFBckgHisto3Gen, fQABckgHisto3Gen);
3338 if(fBckgType[4]!=kBckgNone)
3339 FillBckgHistos(fBckgType[4], fTracksGen, fJetsGen, jet,
3340 fFFBckgHisto4Gen, fQABckgHisto4Gen);
3341 } // end if(fBckgMode)
3344 if(fJSMode) FillJetShape(jet, jettracklist, fProNtracksLeadingJetGen, fProDelRPtSumGen, fProDelR80pcPtGen);
3346 delete jettracklist;
3350 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
3352 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
3353 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3354 if(fQAMode&2 && (ij==0)) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3356 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
3358 fhJetPtRefMultEta5->Fill(refMult5, jet->Pt());
3359 fhJetPtRefMultEta8->Fill(refMult8, jet->Pt());
3360 fhJetPtMultPercent->Fill(centPercentPP, jet->Pt());
3362 Double_t ptFractionEmbedded = 0;
3363 AliAODJet* embeddedJet = 0;
3365 if(fBranchEmbeddedJets.Length()){ // find embedded jet
3367 Int_t indexEmbedded = -1;
3368 for(Int_t i=0; i<nEmbeddedJets; i++){
3369 if(iEmbeddedMatchIndex[i] == ij){
3371 ptFractionEmbedded = fEmbeddedPtFraction[i];
3375 fh1IndexEmbedded->Fill(indexEmbedded);
3376 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
3378 if(indexEmbedded>-1){
3380 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
3381 if(!embeddedJet) continue;
3383 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
3384 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
3386 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
3387 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
3388 fh1DeltaREmbedded->Fill(deltaR);
3392 // get tracks in jet
3393 TList* jettracklist = new TList();
3394 Double_t sumPt = 0.;
3395 Bool_t isBadJet = kFALSE;
3397 if(GetFFRadius()<=0){
3398 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3400 if(fUseEmbeddedJetAxis){
3401 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3403 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3406 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
3408 if(isBadJet) continue;
3410 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
3412 TClonesArray *tca = fUseJetPIDtask ? dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName())) : 0x0;
3414 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3415 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
3416 if(!aodtrack) continue;
3418 Double_t pT = aodtrack->Pt();
3419 Float_t jetPt = jet->Pt();
3420 if(fUseEmbeddedJetPt){
3421 if(embeddedJet) jetPt = embeddedJet->Pt();
3425 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3427 if(fFFMode && (ij==0)) fFFHistosRecCuts->FillFF(pT, jetPt, incrementJetPt);
3428 if(fFFMode) fFFHistosRecCutsInc->FillFF(pT, jetPt, incrementJetPt);
3430 if(it==0){ // leading track
3431 if(fFFMode) fFFHistosRecLeadingTrack->FillFF(pT, jetPt, kTRUE);
3434 if (fUseJetPIDtask && incrementJetPt) {
3435 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3436 if (!isPileUpJetPIDtask[i])
3437 fJetPIDtask[i]->FillRecJets(fJetPIDtask[i]->GetCentralityPercentile(evtForCentDetermination), jetPt);
3441 if (fUseJetPIDtask && (!isPileUpForAllJetPIDTasks || fIDFFMode)) {
3442 Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(aodtrack)
3443 : aodtrack->GetTPCsignal();
3448 Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(aodtrack, InputEvent());
3449 Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(aodtrack);
3451 Int_t label = TMath::Abs(aodtrack->GetLabel());
3453 // Find MC track in our list, if available
3454 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
3456 Int_t mcID = AliPID::kUnknown;
3459 pdg = gentrack->GetPdgCode();
3461 // Secondaries, jets
3462 mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
3464 Double_t z = -1., xi = -1.;
3465 AliAnalysisTaskPID::GetJetTrackObservables(pT, jetPt, z, xi);
3467 Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), pT, aodtrack->Eta(), static_cast<Double_t>(aodtrack->Charge()),
3468 centPercent, jetPt, z, xi };
3469 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3470 if (!isPileUpJetPIDtask[i] &&
3471 ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3472 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3473 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut())))
3474 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
3477 Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
3478 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3479 if (!isPileUpJetPIDtask[i] &&
3480 ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3481 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3482 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut())))
3483 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3484 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
3488 if (gentrack->IsPhysicalPrimary()) {
3489 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3490 Double_t genPt = gentrack->Pt();
3491 Double_t genZ = -1., genXi = -1.;
3492 AliAnalysisTaskPID::GetJetTrackObservables(genPt, jetPt, genZ, genXi);
3493 Double_t valueGenAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), genPt, gentrack->Eta(),
3494 gentrack->Charge() / 3., centPercent, jetPt, genZ,
3497 Double_t valuePtResolution[AliAnalysisTaskPID::kPtResNumAxes] = { jetPt, genPt, pT, gentrack->Charge() / 3., centPercent };
3499 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3500 if (!isPileUpJetPIDtask[i] &&
3501 ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3502 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3503 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))) {
3504 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3505 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
3506 fJetPIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
3507 AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
3509 fJetPIDtask[i]->FillPtResolution(mcID, valuePtResolution);
3515 Bool_t filledDCA = kFALSE;
3517 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3518 if (!isPileUpJetPIDtask[i] &&
3519 ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3520 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3521 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))) {
3522 if (fJetPIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(aodtrack->Eta()))) {
3523 fJetPIDtask[i]->ProcessTrack(aodtrack, pdg, centPercent, jetPt);
3525 // Fill DCA histo (once) if at least one of the PID tasks accecpts the track
3529 Double_t dca[2] = {0., 0.}; // 0: xy; 1: z
3530 if (aodtrack->IsGlobalConstrained()) {
3531 dca[0] = aodtrack->DCA();
3532 dca[1] = aodtrack->ZAtDCA();
3535 Double_t v[3] = {0, };
3536 Double_t pos[3] = {0, };
3538 aodtrack->GetXYZ(pos);
3539 dca[0] = pos[0] - v[0];
3540 dca[1] = pos[1] - v[1];
3543 // "Unidentified" for data and MC
3544 fhDCA_XY->Fill(pT, dca[0]);
3545 fhDCA_Z->Fill(pT, dca[1]);
3547 // "Identified" for MC
3548 if (gentrack && mcID != AliPID::kUnknown) {
3550 if (gentrack->IsPhysicalPrimary()) {
3551 fhDCA_XY_prim_MCID[mcID]->Fill(pT, dca[0]);
3552 fhDCA_Z_prim_MCID[mcID]->Fill(pT, dca[1]);
3555 fhDCA_XY_sec_MCID[mcID]->Fill(pT, dca[0]);
3556 fhDCA_Z_sec_MCID[mcID]->Fill(pT, dca[1]);
3564 if (fIDFFMode && ((!fJetPIDtask[0]->GetUseTPCCutMIGeo() && !fJetPIDtask[0]->GetUseTPCnclCut()) ||
3565 (survivedTPCCutMIGeo && fJetPIDtask[0]->GetUseTPCCutMIGeo()) ||
3566 (survivedTPCnclCut && fJetPIDtask[0]->GetUseTPCnclCut()))) {
3567 // NOTE: Just take particle fraction from first task (should anyway be the same for all tasks)
3568 Int_t pidWeightedSpecies = fJetPIDtask[0]->GetRandomParticleTypeAccordingToParticleFractions(pT, jetPt,
3569 centPercent, kTRUE);
3570 if (pidWeightedSpecies < 0 || pidWeightedSpecies >= AliPID::kSPECIES) {
3571 Printf("Failed to determine particle ID for track in jet (recCuts) -> ID FF histos not filled with this track!");
3572 Printf("Track details: trackPt %f, jetPt %f, centrality %f!", pT, jetPt, centPercent);
3575 // WARNING: The number of jets for the different species does not make sense -> One has to take
3576 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
3577 // not to get confused
3578 fIDFFHistosRecCuts[pidWeightedSpecies]->FillFF(aodtrack->Pt(), jetPt, kFALSE);
3582 // Efficiency, jets - detector level
3584 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
3585 // and only affect the efficiencies for all (i.e. not identified) what is desired!
3586 //if (mcID == AliPID::kUnknown)
3589 // Fill efficiency for reconstructed primaries
3590 if (!gentrack->IsPhysicalPrimary())
3593 Int_t iMother = gentrack->GetMother();
3595 continue; // Not a physical primary
3598 if (gentrack->Eta() > fTrackEtaMax || gentrack->Eta() < fTrackEtaMin)
3601 Double_t genZ = -1., genXi = -1.;
3602 Double_t genPt = gentrack->Pt();
3603 AliAnalysisTaskPID::GetJetTrackObservables(genPt, jetPt, genZ, genXi);
3605 Double_t measZ = -1., measXi = -1.;
3606 Double_t measPt = aodtrack->Pt();
3607 AliAnalysisTaskPID::GetJetTrackObservables(measPt, jetPt, measZ, measXi);
3610 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3611 Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), genPt, gentrack->Eta(), gentrack->Charge() / 3.,
3612 centPercent, jetPt, genZ, genXi };
3613 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3614 if (!isPileUpJetPIDtask[i] &&
3615 ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3616 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3617 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut())))
3618 fJetPIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
3621 Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), measPt, aodtrack->Eta(), static_cast<Double_t>(aodtrack->Charge()),
3622 centPercent, jetPt, measZ, measXi };
3623 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3624 if (!isPileUpJetPIDtask[i] &&
3625 ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
3626 (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
3627 (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut())))
3628 fJetPIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
3635 if(fBckgMode && (ij==0)){
3636 if(fBckgType[0]!=kBckgNone)
3637 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet,
3638 fFFBckgHisto0RecCuts,fQABckgHisto0RecCuts, fh1BckgMult0);
3639 if(fBckgType[1]!=kBckgNone)
3640 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet,
3641 fFFBckgHisto1RecCuts,fQABckgHisto1RecCuts, fh1BckgMult1);
3642 if(fBckgType[2]!=kBckgNone)
3643 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet,
3644 fFFBckgHisto2RecCuts,fQABckgHisto2RecCuts, fh1BckgMult1);
3645 if(fBckgType[3]!=kBckgNone)
3646 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet,
3647 fFFBckgHisto3RecCuts,fQABckgHisto3RecCuts, fh1BckgMult2);
3648 if(fBckgType[4]!=kBckgNone)
3649 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet,
3650 fFFBckgHisto4RecCuts,fQABckgHisto4RecCuts, fh1BckgMult3);
3651 } // end if(fBckgMode)
3654 if(fJSMode && (ij==0)) FillJetShape(jet, jettracklist, fProNtracksLeadingJet, fProDelRPtSum, fProDelR80pcPt);
3656 delete jettracklist;
3658 } // end: cut embedded ratio
3659 } // end: leading jet or all jets
3660 } // end: rec. jets after cuts
3661 } // end: QA, FF and intra-jet
3664 // ____ efficiency _______________________________
3666 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
3668 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
3672 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
3675 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
3676 TArrayI indexAODTrSecNS;
3678 TArrayI indexMCTrSecNS;
3680 TArrayI indexAODTrSecS;
3682 TArrayI indexMCTrSecS;
3684 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
3685 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
3687 Int_t nTracksAODMCChargedSecNS = GetListOfTracks(fTracksAODMCChargedSecNS, kTrackAODMCChargedSecNS);
3688 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecNS);
3690 Int_t nTracksAODMCChargedSecS = GetListOfTracks(fTracksAODMCChargedSecS, kTrackAODMCChargedSecS);
3691 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks S: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecS);
3693 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
3694 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
3696 // associate gen and rec tracks, store indices in TArrays
3697 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
3698 AssociateGenRec(fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,indexMCTrSecNS,isGenSecNS,fh2PtRecVsGenSec);
3699 AssociateGenRec(fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,indexMCTrSecS,isGenSecS,fh2PtRecVsGenSec);
3702 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
3705 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecNS,fTracksAODMCChargedSecNS,indexAODTrSecNS,isGenSecNS);
3706 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecS,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS);
3707 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecSsc,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS,kTRUE);
3711 Double_t sumPtGenLeadingJetRecEff = 0;
3712 Double_t sumPtGenLeadingJetSec = 0;
3713 Double_t sumPtRecLeadingJetRecEff = 0;
3715 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
3717 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
3719 Bool_t isBadJetGenPrim = kFALSE;
3720 Bool_t isBadJetGenSec = kFALSE;
3721 Bool_t isBadJetRec = kFALSE;
3724 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
3726 // for efficiency: gen tracks from pointing with gen/rec jet
3727 TList* jettracklistGenPrim = new TList();
3729 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
3730 // note : FF recEff gen histos will be somewhat useless in this approach
3732 if(GetFFRadius() >0)
3733 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
3735 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
3737 TList* jettracklistGenSecNS = new TList();
3738 if(GetFFRadius() >0)
3739 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3741 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3743 TList* jettracklistGenSecS = new TList();
3744 if(GetFFRadius() >0)
3745 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3747 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3750 // bin efficiency in jet pt bins using rec tracks
3751 TList* jettracklistRec = new TList();
3752 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
3753 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
3756 Double_t jetEta = jet->Eta();
3757 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
3759 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
3760 if(GetFFMinNTracks()>0 && jettracklistGenSecNS->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
3761 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
3763 if(isBadJetRec) continue;
3765 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
3769 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
3770 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
3771 0,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
3773 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
3774 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
3775 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
3778 // secondaries: use jet pt from primaries
3779 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
3780 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts, indexAODTrSecNS,isGenSecNS,
3781 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
3783 else FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
3784 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS,
3785 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
3787 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecS,jet,
3788 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3789 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
3791 else FillJetTrackHistosRec(fFFHistosSecRecS,jet,
3792 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3793 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
3795 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
3796 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3797 0,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
3799 else FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
3800 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3801 jettracklistRec,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
3804 delete jettracklistGenPrim;
3805 delete jettracklistGenSecNS;
3806 delete jettracklistGenSecS;
3807 delete jettracklistRec;
3810 if(fBckgMode && fFFMode){
3812 TList* perpjettracklistGen = new TList();
3813 TList* perpjettracklistGen1 = new TList();
3814 TList* perpjettracklistGen2 = new TList();
3816 //Double_t sumPtGenPerp = 0.;
3817 Double_t sumPtGenPerp1 = 0.;
3818 Double_t sumPtGenPerp2 = 0.;
3819 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerp1);
3820 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen2, jet, TMath::Abs(GetFFRadius()) ,
3823 perpjettracklistGen->AddAll(perpjettracklistGen1);
3824 perpjettracklistGen->AddAll(perpjettracklistGen2);
3825 //sumPtGenPerp = 0.5*(sumPtGenPerp1+sumPtGenPerp2);
3827 TList* perpjettracklistGenSecNS = new TList();
3828 TList* perpjettracklistGenSecNS1 = new TList();
3829 TList* perpjettracklistGenSecNS2 = new TList();
3831 //Double_t sumPtGenPerpNS = 0.;
3832 Double_t sumPtGenPerpNS1 = 0.;
3833 Double_t sumPtGenPerpNS2 = 0.;
3834 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS1, jet, TMath::Abs(GetFFRadius()) ,
3836 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS2, jet, TMath::Abs(GetFFRadius()) ,
3839 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS1);
3840 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS2);
3841 //sumPtGenPerpNS = 0.5*(sumPtGenPerpNS1+sumPtGenPerpNS2);
3844 TList* perpjettracklistGenSecS = new TList();
3845 TList* perpjettracklistGenSecS1 = new TList();
3846 TList* perpjettracklistGenSecS2 = new TList();
3848 //Double_t sumPtGenPerpS = 0.;
3849 Double_t sumPtGenPerpS1 = 0.;
3850 Double_t sumPtGenPerpS2 = 0.;
3851 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS1, jet, TMath::Abs(GetFFRadius()) ,
3853 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS2, jet, TMath::Abs(GetFFRadius()) ,
3856 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS1);
3857 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS2);
3858 //sumPtGenPerpS = 0.5*(sumPtGenPerpS1+sumPtGenPerpS2);
3861 if(perpjettracklistGen->GetSize() != perpjettracklistGen1->GetSize() + perpjettracklistGen2->GetSize()){
3862 cout<<" ERROR: perpjettracklistGen size "<<perpjettracklistGen->GetSize()<<" perp1 "<<perpjettracklistGen1->GetSize()
3863 <<" perp2 "<<perpjettracklistGen2->GetSize()<<endl;
3867 if(perpjettracklistGenSecNS->GetSize() != perpjettracklistGenSecNS1->GetSize() + perpjettracklistGenSecNS2->GetSize()){
3868 cout<<" ERROR: perpjettracklistGenSecNS size "<<perpjettracklistGenSecNS->GetSize()<<" perp1 "<<perpjettracklistGenSecNS1->GetSize()
3869 <<" perp2 "<<perpjettracklistGenSecNS2->GetSize()<<endl;
3873 if(perpjettracklistGenSecS->GetSize() != perpjettracklistGenSecS1->GetSize() + perpjettracklistGenSecS2->GetSize()){
3874 cout<<" ERROR: perpjettracklistGenSecS size "<<perpjettracklistGenSecS->GetSize()<<" perp1 "<<perpjettracklistGenSecS1->GetSize()
3875 <<" perp2 "<<perpjettracklistGenSecS2->GetSize()<<endl;
3880 FillJetTrackHistosRec(fFFBckgHisto0RecEffRec,jet,
3881 perpjettracklistGen,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
3883 FillJetTrackHistosRec(fFFBckgHisto0SecRecNS,jet,
3884 perpjettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS);
3886 FillJetTrackHistosRec(fFFBckgHisto0SecRecS,jet,
3887 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS);
3889 FillJetTrackHistosRec(fFFBckgHisto0SecRecSsc,jet,
3890 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,0,kTRUE);
3893 delete perpjettracklistGen;
3894 delete perpjettracklistGen1;
3895 delete perpjettracklistGen2;
3897 delete perpjettracklistGenSecNS;
3898 delete perpjettracklistGenSecNS1;
3899 delete perpjettracklistGenSecNS2;
3901 delete perpjettracklistGenSecS;
3902 delete perpjettracklistGenSecS1;
3903 delete perpjettracklistGenSecS2;
3910 //___________________
3912 fTracksRecCuts->Clear();
3913 fTracksRecCutsEfficiency->Clear();
3914 fTracksGen->Clear();
3915 fTracksAODMCCharged->Clear();
3916 fTracksAODMCChargedSecNS->Clear();
3917 fTracksAODMCChargedSecS->Clear();
3918 fTracksRecQualityCuts->Clear();
3921 fJetsRecCuts->Clear();
3923 fJetsRecEff->Clear();
3924 fJetsEmbedded->Clear();
3928 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3929 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3930 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
3932 fBckgJetsRec->Clear();
3933 fBckgJetsRecCuts->Clear();
3934 fBckgJetsGen->Clear();
3939 PostData(1, fCommonHistList);
3941 if (fUseJetPIDtask) {
3942 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3943 fJetPIDtask[i]->PostOutputData();
3947 if (fUseInclusivePIDtask) {
3948 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3949 fInclusivePIDtask[i]->PostOutputData();
3954 //______________________________________________________________
3955 void AliAnalysisTaskIDFragmentationFunction::Terminate(Option_t *)
3959 if(fDebug > 1) printf("AliAnalysisTaskIDFragmentationFunction::Terminate() \n");
3962 //_________________________________________________________________________________
3963 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
3965 // fill list of tracks selected according to type
3967 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
3970 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
3974 if(!fAOD) return -1;
3976 if(!fAOD->GetTracks()) return 0;
3978 if(type==kTrackUndef) return 0;
3982 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
3984 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
3985 if(!aodExtraTracks)return iCount;
3986 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
3987 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
3988 if (!track) continue;
3990 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
3993 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
3995 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
3997 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
3998 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
3999 if(tr->Pt() < fTrackPtCut) continue;
4007 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
4009 // all rec. tracks, esd filter mask, eta range
4011 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
4012 AliAODTrack *tr = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(it));
4013 if(!tr) AliFatal("Not a standard AOD");
4015 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
4017 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
4018 if(type == kTrackAODCuts){
4019 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
4020 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
4021 if(tr->Pt() < fTrackPtCut) continue;
4028 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
4029 // kine particles, all or rather charged
4030 if(!fMCEvent) return iCount;
4032 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
4033 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
4035 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
4036 if(part->Charge()==0) continue;
4038 if(type == kTrackKineChargedAcceptance &&
4039 ( part->Eta() < fTrackEtaMin
4040 || part->Eta() > fTrackEtaMax
4041 || part->Phi() < fTrackPhiMin
4042 || part->Phi() > fTrackPhiMax
4043 || part->Pt() < fTrackPtCut)) continue;
4050 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS) {
4051 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
4052 if(!fAOD) return -1;
4054 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4055 if(!tca)return iCount;
4057 for(int it=0; it<tca->GetEntriesFast(); ++it){
4058 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
4060 if(type != kTrackAODMCChargedSecNS && type != kTrackAODMCChargedSecS && !part->IsPhysicalPrimary())continue;
4061 if((type == kTrackAODMCChargedSecNS || type == kTrackAODMCChargedSecS) && part->IsPhysicalPrimary())continue;
4063 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
4064 if(part->Charge()==0) continue;
4066 if(type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
4067 Bool_t isFromStrange = kFALSE;
4068 Int_t iMother = part->GetMother();
4070 AliAODMCParticle *partM = dynamic_cast<AliAODMCParticle*>(tca->At(iMother));
4071 if(!partM) continue;
4073 Int_t codeM = TMath::Abs(partM->GetPdgCode());
4074 Int_t mfl = Int_t (codeM/ TMath::Power(10, Int_t(TMath::Log10(codeM))));
4076 if (mfl == 3 && codeM != 3) isFromStrange = kTRUE;
4077 if(codeM == 130) isFromStrange = kTRUE; // K0 long
4078 if(part->IsSecondaryFromMaterial()) isFromStrange = kFALSE; // strange resonances from hadronic showers ?
4081 // cout<<" mfl "<<mfl<<" codeM "<<partM->GetPdgCode()<<" code this track "<<part->GetPdgCode()<<endl;
4082 // cout<<" index this track "<<it<<" index daughter 0 "<<partM->GetDaughter(0)<<" 1 "<<partM->GetDaughter(1)<<endl;
4085 if(type==kTrackAODMCChargedSecNS && isFromStrange) continue;
4086 if(type==kTrackAODMCChargedSecS && !isFromStrange) continue;
4090 if(type==kTrackAODMCChargedAcceptance &&
4091 ( part->Eta() > fTrackEtaMax
4092 || part->Eta() < fTrackEtaMin
4093 || part->Phi() > fTrackPhiMax
4094 || part->Phi() < fTrackPhiMin
4095 || part->Pt() < fTrackPtCut)) continue;
4107 // _______________________________________________________________________________
4108 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfJets(TList *list, Int_t type)
4110 // fill list of jets selected according to type
4113 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4117 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4119 if(fBranchRecJets.Length()==0){
4120 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4121 if(fDebug>1)fAOD->Print();
4125 TClonesArray *aodRecJets = 0;
4126 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
4127 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
4128 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
4131 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
4132 if(fDebug>1)fAOD->Print();
4136 // Reorder jet pt and fill new temporary AliAODJet objects
4139 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4141 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4144 if( tmp->Pt() < fJetPtCut ) continue;
4145 if( type == kJetsRecAcceptance &&
4146 ( tmp->Eta() < fJetEtaMin
4147 || tmp->Eta() > fJetEtaMax
4148 || tmp->Phi() < fJetPhiMin
4149 || tmp->Phi() > fJetPhiMax )) continue;
4160 else if(type == kJetsKine || type == kJetsKineAcceptance){
4166 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
4170 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
4171 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
4172 AliGenHijingEventHeader* hijingGenHeader = 0x0;
4174 if(!pythiaGenHeader){
4175 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
4177 if(!hijingGenHeader){
4178 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
4181 TLorentzVector mom[4];
4183 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
4185 for(Int_t i=0; i<2; ++i){
4186 if(!mom[i].Pt()) continue;
4187 jet[i] = new AliAODJet(mom[i]);
4189 if( type == kJetsKineAcceptance &&
4190 ( jet[i]->Eta() < fJetEtaMin
4191 || jet[i]->Eta() > fJetEtaMax
4192 || jet[i]->Phi() < fJetPhiMin
4193 || jet[i]->Phi() > fJetPhiMax )) continue;
4203 // fetch the pythia generated jets
4204 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
4207 AliAODJet *jet = new AliAODJet();
4208 pythiaGenHeader->TriggerJet(ip, p);
4209 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
4211 if( type == kJetsKineAcceptance &&
4212 ( jet->Eta() < fJetEtaMin
4213 || jet->Eta() > fJetEtaMax
4214 || jet->Phi() < fJetPhiMin
4215 || jet->Phi() > fJetPhiMax )) continue;
4223 else if(type == kJetsGen || type == kJetsGenAcceptance ){
4225 if(fBranchGenJets.Length()==0){
4226 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
4230 TClonesArray *aodGenJets = 0;
4231 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
4232 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
4233 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
4237 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
4239 if(fDebug>1)fAOD->Print();
4245 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
4247 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
4250 if( tmp->Pt() < fJetPtCut ) continue;
4251 if( type == kJetsGenAcceptance &&
4252 ( tmp->Eta() < fJetEtaMin
4253 || tmp->Eta() > fJetEtaMax
4254 || tmp->Phi() < fJetPhiMin
4255 || tmp->Phi() > fJetPhiMax )) continue;
4263 else if(type == kJetsEmbedded){ // embedded jets
4265 if(fBranchEmbeddedJets.Length()==0){
4266 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
4267 if(fDebug>1)fAOD->Print();
4271 TClonesArray *aodEmbeddedJets = 0;
4272 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
4273 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
4274 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
4276 if(!aodEmbeddedJets){
4277 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
4278 if(fDebug>1)fAOD->Print();
4282 // Reorder jet pt and fill new temporary AliAODJet objects
4283 Int_t nEmbeddedJets = 0;
4285 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
4287 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
4290 if( tmp->Pt() < fJetPtCut ) continue;
4291 if( tmp->Eta() < fJetEtaMin
4292 || tmp->Eta() > fJetEtaMax
4293 || tmp->Phi() < fJetPhiMin
4294 || tmp->Phi() > fJetPhiMax ) continue;
4302 return nEmbeddedJets;
4305 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
4310 // ___________________________________________________________________________________
4311 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
4313 // fill list of bgr clusters selected according to type
4315 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
4317 if(fBranchRecBckgClusters.Length()==0){
4318 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
4319 if(fDebug>1)fAOD->Print();
4323 TClonesArray *aodRecJets = 0;
4324 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
4325 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
4326 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
4329 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
4330 if(fDebug>1)fAOD->Print();
4334 // Reorder jet pt and fill new temporary AliAODJet objects
4337 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
4339 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
4342 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
4343 if( type == kJetsRecAcceptance &&
4344 ( tmp->Eta() < fJetEtaMin
4345 || tmp->Eta() > fJetEtaMax
4346 || tmp->Phi() < fJetPhiMin
4347 || tmp->Phi() > fJetPhiMax )) continue;
4361 // MC clusters still Under construction
4367 // _________________________________________________________________________________________________________
4368 void AliAnalysisTaskIDFragmentationFunction::SetProperties(THnSparse* h, Int_t dim, const char** labels)
4370 // Set properties of THnSparse
4372 for(Int_t i=0; i<dim; i++){
4373 h->GetAxis(i)->SetTitle(labels[i]);
4374 h->GetAxis(i)->SetTitleColor(1);
4378 // __________________________________________________________________________________________
4379 void AliAnalysisTaskIDFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
4381 //Set properties of histos (x and y title)
4385 h->GetXaxis()->SetTitleColor(1);
4386 h->GetYaxis()->SetTitleColor(1);
4389 // _________________________________________________________________________________________________________
4390 void AliAnalysisTaskIDFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
4392 //Set properties of histos (x,y and z title)
4397 h->GetXaxis()->SetTitleColor(1);
4398 h->GetYaxis()->SetTitleColor(1);
4399 h->GetZaxis()->SetTitleColor(1);
4402 // ________________________________________________________________________________________________________________________________________________________
4403 void AliAnalysisTaskIDFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
4404 Double_t radius, Double_t& sumPt, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
4406 // fill list of tracks in cone around jet axis
4409 Bool_t isBadMaxPt = kFALSE;
4410 Bool_t isBadMinPt = kTRUE;
4413 jet->PxPyPz(jetMom);
4414 TVector3 jet3mom(jetMom);
4416 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4418 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4420 Double_t trackMom[3];
4421 track->PxPyPz(trackMom);
4422 TVector3 track3mom(trackMom);
4424 Double_t dR = jet3mom.DeltaR(track3mom);
4428 outputlist->Add(track);
4430 sumPt += track->Pt();
4432 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
4433 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
4438 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
4439 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
4444 // _________________________________________________________________________________________________________________________________________________________________
4445 void AliAnalysisTaskIDFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
4447 // list of jet tracks from trackrefs
4449 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
4451 Bool_t isBadMaxPt = kFALSE;
4452 Bool_t isBadMinPt = kTRUE;
4454 for(Int_t itrack=0; itrack<nTracks; itrack++) {
4456 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
4458 AliError("expected ref track not found ");
4462 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
4463 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
4464 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
4470 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
4471 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
4476 // _ ________________________________________________________________________________________________________________________________
4477 void AliAnalysisTaskIDFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
4478 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
4480 // associate generated and reconstructed tracks, fill TArrays of list indices
4482 Int_t nTracksRec = tracksRec->GetSize();
4483 Int_t nTracksGen = tracksAODMCCharged->GetSize();
4484 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4487 if(!nTracksGen) return;
4491 indexAODTr.Set(nTracksGen);
4492 indexMCTr.Set(nTracksRec);
4493 isRefGen.Set(nTracksGen);
4495 indexAODTr.Reset(-1);
4496 indexMCTr.Reset(-1);
4499 // loop over reconstructed tracks, get generated track
4501 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
4503 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
4504 if(!rectrack)continue;
4505 Int_t label = TMath::Abs(rectrack->GetLabel());
4507 // find MC track in our list
4508 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
4510 Int_t listIndex = -1;
4511 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
4515 indexAODTr[listIndex] = iRec;
4516 indexMCTr[iRec] = listIndex;
4521 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
4523 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4525 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
4526 if(!gentrack)continue;
4527 Int_t pdg = gentrack->GetPdgCode();
4529 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
4530 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
4531 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
4533 isRefGen[iGen] = kTRUE;
4535 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4538 Float_t genPt = gentrack->Pt();
4539 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
4541 Float_t recPt = vt->Pt();
4542 fh2PtRecVsGen->Fill(genPt,recPt);
4549 // _____________________________________________________________________________________________________________________________________________
4550 void AliAnalysisTaskIDFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
4551 const TArrayI& indexAODTr, const TArrayS& isRefGen, Bool_t scaleStrangeness){
4553 // fill QA for single track reconstruction efficiency
4555 Int_t nTracksGen = tracksGen->GetSize();
4557 if(!nTracksGen) return;
4559 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4561 if(isRefGen[iGen] != 1) continue; // select primaries
4563 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
4564 if(!gentrack) continue;
4565 Double_t ptGen = gentrack->Pt();
4566 Double_t etaGen = gentrack->Eta();
4567 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
4569 // apply same acc & pt cuts as for FF GetMCStrangenessFactorCMS
4571 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
4572 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
4573 if(ptGen < fTrackPtCut) continue;
4575 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
4577 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4579 if(iRec>=0 && trackQARec){
4580 if(scaleStrangeness){
4581 //Double_t weight = GetMCStrangenessFactor(ptGen);
4582 Double_t weight = GetMCStrangenessFactorCMS(gentrack);
4583 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
4585 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
4590 // ______________________________________________________________________________________________________________________________________________________
4592 void AliAnalysisTaskIDFragmentationFunction::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
4593 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
4594 const TArrayS& isRefGen, TList* jetTrackListTR, Bool_t scaleStrangeness,
4595 Bool_t fillJS, TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt)
4597 // fill objects for jet track reconstruction efficiency or secondaries contamination
4598 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
4599 // jetTrackListTR pointer: track refs if not NULL
4602 // ensure proper normalization, even for secondaries
4603 Double_t jetPtRec = jet->Pt();
4604 ffhistRec->FillFF(-1, jetPtRec, kTRUE);
4606 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
4607 if(nTracksJet == 0) return;
4609 TList* listRecTracks = new TList();
4610 listRecTracks->Clear();
4612 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
4614 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
4615 if(!gentrack)continue;
4616 // find jet track in gen tracks list
4617 Int_t iGen = tracksGen->IndexOf(gentrack);
4620 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
4624 if(isRefGen[iGen] != 1) continue; // select primaries
4626 Double_t ptGen = gentrack->Pt();
4627 Double_t etaGen = gentrack->Eta();
4628 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
4630 // gen level acc & pt cuts - skip in case of track refs
4631 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
4632 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
4633 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
4636 Double_t ptRec = -1;
4638 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4639 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
4641 Bool_t isJetTrack = kFALSE;
4642 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
4646 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
4647 if(!rectrack) continue;
4649 ptRec = rectrack->Pt();
4652 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
4653 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
4658 Double_t trackPt = ptRec;
4659 Bool_t incrementJetPt = kFALSE;
4661 if(scaleStrangeness){
4662 //Double_t weight = GetMCStrangenessFactor(ptGen);
4663 Double_t weight = GetMCStrangenessFactorCMS(gentrack);
4665 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt, 0, kTRUE, weight );
4668 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt );
4671 listRecTracks->Add(rectrack);
4678 if(fillJS) FillJetShape(jet,listRecTracks,hProNtracksLeadingJet, hProDelRPtSum, hProDelR80pcPt,0,0,scaleStrangeness);
4680 delete listRecTracks;
4684 // _____________________________________________________________________________________________________________________________________________________________________
4685 void AliAnalysisTaskIDFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
4687 // List of tracks in cone perpendicular to the jet azimuthal direction
4690 jet->PxPyPz(jetMom);
4692 TVector3 jet3mom(jetMom);
4693 // Rotate phi and keep eta unchanged
4694 Double_t etaTilted = jet3mom.Eta();
4695 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
4696 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
4698 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4701 if( fUseExtraTracksBgr != 1){
4702 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4703 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4704 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4708 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4710 Double_t trackMom[3];
4711 track->PxPyPz(trackMom);
4712 TVector3 track3mom(trackMom);
4714 Double_t deta = track3mom.Eta() - etaTilted;
4715 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
4716 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
4717 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
4721 outputlist->Add(track);
4722 sumPt += track->Pt();
4728 // ________________________________________________________________________________________________________________________________________________________
4729 void AliAnalysisTaskIDFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
4731 // List of tracks in cone perpendicular to the jet azimuthal direction
4734 jet->PxPyPz(jetMom);
4736 TVector3 jet3mom(jetMom);
4737 // Rotate phi and keep eta unchanged
4738 Double_t etaTilted = jet3mom.Eta();
4739 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
4740 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
4742 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
4746 if( fUseExtraTracksBgr != 1){
4747 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4748 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4749 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4753 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4755 Float_t trackEta = track->Eta();
4756 Float_t trackPhi = track->Phi();
4758 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
4760 if((trackPhi<=phiTilted+radius) &&
4761 (trackPhi>=phiTilted-radius) &&
4762 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
4764 outputlist->Add(track);
4765 sumPt += track->Pt();
4768 else if( phiTilted-radius < 0 )
4770 if((( trackPhi < phiTilted+radius ) ||
4771 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
4772 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
4774 outputlist->Add(track);
4775 sumPt += track->Pt();
4778 else if( phiTilted+radius > 2*TMath::Pi() )
4780 if((( trackPhi > phiTilted-radius ) ||
4781 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
4782 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
4784 outputlist->Add(track);
4785 sumPt += track->Pt();
4790 // Jet area - Temporarily added should be modified with the proper jet area value
4791 Float_t areaJet = CalcJetArea(etaTilted,radius);
4792 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
4794 normFactor = (Float_t) 1. / (areaJet / areaTilted);
4799 // ________________________________________________________________________________________________________________________________________________________
4800 void AliAnalysisTaskIDFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, const TList* jetlist,
4803 // List of tracks outside cone around N jet axis
4804 // Particles taken randomly
4807 // Int_t nj = jetlist->GetSize();
4808 Float_t rc = TMath::Abs(GetFFRadius());
4809 Float_t rcl = GetFFBckgRadius();
4811 // Estimate jet and background areas
4812 Float_t* areaJet = new Float_t[nCases];
4813 memset(areaJet, 0, sizeof(Float_t) * nCases);
4814 Float_t* areaJetLarge = new Float_t[nCases];
4815 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
4816 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
4817 Float_t areaOut = areaFull;
4819 //estimate jets and background areas
4822 TList* templist = new TList();
4823 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
4825 for(Int_t ij=0; ij<nCases; ++ij)
4827 // Get jet information
4828 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
4831 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
4832 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
4833 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
4836 areaJet[ij] = CalcJetArea(etaJet,rc);
4838 // Area jet larger angle
4839 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
4842 areaOut = areaOut - areaJetLarge[ij];
4846 // List of all tracks outside jet areas
4847 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4850 if( fUseExtraTracksBgr != 1){
4851 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4852 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4853 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4857 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4860 Double_t trackMom[3];
4861 track->PxPyPz(trackMom);
4862 TVector3 track3mom(trackMom);
4864 Double_t *dR = new Double_t[nCases];
4865 for(Int_t ij=0; ij<nCases; ij++)
4866 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
4868 if((nCases==1 && (dR[0]>rcl)) ||
4869 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
4870 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
4872 templist->Add(track);
4878 // Take tracks randomly
4879 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
4880 TArrayI* ar = new TArrayI(nOut);
4882 for(Int_t init=0; init<nOut; init++)
4885 Int_t *randIndex = new Int_t[nScaled];
4886 for(Int_t init2=0; init2<nScaled; init2++)
4887 randIndex[init2] = -1;
4889 // Select nScaled different random numbers in nOut
4890 for(Int_t i=0; i<nScaled; i++)
4892 Int_t* tmpArr = new Int_t[nOut-i];
4893 Int_t temp = fRandom->Integer(nOut-i);
4894 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
4896 if(ind<temp) tmpArr[ind] = (*ar)[ind];
4897 else tmpArr[ind] = (*ar)[ind+1];
4899 randIndex[i] = (*ar)[temp];
4901 ar->Set(nOut-i-1,tmpArr);
4907 for(Int_t ipart=0; ipart<nScaled; ipart++)
4909 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
4910 outputlist->Add(track);
4911 sumPt += track->Pt();
4918 delete [] areaJetLarge;
4921 delete [] randIndex;
4925 // ________________________________________________________________________________________________________________________________________________________
4926 void AliAnalysisTaskIDFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist,
4927 const TList* jetlist, Double_t& sumPt, Double_t &normFactor)
4929 // List of tracks outside cone around N jet axis
4930 // All particles taken + final scaling factor
4933 Float_t rc = TMath::Abs(GetFFRadius());
4934 Float_t rcl = GetFFBckgRadius();
4936 // Estimate jet and background areas
4937 Float_t* areaJet = new Float_t[nCases];
4938 memset(areaJet, 0, sizeof(Float_t) * nCases);
4939 Float_t* areaJetLarge = new Float_t[nCases];
4940 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
4941 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
4942 Float_t areaOut = areaFull;
4944 //estimate jets and background areas
4947 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
4949 for(Int_t ij=0; ij<nCases; ++ij)
4951 // Get jet information
4952 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
4955 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
4956 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
4957 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
4960 areaJet[ij] = CalcJetArea(etaJet,rc);
4962 // Area jet larger angle
4963 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
4965 // Outside jets area
4966 areaOut = areaOut - areaJetLarge[ij];
4970 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4973 if( fUseExtraTracksBgr != 1){
4974 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4975 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4976 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4980 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4982 Double_t trackMom[3];
4983 track->PxPyPz(trackMom);
4984 TVector3 track3mom(trackMom);
4986 Double_t *dR = new Double_t[nCases];
4987 for(Int_t ij=0; ij<nCases; ij++)
4988 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
4991 (nCases==1 && (dR[0]>rcl)) ||
4992 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
4993 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
4995 outputlist->Add(track);
4996 sumPt += track->Pt();
5002 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
5003 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
5008 delete [] areaJetLarge;
5013 // ______________________________________________________________________________________________________________________________________________________
5014 Float_t AliAnalysisTaskIDFragmentationFunction::CalcJetArea(Float_t etaJet, Float_t rc) const
5016 // calculate area of jet with eta etaJet and radius rc
5018 Float_t detamax = etaJet + rc;
5019 Float_t detamin = etaJet - rc;
5020 Float_t accmax = 0.0; Float_t accmin = 0.0;
5021 if(detamax > fTrackEtaMax){ // sector outside etamax
5022 Float_t h = fTrackEtaMax - etaJet;
5023 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5025 if(detamin < fTrackEtaMin){ // sector outside etamin
5026 Float_t h = fTrackEtaMax + etaJet;
5027 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
5029 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
5035 // ___________________________________________________________________________________________________________________________
5036 void AliAnalysisTaskIDFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
5038 // fill tracks from bckgCluster branch in list,
5039 // for all clusters outside jet cone
5040 // sum up total area of clusters
5042 Double_t rc = GetFFRadius();
5043 Double_t rcl = GetFFBckgRadius();
5045 Double_t areaTotal = 0;
5046 Double_t sumPtTotal = 0;
5048 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
5050 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
5052 Double_t dR = jet->DeltaR(bgrCluster);
5054 if(dR<rcl) continue;
5056 Double_t clusterPt = bgrCluster->Pt();
5057 Double_t area = bgrCluster->EffectiveAreaCharged();
5059 sumPtTotal += clusterPt;
5061 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
5063 for(Int_t it = 0; it<nTracksJet; it++){
5065 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5066 if( fUseExtraTracksBgr != 1){
5067 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
5068 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5069 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5073 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
5074 if(!track) continue;
5076 Float_t trackPt = track->Pt();
5077 Float_t trackEta = track->Eta();
5078 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5080 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5081 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5082 if(trackPt < fTrackPtCut) continue;
5084 outputlist->Add(track);
5088 Double_t areaJet = TMath::Pi()*rc*rc;
5089 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
5094 // _______________________________________________________________________________________________________________________
5095 void AliAnalysisTaskIDFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
5097 // fill tracks from bckgCluster branch,
5098 // using cluster with median density (odd number of clusters)
5099 // or picking randomly one of the two closest to median (even number)
5103 const Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
5105 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
5107 Double_t* bgrDensity = new Double_t[nBckgClusters];
5108 Int_t* indices = new Int_t[nBckgClusters];
5110 for(Int_t ij=0; ij<nBckgClusters; ++ij){
5112 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
5113 Double_t clusterPt = bgrCluster->Pt();
5114 Double_t area = bgrCluster->EffectiveAreaCharged();
5116 Double_t density = 0;
5117 if(area>0) density = clusterPt/area;
5119 bgrDensity[ij] = density;
5123 TMath::Sort(nBckgClusters, bgrDensity, indices);
5125 // get median cluster
5127 AliAODJet* medianCluster = 0;
5128 //Double_t medianDensity = 0;
5130 if(TMath::Odd(nBckgClusters)){
5132 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
5133 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
5135 //Double_t clusterPt = medianCluster->Pt();
5136 //Double_t area = medianCluster->EffectiveAreaCharged();
5138 //if(area>0) medianDensity = clusterPt/area;
5142 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
5143 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
5145 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
5146 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
5148 //Double_t density1 = 0;
5149 //Double_t clusterPt1 = medianCluster1->Pt();
5150 //Double_t area1 = medianCluster1->EffectiveAreaCharged();
5151 //if(area1>0) density1 = clusterPt1/area1;
5153 //Double_t density2 = 0;
5154 //Double_t clusterPt2 = medianCluster2->Pt();
5155 //Double_t area2 = medianCluster2->EffectiveAreaCharged();
5156 //if(area2>0) density2 = clusterPt2/area2;
5158 //medianDensity = 0.5*(density1+density2);
5160 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
5163 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
5165 for(Int_t it = 0; it<nTracksJet; it++){
5167 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
5168 if( fUseExtraTracksBgr != 1){
5169 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
5170 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5171 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
5175 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
5176 if(!track) continue;
5178 Float_t trackPt = track->Pt();
5179 Float_t trackEta = track->Eta();
5180 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
5182 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
5183 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
5184 if(trackPt < fTrackPtCut) continue;
5186 outputlist->Add(track);
5189 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
5190 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
5192 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
5196 delete[] bgrDensity;
5200 // ______________________________________________________________________________________________________________________________________________________
5201 void AliAnalysisTaskIDFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet,
5202 AliFragFuncHistos* ffbckghistocuts, AliFragFuncQATrackHistos* qabckghistocuts, TH1F* fh1Mult){
5204 // List of tracks outside jets for background study
5205 TList* tracklistout2jets = new TList();
5206 TList* tracklistout3jets = new TList();
5207 TList* tracklistout2jetsStat = new TList();
5208 TList* tracklistout3jetsStat = new TList();
5209 Double_t sumPtOut2Jets = 0.;
5210 Double_t sumPtOut3Jets = 0.;
5211 Double_t sumPtOut2JetsStat = 0.;
5212 Double_t sumPtOut3JetsStat = 0.;
5213 Double_t normFactor2Jets = 0.;
5214 Double_t normFactor3Jets = 0.;
5216 Int_t nRecJetsCuts = inputjetlist->GetEntries();
5218 if(nRecJetsCuts>1) {
5219 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
5220 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
5223 if(nRecJetsCuts>2) {
5224 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
5225 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
5228 if(type==kBckgOutLJ || type==kBckgOutAJ)
5230 TList* tracklistoutleading = new TList();
5231 Double_t sumPtOutLeading = 0.;
5232 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
5233 if(type==kBckgOutLJ && fh1Mult) fh1Mult->Fill(tracklistoutleading->GetSize());
5235 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
5237 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
5238 if(!trackVP) continue;
5239 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5241 Float_t jetPt = jet->Pt();
5242 Float_t trackPt = trackV->Pt();
5244 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5246 if(type==kBckgOutLJ)
5248 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
5250 // Fill track QA for background
5251 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5254 // All cases included
5255 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5257 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5261 // Increment jet pt with one entry in case #tracks outside jets = 0
5262 if(tracklistoutleading->GetSize()==0) {
5263 Float_t jetPt = jet->Pt();
5264 Bool_t incrementJetPt = kTRUE;
5265 if(type==kBckgOutLJ)
5267 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5269 // All cases included
5270 if(nRecJetsCuts==1 && type==kBckgOutAJ)
5272 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5275 delete tracklistoutleading;
5277 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
5279 TList* tracklistoutleadingStat = new TList();
5280 Double_t sumPtOutLeadingStat = 0.;
5281 Double_t normFactorLeading = 0.;
5283 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
5284 if(type==kBckgOutLJStat && fh1Mult) fh1Mult->Fill(tracklistoutleadingStat->GetSize());
5286 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
5288 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
5289 if(!trackVP) continue;
5290 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5292 Float_t jetPt = jet->Pt();
5293 Float_t trackPt = trackV->Pt();
5294 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5297 if(type==kBckgOutLJStat)
5299 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
5301 // Fill track QA for background
5302 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
5305 // All cases included
5306 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
5308 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
5309 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5314 // Increment jet pt with one entry in case #tracks outside jets = 0
5315 if(tracklistoutleadingStat->GetSize()==0) {
5316 Float_t jetPt = jet->Pt();
5317 Bool_t incrementJetPt = kTRUE;
5318 if(type==kBckgOutLJStat)
5320 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
5322 // All cases included
5323 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
5325 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
5329 delete tracklistoutleadingStat;
5332 if(type==kBckgPerp || type==kBckgPerp2 || type==kBckgPerp2Area)
5334 Double_t sumPtPerp1 = 0.;
5335 Double_t sumPtPerp2 = 0.;
5336 TList* tracklistperp = new TList();
5337 TList* tracklistperp1 = new TList();
5338 TList* tracklistperp2 = new TList();
5341 if(type == kBckgPerp2) norm = 2; // in FillFF() scaleFac = 1/norm = 0.5 - account for double area;
5342 if(type == kBckgPerp2Area) norm = 2*TMath::Pi()*TMath::Abs(GetFFRadius())*TMath::Abs(GetFFRadius()) / jet->EffectiveAreaCharged(); // in FillFF() scaleFac = 1/norm;
5344 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp1,jet,TMath::Abs(GetFFRadius()),sumPtPerp1);
5345 if(type==kBckgPerp2 || type==kBckgPerp2Area) GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2., inputtracklist,tracklistperp2,jet,TMath::Abs(GetFFRadius()),sumPtPerp2);
5347 tracklistperp->AddAll(tracklistperp1);
5348 tracklistperp->AddAll(tracklistperp2);
5350 if(tracklistperp->GetSize() != tracklistperp1->GetSize() + tracklistperp2->GetSize()){
5351 cout<<" ERROR: tracklistperp size "<<tracklistperp->GetSize()<<" perp1 "<<tracklistperp1->GetSize()<<" perp2 "<<tracklistperp2->GetSize()<<endl;
5355 if(fh1Mult) fh1Mult->Fill(tracklistperp->GetSize());
5357 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
5359 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
5360 if(!trackVP)continue;
5361 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5363 Float_t jetPt = jet->Pt();
5364 Float_t trackPt = trackV->Pt();
5366 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5368 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, norm );
5370 // Fill track QA for background
5371 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5375 // Increment jet pt with one entry in case #tracks outside jets = 0
5376 if(tracklistperp->GetSize()==0) {
5377 Float_t jetPt = jet->Pt();
5378 Bool_t incrementJetPt = kTRUE;
5379 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5384 // fill for tracklistperp1/2 separately, divide norm by 2
5385 if(type==kBckgPerp){
5386 FillJetShape(jet, tracklistperp, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
5388 if(type==kBckgPerp2){
5389 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
5390 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0., kFALSE);
5392 if(type==kBckgPerp2Area){ // divide norm by 2: listperp1/2 filled separately
5393 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0.5*norm, kFALSE);
5394 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0.5*norm, kFALSE);
5398 delete tracklistperp;
5399 delete tracklistperp1;
5400 delete tracklistperp2;
5403 if(type==kBckgASide)
5405 Double_t sumPtASide = 0.;
5406 TList* tracklistaside = new TList();
5407 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,TMath::Abs(GetFFRadius()),sumPtASide);
5408 if(fh1Mult) fh1Mult->Fill(tracklistaside->GetSize());
5410 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
5412 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
5413 if(!trackVP) continue;
5414 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5416 Float_t jetPt = jet->Pt();
5417 Float_t trackPt = trackV->Pt();
5419 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5421 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5423 // Fill track QA for background
5424 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5428 if(tracklistaside->GetSize()==0) {
5429 Float_t jetPt = jet->Pt();
5430 Bool_t incrementJetPt = kTRUE;
5431 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5434 delete tracklistaside;
5437 if(type==kBckgASideWindow)
5439 Double_t normFactorASide = 0.;
5440 Double_t sumPtASideW = 0.;
5441 TList* tracklistasidew = new TList();
5442 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,TMath::Abs(GetFFRadius()),sumPtASideW,normFactorASide);
5443 if(fh1Mult) fh1Mult->Fill(tracklistasidew->GetSize());
5445 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
5447 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
5448 if(!trackVP) continue;
5449 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5451 Float_t jetPt = jet->Pt();
5452 Float_t trackPt = trackV->Pt();
5453 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5455 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
5457 // Fill track QA for background
5458 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
5462 if(tracklistasidew->GetSize()==0) {
5463 Float_t jetPt = jet->Pt();
5464 Bool_t incrementJetPt = kTRUE;
5465 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
5468 delete tracklistasidew;
5471 if(type==kBckgPerpWindow)
5473 Double_t normFactorPerp = 0.;
5474 Double_t sumPtPerpW = 0.;
5475 TList* tracklistperpw = new TList();
5476 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,TMath::Abs(GetFFRadius()),sumPtPerpW,normFactorPerp);
5477 if(fh1Mult) fh1Mult->Fill(tracklistperpw->GetSize());
5479 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
5481 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
5482 if(!trackVP) continue;
5483 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5485 Float_t jetPt = jet->Pt();
5486 Float_t trackPt = trackV->Pt();
5487 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5489 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
5491 // Fill track QA for background
5492 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
5496 if(tracklistperpw->GetSize()==0) {
5497 Float_t jetPt = jet->Pt();
5498 Bool_t incrementJetPt = kTRUE;
5499 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
5502 delete tracklistperpw;
5506 if(type==kBckgOut2J || type==kBckgOutAJ)
5508 if(type==kBckgOut2J && fh1Mult) fh1Mult->Fill(tracklistout2jets->GetSize());
5509 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
5511 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
5512 if(!trackVP) continue;
5513 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5515 Float_t jetPt = jet->Pt();
5516 Float_t trackPt = trackV->Pt();
5518 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5520 if(type==kBckgOut2J)
5522 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5523 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5526 // All cases included
5527 if(nRecJetsCuts==2 && type==kBckgOutAJ)
5529 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5534 // Increment jet pt with one entry in case #tracks outside jets = 0
5535 if(tracklistout2jets->GetSize()==0) {
5536 Float_t jetPt = jet->Pt();
5537 Bool_t incrementJetPt = kTRUE;
5538 if(type==kBckgOut2J)
5540 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5542 // All cases included
5543 if(nRecJetsCuts==2 && type==kBckgOutAJ)
5545 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5550 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
5552 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
5554 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
5555 if(!trackVP) continue;
5556 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5558 Float_t jetPt = jet->Pt();
5559 Float_t trackPt = trackV->Pt();
5560 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5562 if(type==kBckgOut2JStat)
5564 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
5566 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5569 // All cases included
5570 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
5572 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
5574 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5578 // Increment jet pt with one entry in case #tracks outside jets = 0
5579 if(tracklistout2jetsStat->GetSize()==0) {
5580 Float_t jetPt = jet->Pt();
5581 Bool_t incrementJetPt = kTRUE;
5582 if(type==kBckgOut2JStat)
5584 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
5586 // All cases included
5587 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
5589 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
5595 if(type==kBckgOut3J || type==kBckgOutAJ)
5597 if(type==kBckgOut3J && fh1Mult) fh1Mult->Fill(tracklistout3jets->GetSize());
5599 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
5601 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
5602 if(!trackVP) continue;
5603 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5605 Float_t jetPt = jet->Pt();
5606 Float_t trackPt = trackV->Pt();
5608 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5610 if(type==kBckgOut3J)
5612 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5614 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5617 // All cases included
5618 if(nRecJetsCuts==3 && type==kBckgOutAJ)
5620 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5625 // Increment jet pt with one entry in case #tracks outside jets = 0
5626 if(tracklistout3jets->GetSize()==0) {
5627 Float_t jetPt = jet->Pt();
5628 Bool_t incrementJetPt = kTRUE;
5629 if(type==kBckgOut3J)
5631 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5633 // All cases included
5634 if(nRecJetsCuts==3 && type==kBckgOutAJ)
5636 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5641 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
5643 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
5645 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
5646 if(!trackVP) continue;
5647 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5649 Float_t jetPt = jet->Pt();
5650 Float_t trackPt = trackV->Pt();
5651 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5653 if(type==kBckgOut3JStat)
5655 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
5657 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
5660 // All cases included
5661 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
5663 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
5665 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5670 // Increment jet pt with one entry in case #tracks outside jets = 0
5671 if(tracklistout3jetsStat->GetSize()==0) {
5672 Float_t jetPt = jet->Pt();
5673 Bool_t incrementJetPt = kTRUE;
5674 if(type==kBckgOut3JStat)
5676 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
5678 // All cases included
5679 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
5681 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
5687 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
5689 TList* tracklistClustersOutLeading = new TList();
5690 Double_t normFactorClusters = 0;
5691 Float_t jetPt = jet->Pt();
5693 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
5694 if(fh1Mult) fh1Mult->Fill(tracklistClustersOutLeading->GetSize());
5696 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
5698 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
5699 if(!trackVP) continue;
5700 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5702 Float_t trackPt = trackVP->Pt();
5704 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5706 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
5707 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5712 delete tracklistClustersOutLeading;
5716 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
5718 TList* tracklistClustersMedian = new TList();
5719 Double_t normFactorClusters = 0;
5720 Float_t jetPt = jet->Pt();
5722 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
5723 if(fh1Mult) fh1Mult->Fill(tracklistClustersMedian->GetSize());
5725 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
5727 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
5728 if(!trackVP) continue;
5729 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5731 Float_t trackPt = trackVP->Pt();
5733 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5735 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
5736 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5741 delete tracklistClustersMedian;
5744 delete tracklistout2jets;
5745 delete tracklistout3jets;
5746 delete tracklistout2jetsStat;
5747 delete tracklistout3jetsStat;
5750 //_____________________________________________________________________________________
5751 Double_t AliAnalysisTaskIDFragmentationFunction::GetMCStrangenessFactor(Double_t pt) const
5753 // factor strangeness data/MC as function of pt from UE analysis (Sara Vallero)
5757 if(0.150<pt && pt<0.200) alpha = 3.639;
5758 if(0.200<pt && pt<0.250) alpha = 2.097;
5759 if(0.250<pt && pt<0.300) alpha = 1.930;
5760 if(0.300<pt && pt<0.350) alpha = 1.932;
5761 if(0.350<pt && pt<0.400) alpha = 1.943;
5762 if(0.400<pt && pt<0.450) alpha = 1.993;
5763 if(0.450<pt && pt<0.500) alpha = 1.989;
5764 if(0.500<pt && pt<0.600) alpha = 1.963;
5765 if(0.600<pt && pt<0.700) alpha = 1.917;
5766 if(0.700<pt && pt<0.800) alpha = 1.861;
5767 if(0.800<pt && pt<0.900) alpha = 1.820;
5768 if(0.900<pt && pt<1.000) alpha = 1.741;
5769 if(1.000<pt && pt<1.500) alpha = 0.878;
5774 //__________________________________________________________________________________________________
5775 Double_t AliAnalysisTaskIDFragmentationFunction::GetMCStrangenessFactorCMS(AliAODMCParticle* daughter) const
5777 // strangeness ratio MC/data as function of mother pt from CMS data in |eta|<2.0
5779 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5782 AliAODMCParticle* currentMother = daughter;
5783 AliAODMCParticle* currentDaughter = daughter;
5786 // find first primary mother K0s, Lambda or Xi
5789 Int_t daughterPDG = currentDaughter->GetPdgCode();
5791 Int_t motherLabel = currentDaughter->GetMother();
5792 if(motherLabel >= tca->GetEntriesFast()){ // protection
5793 currentMother = currentDaughter;
5797 currentMother = (AliAODMCParticle*) tca->At(motherLabel);
5800 currentMother = currentDaughter;
5804 Int_t motherPDG = currentMother->GetPdgCode();
5806 // phys. primary found ?
5807 if(currentMother->IsPhysicalPrimary()) break;
5809 if(TMath::Abs(daughterPDG) == 321){ // K+/K- e.g. from phi (ref data not feeddown corrected)
5810 currentMother = currentDaughter; break;
5812 if(TMath::Abs(motherPDG) == 310 ){ // K0s e.g. from phi (ref data not feeddown corrected)
5815 if(TMath::Abs(motherPDG) == 3212 && TMath::Abs(daughterPDG) == 3122){ // mother Sigma0, daughter Lambda (this case not included in feeddown corr.)
5816 currentMother = currentDaughter; break;
5819 currentDaughter = currentMother;
5823 Int_t motherPDG = currentMother->GetPdgCode();
5824 Double_t motherGenPt = currentMother->Pt();
5826 return AliAnalysisTaskPID::GetMCStrangenessFactorCMS(motherPDG, motherGenPt);
5829 // _________________________________________________________________________________
5830 void AliAnalysisTaskIDFragmentationFunction::FillJetShape(AliAODJet* jet, TList* list,
5831 TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt,
5832 Double_t dPhiUE, Double_t normUE, Bool_t scaleStrangeness)
5834 // Fill jet shape histos
5836 const Int_t kNbinsR = 50;
5837 const Float_t kBinWidthR = 0.02;
5839 Int_t nJetTracks = list->GetEntries();
5841 Float_t pTsumA[kNbinsR] = {0.0};
5843 Float_t *delRA = new Float_t[nJetTracks];
5844 Float_t *trackPtA = new Float_t[nJetTracks];
5845 Int_t *index = new Int_t[nJetTracks];
5847 for(Int_t i=0; i<nJetTracks; i++){
5854 jet->PxPyPz(jetMom);
5855 TVector3 jet3mom(jetMom);
5857 if(TMath::Abs(dPhiUE)>0){
5858 Double_t phiTilted = jet3mom.Phi();
5859 phiTilted += dPhiUE;
5860 phiTilted = TVector2::Phi_0_2pi(phiTilted);
5861 jet3mom.SetPhi(phiTilted);
5864 Double_t jetPt = jet->Pt();
5865 Double_t sumWeights = 0;
5867 for (Int_t j =0; j<nJetTracks; j++){
5869 AliVParticle* track = dynamic_cast<AliVParticle*>(list->At(j));
5872 Double_t trackMom[3];
5873 track->PxPyPz(trackMom);
5874 TVector3 track3mom(trackMom);
5876 Double_t dR = jet3mom.DeltaR(track3mom);
5879 trackPtA[j] = track->Pt();
5881 Double_t weight = GetMCStrangenessFactor(track->Pt()); // more correctly should be gen pt
5882 sumWeights += weight;
5884 for(Int_t ibin=1; ibin<=kNbinsR; ibin++){
5885 Float_t xlow = kBinWidthR*(ibin-1);
5886 Float_t xup = kBinWidthR*ibin;
5887 if(xlow <= dR && dR < xup){
5889 if(scaleStrangeness) pTsumA[ibin-1] += track->Pt()*weight;
5890 else pTsumA[ibin-1] += track->Pt();
5898 for(Int_t ibin=0; ibin<kNbinsR; ibin++){
5899 Float_t fR = kBinWidthR*(ibin+0.5);
5901 for(Int_t k=0; k<5; k++){
5902 if(k==0){jetPtMin=20.0;jetPtMax=30.0;}
5903 if(k==1){jetPtMin=30.0;jetPtMax=40.0;}
5904 if(k==2){jetPtMin=40.0;jetPtMax=60.0;}
5905 if(k==3){jetPtMin=60.0;jetPtMax=80.0;}
5906 if(k==4){jetPtMin=80.0;jetPtMax=100.0;}
5907 if(jetPt>jetPtMin && jetPt<jetPtMax){
5909 hProDelRPtSum[k]->Fill(fR,pTsumA[ibin]);
5915 if(scaleStrangeness) hProNtracksLeadingJet->Fill(jetPt,sumWeights);
5916 else hProNtracksLeadingJet->Fill(jetPt,nJetTracks);
5918 if(normUE) hProNtracksLeadingJet->Fill(jetPt,nJetTracks/normUE);
5923 Float_t delRPtSum80pc = 0;
5925 TMath::Sort(nJetTracks,delRA,index,0);
5927 for(Int_t ii=0; ii<nJetTracks; ii++){
5929 if(scaleStrangeness){
5930 Double_t weight = GetMCStrangenessFactor(trackPtA[index[ii]]); // more correctly should be gen pt
5931 pTsum += weight*trackPtA[index[ii]];
5933 else pTsum += trackPtA[index[ii]];
5936 if(pTsum/jetPt >= 0.8000){
5937 delRPtSum80pc = delRA[index[ii]];
5941 hProDelR80pcPt->Fill(jetPt,delRPtSum80pc);
5950 // _________________________________________________________________________________
5951 Bool_t AliAnalysisTaskIDFragmentationFunction::IsSecondaryWithStrangeMotherMC(AliAODMCParticle* part)
5953 // Check whether particle is a secondary with strange mother, i.e. returns kTRUE if a strange mother is found
5954 // and the particle is NOT a physical primary. In all other cases kFALSE is returned
5956 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5960 if (part->IsPhysicalPrimary())
5963 Int_t iMother = part->GetMother();
5968 AliAODMCParticle* partM = dynamic_cast<AliAODMCParticle*>(tca->At(iMother));
5972 Int_t codeM = TMath::Abs(partM->GetPdgCode());
5973 Int_t mfl = Int_t(codeM / TMath::Power(10, Int_t(TMath::Log10(codeM))));
5974 if (mfl == 3 && codeM != 3) // codeM = 3 is for s quark