1 // *************************************************************************
3 // * Task for ID Fragmentation Function Analysis *
5 // *************************************************************************
8 /**************************************************************************
9 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
11 * Author: The ALICE Off-line Project. *
12 * Contributors are mentioned in the code where appropriate. *
14 * Permission to use, copy, modify and distribute this software and its *
15 * documentation strictly for non-commercial purposes is hereby granted *
16 * without fee, provided that the above copyright notice appears in all *
17 * copies and that both the copyright notice and this permission notice *
18 * appear in the supporting documentation. The authors make no claims *
19 * about the suitability of this software for any purpose. It is *
20 * provided "as is" without express or implied warranty. *
21 **************************************************************************/
30 #include "THnSparse.h"
37 #include "AliAODInputHandler.h"
38 #include "AliAODHandler.h"
39 #include "AliESDEvent.h"
40 #include "AliAODMCParticle.h"
41 #include "AliAODJet.h"
42 #include "AliAODJetEventBackground.h"
43 #include "AliGenPythiaEventHeader.h"
44 #include "AliGenHijingEventHeader.h"
45 #include "AliInputEventHandler.h"
47 #include "AliAnalysisHelperJetTasks.h"
48 #include "AliAnalysisManager.h"
49 #include "AliAnalysisTaskSE.h"
50 #include "AliVParticle.h"
51 #include "AliVEvent.h"
53 #include "AliAnalysisTaskPID.h"
54 #include "AliPIDResponse.h"
56 #include "AliAnalysisTaskIDFragmentationFunction.h"
61 ClassImp(AliAnalysisTaskIDFragmentationFunction)
63 //____________________________________________________________________________
64 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction()
71 ,fBranchRecJets("jets")
72 ,fBranchRecBckgClusters("")
74 ,fBranchEmbeddedJets("")
78 ,fUseAODInputJets(kTRUE)
80 ,fUsePhysicsSelection(kTRUE)
90 ,fUseExtraTracksBgr(0)
91 ,fCutFractionPtEmbedded(0)
92 ,fUseEmbeddedJetAxis(0)
112 ,fTracksRecCutsEfficiency(0)
114 ,fTracksAODMCCharged(0)
115 ,fTracksAODMCChargedSecNS(0)
116 ,fTracksAODMCChargedSecS(0)
117 ,fTracksRecQualityCuts(0)
126 ,fQATrackHistosRecCuts(0)
127 ,fQATrackHistosGen(0)
129 ,fQAJetHistosRecCuts(0)
130 ,fQAJetHistosRecCutsLeading(0)
132 ,fQAJetHistosGenLeading(0)
133 ,fQAJetHistosRecEffLeading(0)
135 ,fFFHistosRecCutsInc(0)
136 ,fFFHistosRecLeadingTrack(0)
139 ,fFFHistosGenLeadingTrack(0)
140 ,fQATrackHighPtThreshold(0)
173 ,fh1VertexNContributors(0)
185 ,fh1nRecBckgJetsCuts(0)
187 ,fh2PtRecVsGenPrim(0)
189 ,fQATrackHistosRecEffGen(0)
190 ,fQATrackHistosRecEffRec(0)
191 ,fQATrackHistosSecRecNS(0)
192 ,fQATrackHistosSecRecS(0)
193 ,fQATrackHistosSecRecSsc(0)
194 ,fFFHistosRecEffRec(0)
195 ,fFFHistosSecRecNS(0)
197 ,fFFHistosSecRecSsc(0)
204 ,fh1FractionPtEmbedded(0)
206 ,fh2DeltaPtVsJetPtEmbedded(0)
207 ,fh2DeltaPtVsRecJetPtEmbedded(0)
208 ,fh1DeltaREmbedded(0)
209 ,fQABckgHisto0RecCuts(0)
211 ,fQABckgHisto1RecCuts(0)
213 ,fQABckgHisto2RecCuts(0)
215 ,fQABckgHisto3RecCuts(0)
217 ,fQABckgHisto4RecCuts(0)
219 ,fFFBckgHisto0RecCuts(0)
221 ,fFFBckgHisto1RecCuts(0)
223 ,fFFBckgHisto2RecCuts(0)
225 ,fFFBckgHisto3RecCuts(0)
227 ,fFFBckgHisto4RecCuts(0)
229 ,fFFBckgHisto0RecEffRec(0)
230 ,fFFBckgHisto0SecRecNS(0)
231 ,fFFBckgHisto0SecRecS(0)
232 ,fFFBckgHisto0SecRecSsc(0)
234 ,fProNtracksLeadingJet(0)
236 ,fProNtracksLeadingJetGen(0)
237 ,fProDelR80pcPtGen(0)
238 ,fProNtracksLeadingJetBgrPerp2(0)
239 ,fProNtracksLeadingJetRecPrim(0)
240 ,fProDelR80pcPtRecPrim(0)
241 ,fProNtracksLeadingJetRecSecNS(0)
242 ,fProNtracksLeadingJetRecSecS(0)
243 ,fProNtracksLeadingJetRecSecSsc(0)
247 ,fOnlyLeadingJets(kFALSE)
250 ,fNumInclusivePIDtasks(0)
252 ,fNameInclusivePIDtask(0x0)
253 ,fNameJetPIDtask(0x0)
254 ,fInclusivePIDtask(0x0)
256 ,fUseInclusivePIDtask(kFALSE)
257 ,fUseJetPIDtask(kFALSE)
260 // default constructor
267 for(Int_t ii=0; ii<5; ii++){
268 fProDelRPtSum[ii] = 0;
269 fProDelRPtSumGen[ii] = 0;
270 fProDelRPtSumBgrPerp2[ii] = 0;
271 fProDelRPtSumRecPrim[ii] = 0;
272 fProDelRPtSumRecSecNS[ii] = 0;
273 fProDelRPtSumRecSecS[ii] = 0;
274 fProDelRPtSumRecSecSsc[ii] = 0;
277 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
278 fIDFFHistosRecCuts[i] = 0x0;
279 fIDFFHistosGen[i] = 0x0;
283 //_______________________________________________________________________________________________
284 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction(const char *name)
285 : AliAnalysisTaskSE(name)
291 ,fBranchRecJets("jets")
292 ,fBranchRecBckgClusters("")
294 ,fBranchEmbeddedJets("")
298 ,fUseAODInputJets(kTRUE)
300 ,fUsePhysicsSelection(kTRUE)
301 ,fEvtSelectionMask(0)
310 ,fUseExtraTracksBgr(0)
311 ,fCutFractionPtEmbedded(0)
312 ,fUseEmbeddedJetAxis(0)
313 ,fUseEmbeddedJetPt(0)
332 ,fTracksRecCutsEfficiency(0)
334 ,fTracksAODMCCharged(0)
335 ,fTracksAODMCChargedSecNS(0)
336 ,fTracksAODMCChargedSecS(0)
337 ,fTracksRecQualityCuts(0)
346 ,fQATrackHistosRecCuts(0)
347 ,fQATrackHistosGen(0)
349 ,fQAJetHistosRecCuts(0)
350 ,fQAJetHistosRecCutsLeading(0)
352 ,fQAJetHistosGenLeading(0)
353 ,fQAJetHistosRecEffLeading(0)
355 ,fFFHistosRecCutsInc(0)
356 ,fFFHistosRecLeadingTrack(0)
359 ,fFFHistosGenLeadingTrack(0)
360 ,fQATrackHighPtThreshold(0)
393 ,fh1VertexNContributors(0)
405 ,fh1nRecBckgJetsCuts(0)
407 ,fh2PtRecVsGenPrim(0)
409 ,fQATrackHistosRecEffGen(0)
410 ,fQATrackHistosRecEffRec(0)
411 ,fQATrackHistosSecRecNS(0)
412 ,fQATrackHistosSecRecS(0)
413 ,fQATrackHistosSecRecSsc(0)
414 ,fFFHistosRecEffRec(0)
415 ,fFFHistosSecRecNS(0)
417 ,fFFHistosSecRecSsc(0)
424 ,fh1FractionPtEmbedded(0)
426 ,fh2DeltaPtVsJetPtEmbedded(0)
427 ,fh2DeltaPtVsRecJetPtEmbedded(0)
428 ,fh1DeltaREmbedded(0)
429 ,fQABckgHisto0RecCuts(0)
431 ,fQABckgHisto1RecCuts(0)
433 ,fQABckgHisto2RecCuts(0)
435 ,fQABckgHisto3RecCuts(0)
437 ,fQABckgHisto4RecCuts(0)
439 ,fFFBckgHisto0RecCuts(0)
441 ,fFFBckgHisto1RecCuts(0)
443 ,fFFBckgHisto2RecCuts(0)
445 ,fFFBckgHisto3RecCuts(0)
447 ,fFFBckgHisto4RecCuts(0)
449 ,fFFBckgHisto0RecEffRec(0)
450 ,fFFBckgHisto0SecRecNS(0)
451 ,fFFBckgHisto0SecRecS(0)
452 ,fFFBckgHisto0SecRecSsc(0)
454 ,fProNtracksLeadingJet(0)
456 ,fProNtracksLeadingJetGen(0)
457 ,fProDelR80pcPtGen(0)
458 ,fProNtracksLeadingJetBgrPerp2(0)
459 ,fProNtracksLeadingJetRecPrim(0)
460 ,fProDelR80pcPtRecPrim(0)
461 ,fProNtracksLeadingJetRecSecNS(0)
462 ,fProNtracksLeadingJetRecSecS(0)
463 ,fProNtracksLeadingJetRecSecSsc(0)
465 ,fOnlyLeadingJets(kFALSE)
467 ,fNumInclusivePIDtasks(0)
469 ,fNameInclusivePIDtask(0x0)
470 ,fNameJetPIDtask(0x0)
471 ,fInclusivePIDtask(0x0)
473 ,fUseInclusivePIDtask(kFALSE)
474 ,fUseJetPIDtask(kFALSE)
484 for(Int_t ii=0; ii<5; ii++){
485 fProDelRPtSum[ii] = 0;
486 fProDelRPtSumGen[ii] = 0;
487 fProDelRPtSumBgrPerp2[ii] = 0;
488 fProDelRPtSumRecPrim[ii] = 0;
489 fProDelRPtSumRecSecNS[ii] = 0;
490 fProDelRPtSumRecSecS[ii] = 0;
491 fProDelRPtSumRecSecSsc[ii] = 0;
494 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
495 fIDFFHistosRecCuts[i] = 0x0;
496 fIDFFHistosGen[i] = 0x0;
499 DefineOutput(1,TList::Class());
502 //__________________________________________________________________________________________________________________________
503 AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction(const AliAnalysisTaskIDFragmentationFunction ©)
504 : AliAnalysisTaskSE()
507 ,fAODJets(copy.fAODJets)
508 ,fAODExtension(copy.fAODExtension)
509 ,fNonStdFile(copy.fNonStdFile)
510 ,fBranchRecJets(copy.fBranchRecJets)
511 ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
512 ,fBranchGenJets(copy.fBranchGenJets)
513 ,fBranchEmbeddedJets(copy.fBranchEmbeddedJets)
514 ,fTrackTypeGen(copy.fTrackTypeGen)
515 ,fJetTypeGen(copy.fJetTypeGen)
516 ,fJetTypeRecEff(copy.fJetTypeRecEff)
517 ,fUseAODInputJets(copy.fUseAODInputJets)
518 ,fFilterMask(copy.fFilterMask)
519 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
520 ,fEvtSelectionMask(copy.fEvtSelectionMask)
521 ,fEventClass(copy.fEventClass)
522 ,fMaxVertexZ(copy.fMaxVertexZ)
523 ,fTrackPtCut(copy.fTrackPtCut)
524 ,fTrackEtaMin(copy.fTrackEtaMin)
525 ,fTrackEtaMax(copy.fTrackEtaMax)
526 ,fTrackPhiMin(copy.fTrackPhiMin)
527 ,fTrackPhiMax(copy.fTrackPhiMax)
528 ,fUseExtraTracks(copy.fUseExtraTracks)
529 ,fUseExtraTracksBgr(copy.fUseExtraTracksBgr)
530 ,fCutFractionPtEmbedded(copy.fCutFractionPtEmbedded)
531 ,fUseEmbeddedJetAxis(copy.fUseEmbeddedJetAxis)
532 ,fUseEmbeddedJetPt(copy.fUseEmbeddedJetPt)
533 ,fJetPtCut(copy.fJetPtCut)
534 ,fJetEtaMin(copy.fJetEtaMin)
535 ,fJetEtaMax(copy.fJetEtaMax)
536 ,fJetPhiMin(copy.fJetPhiMin)
537 ,fJetPhiMax(copy.fJetPhiMax)
538 ,fFFRadius(copy.fFFRadius)
539 ,fFFMinLTrackPt(copy.fFFMinLTrackPt)
540 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
541 ,fFFMinnTracks(copy.fFFMinnTracks)
542 ,fFFBckgRadius(copy.fFFBckgRadius)
543 ,fBckgMode(copy.fBckgMode)
544 ,fQAMode(copy.fQAMode)
545 ,fFFMode(copy.fFFMode)
546 ,fIDFFMode(copy.fIDFFMode)
547 ,fEffMode(copy.fEffMode)
548 ,fJSMode(copy.fJSMode)
549 ,fAvgTrials(copy.fAvgTrials)
550 ,fTracksRecCuts(copy.fTracksRecCuts)
551 ,fTracksRecCutsEfficiency(copy.fTracksRecCutsEfficiency)
552 ,fTracksGen(copy.fTracksGen)
553 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
554 ,fTracksAODMCChargedSecNS(copy.fTracksAODMCChargedSecNS)
555 ,fTracksAODMCChargedSecS(copy.fTracksAODMCChargedSecS)
556 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
557 ,fJetsRec(copy.fJetsRec)
558 ,fJetsRecCuts(copy.fJetsRecCuts)
559 ,fJetsGen(copy.fJetsGen)
560 ,fJetsRecEff(copy.fJetsRecEff)
561 ,fJetsEmbedded(copy.fJetsEmbedded)
562 ,fBckgJetsRec(copy.fBckgJetsRec)
563 ,fBckgJetsRecCuts(copy.fBckgJetsRecCuts)
564 ,fBckgJetsGen(copy.fBckgJetsGen)
565 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
566 ,fQATrackHistosGen(copy.fQATrackHistosGen)
567 ,fQAJetHistosRec(copy.fQAJetHistosRec)
568 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
569 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
570 ,fQAJetHistosGen(copy.fQAJetHistosGen)
571 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
572 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
573 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
574 ,fFFHistosRecCutsInc(copy.fFFHistosRecCutsInc)
575 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
576 ,fFFHistosGen(copy.fFFHistosGen)
577 ,fFFHistosGenInc(copy.fFFHistosGenInc)
578 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
579 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
580 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
581 ,fFFJetPtMin(copy.fFFJetPtMin)
582 ,fFFJetPtMax(copy.fFFJetPtMax)
583 ,fFFNBinsPt(copy.fFFNBinsPt)
584 ,fFFPtMin(copy.fFFPtMin)
585 ,fFFPtMax(copy.fFFPtMax)
586 ,fFFNBinsXi(copy.fFFNBinsXi)
587 ,fFFXiMin(copy.fFFXiMin)
588 ,fFFXiMax(copy.fFFXiMax)
589 ,fFFNBinsZ(copy.fFFNBinsZ)
590 ,fFFZMin(copy.fFFZMin)
591 ,fFFZMax(copy.fFFZMax)
592 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
593 ,fQAJetPtMin(copy.fQAJetPtMin)
594 ,fQAJetPtMax(copy.fQAJetPtMax)
595 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
596 ,fQAJetEtaMin(copy.fQAJetEtaMin)
597 ,fQAJetEtaMax(copy.fQAJetEtaMax)
598 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
599 ,fQAJetPhiMin(copy.fQAJetPhiMin)
600 ,fQAJetPhiMax(copy.fQAJetPhiMax)
601 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
602 ,fQATrackPtMin(copy.fQATrackPtMin)
603 ,fQATrackPtMax(copy.fQATrackPtMax)
604 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
605 ,fQATrackEtaMin(copy.fQATrackEtaMin)
606 ,fQATrackEtaMax(copy.fQATrackEtaMax)
607 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
608 ,fQATrackPhiMin(copy.fQATrackPhiMin)
609 ,fQATrackPhiMax(copy.fQATrackPhiMax)
610 ,fCommonHistList(copy.fCommonHistList)
611 ,fh1EvtSelection(copy.fh1EvtSelection)
612 ,fh1VertexNContributors(copy.fh1VertexNContributors)
613 ,fh1VertexZ(copy.fh1VertexZ)
614 ,fh1EvtMult(copy.fh1EvtMult)
615 ,fh1EvtCent(copy.fh1EvtCent)
616 ,fh1Xsec(copy.fh1Xsec)
617 ,fh1Trials(copy.fh1Trials)
618 ,fh1PtHard(copy.fh1PtHard)
619 ,fh1PtHardTrials(copy.fh1PtHardTrials)
620 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
621 ,fh1nGenJets(copy.fh1nGenJets)
622 ,fh1nRecEffJets(copy.fh1nRecEffJets)
623 ,fh1nEmbeddedJets(copy.fh1nEmbeddedJets)
624 ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts)
625 ,fh1nGenBckgJets(copy.fh1nGenBckgJets)
626 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
627 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
628 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
629 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
630 ,fQATrackHistosSecRecNS(copy.fQATrackHistosSecRecNS)
631 ,fQATrackHistosSecRecS(copy.fQATrackHistosSecRecS)
632 ,fQATrackHistosSecRecSsc(copy.fQATrackHistosSecRecSsc)
633 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
634 ,fFFHistosSecRecNS(copy.fFFHistosSecRecNS)
635 ,fFFHistosSecRecS(copy.fFFHistosSecRecS)
636 ,fFFHistosSecRecSsc(copy.fFFHistosSecRecSsc)
638 ,fh1BckgMult0(copy.fh1BckgMult0)
639 ,fh1BckgMult1(copy.fh1BckgMult1)
640 ,fh1BckgMult2(copy.fh1BckgMult2)
641 ,fh1BckgMult3(copy.fh1BckgMult3)
642 ,fh1BckgMult4(copy.fh1BckgMult4)
643 ,fh1FractionPtEmbedded(copy.fh1FractionPtEmbedded)
644 ,fh1IndexEmbedded(copy.fh1IndexEmbedded)
645 ,fh2DeltaPtVsJetPtEmbedded(copy.fh2DeltaPtVsJetPtEmbedded)
646 ,fh2DeltaPtVsRecJetPtEmbedded(copy.fh2DeltaPtVsRecJetPtEmbedded)
647 ,fh1DeltaREmbedded(copy.fh1DeltaREmbedded)
648 ,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
649 ,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
650 ,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
651 ,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
652 ,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
653 ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
654 ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
655 ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
656 ,fQABckgHisto4RecCuts(copy.fQABckgHisto4RecCuts)
657 ,fQABckgHisto4Gen(copy.fQABckgHisto4Gen)
658 ,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
659 ,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
660 ,fFFBckgHisto1RecCuts(copy.fFFBckgHisto1RecCuts)
661 ,fFFBckgHisto1Gen(copy.fFFBckgHisto1Gen)
662 ,fFFBckgHisto2RecCuts(copy.fFFBckgHisto2RecCuts)
663 ,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
664 ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
665 ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
666 ,fFFBckgHisto4RecCuts(copy.fFFBckgHisto4RecCuts)
667 ,fFFBckgHisto4Gen(copy.fFFBckgHisto4Gen)
668 ,fFFBckgHisto0RecEffRec(copy.fFFBckgHisto0RecEffRec)
669 ,fFFBckgHisto0SecRecNS(copy.fFFBckgHisto0SecRecNS)
670 ,fFFBckgHisto0SecRecS(copy.fFFBckgHisto0SecRecS)
671 ,fFFBckgHisto0SecRecSsc(copy.fFFBckgHisto0SecRecSsc)
673 ,fProNtracksLeadingJet(copy.fProNtracksLeadingJet)
674 ,fProDelR80pcPt(copy.fProDelR80pcPt)
675 ,fProNtracksLeadingJetGen(copy.fProNtracksLeadingJetGen)
676 ,fProDelR80pcPtGen(copy.fProDelR80pcPtGen)
677 ,fProNtracksLeadingJetBgrPerp2(copy.fProNtracksLeadingJetBgrPerp2)
678 ,fProNtracksLeadingJetRecPrim(copy.fProNtracksLeadingJetRecPrim)
679 ,fProDelR80pcPtRecPrim(copy.fProDelR80pcPtRecPrim)
680 ,fProNtracksLeadingJetRecSecNS(copy.fProNtracksLeadingJetRecSecNS)
681 ,fProNtracksLeadingJetRecSecS(copy.fProNtracksLeadingJetRecSecS)
682 ,fProNtracksLeadingJetRecSecSsc(copy.fProNtracksLeadingJetRecSecSsc)
683 ,fRandom(copy.fRandom)
684 ,fOnlyLeadingJets(copy.fOnlyLeadingJets)
686 ,fNumInclusivePIDtasks(copy.fNumInclusivePIDtasks)
687 ,fNumJetPIDtasks(copy.fNumJetPIDtasks)
688 ,fNameInclusivePIDtask(0x0)
689 ,fNameJetPIDtask(0x0)
690 ,fInclusivePIDtask(0x0)
692 ,fUseInclusivePIDtask(copy.fUseInclusivePIDtask)
693 ,fUseJetPIDtask(copy.fUseJetPIDtask)
697 fBckgType[0] = copy.fBckgType[0];
698 fBckgType[1] = copy.fBckgType[1];
699 fBckgType[2] = copy.fBckgType[2];
700 fBckgType[3] = copy.fBckgType[3];
701 fBckgType[4] = copy.fBckgType[4];
704 for(Int_t ii=0; ii<5; ii++){
705 fProDelRPtSum[ii] = copy.fProDelRPtSum[ii];
706 fProDelRPtSumGen[ii] = copy.fProDelRPtSumGen[ii];
707 fProDelRPtSumBgrPerp2[ii] = copy.fProDelRPtSumBgrPerp2[ii];
708 fProDelRPtSumRecPrim[ii] = copy.fProDelRPtSumRecPrim[ii];
709 fProDelRPtSumRecSecNS[ii] = copy.fProDelRPtSumRecSecNS[ii];
710 fProDelRPtSumRecSecS[ii] = copy.fProDelRPtSumRecSecS[ii];
711 fProDelRPtSumRecSecSsc[ii] = copy.fProDelRPtSumRecSecSsc[ii];
714 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
715 fIDFFHistosRecCuts[i] = 0x0;
716 if (copy.fIDFFHistosRecCuts[i])
717 fIDFFHistosRecCuts[i] = copy.fIDFFHistosRecCuts[i];
719 fIDFFHistosGen[i] = 0x0;
720 if (copy.fIDFFHistosGen[i])
721 fIDFFHistosGen[i] = copy.fIDFFHistosGen[i];
724 if (fNumInclusivePIDtasks > 0) {
725 fNameInclusivePIDtask = new TString[fNumInclusivePIDtasks];
726 fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
728 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
729 fNameInclusivePIDtask[i] = "";
730 fInclusivePIDtask[i] = 0x0;
732 if (copy.fNameInclusivePIDtask[i])
733 fNameInclusivePIDtask[i] = copy.fNameInclusivePIDtask[i];
735 if (copy.fInclusivePIDtask[i])
736 fInclusivePIDtask[i] = copy.fInclusivePIDtask[i];
740 if (fNumJetPIDtasks > 0) {
741 fNameJetPIDtask = new TString[fNumJetPIDtasks];
742 fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
744 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
745 fNameJetPIDtask[i] = "";
746 fJetPIDtask[i] = 0x0;
748 if (copy.fNameJetPIDtask[i])
749 fNameJetPIDtask[i] = copy.fNameJetPIDtask[i];
751 if (copy.fJetPIDtask[i])
752 fJetPIDtask[i] = copy.fJetPIDtask[i];
757 // _________________________________________________________________________________________________________________________________
758 AliAnalysisTaskIDFragmentationFunction& AliAnalysisTaskIDFragmentationFunction::operator=(const AliAnalysisTaskIDFragmentationFunction& o)
764 AliAnalysisTaskSE::operator=(o);
767 fAODJets = o.fAODJets;
768 fAODExtension = o.fAODExtension;
769 fNonStdFile = o.fNonStdFile;
770 fBranchRecJets = o.fBranchRecJets;
771 fBranchRecBckgClusters = o.fBranchRecBckgClusters;
772 fBranchGenJets = o.fBranchGenJets;
773 fBranchEmbeddedJets = o.fBranchEmbeddedJets;
774 fTrackTypeGen = o.fTrackTypeGen;
775 fJetTypeGen = o.fJetTypeGen;
776 fJetTypeRecEff = o.fJetTypeRecEff;
777 fUseAODInputJets = o.fUseAODInputJets;
778 fFilterMask = o.fFilterMask;
779 fUsePhysicsSelection = o.fUsePhysicsSelection;
780 fEvtSelectionMask = o.fEvtSelectionMask;
781 fEventClass = o.fEventClass;
782 fMaxVertexZ = o.fMaxVertexZ;
783 fTrackPtCut = o.fTrackPtCut;
784 fTrackEtaMin = o.fTrackEtaMin;
785 fTrackEtaMax = o.fTrackEtaMax;
786 fTrackPhiMin = o.fTrackPhiMin;
787 fTrackPhiMax = o.fTrackPhiMax;
788 fUseExtraTracks = o.fUseExtraTracks;
789 fUseExtraTracksBgr = o.fUseExtraTracksBgr;
790 fCutFractionPtEmbedded = o.fCutFractionPtEmbedded;
791 fUseEmbeddedJetAxis = o.fUseEmbeddedJetAxis;
792 fUseEmbeddedJetPt = o.fUseEmbeddedJetPt;
793 fJetPtCut = o.fJetPtCut;
794 fJetEtaMin = o.fJetEtaMin;
795 fJetEtaMax = o.fJetEtaMax;
796 fJetPhiMin = o.fJetPhiMin;
797 fJetPhiMax = o.fJetPhiMin;
798 fFFRadius = o.fFFRadius;
799 fFFMinLTrackPt = o.fFFMinLTrackPt;
800 fFFMaxTrackPt = o.fFFMaxTrackPt;
801 fFFMinnTracks = o.fFFMinnTracks;
802 fFFBckgRadius = o.fFFBckgRadius;
803 fBckgMode = o.fBckgMode;
806 fIDFFMode = o.fIDFFMode;
807 fEffMode = o.fEffMode;
809 fBckgType[0] = o.fBckgType[0];
810 fBckgType[1] = o.fBckgType[1];
811 fBckgType[2] = o.fBckgType[2];
812 fBckgType[3] = o.fBckgType[3];
813 fBckgType[4] = o.fBckgType[4];
814 fAvgTrials = o.fAvgTrials;
815 fTracksRecCuts = o.fTracksRecCuts;
816 fTracksRecCutsEfficiency = o.fTracksRecCutsEfficiency;
817 fTracksGen = o.fTracksGen;
818 fTracksAODMCCharged = o.fTracksAODMCCharged;
819 fTracksAODMCChargedSecNS = o.fTracksAODMCChargedSecNS;
820 fTracksAODMCChargedSecS = o.fTracksAODMCChargedSecS;
821 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
822 fJetsRec = o.fJetsRec;
823 fJetsRecCuts = o.fJetsRecCuts;
824 fJetsGen = o.fJetsGen;
825 fJetsRecEff = o.fJetsRecEff;
826 fJetsEmbedded = o.fJetsEmbedded;
827 fBckgJetsRec = o.fBckgJetsRec;
828 fBckgJetsRecCuts = o.fBckgJetsRecCuts;
829 fBckgJetsGen = o.fBckgJetsGen;
830 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
831 fQATrackHistosGen = o.fQATrackHistosGen;
832 fQAJetHistosRec = o.fQAJetHistosRec;
833 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
834 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
835 fQAJetHistosGen = o.fQAJetHistosGen;
836 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
837 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
838 fFFHistosRecCuts = o.fFFHistosRecCuts;
839 fFFHistosRecCutsInc = o.fFFHistosRecCutsInc;
840 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
841 fFFHistosGen = o.fFFHistosGen;
842 fFFHistosGenInc = o.fFFHistosGenInc;
843 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
844 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
845 fFFNBinsJetPt = o.fFFNBinsJetPt;
846 fFFJetPtMin = o.fFFJetPtMin;
847 fFFJetPtMax = o.fFFJetPtMax;
848 fFFNBinsPt = o.fFFNBinsPt;
849 fFFPtMin = o.fFFPtMin;
850 fFFPtMax = o.fFFPtMax;
851 fFFNBinsXi = o.fFFNBinsXi;
852 fFFXiMin = o.fFFXiMin;
853 fFFXiMax = o.fFFXiMax;
854 fFFNBinsZ = o.fFFNBinsZ;
857 fQAJetNBinsPt = o.fQAJetNBinsPt;
858 fQAJetPtMin = o.fQAJetPtMin;
859 fQAJetPtMax = o.fQAJetPtMax;
860 fQAJetNBinsEta = o.fQAJetNBinsEta;
861 fQAJetEtaMin = o.fQAJetEtaMin;
862 fQAJetEtaMax = o.fQAJetEtaMax;
863 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
864 fQAJetPhiMin = o.fQAJetPhiMin;
865 fQAJetPhiMax = o.fQAJetPhiMax;
866 fQATrackNBinsPt = o.fQATrackNBinsPt;
867 fQATrackPtMin = o.fQATrackPtMin;
868 fQATrackPtMax = o.fQATrackPtMax;
869 fQATrackNBinsEta = o.fQATrackNBinsEta;
870 fQATrackEtaMin = o.fQATrackEtaMin;
871 fQATrackEtaMax = o.fQATrackEtaMax;
872 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
873 fQATrackPhiMin = o.fQATrackPhiMin;
874 fQATrackPhiMax = o.fQATrackPhiMax;
875 fCommonHistList = o.fCommonHistList;
876 fh1EvtSelection = o.fh1EvtSelection;
877 fh1VertexNContributors = o.fh1VertexNContributors;
878 fh1VertexZ = o.fh1VertexZ;
879 fh1EvtMult = o.fh1EvtMult;
880 fh1EvtCent = o.fh1EvtCent;
882 fh1Trials = o.fh1Trials;
883 fh1PtHard = o.fh1PtHard;
884 fh1PtHardTrials = o.fh1PtHardTrials;
885 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
886 fh1nGenJets = o.fh1nGenJets;
887 fh1nRecEffJets = o.fh1nRecEffJets;
888 fh1nEmbeddedJets = o.fh1nEmbeddedJets;
889 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
890 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
891 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
892 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
893 fQATrackHistosSecRecNS = o.fQATrackHistosSecRecNS;
894 fQATrackHistosSecRecS = o.fQATrackHistosSecRecS;
895 fQATrackHistosSecRecSsc = o.fQATrackHistosSecRecSsc;
896 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
897 fFFHistosSecRecNS = o.fFFHistosSecRecNS;
898 fFFHistosSecRecS = o.fFFHistosSecRecS;
899 fFFHistosSecRecSsc = o.fFFHistosSecRecSsc;
901 fh1BckgMult0 = o.fh1BckgMult0;
902 fh1BckgMult1 = o.fh1BckgMult1;
903 fh1BckgMult2 = o.fh1BckgMult2;
904 fh1BckgMult3 = o.fh1BckgMult3;
905 fh1BckgMult4 = o.fh1BckgMult4;
906 fh1FractionPtEmbedded = o.fh1FractionPtEmbedded;
907 fh1IndexEmbedded = o.fh1IndexEmbedded;
908 fh2DeltaPtVsJetPtEmbedded = o.fh2DeltaPtVsJetPtEmbedded;
909 fh2DeltaPtVsRecJetPtEmbedded = o.fh2DeltaPtVsRecJetPtEmbedded;
910 fh1DeltaREmbedded = o.fh1DeltaREmbedded;
911 fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
912 fQABckgHisto0Gen = o.fQABckgHisto0Gen;
913 fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
914 fQABckgHisto1Gen = o.fQABckgHisto1Gen;
915 fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
916 fQABckgHisto2Gen = o.fQABckgHisto2Gen;
917 fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
918 fQABckgHisto3Gen = o.fQABckgHisto3Gen;
919 fQABckgHisto4RecCuts = o.fQABckgHisto4RecCuts;
920 fQABckgHisto4Gen = o.fQABckgHisto4Gen;
921 fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
922 fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
923 fFFBckgHisto1RecCuts = o.fFFBckgHisto1RecCuts;
924 fFFBckgHisto1Gen = o.fFFBckgHisto1Gen;
925 fFFBckgHisto2RecCuts = o.fFFBckgHisto2RecCuts;
926 fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
927 fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
928 fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
929 fFFBckgHisto4RecCuts = o.fFFBckgHisto4RecCuts;
930 fFFBckgHisto4Gen = o.fFFBckgHisto4Gen;
931 fFFBckgHisto0RecEffRec = o.fFFBckgHisto0RecEffRec;
932 fFFBckgHisto0SecRecNS = o.fFFBckgHisto0SecRecNS;
933 fFFBckgHisto0SecRecS = o.fFFBckgHisto0SecRecS;
934 fFFBckgHisto0SecRecSsc = o.fFFBckgHisto0SecRecSsc;
935 fProNtracksLeadingJet = o.fProNtracksLeadingJet;
936 fProDelR80pcPt = o.fProDelR80pcPt;
937 fProNtracksLeadingJetGen = o.fProNtracksLeadingJetGen;
938 fProDelR80pcPtGen = o.fProDelR80pcPtGen;
939 fProNtracksLeadingJetBgrPerp2 = o.fProNtracksLeadingJetBgrPerp2;
940 fProNtracksLeadingJetRecPrim = o.fProNtracksLeadingJetRecPrim;
941 fProDelR80pcPtRecPrim = o.fProDelR80pcPtRecPrim;
942 fProNtracksLeadingJetRecSecNS = o.fProNtracksLeadingJetRecSecNS;
943 fProNtracksLeadingJetRecSecS = o.fProNtracksLeadingJetRecSecS;
944 fProNtracksLeadingJetRecSecSsc = o.fProNtracksLeadingJetRecSecSsc;
946 fOnlyLeadingJets = o.fOnlyLeadingJets;
949 fUseInclusivePIDtask = o.fUseInclusivePIDtask;
950 fUseJetPIDtask = o.fUseJetPIDtask;
954 for(Int_t ii=0; ii<5; ii++){
955 fProDelRPtSum[ii] = o.fProDelRPtSum[ii];
956 fProDelRPtSumGen[ii] = o.fProDelRPtSumGen[ii];
957 fProDelRPtSumBgrPerp2[ii] = o.fProDelRPtSumBgrPerp2[ii];
958 fProDelRPtSumRecPrim[ii] = o.fProDelRPtSumRecPrim[ii];
959 fProDelRPtSumRecSecNS[ii] = o.fProDelRPtSumRecSecNS[ii];
960 fProDelRPtSumRecSecS[ii] = o.fProDelRPtSumRecSecS[ii];
961 fProDelRPtSumRecSecSsc[ii] = o.fProDelRPtSumRecSecSsc[ii];
964 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
965 fIDFFHistosRecCuts[i] = 0x0;
966 if (o.fIDFFHistosRecCuts[i])
967 fIDFFHistosRecCuts[i] = o.fIDFFHistosRecCuts[i];
969 fIDFFHistosGen[i] = 0x0;
970 if (o.fIDFFHistosGen[i])
971 fIDFFHistosGen[i] = o.fIDFFHistosGen[i];
976 if (fNumJetPIDtasks > 0) {
977 delete [] fNameJetPIDtask;
978 fNameJetPIDtask = 0x0;
980 delete [] fJetPIDtask;
984 fNumJetPIDtasks = o.fNumJetPIDtasks;
987 if (fNumInclusivePIDtasks > 0) {
988 delete [] fNameInclusivePIDtask;
989 fNameInclusivePIDtask = 0x0;
991 delete [] fInclusivePIDtask;
992 fInclusivePIDtask = 0x0;
995 fNumInclusivePIDtasks = o.fNumInclusivePIDtasks;
998 if (fNumInclusivePIDtasks > 0) {
999 fNameInclusivePIDtask = new TString[fNumInclusivePIDtasks];
1000 fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
1002 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
1003 fNameInclusivePIDtask[i] = "";
1004 fInclusivePIDtask[i] = 0x0;
1006 if (o.fNameInclusivePIDtask[i])
1007 fNameInclusivePIDtask[i] = o.fNameInclusivePIDtask[i];
1009 if (o.fInclusivePIDtask[i])
1010 fInclusivePIDtask[i] = o.fInclusivePIDtask[i];
1014 if (fNumJetPIDtasks > 0) {
1015 fNameJetPIDtask = new TString[fNumJetPIDtasks];
1016 fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
1018 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
1019 fNameJetPIDtask[i] = "";
1020 fJetPIDtask[i] = 0x0;
1022 if (o.fNameJetPIDtask[i])
1023 fNameJetPIDtask[i] = o.fNameJetPIDtask[i];
1025 if (o.fJetPIDtask[i])
1026 fJetPIDtask[i] = o.fJetPIDtask[i];
1033 //___________________________________________________________________________
1034 AliAnalysisTaskIDFragmentationFunction::~AliAnalysisTaskIDFragmentationFunction()
1038 if(fTracksRecCuts) delete fTracksRecCuts;
1039 if(fTracksRecCutsEfficiency) delete fTracksRecCutsEfficiency;
1040 if(fTracksGen) delete fTracksGen;
1041 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
1042 if(fTracksAODMCChargedSecNS) delete fTracksAODMCChargedSecNS;
1043 if(fTracksAODMCChargedSecS) delete fTracksAODMCChargedSecS;
1044 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
1045 if(fJetsRec) delete fJetsRec;
1046 if(fJetsRecCuts) delete fJetsRecCuts;
1047 if(fJetsGen) delete fJetsGen;
1048 if(fJetsRecEff) delete fJetsRecEff;
1049 if(fJetsEmbedded) delete fJetsEmbedded;
1052 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1053 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1054 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1056 if(fBckgJetsRec) delete fBckgJetsRec;
1057 if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
1058 if(fBckgJetsGen) delete fBckgJetsGen;
1060 if(fRandom) delete fRandom;
1062 delete [] fNameInclusivePIDtask;
1063 fNameInclusivePIDtask = 0x0;
1065 delete [] fInclusivePIDtask;
1066 fInclusivePIDtask = 0x0;
1068 delete [] fNameJetPIDtask;
1069 fNameJetPIDtask = 0x0;
1071 delete [] fJetPIDtask;
1075 //______________________________________________________________________________________________________
1076 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
1077 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1078 Int_t nPt, Float_t ptMin, Float_t ptMax,
1079 Int_t nXi, Float_t xiMin, Float_t xiMax,
1080 Int_t nZ , Float_t zMin , Float_t zMax)
1082 ,fNBinsJetPt(nJetPt)
1083 ,fJetPtMin(jetPtMin)
1084 ,fJetPtMax(jetPtMax)
1100 // default constructor
1104 //___________________________________________________________________________
1105 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
1107 ,fNBinsJetPt(copy.fNBinsJetPt)
1108 ,fJetPtMin(copy.fJetPtMin)
1109 ,fJetPtMax(copy.fJetPtMax)
1110 ,fNBinsPt(copy.fNBinsPt)
1111 ,fPtMin(copy.fPtMin)
1112 ,fPtMax(copy.fPtMax)
1113 ,fNBinsXi(copy.fNBinsXi)
1114 ,fXiMin(copy.fXiMin)
1115 ,fXiMax(copy.fXiMax)
1116 ,fNBinsZ(copy.fNBinsZ)
1119 ,fh2TrackPt(copy.fh2TrackPt)
1122 ,fh1JetPt(copy.fh1JetPt)
1123 ,fNameFF(copy.fNameFF)
1128 //_______________________________________________________________________________________________________________________________________________________________
1129 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos& o)
1134 TObject::operator=(o);
1135 fNBinsJetPt = o.fNBinsJetPt;
1136 fJetPtMin = o.fJetPtMin;
1137 fJetPtMax = o.fJetPtMax;
1138 fNBinsPt = o.fNBinsPt;
1141 fNBinsXi = o.fNBinsXi;
1144 fNBinsZ = o.fNBinsZ;
1147 fh2TrackPt = o.fh2TrackPt;
1150 fh1JetPt = o.fh1JetPt;
1151 fNameFF = o.fNameFF;
1157 //_________________________________________________________
1158 AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
1162 if(fh1JetPt) delete fh1JetPt;
1163 if(fh2TrackPt) delete fh2TrackPt;
1164 if(fh2Xi) delete fh2Xi;
1165 if(fh2Z) delete fh2Z;
1168 //_________________________________________________________________
1169 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::DefineHistos()
1173 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
1174 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
1175 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
1176 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
1178 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1179 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1180 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1181 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1184 //_______________________________________________________________________________________________________________
1185 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm,
1186 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1190 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1191 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
1193 // Added for proper normalization of FF background estimation
1194 // when zero track are found in the background region
1195 if((int)trackPt==-1) return;
1197 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1198 else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,trackPt,scaleFacStrangeness);
1199 else fh2TrackPt->Fill(jetPt,trackPt);
1201 Double_t z = -1., xi = -1.;
1202 AliAnalysisTaskPID::GetJetTrackObservables(trackPt, jetPt, z, xi);
1206 fh2Xi->Fill(jetPt,xi,1/norm);
1207 fh2Z->Fill(jetPt,z,1/norm);
1209 else if(scaleStrangeness){
1210 fh2Xi->Fill(jetPt,xi,scaleFacStrangeness);
1211 fh2Z->Fill(jetPt,z,scaleFacStrangeness);
1214 fh2Xi->Fill(jetPt,xi);
1215 fh2Z->Fill(jetPt,z);
1219 //_________________________________________________________________________________
1220 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1222 // add histos to list
1224 list->Add(fh1JetPt);
1226 list->Add(fh2TrackPt);
1231 //_________________________________________________________________________________________________________
1232 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1233 Int_t nPt, Float_t ptMin, Float_t ptMax,
1234 Int_t nEta, Float_t etaMin, Float_t etaMax,
1235 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1250 // default constructor
1253 //____________________________________________________________________________________
1254 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1256 ,fNBinsPt(copy.fNBinsPt)
1257 ,fPtMin(copy.fPtMin)
1258 ,fPtMax(copy.fPtMax)
1259 ,fNBinsEta(copy.fNBinsEta)
1260 ,fEtaMin(copy.fEtaMin)
1261 ,fEtaMax(copy.fEtaMax)
1262 ,fNBinsPhi(copy.fNBinsPhi)
1263 ,fPhiMin(copy.fPhiMin)
1264 ,fPhiMax(copy.fPhiMax)
1265 ,fh2EtaPhi(copy.fh2EtaPhi)
1267 ,fNameQAJ(copy.fNameQAJ)
1272 //________________________________________________________________________________________________________________________________________________________________________
1273 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos& o)
1278 TObject::operator=(o);
1279 fNBinsPt = o.fNBinsPt;
1282 fNBinsEta = o.fNBinsEta;
1283 fEtaMin = o.fEtaMin;
1284 fEtaMax = o.fEtaMax;
1285 fNBinsPhi = o.fNBinsPhi;
1286 fPhiMin = o.fPhiMin;
1287 fPhiMax = o.fPhiMax;
1288 fh2EtaPhi = o.fh2EtaPhi;
1290 fNameQAJ = o.fNameQAJ;
1296 //______________________________________________________________
1297 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1301 if(fh2EtaPhi) delete fh2EtaPhi;
1302 if(fh1Pt) delete fh1Pt;
1305 //____________________________________________________________________
1306 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1308 // book jet QA histos
1310 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1311 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1313 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1314 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1317 //____________________________________________________________________________________________________
1318 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1320 // fill jet QA histos
1322 fh2EtaPhi->Fill( eta, phi);
1326 //____________________________________________________________________________________
1327 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1329 // add histos to list
1331 list->Add(fh2EtaPhi);
1335 //___________________________________________________________________________________________________________
1336 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1337 Int_t nPt, Float_t ptMin, Float_t ptMax,
1338 Int_t nEta, Float_t etaMin, Float_t etaMax,
1339 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1351 ,fHighPtThreshold(ptThresh)
1358 // default constructor
1361 //__________________________________________________________________________________________
1362 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1364 ,fNBinsPt(copy.fNBinsPt)
1365 ,fPtMin(copy.fPtMin)
1366 ,fPtMax(copy.fPtMax)
1367 ,fNBinsEta(copy.fNBinsEta)
1368 ,fEtaMin(copy.fEtaMin)
1369 ,fEtaMax(copy.fEtaMax)
1370 ,fNBinsPhi(copy.fNBinsPhi)
1371 ,fPhiMin(copy.fPhiMin)
1372 ,fPhiMax(copy.fPhiMax)
1373 ,fHighPtThreshold(copy.fHighPtThreshold)
1374 ,fh2EtaPhi(copy.fh2EtaPhi)
1376 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1377 ,fh2PhiPt(copy.fh2PhiPt)
1378 ,fNameQAT(copy.fNameQAT)
1383 // _____________________________________________________________________________________________________________________________________________________________________________
1384 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos& o)
1389 TObject::operator=(o);
1390 fNBinsPt = o.fNBinsPt;
1393 fNBinsEta = o.fNBinsEta;
1394 fEtaMin = o.fEtaMin;
1395 fEtaMax = o.fEtaMax;
1396 fNBinsPhi = o.fNBinsPhi;
1397 fPhiMin = o.fPhiMin;
1398 fPhiMax = o.fPhiMax;
1399 fHighPtThreshold = o.fHighPtThreshold;
1400 fh2EtaPhi = o.fh2EtaPhi;
1402 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1403 fh2PhiPt = o.fh2PhiPt;
1404 fNameQAT = o.fNameQAT;
1410 //___________________________________________________________________
1411 AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1415 if(fh2EtaPhi) delete fh2EtaPhi;
1416 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1417 if(fh1Pt) delete fh1Pt;
1418 if(fh2PhiPt) delete fh2PhiPt;
1421 //______________________________________________________________________
1422 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1424 // book track QA histos
1426 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1427 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);
1428 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1429 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1431 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1432 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1433 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1434 AliAnalysisTaskIDFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1437 //________________________________________________________________________________________________________
1438 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm,
1439 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1441 // fill track QA histos
1442 Float_t weight = 1.;
1443 if(weightPt) weight = pt;
1444 fh2EtaPhi->Fill( eta, phi, weight);
1445 if(scaleStrangeness) fh2EtaPhi->Fill( eta, phi, scaleFacStrangeness);
1446 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1447 if(pt > fHighPtThreshold && scaleStrangeness) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1448 if(norm) fh1Pt->Fill( pt, 1/norm );
1449 else if(scaleStrangeness) fh1Pt->Fill(pt,scaleFacStrangeness);
1450 else fh1Pt->Fill( pt );
1452 if(scaleFacStrangeness) fh2PhiPt->Fill(phi, pt, scaleFacStrangeness);
1453 else fh2PhiPt->Fill(phi, pt);
1456 //______________________________________________________________________________________
1457 void AliAnalysisTaskIDFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1459 // add histos to list
1461 list->Add(fh2EtaPhi);
1462 list->Add(fh2HighPtEtaPhi);
1464 list->Add(fh2PhiPt);
1467 //_________________________________________________________________________________
1468 Bool_t AliAnalysisTaskIDFragmentationFunction::Notify()
1471 // Implemented Notify() to read the cross sections
1472 // and number of trials from pyxsec.root
1473 // (taken from AliAnalysisTaskJetSpectrum2)
1475 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
1476 Float_t xsection = 0;
1477 Float_t ftrials = 1;
1481 TFile *curfile = tree->GetCurrentFile();
1483 Error("Notify","No current file");
1487 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
1489 if (fUseInclusivePIDtask) {
1490 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
1491 fInclusivePIDtask[i]->FillXsec(xsection);
1494 if (fUseJetPIDtask) {
1495 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
1496 fJetPIDtask[i]->FillXsec(xsection);
1499 if(!fh1Xsec||!fh1Trials){
1500 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1504 fh1Xsec->Fill("<#sigma>",xsection);
1505 // construct a poor man average trials
1506 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1507 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
1510 // Set seed for backg study
1511 fRandom = new TRandom3();
1512 fRandom->SetSeed(0);
1517 //__________________________________________________________________
1518 void AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()
1520 // create output objects
1522 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()");
1524 // create list of tracks and jets
1526 fTracksRecCuts = new TList();
1527 fTracksRecCuts->SetOwner(kFALSE);
1529 fTracksRecCutsEfficiency = new TList();
1530 fTracksRecCutsEfficiency->SetOwner(kFALSE);
1532 fTracksGen = new TList();
1533 fTracksGen->SetOwner(kFALSE);
1535 fTracksAODMCCharged = new TList();
1536 fTracksAODMCCharged->SetOwner(kFALSE);
1538 fTracksAODMCChargedSecNS = new TList();
1539 fTracksAODMCChargedSecNS->SetOwner(kFALSE);
1541 fTracksAODMCChargedSecS = new TList();
1542 fTracksAODMCChargedSecS->SetOwner(kFALSE);
1544 fTracksRecQualityCuts = new TList();
1545 fTracksRecQualityCuts->SetOwner(kFALSE);
1547 fJetsRec = new TList();
1548 fJetsRec->SetOwner(kFALSE);
1550 fJetsRecCuts = new TList();
1551 fJetsRecCuts->SetOwner(kFALSE);
1553 fJetsGen = new TList();
1554 fJetsGen->SetOwner(kFALSE);
1556 fJetsRecEff = new TList();
1557 fJetsRecEff->SetOwner(kFALSE);
1559 fJetsEmbedded = new TList();
1560 fJetsEmbedded->SetOwner(kFALSE);
1564 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1565 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1566 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1568 fBckgJetsRec = new TList();
1569 fBckgJetsRec->SetOwner(kFALSE);
1571 fBckgJetsRecCuts = new TList();
1572 fBckgJetsRecCuts->SetOwner(kFALSE);
1574 fBckgJetsGen = new TList();
1575 fBckgJetsGen->SetOwner(kFALSE);
1579 // Create histograms / output container
1583 fCommonHistList = new TList();
1584 fCommonHistList->SetOwner(kTRUE);
1586 Bool_t oldStatus = TH1::AddDirectoryStatus();
1587 TH1::AddDirectory(kFALSE);
1591 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1592 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
1593 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
1594 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1595 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1596 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1597 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
1599 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
1600 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1601 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
1602 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1604 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1605 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1606 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1607 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1608 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1609 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1611 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1612 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1613 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1614 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1616 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1617 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1620 if(fBranchEmbeddedJets.Length()){
1621 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
1622 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
1623 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
1624 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
1625 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
1626 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1631 if(fQAMode&1){ // track QA
1632 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1633 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1634 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1635 fQATrackHighPtThreshold);
1636 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1637 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1638 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1639 fQATrackHighPtThreshold);
1642 if(fQAMode&2){ // jet QA
1643 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1644 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1645 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1646 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1647 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1648 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1649 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1650 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1651 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1652 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1653 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1654 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1655 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1656 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1657 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1658 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1659 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1663 if(fFFMode || fIDFFMode){
1665 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1666 fFFNBinsPt, fFFPtMin, fFFPtMax,
1667 fFFNBinsXi, fFFXiMin, fFFXiMax,
1668 fFFNBinsZ , fFFZMin , fFFZMax );
1671 fFFHistosRecCutsInc = new AliFragFuncHistos("RecCutsInc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1672 fFFNBinsPt, fFFPtMin, fFFPtMax,
1673 fFFNBinsXi, fFFXiMin, fFFXiMax,
1674 fFFNBinsZ , fFFZMin , fFFZMax );
1677 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1678 fFFNBinsPt, fFFPtMin, fFFPtMax,
1679 fFFNBinsXi, fFFXiMin, fFFXiMax,
1680 fFFNBinsZ , fFFZMin , fFFZMax );
1682 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1683 fFFNBinsPt, fFFPtMin, fFFPtMax,
1684 fFFNBinsXi, fFFXiMin, fFFXiMax,
1685 fFFNBinsZ , fFFZMin , fFFZMax);
1687 fFFHistosGenInc = new AliFragFuncHistos("GenInc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1688 fFFNBinsPt, fFFPtMin, fFFPtMax,
1689 fFFNBinsXi, fFFXiMin, fFFXiMax,
1690 fFFNBinsZ , fFFZMin , fFFZMax);
1692 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1693 fFFNBinsPt, fFFPtMin, fFFPtMax,
1694 fFFNBinsXi, fFFXiMin, fFFXiMax,
1695 fFFNBinsZ , fFFZMin , fFFZMax);
1698 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
1699 fIDFFHistosRecCuts[i] = new AliFragFuncHistos(Form("RecCuts_%s", AliPID::ParticleName(i)), fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1700 fFFNBinsPt, fFFPtMin, fFFPtMax,
1701 fFFNBinsXi, fFFXiMin, fFFXiMax,
1702 fFFNBinsZ , fFFZMin , fFFZMax );
1703 fIDFFHistosGen[i] = new AliFragFuncHistos(Form("Gen_%s", AliPID::ParticleName(i)), fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1704 fFFNBinsPt, fFFPtMin, fFFPtMax,
1705 fFFNBinsXi, fFFXiMin, fFFXiMax,
1706 fFFNBinsZ , fFFZMin , fFFZMax );
1715 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1716 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1717 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1718 fQATrackHighPtThreshold);
1720 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1721 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1722 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1723 fQATrackHighPtThreshold);
1725 fQATrackHistosSecRecNS = new AliFragFuncQATrackHistos("SecRecNS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1726 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1727 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1728 fQATrackHighPtThreshold);
1730 fQATrackHistosSecRecS = new AliFragFuncQATrackHistos("SecRecS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1731 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1732 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1733 fQATrackHighPtThreshold);
1735 fQATrackHistosSecRecSsc = new AliFragFuncQATrackHistos("SecRecSsc", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1736 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1737 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1738 fQATrackHighPtThreshold);
1742 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1743 fFFNBinsPt, fFFPtMin, fFFPtMax,
1744 fFFNBinsXi, fFFXiMin, fFFXiMax,
1745 fFFNBinsZ , fFFZMin , fFFZMax);
1747 fFFHistosSecRecNS = new AliFragFuncHistos("SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1748 fFFNBinsPt, fFFPtMin, fFFPtMax,
1749 fFFNBinsXi, fFFXiMin, fFFXiMax,
1750 fFFNBinsZ , fFFZMin , fFFZMax);
1752 fFFHistosSecRecS = new AliFragFuncHistos("SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1753 fFFNBinsPt, fFFPtMin, fFFPtMax,
1754 fFFNBinsXi, fFFXiMin, fFFXiMax,
1755 fFFNBinsZ , fFFZMin , fFFZMax);
1757 fFFHistosSecRecSsc = new AliFragFuncHistos("SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1758 fFFNBinsPt, fFFPtMin, fFFPtMax,
1759 fFFNBinsXi, fFFXiMin, fFFXiMax,
1760 fFFNBinsZ , fFFZMin , fFFZMax);
1763 } // end: efficiency
1767 if(fBckgType[0]==kBckgNone){
1768 AliError("no bgr method selected !");
1772 for(Int_t i=0; i<5; i++){
1773 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
1774 else if(fBckgType[i]==kBckgPerp2) title[i]="Perp2";
1775 else if(fBckgType[i]==kBckgPerp2Area) title[i]="Perp2Area";
1776 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
1777 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
1778 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
1779 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
1780 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
1781 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
1782 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
1783 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
1784 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
1785 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
1786 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
1787 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
1788 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
1789 else if(fBckgType[i]==kBckgNone) title[i]="";
1790 else printf("Please chose background method number %d!",i);
1794 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1795 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1796 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
1798 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
1799 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
1803 fh1BckgMult0 = new TH1F("fh1BckgMult0","bckg mult "+title[0],500,0,500);
1804 if(fBckgType[1] != kBckgNone) fh1BckgMult1 = new TH1F("fh1BckgMult1","bckg mult "+title[1],500,0,500);
1805 if(fBckgType[2] != kBckgNone) fh1BckgMult2 = new TH1F("fh1BckgMult2","bckg mult "+title[2],500,0,500);
1806 if(fBckgType[3] != kBckgNone) fh1BckgMult3 = new TH1F("fh1BckgMult3","bckg mult "+title[3],500,0,500);
1807 if(fBckgType[4] != kBckgNone) fh1BckgMult4 = new TH1F("fh1BckgMult4","bckg mult "+title[4],500,0,500);
1811 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1812 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1813 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1814 fQATrackHighPtThreshold);
1815 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1816 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1817 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1818 fQATrackHighPtThreshold);
1820 if(fBckgType[1] != kBckgNone){
1821 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1822 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1823 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1824 fQATrackHighPtThreshold);
1825 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1826 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1827 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1828 fQATrackHighPtThreshold);
1830 if(fBckgType[2] != kBckgNone){
1831 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1832 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1833 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1834 fQATrackHighPtThreshold);
1835 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1836 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1837 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1838 fQATrackHighPtThreshold);
1840 if(fBckgType[3] != kBckgNone){
1841 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1842 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1843 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1844 fQATrackHighPtThreshold);
1845 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1846 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1847 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1848 fQATrackHighPtThreshold);
1850 if(fBckgType[4] != kBckgNone){
1851 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1852 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1853 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1854 fQATrackHighPtThreshold);
1855 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1856 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1857 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1858 fQATrackHighPtThreshold);
1860 } // end: background QA
1863 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1864 fFFNBinsPt, fFFPtMin, fFFPtMax,
1865 fFFNBinsXi, fFFXiMin, fFFXiMax,
1866 fFFNBinsZ , fFFZMin , fFFZMax);
1868 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1869 fFFNBinsPt, fFFPtMin, fFFPtMax,
1870 fFFNBinsXi, fFFXiMin, fFFXiMax,
1871 fFFNBinsZ , fFFZMin , fFFZMax);
1873 if(fBckgType[1] != kBckgNone){
1874 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1875 fFFNBinsPt, fFFPtMin, fFFPtMax,
1876 fFFNBinsXi, fFFXiMin, fFFXiMax,
1877 fFFNBinsZ , fFFZMin , fFFZMax);
1878 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1879 fFFNBinsPt, fFFPtMin, fFFPtMax,
1880 fFFNBinsXi, fFFXiMin, fFFXiMax,
1881 fFFNBinsZ , fFFZMin , fFFZMax);
1883 if(fBckgType[2] != kBckgNone){
1884 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1885 fFFNBinsPt, fFFPtMin, fFFPtMax,
1886 fFFNBinsXi, fFFXiMin, fFFXiMax,
1887 fFFNBinsZ , fFFZMin , fFFZMax);
1889 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1890 fFFNBinsPt, fFFPtMin, fFFPtMax,
1891 fFFNBinsXi, fFFXiMin, fFFXiMax,
1892 fFFNBinsZ , fFFZMin , fFFZMax);
1894 if(fBckgType[3] != kBckgNone){
1895 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1896 fFFNBinsPt, fFFPtMin, fFFPtMax,
1897 fFFNBinsXi, fFFXiMin, fFFXiMax,
1898 fFFNBinsZ , fFFZMin , fFFZMax);
1900 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1901 fFFNBinsPt, fFFPtMin, fFFPtMax,
1902 fFFNBinsXi, fFFXiMin, fFFXiMax,
1903 fFFNBinsZ , fFFZMin , fFFZMax);
1905 if(fBckgType[4] != kBckgNone){
1906 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1907 fFFNBinsPt, fFFPtMin, fFFPtMax,
1908 fFFNBinsXi, fFFXiMin, fFFXiMax,
1909 fFFNBinsZ , fFFZMin , fFFZMax);
1911 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1912 fFFNBinsPt, fFFPtMin, fFFPtMax,
1913 fFFNBinsXi, fFFXiMin, fFFXiMax,
1914 fFFNBinsZ , fFFZMin , fFFZMax);
1917 fFFBckgHisto0RecEffRec = new AliFragFuncHistos("Bckg"+title[0]+"RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1918 fFFNBinsPt, fFFPtMin, fFFPtMax,
1919 fFFNBinsXi, fFFXiMin, fFFXiMax,
1920 fFFNBinsZ , fFFZMin , fFFZMax);
1922 fFFBckgHisto0SecRecNS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1923 fFFNBinsPt, fFFPtMin, fFFPtMax,
1924 fFFNBinsXi, fFFXiMin, fFFXiMax,
1925 fFFNBinsZ , fFFZMin , fFFZMax);
1927 fFFBckgHisto0SecRecS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1928 fFFNBinsPt, fFFPtMin, fFFPtMax,
1929 fFFNBinsXi, fFFXiMin, fFFXiMax,
1930 fFFNBinsZ , fFFZMin , fFFZMax);
1932 fFFBckgHisto0SecRecSsc = new AliFragFuncHistos("Bckg"+title[0]+"SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1933 fFFNBinsPt, fFFPtMin, fFFPtMax,
1934 fFFNBinsXi, fFFXiMin, fFFXiMax,
1935 fFFNBinsZ , fFFZMin , fFFZMax);
1938 } // end: background FF
1941 } // end: background
1944 // ____________ define histograms ____________________
1947 if(fQAMode&1){ // track QA
1948 fQATrackHistosRecCuts->DefineHistos();
1949 fQATrackHistosGen->DefineHistos();
1952 if(fQAMode&2){ // jet QA
1953 fQAJetHistosRec->DefineHistos();
1954 fQAJetHistosRecCuts->DefineHistos();
1955 fQAJetHistosRecCutsLeading->DefineHistos();
1956 fQAJetHistosGen->DefineHistos();
1957 fQAJetHistosGenLeading->DefineHistos();
1958 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
1962 if(fFFMode || fIDFFMode){
1963 fFFHistosRecCuts->DefineHistos();
1964 fFFHistosRecCutsInc->DefineHistos();
1965 fFFHistosRecLeadingTrack->DefineHistos();
1966 fFFHistosGen->DefineHistos();
1967 fFFHistosGenInc->DefineHistos();
1968 fFFHistosGenLeadingTrack->DefineHistos();
1971 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
1972 fIDFFHistosRecCuts[i]->DefineHistos();
1973 fIDFFHistosGen[i]->DefineHistos();
1980 fQATrackHistosRecEffGen->DefineHistos();
1981 fQATrackHistosRecEffRec->DefineHistos();
1982 fQATrackHistosSecRecNS->DefineHistos();
1983 fQATrackHistosSecRecS->DefineHistos();
1984 fQATrackHistosSecRecSsc->DefineHistos();
1987 fFFHistosRecEffRec->DefineHistos();
1988 fFFHistosSecRecNS->DefineHistos();
1989 fFFHistosSecRecS->DefineHistos();
1990 fFFHistosSecRecSsc->DefineHistos();
1992 } // end: efficiency
1997 fFFBckgHisto0RecCuts->DefineHistos();
1998 fFFBckgHisto0Gen->DefineHistos();
1999 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->DefineHistos();
2000 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->DefineHistos();
2001 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->DefineHistos();
2002 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->DefineHistos();
2003 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->DefineHistos();
2004 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->DefineHistos();
2005 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->DefineHistos();
2006 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->DefineHistos();
2009 fFFBckgHisto0RecEffRec->DefineHistos();
2010 fFFBckgHisto0SecRecNS->DefineHistos();
2011 fFFBckgHisto0SecRecS->DefineHistos();
2012 fFFBckgHisto0SecRecSsc->DefineHistos();
2017 fQABckgHisto0RecCuts->DefineHistos();
2018 fQABckgHisto0Gen->DefineHistos();
2019 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->DefineHistos();
2020 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->DefineHistos();
2021 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->DefineHistos();
2022 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->DefineHistos();
2023 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->DefineHistos();
2024 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->DefineHistos();
2025 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->DefineHistos();
2026 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->DefineHistos();
2028 } // end: background
2031 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
2032 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
2033 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
2035 fCommonHistList->Add(fh1EvtSelection);
2036 fCommonHistList->Add(fh1EvtMult);
2037 fCommonHistList->Add(fh1EvtCent);
2038 fCommonHistList->Add(fh1VertexNContributors);
2039 fCommonHistList->Add(fh1VertexZ);
2040 fCommonHistList->Add(fh1nRecJetsCuts);
2041 fCommonHistList->Add(fh1Xsec);
2042 fCommonHistList->Add(fh1Trials);
2043 fCommonHistList->Add(fh1PtHard);
2044 fCommonHistList->Add(fh1PtHardTrials);
2046 if(genJets) fCommonHistList->Add(fh1nGenJets);
2050 fFFHistosRecCuts->AddToOutput(fCommonHistList);
2051 fFFHistosRecCutsInc->AddToOutput(fCommonHistList);
2052 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
2054 if(genJets && genTracks){
2055 fFFHistosGen->AddToOutput(fCommonHistList);
2056 fFFHistosGenInc->AddToOutput(fCommonHistList);
2057 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
2061 for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
2062 if(genJets && genTracks)
2063 fIDFFHistosGen[i]->AddToOutput(fCommonHistList);
2064 fIDFFHistosRecCuts[i]->AddToOutput(fCommonHistList);
2072 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
2073 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
2074 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
2075 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
2076 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
2078 if(genJets && genTracks){
2079 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
2080 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
2081 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
2082 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
2083 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
2087 fFFBckgHisto0RecEffRec->AddToOutput(fCommonHistList);
2088 fFFBckgHisto0SecRecNS->AddToOutput(fCommonHistList);
2089 fFFBckgHisto0SecRecS->AddToOutput(fCommonHistList);
2090 fFFBckgHisto0SecRecSsc->AddToOutput(fCommonHistList);
2095 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
2096 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
2097 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
2098 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
2099 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
2100 if(genJets && genTracks){
2101 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
2102 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->AddToOutput(fCommonHistList);
2103 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->AddToOutput(fCommonHistList);
2104 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->AddToOutput(fCommonHistList);
2105 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->AddToOutput(fCommonHistList);
2109 if(fh1BckgMult0) fCommonHistList->Add(fh1BckgMult0);
2110 if(fBckgType[1] != kBckgNone) fCommonHistList->Add(fh1BckgMult1);
2111 if(fBckgType[2] != kBckgNone) fCommonHistList->Add(fh1BckgMult2);
2112 if(fBckgType[3] != kBckgNone) fCommonHistList->Add(fh1BckgMult3);
2113 if(fBckgType[4] != kBckgNone) fCommonHistList->Add(fh1BckgMult4);
2117 if(fBranchEmbeddedJets.Length()){
2118 fCommonHistList->Add(fh1FractionPtEmbedded);
2119 fCommonHistList->Add(fh1IndexEmbedded);
2120 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
2121 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
2122 fCommonHistList->Add(fh1DeltaREmbedded);
2123 fCommonHistList->Add(fh1nEmbeddedJets);
2129 if(fQAMode&1){ // track QA
2130 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
2131 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
2134 if(fQAMode&2){ // jet QA
2135 fQAJetHistosRec->AddToOutput(fCommonHistList);
2136 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
2137 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
2138 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
2140 fQAJetHistosGen->AddToOutput(fCommonHistList);
2141 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
2147 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2148 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2149 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
2150 fCommonHistList->Add(fh1nRecBckgJetsCuts);
2151 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
2155 if(fEffMode && recJetsEff && genTracks){
2157 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
2158 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
2159 fQATrackHistosSecRecNS->AddToOutput(fCommonHistList);
2160 fQATrackHistosSecRecS->AddToOutput(fCommonHistList);
2161 fQATrackHistosSecRecSsc->AddToOutput(fCommonHistList);
2164 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
2165 fFFHistosSecRecNS->AddToOutput(fCommonHistList);
2166 fFFHistosSecRecS->AddToOutput(fCommonHistList);
2167 fFFHistosSecRecSsc->AddToOutput(fCommonHistList);
2169 fCommonHistList->Add(fh1nRecEffJets);
2170 fCommonHistList->Add(fh2PtRecVsGenPrim);
2171 fCommonHistList->Add(fh2PtRecVsGenSec);
2177 fProNtracksLeadingJet = new TProfile("AvgNoOfTracksLeadingJet","AvgNoOfTracksLeadingJet",100,0,250,0,50);
2178 fProDelR80pcPt = new TProfile("AvgdelR80pcPt","AvgdelR80pcPt",100,0,250,0,1);
2180 if(genJets && genTracks){
2181 fProNtracksLeadingJetGen = new TProfile("AvgNoOfTracksLeadingJetGen","AvgNoOfTracksLeadingJetGen",100,0,250,0,50);
2182 fProDelR80pcPtGen = new TProfile("AvgdelR80pcPtGen","AvgdelR80pcPtGen",100,0,250,0,1);
2186 fProNtracksLeadingJetBgrPerp2 = new TProfile("AvgNoOfTracksLeadingJetBgrPerp2","AvgNoOfTracksLeadingJetBgrPerp2",100,0,250,0,50);
2189 fProNtracksLeadingJetRecPrim = new TProfile("AvgNoOfTracksLeadingJetRecPrim","AvgNoOfTracksLeadingJetRecPrim",100,0,250,0,50);
2190 fProDelR80pcPtRecPrim = new TProfile("AvgdelR80pcPtRecPrim","AvgdelR80pcPtRecPrim",100,0,250,0,1);
2191 fProNtracksLeadingJetRecSecNS = new TProfile("AvgNoOfTracksLeadingJetRecSecNS","AvgNoOfTracksLeadingJetRecSecNS",100,0,250,0,50);
2192 fProNtracksLeadingJetRecSecS = new TProfile("AvgNoOfTracksLeadingJetRecSecS","AvgNoOfTracksLeadingJetRecSecS",100,0,250,0,50);
2193 fProNtracksLeadingJetRecSecSsc = new TProfile("AvgNoOfTracksLeadingJetRecSecSsc","AvgNoOfTracksLeadingJetRecSecSsc",100,0,250,0,50);
2197 for(Int_t ii=0; ii<5; ii++){
2198 if(ii==0)strTitJS = "_JetPt20to30";
2199 if(ii==1)strTitJS = "_JetPt30to40";
2200 if(ii==2)strTitJS = "_JetPt40to60";
2201 if(ii==3)strTitJS = "_JetPt60to80";
2202 if(ii==4)strTitJS = "_JetPt80to100";
2204 fProDelRPtSum[ii] = new TProfile(Form("AvgPtSumDelR%s",strTitJS.Data()),Form("AvgPtSumDelR%s",strTitJS.Data()),50,0,1,0,250);
2205 if(genJets && genTracks)
2206 fProDelRPtSumGen[ii] = new TProfile(Form("AvgPtSumDelRGen%s",strTitJS.Data()),Form("AvgPtSumDelRGen%s",strTitJS.Data()),50,0,1,0,250);
2208 fProDelRPtSumBgrPerp2[ii] = new TProfile(Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),50,0,1,0,250);
2210 fProDelRPtSumRecPrim[ii] = new TProfile(Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),50,0,1,0,250);
2211 fProDelRPtSumRecSecNS[ii] = new TProfile(Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),50,0,1,0,250);
2212 fProDelRPtSumRecSecS[ii] = new TProfile(Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),50,0,1,0,250);
2213 fProDelRPtSumRecSecSsc[ii] = new TProfile(Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),50,0,1,0,250);
2217 fCommonHistList->Add(fProNtracksLeadingJet);
2218 fCommonHistList->Add(fProDelR80pcPt);
2219 for(int ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSum[ii]);
2221 if(genJets && genTracks){
2222 fCommonHistList->Add(fProNtracksLeadingJetGen);
2223 fCommonHistList->Add(fProDelR80pcPtGen);
2224 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumGen[ii]);
2228 fCommonHistList->Add(fProNtracksLeadingJetBgrPerp2);
2229 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumBgrPerp2[ii]);
2233 fCommonHistList->Add(fProNtracksLeadingJetRecPrim);
2234 fCommonHistList->Add(fProDelR80pcPtRecPrim);
2235 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecPrim[ii]);
2237 fCommonHistList->Add(fProNtracksLeadingJetRecSecNS);
2238 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecNS[ii]);
2240 fCommonHistList->Add(fProNtracksLeadingJetRecSecS);
2241 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecS[ii]);
2243 fCommonHistList->Add(fProNtracksLeadingJetRecSecSsc);
2244 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecSsc[ii]);
2248 // =========== Switch on Sumw2 for all histos ===========
2249 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
2250 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
2251 if (h1) h1->Sumw2();
2253 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
2254 if(hnSparse) hnSparse->Sumw2();
2258 TH1::AddDirectory(oldStatus);
2262 // Load PID framework if desired
2264 fUseJetPIDtask = fIDFFMode || fFFMode;
2265 fUseInclusivePIDtask = fQAMode && (fQAMode&1);
2267 if (fUseJetPIDtask || fUseInclusivePIDtask) {
2268 TObjArray* tasks = AliAnalysisManager::GetAnalysisManager()->GetTasks();
2270 Printf("ERROR loading PID tasks: Failed to retrieve tasks from analysis manager!\n");
2272 fUseJetPIDtask = kFALSE;
2273 fUseInclusivePIDtask = kFALSE;
2276 if (fUseJetPIDtask) {
2277 if (fNumJetPIDtasks > 0) {
2278 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2279 fJetPIDtask[i] = (AliAnalysisTaskPID*)tasks->FindObject(fNameJetPIDtask[i].Data());
2281 if (!fJetPIDtask[i]) {
2282 Printf("ERROR: Failed to load jet pid task!\n");
2283 fUseJetPIDtask = kFALSE;
2288 Printf("ERROR: zero jet pid tasks!\n");
2289 fUseJetPIDtask = kFALSE;
2293 if (fUseInclusivePIDtask) {
2294 if (fNumInclusivePIDtasks > 0) {
2295 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2296 fInclusivePIDtask[i] = (AliAnalysisTaskPID*)tasks->FindObject(fNameInclusivePIDtask[i].Data());
2298 if (!fInclusivePIDtask[i]) {
2299 Printf("ERROR: Failed to load inclusive pid task!\n");
2300 fUseInclusivePIDtask = kFALSE;
2305 Printf("ERROR: zero inclusive pid tasks!\n");
2306 fUseJetPIDtask = kFALSE;
2311 PostData(1, fCommonHistList);
2314 //_______________________________________________
2315 void AliAnalysisTaskIDFragmentationFunction::Init()
2318 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::Init()");
2322 //_____________________________________________________________
2323 void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
2326 // Called for each event
2328 if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserExec()");
2331 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
2333 // Trigger selection
2334 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
2335 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
2337 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
2338 fh1EvtSelection->Fill(1.);
2339 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
2340 PostData(1, fCommonHistList);
2344 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
2346 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
2349 fMCEvent = MCEvent();
2351 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
2354 // get AOD event from input/ouput
2355 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2356 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
2357 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
2358 if(fUseAODInputJets) fAODJets = fAOD;
2359 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
2362 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2363 if( handler && handler->InheritsFrom("AliAODHandler") ) {
2364 fAOD = ((AliAODHandler*)handler)->GetAOD();
2366 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
2370 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
2371 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2372 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
2373 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
2374 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
2378 if(fNonStdFile.Length()!=0){
2379 // case we have an AOD extension - fetch the jets from the extended output
2381 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
2382 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
2384 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
2389 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
2393 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
2398 // event selection **************************************************
2399 // *** event class ***
2400 AliVEvent* evtForCentDetermination = handler->InheritsFrom("AliAODInputHandler") ? fAOD : InputEvent();
2402 Double_t centPercent = -1;
2405 if(handler->InheritsFrom("AliAODInputHandler")){
2406 // since it is not supported by the helper task define own classes
2407 centPercent = fAOD->GetHeader()->GetCentrality();
2409 if(centPercent>10) cl = 2;
2410 if(centPercent>30) cl = 3;
2411 if(centPercent>50) cl = 4;
2414 cl = AliAnalysisHelperJetTasks::EventClass();
2415 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
2418 if(cl!=fEventClass){
2419 // event not in selected event class, reject event
2420 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
2421 fh1EvtSelection->Fill(2.);
2422 PostData(1, fCommonHistList);
2427 // *** vertex cut ***
2428 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
2430 Printf("%s:%d Primary vertex not found", (char*)__FILE__,__LINE__);
2434 Int_t nTracksPrim = primVtx->GetNContributors();
2435 fh1VertexNContributors->Fill(nTracksPrim);
2438 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
2440 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
2441 fh1EvtSelection->Fill(3.);
2442 PostData(1, fCommonHistList);
2446 fh1VertexZ->Fill(primVtx->GetZ());
2448 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
2449 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2450 fh1EvtSelection->Fill(4.);
2451 PostData(1, fCommonHistList);
2455 TString primVtxName(primVtx->GetName());
2457 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
2458 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
2459 fh1EvtSelection->Fill(5.);
2460 PostData(1, fCommonHistList);
2464 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
2465 fh1EvtSelection->Fill(0.);
2466 fh1EvtCent->Fill(centPercent);
2468 // Set centrality percentile fix to -1 for pp to be used for the PID framework
2473 //___ get MC information __________________________________________________________________
2475 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2477 if (fUseInclusivePIDtask) {
2478 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2479 fInclusivePIDtask[i]->FillPythiaTrials(fAvgTrials);
2482 if (fUseJetPIDtask) {
2483 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
2484 fJetPIDtask[i]->FillPythiaTrials(fAvgTrials);
2487 Double_t ptHard = 0.;
2488 Double_t nTrials = 1; // trials for MC trigger weight for real data
2491 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2495 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2496 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2498 if(pythiaGenHeader){
2499 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
2500 nTrials = pythiaGenHeader->Trials();
2501 ptHard = pythiaGenHeader->GetPtHard();
2503 fh1PtHard->Fill(ptHard);
2504 fh1PtHardTrials->Fill(ptHard,nTrials);
2506 } else { // no pythia, hijing?
2508 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
2510 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2511 if(!hijingGenHeader){
2512 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
2514 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
2518 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2522 //___ fetch jets __________________________________________________________________________
2524 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
2526 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
2527 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2528 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2530 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
2531 Int_t nRecJetsCuts = 0;
2532 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
2533 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2534 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2535 fh1nRecJetsCuts->Fill(nRecJetsCuts);
2537 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2539 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
2541 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
2542 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2544 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2545 fh1nGenJets->Fill(nGenJets);
2548 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2549 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
2550 Int_t nRecEffJets = 0;
2551 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
2552 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2553 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2554 fh1nRecEffJets->Fill(nRecEffJets);
2557 Int_t nEmbeddedJets = 0;
2558 TArrayI iEmbeddedMatchIndex;
2559 TArrayF fEmbeddedPtFraction;
2562 if(fBranchEmbeddedJets.Length()){
2563 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
2564 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
2565 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2566 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2567 fh1nEmbeddedJets->Fill(nEmbeddedJets);
2569 Float_t maxDist = 0.3;
2571 iEmbeddedMatchIndex.Set(nEmbeddedJets);
2572 fEmbeddedPtFraction.Set(nEmbeddedJets);
2574 iEmbeddedMatchIndex.Reset(-1);
2575 fEmbeddedPtFraction.Reset(0);
2577 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
2578 fJetsRecCuts, nRecJetsCuts,
2579 iEmbeddedMatchIndex, fEmbeddedPtFraction,
2584 //____ fetch background clusters ___________________________________________________
2586 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2587 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2588 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2590 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
2591 Int_t nRecBckgJets = 0;
2592 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
2593 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2594 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2596 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
2597 Int_t nRecBckgJetsCuts = 0;
2598 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
2599 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2600 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
2601 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
2603 if(0){ // protection OB - not yet implemented
2604 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2605 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
2606 Int_t nGenBckgJets = 0;
2607 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
2608 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2609 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2610 fh1nGenBckgJets->Fill(nGenBckgJets);
2615 //____ fetch particles __________________________________________________________
2618 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
2619 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
2620 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
2622 Int_t nRecPartCuts = 0;
2623 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
2624 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2625 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",
2626 (char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2627 fh1EvtMult->Fill(nRecPartCuts);
2630 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
2632 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
2633 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2634 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2636 // Just cut on filterBit, but take the full acceptance
2637 Int_t nTCutsEfficiency = GetListOfTracks(fTracksRecCutsEfficiency, kTrackAODQualityCuts);
2638 Int_t nRecPartCutsEfficiency = 0;
2639 if(nTCutsEfficiency>=0) nRecPartCutsEfficiency = fTracksRecCutsEfficiency->GetEntries();
2640 if(fDebug>2)Printf("%s:%d Selected Rec tracks efficiency after cuts: %d %d",(char*)__FILE__,__LINE__,
2641 nTCutsEfficiency,nRecPartCutsEfficiency);
2642 if(nRecPartCutsEfficiency != nTCutsEfficiency) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",
2643 (char*)__FILE__,__LINE__,nTCutsEfficiency,nRecPartCutsEfficiency);
2645 AliPIDResponse* pidResponse = 0x0;
2646 if (fUseJetPIDtask || fUseInclusivePIDtask) {
2647 if (!inputHandler) {
2648 AliFatal("Input handler needed");
2652 // PID response object
2653 pidResponse = inputHandler->GetPIDResponse();
2655 AliFatal("PIDResponse object was not created");
2661 //____ analysis, fill histos ___________________________________________________
2666 TClonesArray *tca = fUseInclusivePIDtask ? dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName())) : 0x0;
2668 // Fill efficiency for generated primaries and also fill histos for generated yields (primaries + all)
2669 // Efficiency, inclusive - particle level
2670 if (fUseInclusivePIDtask && tca) {
2671 for (Int_t it = 0; it < tca->GetEntriesFast(); it++) {
2672 AliAODMCParticle* part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2676 // Define clean MC sample with corresponding particle level track cuts:
2677 // - MC-track must be in desired eta range
2678 // - MC-track must be physical primary
2679 // - Species must be one of those in question
2681 if (part->Eta() > fTrackEtaMax || part->Eta() < fTrackEtaMin)
2684 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(part->GetPdgCode());
2686 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
2687 // and only affect the efficiencies for all (i.e. not identified) what is desired!
2688 //if (mcID == AliPID::kUnknown)
2691 if (!part->IsPhysicalPrimary())
2694 Int_t iMother = part->GetMother();
2696 continue; // Not a physical primary
2699 Double_t pT = part->Pt();
2701 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
2702 Double_t chargeMC = part->Charge() / 3.;
2704 if (TMath::Abs(chargeMC) < 0.01)
2705 continue; // Reject neutral particles (only relevant, if mcID is not used)
2707 Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { mcID, pT, centPercent, -1, -1, -1, -1 };
2709 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
2710 valuesGenYield[fInclusivePIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
2711 fInclusivePIDtask[i]->FillGeneratedYield(valuesGenYield);
2714 Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { mcID, pT, part->Eta(), chargeMC,
2715 centPercent, -1, -1, -1 };// no jet pT etc since inclusive spectrum
2716 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2717 fInclusivePIDtask[i]->FillEfficiencyContainer(valuesEff, AliAnalysisTaskPID::kStepGenWithGenCuts);
2721 if(fUseInclusivePIDtask){
2722 //Efficiency, inclusive - detector level
2723 for(Int_t it=0; it<nRecPartCutsEfficiency; ++it){
2724 // fill inclusive tracks XXX, they have the same track cuts!
2725 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCutsEfficiency->At(it));
2727 Double_t dEdxTPC = pidResponse->IsTunedOnData() ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod) :
2728 inclusiveaod->GetTPCsignal();
2733 Int_t label = TMath::Abs(inclusiveaod->GetLabel());
2735 // find MC track in our list, if available
2736 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
2740 pdg = gentrack->GetPdgCode();
2742 // For efficiency: Reconstructed track has survived all cuts on the detector level (no cut on eta acceptance)
2743 // and has an associated MC track
2744 // -> Check whether associated MC track belongs to the clean MC sample defined above,
2745 // i.e. survives the particle level track cuts
2747 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
2749 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
2750 // and only affect the efficiencies for all (i.e. not identified) what is desired!
2751 //if (mcID == AliPID::kUnknown)
2754 // Fill efficiency for reconstructed primaries
2755 if (!gentrack->IsPhysicalPrimary())
2758 * Int_t iMother = gentrack->GetMother();
2760 * continue; // Not a physical primary
2763 if (gentrack->Eta() > fTrackEtaMax || gentrack->Eta() < fTrackEtaMin)
2766 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
2767 Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { mcID, gentrack->Pt(), gentrack->Eta(), gentrack->Charge() / 3.,
2769 -1, -1, -1 };// no jet pT etc since inclusive spectrum
2770 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2771 fInclusivePIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
2773 Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { mcID, inclusiveaod->Pt(), inclusiveaod->Eta(),
2774 inclusiveaod->Charge(), centPercent,
2775 -1, -1, -1 };// no jet pT etc since inclusive spectrum
2776 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2777 fInclusivePIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
2784 for(Int_t it=0; it<nRecPartCuts; ++it){
2785 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
2786 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
2788 // fill inclusive tracks XXX, they have the same track cuts!
2789 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
2791 if(fUseInclusivePIDtask){
2792 Double_t dEdxTPC = pidResponse->IsTunedOnData() ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod)
2793 : inclusiveaod->GetTPCsignal();
2798 Int_t label = TMath::Abs(inclusiveaod->GetLabel());
2800 // find MC track in our list, if available
2801 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
2805 pdg = gentrack->GetPdgCode();
2807 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2808 fInclusivePIDtask[i]->ProcessTrack(inclusiveaod, pdg, centPercent, -1); // no jet pT since inclusive spectrum
2811 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
2812 Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { mcID, inclusiveaod->Pt(), inclusiveaod->Eta(),
2813 inclusiveaod->Charge(), centPercent,
2815 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2816 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
2818 Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
2819 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2820 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
2821 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
2824 if (gentrack->IsPhysicalPrimary()) {
2825 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
2826 fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
2827 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
2833 for(Int_t it=0; it<nGenPart; ++it){
2834 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
2835 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2841 for(Int_t ij=0; ij<nRecJets; ++ij){
2842 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
2843 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2848 if(fQAMode || fFFMode){
2850 for(Int_t ij=0; ij<nGenJets; ++ij){
2851 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
2855 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2857 if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
2859 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
2860 TList* jettracklist = new TList();
2861 Double_t sumPt = 0.;
2862 Bool_t isBadJet = kFALSE;
2864 if(GetFFRadius()<=0){
2865 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2867 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2870 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
2871 if(isBadJet) continue;
2873 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2875 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
2876 if(!trackVP)continue;
2877 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
2879 Float_t jetPt = jet->Pt();
2880 Float_t trackPt = trackV->Pt();
2882 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2884 if(fFFMode && (ij==0)) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
2885 if(fFFMode) fFFHistosGenInc->FillFF( trackPt, jetPt, incrementJetPt );
2886 if(it==0){ // leading track
2887 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( trackPt, jetPt, kTRUE );
2890 if (fUseJetPIDtask && incrementJetPt) {
2891 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
2892 fJetPIDtask[i]->FillGenJets(fJetPIDtask[i]->GetCentralityPercentile(evtForCentDetermination), jetPt);
2896 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(trackVP->PdgCode());
2897 if (mcID != AliPID::kUnknown) {
2898 // WARNING: The number of jets for the different species does not make sense -> One has to take
2899 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
2900 // not to get confused
2901 fIDFFHistosGen[mcID]->FillFF(trackPt, jetPt, kFALSE);
2904 Int_t pidWeightedSpecies = fJetPIDtask->GetRandomParticleTypeAccordingToParticleFractions(trackPt, jetPt, centPercent, kTRUE);
2905 if (pidWeightedSpecies < 0 || pidWeightedSpecies >= AliPID::kSPECIES) {
2906 Printf("Failed to determine particle ID for track in jet (gen) -> ID FF histos not filled with this track!");
2907 Printf("Track details: trackPt %f, jetPt %f, centrality %f!", trackPt, jetPt, centPercent);
2910 // WARNING: The number of jets for the different species does not make sense -> One has to take
2911 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
2912 // not to get confused
2913 fIDFFHistosGen[pidWeightedSpecies]->FillFF(trackPt, jetPt, kFALSE);
2920 // Efficiency, jets - particle level
2921 if (fUseJetPIDtask) {
2922 AliAODMCParticle* part = dynamic_cast<AliAODMCParticle*>(jettracklist->At(it));
2924 AliError("expected ref track not found ");
2927 // Fill efficiency for generated primaries and also fill histos for generated yields (primaries + all)
2928 if (part->Eta() > fTrackEtaMax || part->Eta() < fTrackEtaMin)
2931 Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(part->GetPdgCode());
2933 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
2934 // and only affect the efficiencies for all (i.e. not identified) what is desired!
2935 //if (mcID == AliPID::kUnknown)
2938 if (!part->IsPhysicalPrimary())
2941 // Int_t iMother = part->GetMother();
2942 // if (iMother >= 0)
2943 // continue; // Not a physical primary
2946 Double_t z = -1., xi = -1.;
2947 AliAnalysisTaskPID::GetJetTrackObservables(trackPt, jetPt, z, xi);
2949 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
2950 Double_t chargeMC = part->Charge() / 3.;
2952 if (TMath::Abs(chargeMC) < 0.01)
2953 continue; // Reject neutral particles (only relevant, if mcID is not used)
2955 Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { mcID, trackPt, centPercent, jetPt, z, xi, chargeMC };
2957 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
2958 valuesGenYield[fJetPIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
2959 fJetPIDtask[i]->FillGeneratedYield(valuesGenYield);
2963 Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { mcID, trackPt, part->Eta(), chargeMC,
2964 centPercent, jetPt, z, xi };
2965 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
2966 fJetPIDtask[i]->FillEfficiencyContainer(valuesEff, AliAnalysisTaskPID::kStepGenWithGenCuts);
2971 if(fBckgType[0]!=kBckgNone)
2972 FillBckgHistos(fBckgType[0], fTracksGen, fJetsGen, jet,
2973 fFFBckgHisto0Gen, fQABckgHisto0Gen);
2974 if(fBckgType[1]!=kBckgNone)
2975 FillBckgHistos(fBckgType[1], fTracksGen, fJetsGen, jet,
2976 fFFBckgHisto1Gen, fQABckgHisto1Gen);
2977 if(fBckgType[2]!=kBckgNone)
2978 FillBckgHistos(fBckgType[2], fTracksGen, fJetsGen, jet,
2979 fFFBckgHisto2Gen, fQABckgHisto2Gen);
2980 if(fBckgType[3]!=kBckgNone)
2981 FillBckgHistos(fBckgType[3], fTracksGen, fJetsGen, jet,
2982 fFFBckgHisto3Gen, fQABckgHisto3Gen);
2983 if(fBckgType[4]!=kBckgNone)
2984 FillBckgHistos(fBckgType[4], fTracksGen, fJetsGen, jet,
2985 fFFBckgHisto4Gen, fQABckgHisto4Gen);
2986 } // end if(fBckgMode)
2989 if(fJSMode) FillJetShape(jet, jettracklist, fProNtracksLeadingJetGen, fProDelRPtSumGen, fProDelR80pcPtGen);
2991 delete jettracklist;
2996 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
2998 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
2999 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
3000 if(fQAMode&2 && (ij==0)) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3002 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
3004 Double_t ptFractionEmbedded = 0;
3005 AliAODJet* embeddedJet = 0;
3007 if(fBranchEmbeddedJets.Length()){ // find embedded jet
3009 Int_t indexEmbedded = -1;
3010 for(Int_t i=0; i<nEmbeddedJets; i++){
3011 if(iEmbeddedMatchIndex[i] == ij){
3013 ptFractionEmbedded = fEmbeddedPtFraction[i];
3017 fh1IndexEmbedded->Fill(indexEmbedded);
3018 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
3020 if(indexEmbedded>-1){
3022 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
3023 if(!embeddedJet) continue;
3025 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
3026 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
3028 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
3029 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
3030 fh1DeltaREmbedded->Fill(deltaR);
3034 // get tracks in jet
3035 TList* jettracklist = new TList();
3036 Double_t sumPt = 0.;
3037 Bool_t isBadJet = kFALSE;
3039 if(GetFFRadius()<=0){
3040 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3042 if(fUseEmbeddedJetAxis){
3043 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3045 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
3048 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
3050 if(isBadJet) continue;
3052 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
3054 TClonesArray *tca = fUseJetPIDtask ? dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName())) : 0x0;
3056 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
3057 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
3058 if(!aodtrack) continue;
3060 Double_t pT = aodtrack->Pt();
3061 Float_t jetPt = jet->Pt();
3062 if(fUseEmbeddedJetPt){
3063 if(embeddedJet) jetPt = embeddedJet->Pt();
3067 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3069 if(fFFMode && (ij==0)) fFFHistosRecCuts->FillFF(pT, jetPt, incrementJetPt);
3070 if(fFFMode) fFFHistosRecCutsInc->FillFF(pT, jetPt, incrementJetPt);
3072 if(it==0){ // leading track
3073 if(fFFMode) fFFHistosRecLeadingTrack->FillFF(pT, jetPt, kTRUE);
3076 if (fUseJetPIDtask && incrementJetPt) {
3077 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3078 fJetPIDtask[i]->FillRecJets(fJetPIDtask[i]->GetCentralityPercentile(evtForCentDetermination), jetPt);
3081 if (fUseJetPIDtask) {
3082 Double_t dEdxTPC = pidResponse->IsTunedOnData() ? pidResponse->GetTPCsignalTunedOnData(aodtrack)
3083 : aodtrack->GetTPCsignal();
3088 Int_t label = TMath::Abs(aodtrack->GetLabel());
3090 // Find MC track in our list, if available
3091 AliAODMCParticle* gentrack = tca ? dynamic_cast<AliAODMCParticle*>(tca->At(label)) : 0x0;
3093 Int_t mcID = AliPID::kUnknown;
3096 pdg = gentrack->GetPdgCode();
3098 // Secondaries, jets
3099 mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
3101 Double_t z = -1., xi = -1.;
3102 AliAnalysisTaskPID::GetJetTrackObservables(pT, jetPt, z, xi);
3104 Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { mcID, pT, aodtrack->Eta(), aodtrack->Charge(),
3105 centPercent, jetPt, z, xi };
3106 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3107 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
3109 Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
3110 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3111 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
3112 AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
3115 if (gentrack->IsPhysicalPrimary()) {
3116 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3117 fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
3121 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3122 fJetPIDtask[i]->ProcessTrack(aodtrack, pdg, centPercent, jetPt);
3125 // NOTE: Just take particle fraction from first task (should anyway be the same for all tasks)
3126 Int_t pidWeightedSpecies = fJetPIDtask[0]->GetRandomParticleTypeAccordingToParticleFractions(pT, jetPt,
3127 centPercent, kTRUE);
3128 if (pidWeightedSpecies < 0 || pidWeightedSpecies >= AliPID::kSPECIES) {
3129 Printf("Failed to determine particle ID for track in jet (recCuts) -> ID FF histos not filled with this track!");
3130 Printf("Track details: trackPt %f, jetPt %f, centrality %f!", pT, jetPt, centPercent);
3133 // WARNING: The number of jets for the different species does not make sense -> One has to take
3134 // the number of jets for ALL particles. Thus, just do not fill the num of jet histos in order
3135 // not to get confused
3136 fIDFFHistosRecCuts[pidWeightedSpecies]->FillFF(aodtrack->Pt(), jetPt, kFALSE);
3140 // Efficiency, jets - detector level
3142 // Following lines are not needed - just keep other species (like casecades) - will end up in overflow bin
3143 // and only affect the efficiencies for all (i.e. not identified) what is desired!
3144 //if (mcID == AliPID::kUnknown)
3147 // Fill efficiency for reconstructed primaries
3148 if (!gentrack->IsPhysicalPrimary())
3151 Int_t iMother = gentrack->GetMother();
3153 continue; // Not a physical primary
3156 if (gentrack->Eta() > fTrackEtaMax || gentrack->Eta() < fTrackEtaMin)
3159 Double_t genZ = -1., genXi = -1.;
3160 Double_t genPt = gentrack->Pt();
3161 AliAnalysisTaskPID::GetJetTrackObservables(genPt, jetPt, genZ, genXi);
3163 Double_t measZ = -1., measXi = -1.;
3164 Double_t measPt = aodtrack->Pt();
3165 AliAnalysisTaskPID::GetJetTrackObservables(measPt, jetPt, measZ, measXi);
3168 // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
3169 Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { mcID, genPt, gentrack->Eta(), gentrack->Charge() / 3.,
3170 centPercent, jetPt, genZ, genXi };
3171 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3172 fJetPIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
3174 Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { mcID, measPt, aodtrack->Eta(), aodtrack->Charge(),
3175 centPercent, jetPt, measZ, measXi };
3176 for (Int_t i = 0; i < fNumJetPIDtasks; i++)
3177 fJetPIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
3183 if(fBckgMode && (ij==0)){
3184 if(fBckgType[0]!=kBckgNone)
3185 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet,
3186 fFFBckgHisto0RecCuts,fQABckgHisto0RecCuts, fh1BckgMult0);
3187 if(fBckgType[1]!=kBckgNone)
3188 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet,
3189 fFFBckgHisto1RecCuts,fQABckgHisto1RecCuts, fh1BckgMult1);
3190 if(fBckgType[2]!=kBckgNone)
3191 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet,
3192 fFFBckgHisto2RecCuts,fQABckgHisto2RecCuts, fh1BckgMult1);
3193 if(fBckgType[3]!=kBckgNone)
3194 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet,
3195 fFFBckgHisto3RecCuts,fQABckgHisto3RecCuts, fh1BckgMult2);
3196 if(fBckgType[4]!=kBckgNone)
3197 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet,
3198 fFFBckgHisto4RecCuts,fQABckgHisto4RecCuts, fh1BckgMult3);
3199 } // end if(fBckgMode)
3202 if(fJSMode && (ij==0)) FillJetShape(jet, jettracklist, fProNtracksLeadingJet, fProDelRPtSum, fProDelR80pcPt);
3204 delete jettracklist;
3206 } // end: cut embedded ratio
3207 } // end: leading jet or all jets
3208 } // end: rec. jets after cuts
3209 } // end: QA, FF and intra-jet
3212 // ____ efficiency _______________________________
3214 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
3216 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
3220 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
3223 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
3224 TArrayI indexAODTrSecNS;
3226 TArrayI indexMCTrSecNS;
3228 TArrayI indexAODTrSecS;
3230 TArrayI indexMCTrSecS;
3232 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
3233 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
3235 Int_t nTracksAODMCChargedSecNS = GetListOfTracks(fTracksAODMCChargedSecNS, kTrackAODMCChargedSecNS);
3236 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecNS);
3238 Int_t nTracksAODMCChargedSecS = GetListOfTracks(fTracksAODMCChargedSecS, kTrackAODMCChargedSecS);
3239 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks S: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecS);
3241 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
3242 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
3244 // associate gen and rec tracks, store indices in TArrays
3245 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
3246 AssociateGenRec(fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,indexMCTrSecNS,isGenSecNS,fh2PtRecVsGenSec);
3247 AssociateGenRec(fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,indexMCTrSecS,isGenSecS,fh2PtRecVsGenSec);
3250 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
3253 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecNS,fTracksAODMCChargedSecNS,indexAODTrSecNS,isGenSecNS);
3254 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecS,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS);
3255 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecSsc,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS,kTRUE);
3259 Double_t sumPtGenLeadingJetRecEff = 0;
3260 Double_t sumPtGenLeadingJetSec = 0;
3261 Double_t sumPtRecLeadingJetRecEff = 0;
3263 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
3265 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
3267 Bool_t isBadJetGenPrim = kFALSE;
3268 Bool_t isBadJetGenSec = kFALSE;
3269 Bool_t isBadJetRec = kFALSE;
3272 if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
3274 // for efficiency: gen tracks from pointing with gen/rec jet
3275 TList* jettracklistGenPrim = new TList();
3277 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
3278 // note : FF recEff gen histos will be somewhat useless in this approach
3280 if(GetFFRadius() >0)
3281 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
3283 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
3285 TList* jettracklistGenSecNS = new TList();
3286 if(GetFFRadius() >0)
3287 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3289 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3291 TList* jettracklistGenSecS = new TList();
3292 if(GetFFRadius() >0)
3293 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3295 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
3298 // bin efficiency in jet pt bins using rec tracks
3299 TList* jettracklistRec = new TList();
3300 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
3301 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
3304 Double_t jetEta = jet->Eta();
3305 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
3307 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
3308 if(GetFFMinNTracks()>0 && jettracklistGenSecNS->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
3309 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
3311 if(isBadJetRec) continue;
3313 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
3317 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
3318 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
3319 0,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
3321 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
3322 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
3323 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
3326 // secondaries: use jet pt from primaries
3327 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
3328 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts, indexAODTrSecNS,isGenSecNS,
3329 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
3331 else FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
3332 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS,
3333 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
3335 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecS,jet,
3336 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3337 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
3339 else FillJetTrackHistosRec(fFFHistosSecRecS,jet,
3340 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3341 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
3343 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
3344 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3345 0,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
3347 else FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
3348 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
3349 jettracklistRec,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
3352 delete jettracklistGenPrim;
3353 delete jettracklistGenSecNS;
3354 delete jettracklistGenSecS;
3355 delete jettracklistRec;
3358 if(fBckgMode && fFFMode){
3360 TList* perpjettracklistGen = new TList();
3361 TList* perpjettracklistGen1 = new TList();
3362 TList* perpjettracklistGen2 = new TList();
3364 //Double_t sumPtGenPerp = 0.;
3365 Double_t sumPtGenPerp1 = 0.;
3366 Double_t sumPtGenPerp2 = 0.;
3367 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerp1);
3368 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen2, jet, TMath::Abs(GetFFRadius()) ,
3371 perpjettracklistGen->AddAll(perpjettracklistGen1);
3372 perpjettracklistGen->AddAll(perpjettracklistGen2);
3373 //sumPtGenPerp = 0.5*(sumPtGenPerp1+sumPtGenPerp2);
3375 TList* perpjettracklistGenSecNS = new TList();
3376 TList* perpjettracklistGenSecNS1 = new TList();
3377 TList* perpjettracklistGenSecNS2 = new TList();
3379 //Double_t sumPtGenPerpNS = 0.;
3380 Double_t sumPtGenPerpNS1 = 0.;
3381 Double_t sumPtGenPerpNS2 = 0.;
3382 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS1, jet, TMath::Abs(GetFFRadius()) ,
3384 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS2, jet, TMath::Abs(GetFFRadius()) ,
3387 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS1);
3388 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS2);
3389 //sumPtGenPerpNS = 0.5*(sumPtGenPerpNS1+sumPtGenPerpNS2);
3392 TList* perpjettracklistGenSecS = new TList();
3393 TList* perpjettracklistGenSecS1 = new TList();
3394 TList* perpjettracklistGenSecS2 = new TList();
3396 //Double_t sumPtGenPerpS = 0.;
3397 Double_t sumPtGenPerpS1 = 0.;
3398 Double_t sumPtGenPerpS2 = 0.;
3399 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS1, jet, TMath::Abs(GetFFRadius()) ,
3401 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS2, jet, TMath::Abs(GetFFRadius()) ,
3404 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS1);
3405 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS2);
3406 //sumPtGenPerpS = 0.5*(sumPtGenPerpS1+sumPtGenPerpS2);
3409 if(perpjettracklistGen->GetSize() != perpjettracklistGen1->GetSize() + perpjettracklistGen2->GetSize()){
3410 cout<<" ERROR: perpjettracklistGen size "<<perpjettracklistGen->GetSize()<<" perp1 "<<perpjettracklistGen1->GetSize()
3411 <<" perp2 "<<perpjettracklistGen2->GetSize()<<endl;
3415 if(perpjettracklistGenSecNS->GetSize() != perpjettracklistGenSecNS1->GetSize() + perpjettracklistGenSecNS2->GetSize()){
3416 cout<<" ERROR: perpjettracklistGenSecNS size "<<perpjettracklistGenSecNS->GetSize()<<" perp1 "<<perpjettracklistGenSecNS1->GetSize()
3417 <<" perp2 "<<perpjettracklistGenSecNS2->GetSize()<<endl;
3421 if(perpjettracklistGenSecS->GetSize() != perpjettracklistGenSecS1->GetSize() + perpjettracklistGenSecS2->GetSize()){
3422 cout<<" ERROR: perpjettracklistGenSecS size "<<perpjettracklistGenSecS->GetSize()<<" perp1 "<<perpjettracklistGenSecS1->GetSize()
3423 <<" perp2 "<<perpjettracklistGenSecS2->GetSize()<<endl;
3428 FillJetTrackHistosRec(fFFBckgHisto0RecEffRec,jet,
3429 perpjettracklistGen,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
3431 FillJetTrackHistosRec(fFFBckgHisto0SecRecNS,jet,
3432 perpjettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS);
3434 FillJetTrackHistosRec(fFFBckgHisto0SecRecS,jet,
3435 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS);
3437 FillJetTrackHistosRec(fFFBckgHisto0SecRecSsc,jet,
3438 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,0,kTRUE);
3441 delete perpjettracklistGen;
3442 delete perpjettracklistGen1;
3443 delete perpjettracklistGen2;
3445 delete perpjettracklistGenSecNS;
3446 delete perpjettracklistGenSecNS1;
3447 delete perpjettracklistGenSecNS2;
3449 delete perpjettracklistGenSecS;
3450 delete perpjettracklistGenSecS1;
3451 delete perpjettracklistGenSecS2;
3458 //___________________
3460 fTracksRecCuts->Clear();
3461 fTracksRecCutsEfficiency->Clear();
3462 fTracksGen->Clear();
3463 fTracksAODMCCharged->Clear();
3464 fTracksAODMCChargedSecNS->Clear();
3465 fTracksAODMCChargedSecS->Clear();
3466 fTracksRecQualityCuts->Clear();
3469 fJetsRecCuts->Clear();
3471 fJetsRecEff->Clear();
3472 fJetsEmbedded->Clear();
3476 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
3477 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
3478 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
3480 fBckgJetsRec->Clear();
3481 fBckgJetsRecCuts->Clear();
3482 fBckgJetsGen->Clear();
3487 PostData(1, fCommonHistList);
3489 if (fUseJetPIDtask) {
3490 for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
3491 fJetPIDtask[i]->PostOutputData();
3492 fJetPIDtask[i]->IncrementEventsProcessed(centPercent);
3496 if (fUseInclusivePIDtask) {
3497 for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
3498 fInclusivePIDtask[i]->PostOutputData();
3499 fInclusivePIDtask[i]->IncrementEventsProcessed(centPercent);
3504 //______________________________________________________________
3505 void AliAnalysisTaskIDFragmentationFunction::Terminate(Option_t *)
3509 if(fDebug > 1) printf("AliAnalysisTaskIDFragmentationFunction::Terminate() \n");
3512 //_________________________________________________________________________________
3513 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
3515 // fill list of tracks selected according to type
3517 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
3520 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
3524 if(!fAOD) return -1;
3526 if(!fAOD->GetTracks()) return 0;
3528 if(type==kTrackUndef) return 0;
3532 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
3534 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
3535 if(!aodExtraTracks)return iCount;
3536 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
3537 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
3538 if (!track) continue;
3540 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
3543 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
3545 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
3547 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
3548 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
3549 if(tr->Pt() < fTrackPtCut) continue;
3557 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
3559 // all rec. tracks, esd filter mask, eta range
3561 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
3562 AliAODTrack *tr = fAOD->GetTrack(it);
3564 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
3566 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
3567 if(type == kTrackAODCuts){
3568 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
3569 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
3570 if(tr->Pt() < fTrackPtCut) continue;
3577 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
3578 // kine particles, all or rather charged
3579 if(!fMCEvent) return iCount;
3581 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
3582 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
3584 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
3585 if(part->Charge()==0) continue;
3587 if(type == kTrackKineChargedAcceptance &&
3588 ( part->Eta() < fTrackEtaMin
3589 || part->Eta() > fTrackEtaMax
3590 || part->Phi() < fTrackPhiMin
3591 || part->Phi() > fTrackPhiMax
3592 || part->Pt() < fTrackPtCut)) continue;
3599 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS) {
3600 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
3601 if(!fAOD) return -1;
3603 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3604 if(!tca)return iCount;
3606 for(int it=0; it<tca->GetEntriesFast(); ++it){
3607 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
3609 if(type != kTrackAODMCChargedSecNS && type != kTrackAODMCChargedSecS && !part->IsPhysicalPrimary())continue;
3610 if((type == kTrackAODMCChargedSecNS || type == kTrackAODMCChargedSecS) && part->IsPhysicalPrimary())continue;
3612 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
3613 if(part->Charge()==0) continue;
3615 if(type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
3616 Bool_t isFromStrange = kFALSE;
3617 Int_t iMother = part->GetMother();
3619 AliAODMCParticle *partM = dynamic_cast<AliAODMCParticle*>(tca->At(iMother));
3620 if(!partM) continue;
3622 Int_t codeM = TMath::Abs(partM->GetPdgCode());
3623 Int_t mfl = Int_t (codeM/ TMath::Power(10, Int_t(TMath::Log10(codeM))));
3625 if (mfl == 3 && codeM != 3) isFromStrange = kTRUE;
3626 if(codeM == 130) isFromStrange = kTRUE; // K0 long
3627 if(part->IsSecondaryFromMaterial()) isFromStrange = kFALSE; // strange resonances from hadronic showers ?
3630 // cout<<" mfl "<<mfl<<" codeM "<<partM->GetPdgCode()<<" code this track "<<part->GetPdgCode()<<endl;
3631 // cout<<" index this track "<<it<<" index daughter 0 "<<partM->GetDaughter(0)<<" 1 "<<partM->GetDaughter(1)<<endl;
3634 if(type==kTrackAODMCChargedSecNS && isFromStrange) continue;
3635 if(type==kTrackAODMCChargedSecS && !isFromStrange) continue;
3639 if(type==kTrackAODMCChargedAcceptance &&
3640 ( part->Eta() > fTrackEtaMax
3641 || part->Eta() < fTrackEtaMin
3642 || part->Phi() > fTrackPhiMax
3643 || part->Phi() < fTrackPhiMin
3644 || part->Pt() < fTrackPtCut)) continue;
3656 // _______________________________________________________________________________
3657 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfJets(TList *list, Int_t type)
3659 // fill list of jets selected according to type
3662 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
3666 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
3668 if(fBranchRecJets.Length()==0){
3669 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
3670 if(fDebug>1)fAOD->Print();
3674 TClonesArray *aodRecJets = 0;
3675 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
3676 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
3677 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
3680 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
3681 if(fDebug>1)fAOD->Print();
3685 // Reorder jet pt and fill new temporary AliAODJet objects
3688 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
3690 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
3693 if( tmp->Pt() < fJetPtCut ) continue;
3694 if( type == kJetsRecAcceptance &&
3695 ( tmp->Eta() < fJetEtaMin
3696 || tmp->Eta() > fJetEtaMax
3697 || tmp->Phi() < fJetPhiMin
3698 || tmp->Phi() > fJetPhiMax )) continue;
3709 else if(type == kJetsKine || type == kJetsKineAcceptance){
3715 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
3719 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
3720 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
3721 AliGenHijingEventHeader* hijingGenHeader = 0x0;
3723 if(!pythiaGenHeader){
3724 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
3726 if(!hijingGenHeader){
3727 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
3730 TLorentzVector mom[4];
3732 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
3734 for(Int_t i=0; i<2; ++i){
3735 if(!mom[i].Pt()) continue;
3736 jet[i] = new AliAODJet(mom[i]);
3738 if( type == kJetsKineAcceptance &&
3739 ( jet[i]->Eta() < fJetEtaMin
3740 || jet[i]->Eta() > fJetEtaMax
3741 || jet[i]->Phi() < fJetPhiMin
3742 || jet[i]->Phi() > fJetPhiMax )) continue;
3752 // fetch the pythia generated jets
3753 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
3756 AliAODJet *jet = new AliAODJet();
3757 pythiaGenHeader->TriggerJet(ip, p);
3758 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
3760 if( type == kJetsKineAcceptance &&
3761 ( jet->Eta() < fJetEtaMin
3762 || jet->Eta() > fJetEtaMax
3763 || jet->Phi() < fJetPhiMin
3764 || jet->Phi() > fJetPhiMax )) continue;
3772 else if(type == kJetsGen || type == kJetsGenAcceptance ){
3774 if(fBranchGenJets.Length()==0){
3775 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
3779 TClonesArray *aodGenJets = 0;
3780 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
3781 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
3782 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
3786 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
3788 if(fDebug>1)fAOD->Print();
3794 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
3796 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
3799 if( tmp->Pt() < fJetPtCut ) continue;
3800 if( type == kJetsGenAcceptance &&
3801 ( tmp->Eta() < fJetEtaMin
3802 || tmp->Eta() > fJetEtaMax
3803 || tmp->Phi() < fJetPhiMin
3804 || tmp->Phi() > fJetPhiMax )) continue;
3812 else if(type == kJetsEmbedded){ // embedded jets
3814 if(fBranchEmbeddedJets.Length()==0){
3815 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
3816 if(fDebug>1)fAOD->Print();
3820 TClonesArray *aodEmbeddedJets = 0;
3821 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
3822 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
3823 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
3825 if(!aodEmbeddedJets){
3826 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
3827 if(fDebug>1)fAOD->Print();
3831 // Reorder jet pt and fill new temporary AliAODJet objects
3832 Int_t nEmbeddedJets = 0;
3834 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
3836 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
3839 if( tmp->Pt() < fJetPtCut ) continue;
3840 if( tmp->Eta() < fJetEtaMin
3841 || tmp->Eta() > fJetEtaMax
3842 || tmp->Phi() < fJetPhiMin
3843 || tmp->Phi() > fJetPhiMax ) continue;
3851 return nEmbeddedJets;
3854 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
3859 // ___________________________________________________________________________________
3860 Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
3862 // fill list of bgr clusters selected according to type
3864 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
3866 if(fBranchRecBckgClusters.Length()==0){
3867 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
3868 if(fDebug>1)fAOD->Print();
3872 TClonesArray *aodRecJets = 0;
3873 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
3874 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
3875 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
3878 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
3879 if(fDebug>1)fAOD->Print();
3883 // Reorder jet pt and fill new temporary AliAODJet objects
3886 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
3888 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
3891 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
3892 if( type == kJetsRecAcceptance &&
3893 ( tmp->Eta() < fJetEtaMin
3894 || tmp->Eta() > fJetEtaMax
3895 || tmp->Phi() < fJetPhiMin
3896 || tmp->Phi() > fJetPhiMax )) continue;
3910 // MC clusters still Under construction
3916 // _________________________________________________________________________________________________________
3917 void AliAnalysisTaskIDFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
3919 // Set properties of THnSparse
3921 for(Int_t i=0; i<dim; i++){
3922 h->GetAxis(i)->SetTitle(labels[i]);
3923 h->GetAxis(i)->SetTitleColor(1);
3927 // __________________________________________________________________________________________
3928 void AliAnalysisTaskIDFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
3930 //Set properties of histos (x and y title)
3934 h->GetXaxis()->SetTitleColor(1);
3935 h->GetYaxis()->SetTitleColor(1);
3938 // _________________________________________________________________________________________________________
3939 void AliAnalysisTaskIDFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
3941 //Set properties of histos (x,y and z title)
3946 h->GetXaxis()->SetTitleColor(1);
3947 h->GetYaxis()->SetTitleColor(1);
3948 h->GetZaxis()->SetTitleColor(1);
3951 // ________________________________________________________________________________________________________________________________________________________
3952 void AliAnalysisTaskIDFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
3953 const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
3955 // fill list of tracks in cone around jet axis
3958 Bool_t isBadMaxPt = kFALSE;
3959 Bool_t isBadMinPt = kTRUE;
3962 jet->PxPyPz(jetMom);
3963 TVector3 jet3mom(jetMom);
3965 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3967 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3969 Double_t trackMom[3];
3970 track->PxPyPz(trackMom);
3971 TVector3 track3mom(trackMom);
3973 Double_t dR = jet3mom.DeltaR(track3mom);
3977 outputlist->Add(track);
3979 sumPt += track->Pt();
3981 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
3982 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
3987 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
3988 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
3993 // _________________________________________________________________________________________________________________________________________________________________
3994 void AliAnalysisTaskIDFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
3996 // list of jet tracks from trackrefs
3998 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
4000 Bool_t isBadMaxPt = kFALSE;
4001 Bool_t isBadMinPt = kTRUE;
4003 for(Int_t itrack=0; itrack<nTracks; itrack++) {
4005 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
4007 AliError("expected ref track not found ");
4011 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
4012 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
4013 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
4019 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
4020 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
4025 // _ ________________________________________________________________________________________________________________________________
4026 void AliAnalysisTaskIDFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
4027 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
4029 // associate generated and reconstructed tracks, fill TArrays of list indices
4031 Int_t nTracksRec = tracksRec->GetSize();
4032 Int_t nTracksGen = tracksAODMCCharged->GetSize();
4033 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4036 if(!nTracksGen) return;
4040 indexAODTr.Set(nTracksGen);
4041 indexMCTr.Set(nTracksRec);
4042 isRefGen.Set(nTracksGen);
4044 indexAODTr.Reset(-1);
4045 indexMCTr.Reset(-1);
4048 // loop over reconstructed tracks, get generated track
4050 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
4052 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
4053 if(!rectrack)continue;
4054 Int_t label = TMath::Abs(rectrack->GetLabel());
4056 // find MC track in our list
4057 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
4059 Int_t listIndex = -1;
4060 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
4064 indexAODTr[listIndex] = iRec;
4065 indexMCTr[iRec] = listIndex;
4070 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
4072 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4074 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
4075 if(!gentrack)continue;
4076 Int_t pdg = gentrack->GetPdgCode();
4078 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
4079 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
4080 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
4082 isRefGen[iGen] = kTRUE;
4084 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4087 Float_t genPt = gentrack->Pt();
4088 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
4090 Float_t recPt = vt->Pt();
4091 fh2PtRecVsGen->Fill(genPt,recPt);
4098 // _____________________________________________________________________________________________________________________________________________
4099 void AliAnalysisTaskIDFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
4100 const TArrayI& indexAODTr, const TArrayS& isRefGen, const Bool_t scaleStrangeness){
4102 // fill QA for single track reconstruction efficiency
4104 Int_t nTracksGen = tracksGen->GetSize();
4106 if(!nTracksGen) return;
4108 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
4110 if(isRefGen[iGen] != 1) continue; // select primaries
4112 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
4113 if(!gentrack) continue;
4114 Double_t ptGen = gentrack->Pt();
4115 Double_t etaGen = gentrack->Eta();
4116 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
4118 // apply same acc & pt cuts as for FF GetMCStrangenessFactorCMS
4120 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
4121 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
4122 if(ptGen < fTrackPtCut) continue;
4124 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
4126 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4128 if(iRec>=0 && trackQARec){
4129 if(scaleStrangeness){
4130 //Double_t weight = GetMCStrangenessFactor(ptGen);
4131 Double_t weight = GetMCStrangenessFactorCMS(gentrack);
4132 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
4134 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
4139 // ______________________________________________________________________________________________________________________________________________________
4141 void AliAnalysisTaskIDFragmentationFunction::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
4142 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
4143 const TArrayS& isRefGen, TList* jetTrackListTR, const Bool_t scaleStrangeness,
4144 Bool_t fillJS, TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt)
4146 // fill objects for jet track reconstruction efficiency or secondaries contamination
4147 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
4148 // jetTrackListTR pointer: track refs if not NULL
4151 // ensure proper normalization, even for secondaries
4152 Double_t jetPtRec = jet->Pt();
4153 ffhistRec->FillFF(-1, jetPtRec, kTRUE);
4155 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
4156 if(nTracksJet == 0) return;
4158 TList* listRecTracks = new TList();
4159 listRecTracks->Clear();
4161 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
4163 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
4164 if(!gentrack)continue;
4165 // find jet track in gen tracks list
4166 Int_t iGen = tracksGen->IndexOf(gentrack);
4169 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
4173 if(isRefGen[iGen] != 1) continue; // select primaries
4175 Double_t ptGen = gentrack->Pt();
4176 Double_t etaGen = gentrack->Eta();
4177 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
4179 // gen level acc & pt cuts - skip in case of track refs
4180 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
4181 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
4182 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
4185 Double_t ptRec = -1;
4187 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
4188 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
4190 Bool_t isJetTrack = kFALSE;
4191 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
4195 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
4196 if(!rectrack) continue;
4198 ptRec = rectrack->Pt();
4201 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
4202 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
4207 Double_t trackPt = ptRec;
4208 Bool_t incrementJetPt = kFALSE;
4210 if(scaleStrangeness){
4211 //Double_t weight = GetMCStrangenessFactor(ptGen);
4212 Double_t weight = GetMCStrangenessFactorCMS(gentrack);
4214 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt, 0, kTRUE, weight );
4217 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt );
4220 listRecTracks->Add(rectrack);
4227 if(fillJS) FillJetShape(jet,listRecTracks,hProNtracksLeadingJet, hProDelRPtSum, hProDelR80pcPt,0,0,scaleStrangeness);
4229 delete listRecTracks;
4233 // _____________________________________________________________________________________________________________________________________________________________________
4234 void AliAnalysisTaskIDFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
4236 // List of tracks in cone perpendicular to the jet azimuthal direction
4239 jet->PxPyPz(jetMom);
4241 TVector3 jet3mom(jetMom);
4242 // Rotate phi and keep eta unchanged
4243 Double_t etaTilted = jet3mom.Eta();
4244 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
4245 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
4247 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4250 if( fUseExtraTracksBgr != 1){
4251 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4252 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4253 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4257 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4259 Double_t trackMom[3];
4260 track->PxPyPz(trackMom);
4261 TVector3 track3mom(trackMom);
4263 Double_t deta = track3mom.Eta() - etaTilted;
4264 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
4265 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
4266 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
4270 outputlist->Add(track);
4271 sumPt += track->Pt();
4277 // ________________________________________________________________________________________________________________________________________________________
4278 void AliAnalysisTaskIDFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
4280 // List of tracks in cone perpendicular to the jet azimuthal direction
4283 jet->PxPyPz(jetMom);
4285 TVector3 jet3mom(jetMom);
4286 // Rotate phi and keep eta unchanged
4287 Double_t etaTilted = jet3mom.Eta();
4288 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
4289 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
4291 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
4295 if( fUseExtraTracksBgr != 1){
4296 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4297 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4298 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4302 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4304 Float_t trackEta = track->Eta();
4305 Float_t trackPhi = track->Phi();
4307 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
4309 if((trackPhi<=phiTilted+radius) &&
4310 (trackPhi>=phiTilted-radius) &&
4311 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
4313 outputlist->Add(track);
4314 sumPt += track->Pt();
4317 else if( phiTilted-radius < 0 )
4319 if((( trackPhi < phiTilted+radius ) ||
4320 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
4321 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
4323 outputlist->Add(track);
4324 sumPt += track->Pt();
4327 else if( phiTilted+radius > 2*TMath::Pi() )
4329 if((( trackPhi > phiTilted-radius ) ||
4330 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
4331 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
4333 outputlist->Add(track);
4334 sumPt += track->Pt();
4339 // Jet area - Temporarily added should be modified with the proper jet area value
4340 Float_t areaJet = CalcJetArea(etaTilted,radius);
4341 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
4343 normFactor = (Float_t) 1. / (areaJet / areaTilted);
4348 // ________________________________________________________________________________________________________________________________________________________
4349 void AliAnalysisTaskIDFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, const TList* jetlist,
4352 // List of tracks outside cone around N jet axis
4353 // Particles taken randomly
4356 // Int_t nj = jetlist->GetSize();
4357 Float_t rc = TMath::Abs(GetFFRadius());
4358 Float_t rcl = GetFFBckgRadius();
4360 // Estimate jet and background areas
4361 Float_t* areaJet = new Float_t[nCases];
4362 memset(areaJet, 0, sizeof(Float_t) * nCases);
4363 Float_t* areaJetLarge = new Float_t[nCases];
4364 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
4365 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
4366 Float_t areaOut = areaFull;
4368 //estimate jets and background areas
4371 TList* templist = new TList();
4372 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
4374 for(Int_t ij=0; ij<nCases; ++ij)
4376 // Get jet information
4377 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
4380 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
4381 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
4382 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
4385 areaJet[ij] = CalcJetArea(etaJet,rc);
4387 // Area jet larger angle
4388 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
4391 areaOut = areaOut - areaJetLarge[ij];
4395 // List of all tracks outside jet areas
4396 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4399 if( fUseExtraTracksBgr != 1){
4400 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4401 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4402 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4406 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4409 Double_t trackMom[3];
4410 track->PxPyPz(trackMom);
4411 TVector3 track3mom(trackMom);
4413 Double_t *dR = new Double_t[nCases];
4414 for(Int_t ij=0; ij<nCases; ij++)
4415 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
4417 if((nCases==1 && (dR[0]>rcl)) ||
4418 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
4419 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
4421 templist->Add(track);
4427 // Take tracks randomly
4428 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
4429 TArrayI* ar = new TArrayI(nOut);
4431 for(Int_t init=0; init<nOut; init++)
4434 Int_t *randIndex = new Int_t[nScaled];
4435 for(Int_t init2=0; init2<nScaled; init2++)
4436 randIndex[init2] = -1;
4438 // Select nScaled different random numbers in nOut
4439 for(Int_t i=0; i<nScaled; i++)
4441 Int_t* tmpArr = new Int_t[nOut-i];
4442 Int_t temp = fRandom->Integer(nOut-i);
4443 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
4445 if(ind<temp) tmpArr[ind] = (*ar)[ind];
4446 else tmpArr[ind] = (*ar)[ind+1];
4448 randIndex[i] = (*ar)[temp];
4450 ar->Set(nOut-i-1,tmpArr);
4456 for(Int_t ipart=0; ipart<nScaled; ipart++)
4458 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
4459 outputlist->Add(track);
4460 sumPt += track->Pt();
4467 delete [] areaJetLarge;
4470 delete [] randIndex;
4474 // ________________________________________________________________________________________________________________________________________________________
4475 void AliAnalysisTaskIDFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist,
4476 const TList* jetlist, Double_t& sumPt, Double_t &normFactor)
4478 // List of tracks outside cone around N jet axis
4479 // All particles taken + final scaling factor
4482 Float_t rc = TMath::Abs(GetFFRadius());
4483 Float_t rcl = GetFFBckgRadius();
4485 // Estimate jet and background areas
4486 Float_t* areaJet = new Float_t[nCases];
4487 memset(areaJet, 0, sizeof(Float_t) * nCases);
4488 Float_t* areaJetLarge = new Float_t[nCases];
4489 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
4490 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
4491 Float_t areaOut = areaFull;
4493 //estimate jets and background areas
4496 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
4498 for(Int_t ij=0; ij<nCases; ++ij)
4500 // Get jet information
4501 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
4504 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
4505 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
4506 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
4509 areaJet[ij] = CalcJetArea(etaJet,rc);
4511 // Area jet larger angle
4512 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
4514 // Outside jets area
4515 areaOut = areaOut - areaJetLarge[ij];
4519 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
4522 if( fUseExtraTracksBgr != 1){
4523 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
4524 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4525 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4529 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
4531 Double_t trackMom[3];
4532 track->PxPyPz(trackMom);
4533 TVector3 track3mom(trackMom);
4535 Double_t *dR = new Double_t[nCases];
4536 for(Int_t ij=0; ij<nCases; ij++)
4537 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
4540 (nCases==1 && (dR[0]>rcl)) ||
4541 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
4542 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
4544 outputlist->Add(track);
4545 sumPt += track->Pt();
4551 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
4552 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
4557 delete [] areaJetLarge;
4562 // ______________________________________________________________________________________________________________________________________________________
4563 Float_t AliAnalysisTaskIDFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
4565 // calculate area of jet with eta etaJet and radius rc
4567 Float_t detamax = etaJet + rc;
4568 Float_t detamin = etaJet - rc;
4569 Float_t accmax = 0.0; Float_t accmin = 0.0;
4570 if(detamax > fTrackEtaMax){ // sector outside etamax
4571 Float_t h = fTrackEtaMax - etaJet;
4572 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
4574 if(detamin < fTrackEtaMin){ // sector outside etamin
4575 Float_t h = fTrackEtaMax + etaJet;
4576 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
4578 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
4584 // ___________________________________________________________________________________________________________________________
4585 void AliAnalysisTaskIDFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
4587 // fill tracks from bckgCluster branch in list,
4588 // for all clusters outside jet cone
4589 // sum up total area of clusters
4591 Double_t rc = GetFFRadius();
4592 Double_t rcl = GetFFBckgRadius();
4594 Double_t areaTotal = 0;
4595 Double_t sumPtTotal = 0;
4597 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
4599 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
4601 Double_t dR = jet->DeltaR(bgrCluster);
4603 if(dR<rcl) continue;
4605 Double_t clusterPt = bgrCluster->Pt();
4606 Double_t area = bgrCluster->EffectiveAreaCharged();
4608 sumPtTotal += clusterPt;
4610 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
4612 for(Int_t it = 0; it<nTracksJet; it++){
4614 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
4615 if( fUseExtraTracksBgr != 1){
4616 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
4617 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4618 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4622 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
4623 if(!track) continue;
4625 Float_t trackPt = track->Pt();
4626 Float_t trackEta = track->Eta();
4627 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
4629 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
4630 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
4631 if(trackPt < fTrackPtCut) continue;
4633 outputlist->Add(track);
4637 Double_t areaJet = TMath::Pi()*rc*rc;
4638 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
4643 // _______________________________________________________________________________________________________________________
4644 void AliAnalysisTaskIDFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
4646 // fill tracks from bckgCluster branch,
4647 // using cluster with median density (odd number of clusters)
4648 // or picking randomly one of the two closest to median (even number)
4652 const Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
4654 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
4656 Double_t* bgrDensity = new Double_t[nBckgClusters];
4657 Int_t* indices = new Int_t[nBckgClusters];
4659 for(Int_t ij=0; ij<nBckgClusters; ++ij){
4661 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
4662 Double_t clusterPt = bgrCluster->Pt();
4663 Double_t area = bgrCluster->EffectiveAreaCharged();
4665 Double_t density = 0;
4666 if(area>0) density = clusterPt/area;
4668 bgrDensity[ij] = density;
4672 TMath::Sort(nBckgClusters, bgrDensity, indices);
4674 // get median cluster
4676 AliAODJet* medianCluster = 0;
4677 //Double_t medianDensity = 0;
4679 if(TMath::Odd(nBckgClusters)){
4681 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
4682 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
4684 //Double_t clusterPt = medianCluster->Pt();
4685 //Double_t area = medianCluster->EffectiveAreaCharged();
4687 //if(area>0) medianDensity = clusterPt/area;
4691 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
4692 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
4694 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
4695 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
4697 //Double_t density1 = 0;
4698 //Double_t clusterPt1 = medianCluster1->Pt();
4699 //Double_t area1 = medianCluster1->EffectiveAreaCharged();
4700 //if(area1>0) density1 = clusterPt1/area1;
4702 //Double_t density2 = 0;
4703 //Double_t clusterPt2 = medianCluster2->Pt();
4704 //Double_t area2 = medianCluster2->EffectiveAreaCharged();
4705 //if(area2>0) density2 = clusterPt2/area2;
4707 //medianDensity = 0.5*(density1+density2);
4709 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
4712 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
4714 for(Int_t it = 0; it<nTracksJet; it++){
4716 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
4717 if( fUseExtraTracksBgr != 1){
4718 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
4719 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4720 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4724 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
4725 if(!track) continue;
4727 Float_t trackPt = track->Pt();
4728 Float_t trackEta = track->Eta();
4729 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
4731 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
4732 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
4733 if(trackPt < fTrackPtCut) continue;
4735 outputlist->Add(track);
4738 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
4739 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
4741 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
4745 delete[] bgrDensity;
4749 // ______________________________________________________________________________________________________________________________________________________
4750 void AliAnalysisTaskIDFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet,
4751 AliFragFuncHistos* ffbckghistocuts, AliFragFuncQATrackHistos* qabckghistocuts, TH1F* fh1Mult){
4753 // List of tracks outside jets for background study
4754 TList* tracklistout2jets = new TList();
4755 TList* tracklistout3jets = new TList();
4756 TList* tracklistout2jetsStat = new TList();
4757 TList* tracklistout3jetsStat = new TList();
4758 Double_t sumPtOut2Jets = 0.;
4759 Double_t sumPtOut3Jets = 0.;
4760 Double_t sumPtOut2JetsStat = 0.;
4761 Double_t sumPtOut3JetsStat = 0.;
4762 Double_t normFactor2Jets = 0.;
4763 Double_t normFactor3Jets = 0.;
4765 Int_t nRecJetsCuts = inputjetlist->GetEntries();
4767 if(nRecJetsCuts>1) {
4768 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
4769 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
4772 if(nRecJetsCuts>2) {
4773 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
4774 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
4777 if(type==kBckgOutLJ || type==kBckgOutAJ)
4779 TList* tracklistoutleading = new TList();
4780 Double_t sumPtOutLeading = 0.;
4781 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
4782 if(type==kBckgOutLJ && fh1Mult) fh1Mult->Fill(tracklistoutleading->GetSize());
4784 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
4786 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
4787 if(!trackVP) continue;
4788 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4790 Float_t jetPt = jet->Pt();
4791 Float_t trackPt = trackV->Pt();
4793 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4795 if(type==kBckgOutLJ)
4797 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
4799 // Fill track QA for background
4800 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4803 // All cases included
4804 if(nRecJetsCuts==1 && type==kBckgOutAJ)
4806 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4810 // Increment jet pt with one entry in case #tracks outside jets = 0
4811 if(tracklistoutleading->GetSize()==0) {
4812 Float_t jetPt = jet->Pt();
4813 Bool_t incrementJetPt = kTRUE;
4814 if(type==kBckgOutLJ)
4816 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4818 // All cases included
4819 if(nRecJetsCuts==1 && type==kBckgOutAJ)
4821 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4824 delete tracklistoutleading;
4826 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
4828 TList* tracklistoutleadingStat = new TList();
4829 Double_t sumPtOutLeadingStat = 0.;
4830 Double_t normFactorLeading = 0.;
4832 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
4833 if(type==kBckgOutLJStat && fh1Mult) fh1Mult->Fill(tracklistoutleadingStat->GetSize());
4835 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
4837 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
4838 if(!trackVP) continue;
4839 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4841 Float_t jetPt = jet->Pt();
4842 Float_t trackPt = trackV->Pt();
4843 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4846 if(type==kBckgOutLJStat)
4848 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
4850 // Fill track QA for background
4851 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
4854 // All cases included
4855 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
4857 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
4858 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
4863 // Increment jet pt with one entry in case #tracks outside jets = 0
4864 if(tracklistoutleadingStat->GetSize()==0) {
4865 Float_t jetPt = jet->Pt();
4866 Bool_t incrementJetPt = kTRUE;
4867 if(type==kBckgOutLJStat)
4869 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
4871 // All cases included
4872 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
4874 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
4878 delete tracklistoutleadingStat;
4881 if(type==kBckgPerp || type==kBckgPerp2 || type==kBckgPerp2Area)
4883 Double_t sumPtPerp1 = 0.;
4884 Double_t sumPtPerp2 = 0.;
4885 TList* tracklistperp = new TList();
4886 TList* tracklistperp1 = new TList();
4887 TList* tracklistperp2 = new TList();
4890 if(type == kBckgPerp2) norm = 2; // in FillFF() scaleFac = 1/norm = 0.5 - account for double area;
4891 if(type == kBckgPerp2Area) norm = 2*TMath::Pi()*TMath::Abs(GetFFRadius())*TMath::Abs(GetFFRadius()) / jet->EffectiveAreaCharged(); // in FillFF() scaleFac = 1/norm;
4893 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp1,jet,TMath::Abs(GetFFRadius()),sumPtPerp1);
4894 if(type==kBckgPerp2 || type==kBckgPerp2Area) GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2., inputtracklist,tracklistperp2,jet,TMath::Abs(GetFFRadius()),sumPtPerp2);
4896 tracklistperp->AddAll(tracklistperp1);
4897 tracklistperp->AddAll(tracklistperp2);
4899 if(tracklistperp->GetSize() != tracklistperp1->GetSize() + tracklistperp2->GetSize()){
4900 cout<<" ERROR: tracklistperp size "<<tracklistperp->GetSize()<<" perp1 "<<tracklistperp1->GetSize()<<" perp2 "<<tracklistperp2->GetSize()<<endl;
4904 if(fh1Mult) fh1Mult->Fill(tracklistperp->GetSize());
4906 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
4908 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
4909 if(!trackVP)continue;
4910 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4912 Float_t jetPt = jet->Pt();
4913 Float_t trackPt = trackV->Pt();
4915 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4917 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, norm );
4919 // Fill track QA for background
4920 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4924 // Increment jet pt with one entry in case #tracks outside jets = 0
4925 if(tracklistperp->GetSize()==0) {
4926 Float_t jetPt = jet->Pt();
4927 Bool_t incrementJetPt = kTRUE;
4928 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4933 // fill for tracklistperp1/2 separately, divide norm by 2
4934 if(type==kBckgPerp){
4935 FillJetShape(jet, tracklistperp, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
4937 if(type==kBckgPerp2){
4938 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
4939 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0., kFALSE);
4941 if(type==kBckgPerp2Area){ // divide norm by 2: listperp1/2 filled separately
4942 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0.5*norm, kFALSE);
4943 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0.5*norm, kFALSE);
4947 delete tracklistperp;
4948 delete tracklistperp1;
4949 delete tracklistperp2;
4952 if(type==kBckgASide)
4954 Double_t sumPtASide = 0.;
4955 TList* tracklistaside = new TList();
4956 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,TMath::Abs(GetFFRadius()),sumPtASide);
4957 if(fh1Mult) fh1Mult->Fill(tracklistaside->GetSize());
4959 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
4961 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
4962 if(!trackVP) continue;
4963 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4965 Float_t jetPt = jet->Pt();
4966 Float_t trackPt = trackV->Pt();
4968 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4970 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4972 // Fill track QA for background
4973 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4977 if(tracklistaside->GetSize()==0) {
4978 Float_t jetPt = jet->Pt();
4979 Bool_t incrementJetPt = kTRUE;
4980 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4983 delete tracklistaside;
4986 if(type==kBckgASideWindow)
4988 Double_t normFactorASide = 0.;
4989 Double_t sumPtASideW = 0.;
4990 TList* tracklistasidew = new TList();
4991 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,TMath::Abs(GetFFRadius()),sumPtASideW,normFactorASide);
4992 if(fh1Mult) fh1Mult->Fill(tracklistasidew->GetSize());
4994 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
4996 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
4997 if(!trackVP) continue;
4998 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5000 Float_t jetPt = jet->Pt();
5001 Float_t trackPt = trackV->Pt();
5002 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5004 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
5006 // Fill track QA for background
5007 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
5011 if(tracklistasidew->GetSize()==0) {
5012 Float_t jetPt = jet->Pt();
5013 Bool_t incrementJetPt = kTRUE;
5014 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
5017 delete tracklistasidew;
5020 if(type==kBckgPerpWindow)
5022 Double_t normFactorPerp = 0.;
5023 Double_t sumPtPerpW = 0.;
5024 TList* tracklistperpw = new TList();
5025 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,TMath::Abs(GetFFRadius()),sumPtPerpW,normFactorPerp);
5026 if(fh1Mult) fh1Mult->Fill(tracklistperpw->GetSize());
5028 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
5030 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
5031 if(!trackVP) continue;
5032 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5034 Float_t jetPt = jet->Pt();
5035 Float_t trackPt = trackV->Pt();
5036 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5038 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
5040 // Fill track QA for background
5041 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
5045 if(tracklistperpw->GetSize()==0) {
5046 Float_t jetPt = jet->Pt();
5047 Bool_t incrementJetPt = kTRUE;
5048 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
5051 delete tracklistperpw;
5055 if(type==kBckgOut2J || type==kBckgOutAJ)
5057 if(type==kBckgOut2J && fh1Mult) fh1Mult->Fill(tracklistout2jets->GetSize());
5058 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
5060 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
5061 if(!trackVP) continue;
5062 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5064 Float_t jetPt = jet->Pt();
5065 Float_t trackPt = trackV->Pt();
5067 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5069 if(type==kBckgOut2J)
5071 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5072 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5075 // All cases included
5076 if(nRecJetsCuts==2 && type==kBckgOutAJ)
5078 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5083 // Increment jet pt with one entry in case #tracks outside jets = 0
5084 if(tracklistout2jets->GetSize()==0) {
5085 Float_t jetPt = jet->Pt();
5086 Bool_t incrementJetPt = kTRUE;
5087 if(type==kBckgOut2J)
5089 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5091 // All cases included
5092 if(nRecJetsCuts==2 && type==kBckgOutAJ)
5094 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5099 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
5101 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
5103 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
5104 if(!trackVP) continue;
5105 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5107 Float_t jetPt = jet->Pt();
5108 Float_t trackPt = trackV->Pt();
5109 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5111 if(type==kBckgOut2JStat)
5113 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
5115 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5118 // All cases included
5119 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
5121 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
5123 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
5127 // Increment jet pt with one entry in case #tracks outside jets = 0
5128 if(tracklistout2jetsStat->GetSize()==0) {
5129 Float_t jetPt = jet->Pt();
5130 Bool_t incrementJetPt = kTRUE;
5131 if(type==kBckgOut2JStat)
5133 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
5135 // All cases included
5136 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
5138 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
5144 if(type==kBckgOut3J || type==kBckgOutAJ)
5146 if(type==kBckgOut3J && fh1Mult) fh1Mult->Fill(tracklistout3jets->GetSize());
5148 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
5150 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
5151 if(!trackVP) continue;
5152 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5154 Float_t jetPt = jet->Pt();
5155 Float_t trackPt = trackV->Pt();
5157 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5159 if(type==kBckgOut3J)
5161 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5163 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
5166 // All cases included
5167 if(nRecJetsCuts==3 && type==kBckgOutAJ)
5169 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
5174 // Increment jet pt with one entry in case #tracks outside jets = 0
5175 if(tracklistout3jets->GetSize()==0) {
5176 Float_t jetPt = jet->Pt();
5177 Bool_t incrementJetPt = kTRUE;
5178 if(type==kBckgOut3J)
5180 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5182 // All cases included
5183 if(nRecJetsCuts==3 && type==kBckgOutAJ)
5185 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
5190 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
5192 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
5194 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
5195 if(!trackVP) continue;
5196 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5198 Float_t jetPt = jet->Pt();
5199 Float_t trackPt = trackV->Pt();
5200 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5202 if(type==kBckgOut3JStat)
5204 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
5206 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
5209 // All cases included
5210 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
5212 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
5214 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5219 // Increment jet pt with one entry in case #tracks outside jets = 0
5220 if(tracklistout3jetsStat->GetSize()==0) {
5221 Float_t jetPt = jet->Pt();
5222 Bool_t incrementJetPt = kTRUE;
5223 if(type==kBckgOut3JStat)
5225 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
5227 // All cases included
5228 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
5230 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
5236 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
5238 TList* tracklistClustersOutLeading = new TList();
5239 Double_t normFactorClusters = 0;
5240 Float_t jetPt = jet->Pt();
5242 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
5243 if(fh1Mult) fh1Mult->Fill(tracklistClustersOutLeading->GetSize());
5245 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
5247 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
5248 if(!trackVP) continue;
5249 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5251 Float_t trackPt = trackVP->Pt();
5253 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5255 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
5256 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5261 delete tracklistClustersOutLeading;
5265 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
5267 TList* tracklistClustersMedian = new TList();
5268 Double_t normFactorClusters = 0;
5269 Float_t jetPt = jet->Pt();
5271 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
5272 if(fh1Mult) fh1Mult->Fill(tracklistClustersMedian->GetSize());
5274 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
5276 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
5277 if(!trackVP) continue;
5278 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
5280 Float_t trackPt = trackVP->Pt();
5282 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
5284 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
5285 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
5290 delete tracklistClustersMedian;
5293 delete tracklistout2jets;
5294 delete tracklistout3jets;
5295 delete tracklistout2jetsStat;
5296 delete tracklistout3jetsStat;
5299 //_____________________________________________________________________________________
5300 Double_t AliAnalysisTaskIDFragmentationFunction::GetMCStrangenessFactor(const Double_t pt) const
5302 // factor strangeness data/MC as function of pt from UE analysis (Sara Vallero)
5306 if(0.150<pt && pt<0.200) alpha = 3.639;
5307 if(0.200<pt && pt<0.250) alpha = 2.097;
5308 if(0.250<pt && pt<0.300) alpha = 1.930;
5309 if(0.300<pt && pt<0.350) alpha = 1.932;
5310 if(0.350<pt && pt<0.400) alpha = 1.943;
5311 if(0.400<pt && pt<0.450) alpha = 1.993;
5312 if(0.450<pt && pt<0.500) alpha = 1.989;
5313 if(0.500<pt && pt<0.600) alpha = 1.963;
5314 if(0.600<pt && pt<0.700) alpha = 1.917;
5315 if(0.700<pt && pt<0.800) alpha = 1.861;
5316 if(0.800<pt && pt<0.900) alpha = 1.820;
5317 if(0.900<pt && pt<1.000) alpha = 1.741;
5318 if(1.000<pt && pt<1.500) alpha = 0.878;
5323 //__________________________________________________________________________________________________
5324 Double_t AliAnalysisTaskIDFragmentationFunction::GetMCStrangenessFactorCMS(AliAODMCParticle* daughter) const
5326 // strangeness ratio MC/data as function of mother pt from CMS data in |eta|<2.0
5328 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5331 AliAODMCParticle* currentMother = daughter;
5332 AliAODMCParticle* currentDaughter = daughter;
5335 // find first primary mother K0s, Lambda or Xi
5338 Int_t daughterPDG = currentDaughter->GetPdgCode();
5340 Int_t motherLabel = currentDaughter->GetMother();
5341 if(motherLabel >= tca->GetEntriesFast()){ // protection
5342 currentMother = currentDaughter;
5346 currentMother = (AliAODMCParticle*) tca->At(motherLabel);
5349 currentMother = currentDaughter;
5353 Int_t motherPDG = currentMother->GetPdgCode();
5355 // phys. primary found ?
5356 if(currentMother->IsPhysicalPrimary()) break;
5358 if(TMath::Abs(daughterPDG) == 321){ // K+/K- e.g. from phi (ref data not feeddown corrected)
5359 currentMother = currentDaughter; break;
5361 if(TMath::Abs(motherPDG) == 310 ){ // K0s e.g. from phi (ref data not feeddown corrected)
5364 if(TMath::Abs(motherPDG) == 3212 && TMath::Abs(daughterPDG) == 3122){ // mother Sigma0, daughter Lambda (this case not included in feeddown corr.)
5365 currentMother = currentDaughter; break;
5368 currentDaughter = currentMother;
5372 Int_t motherPDG = currentMother->GetPdgCode();
5373 Double_t motherGenPt = currentMother->Pt();
5375 return AliAnalysisTaskPID::GetMCStrangenessFactorCMS(motherPDG, motherGenPt);
5378 // _________________________________________________________________________________
5379 void AliAnalysisTaskIDFragmentationFunction::FillJetShape(AliAODJet* jet, TList* list,
5380 TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt,
5381 Double_t dPhiUE, Double_t normUE, Bool_t scaleStrangeness)
5383 // Fill jet shape histos
5385 const Int_t kNbinsR = 50;
5386 const Float_t kBinWidthR = 0.02;
5388 Int_t nJetTracks = list->GetEntries();
5390 Float_t pTsumA[kNbinsR] = {0.0};
5392 Float_t *delRA = new Float_t[nJetTracks];
5393 Float_t *trackPtA = new Float_t[nJetTracks];
5394 Int_t *index = new Int_t[nJetTracks];
5396 for(Int_t i=0; i<nJetTracks; i++){
5403 jet->PxPyPz(jetMom);
5404 TVector3 jet3mom(jetMom);
5406 if(TMath::Abs(dPhiUE)>0){
5407 Double_t phiTilted = jet3mom.Phi();
5408 phiTilted += dPhiUE;
5409 phiTilted = TVector2::Phi_0_2pi(phiTilted);
5410 jet3mom.SetPhi(phiTilted);
5413 Double_t jetPt = jet->Pt();
5414 Double_t sumWeights = 0;
5416 for (Int_t j =0; j<nJetTracks; j++){
5418 AliVParticle* track = dynamic_cast<AliVParticle*>(list->At(j));
5421 Double_t trackMom[3];
5422 track->PxPyPz(trackMom);
5423 TVector3 track3mom(trackMom);
5425 Double_t dR = jet3mom.DeltaR(track3mom);
5428 trackPtA[j] = track->Pt();
5430 Double_t weight = GetMCStrangenessFactor(track->Pt()); // more correctly should be gen pt
5431 sumWeights += weight;
5433 for(Int_t ibin=1; ibin<=kNbinsR; ibin++){
5434 Float_t xlow = kBinWidthR*(ibin-1);
5435 Float_t xup = kBinWidthR*ibin;
5436 if(xlow <= dR && dR < xup){
5438 if(scaleStrangeness) pTsumA[ibin-1] += track->Pt()*weight;
5439 else pTsumA[ibin-1] += track->Pt();
5447 for(Int_t ibin=0; ibin<kNbinsR; ibin++){
5448 Float_t fR = kBinWidthR*(ibin+0.5);
5450 for(Int_t k=0; k<5; k++){
5451 if(k==0){jetPtMin=20.0;jetPtMax=30.0;}
5452 if(k==1){jetPtMin=30.0;jetPtMax=40.0;}
5453 if(k==2){jetPtMin=40.0;jetPtMax=60.0;}
5454 if(k==3){jetPtMin=60.0;jetPtMax=80.0;}
5455 if(k==4){jetPtMin=80.0;jetPtMax=100.0;}
5456 if(jetPt>jetPtMin && jetPt<jetPtMax){
5458 hProDelRPtSum[k]->Fill(fR,pTsumA[ibin]);
5464 if(scaleStrangeness) hProNtracksLeadingJet->Fill(jetPt,sumWeights);
5465 else hProNtracksLeadingJet->Fill(jetPt,nJetTracks);
5467 if(normUE) hProNtracksLeadingJet->Fill(jetPt,nJetTracks/normUE);
5472 Float_t delRPtSum80pc = 0;
5474 TMath::Sort(nJetTracks,delRA,index,0);
5476 for(Int_t ii=0; ii<nJetTracks; ii++){
5478 if(scaleStrangeness){
5479 Double_t weight = GetMCStrangenessFactor(trackPtA[index[ii]]); // more correctly should be gen pt
5480 pTsum += weight*trackPtA[index[ii]];
5482 else pTsum += trackPtA[index[ii]];
5485 if(pTsum/jetPt >= 0.8000){
5486 delRPtSum80pc = delRA[index[ii]];
5490 hProDelR80pcPt->Fill(jetPt,delRPtSum80pc);
5499 // _________________________________________________________________________________
5500 Bool_t AliAnalysisTaskIDFragmentationFunction::IsSecondaryWithStrangeMotherMC(AliAODMCParticle* part)
5502 // Check whether particle is a secondary with strange mother, i.e. returns kTRUE if a strange mother is found
5503 // and the particle is NOT a physical primary. In all other cases kFALSE is returned
5505 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
5509 if (part->IsPhysicalPrimary())
5512 Int_t iMother = part->GetMother();
5517 AliAODMCParticle* partM = dynamic_cast<AliAODMCParticle*>(tca->At(iMother));
5521 Int_t codeM = TMath::Abs(partM->GetPdgCode());
5522 Int_t mfl = Int_t(codeM / TMath::Power(10, Int_t(TMath::Log10(codeM))));
5523 if (mfl == 3 && codeM != 3) // codeM = 3 is for s quark