1 // *************************************************************************
3 // * Task for Fragmentation Function Analysis in PWG4 Jet Task Force Train *
5 // *************************************************************************
8 /**************************************************************************
9 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
11 * Author: The ALICE Off-line Project. *
12 * Contributors are mentioned in the code where appropriate. *
14 * Permission to use, copy, modify and distribute this software and its *
15 * documentation strictly for non-commercial purposes is hereby granted *
16 * without fee, provided that the above copyright notice appears in all *
17 * copies and that both the copyright notice and this permission notice *
18 * appear in the supporting documentation. The authors make no claims *
19 * about the suitability of this software for any purpose. It is *
20 * provided "as is" without express or implied warranty. *
21 **************************************************************************/
30 #include "THnSparse.h"
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 "AliAnalysisTaskFragmentationFunction.h"
58 ClassImp(AliAnalysisTaskFragmentationFunction)
60 //____________________________________________________________________________
61 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
68 ,fBranchRecJets("jets")
69 ,fBranchRecBckgClusters("")
71 ,fBranchEmbeddedJets("")
75 ,fUseAODInputJets(kTRUE)
77 ,fUsePhysicsSelection(kTRUE)
81 ,fRejectPileup(kFALSE)
88 ,fUseExtraTracksBgr(0)
89 ,fCutFractionPtEmbedded(0)
90 ,fUseEmbeddedJetAxis(0)
110 ,fTracksAODMCCharged(0)
111 ,fTracksAODMCChargedSecNS(0)
112 ,fTracksAODMCChargedSecS(0)
113 ,fTracksRecQualityCuts(0)
122 ,fQATrackHistosRecCuts(0)
123 ,fQATrackHistosGen(0)
125 ,fQAJetHistosRecCuts(0)
126 ,fQAJetHistosRecCutsLeading(0)
128 ,fQAJetHistosGenLeading(0)
129 ,fQAJetHistosRecEffLeading(0)
131 ,fFFHistosRecCutsInc(0)
132 ,fFFHistosRecLeadingTrack(0)
135 ,fFFHistosGenLeadingTrack(0)
136 ,fQATrackHighPtThreshold(0)
169 ,fh1VertexNContributors(0)
181 ,fh1nRecBckgJetsCuts(0)
183 ,fh2PtRecVsGenPrim(0)
185 ,fQATrackHistosRecEffGen(0)
186 ,fQATrackHistosRecEffRec(0)
187 ,fQATrackHistosSecRecNS(0)
188 ,fQATrackHistosSecRecS(0)
189 ,fQATrackHistosSecRecSsc(0)
190 ,fFFHistosRecEffRec(0)
191 ,fFFHistosSecRecNS(0)
193 ,fFFHistosSecRecSsc(0)
200 ,fh1FractionPtEmbedded(0)
202 ,fh2DeltaPtVsJetPtEmbedded(0)
203 ,fh2DeltaPtVsRecJetPtEmbedded(0)
204 ,fh1DeltaREmbedded(0)
205 ,fQABckgHisto0RecCuts(0)
207 ,fQABckgHisto1RecCuts(0)
209 ,fQABckgHisto2RecCuts(0)
211 ,fQABckgHisto3RecCuts(0)
213 ,fQABckgHisto4RecCuts(0)
215 ,fFFBckgHisto0RecCuts(0)
217 ,fFFBckgHisto1RecCuts(0)
219 ,fFFBckgHisto2RecCuts(0)
221 ,fFFBckgHisto3RecCuts(0)
223 ,fFFBckgHisto4RecCuts(0)
225 ,fFFBckgHisto0RecEffRec(0)
226 ,fFFBckgHisto0SecRecNS(0)
227 ,fFFBckgHisto0SecRecS(0)
228 ,fFFBckgHisto0SecRecSsc(0)
230 ,fProNtracksLeadingJet(0)
232 ,fProNtracksLeadingJetGen(0)
233 ,fProDelR80pcPtGen(0)
234 ,fProNtracksLeadingJetBgrPerp2(0)
235 ,fProNtracksLeadingJetRecPrim(0)
236 ,fProDelR80pcPtRecPrim(0)
237 ,fProNtracksLeadingJetRecSecNS(0)
238 ,fProNtracksLeadingJetRecSecS(0)
239 ,fProNtracksLeadingJetRecSecSsc(0)
243 // default constructor
250 for(Int_t ii=0; ii<5; ii++){
251 fProDelRPtSum[ii] = 0;
252 fProDelRPtSumGen[ii] = 0;
253 fProDelRPtSumBgrPerp2[ii] = 0;
254 fProDelRPtSumRecPrim[ii] = 0;
255 fProDelRPtSumRecSecNS[ii] = 0;
256 fProDelRPtSumRecSecS[ii] = 0;
257 fProDelRPtSumRecSecSsc[ii] = 0;
261 //_______________________________________________________________________________________________
262 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name)
263 : AliAnalysisTaskSE(name)
269 ,fBranchRecJets("jets")
270 ,fBranchRecBckgClusters("")
272 ,fBranchEmbeddedJets("")
276 ,fUseAODInputJets(kTRUE)
278 ,fUsePhysicsSelection(kTRUE)
279 ,fEvtSelectionMask(0)
282 ,fRejectPileup(kFALSE)
289 ,fUseExtraTracksBgr(0)
290 ,fCutFractionPtEmbedded(0)
291 ,fUseEmbeddedJetAxis(0)
292 ,fUseEmbeddedJetPt(0)
311 ,fTracksAODMCCharged(0)
312 ,fTracksAODMCChargedSecNS(0)
313 ,fTracksAODMCChargedSecS(0)
314 ,fTracksRecQualityCuts(0)
323 ,fQATrackHistosRecCuts(0)
324 ,fQATrackHistosGen(0)
326 ,fQAJetHistosRecCuts(0)
327 ,fQAJetHistosRecCutsLeading(0)
329 ,fQAJetHistosGenLeading(0)
330 ,fQAJetHistosRecEffLeading(0)
332 ,fFFHistosRecCutsInc(0)
333 ,fFFHistosRecLeadingTrack(0)
336 ,fFFHistosGenLeadingTrack(0)
337 ,fQATrackHighPtThreshold(0)
370 ,fh1VertexNContributors(0)
382 ,fh1nRecBckgJetsCuts(0)
384 ,fh2PtRecVsGenPrim(0)
386 ,fQATrackHistosRecEffGen(0)
387 ,fQATrackHistosRecEffRec(0)
388 ,fQATrackHistosSecRecNS(0)
389 ,fQATrackHistosSecRecS(0)
390 ,fQATrackHistosSecRecSsc(0)
391 ,fFFHistosRecEffRec(0)
392 ,fFFHistosSecRecNS(0)
394 ,fFFHistosSecRecSsc(0)
401 ,fh1FractionPtEmbedded(0)
403 ,fh2DeltaPtVsJetPtEmbedded(0)
404 ,fh2DeltaPtVsRecJetPtEmbedded(0)
405 ,fh1DeltaREmbedded(0)
406 ,fQABckgHisto0RecCuts(0)
408 ,fQABckgHisto1RecCuts(0)
410 ,fQABckgHisto2RecCuts(0)
412 ,fQABckgHisto3RecCuts(0)
414 ,fQABckgHisto4RecCuts(0)
416 ,fFFBckgHisto0RecCuts(0)
418 ,fFFBckgHisto1RecCuts(0)
420 ,fFFBckgHisto2RecCuts(0)
422 ,fFFBckgHisto3RecCuts(0)
424 ,fFFBckgHisto4RecCuts(0)
426 ,fFFBckgHisto0RecEffRec(0)
427 ,fFFBckgHisto0SecRecNS(0)
428 ,fFFBckgHisto0SecRecS(0)
429 ,fFFBckgHisto0SecRecSsc(0)
431 ,fProNtracksLeadingJet(0)
433 ,fProNtracksLeadingJetGen(0)
434 ,fProDelR80pcPtGen(0)
435 ,fProNtracksLeadingJetBgrPerp2(0)
436 ,fProNtracksLeadingJetRecPrim(0)
437 ,fProDelR80pcPtRecPrim(0)
438 ,fProNtracksLeadingJetRecSecNS(0)
439 ,fProNtracksLeadingJetRecSecS(0)
440 ,fProNtracksLeadingJetRecSecSsc(0)
450 for(Int_t ii=0; ii<5; ii++){
451 fProDelRPtSum[ii] = 0;
452 fProDelRPtSumGen[ii] = 0;
453 fProDelRPtSumBgrPerp2[ii] = 0;
454 fProDelRPtSumRecPrim[ii] = 0;
455 fProDelRPtSumRecSecNS[ii] = 0;
456 fProDelRPtSumRecSecS[ii] = 0;
457 fProDelRPtSumRecSecSsc[ii] = 0;
460 DefineOutput(1,TList::Class());
463 //__________________________________________________________________________________________________________________________
464 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction ©)
465 : AliAnalysisTaskSE()
468 ,fAODJets(copy.fAODJets)
469 ,fAODExtension(copy.fAODExtension)
470 ,fNonStdFile(copy.fNonStdFile)
471 ,fBranchRecJets(copy.fBranchRecJets)
472 ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
473 ,fBranchGenJets(copy.fBranchGenJets)
474 ,fBranchEmbeddedJets(copy.fBranchEmbeddedJets)
475 ,fTrackTypeGen(copy.fTrackTypeGen)
476 ,fJetTypeGen(copy.fJetTypeGen)
477 ,fJetTypeRecEff(copy.fJetTypeRecEff)
478 ,fUseAODInputJets(copy.fUseAODInputJets)
479 ,fFilterMask(copy.fFilterMask)
480 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
481 ,fEvtSelectionMask(copy.fEvtSelectionMask)
482 ,fEventClass(copy.fEventClass)
483 ,fMaxVertexZ(copy.fMaxVertexZ)
484 ,fRejectPileup(copy.fRejectPileup)
485 ,fTrackPtCut(copy.fTrackPtCut)
486 ,fTrackEtaMin(copy.fTrackEtaMin)
487 ,fTrackEtaMax(copy.fTrackEtaMax)
488 ,fTrackPhiMin(copy.fTrackPhiMin)
489 ,fTrackPhiMax(copy.fTrackPhiMax)
490 ,fUseExtraTracks(copy.fUseExtraTracks)
491 ,fUseExtraTracksBgr(copy.fUseExtraTracksBgr)
492 ,fCutFractionPtEmbedded(copy.fCutFractionPtEmbedded)
493 ,fUseEmbeddedJetAxis(copy.fUseEmbeddedJetAxis)
494 ,fUseEmbeddedJetPt(copy.fUseEmbeddedJetPt)
495 ,fJetPtCut(copy.fJetPtCut)
496 ,fJetEtaMin(copy.fJetEtaMin)
497 ,fJetEtaMax(copy.fJetEtaMax)
498 ,fJetPhiMin(copy.fJetPhiMin)
499 ,fJetPhiMax(copy.fJetPhiMax)
500 ,fFFRadius(copy.fFFRadius)
501 ,fFFMinLTrackPt(copy.fFFMinLTrackPt)
502 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
503 ,fFFMinnTracks(copy.fFFMinnTracks)
504 ,fFFBckgRadius(copy.fFFBckgRadius)
505 ,fBckgMode(copy.fBckgMode)
506 ,fQAMode(copy.fQAMode)
507 ,fFFMode(copy.fFFMode)
508 ,fEffMode(copy.fEffMode)
509 ,fJSMode(copy.fJSMode)
510 ,fAvgTrials(copy.fAvgTrials)
511 ,fTracksRecCuts(copy.fTracksRecCuts)
512 ,fTracksGen(copy.fTracksGen)
513 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
514 ,fTracksAODMCChargedSecNS(copy.fTracksAODMCChargedSecNS)
515 ,fTracksAODMCChargedSecS(copy.fTracksAODMCChargedSecS)
516 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
517 ,fJetsRec(copy.fJetsRec)
518 ,fJetsRecCuts(copy.fJetsRecCuts)
519 ,fJetsGen(copy.fJetsGen)
520 ,fJetsRecEff(copy.fJetsRecEff)
521 ,fJetsEmbedded(copy.fJetsEmbedded)
522 ,fBckgJetsRec(copy.fBckgJetsRec)
523 ,fBckgJetsRecCuts(copy.fBckgJetsRecCuts)
524 ,fBckgJetsGen(copy.fBckgJetsGen)
525 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
526 ,fQATrackHistosGen(copy.fQATrackHistosGen)
527 ,fQAJetHistosRec(copy.fQAJetHistosRec)
528 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
529 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
530 ,fQAJetHistosGen(copy.fQAJetHistosGen)
531 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
532 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
533 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
534 ,fFFHistosRecCutsInc(copy.fFFHistosRecCutsInc)
535 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
536 ,fFFHistosGen(copy.fFFHistosGen)
537 ,fFFHistosGenInc(copy.fFFHistosGenInc)
538 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
539 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
540 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
541 ,fFFJetPtMin(copy.fFFJetPtMin)
542 ,fFFJetPtMax(copy.fFFJetPtMax)
543 ,fFFNBinsPt(copy.fFFNBinsPt)
544 ,fFFPtMin(copy.fFFPtMin)
545 ,fFFPtMax(copy.fFFPtMax)
546 ,fFFNBinsXi(copy.fFFNBinsXi)
547 ,fFFXiMin(copy.fFFXiMin)
548 ,fFFXiMax(copy.fFFXiMax)
549 ,fFFNBinsZ(copy.fFFNBinsZ)
550 ,fFFZMin(copy.fFFZMin)
551 ,fFFZMax(copy.fFFZMax)
552 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
553 ,fQAJetPtMin(copy.fQAJetPtMin)
554 ,fQAJetPtMax(copy.fQAJetPtMax)
555 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
556 ,fQAJetEtaMin(copy.fQAJetEtaMin)
557 ,fQAJetEtaMax(copy.fQAJetEtaMax)
558 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
559 ,fQAJetPhiMin(copy.fQAJetPhiMin)
560 ,fQAJetPhiMax(copy.fQAJetPhiMax)
561 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
562 ,fQATrackPtMin(copy.fQATrackPtMin)
563 ,fQATrackPtMax(copy.fQATrackPtMax)
564 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
565 ,fQATrackEtaMin(copy.fQATrackEtaMin)
566 ,fQATrackEtaMax(copy.fQATrackEtaMax)
567 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
568 ,fQATrackPhiMin(copy.fQATrackPhiMin)
569 ,fQATrackPhiMax(copy.fQATrackPhiMax)
570 ,fCommonHistList(copy.fCommonHistList)
571 ,fh1EvtSelection(copy.fh1EvtSelection)
572 ,fh1VertexNContributors(copy.fh1VertexNContributors)
573 ,fh1VertexZ(copy.fh1VertexZ)
574 ,fh1EvtMult(copy.fh1EvtMult)
575 ,fh1EvtCent(copy.fh1EvtCent)
576 ,fh1Xsec(copy.fh1Xsec)
577 ,fh1Trials(copy.fh1Trials)
578 ,fh1PtHard(copy.fh1PtHard)
579 ,fh1PtHardTrials(copy.fh1PtHardTrials)
580 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
581 ,fh1nGenJets(copy.fh1nGenJets)
582 ,fh1nRecEffJets(copy.fh1nRecEffJets)
583 ,fh1nEmbeddedJets(copy.fh1nEmbeddedJets)
584 ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts)
585 ,fh1nGenBckgJets(copy.fh1nGenBckgJets)
586 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
587 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
588 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
589 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
590 ,fQATrackHistosSecRecNS(copy.fQATrackHistosSecRecNS)
591 ,fQATrackHistosSecRecS(copy.fQATrackHistosSecRecS)
592 ,fQATrackHistosSecRecSsc(copy.fQATrackHistosSecRecSsc)
593 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
594 ,fFFHistosSecRecNS(copy.fFFHistosSecRecNS)
595 ,fFFHistosSecRecS(copy.fFFHistosSecRecS)
596 ,fFFHistosSecRecSsc(copy.fFFHistosSecRecSsc)
598 ,fh1BckgMult0(copy.fh1BckgMult0)
599 ,fh1BckgMult1(copy.fh1BckgMult1)
600 ,fh1BckgMult2(copy.fh1BckgMult2)
601 ,fh1BckgMult3(copy.fh1BckgMult3)
602 ,fh1BckgMult4(copy.fh1BckgMult4)
603 ,fh1FractionPtEmbedded(copy.fh1FractionPtEmbedded)
604 ,fh1IndexEmbedded(copy.fh1IndexEmbedded)
605 ,fh2DeltaPtVsJetPtEmbedded(copy.fh2DeltaPtVsJetPtEmbedded)
606 ,fh2DeltaPtVsRecJetPtEmbedded(copy.fh2DeltaPtVsRecJetPtEmbedded)
607 ,fh1DeltaREmbedded(copy.fh1DeltaREmbedded)
608 ,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
609 ,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
610 ,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
611 ,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
612 ,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
613 ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
614 ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
615 ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
616 ,fQABckgHisto4RecCuts(copy.fQABckgHisto4RecCuts)
617 ,fQABckgHisto4Gen(copy.fQABckgHisto4Gen)
618 ,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
619 ,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
620 ,fFFBckgHisto1RecCuts(copy.fFFBckgHisto1RecCuts)
621 ,fFFBckgHisto1Gen(copy.fFFBckgHisto1Gen)
622 ,fFFBckgHisto2RecCuts(copy.fFFBckgHisto2RecCuts)
623 ,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
624 ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
625 ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
626 ,fFFBckgHisto4RecCuts(copy.fFFBckgHisto4RecCuts)
627 ,fFFBckgHisto4Gen(copy.fFFBckgHisto4Gen)
628 ,fFFBckgHisto0RecEffRec(copy.fFFBckgHisto0RecEffRec)
629 ,fFFBckgHisto0SecRecNS(copy.fFFBckgHisto0SecRecNS)
630 ,fFFBckgHisto0SecRecS(copy.fFFBckgHisto0SecRecS)
631 ,fFFBckgHisto0SecRecSsc(copy.fFFBckgHisto0SecRecSsc)
633 ,fProNtracksLeadingJet(copy.fProNtracksLeadingJet)
634 ,fProDelR80pcPt(copy.fProDelR80pcPt)
635 ,fProNtracksLeadingJetGen(copy.fProNtracksLeadingJetGen)
636 ,fProDelR80pcPtGen(copy.fProDelR80pcPtGen)
637 ,fProNtracksLeadingJetBgrPerp2(copy.fProNtracksLeadingJetBgrPerp2)
638 ,fProNtracksLeadingJetRecPrim(copy.fProNtracksLeadingJetRecPrim)
639 ,fProDelR80pcPtRecPrim(copy.fProDelR80pcPtRecPrim)
640 ,fProNtracksLeadingJetRecSecNS(copy.fProNtracksLeadingJetRecSecNS)
641 ,fProNtracksLeadingJetRecSecS(copy.fProNtracksLeadingJetRecSecS)
642 ,fProNtracksLeadingJetRecSecSsc(copy.fProNtracksLeadingJetRecSecSsc)
643 ,fRandom(copy.fRandom)
646 fBckgType[0] = copy.fBckgType[0];
647 fBckgType[1] = copy.fBckgType[1];
648 fBckgType[2] = copy.fBckgType[2];
649 fBckgType[3] = copy.fBckgType[3];
650 fBckgType[4] = copy.fBckgType[4];
653 for(Int_t ii=0; ii<5; ii++){
654 fProDelRPtSum[ii] = copy.fProDelRPtSum[ii];
655 fProDelRPtSumGen[ii] = copy.fProDelRPtSumGen[ii];
656 fProDelRPtSumBgrPerp2[ii] = copy.fProDelRPtSumBgrPerp2[ii];
657 fProDelRPtSumRecPrim[ii] = copy.fProDelRPtSumRecPrim[ii];
658 fProDelRPtSumRecSecNS[ii] = copy.fProDelRPtSumRecSecNS[ii];
659 fProDelRPtSumRecSecS[ii] = copy.fProDelRPtSumRecSecS[ii];
660 fProDelRPtSumRecSecSsc[ii] = copy.fProDelRPtSumRecSecSsc[ii];
664 // _________________________________________________________________________________________________________________________________
665 AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
671 AliAnalysisTaskSE::operator=(o);
674 fAODJets = o.fAODJets;
675 fAODExtension = o.fAODExtension;
676 fNonStdFile = o.fNonStdFile;
677 fBranchRecJets = o.fBranchRecJets;
678 fBranchRecBckgClusters = o.fBranchRecBckgClusters;
679 fBranchGenJets = o.fBranchGenJets;
680 fBranchEmbeddedJets = o.fBranchEmbeddedJets;
681 fTrackTypeGen = o.fTrackTypeGen;
682 fJetTypeGen = o.fJetTypeGen;
683 fJetTypeRecEff = o.fJetTypeRecEff;
684 fUseAODInputJets = o.fUseAODInputJets;
685 fFilterMask = o.fFilterMask;
686 fUsePhysicsSelection = o.fUsePhysicsSelection;
687 fEvtSelectionMask = o.fEvtSelectionMask;
688 fEventClass = o.fEventClass;
689 fMaxVertexZ = o.fMaxVertexZ;
690 fRejectPileup = o.fRejectPileup;
691 fTrackPtCut = o.fTrackPtCut;
692 fTrackEtaMin = o.fTrackEtaMin;
693 fTrackEtaMax = o.fTrackEtaMax;
694 fTrackPhiMin = o.fTrackPhiMin;
695 fTrackPhiMax = o.fTrackPhiMax;
696 fUseExtraTracks = o.fUseExtraTracks;
697 fUseExtraTracksBgr = o.fUseExtraTracksBgr;
698 fCutFractionPtEmbedded = o.fCutFractionPtEmbedded;
699 fUseEmbeddedJetAxis = o.fUseEmbeddedJetAxis;
700 fUseEmbeddedJetPt = o.fUseEmbeddedJetPt;
701 fJetPtCut = o.fJetPtCut;
702 fJetEtaMin = o.fJetEtaMin;
703 fJetEtaMax = o.fJetEtaMax;
704 fJetPhiMin = o.fJetPhiMin;
705 fJetPhiMax = o.fJetPhiMin;
706 fFFRadius = o.fFFRadius;
707 fFFMinLTrackPt = o.fFFMinLTrackPt;
708 fFFMaxTrackPt = o.fFFMaxTrackPt;
709 fFFMinnTracks = o.fFFMinnTracks;
710 fFFBckgRadius = o.fFFBckgRadius;
711 fBckgMode = o.fBckgMode;
714 fEffMode = o.fEffMode;
716 fBckgType[0] = o.fBckgType[0];
717 fBckgType[1] = o.fBckgType[1];
718 fBckgType[2] = o.fBckgType[2];
719 fBckgType[3] = o.fBckgType[3];
720 fBckgType[4] = o.fBckgType[4];
721 fAvgTrials = o.fAvgTrials;
722 fTracksRecCuts = o.fTracksRecCuts;
723 fTracksGen = o.fTracksGen;
724 fTracksAODMCCharged = o.fTracksAODMCCharged;
725 fTracksAODMCChargedSecNS = o.fTracksAODMCChargedSecNS;
726 fTracksAODMCChargedSecS = o.fTracksAODMCChargedSecS;
727 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
728 fJetsRec = o.fJetsRec;
729 fJetsRecCuts = o.fJetsRecCuts;
730 fJetsGen = o.fJetsGen;
731 fJetsRecEff = o.fJetsRecEff;
732 fJetsEmbedded = o.fJetsEmbedded;
733 fBckgJetsRec = o.fBckgJetsRec;
734 fBckgJetsRecCuts = o.fBckgJetsRecCuts;
735 fBckgJetsGen = o.fBckgJetsGen;
736 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
737 fQATrackHistosGen = o.fQATrackHistosGen;
738 fQAJetHistosRec = o.fQAJetHistosRec;
739 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
740 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
741 fQAJetHistosGen = o.fQAJetHistosGen;
742 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
743 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
744 fFFHistosRecCuts = o.fFFHistosRecCuts;
745 fFFHistosRecCutsInc = o.fFFHistosRecCutsInc;
746 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
747 fFFHistosGen = o.fFFHistosGen;
748 fFFHistosGenInc = o.fFFHistosGenInc;
749 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
750 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
751 fFFNBinsJetPt = o.fFFNBinsJetPt;
752 fFFJetPtMin = o.fFFJetPtMin;
753 fFFJetPtMax = o.fFFJetPtMax;
754 fFFNBinsPt = o.fFFNBinsPt;
755 fFFPtMin = o.fFFPtMin;
756 fFFPtMax = o.fFFPtMax;
757 fFFNBinsXi = o.fFFNBinsXi;
758 fFFXiMin = o.fFFXiMin;
759 fFFXiMax = o.fFFXiMax;
760 fFFNBinsZ = o.fFFNBinsZ;
763 fQAJetNBinsPt = o.fQAJetNBinsPt;
764 fQAJetPtMin = o.fQAJetPtMin;
765 fQAJetPtMax = o.fQAJetPtMax;
766 fQAJetNBinsEta = o.fQAJetNBinsEta;
767 fQAJetEtaMin = o.fQAJetEtaMin;
768 fQAJetEtaMax = o.fQAJetEtaMax;
769 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
770 fQAJetPhiMin = o.fQAJetPhiMin;
771 fQAJetPhiMax = o.fQAJetPhiMax;
772 fQATrackNBinsPt = o.fQATrackNBinsPt;
773 fQATrackPtMin = o.fQATrackPtMin;
774 fQATrackPtMax = o.fQATrackPtMax;
775 fQATrackNBinsEta = o.fQATrackNBinsEta;
776 fQATrackEtaMin = o.fQATrackEtaMin;
777 fQATrackEtaMax = o.fQATrackEtaMax;
778 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
779 fQATrackPhiMin = o.fQATrackPhiMin;
780 fQATrackPhiMax = o.fQATrackPhiMax;
781 fCommonHistList = o.fCommonHistList;
782 fh1EvtSelection = o.fh1EvtSelection;
783 fh1VertexNContributors = o.fh1VertexNContributors;
784 fh1VertexZ = o.fh1VertexZ;
785 fh1EvtMult = o.fh1EvtMult;
786 fh1EvtCent = o.fh1EvtCent;
788 fh1Trials = o.fh1Trials;
789 fh1PtHard = o.fh1PtHard;
790 fh1PtHardTrials = o.fh1PtHardTrials;
791 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
792 fh1nGenJets = o.fh1nGenJets;
793 fh1nRecEffJets = o.fh1nRecEffJets;
794 fh1nEmbeddedJets = o.fh1nEmbeddedJets;
795 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
796 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
797 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
798 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
799 fQATrackHistosSecRecNS = o.fQATrackHistosSecRecNS;
800 fQATrackHistosSecRecS = o.fQATrackHistosSecRecS;
801 fQATrackHistosSecRecSsc = o.fQATrackHistosSecRecSsc;
802 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
803 fFFHistosSecRecNS = o.fFFHistosSecRecNS;
804 fFFHistosSecRecS = o.fFFHistosSecRecS;
805 fFFHistosSecRecSsc = o.fFFHistosSecRecSsc;
807 fh1BckgMult0 = o.fh1BckgMult0;
808 fh1BckgMult1 = o.fh1BckgMult1;
809 fh1BckgMult2 = o.fh1BckgMult2;
810 fh1BckgMult3 = o.fh1BckgMult3;
811 fh1BckgMult4 = o.fh1BckgMult4;
812 fh1FractionPtEmbedded = o.fh1FractionPtEmbedded;
813 fh1IndexEmbedded = o.fh1IndexEmbedded;
814 fh2DeltaPtVsJetPtEmbedded = o.fh2DeltaPtVsJetPtEmbedded;
815 fh2DeltaPtVsRecJetPtEmbedded = o.fh2DeltaPtVsRecJetPtEmbedded;
816 fh1DeltaREmbedded = o.fh1DeltaREmbedded;
817 fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
818 fQABckgHisto0Gen = o.fQABckgHisto0Gen;
819 fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
820 fQABckgHisto1Gen = o.fQABckgHisto1Gen;
821 fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
822 fQABckgHisto2Gen = o.fQABckgHisto2Gen;
823 fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
824 fQABckgHisto3Gen = o.fQABckgHisto3Gen;
825 fQABckgHisto4RecCuts = o.fQABckgHisto4RecCuts;
826 fQABckgHisto4Gen = o.fQABckgHisto4Gen;
827 fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
828 fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
829 fFFBckgHisto1RecCuts = o.fFFBckgHisto1RecCuts;
830 fFFBckgHisto1Gen = o.fFFBckgHisto1Gen;
831 fFFBckgHisto2RecCuts = o.fFFBckgHisto2RecCuts;
832 fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
833 fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
834 fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
835 fFFBckgHisto4RecCuts = o.fFFBckgHisto4RecCuts;
836 fFFBckgHisto4Gen = o.fFFBckgHisto4Gen;
837 fFFBckgHisto0RecEffRec = o.fFFBckgHisto0RecEffRec;
838 fFFBckgHisto0SecRecNS = o.fFFBckgHisto0SecRecNS;
839 fFFBckgHisto0SecRecS = o.fFFBckgHisto0SecRecS;
840 fFFBckgHisto0SecRecSsc = o.fFFBckgHisto0SecRecSsc;
841 fProNtracksLeadingJet = o.fProNtracksLeadingJet;
842 fProDelR80pcPt = o.fProDelR80pcPt;
843 fProNtracksLeadingJetGen = o.fProNtracksLeadingJetGen;
844 fProDelR80pcPtGen = o.fProDelR80pcPtGen;
845 fProNtracksLeadingJetBgrPerp2 = o.fProNtracksLeadingJetBgrPerp2;
846 fProNtracksLeadingJetRecPrim = o.fProNtracksLeadingJetRecPrim;
847 fProDelR80pcPtRecPrim = o.fProDelR80pcPtRecPrim;
848 fProNtracksLeadingJetRecSecNS = o.fProNtracksLeadingJetRecSecNS;
849 fProNtracksLeadingJetRecSecS = o.fProNtracksLeadingJetRecSecS;
850 fProNtracksLeadingJetRecSecSsc = o.fProNtracksLeadingJetRecSecSsc;
853 for(Int_t ii=0; ii<5; ii++){
854 fProDelRPtSum[ii] = o.fProDelRPtSum[ii];
855 fProDelRPtSumGen[ii] = o.fProDelRPtSumGen[ii];
856 fProDelRPtSumBgrPerp2[ii] = o.fProDelRPtSumBgrPerp2[ii];
857 fProDelRPtSumRecPrim[ii] = o.fProDelRPtSumRecPrim[ii];
858 fProDelRPtSumRecSecNS[ii] = o.fProDelRPtSumRecSecNS[ii];
859 fProDelRPtSumRecSecS[ii] = o.fProDelRPtSumRecSecS[ii];
860 fProDelRPtSumRecSecSsc[ii] = o.fProDelRPtSumRecSecSsc[ii];
867 //___________________________________________________________________________
868 AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
872 if(fTracksRecCuts) delete fTracksRecCuts;
873 if(fTracksGen) delete fTracksGen;
874 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
875 if(fTracksAODMCChargedSecNS) delete fTracksAODMCChargedSecNS;
876 if(fTracksAODMCChargedSecS) delete fTracksAODMCChargedSecS;
877 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
878 if(fJetsRec) delete fJetsRec;
879 if(fJetsRecCuts) delete fJetsRecCuts;
880 if(fJetsGen) delete fJetsGen;
881 if(fJetsRecEff) delete fJetsRecEff;
882 if(fJetsEmbedded) delete fJetsEmbedded;
885 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
886 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
887 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
889 if(fBckgJetsRec) delete fBckgJetsRec;
890 if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
891 if(fBckgJetsGen) delete fBckgJetsGen;
893 if(fRandom) delete fRandom;
896 //______________________________________________________________________________________________________
897 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
898 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
899 Int_t nPt, Float_t ptMin, Float_t ptMax,
900 Int_t nXi, Float_t xiMin, Float_t xiMax,
901 Int_t nZ , Float_t zMin , Float_t zMax)
921 // default constructor
925 //___________________________________________________________________________
926 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
928 ,fNBinsJetPt(copy.fNBinsJetPt)
929 ,fJetPtMin(copy.fJetPtMin)
930 ,fJetPtMax(copy.fJetPtMax)
931 ,fNBinsPt(copy.fNBinsPt)
934 ,fNBinsXi(copy.fNBinsXi)
937 ,fNBinsZ(copy.fNBinsZ)
940 ,fh2TrackPt(copy.fh2TrackPt)
943 ,fh1JetPt(copy.fh1JetPt)
944 ,fNameFF(copy.fNameFF)
949 //_______________________________________________________________________________________________________________________________________________________________
950 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
955 TObject::operator=(o);
956 fNBinsJetPt = o.fNBinsJetPt;
957 fJetPtMin = o.fJetPtMin;
958 fJetPtMax = o.fJetPtMax;
959 fNBinsPt = o.fNBinsPt;
962 fNBinsXi = o.fNBinsXi;
968 fh2TrackPt = o.fh2TrackPt;
971 fh1JetPt = o.fh1JetPt;
978 //_________________________________________________________
979 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
983 if(fh1JetPt) delete fh1JetPt;
984 if(fh2TrackPt) delete fh2TrackPt;
985 if(fh2Xi) delete fh2Xi;
986 if(fh2Z) delete fh2Z;
989 //_________________________________________________________________
990 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
994 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
995 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
996 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
997 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
999 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1000 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
1001 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
1002 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
1005 //_______________________________________________________________________________________________________________
1006 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm,
1007 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1011 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
1012 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
1014 // Added for proper normalization of FF background estimation
1015 // when zero track are found in the background region
1016 if((int)trackPt==-1) return;
1018 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
1019 else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,trackPt,scaleFacStrangeness);
1020 else fh2TrackPt->Fill(jetPt,trackPt);
1023 if(jetPt>0) z = trackPt / jetPt;
1025 if(z>0) xi = TMath::Log(1/z);
1027 if(trackPt>(1-1e-06)*jetPt && trackPt<(1+1e-06)*jetPt){ // case z=1 : move entry to last histo bin <1
1034 fh2Xi->Fill(jetPt,xi,1/norm);
1035 fh2Z->Fill(jetPt,z,1/norm);
1037 else if(scaleStrangeness){
1038 fh2Xi->Fill(jetPt,xi,scaleFacStrangeness);
1039 fh2Z->Fill(jetPt,z,scaleFacStrangeness);
1042 fh2Xi->Fill(jetPt,xi);
1043 fh2Z->Fill(jetPt,z);
1047 //_________________________________________________________________________________
1048 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1050 // add histos to list
1052 list->Add(fh1JetPt);
1054 list->Add(fh2TrackPt);
1059 //_________________________________________________________________________________________________________
1060 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1061 Int_t nPt, Float_t ptMin, Float_t ptMax,
1062 Int_t nEta, Float_t etaMin, Float_t etaMax,
1063 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1078 // default constructor
1081 //____________________________________________________________________________________
1082 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1084 ,fNBinsPt(copy.fNBinsPt)
1085 ,fPtMin(copy.fPtMin)
1086 ,fPtMax(copy.fPtMax)
1087 ,fNBinsEta(copy.fNBinsEta)
1088 ,fEtaMin(copy.fEtaMin)
1089 ,fEtaMax(copy.fEtaMax)
1090 ,fNBinsPhi(copy.fNBinsPhi)
1091 ,fPhiMin(copy.fPhiMin)
1092 ,fPhiMax(copy.fPhiMax)
1093 ,fh2EtaPhi(copy.fh2EtaPhi)
1095 ,fNameQAJ(copy.fNameQAJ)
1100 //________________________________________________________________________________________________________________________________________________________________________
1101 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
1106 TObject::operator=(o);
1107 fNBinsPt = o.fNBinsPt;
1110 fNBinsEta = o.fNBinsEta;
1111 fEtaMin = o.fEtaMin;
1112 fEtaMax = o.fEtaMax;
1113 fNBinsPhi = o.fNBinsPhi;
1114 fPhiMin = o.fPhiMin;
1115 fPhiMax = o.fPhiMax;
1116 fh2EtaPhi = o.fh2EtaPhi;
1118 fNameQAJ = o.fNameQAJ;
1124 //______________________________________________________________
1125 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1129 if(fh2EtaPhi) delete fh2EtaPhi;
1130 if(fh1Pt) delete fh1Pt;
1133 //____________________________________________________________________
1134 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1136 // book jet QA histos
1138 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1139 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1141 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1142 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1145 //____________________________________________________________________________________________________
1146 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1148 // fill jet QA histos
1150 fh2EtaPhi->Fill( eta, phi);
1154 //____________________________________________________________________________________
1155 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1157 // add histos to list
1159 list->Add(fh2EtaPhi);
1163 //___________________________________________________________________________________________________________
1164 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1165 Int_t nPt, Float_t ptMin, Float_t ptMax,
1166 Int_t nEta, Float_t etaMin, Float_t etaMax,
1167 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1179 ,fHighPtThreshold(ptThresh)
1186 // default constructor
1189 //__________________________________________________________________________________________
1190 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1192 ,fNBinsPt(copy.fNBinsPt)
1193 ,fPtMin(copy.fPtMin)
1194 ,fPtMax(copy.fPtMax)
1195 ,fNBinsEta(copy.fNBinsEta)
1196 ,fEtaMin(copy.fEtaMin)
1197 ,fEtaMax(copy.fEtaMax)
1198 ,fNBinsPhi(copy.fNBinsPhi)
1199 ,fPhiMin(copy.fPhiMin)
1200 ,fPhiMax(copy.fPhiMax)
1201 ,fHighPtThreshold(copy.fHighPtThreshold)
1202 ,fh2EtaPhi(copy.fh2EtaPhi)
1204 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1205 ,fh2PhiPt(copy.fh2PhiPt)
1206 ,fNameQAT(copy.fNameQAT)
1211 // _____________________________________________________________________________________________________________________________________________________________________________
1212 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1217 TObject::operator=(o);
1218 fNBinsPt = o.fNBinsPt;
1221 fNBinsEta = o.fNBinsEta;
1222 fEtaMin = o.fEtaMin;
1223 fEtaMax = o.fEtaMax;
1224 fNBinsPhi = o.fNBinsPhi;
1225 fPhiMin = o.fPhiMin;
1226 fPhiMax = o.fPhiMax;
1227 fHighPtThreshold = o.fHighPtThreshold;
1228 fh2EtaPhi = o.fh2EtaPhi;
1230 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1231 fh2PhiPt = o.fh2PhiPt;
1232 fNameQAT = o.fNameQAT;
1238 //___________________________________________________________________
1239 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1243 if(fh2EtaPhi) delete fh2EtaPhi;
1244 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1245 if(fh1Pt) delete fh1Pt;
1246 if(fh2PhiPt) delete fh2PhiPt;
1249 //______________________________________________________________________
1250 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1252 // book track QA histos
1254 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1255 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);
1256 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1257 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1259 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1260 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1261 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1262 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1265 //________________________________________________________________________________________________________
1266 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm,
1267 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1269 // fill track QA histos
1270 Float_t weight = 1.;
1271 if(weightPt) weight = pt;
1272 fh2EtaPhi->Fill( eta, phi, weight);
1273 if(scaleStrangeness) fh2EtaPhi->Fill( eta, phi, scaleFacStrangeness);
1274 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1275 if(pt > fHighPtThreshold && scaleStrangeness) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1276 if(norm) fh1Pt->Fill( pt, 1/norm );
1277 else if(scaleStrangeness) fh1Pt->Fill(pt,scaleFacStrangeness);
1278 else fh1Pt->Fill( pt );
1280 if(scaleFacStrangeness) fh2PhiPt->Fill(phi, pt, scaleFacStrangeness);
1281 else fh2PhiPt->Fill(phi, pt);
1284 //______________________________________________________________________________________
1285 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1287 // add histos to list
1289 list->Add(fh2EtaPhi);
1290 list->Add(fh2HighPtEtaPhi);
1292 list->Add(fh2PhiPt);
1295 //_________________________________________________________________________________
1296 Bool_t AliAnalysisTaskFragmentationFunction::Notify()
1299 // Implemented Notify() to read the cross sections
1300 // and number of trials from pyxsec.root
1301 // (taken from AliAnalysisTaskJetSpectrum2)
1303 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
1304 Float_t xsection = 0;
1305 Float_t ftrials = 1;
1309 TFile *curfile = tree->GetCurrentFile();
1311 Error("Notify","No current file");
1314 if(!fh1Xsec||!fh1Trials){
1315 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1318 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
1319 fh1Xsec->Fill("<#sigma>",xsection);
1320 // construct a poor man average trials
1321 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1322 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
1325 // Set seed for backg study
1326 fRandom = new TRandom3();
1327 fRandom->SetSeed(0);
1332 //__________________________________________________________________
1333 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
1335 // create output objects
1337 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
1339 // create list of tracks and jets
1341 fTracksRecCuts = new TList();
1342 fTracksRecCuts->SetOwner(kFALSE);
1344 fTracksGen = new TList();
1345 fTracksGen->SetOwner(kFALSE);
1347 fTracksAODMCCharged = new TList();
1348 fTracksAODMCCharged->SetOwner(kFALSE);
1350 fTracksAODMCChargedSecNS = new TList();
1351 fTracksAODMCChargedSecNS->SetOwner(kFALSE);
1353 fTracksAODMCChargedSecS = new TList();
1354 fTracksAODMCChargedSecS->SetOwner(kFALSE);
1356 fTracksRecQualityCuts = new TList();
1357 fTracksRecQualityCuts->SetOwner(kFALSE);
1359 fJetsRec = new TList();
1360 fJetsRec->SetOwner(kFALSE);
1362 fJetsRecCuts = new TList();
1363 fJetsRecCuts->SetOwner(kFALSE);
1365 fJetsGen = new TList();
1366 fJetsGen->SetOwner(kFALSE);
1368 fJetsRecEff = new TList();
1369 fJetsRecEff->SetOwner(kFALSE);
1371 fJetsEmbedded = new TList();
1372 fJetsEmbedded->SetOwner(kFALSE);
1376 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1377 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1378 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1380 fBckgJetsRec = new TList();
1381 fBckgJetsRec->SetOwner(kFALSE);
1383 fBckgJetsRecCuts = new TList();
1384 fBckgJetsRecCuts->SetOwner(kFALSE);
1386 fBckgJetsGen = new TList();
1387 fBckgJetsGen->SetOwner(kFALSE);
1391 // Create histograms / output container
1395 fCommonHistList = new TList();
1396 fCommonHistList->SetOwner(kTRUE);
1398 Bool_t oldStatus = TH1::AddDirectoryStatus();
1399 TH1::AddDirectory(kFALSE);
1403 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 7, -0.5, 6.5);
1404 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
1405 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
1406 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1407 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1408 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1409 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
1410 fh1EvtSelection->GetXaxis()->SetBinLabel(7,"pileup: rejected");
1412 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
1413 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1414 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
1415 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1417 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1418 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1419 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1420 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1421 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1422 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1424 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1425 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1426 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1427 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1429 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1430 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1433 if(fBranchEmbeddedJets.Length()){
1434 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
1435 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
1436 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
1437 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
1438 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
1439 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1444 if(fQAMode&1){ // track QA
1445 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1446 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1447 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1448 fQATrackHighPtThreshold);
1449 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1450 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1451 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1452 fQATrackHighPtThreshold);
1455 if(fQAMode&2){ // jet QA
1456 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1457 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1458 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1459 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1460 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1461 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1462 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1463 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1464 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1465 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1466 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1467 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1468 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1469 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1470 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1471 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1472 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1478 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1479 fFFNBinsPt, fFFPtMin, fFFPtMax,
1480 fFFNBinsXi, fFFXiMin, fFFXiMax,
1481 fFFNBinsZ , fFFZMin , fFFZMax );
1484 fFFHistosRecCutsInc = new AliFragFuncHistos("RecCutsInc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1485 fFFNBinsPt, fFFPtMin, fFFPtMax,
1486 fFFNBinsXi, fFFXiMin, fFFXiMax,
1487 fFFNBinsZ , fFFZMin , fFFZMax );
1490 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1491 fFFNBinsPt, fFFPtMin, fFFPtMax,
1492 fFFNBinsXi, fFFXiMin, fFFXiMax,
1493 fFFNBinsZ , fFFZMin , fFFZMax );
1495 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1496 fFFNBinsPt, fFFPtMin, fFFPtMax,
1497 fFFNBinsXi, fFFXiMin, fFFXiMax,
1498 fFFNBinsZ , fFFZMin , fFFZMax);
1500 fFFHistosGenInc = new AliFragFuncHistos("GenInc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1501 fFFNBinsPt, fFFPtMin, fFFPtMax,
1502 fFFNBinsXi, fFFXiMin, fFFXiMax,
1503 fFFNBinsZ , fFFZMin , fFFZMax);
1505 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1506 fFFNBinsPt, fFFPtMin, fFFPtMax,
1507 fFFNBinsXi, fFFXiMin, fFFXiMax,
1508 fFFNBinsZ , fFFZMin , fFFZMax);
1516 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1517 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1518 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1519 fQATrackHighPtThreshold);
1521 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1522 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1523 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1524 fQATrackHighPtThreshold);
1526 fQATrackHistosSecRecNS = new AliFragFuncQATrackHistos("SecRecNS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1527 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1528 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1529 fQATrackHighPtThreshold);
1531 fQATrackHistosSecRecS = new AliFragFuncQATrackHistos("SecRecS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1532 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1533 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1534 fQATrackHighPtThreshold);
1536 fQATrackHistosSecRecSsc = new AliFragFuncQATrackHistos("SecRecSsc", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1537 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1538 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1539 fQATrackHighPtThreshold);
1543 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1544 fFFNBinsPt, fFFPtMin, fFFPtMax,
1545 fFFNBinsXi, fFFXiMin, fFFXiMax,
1546 fFFNBinsZ , fFFZMin , fFFZMax);
1548 fFFHistosSecRecNS = new AliFragFuncHistos("SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1549 fFFNBinsPt, fFFPtMin, fFFPtMax,
1550 fFFNBinsXi, fFFXiMin, fFFXiMax,
1551 fFFNBinsZ , fFFZMin , fFFZMax);
1553 fFFHistosSecRecS = new AliFragFuncHistos("SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1554 fFFNBinsPt, fFFPtMin, fFFPtMax,
1555 fFFNBinsXi, fFFXiMin, fFFXiMax,
1556 fFFNBinsZ , fFFZMin , fFFZMax);
1558 fFFHistosSecRecSsc = new AliFragFuncHistos("SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1559 fFFNBinsPt, fFFPtMin, fFFPtMax,
1560 fFFNBinsXi, fFFXiMin, fFFXiMax,
1561 fFFNBinsZ , fFFZMin , fFFZMax);
1564 } // end: efficiency
1568 if(fBckgType[0]==kBckgNone){
1569 AliError("no bgr method selected !");
1573 for(Int_t i=0; i<5; i++){
1574 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
1575 else if(fBckgType[i]==kBckgPerp2) title[i]="Perp2";
1576 else if(fBckgType[i]==kBckgPerp2Area) title[i]="Perp2Area";
1577 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
1578 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
1579 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
1580 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
1581 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
1582 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
1583 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
1584 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
1585 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
1586 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
1587 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
1588 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
1589 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
1590 else if(fBckgType[i]==kBckgNone) title[i]="";
1591 else printf("Please chose background method number %d!",i);
1595 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1596 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1597 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
1599 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
1600 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
1604 fh1BckgMult0 = new TH1F("fh1BckgMult0","bckg mult "+title[0],500,0,500);
1605 if(fBckgType[1] != kBckgNone) fh1BckgMult1 = new TH1F("fh1BckgMult1","bckg mult "+title[1],500,0,500);
1606 if(fBckgType[2] != kBckgNone) fh1BckgMult2 = new TH1F("fh1BckgMult2","bckg mult "+title[2],500,0,500);
1607 if(fBckgType[3] != kBckgNone) fh1BckgMult3 = new TH1F("fh1BckgMult3","bckg mult "+title[3],500,0,500);
1608 if(fBckgType[4] != kBckgNone) fh1BckgMult4 = new TH1F("fh1BckgMult4","bckg mult "+title[4],500,0,500);
1612 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1613 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1614 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1615 fQATrackHighPtThreshold);
1616 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1617 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1618 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1619 fQATrackHighPtThreshold);
1621 if(fBckgType[1] != kBckgNone){
1622 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1623 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1624 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1625 fQATrackHighPtThreshold);
1626 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1627 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1628 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1629 fQATrackHighPtThreshold);
1631 if(fBckgType[2] != kBckgNone){
1632 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1633 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1634 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1635 fQATrackHighPtThreshold);
1636 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1637 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1638 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1639 fQATrackHighPtThreshold);
1641 if(fBckgType[3] != kBckgNone){
1642 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1643 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1644 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1645 fQATrackHighPtThreshold);
1646 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1647 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1648 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1649 fQATrackHighPtThreshold);
1651 if(fBckgType[4] != kBckgNone){
1652 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1653 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1654 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1655 fQATrackHighPtThreshold);
1656 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1657 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1658 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1659 fQATrackHighPtThreshold);
1661 } // end: background QA
1664 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1665 fFFNBinsPt, fFFPtMin, fFFPtMax,
1666 fFFNBinsXi, fFFXiMin, fFFXiMax,
1667 fFFNBinsZ , fFFZMin , fFFZMax);
1669 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1670 fFFNBinsPt, fFFPtMin, fFFPtMax,
1671 fFFNBinsXi, fFFXiMin, fFFXiMax,
1672 fFFNBinsZ , fFFZMin , fFFZMax);
1674 if(fBckgType[1] != kBckgNone){
1675 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1676 fFFNBinsPt, fFFPtMin, fFFPtMax,
1677 fFFNBinsXi, fFFXiMin, fFFXiMax,
1678 fFFNBinsZ , fFFZMin , fFFZMax);
1679 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1680 fFFNBinsPt, fFFPtMin, fFFPtMax,
1681 fFFNBinsXi, fFFXiMin, fFFXiMax,
1682 fFFNBinsZ , fFFZMin , fFFZMax);
1684 if(fBckgType[2] != kBckgNone){
1685 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1686 fFFNBinsPt, fFFPtMin, fFFPtMax,
1687 fFFNBinsXi, fFFXiMin, fFFXiMax,
1688 fFFNBinsZ , fFFZMin , fFFZMax);
1690 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1691 fFFNBinsPt, fFFPtMin, fFFPtMax,
1692 fFFNBinsXi, fFFXiMin, fFFXiMax,
1693 fFFNBinsZ , fFFZMin , fFFZMax);
1695 if(fBckgType[3] != kBckgNone){
1696 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1697 fFFNBinsPt, fFFPtMin, fFFPtMax,
1698 fFFNBinsXi, fFFXiMin, fFFXiMax,
1699 fFFNBinsZ , fFFZMin , fFFZMax);
1701 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1702 fFFNBinsPt, fFFPtMin, fFFPtMax,
1703 fFFNBinsXi, fFFXiMin, fFFXiMax,
1704 fFFNBinsZ , fFFZMin , fFFZMax);
1706 if(fBckgType[4] != kBckgNone){
1707 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1708 fFFNBinsPt, fFFPtMin, fFFPtMax,
1709 fFFNBinsXi, fFFXiMin, fFFXiMax,
1710 fFFNBinsZ , fFFZMin , fFFZMax);
1712 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1713 fFFNBinsPt, fFFPtMin, fFFPtMax,
1714 fFFNBinsXi, fFFXiMin, fFFXiMax,
1715 fFFNBinsZ , fFFZMin , fFFZMax);
1718 fFFBckgHisto0RecEffRec = new AliFragFuncHistos("Bckg"+title[0]+"RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1719 fFFNBinsPt, fFFPtMin, fFFPtMax,
1720 fFFNBinsXi, fFFXiMin, fFFXiMax,
1721 fFFNBinsZ , fFFZMin , fFFZMax);
1723 fFFBckgHisto0SecRecNS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1724 fFFNBinsPt, fFFPtMin, fFFPtMax,
1725 fFFNBinsXi, fFFXiMin, fFFXiMax,
1726 fFFNBinsZ , fFFZMin , fFFZMax);
1728 fFFBckgHisto0SecRecS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1729 fFFNBinsPt, fFFPtMin, fFFPtMax,
1730 fFFNBinsXi, fFFXiMin, fFFXiMax,
1731 fFFNBinsZ , fFFZMin , fFFZMax);
1733 fFFBckgHisto0SecRecSsc = new AliFragFuncHistos("Bckg"+title[0]+"SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1734 fFFNBinsPt, fFFPtMin, fFFPtMax,
1735 fFFNBinsXi, fFFXiMin, fFFXiMax,
1736 fFFNBinsZ , fFFZMin , fFFZMax);
1739 } // end: background FF
1742 } // end: background
1745 // ____________ define histograms ____________________
1748 if(fQAMode&1){ // track QA
1749 fQATrackHistosRecCuts->DefineHistos();
1750 fQATrackHistosGen->DefineHistos();
1753 if(fQAMode&2){ // jet QA
1754 fQAJetHistosRec->DefineHistos();
1755 fQAJetHistosRecCuts->DefineHistos();
1756 fQAJetHistosRecCutsLeading->DefineHistos();
1757 fQAJetHistosGen->DefineHistos();
1758 fQAJetHistosGenLeading->DefineHistos();
1759 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
1764 fFFHistosRecCuts->DefineHistos();
1765 fFFHistosRecCutsInc->DefineHistos();
1766 fFFHistosRecLeadingTrack->DefineHistos();
1767 fFFHistosGen->DefineHistos();
1768 fFFHistosGenInc->DefineHistos();
1769 fFFHistosGenLeadingTrack->DefineHistos();
1774 fQATrackHistosRecEffGen->DefineHistos();
1775 fQATrackHistosRecEffRec->DefineHistos();
1776 fQATrackHistosSecRecNS->DefineHistos();
1777 fQATrackHistosSecRecS->DefineHistos();
1778 fQATrackHistosSecRecSsc->DefineHistos();
1781 fFFHistosRecEffRec->DefineHistos();
1782 fFFHistosSecRecNS->DefineHistos();
1783 fFFHistosSecRecS->DefineHistos();
1784 fFFHistosSecRecSsc->DefineHistos();
1786 } // end: efficiency
1791 fFFBckgHisto0RecCuts->DefineHistos();
1792 fFFBckgHisto0Gen->DefineHistos();
1793 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->DefineHistos();
1794 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->DefineHistos();
1795 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->DefineHistos();
1796 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->DefineHistos();
1797 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->DefineHistos();
1798 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->DefineHistos();
1799 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->DefineHistos();
1800 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->DefineHistos();
1803 fFFBckgHisto0RecEffRec->DefineHistos();
1804 fFFBckgHisto0SecRecNS->DefineHistos();
1805 fFFBckgHisto0SecRecS->DefineHistos();
1806 fFFBckgHisto0SecRecSsc->DefineHistos();
1811 fQABckgHisto0RecCuts->DefineHistos();
1812 fQABckgHisto0Gen->DefineHistos();
1813 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->DefineHistos();
1814 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->DefineHistos();
1815 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->DefineHistos();
1816 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->DefineHistos();
1817 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->DefineHistos();
1818 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->DefineHistos();
1819 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->DefineHistos();
1820 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->DefineHistos();
1822 } // end: background
1825 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
1826 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
1827 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
1829 fCommonHistList->Add(fh1EvtSelection);
1830 fCommonHistList->Add(fh1EvtMult);
1831 fCommonHistList->Add(fh1EvtCent);
1832 fCommonHistList->Add(fh1VertexNContributors);
1833 fCommonHistList->Add(fh1VertexZ);
1834 fCommonHistList->Add(fh1nRecJetsCuts);
1835 fCommonHistList->Add(fh1Xsec);
1836 fCommonHistList->Add(fh1Trials);
1837 fCommonHistList->Add(fh1PtHard);
1838 fCommonHistList->Add(fh1PtHardTrials);
1840 if(genJets) fCommonHistList->Add(fh1nGenJets);
1844 fFFHistosRecCuts->AddToOutput(fCommonHistList);
1845 fFFHistosRecCutsInc->AddToOutput(fCommonHistList);
1846 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
1848 if(genJets && genTracks){
1849 fFFHistosGen->AddToOutput(fCommonHistList);
1850 fFFHistosGenInc->AddToOutput(fCommonHistList);
1851 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
1858 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
1859 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
1860 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
1861 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
1862 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
1864 if(genJets && genTracks){
1865 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
1866 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
1867 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
1868 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
1869 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
1873 fFFBckgHisto0RecEffRec->AddToOutput(fCommonHistList);
1874 fFFBckgHisto0SecRecNS->AddToOutput(fCommonHistList);
1875 fFFBckgHisto0SecRecS->AddToOutput(fCommonHistList);
1876 fFFBckgHisto0SecRecSsc->AddToOutput(fCommonHistList);
1881 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
1882 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
1883 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
1884 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
1885 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
1886 if(genJets && genTracks){
1887 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
1888 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->AddToOutput(fCommonHistList);
1889 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->AddToOutput(fCommonHistList);
1890 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->AddToOutput(fCommonHistList);
1891 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->AddToOutput(fCommonHistList);
1895 if(fh1BckgMult0) fCommonHistList->Add(fh1BckgMult0);
1896 if(fBckgType[1] != kBckgNone) fCommonHistList->Add(fh1BckgMult1);
1897 if(fBckgType[2] != kBckgNone) fCommonHistList->Add(fh1BckgMult2);
1898 if(fBckgType[3] != kBckgNone) fCommonHistList->Add(fh1BckgMult3);
1899 if(fBckgType[4] != kBckgNone) fCommonHistList->Add(fh1BckgMult4);
1903 if(fBranchEmbeddedJets.Length()){
1904 fCommonHistList->Add(fh1FractionPtEmbedded);
1905 fCommonHistList->Add(fh1IndexEmbedded);
1906 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
1907 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
1908 fCommonHistList->Add(fh1DeltaREmbedded);
1909 fCommonHistList->Add(fh1nEmbeddedJets);
1915 if(fQAMode&1){ // track QA
1916 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
1917 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
1920 if(fQAMode&2){ // jet QA
1921 fQAJetHistosRec->AddToOutput(fCommonHistList);
1922 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
1923 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
1924 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
1926 fQAJetHistosGen->AddToOutput(fCommonHistList);
1927 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
1933 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1934 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1935 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
1936 fCommonHistList->Add(fh1nRecBckgJetsCuts);
1937 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
1941 if(fEffMode && recJetsEff && genTracks){
1943 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
1944 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
1945 fQATrackHistosSecRecNS->AddToOutput(fCommonHistList);
1946 fQATrackHistosSecRecS->AddToOutput(fCommonHistList);
1947 fQATrackHistosSecRecSsc->AddToOutput(fCommonHistList);
1950 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
1951 fFFHistosSecRecNS->AddToOutput(fCommonHistList);
1952 fFFHistosSecRecS->AddToOutput(fCommonHistList);
1953 fFFHistosSecRecSsc->AddToOutput(fCommonHistList);
1955 fCommonHistList->Add(fh1nRecEffJets);
1956 fCommonHistList->Add(fh2PtRecVsGenPrim);
1957 fCommonHistList->Add(fh2PtRecVsGenSec);
1963 fProNtracksLeadingJet = new TProfile("AvgNoOfTracksLeadingJet","AvgNoOfTracksLeadingJet",100,0,250,0,50);
1964 fProDelR80pcPt = new TProfile("AvgdelR80pcPt","AvgdelR80pcPt",100,0,250,0,1);
1966 if(genJets && genTracks){
1967 fProNtracksLeadingJetGen = new TProfile("AvgNoOfTracksLeadingJetGen","AvgNoOfTracksLeadingJetGen",100,0,250,0,50);
1968 fProDelR80pcPtGen = new TProfile("AvgdelR80pcPtGen","AvgdelR80pcPtGen",100,0,250,0,1);
1972 fProNtracksLeadingJetBgrPerp2 = new TProfile("AvgNoOfTracksLeadingJetBgrPerp2","AvgNoOfTracksLeadingJetBgrPerp2",100,0,250,0,50);
1975 fProNtracksLeadingJetRecPrim = new TProfile("AvgNoOfTracksLeadingJetRecPrim","AvgNoOfTracksLeadingJetRecPrim",100,0,250,0,50);
1976 fProDelR80pcPtRecPrim = new TProfile("AvgdelR80pcPtRecPrim","AvgdelR80pcPtRecPrim",100,0,250,0,1);
1977 fProNtracksLeadingJetRecSecNS = new TProfile("AvgNoOfTracksLeadingJetRecSecNS","AvgNoOfTracksLeadingJetRecSecNS",100,0,250,0,50);
1978 fProNtracksLeadingJetRecSecS = new TProfile("AvgNoOfTracksLeadingJetRecSecS","AvgNoOfTracksLeadingJetRecSecS",100,0,250,0,50);
1979 fProNtracksLeadingJetRecSecSsc = new TProfile("AvgNoOfTracksLeadingJetRecSecSsc","AvgNoOfTracksLeadingJetRecSecSsc",100,0,250,0,50);
1983 for(Int_t ii=0; ii<5; ii++){
1984 if(ii==0)strTitJS = "_JetPt20to30";
1985 if(ii==1)strTitJS = "_JetPt30to40";
1986 if(ii==2)strTitJS = "_JetPt40to60";
1987 if(ii==3)strTitJS = "_JetPt60to80";
1988 if(ii==4)strTitJS = "_JetPt80to100";
1990 fProDelRPtSum[ii] = new TProfile(Form("AvgPtSumDelR%s",strTitJS.Data()),Form("AvgPtSumDelR%s",strTitJS.Data()),50,0,1,0,250);
1991 if(genJets && genTracks)
1992 fProDelRPtSumGen[ii] = new TProfile(Form("AvgPtSumDelRGen%s",strTitJS.Data()),Form("AvgPtSumDelRGen%s",strTitJS.Data()),50,0,1,0,250);
1994 fProDelRPtSumBgrPerp2[ii] = new TProfile(Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),50,0,1,0,250);
1996 fProDelRPtSumRecPrim[ii] = new TProfile(Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),50,0,1,0,250);
1997 fProDelRPtSumRecSecNS[ii] = new TProfile(Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),50,0,1,0,250);
1998 fProDelRPtSumRecSecS[ii] = new TProfile(Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),50,0,1,0,250);
1999 fProDelRPtSumRecSecSsc[ii] = new TProfile(Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),50,0,1,0,250);
2003 fCommonHistList->Add(fProNtracksLeadingJet);
2004 fCommonHistList->Add(fProDelR80pcPt);
2005 for(int ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSum[ii]);
2007 if(genJets && genTracks){
2008 fCommonHistList->Add(fProNtracksLeadingJetGen);
2009 fCommonHistList->Add(fProDelR80pcPtGen);
2010 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumGen[ii]);
2014 fCommonHistList->Add(fProNtracksLeadingJetBgrPerp2);
2015 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumBgrPerp2[ii]);
2019 fCommonHistList->Add(fProNtracksLeadingJetRecPrim);
2020 fCommonHistList->Add(fProDelR80pcPtRecPrim);
2021 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecPrim[ii]);
2023 fCommonHistList->Add(fProNtracksLeadingJetRecSecNS);
2024 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecNS[ii]);
2026 fCommonHistList->Add(fProNtracksLeadingJetRecSecS);
2027 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecS[ii]);
2029 fCommonHistList->Add(fProNtracksLeadingJetRecSecSsc);
2030 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecSsc[ii]);
2034 // =========== Switch on Sumw2 for all histos ===========
2035 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
2036 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
2037 if (h1) h1->Sumw2();
2039 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
2040 if(hnSparse) hnSparse->Sumw2();
2044 TH1::AddDirectory(oldStatus);
2046 PostData(1, fCommonHistList);
2049 //_______________________________________________
2050 void AliAnalysisTaskFragmentationFunction::Init()
2053 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
2057 //_____________________________________________________________
2058 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
2061 // Called for each event
2062 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
2065 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
2067 // Trigger selection
2068 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
2069 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
2071 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
2072 fh1EvtSelection->Fill(1.);
2073 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
2074 PostData(1, fCommonHistList);
2078 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
2080 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
2083 fMCEvent = MCEvent();
2085 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
2088 // get AOD event from input/ouput
2089 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2090 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
2091 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
2092 if(fUseAODInputJets) fAODJets = fAOD;
2093 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
2096 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2097 if( handler && handler->InheritsFrom("AliAODHandler") ) {
2098 fAOD = ((AliAODHandler*)handler)->GetAOD();
2100 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
2104 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
2105 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2106 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
2107 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
2108 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
2112 if(fNonStdFile.Length()!=0){
2113 // case we have an AOD extension - fetch the jets from the extended output
2115 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
2116 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
2118 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
2123 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
2127 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
2132 // event selection **************************************************
2133 // *** event class ***
2134 Double_t centPercent = -1;
2137 if(handler->InheritsFrom("AliAODInputHandler")){
2138 // since it is not supported by the helper task define own classes
2139 centPercent = fAOD->GetHeader()->GetCentrality();
2141 if(centPercent>10) cl = 2;
2142 if(centPercent>30) cl = 3;
2143 if(centPercent>50) cl = 4;
2146 cl = AliAnalysisHelperJetTasks::EventClass();
2147 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
2150 if(cl!=fEventClass){
2151 // event not in selected event class, reject event
2152 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
2153 fh1EvtSelection->Fill(2.);
2154 PostData(1, fCommonHistList);
2159 // *** vertex cut ***
2160 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
2161 Int_t nTracksPrim = primVtx->GetNContributors();
2162 fh1VertexNContributors->Fill(nTracksPrim);
2165 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
2167 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
2168 fh1EvtSelection->Fill(3.);
2169 PostData(1, fCommonHistList);
2173 fh1VertexZ->Fill(primVtx->GetZ());
2175 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
2176 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2177 fh1EvtSelection->Fill(4.);
2178 PostData(1, fCommonHistList);
2182 TString primVtxName(primVtx->GetName());
2184 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
2185 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
2186 fh1EvtSelection->Fill(5.);
2187 PostData(1, fCommonHistList);
2191 if(fRejectPileup && AliAnalysisHelperJetTasks::IsPileUp()){
2192 if (fDebug > 1) Printf("%s:%d SPD pileup: event REJECTED...",(char*)__FILE__,__LINE__);
2193 fh1EvtSelection->Fill(6.);
2194 PostData(1, fCommonHistList);
2198 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
2199 fh1EvtSelection->Fill(0.);
2200 fh1EvtCent->Fill(centPercent);
2203 //___ get MC information __________________________________________________________________
2205 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2207 Double_t ptHard = 0.;
2208 Double_t nTrials = 1; // trials for MC trigger weight for real data
2211 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2215 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2216 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2218 if(pythiaGenHeader){
2219 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
2220 nTrials = pythiaGenHeader->Trials();
2221 ptHard = pythiaGenHeader->GetPtHard();
2223 fh1PtHard->Fill(ptHard);
2224 fh1PtHardTrials->Fill(ptHard,nTrials);
2226 } else { // no pythia, hijing?
2228 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
2230 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2231 if(!hijingGenHeader){
2232 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
2234 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
2238 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2242 //___ fetch jets __________________________________________________________________________
2244 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
2246 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
2247 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2248 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2250 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
2251 Int_t nRecJetsCuts = 0;
2252 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
2253 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2254 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2255 fh1nRecJetsCuts->Fill(nRecJetsCuts);
2257 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2259 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
2261 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
2262 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2264 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2265 fh1nGenJets->Fill(nGenJets);
2268 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2269 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
2270 Int_t nRecEffJets = 0;
2271 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
2272 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2273 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2274 fh1nRecEffJets->Fill(nRecEffJets);
2277 Int_t nEmbeddedJets = 0;
2278 TArrayI iEmbeddedMatchIndex;
2279 TArrayF fEmbeddedPtFraction;
2282 if(fBranchEmbeddedJets.Length()){
2283 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
2284 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
2285 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2286 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2287 fh1nEmbeddedJets->Fill(nEmbeddedJets);
2289 Float_t maxDist = 0.3;
2291 iEmbeddedMatchIndex.Set(nEmbeddedJets);
2292 fEmbeddedPtFraction.Set(nEmbeddedJets);
2294 iEmbeddedMatchIndex.Reset(-1);
2295 fEmbeddedPtFraction.Reset(0);
2297 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
2298 fJetsRecCuts, nRecJetsCuts,
2299 iEmbeddedMatchIndex, fEmbeddedPtFraction,
2304 //____ fetch background clusters ___________________________________________________
2306 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2307 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2308 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2310 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
2311 Int_t nRecBckgJets = 0;
2312 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
2313 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2314 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2316 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
2317 Int_t nRecBckgJetsCuts = 0;
2318 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
2319 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2320 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
2321 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
2323 if(0){ // protection OB - not yet implemented
2324 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2325 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
2326 Int_t nGenBckgJets = 0;
2327 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
2328 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2329 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2330 fh1nGenBckgJets->Fill(nGenBckgJets);
2335 //____ fetch particles __________________________________________________________
2338 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
2339 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
2340 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
2342 Int_t nRecPartCuts = 0;
2343 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
2344 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2345 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2346 fh1EvtMult->Fill(nRecPartCuts);
2349 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
2351 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
2352 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2353 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2356 //____ analysis, fill histos ___________________________________________________
2361 for(Int_t it=0; it<nRecPartCuts; ++it){
2362 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
2363 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
2365 for(Int_t it=0; it<nGenPart; ++it){
2366 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
2367 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2373 for(Int_t ij=0; ij<nRecJets; ++ij){
2374 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
2375 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2380 if(fQAMode || fFFMode){
2381 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
2383 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
2384 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2386 if(fQAMode&2 && ij==0) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
2388 Double_t ptFractionEmbedded = 0;
2389 AliAODJet* embeddedJet = 0;
2391 if(fBranchEmbeddedJets.Length()){ // find embedded jet
2393 Int_t indexEmbedded = -1;
2394 for(Int_t i=0; i<nEmbeddedJets; i++){
2395 if(iEmbeddedMatchIndex[i] == ij){
2397 ptFractionEmbedded = fEmbeddedPtFraction[i];
2401 fh1IndexEmbedded->Fill(indexEmbedded);
2402 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
2404 if(indexEmbedded>-1){
2406 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
2407 if(!embeddedJet) continue;
2409 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
2410 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
2412 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
2413 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
2414 fh1DeltaREmbedded->Fill(deltaR);
2418 // get tracks in jet
2419 TList* jettracklist = new TList();
2420 Double_t sumPt = 0.;
2421 Bool_t isBadJet = kFALSE;
2423 if(GetFFRadius()<=0){
2424 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2426 if(fUseEmbeddedJetAxis){
2427 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet,
2428 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2430 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet,
2431 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2434 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
2436 if(isBadJet) continue;
2438 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
2440 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2442 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
2443 if(!trackVP)continue;
2445 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
2446 if(!aodtrack) continue;
2448 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
2450 Float_t jetPt = jet->Pt();
2451 if(fUseEmbeddedJetPt){
2452 if(embeddedJet) jetPt = embeddedJet->Pt();
2455 Float_t trackPt = trackV->Pt();
2457 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2459 if(fFFMode && (ij==0)) fFFHistosRecCuts->FillFF(trackPt, jetPt, incrementJetPt);
2460 if(fFFMode) fFFHistosRecCutsInc->FillFF(trackPt, jetPt, incrementJetPt);
2462 if(it==0){ // leading track
2463 if(fFFMode) fFFHistosRecLeadingTrack->FillFF( trackPt, jetPt, kTRUE);
2470 if(fBckgMode && (ij==0)){
2471 if(fBckgType[0]!=kBckgNone)
2472 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet,
2473 fFFBckgHisto0RecCuts,fQABckgHisto0RecCuts, fh1BckgMult0);
2474 if(fBckgType[1]!=kBckgNone)
2475 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet,
2476 fFFBckgHisto1RecCuts,fQABckgHisto1RecCuts, fh1BckgMult1);
2477 if(fBckgType[2]!=kBckgNone)
2478 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet,
2479 fFFBckgHisto2RecCuts,fQABckgHisto2RecCuts, fh1BckgMult2);
2480 if(fBckgType[3]!=kBckgNone)
2481 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet,
2482 fFFBckgHisto3RecCuts,fQABckgHisto3RecCuts, fh1BckgMult3);
2483 if(fBckgType[4]!=kBckgNone)
2484 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet,
2485 fFFBckgHisto4RecCuts,fQABckgHisto4RecCuts, fh1BckgMult4);
2486 } // end if(fBckgMode)
2489 if(fJSMode && (ij==0)) FillJetShape(jet, jettracklist, fProNtracksLeadingJet, fProDelRPtSum, fProDelR80pcPt);
2491 delete jettracklist;
2493 } // end: cut embedded ratio
2494 } // end: rec. jets after cuts
2497 for(Int_t ij=0; ij<nGenJets; ++ij){
2499 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
2502 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2504 if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2506 TList* jettracklist = new TList();
2507 Double_t sumPt = 0.;
2508 Bool_t isBadJet = kFALSE;
2510 if(GetFFRadius()<=0){
2511 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2513 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2516 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
2518 if(isBadJet) continue;
2520 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2522 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
2523 if(!trackVP)continue;
2524 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
2526 Float_t jetPt = jet->Pt();
2527 Float_t trackPt = trackV->Pt();
2529 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2531 if(fFFMode && (ij==0)) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
2532 if(fFFMode) fFFHistosGenInc->FillFF( trackPt, jetPt, incrementJetPt );
2534 if(it==0){ // leading track
2535 if(fFFMode) fFFHistosGenLeadingTrack->FillFF( trackPt, jetPt, kTRUE );
2541 if(fBckgMode && (ij==0)){
2542 if(fBckgType[0]!=kBckgNone)
2543 FillBckgHistos(fBckgType[0], fTracksGen, fJetsGen, jet,
2544 fFFBckgHisto0Gen, fQABckgHisto0Gen);
2545 if(fBckgType[1]!=kBckgNone)
2546 FillBckgHistos(fBckgType[1], fTracksGen, fJetsGen, jet,
2547 fFFBckgHisto1Gen, fQABckgHisto1Gen);
2548 if(fBckgType[2]!=kBckgNone)
2549 FillBckgHistos(fBckgType[2], fTracksGen, fJetsGen, jet,
2550 fFFBckgHisto2Gen, fQABckgHisto2Gen);
2551 if(fBckgType[3]!=kBckgNone)
2552 FillBckgHistos(fBckgType[3], fTracksGen, fJetsGen, jet,
2553 fFFBckgHisto3Gen, fQABckgHisto3Gen);
2554 if(fBckgType[4]!=kBckgNone)
2555 FillBckgHistos(fBckgType[4], fTracksGen, fJetsGen, jet,
2556 fFFBckgHisto4Gen, fQABckgHisto4Gen);
2557 } // end if(fBckgMode)
2559 if(fJSMode && (ij==0)) FillJetShape(jet, jettracklist, fProNtracksLeadingJetGen, fProDelRPtSumGen, fProDelR80pcPtGen);
2561 delete jettracklist;
2563 } // end: QA, FF and intra-jet
2566 // ____ efficiency _______________________________
2568 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
2570 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
2574 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
2577 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
2578 TArrayI indexAODTrSecNS;
2580 TArrayI indexMCTrSecNS;
2582 TArrayI indexAODTrSecS;
2584 TArrayI indexMCTrSecS;
2586 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
2587 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
2589 Int_t nTracksAODMCChargedSecNS = GetListOfTracks(fTracksAODMCChargedSecNS, kTrackAODMCChargedSecNS);
2590 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecNS);
2592 Int_t nTracksAODMCChargedSecS = GetListOfTracks(fTracksAODMCChargedSecS, kTrackAODMCChargedSecS);
2593 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks S: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecS);
2595 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
2596 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
2598 // associate gen and rec tracks, store indices in TArrays
2599 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
2600 AssociateGenRec(fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,indexMCTrSecNS,isGenSecNS,fh2PtRecVsGenSec);
2601 AssociateGenRec(fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,indexMCTrSecS,isGenSecS,fh2PtRecVsGenSec);
2604 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
2607 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecNS,fTracksAODMCChargedSecNS,indexAODTrSecNS,isGenSecNS);
2608 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecS,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS);
2609 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecSsc,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS,kTRUE);
2613 Double_t sumPtGenLeadingJetRecEff = 0;
2614 Double_t sumPtGenLeadingJetSec = 0;
2615 Double_t sumPtRecLeadingJetRecEff = 0;
2617 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
2619 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
2621 Bool_t isBadJetGenPrim = kFALSE;
2622 Bool_t isBadJetGenSec = kFALSE;
2623 Bool_t isBadJetRec = kFALSE;
2626 if(ij==0){ // leading jet
2628 // for efficiency: gen tracks from pointing with gen/rec jet
2629 TList* jettracklistGenPrim = new TList();
2631 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
2632 // note : FF recEff gen histos will be somewhat useless in this approach
2634 if(GetFFRadius() >0)
2635 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
2637 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
2639 TList* jettracklistGenSecNS = new TList();
2640 if(GetFFRadius() >0)
2641 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2643 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2645 TList* jettracklistGenSecS = new TList();
2646 if(GetFFRadius() >0)
2647 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2649 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2652 // bin efficiency in jet pt bins using rec tracks
2653 TList* jettracklistRec = new TList();
2654 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2655 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2658 Double_t jetEta = jet->Eta();
2659 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
2661 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
2662 if(GetFFMinNTracks()>0 && jettracklistGenSecNS->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
2663 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
2665 if(isBadJetRec) continue;
2667 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
2671 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
2672 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
2673 0,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
2675 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
2676 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
2677 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
2680 // secondaries: use jet pt from primaries
2681 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
2682 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts, indexAODTrSecNS,isGenSecNS,
2683 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
2685 else FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
2686 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS,
2687 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
2689 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecS,jet,
2690 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
2691 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
2693 else FillJetTrackHistosRec(fFFHistosSecRecS,jet,
2694 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
2695 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
2697 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
2698 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
2699 0,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
2701 else FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
2702 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
2703 jettracklistRec,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
2706 delete jettracklistGenPrim;
2707 delete jettracklistGenSecNS;
2708 delete jettracklistGenSecS;
2709 delete jettracklistRec;
2712 if(fBckgMode && fFFMode){
2714 TList* perpjettracklistGen = new TList();
2715 TList* perpjettracklistGen1 = new TList();
2716 TList* perpjettracklistGen2 = new TList();
2718 Double_t sumPtGenPerp = 0.;
2719 Double_t sumPtGenPerp1 = 0.;
2720 Double_t sumPtGenPerp2 = 0.;
2721 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerp1);
2722 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen2, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerp2);
2724 perpjettracklistGen->AddAll(perpjettracklistGen1);
2725 perpjettracklistGen->AddAll(perpjettracklistGen2);
2726 sumPtGenPerp = 0.5*(sumPtGenPerp1+sumPtGenPerp2);
2728 TList* perpjettracklistGenSecNS = new TList();
2729 TList* perpjettracklistGenSecNS1 = new TList();
2730 TList* perpjettracklistGenSecNS2 = new TList();
2732 Double_t sumPtGenPerpNS;
2733 Double_t sumPtGenPerpNS1;
2734 Double_t sumPtGenPerpNS2;
2735 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpNS1);
2736 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS2, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpNS2);
2738 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS1);
2739 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS2);
2740 sumPtGenPerpNS = 0.5*(sumPtGenPerpNS1+sumPtGenPerpNS2);
2743 TList* perpjettracklistGenSecS = new TList();
2744 TList* perpjettracklistGenSecS1 = new TList();
2745 TList* perpjettracklistGenSecS2 = new TList();
2747 Double_t sumPtGenPerpS;
2748 Double_t sumPtGenPerpS1;
2749 Double_t sumPtGenPerpS2;
2750 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpS1);
2751 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS2, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpS2);
2753 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS1);
2754 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS2);
2755 sumPtGenPerpS = 0.5*(sumPtGenPerpS1+sumPtGenPerpS2);
2758 if(perpjettracklistGen->GetSize() != perpjettracklistGen1->GetSize() + perpjettracklistGen2->GetSize()){
2759 cout<<" ERROR: perpjettracklistGen size "<<perpjettracklistGen->GetSize()<<" perp1 "<<perpjettracklistGen1->GetSize()
2760 <<" perp2 "<<perpjettracklistGen2->GetSize()<<endl;
2764 if(perpjettracklistGenSecNS->GetSize() != perpjettracklistGenSecNS1->GetSize() + perpjettracklistGenSecNS2->GetSize()){
2765 cout<<" ERROR: perpjettracklistGenSecNS size "<<perpjettracklistGenSecNS->GetSize()<<" perp1 "<<perpjettracklistGenSecNS1->GetSize()
2766 <<" perp2 "<<perpjettracklistGenSecNS2->GetSize()<<endl;
2770 if(perpjettracklistGenSecS->GetSize() != perpjettracklistGenSecS1->GetSize() + perpjettracklistGenSecS2->GetSize()){
2771 cout<<" ERROR: perpjettracklistGenSecS size "<<perpjettracklistGenSecS->GetSize()<<" perp1 "<<perpjettracklistGenSecS1->GetSize()
2772 <<" perp2 "<<perpjettracklistGenSecS2->GetSize()<<endl;
2777 FillJetTrackHistosRec(fFFBckgHisto0RecEffRec,jet,
2778 perpjettracklistGen,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
2780 FillJetTrackHistosRec(fFFBckgHisto0SecRecNS,jet,
2781 perpjettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS);
2783 FillJetTrackHistosRec(fFFBckgHisto0SecRecS,jet,
2784 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS);
2786 FillJetTrackHistosRec(fFFBckgHisto0SecRecSsc,jet,
2787 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,0,kTRUE);
2790 delete perpjettracklistGen;
2791 delete perpjettracklistGen1;
2792 delete perpjettracklistGen2;
2794 delete perpjettracklistGenSecNS;
2795 delete perpjettracklistGenSecNS1;
2796 delete perpjettracklistGenSecNS2;
2798 delete perpjettracklistGenSecS;
2799 delete perpjettracklistGenSecS1;
2800 delete perpjettracklistGenSecS2;
2807 //___________________
2809 fTracksRecCuts->Clear();
2810 fTracksGen->Clear();
2811 fTracksAODMCCharged->Clear();
2812 fTracksAODMCChargedSecNS->Clear();
2813 fTracksAODMCChargedSecS->Clear();
2814 fTracksRecQualityCuts->Clear();
2817 fJetsRecCuts->Clear();
2819 fJetsRecEff->Clear();
2820 fJetsEmbedded->Clear();
2824 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2825 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2826 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2828 fBckgJetsRec->Clear();
2829 fBckgJetsRecCuts->Clear();
2830 fBckgJetsGen->Clear();
2835 PostData(1, fCommonHistList);
2838 //______________________________________________________________
2839 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
2843 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
2846 //_________________________________________________________________________________
2847 Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
2849 // fill list of tracks selected according to type
2851 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
2854 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2858 if(!fAOD) return -1;
2860 if(!fAOD->GetTracks()) return 0;
2862 if(type==kTrackUndef) return 0;
2866 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
2868 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
2869 if(!aodExtraTracks)return iCount;
2870 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
2871 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
2872 if (!track) continue;
2874 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
2877 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
2879 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2881 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2882 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2883 if(tr->Pt() < fTrackPtCut) continue;
2891 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
2893 // all rec. tracks, esd filter mask, eta range
2895 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
2896 AliAODTrack *tr = fAOD->GetTrack(it);
2898 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
2900 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2901 if(type == kTrackAODCuts){
2902 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2903 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2904 if(tr->Pt() < fTrackPtCut) continue;
2911 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2912 // kine particles, all or rather charged
2913 if(!fMCEvent) return iCount;
2915 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2916 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2918 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2919 if(part->Charge()==0) continue;
2921 if(type == kTrackKineChargedAcceptance &&
2922 ( part->Eta() < fTrackEtaMin
2923 || part->Eta() > fTrackEtaMax
2924 || part->Phi() < fTrackPhiMin
2925 || part->Phi() > fTrackPhiMax
2926 || part->Pt() < fTrackPtCut)) continue;
2933 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS) {
2934 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2935 if(!fAOD) return -1;
2937 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2938 if(!tca)return iCount;
2940 for(int it=0; it<tca->GetEntriesFast(); ++it){
2941 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2943 if(type != kTrackAODMCChargedSecNS && type != kTrackAODMCChargedSecS && !part->IsPhysicalPrimary())continue;
2944 if((type == kTrackAODMCChargedSecNS || type == kTrackAODMCChargedSecS) && part->IsPhysicalPrimary())continue;
2946 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
2947 if(part->Charge()==0) continue;
2949 if(type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
2950 Bool_t isFromStrange = kFALSE;
2951 Int_t iMother = part->GetMother();
2953 if(iMother < 0) continue; // throw out PYTHIA stack partons + incoming protons
2955 AliAODMCParticle *partM = dynamic_cast<AliAODMCParticle*>(tca->At(iMother));
2956 if(!partM) continue;
2958 Int_t codeM = TMath::Abs(partM->GetPdgCode());
2959 Int_t mfl = Int_t (codeM/ TMath::Power(10, Int_t(TMath::Log10(codeM))));
2960 if (mfl == 3 && codeM != 3) isFromStrange = kTRUE;
2962 if(codeM == 130) isFromStrange = kTRUE; // K0 long
2963 if(part->IsSecondaryFromMaterial()) isFromStrange = kFALSE; // strange resonances from hadronic showers ?
2966 // cout<<" mfl "<<mfl<<" codeM "<<partM->GetPdgCode()<<" code this track "<<part->GetPdgCode()<<endl;
2967 // cout<<" index this track "<<it<<" index daughter 0 "<<partM->GetDaughter(0)<<" 1 "<<partM->GetDaughter(1)<<endl;
2970 if(type==kTrackAODMCChargedSecNS && isFromStrange) continue;
2971 if(type==kTrackAODMCChargedSecS && !isFromStrange) continue;
2975 if(type==kTrackAODMCChargedAcceptance &&
2976 ( part->Eta() > fTrackEtaMax
2977 || part->Eta() < fTrackEtaMin
2978 || part->Phi() > fTrackPhiMax
2979 || part->Phi() < fTrackPhiMin
2980 || part->Pt() < fTrackPtCut)) continue;
2992 // _______________________________________________________________________________
2993 Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
2995 // fill list of jets selected according to type
2998 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
3002 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
3004 if(fBranchRecJets.Length()==0){
3005 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
3006 if(fDebug>1)fAOD->Print();
3010 TClonesArray *aodRecJets = 0;
3011 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
3012 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
3013 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
3016 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
3017 if(fDebug>1)fAOD->Print();
3021 // Reorder jet pt and fill new temporary AliAODJet objects
3024 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
3026 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
3029 if( tmp->Pt() < fJetPtCut ) continue;
3030 if( type == kJetsRecAcceptance &&
3031 ( tmp->Eta() < fJetEtaMin
3032 || tmp->Eta() > fJetEtaMax
3033 || tmp->Phi() < fJetPhiMin
3034 || tmp->Phi() > fJetPhiMax )) continue;
3045 else if(type == kJetsKine || type == kJetsKineAcceptance){
3051 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
3055 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
3056 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
3057 AliGenHijingEventHeader* hijingGenHeader = 0x0;
3059 if(!pythiaGenHeader){
3060 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
3062 if(!hijingGenHeader){
3063 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
3066 TLorentzVector mom[4];
3068 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
3070 for(Int_t i=0; i<2; ++i){
3071 if(!mom[i].Pt()) continue;
3072 jet[i] = new AliAODJet(mom[i]);
3074 if( type == kJetsKineAcceptance &&
3075 ( jet[i]->Eta() < fJetEtaMin
3076 || jet[i]->Eta() > fJetEtaMax
3077 || jet[i]->Phi() < fJetPhiMin
3078 || jet[i]->Phi() > fJetPhiMax )) continue;
3088 // fetch the pythia generated jets
3089 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
3092 AliAODJet *jet = new AliAODJet();
3093 pythiaGenHeader->TriggerJet(ip, p);
3094 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
3096 if( type == kJetsKineAcceptance &&
3097 ( jet->Eta() < fJetEtaMin
3098 || jet->Eta() > fJetEtaMax
3099 || jet->Phi() < fJetPhiMin
3100 || jet->Phi() > fJetPhiMax )) continue;
3108 else if(type == kJetsGen || type == kJetsGenAcceptance ){
3110 if(fBranchGenJets.Length()==0){
3111 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
3115 TClonesArray *aodGenJets = 0;
3116 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
3117 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
3118 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
3122 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
3124 if(fDebug>1)fAOD->Print();
3130 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
3132 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
3135 if( tmp->Pt() < fJetPtCut ) continue;
3136 if( type == kJetsGenAcceptance &&
3137 ( tmp->Eta() < fJetEtaMin
3138 || tmp->Eta() > fJetEtaMax
3139 || tmp->Phi() < fJetPhiMin
3140 || tmp->Phi() > fJetPhiMax )) continue;
3148 else if(type == kJetsEmbedded){ // embedded jets
3150 if(fBranchEmbeddedJets.Length()==0){
3151 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
3152 if(fDebug>1)fAOD->Print();
3156 TClonesArray *aodEmbeddedJets = 0;
3157 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
3158 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
3159 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
3161 if(!aodEmbeddedJets){
3162 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
3163 if(fDebug>1)fAOD->Print();
3167 // Reorder jet pt and fill new temporary AliAODJet objects
3168 Int_t nEmbeddedJets = 0;
3170 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
3172 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
3175 if( tmp->Pt() < fJetPtCut ) continue;
3176 if( tmp->Eta() < fJetEtaMin
3177 || tmp->Eta() > fJetEtaMax
3178 || tmp->Phi() < fJetPhiMin
3179 || tmp->Phi() > fJetPhiMax ) continue;
3187 return nEmbeddedJets;
3190 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
3195 // ___________________________________________________________________________________
3196 Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
3198 // fill list of bgr clusters selected according to type
3200 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
3202 if(fBranchRecBckgClusters.Length()==0){
3203 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
3204 if(fDebug>1)fAOD->Print();
3208 TClonesArray *aodRecJets = 0;
3209 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
3210 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
3211 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
3214 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
3215 if(fDebug>1)fAOD->Print();
3219 // Reorder jet pt and fill new temporary AliAODJet objects
3222 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
3224 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
3227 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
3228 if( type == kJetsRecAcceptance &&
3229 ( tmp->Eta() < fJetEtaMin
3230 || tmp->Eta() > fJetEtaMax
3231 || tmp->Phi() < fJetPhiMin
3232 || tmp->Phi() > fJetPhiMax )) continue;
3246 // MC clusters still Under construction
3252 // _________________________________________________________________________________________________________
3253 void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
3255 // Set properties of THnSparse
3257 for(Int_t i=0; i<dim; i++){
3258 h->GetAxis(i)->SetTitle(labels[i]);
3259 h->GetAxis(i)->SetTitleColor(1);
3263 // __________________________________________________________________________________________
3264 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
3266 //Set properties of histos (x and y title)
3270 h->GetXaxis()->SetTitleColor(1);
3271 h->GetYaxis()->SetTitleColor(1);
3274 // _________________________________________________________________________________________________________
3275 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
3277 //Set properties of histos (x,y and z title)
3282 h->GetXaxis()->SetTitleColor(1);
3283 h->GetYaxis()->SetTitleColor(1);
3284 h->GetZaxis()->SetTitleColor(1);
3287 // ________________________________________________________________________________________________________________________________________________________
3288 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
3289 const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
3291 // fill list of tracks in cone around jet axis
3294 Bool_t isBadMaxPt = kFALSE;
3295 Bool_t isBadMinPt = kTRUE;
3298 jet->PxPyPz(jetMom);
3299 TVector3 jet3mom(jetMom);
3301 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3303 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3305 Double_t trackMom[3];
3306 track->PxPyPz(trackMom);
3307 TVector3 track3mom(trackMom);
3309 Double_t dR = jet3mom.DeltaR(track3mom);
3313 outputlist->Add(track);
3315 sumPt += track->Pt();
3317 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
3318 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
3323 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
3324 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
3329 // _________________________________________________________________________________________________________________________________________________________________
3330 void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
3332 // list of jet tracks from trackrefs
3334 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
3336 Bool_t isBadMaxPt = kFALSE;
3337 Bool_t isBadMinPt = kTRUE;
3339 for(Int_t itrack=0; itrack<nTracks; itrack++) {
3341 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
3343 AliError("expected ref track not found ");
3347 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
3348 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
3349 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
3355 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
3356 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
3361 // _ ________________________________________________________________________________________________________________________________
3362 void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
3363 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
3365 // associate generated and reconstructed tracks, fill TArrays of list indices
3367 Int_t nTracksRec = tracksRec->GetSize();
3368 Int_t nTracksGen = tracksAODMCCharged->GetSize();
3369 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3372 if(!nTracksGen) return;
3376 indexAODTr.Set(nTracksGen);
3377 indexMCTr.Set(nTracksRec);
3378 isRefGen.Set(nTracksGen);
3380 indexAODTr.Reset(-1);
3381 indexMCTr.Reset(-1);
3384 // loop over reconstructed tracks, get generated track
3386 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
3388 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
3389 if(!rectrack)continue;
3390 Int_t label = TMath::Abs(rectrack->GetLabel());
3392 // find MC track in our list
3393 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
3395 Int_t listIndex = -1;
3396 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
3400 indexAODTr[listIndex] = iRec;
3401 indexMCTr[iRec] = listIndex;
3406 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
3408 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
3410 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
3411 if(!gentrack)continue;
3412 Int_t pdg = gentrack->GetPdgCode();
3414 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
3415 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
3416 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
3418 isRefGen[iGen] = kTRUE;
3420 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3423 Float_t genPt = gentrack->Pt();
3424 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
3426 Float_t recPt = vt->Pt();
3427 fh2PtRecVsGen->Fill(genPt,recPt);
3434 // _____________________________________________________________________________________________________________________________________________
3435 void AliAnalysisTaskFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
3436 const TArrayI& indexAODTr, const TArrayS& isRefGen, Bool_t scaleStrangeness){
3438 // fill QA for single track reconstruction efficiency
3440 Int_t nTracksGen = tracksGen->GetSize();
3442 if(!nTracksGen) return;
3444 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
3446 if(isRefGen[iGen] != 1) continue; // select primaries
3448 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
3449 if(!gentrack) continue;
3450 Double_t ptGen = gentrack->Pt();
3451 Double_t etaGen = gentrack->Eta();
3452 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
3454 // apply same acc & pt cuts as for FF
3456 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
3457 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
3458 if(ptGen < fTrackPtCut) continue;
3460 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
3462 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3464 if(iRec>=0 && trackQARec){
3465 if(scaleStrangeness){
3466 //Double_t weight = GetMCStrangenessFactor(ptGen);
3467 Double_t weight = GetMCStrangenessFactorCMS(gentrack);
3468 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
3470 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
3475 // ______________________________________________________________________________________________________________________________________________________
3477 void AliAnalysisTaskFragmentationFunction::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
3478 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
3479 const TArrayS& isRefGen, TList* jetTrackListTR, Bool_t scaleStrangeness,
3480 Bool_t fillJS, TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt)
3482 // fill objects for jet track reconstruction efficiency or secondaries contamination
3483 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
3484 // jetTrackListTR pointer: track refs if not NULL
3487 // ensure proper normalization, even for secondaries
3488 Double_t jetPtRec = jet->Pt();
3489 ffhistRec->FillFF(-1, jetPtRec, kTRUE);
3491 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
3492 if(nTracksJet == 0) return;
3494 TList* listRecTracks = new TList();
3495 listRecTracks->Clear();
3497 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
3499 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
3500 if(!gentrack)continue;
3501 // find jet track in gen tracks list
3502 Int_t iGen = tracksGen->IndexOf(gentrack);
3505 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
3509 if(isRefGen[iGen] != 1) continue; // select primaries
3511 Double_t ptGen = gentrack->Pt();
3512 Double_t etaGen = gentrack->Eta();
3513 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
3515 // gen level acc & pt cuts - skip in case of track refs
3516 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
3517 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
3518 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
3521 Double_t ptRec = -1;
3523 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3524 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
3526 Bool_t isJetTrack = kFALSE;
3527 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
3531 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
3532 if(!rectrack) continue;
3534 ptRec = rectrack->Pt();
3537 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
3538 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
3543 Double_t trackPt = ptRec;
3544 Bool_t incrementJetPt = kFALSE;
3546 if(scaleStrangeness){
3547 //Double_t weight = GetMCStrangenessFactor(ptGen);
3548 Double_t weight = GetMCStrangenessFactorCMS(gentrack);
3550 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt, 0, kTRUE, weight );
3553 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt );
3556 listRecTracks->Add(rectrack);
3563 if(fillJS) FillJetShape(jet,listRecTracks,hProNtracksLeadingJet, hProDelRPtSum, hProDelR80pcPt,0,0,scaleStrangeness);
3565 delete listRecTracks;
3569 // _____________________________________________________________________________________________________________________________________________________________________
3570 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
3572 // List of tracks in cone perpendicular to the jet azimuthal direction
3575 jet->PxPyPz(jetMom);
3577 TVector3 jet3mom(jetMom);
3578 // Rotate phi and keep eta unchanged
3579 Double_t etaTilted = jet3mom.Eta();
3580 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
3581 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
3583 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3586 if( fUseExtraTracksBgr != 1){
3587 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
3588 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3589 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3593 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3595 Double_t trackMom[3];
3596 track->PxPyPz(trackMom);
3597 TVector3 track3mom(trackMom);
3599 Double_t deta = track3mom.Eta() - etaTilted;
3600 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
3601 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
3602 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
3606 outputlist->Add(track);
3607 sumPt += track->Pt();
3613 // ________________________________________________________________________________________________________________________________________________________
3614 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
3616 // List of tracks in cone perpendicular to the jet azimuthal direction
3619 jet->PxPyPz(jetMom);
3621 TVector3 jet3mom(jetMom);
3622 // Rotate phi and keep eta unchanged
3623 Double_t etaTilted = jet3mom.Eta();
3624 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
3625 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
3627 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
3631 if( fUseExtraTracksBgr != 1){
3632 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
3633 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3634 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3638 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3640 Float_t trackEta = track->Eta();
3641 Float_t trackPhi = track->Phi();
3643 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
3645 if((trackPhi<=phiTilted+radius) &&
3646 (trackPhi>=phiTilted-radius) &&
3647 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
3649 outputlist->Add(track);
3650 sumPt += track->Pt();
3653 else if( phiTilted-radius < 0 )
3655 if((( trackPhi < phiTilted+radius ) ||
3656 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
3657 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
3659 outputlist->Add(track);
3660 sumPt += track->Pt();
3663 else if( phiTilted+radius > 2*TMath::Pi() )
3665 if((( trackPhi > phiTilted-radius ) ||
3666 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
3667 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
3669 outputlist->Add(track);
3670 sumPt += track->Pt();
3675 // Jet area - Temporarily added should be modified with the proper jet area value
3676 Float_t areaJet = CalcJetArea(etaTilted,radius);
3677 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
3679 normFactor = (Float_t) 1. / (areaJet / areaTilted);
3684 // ________________________________________________________________________________________________________________________________________________________
3685 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt)
3687 // List of tracks outside cone around N jet axis
3688 // Particles taken randomly
3691 // Int_t nj = jetlist->GetSize();
3692 Float_t rc = TMath::Abs(GetFFRadius());
3693 Float_t rcl = GetFFBckgRadius();
3695 // Estimate jet and background areas
3696 Float_t* areaJet = new Float_t[nCases];
3697 memset(areaJet, 0, sizeof(Float_t) * nCases);
3698 Float_t* areaJetLarge = new Float_t[nCases];
3699 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
3700 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
3701 Float_t areaOut = areaFull;
3703 //estimate jets and background areas
3706 TList* templist = new TList();
3707 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
3709 for(Int_t ij=0; ij<nCases; ++ij)
3711 // Get jet information
3712 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
3715 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
3716 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
3717 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
3720 areaJet[ij] = CalcJetArea(etaJet,rc);
3722 // Area jet larger angle
3723 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
3726 areaOut = areaOut - areaJetLarge[ij];
3730 // List of all tracks outside jet areas
3731 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3734 if( fUseExtraTracksBgr != 1){
3735 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
3736 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3737 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3741 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3744 Double_t trackMom[3];
3745 track->PxPyPz(trackMom);
3746 TVector3 track3mom(trackMom);
3748 Double_t *dR = new Double_t[nCases];
3749 for(Int_t ij=0; ij<nCases; ij++)
3750 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
3752 if((nCases==1 && (dR[0]>rcl)) ||
3753 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
3754 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
3756 templist->Add(track);
3762 // Take tracks randomly
3763 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
3764 TArrayI* ar = new TArrayI(nOut);
3766 for(Int_t init=0; init<nOut; init++)
3769 Int_t *randIndex = new Int_t[nScaled];
3770 for(Int_t init2=0; init2<nScaled; init2++)
3771 randIndex[init2] = -1;
3773 // Select nScaled different random numbers in nOut
3774 for(Int_t i=0; i<nScaled; i++)
3776 Int_t* tmpArr = new Int_t[nOut-i];
3777 Int_t temp = fRandom->Integer(nOut-i);
3778 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
3780 if(ind<temp) tmpArr[ind] = (*ar)[ind];
3781 else tmpArr[ind] = (*ar)[ind+1];
3783 randIndex[i] = (*ar)[temp];
3785 ar->Set(nOut-i-1,tmpArr);
3791 for(Int_t ipart=0; ipart<nScaled; ipart++)
3793 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
3794 outputlist->Add(track);
3795 sumPt += track->Pt();
3802 delete [] areaJetLarge;
3805 delete [] randIndex;
3809 // ________________________________________________________________________________________________________________________________________________________
3810 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt, Double_t &normFactor)
3812 // List of tracks outside cone around N jet axis
3813 // All particles taken + final scaling factor
3816 Float_t rc = TMath::Abs(GetFFRadius());
3817 Float_t rcl = GetFFBckgRadius();
3819 // Estimate jet and background areas
3820 Float_t* areaJet = new Float_t[nCases];
3821 memset(areaJet, 0, sizeof(Float_t) * nCases);
3822 Float_t* areaJetLarge = new Float_t[nCases];
3823 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
3824 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
3825 Float_t areaOut = areaFull;
3827 //estimate jets and background areas
3830 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
3832 for(Int_t ij=0; ij<nCases; ++ij)
3834 // Get jet information
3835 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
3838 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
3839 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
3840 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
3843 areaJet[ij] = CalcJetArea(etaJet,rc);
3845 // Area jet larger angle
3846 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
3848 // Outside jets area
3849 areaOut = areaOut - areaJetLarge[ij];
3853 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3856 if( fUseExtraTracksBgr != 1){
3857 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
3858 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3859 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3863 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3865 Double_t trackMom[3];
3866 track->PxPyPz(trackMom);
3867 TVector3 track3mom(trackMom);
3869 Double_t *dR = new Double_t[nCases];
3870 for(Int_t ij=0; ij<nCases; ij++)
3871 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
3874 (nCases==1 && (dR[0]>rcl)) ||
3875 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
3876 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
3878 outputlist->Add(track);
3879 sumPt += track->Pt();
3885 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
3886 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
3891 delete [] areaJetLarge;
3896 // ______________________________________________________________________________________________________________________________________________________
3897 Float_t AliAnalysisTaskFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
3899 // calculate area of jet with eta etaJet and radius rc
3901 Float_t detamax = etaJet + rc;
3902 Float_t detamin = etaJet - rc;
3903 Float_t accmax = 0.0; Float_t accmin = 0.0;
3904 if(detamax > fTrackEtaMax){ // sector outside etamax
3905 Float_t h = fTrackEtaMax - etaJet;
3906 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
3908 if(detamin < fTrackEtaMin){ // sector outside etamin
3909 Float_t h = fTrackEtaMax + etaJet;
3910 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
3912 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
3918 // ___________________________________________________________________________________________________________________________
3919 void AliAnalysisTaskFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
3921 // fill tracks from bckgCluster branch in list,
3922 // for all clusters outside jet cone
3923 // sum up total area of clusters
3925 Double_t rc = GetFFRadius();
3926 Double_t rcl = GetFFBckgRadius();
3928 Double_t areaTotal = 0;
3929 Double_t sumPtTotal = 0;
3931 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
3933 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
3935 Double_t dR = jet->DeltaR(bgrCluster);
3937 if(dR<rcl) continue;
3939 Double_t clusterPt = bgrCluster->Pt();
3940 Double_t area = bgrCluster->EffectiveAreaCharged();
3942 sumPtTotal += clusterPt;
3944 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
3946 for(Int_t it = 0; it<nTracksJet; it++){
3948 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
3949 if( fUseExtraTracksBgr != 1){
3950 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
3951 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3952 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3956 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
3957 if(!track) continue;
3959 Float_t trackPt = track->Pt();
3960 Float_t trackEta = track->Eta();
3961 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
3963 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
3964 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
3965 if(trackPt < fTrackPtCut) continue;
3967 outputlist->Add(track);
3971 Double_t areaJet = TMath::Pi()*rc*rc;
3972 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
3977 // _______________________________________________________________________________________________________________________
3978 void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
3980 // fill tracks from bckgCluster branch,
3981 // using cluster with median density (odd number of clusters)
3982 // or picking randomly one of the two closest to median (even number)
3986 Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
3988 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
3990 Double_t* bgrDensity = new Double_t[nBckgClusters];
3991 Int_t* indices = new Int_t[nBckgClusters];
3993 for(Int_t ij=0; ij<nBckgClusters; ++ij){
3995 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
3996 Double_t clusterPt = bgrCluster->Pt();
3997 Double_t area = bgrCluster->EffectiveAreaCharged();
3999 Double_t density = 0;
4000 if(area>0) density = clusterPt/area;
4002 bgrDensity[ij] = density;
4006 TMath::Sort(nBckgClusters, bgrDensity, indices);
4008 // get median cluster
4010 AliAODJet* medianCluster = 0;
4011 Double_t medianDensity = 0;
4013 if(TMath::Odd(nBckgClusters)){
4015 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
4016 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
4018 Double_t clusterPt = medianCluster->Pt();
4019 Double_t area = medianCluster->EffectiveAreaCharged();
4021 if(area>0) medianDensity = clusterPt/area;
4025 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
4026 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
4028 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
4029 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
4031 Double_t density1 = 0;
4032 Double_t clusterPt1 = medianCluster1->Pt();
4033 Double_t area1 = medianCluster1->EffectiveAreaCharged();
4034 if(area1>0) density1 = clusterPt1/area1;
4036 Double_t density2 = 0;
4037 Double_t clusterPt2 = medianCluster2->Pt();
4038 Double_t area2 = medianCluster2->EffectiveAreaCharged();
4039 if(area2>0) density2 = clusterPt2/area2;
4041 medianDensity = 0.5*(density1+density2);
4043 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
4046 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
4048 for(Int_t it = 0; it<nTracksJet; it++){
4050 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
4051 if( fUseExtraTracksBgr != 1){
4052 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
4053 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4054 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
4058 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
4059 if(!track) continue;
4061 Float_t trackPt = track->Pt();
4062 Float_t trackEta = track->Eta();
4063 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
4065 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
4066 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
4067 if(trackPt < fTrackPtCut) continue;
4069 outputlist->Add(track);
4072 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
4073 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
4075 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
4079 delete[] bgrDensity;
4083 // ______________________________________________________________________________________________________________________________________________________
4084 void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet,
4085 AliFragFuncHistos* ffbckghistocuts, AliFragFuncQATrackHistos* qabckghistocuts, TH1F* fh1Mult){
4087 // List of tracks outside jets for background study
4088 TList* tracklistout2jets = new TList();
4089 TList* tracklistout3jets = new TList();
4090 TList* tracklistout2jetsStat = new TList();
4091 TList* tracklistout3jetsStat = new TList();
4092 Double_t sumPtOut2Jets = 0.;
4093 Double_t sumPtOut3Jets = 0.;
4094 Double_t sumPtOut2JetsStat = 0.;
4095 Double_t sumPtOut3JetsStat = 0.;
4096 Double_t normFactor2Jets = 0.;
4097 Double_t normFactor3Jets = 0.;
4099 Int_t nRecJetsCuts = inputjetlist->GetEntries();
4101 if(nRecJetsCuts>1) {
4102 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
4103 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
4106 if(nRecJetsCuts>2) {
4107 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
4108 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
4111 if(type==kBckgOutLJ || type==kBckgOutAJ)
4113 TList* tracklistoutleading = new TList();
4114 Double_t sumPtOutLeading = 0.;
4115 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
4116 if(type==kBckgOutLJ && fh1Mult) fh1Mult->Fill(tracklistoutleading->GetSize());
4118 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
4120 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
4121 if(!trackVP) continue;
4122 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4124 Float_t jetPt = jet->Pt();
4125 Float_t trackPt = trackV->Pt();
4127 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4129 if(type==kBckgOutLJ)
4131 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
4133 // Fill track QA for background
4134 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4137 // All cases included
4138 if(nRecJetsCuts==1 && type==kBckgOutAJ)
4140 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4144 // Increment jet pt with one entry in case #tracks outside jets = 0
4145 if(tracklistoutleading->GetSize()==0) {
4146 Float_t jetPt = jet->Pt();
4147 Bool_t incrementJetPt = kTRUE;
4148 if(type==kBckgOutLJ)
4150 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4152 // All cases included
4153 if(nRecJetsCuts==1 && type==kBckgOutAJ)
4155 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4158 delete tracklistoutleading;
4160 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
4162 TList* tracklistoutleadingStat = new TList();
4163 Double_t sumPtOutLeadingStat = 0.;
4164 Double_t normFactorLeading = 0.;
4166 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
4167 if(type==kBckgOutLJStat && fh1Mult) fh1Mult->Fill(tracklistoutleadingStat->GetSize());
4169 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
4171 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
4172 if(!trackVP) continue;
4173 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4175 Float_t jetPt = jet->Pt();
4176 Float_t trackPt = trackV->Pt();
4177 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4180 if(type==kBckgOutLJStat)
4182 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
4184 // Fill track QA for background
4185 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
4188 // All cases included
4189 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
4191 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
4192 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
4197 // Increment jet pt with one entry in case #tracks outside jets = 0
4198 if(tracklistoutleadingStat->GetSize()==0) {
4199 Float_t jetPt = jet->Pt();
4200 Bool_t incrementJetPt = kTRUE;
4201 if(type==kBckgOutLJStat)
4203 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
4205 // All cases included
4206 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
4208 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
4212 delete tracklistoutleadingStat;
4215 if(type==kBckgPerp || type==kBckgPerp2 || type==kBckgPerp2Area)
4217 Double_t sumPtPerp1 = 0.;
4218 Double_t sumPtPerp2 = 0.;
4219 TList* tracklistperp = new TList();
4220 TList* tracklistperp1 = new TList();
4221 TList* tracklistperp2 = new TList();
4224 if(type == kBckgPerp2) norm = 2; // in FillFF() scaleFac = 1/norm = 0.5 - account for double area;
4225 if(type == kBckgPerp2Area) norm = 2*TMath::Pi()*TMath::Abs(GetFFRadius())*TMath::Abs(GetFFRadius()) / jet->EffectiveAreaCharged(); // in FillFF() scaleFac = 1/norm;
4227 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp1,jet,TMath::Abs(GetFFRadius()),sumPtPerp1);
4228 if(type==kBckgPerp2 || type==kBckgPerp2Area) GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2., inputtracklist,tracklistperp2,jet,TMath::Abs(GetFFRadius()),sumPtPerp2);
4230 tracklistperp->AddAll(tracklistperp1);
4231 tracklistperp->AddAll(tracklistperp2);
4233 if(tracklistperp->GetSize() != tracklistperp1->GetSize() + tracklistperp2->GetSize()){
4234 cout<<" ERROR: tracklistperp size "<<tracklistperp->GetSize()<<" perp1 "<<tracklistperp1->GetSize()<<" perp2 "<<tracklistperp2->GetSize()<<endl;
4238 if(fh1Mult) fh1Mult->Fill(tracklistperp->GetSize());
4240 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
4242 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
4243 if(!trackVP)continue;
4244 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4246 Float_t jetPt = jet->Pt();
4247 Float_t trackPt = trackV->Pt();
4249 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4251 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, norm );
4253 // Fill track QA for background
4254 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4258 // Increment jet pt with one entry in case #tracks outside jets = 0
4259 if(tracklistperp->GetSize()==0) {
4260 Float_t jetPt = jet->Pt();
4261 Bool_t incrementJetPt = kTRUE;
4262 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4267 // fill for tracklistperp1/2 separately, divide norm by 2
4268 if(type==kBckgPerp){
4269 FillJetShape(jet, tracklistperp, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
4271 if(type==kBckgPerp2){
4272 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
4273 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0., kFALSE);
4275 if(type==kBckgPerp2Area){ // divide norm by 2: listperp1/2 filled separately
4276 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0.5*norm, kFALSE);
4277 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0.5*norm, kFALSE);
4281 delete tracklistperp;
4282 delete tracklistperp1;
4283 delete tracklistperp2;
4286 if(type==kBckgASide)
4288 Double_t sumPtASide = 0.;
4289 TList* tracklistaside = new TList();
4290 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,TMath::Abs(GetFFRadius()),sumPtASide);
4291 if(fh1Mult) fh1Mult->Fill(tracklistaside->GetSize());
4293 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
4295 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
4296 if(!trackVP) continue;
4297 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4299 Float_t jetPt = jet->Pt();
4300 Float_t trackPt = trackV->Pt();
4302 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4304 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4306 // Fill track QA for background
4307 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4311 if(tracklistaside->GetSize()==0) {
4312 Float_t jetPt = jet->Pt();
4313 Bool_t incrementJetPt = kTRUE;
4314 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4317 delete tracklistaside;
4320 if(type==kBckgASideWindow)
4322 Double_t normFactorASide = 0.;
4323 Double_t sumPtASideW = 0.;
4324 TList* tracklistasidew = new TList();
4325 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,TMath::Abs(GetFFRadius()),sumPtASideW,normFactorASide);
4326 if(fh1Mult) fh1Mult->Fill(tracklistasidew->GetSize());
4328 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
4330 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
4331 if(!trackVP) continue;
4332 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4334 Float_t jetPt = jet->Pt();
4335 Float_t trackPt = trackV->Pt();
4336 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4338 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
4340 // Fill track QA for background
4341 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
4345 if(tracklistasidew->GetSize()==0) {
4346 Float_t jetPt = jet->Pt();
4347 Bool_t incrementJetPt = kTRUE;
4348 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
4351 delete tracklistasidew;
4354 if(type==kBckgPerpWindow)
4356 Double_t normFactorPerp = 0.;
4357 Double_t sumPtPerpW = 0.;
4358 TList* tracklistperpw = new TList();
4359 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,TMath::Abs(GetFFRadius()),sumPtPerpW,normFactorPerp);
4360 if(fh1Mult) fh1Mult->Fill(tracklistperpw->GetSize());
4362 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
4364 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
4365 if(!trackVP) continue;
4366 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4368 Float_t jetPt = jet->Pt();
4369 Float_t trackPt = trackV->Pt();
4370 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4372 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
4374 // Fill track QA for background
4375 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
4379 if(tracklistperpw->GetSize()==0) {
4380 Float_t jetPt = jet->Pt();
4381 Bool_t incrementJetPt = kTRUE;
4382 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
4385 delete tracklistperpw;
4389 if(type==kBckgOut2J || type==kBckgOutAJ)
4391 if(type==kBckgOut2J && fh1Mult) fh1Mult->Fill(tracklistout2jets->GetSize());
4392 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
4394 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
4395 if(!trackVP) continue;
4396 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4398 Float_t jetPt = jet->Pt();
4399 Float_t trackPt = trackV->Pt();
4401 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4403 if(type==kBckgOut2J)
4405 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4406 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4409 // All cases included
4410 if(nRecJetsCuts==2 && type==kBckgOutAJ)
4412 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4417 // Increment jet pt with one entry in case #tracks outside jets = 0
4418 if(tracklistout2jets->GetSize()==0) {
4419 Float_t jetPt = jet->Pt();
4420 Bool_t incrementJetPt = kTRUE;
4421 if(type==kBckgOut2J)
4423 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4425 // All cases included
4426 if(nRecJetsCuts==2 && type==kBckgOutAJ)
4428 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4433 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
4435 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
4437 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
4438 if(!trackVP) continue;
4439 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4441 Float_t jetPt = jet->Pt();
4442 Float_t trackPt = trackV->Pt();
4443 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4445 if(type==kBckgOut2JStat)
4447 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
4449 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
4452 // All cases included
4453 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
4455 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
4457 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
4461 // Increment jet pt with one entry in case #tracks outside jets = 0
4462 if(tracklistout2jetsStat->GetSize()==0) {
4463 Float_t jetPt = jet->Pt();
4464 Bool_t incrementJetPt = kTRUE;
4465 if(type==kBckgOut2JStat)
4467 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
4469 // All cases included
4470 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
4472 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
4478 if(type==kBckgOut3J || type==kBckgOutAJ)
4480 if(type==kBckgOut3J && fh1Mult) fh1Mult->Fill(tracklistout3jets->GetSize());
4482 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
4484 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
4485 if(!trackVP) continue;
4486 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4488 Float_t jetPt = jet->Pt();
4489 Float_t trackPt = trackV->Pt();
4491 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4493 if(type==kBckgOut3J)
4495 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4497 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4500 // All cases included
4501 if(nRecJetsCuts==3 && type==kBckgOutAJ)
4503 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4508 // Increment jet pt with one entry in case #tracks outside jets = 0
4509 if(tracklistout3jets->GetSize()==0) {
4510 Float_t jetPt = jet->Pt();
4511 Bool_t incrementJetPt = kTRUE;
4512 if(type==kBckgOut3J)
4514 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4516 // All cases included
4517 if(nRecJetsCuts==3 && type==kBckgOutAJ)
4519 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4524 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
4526 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
4528 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
4529 if(!trackVP) continue;
4530 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4532 Float_t jetPt = jet->Pt();
4533 Float_t trackPt = trackV->Pt();
4534 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4536 if(type==kBckgOut3JStat)
4538 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
4540 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
4543 // All cases included
4544 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
4546 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
4548 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
4553 // Increment jet pt with one entry in case #tracks outside jets = 0
4554 if(tracklistout3jetsStat->GetSize()==0) {
4555 Float_t jetPt = jet->Pt();
4556 Bool_t incrementJetPt = kTRUE;
4557 if(type==kBckgOut3JStat)
4559 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
4561 // All cases included
4562 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
4564 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
4570 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
4572 TList* tracklistClustersOutLeading = new TList();
4573 Double_t normFactorClusters = 0;
4574 Float_t jetPt = jet->Pt();
4576 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
4577 if(fh1Mult) fh1Mult->Fill(tracklistClustersOutLeading->GetSize());
4579 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
4581 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
4582 if(!trackVP) continue;
4583 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4585 Float_t trackPt = trackVP->Pt();
4587 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4589 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
4590 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
4595 delete tracklistClustersOutLeading;
4599 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
4601 TList* tracklistClustersMedian = new TList();
4602 Double_t normFactorClusters = 0;
4603 Float_t jetPt = jet->Pt();
4605 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
4606 if(fh1Mult) fh1Mult->Fill(tracklistClustersMedian->GetSize());
4608 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
4610 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
4611 if(!trackVP) continue;
4612 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4614 Float_t trackPt = trackVP->Pt();
4616 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4618 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
4619 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
4624 delete tracklistClustersMedian;
4627 delete tracklistout2jets;
4628 delete tracklistout3jets;
4629 delete tracklistout2jetsStat;
4630 delete tracklistout3jetsStat;
4633 //_____________________________________________________________________________________
4634 Double_t AliAnalysisTaskFragmentationFunction::GetMCStrangenessFactor(const Double_t pt)
4636 // factor strangeness data/MC as function of pt from UE analysis (Sara Vallero)
4640 if(0.150<pt && pt<0.200) alpha = 3.639;
4641 if(0.200<pt && pt<0.250) alpha = 2.097;
4642 if(0.250<pt && pt<0.300) alpha = 1.930;
4643 if(0.300<pt && pt<0.350) alpha = 1.932;
4644 if(0.350<pt && pt<0.400) alpha = 1.943;
4645 if(0.400<pt && pt<0.450) alpha = 1.993;
4646 if(0.450<pt && pt<0.500) alpha = 1.989;
4647 if(0.500<pt && pt<0.600) alpha = 1.963;
4648 if(0.600<pt && pt<0.700) alpha = 1.917;
4649 if(0.700<pt && pt<0.800) alpha = 1.861;
4650 if(0.800<pt && pt<0.900) alpha = 1.820;
4651 if(0.900<pt && pt<1.000) alpha = 1.741;
4652 if(1.000<pt && pt<1.500) alpha = 0.878;
4657 //__________________________________________________________________________________________________
4658 Double_t AliAnalysisTaskFragmentationFunction::GetMCStrangenessFactorCMS(AliAODMCParticle* daughter)
4660 // strangeness ratio MC/data as function of mother pt from CMS data in |eta|<2.0
4662 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
4665 AliAODMCParticle* currentMother = daughter;
4666 AliAODMCParticle* currentDaughter = daughter;
4669 // find first primary mother K0s, Lambda or Xi
4672 Int_t daughterPDG = currentDaughter->GetPdgCode();
4674 Int_t motherLabel = currentDaughter->GetMother();
4675 if(motherLabel >= tca->GetEntriesFast()){ // protection
4676 currentMother = currentDaughter;
4680 currentMother = (AliAODMCParticle*) tca->At(motherLabel);
4683 currentMother = currentDaughter;
4687 Int_t motherPDG = currentMother->GetPdgCode();
4689 // phys. primary found ?
4690 if(currentMother->IsPhysicalPrimary()) break;
4692 if(TMath::Abs(daughterPDG) == 321){ // K+/K- e.g. from phi (ref data not feeddown corrected)
4693 currentMother = currentDaughter; break;
4695 if(TMath::Abs(motherPDG) == 310 ){ // K0s e.g. from phi (ref data not feeddown corrected)
4698 if(TMath::Abs(motherPDG) == 3212 && TMath::Abs(daughterPDG) == 3122){ // mother Sigma0, daughter Lambda (this case not included in feeddown corr.)
4699 currentMother = currentDaughter; break;
4702 currentDaughter = currentMother;
4706 Int_t motherPDG = currentMother->GetPdgCode();
4707 Double_t motherPt = currentMother->Pt();
4711 if(TMath::Abs(motherPDG) == 310 || TMath::Abs(motherPDG)==321){ // K0s / K+ / K-
4713 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.768049;
4714 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.732933;
4715 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.650298;
4716 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.571332;
4717 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.518734;
4718 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.492543;
4719 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.482704;
4720 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.488056;
4721 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.488861;
4722 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.492862;
4723 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.504332;
4724 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.501858;
4725 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.512970;
4726 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.524131;
4727 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.539130;
4728 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.554101;
4729 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.560348;
4730 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.568869;
4731 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.583310;
4732 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.604818;
4733 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.632630;
4734 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.710070;
4735 else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.736365;
4736 else if(8.00 <= motherPt && motherPt < 10.00) fac = 0.835865;
4739 if(TMath::Abs(motherPDG) == 3122){ // Lambda
4741 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.645162;
4742 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.627431;
4743 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.457136;
4744 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.384369;
4745 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.330597;
4746 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.309571;
4747 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.293620;
4748 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.283709;
4749 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.282047;
4750 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.277261;
4751 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.275772;
4752 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.280726;
4753 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.288540;
4754 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.288315;
4755 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.296619;
4756 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.302993;
4757 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.338121;
4758 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.349800;
4759 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.356802;
4760 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.391202;
4761 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.422573;
4762 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.573815;
4763 else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.786984;
4764 else if(8.00 <= motherPt && motherPt < 10.00) fac = 1.020021;
4767 if(TMath::Abs(motherPDG) == 3312 || TMath::Abs(motherPDG) == 3322){ // xi
4769 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.666620;
4770 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.575908;
4771 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.433198;
4772 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.340901;
4773 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.290896;
4774 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.236074;
4775 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.218681;
4776 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.207763;
4777 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.222848;
4778 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.208806;
4779 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.197275;
4780 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.183645;
4781 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.188788;
4782 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.188282;
4783 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.207442;
4784 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.240388;
4785 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.241916;
4786 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.208276;
4787 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.234550;
4788 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.251689;
4789 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.310204;
4790 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.343492;
4793 Double_t weight = 1;
4794 if(fac > 0) weight = 1/fac;
4799 // _________________________________________________________________________________
4800 void AliAnalysisTaskFragmentationFunction::FillJetShape(AliAODJet* jet, TList* list,
4801 TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt,
4802 Double_t dPhiUE, Double_t normUE, Bool_t scaleStrangeness){
4804 const Int_t kNbinsR = 50;
4805 const Float_t kBinWidthR = 0.02;
4807 Int_t nJetTracks = list->GetEntries();
4809 Float_t PtSumA[kNbinsR] = {0.0};
4811 Float_t *delRA = new Float_t[nJetTracks];
4812 Float_t *trackPtA = new Float_t[nJetTracks];
4813 Int_t *index = new Int_t[nJetTracks];
4815 for(Int_t i=0; i<nJetTracks; i++){
4822 jet->PxPyPz(jetMom);
4823 TVector3 jet3mom(jetMom);
4825 if(TMath::Abs(dPhiUE)>0){
4826 Double_t phiTilted = jet3mom.Phi();
4827 phiTilted += dPhiUE;
4828 phiTilted = TVector2::Phi_0_2pi(phiTilted);
4829 jet3mom.SetPhi(phiTilted);
4832 Double_t jetPt = jet->Pt();
4833 Double_t sumWeights = 0;
4835 for (Int_t j =0; j<nJetTracks; j++){
4837 AliVParticle* track = dynamic_cast<AliVParticle*>(list->At(j));
4840 Double_t trackMom[3];
4841 track->PxPyPz(trackMom);
4842 TVector3 track3mom(trackMom);
4844 Double_t dR = jet3mom.DeltaR(track3mom);
4847 trackPtA[j] = track->Pt();
4849 Double_t weight = GetMCStrangenessFactor(track->Pt()); // more correctly should be gen pt
4850 sumWeights += weight;
4852 for(Int_t ibin=1; ibin<=kNbinsR; ibin++){
4853 Float_t xlow = kBinWidthR*(ibin-1);
4854 Float_t xup = kBinWidthR*ibin;
4855 if(xlow <= dR && dR < xup){
4857 if(scaleStrangeness) PtSumA[ibin-1] += track->Pt()*weight;
4858 else PtSumA[ibin-1] += track->Pt();
4866 for(Int_t ibin=0; ibin<kNbinsR; ibin++){
4867 Float_t fR = kBinWidthR*(ibin+0.5);
4869 for(Int_t k=0; k<5; k++){
4870 if(k==0){jetPtMin=20.0;jetPtMax=30.0;}
4871 if(k==1){jetPtMin=30.0;jetPtMax=40.0;}
4872 if(k==2){jetPtMin=40.0;jetPtMax=60.0;}
4873 if(k==3){jetPtMin=60.0;jetPtMax=80.0;}
4874 if(k==4){jetPtMin=80.0;jetPtMax=100.0;}
4875 if(jetPt>jetPtMin && jetPt<jetPtMax){
4877 hProDelRPtSum[k]->Fill(fR,PtSumA[ibin]);
4883 if(scaleStrangeness) hProNtracksLeadingJet->Fill(jetPt,sumWeights);
4884 else hProNtracksLeadingJet->Fill(jetPt,nJetTracks);
4886 if(normUE) hProNtracksLeadingJet->Fill(jetPt,nJetTracks/normUE);
4891 Float_t delRPtSum80pc = 0;
4893 TMath::Sort(nJetTracks,delRA,index,0);
4895 for(Int_t ii=0; ii<nJetTracks; ii++){
4897 if(scaleStrangeness){
4898 Double_t weight = GetMCStrangenessFactor(trackPtA[index[ii]]); // more correctly should be gen pt
4899 PtSum += weight*trackPtA[index[ii]];
4901 else PtSum += trackPtA[index[ii]];
4904 if(PtSum/jetPt >= 0.8000){
4905 delRPtSum80pc = delRA[index[ii]];
4909 hProDelR80pcPt->Fill(jetPt,delRPtSum80pc);