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"
55 ClassImp(AliAnalysisTaskFragmentationFunction)
57 //____________________________________________________________________________
58 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
65 ,fBranchRecJets("jets")
66 ,fBranchRecBckgClusters("")
68 ,fBranchEmbeddedJets("")
72 ,fUseAODInputJets(kTRUE)
74 ,fUsePhysicsSelection(kTRUE)
84 ,fUseExtraTracksBgr(0)
85 ,fCutFractionPtEmbedded(0)
86 ,fUseEmbeddedJetAxis(0)
106 ,fTracksAODMCCharged(0)
107 ,fTracksAODMCChargedSecNS(0)
108 ,fTracksAODMCChargedSecS(0)
109 ,fTracksRecQualityCuts(0)
118 ,fQATrackHistosRecCuts(0)
119 ,fQATrackHistosGen(0)
121 ,fQAJetHistosRecCuts(0)
122 ,fQAJetHistosRecCutsLeading(0)
124 ,fQAJetHistosGenLeading(0)
125 ,fQAJetHistosRecEffLeading(0)
128 ,fQATrackHighPtThreshold(0)
161 ,fh1VertexNContributors(0)
173 ,fh1nRecBckgJetsCuts(0)
175 ,fh2PtRecVsGenPrim(0)
177 ,fQATrackHistosRecEffGen(0)
178 ,fQATrackHistosRecEffRec(0)
179 ,fQATrackHistosSecRecNS(0)
180 ,fQATrackHistosSecRecS(0)
181 ,fQATrackHistosSecRecSsc(0)
182 ,fFFHistosRecEffRec(0)
183 ,fFFHistosSecRecNS(0)
185 ,fFFHistosSecRecSsc(0)
192 ,fh1FractionPtEmbedded(0)
194 ,fh2DeltaPtVsJetPtEmbedded(0)
195 ,fh2DeltaPtVsRecJetPtEmbedded(0)
196 ,fh1DeltaREmbedded(0)
197 ,fQABckgHisto0RecCuts(0)
199 ,fQABckgHisto1RecCuts(0)
201 ,fQABckgHisto2RecCuts(0)
203 ,fQABckgHisto3RecCuts(0)
205 ,fQABckgHisto4RecCuts(0)
207 ,fFFBckgHisto0RecCuts(0)
209 ,fFFBckgHisto1RecCuts(0)
211 ,fFFBckgHisto2RecCuts(0)
213 ,fFFBckgHisto3RecCuts(0)
215 ,fFFBckgHisto4RecCuts(0)
217 ,fFFBckgHisto0RecEffRec(0)
218 ,fFFBckgHisto0SecRecNS(0)
219 ,fFFBckgHisto0SecRecS(0)
220 ,fFFBckgHisto0SecRecSsc(0)
222 ,fProNtracksLeadingJet(0)
224 ,fProNtracksLeadingJetGen(0)
225 ,fProDelR80pcPtGen(0)
226 ,fProNtracksLeadingJetBgrPerp2(0)
227 ,fProNtracksLeadingJetRecPrim(0)
228 ,fProDelR80pcPtRecPrim(0)
229 ,fProNtracksLeadingJetRecSecNS(0)
230 ,fProNtracksLeadingJetRecSecS(0)
231 ,fProNtracksLeadingJetRecSecSsc(0)
235 // default constructor
242 for(Int_t ii=0; ii<5; ii++){
243 fProDelRPtSum[ii] = 0;
244 fProDelRPtSumGen[ii] = 0;
245 fProDelRPtSumBgrPerp2[ii] = 0;
246 fProDelRPtSumRecPrim[ii] = 0;
247 fProDelRPtSumRecSecNS[ii] = 0;
248 fProDelRPtSumRecSecS[ii] = 0;
249 fProDelRPtSumRecSecSsc[ii] = 0;
253 //_______________________________________________________________________________________________
254 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name)
255 : AliAnalysisTaskSE(name)
261 ,fBranchRecJets("jets")
262 ,fBranchRecBckgClusters("")
264 ,fBranchEmbeddedJets("")
268 ,fUseAODInputJets(kTRUE)
270 ,fUsePhysicsSelection(kTRUE)
271 ,fEvtSelectionMask(0)
280 ,fUseExtraTracksBgr(0)
281 ,fCutFractionPtEmbedded(0)
282 ,fUseEmbeddedJetAxis(0)
283 ,fUseEmbeddedJetPt(0)
302 ,fTracksAODMCCharged(0)
303 ,fTracksAODMCChargedSecNS(0)
304 ,fTracksAODMCChargedSecS(0)
305 ,fTracksRecQualityCuts(0)
314 ,fQATrackHistosRecCuts(0)
315 ,fQATrackHistosGen(0)
317 ,fQAJetHistosRecCuts(0)
318 ,fQAJetHistosRecCutsLeading(0)
320 ,fQAJetHistosGenLeading(0)
321 ,fQAJetHistosRecEffLeading(0)
324 ,fQATrackHighPtThreshold(0)
357 ,fh1VertexNContributors(0)
369 ,fh1nRecBckgJetsCuts(0)
371 ,fh2PtRecVsGenPrim(0)
373 ,fQATrackHistosRecEffGen(0)
374 ,fQATrackHistosRecEffRec(0)
375 ,fQATrackHistosSecRecNS(0)
376 ,fQATrackHistosSecRecS(0)
377 ,fQATrackHistosSecRecSsc(0)
378 ,fFFHistosRecEffRec(0)
379 ,fFFHistosSecRecNS(0)
381 ,fFFHistosSecRecSsc(0)
388 ,fh1FractionPtEmbedded(0)
390 ,fh2DeltaPtVsJetPtEmbedded(0)
391 ,fh2DeltaPtVsRecJetPtEmbedded(0)
392 ,fh1DeltaREmbedded(0)
393 ,fQABckgHisto0RecCuts(0)
395 ,fQABckgHisto1RecCuts(0)
397 ,fQABckgHisto2RecCuts(0)
399 ,fQABckgHisto3RecCuts(0)
401 ,fQABckgHisto4RecCuts(0)
403 ,fFFBckgHisto0RecCuts(0)
405 ,fFFBckgHisto1RecCuts(0)
407 ,fFFBckgHisto2RecCuts(0)
409 ,fFFBckgHisto3RecCuts(0)
411 ,fFFBckgHisto4RecCuts(0)
413 ,fFFBckgHisto0RecEffRec(0)
414 ,fFFBckgHisto0SecRecNS(0)
415 ,fFFBckgHisto0SecRecS(0)
416 ,fFFBckgHisto0SecRecSsc(0)
418 ,fProNtracksLeadingJet(0)
420 ,fProNtracksLeadingJetGen(0)
421 ,fProDelR80pcPtGen(0)
422 ,fProNtracksLeadingJetBgrPerp2(0)
423 ,fProNtracksLeadingJetRecPrim(0)
424 ,fProDelR80pcPtRecPrim(0)
425 ,fProNtracksLeadingJetRecSecNS(0)
426 ,fProNtracksLeadingJetRecSecS(0)
427 ,fProNtracksLeadingJetRecSecSsc(0)
437 for(Int_t ii=0; ii<5; ii++){
438 fProDelRPtSum[ii] = 0;
439 fProDelRPtSumGen[ii] = 0;
440 fProDelRPtSumBgrPerp2[ii] = 0;
441 fProDelRPtSumRecPrim[ii] = 0;
442 fProDelRPtSumRecSecNS[ii] = 0;
443 fProDelRPtSumRecSecS[ii] = 0;
444 fProDelRPtSumRecSecSsc[ii] = 0;
447 DefineOutput(1,TList::Class());
450 //__________________________________________________________________________________________________________________________
451 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction ©)
452 : AliAnalysisTaskSE()
455 ,fAODJets(copy.fAODJets)
456 ,fAODExtension(copy.fAODExtension)
457 ,fNonStdFile(copy.fNonStdFile)
458 ,fBranchRecJets(copy.fBranchRecJets)
459 ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
460 ,fBranchGenJets(copy.fBranchGenJets)
461 ,fBranchEmbeddedJets(copy.fBranchEmbeddedJets)
462 ,fTrackTypeGen(copy.fTrackTypeGen)
463 ,fJetTypeGen(copy.fJetTypeGen)
464 ,fJetTypeRecEff(copy.fJetTypeRecEff)
465 ,fUseAODInputJets(copy.fUseAODInputJets)
466 ,fFilterMask(copy.fFilterMask)
467 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
468 ,fEvtSelectionMask(copy.fEvtSelectionMask)
469 ,fEventClass(copy.fEventClass)
470 ,fMaxVertexZ(copy.fMaxVertexZ)
471 ,fTrackPtCut(copy.fTrackPtCut)
472 ,fTrackEtaMin(copy.fTrackEtaMin)
473 ,fTrackEtaMax(copy.fTrackEtaMax)
474 ,fTrackPhiMin(copy.fTrackPhiMin)
475 ,fTrackPhiMax(copy.fTrackPhiMax)
476 ,fUseExtraTracks(copy.fUseExtraTracks)
477 ,fUseExtraTracksBgr(copy.fUseExtraTracksBgr)
478 ,fCutFractionPtEmbedded(copy.fCutFractionPtEmbedded)
479 ,fUseEmbeddedJetAxis(copy.fUseEmbeddedJetAxis)
480 ,fUseEmbeddedJetPt(copy.fUseEmbeddedJetPt)
481 ,fJetPtCut(copy.fJetPtCut)
482 ,fJetEtaMin(copy.fJetEtaMin)
483 ,fJetEtaMax(copy.fJetEtaMax)
484 ,fJetPhiMin(copy.fJetPhiMin)
485 ,fJetPhiMax(copy.fJetPhiMax)
486 ,fFFRadius(copy.fFFRadius)
487 ,fFFMinLTrackPt(copy.fFFMinLTrackPt)
488 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
489 ,fFFMinnTracks(copy.fFFMinnTracks)
490 ,fFFBckgRadius(copy.fFFBckgRadius)
491 ,fBckgMode(copy.fBckgMode)
492 ,fQAMode(copy.fQAMode)
493 ,fFFMode(copy.fFFMode)
494 ,fEffMode(copy.fEffMode)
495 ,fJSMode(copy.fJSMode)
496 ,fAvgTrials(copy.fAvgTrials)
497 ,fTracksRecCuts(copy.fTracksRecCuts)
498 ,fTracksGen(copy.fTracksGen)
499 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
500 ,fTracksAODMCChargedSecNS(copy.fTracksAODMCChargedSecNS)
501 ,fTracksAODMCChargedSecS(copy.fTracksAODMCChargedSecS)
502 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
503 ,fJetsRec(copy.fJetsRec)
504 ,fJetsRecCuts(copy.fJetsRecCuts)
505 ,fJetsGen(copy.fJetsGen)
506 ,fJetsRecEff(copy.fJetsRecEff)
507 ,fJetsEmbedded(copy.fJetsEmbedded)
508 ,fBckgJetsRec(copy.fBckgJetsRec)
509 ,fBckgJetsRecCuts(copy.fBckgJetsRecCuts)
510 ,fBckgJetsGen(copy.fBckgJetsGen)
511 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
512 ,fQATrackHistosGen(copy.fQATrackHistosGen)
513 ,fQAJetHistosRec(copy.fQAJetHistosRec)
514 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
515 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
516 ,fQAJetHistosGen(copy.fQAJetHistosGen)
517 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
518 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
519 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
520 ,fFFHistosGen(copy.fFFHistosGen)
521 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
522 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
523 ,fFFJetPtMin(copy.fFFJetPtMin)
524 ,fFFJetPtMax(copy.fFFJetPtMax)
525 ,fFFNBinsPt(copy.fFFNBinsPt)
526 ,fFFPtMin(copy.fFFPtMin)
527 ,fFFPtMax(copy.fFFPtMax)
528 ,fFFNBinsXi(copy.fFFNBinsXi)
529 ,fFFXiMin(copy.fFFXiMin)
530 ,fFFXiMax(copy.fFFXiMax)
531 ,fFFNBinsZ(copy.fFFNBinsZ)
532 ,fFFZMin(copy.fFFZMin)
533 ,fFFZMax(copy.fFFZMax)
534 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
535 ,fQAJetPtMin(copy.fQAJetPtMin)
536 ,fQAJetPtMax(copy.fQAJetPtMax)
537 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
538 ,fQAJetEtaMin(copy.fQAJetEtaMin)
539 ,fQAJetEtaMax(copy.fQAJetEtaMax)
540 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
541 ,fQAJetPhiMin(copy.fQAJetPhiMin)
542 ,fQAJetPhiMax(copy.fQAJetPhiMax)
543 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
544 ,fQATrackPtMin(copy.fQATrackPtMin)
545 ,fQATrackPtMax(copy.fQATrackPtMax)
546 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
547 ,fQATrackEtaMin(copy.fQATrackEtaMin)
548 ,fQATrackEtaMax(copy.fQATrackEtaMax)
549 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
550 ,fQATrackPhiMin(copy.fQATrackPhiMin)
551 ,fQATrackPhiMax(copy.fQATrackPhiMax)
552 ,fCommonHistList(copy.fCommonHistList)
553 ,fh1EvtSelection(copy.fh1EvtSelection)
554 ,fh1VertexNContributors(copy.fh1VertexNContributors)
555 ,fh1VertexZ(copy.fh1VertexZ)
556 ,fh1EvtMult(copy.fh1EvtMult)
557 ,fh1EvtCent(copy.fh1EvtCent)
558 ,fh1Xsec(copy.fh1Xsec)
559 ,fh1Trials(copy.fh1Trials)
560 ,fh1PtHard(copy.fh1PtHard)
561 ,fh1PtHardTrials(copy.fh1PtHardTrials)
562 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
563 ,fh1nGenJets(copy.fh1nGenJets)
564 ,fh1nRecEffJets(copy.fh1nRecEffJets)
565 ,fh1nEmbeddedJets(copy.fh1nEmbeddedJets)
566 ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts)
567 ,fh1nGenBckgJets(copy.fh1nGenBckgJets)
568 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
569 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
570 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
571 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
572 ,fQATrackHistosSecRecNS(copy.fQATrackHistosSecRecNS)
573 ,fQATrackHistosSecRecS(copy.fQATrackHistosSecRecS)
574 ,fQATrackHistosSecRecSsc(copy.fQATrackHistosSecRecSsc)
575 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
576 ,fFFHistosSecRecNS(copy.fFFHistosSecRecNS)
577 ,fFFHistosSecRecS(copy.fFFHistosSecRecS)
578 ,fFFHistosSecRecSsc(copy.fFFHistosSecRecSsc)
580 ,fh1BckgMult0(copy.fh1BckgMult0)
581 ,fh1BckgMult1(copy.fh1BckgMult1)
582 ,fh1BckgMult2(copy.fh1BckgMult2)
583 ,fh1BckgMult3(copy.fh1BckgMult3)
584 ,fh1BckgMult4(copy.fh1BckgMult4)
585 ,fh1FractionPtEmbedded(copy.fh1FractionPtEmbedded)
586 ,fh1IndexEmbedded(copy.fh1IndexEmbedded)
587 ,fh2DeltaPtVsJetPtEmbedded(copy.fh2DeltaPtVsJetPtEmbedded)
588 ,fh2DeltaPtVsRecJetPtEmbedded(copy.fh2DeltaPtVsRecJetPtEmbedded)
589 ,fh1DeltaREmbedded(copy.fh1DeltaREmbedded)
590 ,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
591 ,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
592 ,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
593 ,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
594 ,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
595 ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
596 ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
597 ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
598 ,fQABckgHisto4RecCuts(copy.fQABckgHisto4RecCuts)
599 ,fQABckgHisto4Gen(copy.fQABckgHisto4Gen)
600 ,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
601 ,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
602 ,fFFBckgHisto1RecCuts(copy.fFFBckgHisto1RecCuts)
603 ,fFFBckgHisto1Gen(copy.fFFBckgHisto1Gen)
604 ,fFFBckgHisto2RecCuts(copy.fFFBckgHisto2RecCuts)
605 ,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
606 ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
607 ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
608 ,fFFBckgHisto4RecCuts(copy.fFFBckgHisto4RecCuts)
609 ,fFFBckgHisto4Gen(copy.fFFBckgHisto4Gen)
610 ,fFFBckgHisto0RecEffRec(copy.fFFBckgHisto0RecEffRec)
611 ,fFFBckgHisto0SecRecNS(copy.fFFBckgHisto0SecRecNS)
612 ,fFFBckgHisto0SecRecS(copy.fFFBckgHisto0SecRecS)
613 ,fFFBckgHisto0SecRecSsc(copy.fFFBckgHisto0SecRecSsc)
615 ,fProNtracksLeadingJet(copy.fProNtracksLeadingJet)
616 ,fProDelR80pcPt(copy.fProDelR80pcPt)
617 ,fProNtracksLeadingJetGen(copy.fProNtracksLeadingJetGen)
618 ,fProDelR80pcPtGen(copy.fProDelR80pcPtGen)
619 ,fProNtracksLeadingJetBgrPerp2(copy.fProNtracksLeadingJetBgrPerp2)
620 ,fProNtracksLeadingJetRecPrim(copy.fProNtracksLeadingJetRecPrim)
621 ,fProDelR80pcPtRecPrim(copy.fProDelR80pcPtRecPrim)
622 ,fProNtracksLeadingJetRecSecNS(copy.fProNtracksLeadingJetRecSecNS)
623 ,fProNtracksLeadingJetRecSecS(copy.fProNtracksLeadingJetRecSecS)
624 ,fProNtracksLeadingJetRecSecSsc(copy.fProNtracksLeadingJetRecSecSsc)
625 ,fRandom(copy.fRandom)
628 fBckgType[0] = copy.fBckgType[0];
629 fBckgType[1] = copy.fBckgType[1];
630 fBckgType[2] = copy.fBckgType[2];
631 fBckgType[3] = copy.fBckgType[3];
632 fBckgType[4] = copy.fBckgType[4];
635 for(Int_t ii=0; ii<5; ii++){
636 fProDelRPtSum[ii] = copy.fProDelRPtSum[ii];
637 fProDelRPtSumGen[ii] = copy.fProDelRPtSumGen[ii];
638 fProDelRPtSumBgrPerp2[ii] = copy.fProDelRPtSumBgrPerp2[ii];
639 fProDelRPtSumRecPrim[ii] = copy.fProDelRPtSumRecPrim[ii];
640 fProDelRPtSumRecSecNS[ii] = copy.fProDelRPtSumRecSecNS[ii];
641 fProDelRPtSumRecSecS[ii] = copy.fProDelRPtSumRecSecS[ii];
642 fProDelRPtSumRecSecSsc[ii] = copy.fProDelRPtSumRecSecSsc[ii];
646 // _________________________________________________________________________________________________________________________________
647 AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
653 AliAnalysisTaskSE::operator=(o);
656 fAODJets = o.fAODJets;
657 fAODExtension = o.fAODExtension;
658 fNonStdFile = o.fNonStdFile;
659 fBranchRecJets = o.fBranchRecJets;
660 fBranchRecBckgClusters = o.fBranchRecBckgClusters;
661 fBranchGenJets = o.fBranchGenJets;
662 fBranchEmbeddedJets = o.fBranchEmbeddedJets;
663 fTrackTypeGen = o.fTrackTypeGen;
664 fJetTypeGen = o.fJetTypeGen;
665 fJetTypeRecEff = o.fJetTypeRecEff;
666 fUseAODInputJets = o.fUseAODInputJets;
667 fFilterMask = o.fFilterMask;
668 fUsePhysicsSelection = o.fUsePhysicsSelection;
669 fEvtSelectionMask = o.fEvtSelectionMask;
670 fEventClass = o.fEventClass;
671 fMaxVertexZ = o.fMaxVertexZ;
672 fTrackPtCut = o.fTrackPtCut;
673 fTrackEtaMin = o.fTrackEtaMin;
674 fTrackEtaMax = o.fTrackEtaMax;
675 fTrackPhiMin = o.fTrackPhiMin;
676 fTrackPhiMax = o.fTrackPhiMax;
677 fUseExtraTracks = o.fUseExtraTracks;
678 fUseExtraTracksBgr = o.fUseExtraTracksBgr;
679 fCutFractionPtEmbedded = o.fCutFractionPtEmbedded;
680 fUseEmbeddedJetAxis = o.fUseEmbeddedJetAxis;
681 fUseEmbeddedJetPt = o.fUseEmbeddedJetPt;
682 fJetPtCut = o.fJetPtCut;
683 fJetEtaMin = o.fJetEtaMin;
684 fJetEtaMax = o.fJetEtaMax;
685 fJetPhiMin = o.fJetPhiMin;
686 fJetPhiMax = o.fJetPhiMin;
687 fFFRadius = o.fFFRadius;
688 fFFMinLTrackPt = o.fFFMinLTrackPt;
689 fFFMaxTrackPt = o.fFFMaxTrackPt;
690 fFFMinnTracks = o.fFFMinnTracks;
691 fFFBckgRadius = o.fFFBckgRadius;
692 fBckgMode = o.fBckgMode;
695 fEffMode = o.fEffMode;
697 fBckgType[0] = o.fBckgType[0];
698 fBckgType[1] = o.fBckgType[1];
699 fBckgType[2] = o.fBckgType[2];
700 fBckgType[3] = o.fBckgType[3];
701 fBckgType[4] = o.fBckgType[4];
702 fAvgTrials = o.fAvgTrials;
703 fTracksRecCuts = o.fTracksRecCuts;
704 fTracksGen = o.fTracksGen;
705 fTracksAODMCCharged = o.fTracksAODMCCharged;
706 fTracksAODMCChargedSecNS = o.fTracksAODMCChargedSecNS;
707 fTracksAODMCChargedSecS = o.fTracksAODMCChargedSecS;
708 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
709 fJetsRec = o.fJetsRec;
710 fJetsRecCuts = o.fJetsRecCuts;
711 fJetsGen = o.fJetsGen;
712 fJetsRecEff = o.fJetsRecEff;
713 fJetsEmbedded = o.fJetsEmbedded;
714 fBckgJetsRec = o.fBckgJetsRec;
715 fBckgJetsRecCuts = o.fBckgJetsRecCuts;
716 fBckgJetsGen = o.fBckgJetsGen;
717 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
718 fQATrackHistosGen = o.fQATrackHistosGen;
719 fQAJetHistosRec = o.fQAJetHistosRec;
720 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
721 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
722 fQAJetHistosGen = o.fQAJetHistosGen;
723 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
724 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
725 fFFHistosRecCuts = o.fFFHistosRecCuts;
726 fFFHistosGen = o.fFFHistosGen;
727 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
728 fFFNBinsJetPt = o.fFFNBinsJetPt;
729 fFFJetPtMin = o.fFFJetPtMin;
730 fFFJetPtMax = o.fFFJetPtMax;
731 fFFNBinsPt = o.fFFNBinsPt;
732 fFFPtMin = o.fFFPtMin;
733 fFFPtMax = o.fFFPtMax;
734 fFFNBinsXi = o.fFFNBinsXi;
735 fFFXiMin = o.fFFXiMin;
736 fFFXiMax = o.fFFXiMax;
737 fFFNBinsZ = o.fFFNBinsZ;
740 fQAJetNBinsPt = o.fQAJetNBinsPt;
741 fQAJetPtMin = o.fQAJetPtMin;
742 fQAJetPtMax = o.fQAJetPtMax;
743 fQAJetNBinsEta = o.fQAJetNBinsEta;
744 fQAJetEtaMin = o.fQAJetEtaMin;
745 fQAJetEtaMax = o.fQAJetEtaMax;
746 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
747 fQAJetPhiMin = o.fQAJetPhiMin;
748 fQAJetPhiMax = o.fQAJetPhiMax;
749 fQATrackNBinsPt = o.fQATrackNBinsPt;
750 fQATrackPtMin = o.fQATrackPtMin;
751 fQATrackPtMax = o.fQATrackPtMax;
752 fQATrackNBinsEta = o.fQATrackNBinsEta;
753 fQATrackEtaMin = o.fQATrackEtaMin;
754 fQATrackEtaMax = o.fQATrackEtaMax;
755 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
756 fQATrackPhiMin = o.fQATrackPhiMin;
757 fQATrackPhiMax = o.fQATrackPhiMax;
758 fCommonHistList = o.fCommonHistList;
759 fh1EvtSelection = o.fh1EvtSelection;
760 fh1VertexNContributors = o.fh1VertexNContributors;
761 fh1VertexZ = o.fh1VertexZ;
762 fh1EvtMult = o.fh1EvtMult;
763 fh1EvtCent = o.fh1EvtCent;
765 fh1Trials = o.fh1Trials;
766 fh1PtHard = o.fh1PtHard;
767 fh1PtHardTrials = o.fh1PtHardTrials;
768 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
769 fh1nGenJets = o.fh1nGenJets;
770 fh1nRecEffJets = o.fh1nRecEffJets;
771 fh1nEmbeddedJets = o.fh1nEmbeddedJets;
772 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
773 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
774 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
775 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
776 fQATrackHistosSecRecNS = o.fQATrackHistosSecRecNS;
777 fQATrackHistosSecRecS = o.fQATrackHistosSecRecS;
778 fQATrackHistosSecRecSsc = o.fQATrackHistosSecRecSsc;
779 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
780 fFFHistosSecRecNS = o.fFFHistosSecRecNS;
781 fFFHistosSecRecS = o.fFFHistosSecRecS;
782 fFFHistosSecRecSsc = o.fFFHistosSecRecSsc;
784 fh1BckgMult0 = o.fh1BckgMult0;
785 fh1BckgMult1 = o.fh1BckgMult1;
786 fh1BckgMult2 = o.fh1BckgMult2;
787 fh1BckgMult3 = o.fh1BckgMult3;
788 fh1BckgMult4 = o.fh1BckgMult4;
789 fh1FractionPtEmbedded = o.fh1FractionPtEmbedded;
790 fh1IndexEmbedded = o.fh1IndexEmbedded;
791 fh2DeltaPtVsJetPtEmbedded = o.fh2DeltaPtVsJetPtEmbedded;
792 fh2DeltaPtVsRecJetPtEmbedded = o.fh2DeltaPtVsRecJetPtEmbedded;
793 fh1DeltaREmbedded = o.fh1DeltaREmbedded;
794 fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
795 fQABckgHisto0Gen = o.fQABckgHisto0Gen;
796 fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
797 fQABckgHisto1Gen = o.fQABckgHisto1Gen;
798 fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
799 fQABckgHisto2Gen = o.fQABckgHisto2Gen;
800 fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
801 fQABckgHisto3Gen = o.fQABckgHisto3Gen;
802 fQABckgHisto4RecCuts = o.fQABckgHisto4RecCuts;
803 fQABckgHisto4Gen = o.fQABckgHisto4Gen;
804 fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
805 fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
806 fFFBckgHisto1RecCuts = o.fFFBckgHisto1RecCuts;
807 fFFBckgHisto1Gen = o.fFFBckgHisto1Gen;
808 fFFBckgHisto2RecCuts = o.fFFBckgHisto2RecCuts;
809 fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
810 fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
811 fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
812 fFFBckgHisto4RecCuts = o.fFFBckgHisto4RecCuts;
813 fFFBckgHisto4Gen = o.fFFBckgHisto4Gen;
814 fFFBckgHisto0RecEffRec = o.fFFBckgHisto0RecEffRec;
815 fFFBckgHisto0SecRecNS = o.fFFBckgHisto0SecRecNS;
816 fFFBckgHisto0SecRecS = o.fFFBckgHisto0SecRecS;
817 fFFBckgHisto0SecRecSsc = o.fFFBckgHisto0SecRecSsc;
818 fProNtracksLeadingJet = o.fProNtracksLeadingJet;
819 fProDelR80pcPt = o.fProDelR80pcPt;
820 fProNtracksLeadingJetGen = o.fProNtracksLeadingJetGen;
821 fProDelR80pcPtGen = o.fProDelR80pcPtGen;
822 fProNtracksLeadingJetBgrPerp2 = o.fProNtracksLeadingJetBgrPerp2;
823 fProNtracksLeadingJetRecPrim = o.fProNtracksLeadingJetRecPrim;
824 fProDelR80pcPtRecPrim = o.fProDelR80pcPtRecPrim;
825 fProNtracksLeadingJetRecSecNS = o.fProNtracksLeadingJetRecSecNS;
826 fProNtracksLeadingJetRecSecS = o.fProNtracksLeadingJetRecSecS;
827 fProNtracksLeadingJetRecSecSsc = o.fProNtracksLeadingJetRecSecSsc;
830 for(Int_t ii=0; ii<5; ii++){
831 fProDelRPtSum[ii] = o.fProDelRPtSum[ii];
832 fProDelRPtSumGen[ii] = o.fProDelRPtSumGen[ii];
833 fProDelRPtSumBgrPerp2[ii] = o.fProDelRPtSumBgrPerp2[ii];
834 fProDelRPtSumRecPrim[ii] = o.fProDelRPtSumRecPrim[ii];
835 fProDelRPtSumRecSecNS[ii] = o.fProDelRPtSumRecSecNS[ii];
836 fProDelRPtSumRecSecS[ii] = o.fProDelRPtSumRecSecS[ii];
837 fProDelRPtSumRecSecSsc[ii] = o.fProDelRPtSumRecSecSsc[ii];
844 //___________________________________________________________________________
845 AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
849 if(fTracksRecCuts) delete fTracksRecCuts;
850 if(fTracksGen) delete fTracksGen;
851 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
852 if(fTracksAODMCChargedSecNS) delete fTracksAODMCChargedSecNS;
853 if(fTracksAODMCChargedSecS) delete fTracksAODMCChargedSecS;
854 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
855 if(fJetsRec) delete fJetsRec;
856 if(fJetsRecCuts) delete fJetsRecCuts;
857 if(fJetsGen) delete fJetsGen;
858 if(fJetsRecEff) delete fJetsRecEff;
859 if(fJetsEmbedded) delete fJetsEmbedded;
862 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
863 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
864 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
866 if(fBckgJetsRec) delete fBckgJetsRec;
867 if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
868 if(fBckgJetsGen) delete fBckgJetsGen;
870 if(fRandom) delete fRandom;
873 //______________________________________________________________________________________________________
874 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
875 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
876 Int_t nPt, Float_t ptMin, Float_t ptMax,
877 Int_t nXi, Float_t xiMin, Float_t xiMax,
878 Int_t nZ , Float_t zMin , Float_t zMax)
898 // default constructor
902 //___________________________________________________________________________
903 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
905 ,fNBinsJetPt(copy.fNBinsJetPt)
906 ,fJetPtMin(copy.fJetPtMin)
907 ,fJetPtMax(copy.fJetPtMax)
908 ,fNBinsPt(copy.fNBinsPt)
911 ,fNBinsXi(copy.fNBinsXi)
914 ,fNBinsZ(copy.fNBinsZ)
917 ,fh2TrackPt(copy.fh2TrackPt)
920 ,fh1JetPt(copy.fh1JetPt)
921 ,fNameFF(copy.fNameFF)
926 //_______________________________________________________________________________________________________________________________________________________________
927 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
932 TObject::operator=(o);
933 fNBinsJetPt = o.fNBinsJetPt;
934 fJetPtMin = o.fJetPtMin;
935 fJetPtMax = o.fJetPtMax;
936 fNBinsPt = o.fNBinsPt;
939 fNBinsXi = o.fNBinsXi;
945 fh2TrackPt = o.fh2TrackPt;
948 fh1JetPt = o.fh1JetPt;
955 //_________________________________________________________
956 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
960 if(fh1JetPt) delete fh1JetPt;
961 if(fh2TrackPt) delete fh2TrackPt;
962 if(fh2Xi) delete fh2Xi;
963 if(fh2Z) delete fh2Z;
966 //_________________________________________________________________
967 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
971 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
972 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
973 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
974 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
976 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
977 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
978 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
979 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
982 //_______________________________________________________________________________________________________________
983 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt, Float_t norm,
984 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
988 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
989 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
991 // Added for proper normalization of FF background estimation
992 // when zero track are found in the background region
993 if((int)trackPt==-1) return;
995 if(norm)fh2TrackPt->Fill(jetPt,trackPt,1/norm);
996 else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,trackPt,scaleFacStrangeness);
997 else fh2TrackPt->Fill(jetPt,trackPt);
1000 if(jetPt>0) z = trackPt / jetPt;
1002 if(z>0) xi = TMath::Log(1/z);
1004 if(trackPt>(1-1e-06)*jetPt && trackPt<(1+1e-06)*jetPt){ // case z=1 : move entry to last histo bin <1
1011 fh2Xi->Fill(jetPt,xi,1/norm);
1012 fh2Z->Fill(jetPt,z,1/norm);
1014 else if(scaleStrangeness){
1015 fh2Xi->Fill(jetPt,xi,scaleFacStrangeness);
1016 fh2Z->Fill(jetPt,z,scaleFacStrangeness);
1019 fh2Xi->Fill(jetPt,xi);
1020 fh2Z->Fill(jetPt,z);
1024 //_________________________________________________________________________________
1025 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
1027 // add histos to list
1029 list->Add(fh1JetPt);
1031 list->Add(fh2TrackPt);
1036 //_________________________________________________________________________________________________________
1037 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1038 Int_t nPt, Float_t ptMin, Float_t ptMax,
1039 Int_t nEta, Float_t etaMin, Float_t etaMax,
1040 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1055 // default constructor
1058 //____________________________________________________________________________________
1059 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1061 ,fNBinsPt(copy.fNBinsPt)
1062 ,fPtMin(copy.fPtMin)
1063 ,fPtMax(copy.fPtMax)
1064 ,fNBinsEta(copy.fNBinsEta)
1065 ,fEtaMin(copy.fEtaMin)
1066 ,fEtaMax(copy.fEtaMax)
1067 ,fNBinsPhi(copy.fNBinsPhi)
1068 ,fPhiMin(copy.fPhiMin)
1069 ,fPhiMax(copy.fPhiMax)
1070 ,fh2EtaPhi(copy.fh2EtaPhi)
1072 ,fNameQAJ(copy.fNameQAJ)
1077 //________________________________________________________________________________________________________________________________________________________________________
1078 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
1083 TObject::operator=(o);
1084 fNBinsPt = o.fNBinsPt;
1087 fNBinsEta = o.fNBinsEta;
1088 fEtaMin = o.fEtaMin;
1089 fEtaMax = o.fEtaMax;
1090 fNBinsPhi = o.fNBinsPhi;
1091 fPhiMin = o.fPhiMin;
1092 fPhiMax = o.fPhiMax;
1093 fh2EtaPhi = o.fh2EtaPhi;
1095 fNameQAJ = o.fNameQAJ;
1101 //______________________________________________________________
1102 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1106 if(fh2EtaPhi) delete fh2EtaPhi;
1107 if(fh1Pt) delete fh1Pt;
1110 //____________________________________________________________________
1111 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
1113 // book jet QA histos
1115 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1116 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1118 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1119 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1122 //____________________________________________________________________________________________________
1123 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1125 // fill jet QA histos
1127 fh2EtaPhi->Fill( eta, phi);
1131 //____________________________________________________________________________________
1132 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1134 // add histos to list
1136 list->Add(fh2EtaPhi);
1140 //___________________________________________________________________________________________________________
1141 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1142 Int_t nPt, Float_t ptMin, Float_t ptMax,
1143 Int_t nEta, Float_t etaMin, Float_t etaMax,
1144 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1156 ,fHighPtThreshold(ptThresh)
1163 // default constructor
1166 //__________________________________________________________________________________________
1167 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1169 ,fNBinsPt(copy.fNBinsPt)
1170 ,fPtMin(copy.fPtMin)
1171 ,fPtMax(copy.fPtMax)
1172 ,fNBinsEta(copy.fNBinsEta)
1173 ,fEtaMin(copy.fEtaMin)
1174 ,fEtaMax(copy.fEtaMax)
1175 ,fNBinsPhi(copy.fNBinsPhi)
1176 ,fPhiMin(copy.fPhiMin)
1177 ,fPhiMax(copy.fPhiMax)
1178 ,fHighPtThreshold(copy.fHighPtThreshold)
1179 ,fh2EtaPhi(copy.fh2EtaPhi)
1181 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1182 ,fh2PhiPt(copy.fh2PhiPt)
1183 ,fNameQAT(copy.fNameQAT)
1188 // _____________________________________________________________________________________________________________________________________________________________________________
1189 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1194 TObject::operator=(o);
1195 fNBinsPt = o.fNBinsPt;
1198 fNBinsEta = o.fNBinsEta;
1199 fEtaMin = o.fEtaMin;
1200 fEtaMax = o.fEtaMax;
1201 fNBinsPhi = o.fNBinsPhi;
1202 fPhiMin = o.fPhiMin;
1203 fPhiMax = o.fPhiMax;
1204 fHighPtThreshold = o.fHighPtThreshold;
1205 fh2EtaPhi = o.fh2EtaPhi;
1207 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1208 fh2PhiPt = o.fh2PhiPt;
1209 fNameQAT = o.fNameQAT;
1215 //___________________________________________________________________
1216 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1220 if(fh2EtaPhi) delete fh2EtaPhi;
1221 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1222 if(fh1Pt) delete fh1Pt;
1223 if(fh2PhiPt) delete fh2PhiPt;
1226 //______________________________________________________________________
1227 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1229 // book track QA histos
1231 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1232 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);
1233 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1234 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1236 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1237 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1238 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1239 AliAnalysisTaskFragmentationFunction::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1242 //________________________________________________________________________________________________________
1243 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm,
1244 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1246 // fill track QA histos
1247 Float_t weight = 1.;
1248 if(weightPt) weight = pt;
1249 fh2EtaPhi->Fill( eta, phi, weight);
1250 if(scaleStrangeness) fh2EtaPhi->Fill( eta, phi, scaleFacStrangeness);
1251 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1252 if(pt > fHighPtThreshold && scaleStrangeness) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1253 if(norm) fh1Pt->Fill( pt, 1/norm );
1254 else if(scaleStrangeness) fh1Pt->Fill(pt,scaleFacStrangeness);
1255 else fh1Pt->Fill( pt );
1257 if(scaleFacStrangeness) fh2PhiPt->Fill(phi, pt, scaleFacStrangeness);
1258 else fh2PhiPt->Fill(phi, pt);
1261 //______________________________________________________________________________________
1262 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1264 // add histos to list
1266 list->Add(fh2EtaPhi);
1267 list->Add(fh2HighPtEtaPhi);
1269 list->Add(fh2PhiPt);
1272 //_________________________________________________________________________________
1273 Bool_t AliAnalysisTaskFragmentationFunction::Notify()
1276 // Implemented Notify() to read the cross sections
1277 // and number of trials from pyxsec.root
1278 // (taken from AliAnalysisTaskJetSpectrum2)
1280 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
1281 Float_t xsection = 0;
1282 Float_t ftrials = 1;
1286 TFile *curfile = tree->GetCurrentFile();
1288 Error("Notify","No current file");
1291 if(!fh1Xsec||!fh1Trials){
1292 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1295 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
1296 fh1Xsec->Fill("<#sigma>",xsection);
1297 // construct a poor man average trials
1298 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1299 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
1302 // Set seed for backg study
1303 fRandom = new TRandom3();
1304 fRandom->SetSeed(0);
1309 //__________________________________________________________________
1310 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
1312 // create output objects
1314 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
1316 // create list of tracks and jets
1318 fTracksRecCuts = new TList();
1319 fTracksRecCuts->SetOwner(kFALSE);
1321 fTracksGen = new TList();
1322 fTracksGen->SetOwner(kFALSE);
1324 fTracksAODMCCharged = new TList();
1325 fTracksAODMCCharged->SetOwner(kFALSE);
1327 fTracksAODMCChargedSecNS = new TList();
1328 fTracksAODMCChargedSecNS->SetOwner(kFALSE);
1330 fTracksAODMCChargedSecS = new TList();
1331 fTracksAODMCChargedSecS->SetOwner(kFALSE);
1333 fTracksRecQualityCuts = new TList();
1334 fTracksRecQualityCuts->SetOwner(kFALSE);
1336 fJetsRec = new TList();
1337 fJetsRec->SetOwner(kFALSE);
1339 fJetsRecCuts = new TList();
1340 fJetsRecCuts->SetOwner(kFALSE);
1342 fJetsGen = new TList();
1343 fJetsGen->SetOwner(kFALSE);
1345 fJetsRecEff = new TList();
1346 fJetsRecEff->SetOwner(kFALSE);
1348 fJetsEmbedded = new TList();
1349 fJetsEmbedded->SetOwner(kFALSE);
1353 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1354 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1355 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
1357 fBckgJetsRec = new TList();
1358 fBckgJetsRec->SetOwner(kFALSE);
1360 fBckgJetsRecCuts = new TList();
1361 fBckgJetsRecCuts->SetOwner(kFALSE);
1363 fBckgJetsGen = new TList();
1364 fBckgJetsGen->SetOwner(kFALSE);
1368 // Create histograms / output container
1372 fCommonHistList = new TList();
1373 fCommonHistList->SetOwner(kTRUE);
1375 Bool_t oldStatus = TH1::AddDirectoryStatus();
1376 TH1::AddDirectory(kFALSE);
1380 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1381 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
1382 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
1383 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1384 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1385 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1386 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
1388 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
1389 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1390 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
1391 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1393 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1394 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1395 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1396 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1397 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1398 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1400 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1401 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1402 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1403 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1405 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1406 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1409 if(fBranchEmbeddedJets.Length()){
1410 fh1FractionPtEmbedded = new TH1F("fh1FractionPtEmbedded","",200,0,2);
1411 fh1IndexEmbedded = new TH1F("fh1IndexEmbedded","",11,-1,10);
1412 fh2DeltaPtVsJetPtEmbedded = new TH2F("fh2DeltaPtVsJetPtEmbedded","",250,0,250,200,-100,100);
1413 fh2DeltaPtVsRecJetPtEmbedded = new TH2F("fh2DeltaPtVsRecJetPtEmbedded","",250,0,250,200,-100,100);
1414 fh1DeltaREmbedded = new TH1F("fh1DeltaREmbedded","",50,0,0.5);
1415 fh1nEmbeddedJets = new TH1F("fh1nEmbeddedJets","embedded jets per event",10,-0.5,9.5);
1420 if(fQAMode&1){ // track QA
1421 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1422 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1423 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1424 fQATrackHighPtThreshold);
1425 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1426 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1427 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1428 fQATrackHighPtThreshold);
1431 if(fQAMode&2){ // jet QA
1432 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1433 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1434 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1435 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1436 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1437 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1438 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1439 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1440 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1441 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1442 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1443 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1444 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1445 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1446 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1447 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1448 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1454 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1455 fFFNBinsPt, fFFPtMin, fFFPtMax,
1456 fFFNBinsXi, fFFXiMin, fFFXiMax,
1457 fFFNBinsZ , fFFZMin , fFFZMax );
1459 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1460 fFFNBinsPt, fFFPtMin, fFFPtMax,
1461 fFFNBinsXi, fFFXiMin, fFFXiMax,
1462 fFFNBinsZ , fFFZMin , fFFZMax);
1469 fQATrackHistosRecEffGen = new AliFragFuncQATrackHistos("RecEffGen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1470 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1471 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1472 fQATrackHighPtThreshold);
1474 fQATrackHistosRecEffRec = new AliFragFuncQATrackHistos("RecEffRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1475 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1476 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1477 fQATrackHighPtThreshold);
1479 fQATrackHistosSecRecNS = new AliFragFuncQATrackHistos("SecRecNS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1480 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1481 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1482 fQATrackHighPtThreshold);
1484 fQATrackHistosSecRecS = new AliFragFuncQATrackHistos("SecRecS", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1485 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1486 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1487 fQATrackHighPtThreshold);
1489 fQATrackHistosSecRecSsc = new AliFragFuncQATrackHistos("SecRecSsc", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1490 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1491 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1492 fQATrackHighPtThreshold);
1496 fFFHistosRecEffRec = new AliFragFuncHistos("RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1497 fFFNBinsPt, fFFPtMin, fFFPtMax,
1498 fFFNBinsXi, fFFXiMin, fFFXiMax,
1499 fFFNBinsZ , fFFZMin , fFFZMax);
1501 fFFHistosSecRecNS = new AliFragFuncHistos("SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1502 fFFNBinsPt, fFFPtMin, fFFPtMax,
1503 fFFNBinsXi, fFFXiMin, fFFXiMax,
1504 fFFNBinsZ , fFFZMin , fFFZMax);
1506 fFFHistosSecRecS = new AliFragFuncHistos("SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1507 fFFNBinsPt, fFFPtMin, fFFPtMax,
1508 fFFNBinsXi, fFFXiMin, fFFXiMax,
1509 fFFNBinsZ , fFFZMin , fFFZMax);
1511 fFFHistosSecRecSsc = new AliFragFuncHistos("SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1512 fFFNBinsPt, fFFPtMin, fFFPtMax,
1513 fFFNBinsXi, fFFXiMin, fFFXiMax,
1514 fFFNBinsZ , fFFZMin , fFFZMax);
1517 } // end: efficiency
1521 if(fBckgType[0]==kBckgNone){
1522 AliError("no bgr method selected !");
1526 for(Int_t i=0; i<5; i++){
1527 if(fBckgType[i]==kBckgPerp) title[i]="Perp";
1528 else if(fBckgType[i]==kBckgPerp2) title[i]="Perp2";
1529 else if(fBckgType[i]==kBckgPerp2Area) title[i]="Perp2Area";
1530 else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
1531 else if(fBckgType[i]==kBckgASide) title[i]="ASide";
1532 else if(fBckgType[i]==kBckgASideWindow) title[i]="ASideW";
1533 else if(fBckgType[i]==kBckgOutLJ) title[i]="OutLeadingJet";
1534 else if(fBckgType[i]==kBckgOut2J) title[i]="Out2Jets";
1535 else if(fBckgType[i]==kBckgOut3J) title[i]="Out3Jets";
1536 else if(fBckgType[i]==kBckgOutAJ) title[i]="AllJets";
1537 else if(fBckgType[i]==kBckgOutLJStat) title[i]="OutLeadingJetStat";
1538 else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
1539 else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
1540 else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
1541 else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
1542 else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
1543 else if(fBckgType[i]==kBckgNone) title[i]="";
1544 else printf("Please chose background method number %d!",i);
1548 if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1549 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1550 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading){
1552 fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
1553 fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
1557 fh1BckgMult0 = new TH1F("fh1BckgMult0","bckg mult "+title[0],500,0,500);
1558 if(fBckgType[1] != kBckgNone) fh1BckgMult1 = new TH1F("fh1BckgMult1","bckg mult "+title[1],500,0,500);
1559 if(fBckgType[2] != kBckgNone) fh1BckgMult2 = new TH1F("fh1BckgMult2","bckg mult "+title[2],500,0,500);
1560 if(fBckgType[3] != kBckgNone) fh1BckgMult3 = new TH1F("fh1BckgMult3","bckg mult "+title[3],500,0,500);
1561 if(fBckgType[4] != kBckgNone) fh1BckgMult4 = new TH1F("fh1BckgMult4","bckg mult "+title[4],500,0,500);
1565 fQABckgHisto0RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[0]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1566 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1567 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1568 fQATrackHighPtThreshold);
1569 fQABckgHisto0Gen = new AliFragFuncQATrackHistos("Bckg"+title[0]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1570 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1571 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1572 fQATrackHighPtThreshold);
1574 if(fBckgType[1] != kBckgNone){
1575 fQABckgHisto1RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[1]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1576 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1577 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1578 fQATrackHighPtThreshold);
1579 fQABckgHisto1Gen = new AliFragFuncQATrackHistos("Bckg"+title[1]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1580 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1581 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1582 fQATrackHighPtThreshold);
1584 if(fBckgType[2] != kBckgNone){
1585 fQABckgHisto2RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[2]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1586 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1587 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1588 fQATrackHighPtThreshold);
1589 fQABckgHisto2Gen = new AliFragFuncQATrackHistos("Bckg"+title[2]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1590 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1591 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1592 fQATrackHighPtThreshold);
1594 if(fBckgType[3] != kBckgNone){
1595 fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1596 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1597 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1598 fQATrackHighPtThreshold);
1599 fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1600 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1601 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1602 fQATrackHighPtThreshold);
1604 if(fBckgType[4] != kBckgNone){
1605 fQABckgHisto4RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[4]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1606 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1607 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1608 fQATrackHighPtThreshold);
1609 fQABckgHisto4Gen = new AliFragFuncQATrackHistos("Bckg"+title[4]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1610 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1611 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1612 fQATrackHighPtThreshold);
1614 } // end: background QA
1617 fFFBckgHisto0RecCuts = new AliFragFuncHistos("Bckg"+title[0]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1618 fFFNBinsPt, fFFPtMin, fFFPtMax,
1619 fFFNBinsXi, fFFXiMin, fFFXiMax,
1620 fFFNBinsZ , fFFZMin , fFFZMax);
1622 fFFBckgHisto0Gen = new AliFragFuncHistos("Bckg"+title[0]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1623 fFFNBinsPt, fFFPtMin, fFFPtMax,
1624 fFFNBinsXi, fFFXiMin, fFFXiMax,
1625 fFFNBinsZ , fFFZMin , fFFZMax);
1627 if(fBckgType[1] != kBckgNone){
1628 fFFBckgHisto1RecCuts = new AliFragFuncHistos("Bckg"+title[1]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1629 fFFNBinsPt, fFFPtMin, fFFPtMax,
1630 fFFNBinsXi, fFFXiMin, fFFXiMax,
1631 fFFNBinsZ , fFFZMin , fFFZMax);
1632 fFFBckgHisto1Gen = new AliFragFuncHistos("Bckg"+title[1]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1633 fFFNBinsPt, fFFPtMin, fFFPtMax,
1634 fFFNBinsXi, fFFXiMin, fFFXiMax,
1635 fFFNBinsZ , fFFZMin , fFFZMax);
1637 if(fBckgType[2] != kBckgNone){
1638 fFFBckgHisto2RecCuts = new AliFragFuncHistos("Bckg"+title[2]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1639 fFFNBinsPt, fFFPtMin, fFFPtMax,
1640 fFFNBinsXi, fFFXiMin, fFFXiMax,
1641 fFFNBinsZ , fFFZMin , fFFZMax);
1643 fFFBckgHisto2Gen = new AliFragFuncHistos("Bckg"+title[2]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1644 fFFNBinsPt, fFFPtMin, fFFPtMax,
1645 fFFNBinsXi, fFFXiMin, fFFXiMax,
1646 fFFNBinsZ , fFFZMin , fFFZMax);
1648 if(fBckgType[3] != kBckgNone){
1649 fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1650 fFFNBinsPt, fFFPtMin, fFFPtMax,
1651 fFFNBinsXi, fFFXiMin, fFFXiMax,
1652 fFFNBinsZ , fFFZMin , fFFZMax);
1654 fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1655 fFFNBinsPt, fFFPtMin, fFFPtMax,
1656 fFFNBinsXi, fFFXiMin, fFFXiMax,
1657 fFFNBinsZ , fFFZMin , fFFZMax);
1659 if(fBckgType[4] != kBckgNone){
1660 fFFBckgHisto4RecCuts = new AliFragFuncHistos("Bckg"+title[4]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1661 fFFNBinsPt, fFFPtMin, fFFPtMax,
1662 fFFNBinsXi, fFFXiMin, fFFXiMax,
1663 fFFNBinsZ , fFFZMin , fFFZMax);
1665 fFFBckgHisto4Gen = new AliFragFuncHistos("Bckg"+title[4]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1666 fFFNBinsPt, fFFPtMin, fFFPtMax,
1667 fFFNBinsXi, fFFXiMin, fFFXiMax,
1668 fFFNBinsZ , fFFZMin , fFFZMax);
1671 fFFBckgHisto0RecEffRec = new AliFragFuncHistos("Bckg"+title[0]+"RecEffRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1672 fFFNBinsPt, fFFPtMin, fFFPtMax,
1673 fFFNBinsXi, fFFXiMin, fFFXiMax,
1674 fFFNBinsZ , fFFZMin , fFFZMax);
1676 fFFBckgHisto0SecRecNS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecNS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1677 fFFNBinsPt, fFFPtMin, fFFPtMax,
1678 fFFNBinsXi, fFFXiMin, fFFXiMax,
1679 fFFNBinsZ , fFFZMin , fFFZMax);
1681 fFFBckgHisto0SecRecS = new AliFragFuncHistos("Bckg"+title[0]+"SecRecS", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1682 fFFNBinsPt, fFFPtMin, fFFPtMax,
1683 fFFNBinsXi, fFFXiMin, fFFXiMax,
1684 fFFNBinsZ , fFFZMin , fFFZMax);
1686 fFFBckgHisto0SecRecSsc = new AliFragFuncHistos("Bckg"+title[0]+"SecRecSsc", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1687 fFFNBinsPt, fFFPtMin, fFFPtMax,
1688 fFFNBinsXi, fFFXiMin, fFFXiMax,
1689 fFFNBinsZ , fFFZMin , fFFZMax);
1692 } // end: background FF
1695 } // end: background
1698 // ____________ define histograms ____________________
1701 if(fQAMode&1){ // track QA
1702 fQATrackHistosRecCuts->DefineHistos();
1703 fQATrackHistosGen->DefineHistos();
1706 if(fQAMode&2){ // jet QA
1707 fQAJetHistosRec->DefineHistos();
1708 fQAJetHistosRecCuts->DefineHistos();
1709 fQAJetHistosRecCutsLeading->DefineHistos();
1710 fQAJetHistosGen->DefineHistos();
1711 fQAJetHistosGenLeading->DefineHistos();
1712 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
1717 fFFHistosRecCuts->DefineHistos();
1718 fFFHistosGen->DefineHistos();
1723 fQATrackHistosRecEffGen->DefineHistos();
1724 fQATrackHistosRecEffRec->DefineHistos();
1725 fQATrackHistosSecRecNS->DefineHistos();
1726 fQATrackHistosSecRecS->DefineHistos();
1727 fQATrackHistosSecRecSsc->DefineHistos();
1730 fFFHistosRecEffRec->DefineHistos();
1731 fFFHistosSecRecNS->DefineHistos();
1732 fFFHistosSecRecS->DefineHistos();
1733 fFFHistosSecRecSsc->DefineHistos();
1735 } // end: efficiency
1740 fFFBckgHisto0RecCuts->DefineHistos();
1741 fFFBckgHisto0Gen->DefineHistos();
1742 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->DefineHistos();
1743 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->DefineHistos();
1744 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->DefineHistos();
1745 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->DefineHistos();
1746 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->DefineHistos();
1747 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->DefineHistos();
1748 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->DefineHistos();
1749 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->DefineHistos();
1752 fFFBckgHisto0RecEffRec->DefineHistos();
1753 fFFBckgHisto0SecRecNS->DefineHistos();
1754 fFFBckgHisto0SecRecS->DefineHistos();
1755 fFFBckgHisto0SecRecSsc->DefineHistos();
1760 fQABckgHisto0RecCuts->DefineHistos();
1761 fQABckgHisto0Gen->DefineHistos();
1762 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->DefineHistos();
1763 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->DefineHistos();
1764 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->DefineHistos();
1765 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->DefineHistos();
1766 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->DefineHistos();
1767 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->DefineHistos();
1768 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->DefineHistos();
1769 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->DefineHistos();
1771 } // end: background
1774 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
1775 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
1776 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
1778 fCommonHistList->Add(fh1EvtSelection);
1779 fCommonHistList->Add(fh1EvtMult);
1780 fCommonHistList->Add(fh1EvtCent);
1781 fCommonHistList->Add(fh1VertexNContributors);
1782 fCommonHistList->Add(fh1VertexZ);
1783 fCommonHistList->Add(fh1nRecJetsCuts);
1784 fCommonHistList->Add(fh1Xsec);
1785 fCommonHistList->Add(fh1Trials);
1786 fCommonHistList->Add(fh1PtHard);
1787 fCommonHistList->Add(fh1PtHardTrials);
1789 if(genJets) fCommonHistList->Add(fh1nGenJets);
1793 fFFHistosRecCuts->AddToOutput(fCommonHistList);
1794 if(genJets && genTracks){
1795 fFFHistosGen->AddToOutput(fCommonHistList);
1802 fFFBckgHisto0RecCuts->AddToOutput(fCommonHistList);
1803 if(fBckgType[1] != kBckgNone) fFFBckgHisto1RecCuts->AddToOutput(fCommonHistList);
1804 if(fBckgType[2] != kBckgNone) fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
1805 if(fBckgType[3] != kBckgNone) fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
1806 if(fBckgType[4] != kBckgNone) fFFBckgHisto4RecCuts->AddToOutput(fCommonHistList);
1808 if(genJets && genTracks){
1809 fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
1810 if(fBckgType[1] != kBckgNone) fFFBckgHisto1Gen->AddToOutput(fCommonHistList);
1811 if(fBckgType[2] != kBckgNone) fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
1812 if(fBckgType[3] != kBckgNone) fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
1813 if(fBckgType[4] != kBckgNone) fFFBckgHisto4Gen->AddToOutput(fCommonHistList);
1817 fFFBckgHisto0RecEffRec->AddToOutput(fCommonHistList);
1818 fFFBckgHisto0SecRecNS->AddToOutput(fCommonHistList);
1819 fFFBckgHisto0SecRecS->AddToOutput(fCommonHistList);
1820 fFFBckgHisto0SecRecSsc->AddToOutput(fCommonHistList);
1825 fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
1826 if(fBckgType[1] != kBckgNone) fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
1827 if(fBckgType[2] != kBckgNone) fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
1828 if(fBckgType[3] != kBckgNone) fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
1829 if(fBckgType[4] != kBckgNone) fQABckgHisto4RecCuts->AddToOutput(fCommonHistList);
1830 if(genJets && genTracks){
1831 fQABckgHisto0Gen->AddToOutput(fCommonHistList);
1832 if(fBckgType[1] != kBckgNone) fQABckgHisto1Gen->AddToOutput(fCommonHistList);
1833 if(fBckgType[2] != kBckgNone) fQABckgHisto2Gen->AddToOutput(fCommonHistList);
1834 if(fBckgType[3] != kBckgNone) fQABckgHisto3Gen->AddToOutput(fCommonHistList);
1835 if(fBckgType[4] != kBckgNone) fQABckgHisto4Gen->AddToOutput(fCommonHistList);
1839 if(fh1BckgMult0) fCommonHistList->Add(fh1BckgMult0);
1840 if(fBckgType[1] != kBckgNone) fCommonHistList->Add(fh1BckgMult1);
1841 if(fBckgType[2] != kBckgNone) fCommonHistList->Add(fh1BckgMult2);
1842 if(fBckgType[3] != kBckgNone) fCommonHistList->Add(fh1BckgMult3);
1843 if(fBckgType[4] != kBckgNone) fCommonHistList->Add(fh1BckgMult4);
1847 if(fBranchEmbeddedJets.Length()){
1848 fCommonHistList->Add(fh1FractionPtEmbedded);
1849 fCommonHistList->Add(fh1IndexEmbedded);
1850 fCommonHistList->Add(fh2DeltaPtVsJetPtEmbedded);
1851 fCommonHistList->Add(fh2DeltaPtVsRecJetPtEmbedded);
1852 fCommonHistList->Add(fh1DeltaREmbedded);
1853 fCommonHistList->Add(fh1nEmbeddedJets);
1859 if(fQAMode&1){ // track QA
1860 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
1861 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
1864 if(fQAMode&2){ // jet QA
1865 fQAJetHistosRec->AddToOutput(fCommonHistList);
1866 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
1867 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
1868 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
1870 fQAJetHistosGen->AddToOutput(fCommonHistList);
1871 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
1877 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
1878 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
1879 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)) {
1880 fCommonHistList->Add(fh1nRecBckgJetsCuts);
1881 if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
1885 if(fEffMode && recJetsEff && genTracks){
1887 fQATrackHistosRecEffGen->AddToOutput(fCommonHistList);
1888 fQATrackHistosRecEffRec->AddToOutput(fCommonHistList);
1889 fQATrackHistosSecRecNS->AddToOutput(fCommonHistList);
1890 fQATrackHistosSecRecS->AddToOutput(fCommonHistList);
1891 fQATrackHistosSecRecSsc->AddToOutput(fCommonHistList);
1894 fFFHistosRecEffRec->AddToOutput(fCommonHistList);
1895 fFFHistosSecRecNS->AddToOutput(fCommonHistList);
1896 fFFHistosSecRecS->AddToOutput(fCommonHistList);
1897 fFFHistosSecRecSsc->AddToOutput(fCommonHistList);
1899 fCommonHistList->Add(fh1nRecEffJets);
1900 fCommonHistList->Add(fh2PtRecVsGenPrim);
1901 fCommonHistList->Add(fh2PtRecVsGenSec);
1907 fProNtracksLeadingJet = new TProfile("AvgNoOfTracksLeadingJet","AvgNoOfTracksLeadingJet",100,0,250,0,50);
1908 fProDelR80pcPt = new TProfile("AvgdelR80pcPt","AvgdelR80pcPt",100,0,250,0,1);
1910 if(genJets && genTracks){
1911 fProNtracksLeadingJetGen = new TProfile("AvgNoOfTracksLeadingJetGen","AvgNoOfTracksLeadingJetGen",100,0,250,0,50);
1912 fProDelR80pcPtGen = new TProfile("AvgdelR80pcPtGen","AvgdelR80pcPtGen",100,0,250,0,1);
1916 fProNtracksLeadingJetBgrPerp2 = new TProfile("AvgNoOfTracksLeadingJetBgrPerp2","AvgNoOfTracksLeadingJetBgrPerp2",100,0,250,0,50);
1919 fProNtracksLeadingJetRecPrim = new TProfile("AvgNoOfTracksLeadingJetRecPrim","AvgNoOfTracksLeadingJetRecPrim",100,0,250,0,50);
1920 fProDelR80pcPtRecPrim = new TProfile("AvgdelR80pcPtRecPrim","AvgdelR80pcPtRecPrim",100,0,250,0,1);
1921 fProNtracksLeadingJetRecSecNS = new TProfile("AvgNoOfTracksLeadingJetRecSecNS","AvgNoOfTracksLeadingJetRecSecNS",100,0,250,0,50);
1922 fProNtracksLeadingJetRecSecS = new TProfile("AvgNoOfTracksLeadingJetRecSecS","AvgNoOfTracksLeadingJetRecSecS",100,0,250,0,50);
1923 fProNtracksLeadingJetRecSecSsc = new TProfile("AvgNoOfTracksLeadingJetRecSecSsc","AvgNoOfTracksLeadingJetRecSecSsc",100,0,250,0,50);
1927 for(Int_t ii=0; ii<5; ii++){
1928 if(ii==0)strTitJS = "_JetPt20to30";
1929 if(ii==1)strTitJS = "_JetPt30to40";
1930 if(ii==2)strTitJS = "_JetPt40to60";
1931 if(ii==3)strTitJS = "_JetPt60to80";
1932 if(ii==4)strTitJS = "_JetPt80to100";
1934 fProDelRPtSum[ii] = new TProfile(Form("AvgPtSumDelR%s",strTitJS.Data()),Form("AvgPtSumDelR%s",strTitJS.Data()),100,0,1,0,250);
1935 if(genJets && genTracks)
1936 fProDelRPtSumGen[ii] = new TProfile(Form("AvgPtSumDelRGen%s",strTitJS.Data()),Form("AvgPtSumDelRGen%s",strTitJS.Data()),100,0,1,0,250);
1938 fProDelRPtSumBgrPerp2[ii] = new TProfile(Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),Form("AvgPtSumDelRBgrPerp2%s",strTitJS.Data()),100,0,1,0,250);
1940 fProDelRPtSumRecPrim[ii] = new TProfile(Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),Form("AvgPtSumDelRRecPrim%s",strTitJS.Data()),100,0,1,0,250);
1941 fProDelRPtSumRecSecNS[ii] = new TProfile(Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecNS%s",strTitJS.Data()),100,0,1,0,250);
1942 fProDelRPtSumRecSecS[ii] = new TProfile(Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecS%s",strTitJS.Data()),100,0,1,0,250);
1943 fProDelRPtSumRecSecSsc[ii] = new TProfile(Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),Form("AvgPtSumDelRRecSecSsc%s",strTitJS.Data()),100,0,1,0,250);
1947 fCommonHistList->Add(fProNtracksLeadingJet);
1948 fCommonHistList->Add(fProDelR80pcPt);
1949 for(int ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSum[ii]);
1951 if(genJets && genTracks){
1952 fCommonHistList->Add(fProNtracksLeadingJetGen);
1953 fCommonHistList->Add(fProDelR80pcPtGen);
1954 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumGen[ii]);
1958 fCommonHistList->Add(fProNtracksLeadingJetBgrPerp2);
1959 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumBgrPerp2[ii]);
1963 fCommonHistList->Add(fProNtracksLeadingJetRecPrim);
1964 fCommonHistList->Add(fProDelR80pcPtRecPrim);
1965 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecPrim[ii]);
1967 fCommonHistList->Add(fProNtracksLeadingJetRecSecNS);
1968 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecNS[ii]);
1970 fCommonHistList->Add(fProNtracksLeadingJetRecSecS);
1971 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecS[ii]);
1973 fCommonHistList->Add(fProNtracksLeadingJetRecSecSsc);
1974 for(Int_t ii=0; ii<5; ii++) fCommonHistList->Add(fProDelRPtSumRecSecSsc[ii]);
1978 // =========== Switch on Sumw2 for all histos ===========
1979 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
1980 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
1981 if (h1) h1->Sumw2();
1983 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
1984 if(hnSparse) hnSparse->Sumw2();
1988 TH1::AddDirectory(oldStatus);
1990 PostData(1, fCommonHistList);
1993 //_______________________________________________
1994 void AliAnalysisTaskFragmentationFunction::Init()
1997 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
2001 //_____________________________________________________________
2002 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
2005 // Called for each event
2006 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
2009 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
2011 // Trigger selection
2012 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
2013 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
2015 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
2016 fh1EvtSelection->Fill(1.);
2017 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
2018 PostData(1, fCommonHistList);
2022 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
2024 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
2027 fMCEvent = MCEvent();
2029 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
2032 // get AOD event from input/ouput
2033 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2034 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
2035 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
2036 if(fUseAODInputJets) fAODJets = fAOD;
2037 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
2040 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2041 if( handler && handler->InheritsFrom("AliAODHandler") ) {
2042 fAOD = ((AliAODHandler*)handler)->GetAOD();
2044 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
2048 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
2049 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2050 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
2051 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
2052 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
2056 if(fNonStdFile.Length()!=0){
2057 // case we have an AOD extension - fetch the jets from the extended output
2059 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
2060 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
2062 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
2067 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
2071 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
2076 // event selection **************************************************
2077 // *** event class ***
2078 Double_t centPercent = -1;
2081 if(handler->InheritsFrom("AliAODInputHandler")){
2082 // since it is not supported by the helper task define own classes
2083 centPercent = fAOD->GetHeader()->GetCentrality();
2085 if(centPercent>10) cl = 2;
2086 if(centPercent>30) cl = 3;
2087 if(centPercent>50) cl = 4;
2090 cl = AliAnalysisHelperJetTasks::EventClass();
2091 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
2094 if(cl!=fEventClass){
2095 // event not in selected event class, reject event
2096 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
2097 fh1EvtSelection->Fill(2.);
2098 PostData(1, fCommonHistList);
2103 // *** vertex cut ***
2104 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
2105 Int_t nTracksPrim = primVtx->GetNContributors();
2106 fh1VertexNContributors->Fill(nTracksPrim);
2109 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
2111 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
2112 fh1EvtSelection->Fill(3.);
2113 PostData(1, fCommonHistList);
2117 fh1VertexZ->Fill(primVtx->GetZ());
2119 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
2120 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2121 fh1EvtSelection->Fill(4.);
2122 PostData(1, fCommonHistList);
2126 TString primVtxName(primVtx->GetName());
2128 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
2129 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
2130 fh1EvtSelection->Fill(5.);
2131 PostData(1, fCommonHistList);
2135 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
2136 fh1EvtSelection->Fill(0.);
2137 fh1EvtCent->Fill(centPercent);
2140 //___ get MC information __________________________________________________________________
2142 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2144 Double_t ptHard = 0.;
2145 Double_t nTrials = 1; // trials for MC trigger weight for real data
2148 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2152 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2153 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2155 if(pythiaGenHeader){
2156 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
2157 nTrials = pythiaGenHeader->Trials();
2158 ptHard = pythiaGenHeader->GetPtHard();
2160 fh1PtHard->Fill(ptHard);
2161 fh1PtHardTrials->Fill(ptHard,nTrials);
2163 } else { // no pythia, hijing?
2165 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
2167 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2168 if(!hijingGenHeader){
2169 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
2171 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
2175 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
2179 //___ fetch jets __________________________________________________________________________
2181 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
2183 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
2184 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2185 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2187 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
2188 Int_t nRecJetsCuts = 0;
2189 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
2190 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2191 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2192 fh1nRecJetsCuts->Fill(nRecJetsCuts);
2194 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2196 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
2198 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
2199 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2201 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2202 fh1nGenJets->Fill(nGenJets);
2205 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2206 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
2207 Int_t nRecEffJets = 0;
2208 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
2209 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2210 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2211 fh1nRecEffJets->Fill(nRecEffJets);
2214 Int_t nEmbeddedJets = 0;
2215 TArrayI iEmbeddedMatchIndex;
2216 TArrayF fEmbeddedPtFraction;
2219 if(fBranchEmbeddedJets.Length()){
2220 Int_t nJEmbedded = GetListOfJets(fJetsEmbedded, kJetsEmbedded);
2221 if(nJEmbedded>=0) nEmbeddedJets = fJetsEmbedded->GetEntries();
2222 if(fDebug>2)Printf("%s:%d Selected Embedded jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2223 if(nJEmbedded != nEmbeddedJets) Printf("%s:%d Mismatch Selected Embedded Jets: %d %d",(char*)__FILE__,__LINE__,nJEmbedded,nEmbeddedJets);
2224 fh1nEmbeddedJets->Fill(nEmbeddedJets);
2226 Float_t maxDist = 0.3;
2228 iEmbeddedMatchIndex.Set(nEmbeddedJets);
2229 fEmbeddedPtFraction.Set(nEmbeddedJets);
2231 iEmbeddedMatchIndex.Reset(-1);
2232 fEmbeddedPtFraction.Reset(0);
2234 AliAnalysisHelperJetTasks::GetJetMatching(fJetsEmbedded, nEmbeddedJets,
2235 fJetsRecCuts, nRecJetsCuts,
2236 iEmbeddedMatchIndex, fEmbeddedPtFraction,
2241 //____ fetch background clusters ___________________________________________________
2243 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2244 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2245 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2247 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
2248 Int_t nRecBckgJets = 0;
2249 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
2250 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2251 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2253 Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
2254 Int_t nRecBckgJetsCuts = 0;
2255 if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
2256 if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2257 if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
2258 fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
2260 if(0){ // protection OB - not yet implemented
2261 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2262 Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
2263 Int_t nGenBckgJets = 0;
2264 if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
2265 if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2266 if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
2267 fh1nGenBckgJets->Fill(nGenBckgJets);
2272 //____ fetch particles __________________________________________________________
2275 if(fUseExtraTracks == 1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraCuts);
2276 else if(fUseExtraTracks == -1) nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODExtraonlyCuts);
2277 else nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
2279 Int_t nRecPartCuts = 0;
2280 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
2281 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2282 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2283 fh1EvtMult->Fill(nRecPartCuts);
2286 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
2288 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
2289 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2290 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2293 //____ analysis, fill histos ___________________________________________________
2298 for(Int_t it=0; it<nRecPartCuts; ++it){
2299 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
2300 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
2302 for(Int_t it=0; it<nGenPart; ++it){
2303 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
2304 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2310 for(Int_t ij=0; ij<nRecJets; ++ij){
2311 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
2312 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2317 if(fQAMode || fFFMode){
2318 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
2320 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
2321 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2323 if(ij==0){ // leading jet
2325 if(fQAMode&2) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
2327 Double_t ptFractionEmbedded = 0;
2328 AliAODJet* embeddedJet = 0;
2330 if(fBranchEmbeddedJets.Length()){ // find embedded jet
2332 Int_t indexEmbedded = -1;
2333 for(Int_t i=0; i<nEmbeddedJets; i++){
2334 if(iEmbeddedMatchIndex[i] == ij){
2336 ptFractionEmbedded = fEmbeddedPtFraction[i];
2340 fh1IndexEmbedded->Fill(indexEmbedded);
2341 fh1FractionPtEmbedded->Fill(ptFractionEmbedded);
2343 if(indexEmbedded>-1){
2345 embeddedJet = dynamic_cast<AliAODJet*>(fJetsEmbedded->At(indexEmbedded));
2346 if(!embeddedJet) continue;
2348 Double_t deltaPt = jet->Pt() - embeddedJet->Pt();
2349 Double_t deltaR = jet->DeltaR((AliVParticle*) (embeddedJet));
2351 fh2DeltaPtVsJetPtEmbedded->Fill(embeddedJet->Pt(),deltaPt);
2352 fh2DeltaPtVsRecJetPtEmbedded->Fill(jet->Pt(),deltaPt);
2353 fh1DeltaREmbedded->Fill(deltaR);
2357 // get tracks in jet
2358 TList* jettracklist = new TList();
2359 Double_t sumPt = 0.;
2360 Bool_t isBadJet = kFALSE;
2362 if(GetFFRadius()<=0){
2363 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2365 if(fUseEmbeddedJetAxis){
2366 if(embeddedJet) GetJetTracksPointing(fTracksRecCuts, jettracklist, embeddedJet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2368 else GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2371 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
2373 if(isBadJet) continue;
2375 if(ptFractionEmbedded>=fCutFractionPtEmbedded){ // if no embedding: ptFraction = cutFraction = 0
2377 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2379 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
2380 if(!trackVP)continue;
2382 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
2383 if(!aodtrack) continue;
2385 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
2387 Float_t jetPt = jet->Pt();
2388 if(fUseEmbeddedJetPt){
2389 if(embeddedJet) jetPt = embeddedJet->Pt();
2392 Float_t trackPt = trackV->Pt();
2395 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2397 if(fFFMode) fFFHistosRecCuts->FillFF(trackPt, jetPt, incrementJetPt);
2404 if(fBckgType[0]!=kBckgNone)
2405 FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet,
2406 fFFBckgHisto0RecCuts,fQABckgHisto0RecCuts, fh1BckgMult0);
2407 if(fBckgType[1]!=kBckgNone)
2408 FillBckgHistos(fBckgType[1], fTracksRecCuts, fJetsRecCuts, jet,
2409 fFFBckgHisto1RecCuts,fQABckgHisto1RecCuts, fh1BckgMult1);
2410 if(fBckgType[2]!=kBckgNone)
2411 FillBckgHistos(fBckgType[2], fTracksRecCuts, fJetsRecCuts, jet,
2412 fFFBckgHisto2RecCuts,fQABckgHisto2RecCuts, fh1BckgMult2);
2413 if(fBckgType[3]!=kBckgNone)
2414 FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet,
2415 fFFBckgHisto3RecCuts,fQABckgHisto3RecCuts, fh1BckgMult3);
2416 if(fBckgType[4]!=kBckgNone)
2417 FillBckgHistos(fBckgType[4], fTracksRecCuts, fJetsRecCuts, jet,
2418 fFFBckgHisto4RecCuts,fQABckgHisto4RecCuts, fh1BckgMult4);
2419 } // end if(fBckgMode)
2422 if(fJSMode) FillJetShape(jet, jettracklist, fProNtracksLeadingJet, fProDelRPtSum, fProDelR80pcPt);
2424 delete jettracklist;
2426 } // end: cut embedded ratio
2427 } // end: leading jet
2428 } // end: rec. jets after cuts
2431 for(Int_t ij=0; ij<nGenJets; ++ij){
2433 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
2435 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2437 if(ij==0){ // leading jet
2439 if(fQAMode&2) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2441 TList* jettracklist = new TList();
2442 Double_t sumPt = 0.;
2443 Bool_t isBadJet = kFALSE;
2445 if(GetFFRadius()<=0){
2446 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2448 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
2451 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
2452 if(isBadJet) continue;
2454 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2456 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
2457 if(!trackVP)continue;
2458 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
2460 Float_t jetPt = jet->Pt();
2461 Float_t trackPt = trackV->Pt();
2463 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2465 if(fFFMode) fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt );
2471 if(fBckgType[0]!=kBckgNone)
2472 FillBckgHistos(fBckgType[0], fTracksGen, fJetsGen, jet,
2473 fFFBckgHisto0Gen, fQABckgHisto0Gen);
2474 if(fBckgType[1]!=kBckgNone)
2475 FillBckgHistos(fBckgType[1], fTracksGen, fJetsGen, jet,
2476 fFFBckgHisto1Gen, fQABckgHisto1Gen);
2477 if(fBckgType[2]!=kBckgNone)
2478 FillBckgHistos(fBckgType[2], fTracksGen, fJetsGen, jet,
2479 fFFBckgHisto2Gen, fQABckgHisto2Gen);
2480 if(fBckgType[3]!=kBckgNone)
2481 FillBckgHistos(fBckgType[3], fTracksGen, fJetsGen, jet,
2482 fFFBckgHisto3Gen, fQABckgHisto3Gen);
2483 if(fBckgType[4]!=kBckgNone)
2484 FillBckgHistos(fBckgType[4], fTracksGen, fJetsGen, jet,
2485 fFFBckgHisto4Gen, fQABckgHisto4Gen);
2486 } // end if(fBckgMode)
2489 if(fJSMode) FillJetShape(jet, jettracklist, fProNtracksLeadingJetGen, fProDelRPtSumGen, fProDelR80pcPtGen);
2491 delete jettracklist;
2494 } // end: QA, FF and intra-jet
2497 // ____ efficiency _______________________________
2499 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
2501 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
2505 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
2508 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
2509 TArrayI indexAODTrSecNS;
2511 TArrayI indexMCTrSecNS;
2513 TArrayI indexAODTrSecS;
2515 TArrayI indexMCTrSecS;
2517 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
2518 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
2520 Int_t nTracksAODMCChargedSecNS = GetListOfTracks(fTracksAODMCChargedSecNS, kTrackAODMCChargedSecNS);
2521 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecNS);
2523 Int_t nTracksAODMCChargedSecS = GetListOfTracks(fTracksAODMCChargedSecS, kTrackAODMCChargedSecS);
2524 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks S: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSecS);
2526 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
2527 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
2529 // associate gen and rec tracks, store indices in TArrays
2530 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
2531 AssociateGenRec(fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,indexMCTrSecNS,isGenSecNS,fh2PtRecVsGenSec);
2532 AssociateGenRec(fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,indexMCTrSecS,isGenSecS,fh2PtRecVsGenSec);
2535 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
2538 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecNS,fTracksAODMCChargedSecNS,indexAODTrSecNS,isGenSecNS);
2539 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecS,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS);
2540 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecSsc,fTracksAODMCChargedSecS,indexAODTrSecS,isGenSecS,kTRUE);
2544 Double_t sumPtGenLeadingJetRecEff = 0;
2545 Double_t sumPtGenLeadingJetSec = 0;
2546 Double_t sumPtRecLeadingJetRecEff = 0;
2548 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
2550 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
2552 Bool_t isBadJetGenPrim = kFALSE;
2553 Bool_t isBadJetGenSec = kFALSE;
2554 Bool_t isBadJetRec = kFALSE;
2557 if(ij==0){ // leading jet
2559 // for efficiency: gen tracks from pointing with gen/rec jet
2560 TList* jettracklistGenPrim = new TList();
2562 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
2563 // note : FF recEff gen histos will be somewhat useless in this approach
2565 if(GetFFRadius() >0)
2566 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
2568 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
2570 TList* jettracklistGenSecNS = new TList();
2571 if(GetFFRadius() >0)
2572 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2574 GetJetTracksPointing(fTracksAODMCChargedSecNS, jettracklistGenSecNS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2576 TList* jettracklistGenSecS = new TList();
2577 if(GetFFRadius() >0)
2578 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2580 GetJetTracksPointing(fTracksAODMCChargedSecS, jettracklistGenSecS, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2583 // bin efficiency in jet pt bins using rec tracks
2584 TList* jettracklistRec = new TList();
2585 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2586 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2589 Double_t jetEta = jet->Eta();
2590 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
2592 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
2593 if(GetFFMinNTracks()>0 && jettracklistGenSecNS->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
2594 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
2596 if(isBadJetRec) continue;
2598 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
2602 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
2603 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
2604 0,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
2606 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,
2607 jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,
2608 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecPrim,fProDelRPtSumRecPrim,fProDelR80pcPtRecPrim);
2611 // secondaries: use jet pt from primaries
2612 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
2613 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts, indexAODTrSecNS,isGenSecNS,
2614 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
2616 else FillJetTrackHistosRec(fFFHistosSecRecNS,jet,
2617 jettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS,
2618 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecNS,fProDelRPtSumRecSecNS);
2620 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecS,jet,
2621 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
2622 0,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
2624 else FillJetTrackHistosRec(fFFHistosSecRecS,jet,
2625 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
2626 jettracklistRec,kFALSE,fJSMode,fProNtracksLeadingJetRecSecS,fProDelRPtSumRecSecS);
2628 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
2629 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
2630 0,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
2632 else FillJetTrackHistosRec(fFFHistosSecRecSsc,jet,
2633 jettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,
2634 jettracklistRec,kTRUE,fJSMode,fProNtracksLeadingJetRecSecSsc,fProDelRPtSumRecSecSsc);
2637 delete jettracklistGenPrim;
2638 delete jettracklistGenSecNS;
2639 delete jettracklistGenSecS;
2640 delete jettracklistRec;
2643 if(fBckgMode && fFFMode){
2645 TList* perpjettracklistGen = new TList();
2646 TList* perpjettracklistGen1 = new TList();
2647 TList* perpjettracklistGen2 = new TList();
2649 Double_t sumPtGenPerp = 0.;
2650 Double_t sumPtGenPerp1 = 0.;
2651 Double_t sumPtGenPerp2 = 0.;
2652 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerp1);
2653 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCCharged, perpjettracklistGen2, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerp2);
2655 perpjettracklistGen->AddAll(perpjettracklistGen1);
2656 perpjettracklistGen->AddAll(perpjettracklistGen2);
2657 sumPtGenPerp = 0.5*(sumPtGenPerp1+sumPtGenPerp2);
2659 TList* perpjettracklistGenSecNS = new TList();
2660 TList* perpjettracklistGenSecNS1 = new TList();
2661 TList* perpjettracklistGenSecNS2 = new TList();
2663 Double_t sumPtGenPerpNS;
2664 Double_t sumPtGenPerpNS1;
2665 Double_t sumPtGenPerpNS2;
2666 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpNS1);
2667 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecNS, perpjettracklistGenSecNS2, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpNS2);
2669 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS1);
2670 perpjettracklistGenSecNS->AddAll(perpjettracklistGenSecNS2);
2671 sumPtGenPerpNS = 0.5*(sumPtGenPerpNS1+sumPtGenPerpNS2);
2674 TList* perpjettracklistGenSecS = new TList();
2675 TList* perpjettracklistGenSecS1 = new TList();
2676 TList* perpjettracklistGenSecS2 = new TList();
2678 Double_t sumPtGenPerpS;
2679 Double_t sumPtGenPerpS1;
2680 Double_t sumPtGenPerpS2;
2681 GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS1, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpS1);
2682 GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2.,fTracksAODMCChargedSecS, perpjettracklistGenSecS2, jet, TMath::Abs(GetFFRadius()) , sumPtGenPerpS2);
2684 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS1);
2685 perpjettracklistGenSecS->AddAll(perpjettracklistGenSecS2);
2686 sumPtGenPerpS = 0.5*(sumPtGenPerpS1+sumPtGenPerpS2);
2689 if(perpjettracklistGen->GetSize() != perpjettracklistGen1->GetSize() + perpjettracklistGen2->GetSize()){
2690 cout<<" ERROR: perpjettracklistGen size "<<perpjettracklistGen->GetSize()<<" perp1 "<<perpjettracklistGen1->GetSize()
2691 <<" perp2 "<<perpjettracklistGen2->GetSize()<<endl;
2695 if(perpjettracklistGenSecNS->GetSize() != perpjettracklistGenSecNS1->GetSize() + perpjettracklistGenSecNS2->GetSize()){
2696 cout<<" ERROR: perpjettracklistGenSecNS size "<<perpjettracklistGenSecNS->GetSize()<<" perp1 "<<perpjettracklistGenSecNS1->GetSize()
2697 <<" perp2 "<<perpjettracklistGenSecNS2->GetSize()<<endl;
2701 if(perpjettracklistGenSecS->GetSize() != perpjettracklistGenSecS1->GetSize() + perpjettracklistGenSecS2->GetSize()){
2702 cout<<" ERROR: perpjettracklistGenSecS size "<<perpjettracklistGenSecS->GetSize()<<" perp1 "<<perpjettracklistGenSecS1->GetSize()
2703 <<" perp2 "<<perpjettracklistGenSecS2->GetSize()<<endl;
2708 FillJetTrackHistosRec(fFFBckgHisto0RecEffRec,jet,
2709 perpjettracklistGen,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
2711 FillJetTrackHistosRec(fFFBckgHisto0SecRecNS,jet,
2712 perpjettracklistGenSecNS,fTracksAODMCChargedSecNS,fTracksRecQualityCuts,indexAODTrSecNS,isGenSecNS);
2714 FillJetTrackHistosRec(fFFBckgHisto0SecRecS,jet,
2715 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS);
2717 FillJetTrackHistosRec(fFFBckgHisto0SecRecSsc,jet,
2718 perpjettracklistGenSecS,fTracksAODMCChargedSecS,fTracksRecQualityCuts,indexAODTrSecS,isGenSecS,0,kTRUE);
2721 delete perpjettracklistGen;
2722 delete perpjettracklistGen1;
2723 delete perpjettracklistGen2;
2725 delete perpjettracklistGenSecNS;
2726 delete perpjettracklistGenSecNS1;
2727 delete perpjettracklistGenSecNS2;
2729 delete perpjettracklistGenSecS;
2730 delete perpjettracklistGenSecS1;
2731 delete perpjettracklistGenSecS2;
2738 //___________________
2740 fTracksRecCuts->Clear();
2741 fTracksGen->Clear();
2742 fTracksAODMCCharged->Clear();
2743 fTracksAODMCChargedSecNS->Clear();
2744 fTracksAODMCChargedSecS->Clear();
2745 fTracksRecQualityCuts->Clear();
2748 fJetsRecCuts->Clear();
2750 fJetsRecEff->Clear();
2751 fJetsEmbedded->Clear();
2755 (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters ||
2756 fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading ||
2757 fBckgType[3]==kBckgClustersOutLeading || fBckgType[4]==kBckgClustersOutLeading)){
2759 fBckgJetsRec->Clear();
2760 fBckgJetsRecCuts->Clear();
2761 fBckgJetsGen->Clear();
2766 PostData(1, fCommonHistList);
2769 //______________________________________________________________
2770 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
2774 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
2777 //_________________________________________________________________________________
2778 Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
2780 // fill list of tracks selected according to type
2782 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
2785 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2789 if(!fAOD) return -1;
2791 if(!fAOD->GetTracks()) return 0;
2793 if(type==kTrackUndef) return 0;
2797 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts || type==kTrackAODExtra || type==kTrackAODExtraonly){
2799 TClonesArray *aodExtraTracks = dynamic_cast<TClonesArray*>(fAOD->FindListObject("aodExtraTracks"));
2800 if(!aodExtraTracks)return iCount;
2801 for(int it =0; it<aodExtraTracks->GetEntries(); it++) {
2802 AliVParticle *track = dynamic_cast<AliVParticle*> ((*aodExtraTracks)[it]);
2803 if (!track) continue;
2805 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (track);
2808 if(type==kTrackAODExtraCuts || type==kTrackAODExtraonlyCuts){
2810 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2812 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2813 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2814 if(tr->Pt() < fTrackPtCut) continue;
2822 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD || type==kTrackAODExtraCuts || type==kTrackAODExtra){
2824 // all rec. tracks, esd filter mask, eta range
2826 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
2827 AliAODTrack *tr = fAOD->GetTrack(it);
2829 if(type == kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAODExtraCuts){
2831 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2832 if(type == kTrackAODCuts){
2833 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2834 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2835 if(tr->Pt() < fTrackPtCut) continue;
2842 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2843 // kine particles, all or rather charged
2844 if(!fMCEvent) return iCount;
2846 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2847 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2849 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2850 if(part->Charge()==0) continue;
2852 if(type == kTrackKineChargedAcceptance &&
2853 ( part->Eta() < fTrackEtaMin
2854 || part->Eta() > fTrackEtaMax
2855 || part->Phi() < fTrackPhiMin
2856 || part->Phi() > fTrackPhiMax
2857 || part->Pt() < fTrackPtCut)) continue;
2864 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS) {
2865 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2866 if(!fAOD) return -1;
2868 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2869 if(!tca)return iCount;
2871 for(int it=0; it<tca->GetEntriesFast(); ++it){
2872 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2874 if(type != kTrackAODMCChargedSecNS && type != kTrackAODMCChargedSecS && !part->IsPhysicalPrimary())continue;
2875 if((type == kTrackAODMCChargedSecNS || type == kTrackAODMCChargedSecS) && part->IsPhysicalPrimary())continue;
2877 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
2878 if(part->Charge()==0) continue;
2880 if(type==kTrackAODMCChargedSecNS || type==kTrackAODMCChargedSecS){
2881 Bool_t isFromStrange = kFALSE;
2882 Int_t iMother = part->GetMother();
2884 AliAODMCParticle *partM = dynamic_cast<AliAODMCParticle*>(tca->At(iMother));
2885 if(!partM) continue;
2887 Int_t codeM = TMath::Abs(partM->GetPdgCode());
2888 Int_t mfl = Int_t (codeM/ TMath::Power(10, Int_t(TMath::Log10(codeM))));
2889 if (mfl == 3 && codeM != 3) isFromStrange = kTRUE;
2892 // cout<<" mfl "<<mfl<<" codeM "<<partM->GetPdgCode()<<" code this track "<<part->GetPdgCode()<<endl;
2893 // cout<<" index this track "<<it<<" index daughter 0 "<<partM->GetDaughter(0)<<" 1 "<<partM->GetDaughter(1)<<endl;
2896 if(type==kTrackAODMCChargedSecNS && isFromStrange) continue;
2897 if(type==kTrackAODMCChargedSecS && !isFromStrange) continue;
2901 if(type==kTrackAODMCChargedAcceptance &&
2902 ( part->Eta() > fTrackEtaMax
2903 || part->Eta() < fTrackEtaMin
2904 || part->Phi() > fTrackPhiMax
2905 || part->Phi() < fTrackPhiMin
2906 || part->Pt() < fTrackPtCut)) continue;
2918 // _______________________________________________________________________________
2919 Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
2921 // fill list of jets selected according to type
2924 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2928 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
2930 if(fBranchRecJets.Length()==0){
2931 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
2932 if(fDebug>1)fAOD->Print();
2936 TClonesArray *aodRecJets = 0;
2937 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
2938 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
2939 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
2942 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
2943 if(fDebug>1)fAOD->Print();
2947 // Reorder jet pt and fill new temporary AliAODJet objects
2950 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
2952 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
2955 if( tmp->Pt() < fJetPtCut ) continue;
2956 if( type == kJetsRecAcceptance &&
2957 ( tmp->Eta() < fJetEtaMin
2958 || tmp->Eta() > fJetEtaMax
2959 || tmp->Phi() < fJetPhiMin
2960 || tmp->Phi() > fJetPhiMax )) continue;
2971 else if(type == kJetsKine || type == kJetsKineAcceptance){
2977 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
2981 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2982 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2983 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2985 if(!pythiaGenHeader){
2986 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2988 if(!hijingGenHeader){
2989 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
2992 TLorentzVector mom[4];
2994 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
2996 for(Int_t i=0; i<2; ++i){
2997 if(!mom[i].Pt()) continue;
2998 jet[i] = new AliAODJet(mom[i]);
3000 if( type == kJetsKineAcceptance &&
3001 ( jet[i]->Eta() < fJetEtaMin
3002 || jet[i]->Eta() > fJetEtaMax
3003 || jet[i]->Phi() < fJetPhiMin
3004 || jet[i]->Phi() > fJetPhiMax )) continue;
3014 // fetch the pythia generated jets
3015 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
3018 AliAODJet *jet = new AliAODJet();
3019 pythiaGenHeader->TriggerJet(ip, p);
3020 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
3022 if( type == kJetsKineAcceptance &&
3023 ( jet->Eta() < fJetEtaMin
3024 || jet->Eta() > fJetEtaMax
3025 || jet->Phi() < fJetPhiMin
3026 || jet->Phi() > fJetPhiMax )) continue;
3034 else if(type == kJetsGen || type == kJetsGenAcceptance ){
3036 if(fBranchGenJets.Length()==0){
3037 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
3041 TClonesArray *aodGenJets = 0;
3042 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
3043 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
3044 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
3048 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
3050 if(fDebug>1)fAOD->Print();
3056 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
3058 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
3061 if( tmp->Pt() < fJetPtCut ) continue;
3062 if( type == kJetsGenAcceptance &&
3063 ( tmp->Eta() < fJetEtaMin
3064 || tmp->Eta() > fJetEtaMax
3065 || tmp->Phi() < fJetPhiMin
3066 || tmp->Phi() > fJetPhiMax )) continue;
3074 else if(type == kJetsEmbedded){ // embedded jets
3076 if(fBranchEmbeddedJets.Length()==0){
3077 Printf("%s:%d no embedded jet branch specified", (char*)__FILE__,__LINE__);
3078 if(fDebug>1)fAOD->Print();
3082 TClonesArray *aodEmbeddedJets = 0;
3083 if(fBranchEmbeddedJets.Length()) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchEmbeddedJets.Data()));
3084 if(!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchEmbeddedJets.Data()));
3085 if(fAODExtension&&!aodEmbeddedJets) aodEmbeddedJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchEmbeddedJets.Data()));
3087 if(!aodEmbeddedJets){
3088 if(fBranchEmbeddedJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchEmbeddedJets.Data());
3089 if(fDebug>1)fAOD->Print();
3093 // Reorder jet pt and fill new temporary AliAODJet objects
3094 Int_t nEmbeddedJets = 0;
3096 for(Int_t ij=0; ij<aodEmbeddedJets->GetEntries(); ++ij){
3098 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodEmbeddedJets->At(ij));
3101 if( tmp->Pt() < fJetPtCut ) continue;
3102 if( tmp->Eta() < fJetEtaMin
3103 || tmp->Eta() > fJetEtaMax
3104 || tmp->Phi() < fJetPhiMin
3105 || tmp->Phi() > fJetPhiMax ) continue;
3113 return nEmbeddedJets;
3116 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
3121 // ___________________________________________________________________________________
3122 Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
3124 // fill list of bgr clusters selected according to type
3126 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
3128 if(fBranchRecBckgClusters.Length()==0){
3129 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
3130 if(fDebug>1)fAOD->Print();
3134 TClonesArray *aodRecJets = 0;
3135 if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecBckgClusters.Data()));
3136 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data()));
3137 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data()));
3140 if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
3141 if(fDebug>1)fAOD->Print();
3145 // Reorder jet pt and fill new temporary AliAODJet objects
3148 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
3150 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
3153 // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
3154 if( type == kJetsRecAcceptance &&
3155 ( tmp->Eta() < fJetEtaMin
3156 || tmp->Eta() > fJetEtaMax
3157 || tmp->Phi() < fJetPhiMin
3158 || tmp->Phi() > fJetPhiMax )) continue;
3172 // MC clusters still Under construction
3178 // _________________________________________________________________________________________________________
3179 void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
3181 // Set properties of THnSparse
3183 for(Int_t i=0; i<dim; i++){
3184 h->GetAxis(i)->SetTitle(labels[i]);
3185 h->GetAxis(i)->SetTitleColor(1);
3189 // __________________________________________________________________________________________
3190 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
3192 //Set properties of histos (x and y title)
3196 h->GetXaxis()->SetTitleColor(1);
3197 h->GetYaxis()->SetTitleColor(1);
3200 // _________________________________________________________________________________________________________
3201 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y, const char* z)
3203 //Set properties of histos (x,y and z title)
3208 h->GetXaxis()->SetTitleColor(1);
3209 h->GetYaxis()->SetTitleColor(1);
3210 h->GetZaxis()->SetTitleColor(1);
3213 // ________________________________________________________________________________________________________________________________________________________
3214 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
3215 const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
3217 // fill list of tracks in cone around jet axis
3220 Bool_t isBadMaxPt = kFALSE;
3221 Bool_t isBadMinPt = kTRUE;
3224 jet->PxPyPz(jetMom);
3225 TVector3 jet3mom(jetMom);
3227 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3229 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3231 Double_t trackMom[3];
3232 track->PxPyPz(trackMom);
3233 TVector3 track3mom(trackMom);
3235 Double_t dR = jet3mom.DeltaR(track3mom);
3239 outputlist->Add(track);
3241 sumPt += track->Pt();
3243 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
3244 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
3249 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
3250 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
3255 // _________________________________________________________________________________________________________________________________________________________________
3256 void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
3258 // list of jet tracks from trackrefs
3260 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
3262 Bool_t isBadMaxPt = kFALSE;
3263 Bool_t isBadMinPt = kTRUE;
3265 for(Int_t itrack=0; itrack<nTracks; itrack++) {
3267 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
3269 AliError("expected ref track not found ");
3273 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
3274 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
3275 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
3281 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
3282 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
3287 // _ ________________________________________________________________________________________________________________________________
3288 void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
3289 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
3291 // associate generated and reconstructed tracks, fill TArrays of list indices
3293 Int_t nTracksRec = tracksRec->GetSize();
3294 Int_t nTracksGen = tracksAODMCCharged->GetSize();
3295 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3298 if(!nTracksGen) return;
3302 indexAODTr.Set(nTracksGen);
3303 indexMCTr.Set(nTracksRec);
3304 isRefGen.Set(nTracksGen);
3306 indexAODTr.Reset(-1);
3307 indexMCTr.Reset(-1);
3310 // loop over reconstructed tracks, get generated track
3312 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
3314 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
3315 if(!rectrack)continue;
3316 Int_t label = TMath::Abs(rectrack->GetLabel());
3318 // find MC track in our list
3319 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
3321 Int_t listIndex = -1;
3322 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
3326 indexAODTr[listIndex] = iRec;
3327 indexMCTr[iRec] = listIndex;
3332 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
3334 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
3336 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
3337 if(!gentrack)continue;
3338 Int_t pdg = gentrack->GetPdgCode();
3340 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
3341 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
3342 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
3344 isRefGen[iGen] = kTRUE;
3346 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3349 Float_t genPt = gentrack->Pt();
3350 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
3352 Float_t recPt = vt->Pt();
3353 fh2PtRecVsGen->Fill(genPt,recPt);
3360 // _____________________________________________________________________________________________________________________________________________
3361 void AliAnalysisTaskFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
3362 const TArrayI& indexAODTr, const TArrayS& isRefGen, const Bool_t scaleStrangeness){
3364 // fill QA for single track reconstruction efficiency
3366 Int_t nTracksGen = tracksGen->GetSize();
3368 if(!nTracksGen) return;
3370 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
3372 if(isRefGen[iGen] != 1) continue; // select primaries
3374 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
3375 if(!gentrack) continue;
3376 Double_t ptGen = gentrack->Pt();
3377 Double_t etaGen = gentrack->Eta();
3378 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
3380 // apply same acc & pt cuts as for FF
3382 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
3383 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
3384 if(ptGen < fTrackPtCut) continue;
3386 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
3388 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3390 if(iRec>=0 && trackQARec){
3391 if(scaleStrangeness){
3392 Double_t weight = GetMCStrangenessFactor(ptGen);
3393 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
3395 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
3400 // ______________________________________________________________________________________________________________________________________________________
3402 void AliAnalysisTaskFragmentationFunction::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
3403 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
3404 const TArrayS& isRefGen, TList* jetTrackListTR, const Bool_t scaleStrangeness,
3405 Bool_t fillJS, TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt)
3407 // fill objects for jet track reconstruction efficiency or secondaries contamination
3408 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
3409 // jetTrackListTR pointer: track refs if not NULL
3412 // ensure proper normalization, even for secondaries
3413 Double_t jetPtRec = jet->Pt();
3414 ffhistRec->FillFF(-1, jetPtRec, kTRUE);
3416 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
3417 if(nTracksJet == 0) return;
3419 TList* listRecTracks = new TList();
3420 listRecTracks->Clear();
3422 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
3424 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
3425 if(!gentrack)continue;
3426 // find jet track in gen tracks list
3427 Int_t iGen = tracksGen->IndexOf(gentrack);
3430 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
3434 if(isRefGen[iGen] != 1) continue; // select primaries
3436 Double_t ptGen = gentrack->Pt();
3437 Double_t etaGen = gentrack->Eta();
3438 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
3440 // gen level acc & pt cuts - skip in case of track refs
3441 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
3442 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
3443 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
3446 Double_t ptRec = -1;
3448 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3449 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
3451 Bool_t isJetTrack = kFALSE;
3452 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
3456 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
3457 if(!rectrack) continue;
3459 ptRec = rectrack->Pt();
3462 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
3463 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
3468 Double_t trackPt = ptRec;
3469 Bool_t incrementJetPt = kFALSE;
3471 if(scaleStrangeness){
3472 Double_t weight = GetMCStrangenessFactor(ptGen);
3473 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt, 0, kTRUE, weight );
3476 ffhistRec->FillFF( trackPt, jetPtRec, incrementJetPt );
3479 listRecTracks->Add(rectrack);
3486 if(fillJS) FillJetShape(jet,listRecTracks,hProNtracksLeadingJet, hProDelRPtSum, hProDelR80pcPt,0,0,scaleStrangeness);
3488 delete listRecTracks;
3492 // _____________________________________________________________________________________________________________________________________________________________________
3493 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxis(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt)
3495 // List of tracks in cone perpendicular to the jet azimuthal direction
3498 jet->PxPyPz(jetMom);
3500 TVector3 jet3mom(jetMom);
3501 // Rotate phi and keep eta unchanged
3502 Double_t etaTilted = jet3mom.Eta();
3503 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
3504 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
3506 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3509 if( fUseExtraTracksBgr != 1){
3510 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
3511 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3512 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3516 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3518 Double_t trackMom[3];
3519 track->PxPyPz(trackMom);
3520 TVector3 track3mom(trackMom);
3522 Double_t deta = track3mom.Eta() - etaTilted;
3523 Double_t dphi = TMath::Abs(track3mom.Phi() - phiTilted);
3524 if (dphi > TMath::Pi()) dphi = 2. * TMath::Pi() - dphi;
3525 Double_t dR = TMath::Sqrt(deta * deta + dphi * dphi);
3529 outputlist->Add(track);
3530 sumPt += track->Pt();
3536 // ________________________________________________________________________________________________________________________________________________________
3537 void AliAnalysisTaskFragmentationFunction::GetTracksTiltedwrpJetAxisWindow(Float_t alpha, TList* inputlist, TList* outputlist, const AliAODJet* jet, Double_t radius,Double_t& sumPt,Double_t &normFactor)
3539 // List of tracks in cone perpendicular to the jet azimuthal direction
3542 jet->PxPyPz(jetMom);
3544 TVector3 jet3mom(jetMom);
3545 // Rotate phi and keep eta unchanged
3546 Double_t etaTilted = jet3mom.Eta();
3547 Double_t phiTilted = TVector2::Phi_0_2pi(jet3mom.Phi()) + alpha;
3548 if(phiTilted > 2*TMath::Pi()) phiTilted = phiTilted - 2*TMath::Pi();
3550 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++)
3554 if( fUseExtraTracksBgr != 1){
3555 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
3556 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3557 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3561 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3563 Float_t trackEta = track->Eta();
3564 Float_t trackPhi = track->Phi();
3566 if( ( phiTilted-radius >= 0 ) && ( phiTilted+radius <= 2*TMath::Pi()))
3568 if((trackPhi<=phiTilted+radius) &&
3569 (trackPhi>=phiTilted-radius) &&
3570 (trackEta<=fTrackEtaMax)&&(trackEta>=fTrackEtaMin)) // 0.9 and - 0.9
3572 outputlist->Add(track);
3573 sumPt += track->Pt();
3576 else if( phiTilted-radius < 0 )
3578 if((( trackPhi < phiTilted+radius ) ||
3579 ( trackPhi > 2*TMath::Pi()-(radius-phiTilted) )) &&
3580 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
3582 outputlist->Add(track);
3583 sumPt += track->Pt();
3586 else if( phiTilted+radius > 2*TMath::Pi() )
3588 if((( trackPhi > phiTilted-radius ) ||
3589 ( trackPhi < phiTilted+radius-2*TMath::Pi() )) &&
3590 (( trackEta <= fTrackEtaMax ) && ( trackEta >= fTrackEtaMin )))
3592 outputlist->Add(track);
3593 sumPt += track->Pt();
3598 // Jet area - Temporarily added should be modified with the proper jet area value
3599 Float_t areaJet = CalcJetArea(etaTilted,radius);
3600 Float_t areaTilted = 2*radius*(fTrackEtaMax-fTrackEtaMin);
3602 normFactor = (Float_t) 1. / (areaJet / areaTilted);
3607 // ________________________________________________________________________________________________________________________________________________________
3608 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJets(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt)
3610 // List of tracks outside cone around N jet axis
3611 // Particles taken randomly
3614 // Int_t nj = jetlist->GetSize();
3615 Float_t rc = TMath::Abs(GetFFRadius());
3616 Float_t rcl = GetFFBckgRadius();
3618 // Estimate jet and background areas
3619 Float_t* areaJet = new Float_t[nCases];
3620 memset(areaJet, 0, sizeof(Float_t) * nCases);
3621 Float_t* areaJetLarge = new Float_t[nCases];
3622 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
3623 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
3624 Float_t areaOut = areaFull;
3626 //estimate jets and background areas
3629 TList* templist = new TList();
3630 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
3632 for(Int_t ij=0; ij<nCases; ++ij)
3634 // Get jet information
3635 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
3638 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
3639 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
3640 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
3643 areaJet[ij] = CalcJetArea(etaJet,rc);
3645 // Area jet larger angle
3646 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
3649 areaOut = areaOut - areaJetLarge[ij];
3653 // List of all tracks outside jet areas
3654 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3657 if( fUseExtraTracksBgr != 1){
3658 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
3659 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3660 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3664 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3667 Double_t trackMom[3];
3668 track->PxPyPz(trackMom);
3669 TVector3 track3mom(trackMom);
3671 Double_t *dR = new Double_t[nCases];
3672 for(Int_t ij=0; ij<nCases; ij++)
3673 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
3675 if((nCases==1 && (dR[0]>rcl)) ||
3676 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
3677 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
3679 templist->Add(track);
3685 // Take tracks randomly
3686 Int_t nScaled = (Int_t) (nOut * areaJet[0] / areaOut + 0.5);
3687 TArrayI* ar = new TArrayI(nOut);
3689 for(Int_t init=0; init<nOut; init++)
3692 Int_t *randIndex = new Int_t[nScaled];
3693 for(Int_t init2=0; init2<nScaled; init2++)
3694 randIndex[init2] = -1;
3696 // Select nScaled different random numbers in nOut
3697 for(Int_t i=0; i<nScaled; i++)
3699 Int_t* tmpArr = new Int_t[nOut-i];
3700 Int_t temp = fRandom->Integer(nOut-i);
3701 for(Int_t ind = 0; ind< ar->GetSize()-1; ind++)
3703 if(ind<temp) tmpArr[ind] = (*ar)[ind];
3704 else tmpArr[ind] = (*ar)[ind+1];
3706 randIndex[i] = (*ar)[temp];
3708 ar->Set(nOut-i-1,tmpArr);
3714 for(Int_t ipart=0; ipart<nScaled; ipart++)
3716 AliVParticle* track = (AliVParticle*)(templist->At(randIndex[ipart]));
3717 outputlist->Add(track);
3718 sumPt += track->Pt();
3725 delete [] areaJetLarge;
3728 delete [] randIndex;
3732 // ________________________________________________________________________________________________________________________________________________________
3733 void AliAnalysisTaskFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCases, TList* inputlist, TList* outputlist, TList* jetlist, Double_t& sumPt, Double_t &normFactor)
3735 // List of tracks outside cone around N jet axis
3736 // All particles taken + final scaling factor
3739 Float_t rc = TMath::Abs(GetFFRadius());
3740 Float_t rcl = GetFFBckgRadius();
3742 // Estimate jet and background areas
3743 Float_t* areaJet = new Float_t[nCases];
3744 memset(areaJet, 0, sizeof(Float_t) * nCases);
3745 Float_t* areaJetLarge = new Float_t[nCases];
3746 memset(areaJetLarge, 0, sizeof(Float_t) * nCases);
3747 Float_t areaFull = (fTrackEtaMax-fTrackEtaMin)*(fTrackPhiMax-fTrackPhiMin);
3748 Float_t areaOut = areaFull;
3750 //estimate jets and background areas
3753 TClonesArray *vect3Jet = new TClonesArray("TVector3",nCases);
3755 for(Int_t ij=0; ij<nCases; ++ij)
3757 // Get jet information
3758 AliAODJet* jet = dynamic_cast<AliAODJet*>(jetlist->At(ij));
3761 jet3mom.SetPtEtaPhi(jet->Pt(),jet->Eta(),jet->Phi());
3762 new((*vect3Jet)[ijet]) TVector3((TVector3)jet3mom);
3763 Float_t etaJet = (Float_t)((TVector3*) vect3Jet->At(ij))->Eta();
3766 areaJet[ij] = CalcJetArea(etaJet,rc);
3768 // Area jet larger angle
3769 areaJetLarge[ij] = CalcJetArea(etaJet,rcl);
3771 // Outside jets area
3772 areaOut = areaOut - areaJetLarge[ij];
3776 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3779 if( fUseExtraTracksBgr != 1){
3780 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (inputlist->At(itrack))){
3781 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3782 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3786 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3788 Double_t trackMom[3];
3789 track->PxPyPz(trackMom);
3790 TVector3 track3mom(trackMom);
3792 Double_t *dR = new Double_t[nCases];
3793 for(Int_t ij=0; ij<nCases; ij++)
3794 dR[ij] = (Double_t)((TVector3*) vect3Jet->At(ij))->DeltaR(track3mom);
3797 (nCases==1 && (dR[0]>rcl)) ||
3798 (nCases==2 && (dR[0]>rcl && dR[1]>rcl)) ||
3799 (nCases==3 && (dR[0]>rcl && dR[1]>rcl && dR[2]>rcl)))
3801 outputlist->Add(track);
3802 sumPt += track->Pt();
3808 if(nCases==0) areaJet[0] = TMath::Pi()*rc*rc;
3809 normFactor = (Float_t) 1./(areaJet[0] / areaOut);
3814 delete [] areaJetLarge;
3819 // ______________________________________________________________________________________________________________________________________________________
3820 Float_t AliAnalysisTaskFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
3822 // calculate area of jet with eta etaJet and radius rc
3824 Float_t detamax = etaJet + rc;
3825 Float_t detamin = etaJet - rc;
3826 Float_t accmax = 0.0; Float_t accmin = 0.0;
3827 if(detamax > fTrackEtaMax){ // sector outside etamax
3828 Float_t h = fTrackEtaMax - etaJet;
3829 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
3831 if(detamin < fTrackEtaMin){ // sector outside etamin
3832 Float_t h = fTrackEtaMax + etaJet;
3833 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
3835 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
3841 // ___________________________________________________________________________________________________________________________
3842 void AliAnalysisTaskFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
3844 // fill tracks from bckgCluster branch in list,
3845 // for all clusters outside jet cone
3846 // sum up total area of clusters
3848 Double_t rc = GetFFRadius();
3849 Double_t rcl = GetFFBckgRadius();
3851 Double_t areaTotal = 0;
3852 Double_t sumPtTotal = 0;
3854 for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
3856 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
3858 Double_t dR = jet->DeltaR(bgrCluster);
3860 if(dR<rcl) continue;
3862 Double_t clusterPt = bgrCluster->Pt();
3863 Double_t area = bgrCluster->EffectiveAreaCharged();
3865 sumPtTotal += clusterPt;
3867 Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
3869 for(Int_t it = 0; it<nTracksJet; it++){
3871 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
3872 if( fUseExtraTracksBgr != 1){
3873 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (bgrCluster->GetTrack(it))){
3874 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3875 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3879 AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
3880 if(!track) continue;
3882 Float_t trackPt = track->Pt();
3883 Float_t trackEta = track->Eta();
3884 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
3886 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
3887 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
3888 if(trackPt < fTrackPtCut) continue;
3890 outputlist->Add(track);
3894 Double_t areaJet = TMath::Pi()*rc*rc;
3895 if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
3900 // _______________________________________________________________________________________________________________________
3901 void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
3903 // fill tracks from bckgCluster branch,
3904 // using cluster with median density (odd number of clusters)
3905 // or picking randomly one of the two closest to median (even number)
3909 Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
3911 if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
3913 Double_t* bgrDensity = new Double_t[nBckgClusters];
3914 Int_t* indices = new Int_t[nBckgClusters];
3916 for(Int_t ij=0; ij<nBckgClusters; ++ij){
3918 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
3919 Double_t clusterPt = bgrCluster->Pt();
3920 Double_t area = bgrCluster->EffectiveAreaCharged();
3922 Double_t density = 0;
3923 if(area>0) density = clusterPt/area;
3925 bgrDensity[ij] = density;
3929 TMath::Sort(nBckgClusters, bgrDensity, indices);
3931 // get median cluster
3933 AliAODJet* medianCluster = 0;
3934 Double_t medianDensity = 0;
3936 if(TMath::Odd(nBckgClusters)){
3938 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
3939 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
3941 Double_t clusterPt = medianCluster->Pt();
3942 Double_t area = medianCluster->EffectiveAreaCharged();
3944 if(area>0) medianDensity = clusterPt/area;
3948 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
3949 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
3951 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
3952 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
3954 Double_t density1 = 0;
3955 Double_t clusterPt1 = medianCluster1->Pt();
3956 Double_t area1 = medianCluster1->EffectiveAreaCharged();
3957 if(area1>0) density1 = clusterPt1/area1;
3959 Double_t density2 = 0;
3960 Double_t clusterPt2 = medianCluster2->Pt();
3961 Double_t area2 = medianCluster2->EffectiveAreaCharged();
3962 if(area2>0) density2 = clusterPt2/area2;
3964 medianDensity = 0.5*(density1+density2);
3966 medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
3969 Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
3971 for(Int_t it = 0; it<nTracksJet; it++){
3973 // embedded tracks - note: using ref tracks here, fBranchRecBckgClusters has to be consistent
3974 if( fUseExtraTracksBgr != 1){
3975 if(AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*> (medianCluster->GetTrack(it))){
3976 if(fUseExtraTracksBgr == 0 && ((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3977 if(fUseExtraTracksBgr == -1 && !((trackAOD->GetFlags() & AliESDtrack::kEmbedded)>0)) continue;
3981 AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
3982 if(!track) continue;
3984 Float_t trackPt = track->Pt();
3985 Float_t trackEta = track->Eta();
3986 Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
3988 if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
3989 if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
3990 if(trackPt < fTrackPtCut) continue;
3992 outputlist->Add(track);
3995 Double_t areaMedian = medianCluster->EffectiveAreaCharged();
3996 Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
3998 if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
4002 delete[] bgrDensity;
4006 // ______________________________________________________________________________________________________________________________________________________
4007 void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet,
4008 AliFragFuncHistos* ffbckghistocuts, AliFragFuncQATrackHistos* qabckghistocuts, TH1F* fh1Mult){
4010 // List of tracks outside jets for background study
4011 TList* tracklistout2jets = new TList();
4012 TList* tracklistout3jets = new TList();
4013 TList* tracklistout2jetsStat = new TList();
4014 TList* tracklistout3jetsStat = new TList();
4015 Double_t sumPtOut2Jets = 0.;
4016 Double_t sumPtOut3Jets = 0.;
4017 Double_t sumPtOut2JetsStat = 0.;
4018 Double_t sumPtOut3JetsStat = 0.;
4019 Double_t normFactor2Jets = 0.;
4020 Double_t normFactor3Jets = 0.;
4022 Int_t nRecJetsCuts = inputjetlist->GetEntries();
4024 if(nRecJetsCuts>1) {
4025 GetTracksOutOfNJets(2,inputtracklist, tracklistout2jets, inputjetlist, sumPtOut2Jets);
4026 GetTracksOutOfNJetsStat(2,inputtracklist, tracklistout2jetsStat, inputjetlist,sumPtOut2JetsStat, normFactor2Jets);
4029 if(nRecJetsCuts>2) {
4030 GetTracksOutOfNJets(3,inputtracklist, tracklistout3jets, inputjetlist, sumPtOut3Jets);
4031 GetTracksOutOfNJetsStat(3,inputtracklist, tracklistout3jetsStat, inputjetlist, sumPtOut3JetsStat, normFactor3Jets);
4034 if(type==kBckgOutLJ || type==kBckgOutAJ)
4036 TList* tracklistoutleading = new TList();
4037 Double_t sumPtOutLeading = 0.;
4038 GetTracksOutOfNJets(1,inputtracklist, tracklistoutleading, inputjetlist, sumPtOutLeading);
4039 if(type==kBckgOutLJ && fh1Mult) fh1Mult->Fill(tracklistoutleading->GetSize());
4041 for(Int_t it=0; it<tracklistoutleading->GetSize(); ++it){
4043 AliVParticle* trackVP = (AliVParticle*)(tracklistoutleading->At(it));
4044 if(!trackVP) continue;
4045 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4047 Float_t jetPt = jet->Pt();
4048 Float_t trackPt = trackV->Pt();
4050 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4052 if(type==kBckgOutLJ)
4054 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt);
4056 // Fill track QA for background
4057 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4060 // All cases included
4061 if(nRecJetsCuts==1 && type==kBckgOutAJ)
4063 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4067 // Increment jet pt with one entry in case #tracks outside jets = 0
4068 if(tracklistoutleading->GetSize()==0) {
4069 Float_t jetPt = jet->Pt();
4070 Bool_t incrementJetPt = kTRUE;
4071 if(type==kBckgOutLJ)
4073 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4075 // All cases included
4076 if(nRecJetsCuts==1 && type==kBckgOutAJ)
4078 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4081 delete tracklistoutleading;
4083 if(type==kBckgOutLJStat || type==kBckgOutAJStat)
4085 TList* tracklistoutleadingStat = new TList();
4086 Double_t sumPtOutLeadingStat = 0.;
4087 Double_t normFactorLeading = 0.;
4089 GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
4090 if(type==kBckgOutLJStat && fh1Mult) fh1Mult->Fill(tracklistoutleadingStat->GetSize());
4092 for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
4094 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistoutleadingStat->At(it));
4095 if(!trackVP) continue;
4096 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4098 Float_t jetPt = jet->Pt();
4099 Float_t trackPt = trackV->Pt();
4100 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4103 if(type==kBckgOutLJStat)
4105 if(fFFMode)ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
4107 // Fill track QA for background
4108 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
4111 // All cases included
4112 if(nRecJetsCuts==1 && type==kBckgOutAJStat)
4114 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorLeading);
4115 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
4120 // Increment jet pt with one entry in case #tracks outside jets = 0
4121 if(tracklistoutleadingStat->GetSize()==0) {
4122 Float_t jetPt = jet->Pt();
4123 Bool_t incrementJetPt = kTRUE;
4124 if(type==kBckgOutLJStat)
4126 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
4128 // All cases included
4129 if(nRecJetsCuts==1 && type==kBckgOutLJStat)
4131 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorLeading);
4135 delete tracklistoutleadingStat;
4138 if(type==kBckgPerp || type==kBckgPerp2 || type==kBckgPerp2Area)
4140 Double_t sumPtPerp1 = 0.;
4141 Double_t sumPtPerp2 = 0.;
4142 TList* tracklistperp = new TList();
4143 TList* tracklistperp1 = new TList();
4144 TList* tracklistperp2 = new TList();
4147 if(type == kBckgPerp2) norm = 2; // in FillFF() scaleFac = 1/norm = 0.5 - account for double area;
4148 if(type == kBckgPerp2Area) norm = 2*TMath::Pi()*TMath::Abs(GetFFRadius())*TMath::Abs(GetFFRadius()) / jet->EffectiveAreaCharged(); // in FillFF() scaleFac = 1/norm;
4150 GetTracksTiltedwrpJetAxis(TMath::Pi()/2., inputtracklist,tracklistperp1,jet,TMath::Abs(GetFFRadius()),sumPtPerp1);
4151 if(type==kBckgPerp2 || type==kBckgPerp2Area) GetTracksTiltedwrpJetAxis(-1*TMath::Pi()/2., inputtracklist,tracklistperp2,jet,TMath::Abs(GetFFRadius()),sumPtPerp2);
4153 tracklistperp->AddAll(tracklistperp1);
4154 tracklistperp->AddAll(tracklistperp2);
4156 if(tracklistperp->GetSize() != tracklistperp1->GetSize() + tracklistperp2->GetSize()){
4157 cout<<" ERROR: tracklistperp size "<<tracklistperp->GetSize()<<" perp1 "<<tracklistperp1->GetSize()<<" perp2 "<<tracklistperp2->GetSize()<<endl;
4161 if(fh1Mult) fh1Mult->Fill(tracklistperp->GetSize());
4163 for(Int_t it=0; it<tracklistperp->GetSize(); ++it){
4165 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperp->At(it));
4166 if(!trackVP)continue;
4167 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4169 Float_t jetPt = jet->Pt();
4170 Float_t trackPt = trackV->Pt();
4172 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4174 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, norm );
4176 // Fill track QA for background
4177 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4181 // Increment jet pt with one entry in case #tracks outside jets = 0
4182 if(tracklistperp->GetSize()==0) {
4183 Float_t jetPt = jet->Pt();
4184 Bool_t incrementJetPt = kTRUE;
4185 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4190 // fill for tracklistperp1/2 separately, divide norm by 2
4191 if(type==kBckgPerp){
4192 FillJetShape(jet, tracklistperp, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
4194 if(type==kBckgPerp2){
4195 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0., kFALSE);
4196 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0., kFALSE);
4198 if(type==kBckgPerp2Area){ // divide norm by 2: listperp1/2 filled separately
4199 FillJetShape(jet, tracklistperp1, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, TMath::Pi()/2., 0.5*norm, kFALSE);
4200 FillJetShape(jet, tracklistperp2, fProNtracksLeadingJetBgrPerp2, fProDelRPtSumBgrPerp2, 0, -1*TMath::Pi()/2., 0.5*norm, kFALSE);
4204 delete tracklistperp;
4205 delete tracklistperp1;
4206 delete tracklistperp2;
4209 if(type==kBckgASide)
4211 Double_t sumPtASide = 0.;
4212 TList* tracklistaside = new TList();
4213 GetTracksTiltedwrpJetAxis(TMath::Pi(),inputtracklist,tracklistaside,jet,TMath::Abs(GetFFRadius()),sumPtASide);
4214 if(fh1Mult) fh1Mult->Fill(tracklistaside->GetSize());
4216 for(Int_t it=0; it<tracklistaside->GetSize(); ++it){
4218 AliVParticle* trackVP = (AliVParticle*)(tracklistaside->At(it));
4219 if(!trackVP) continue;
4220 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4222 Float_t jetPt = jet->Pt();
4223 Float_t trackPt = trackV->Pt();
4225 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4227 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4229 // Fill track QA for background
4230 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4234 if(tracklistaside->GetSize()==0) {
4235 Float_t jetPt = jet->Pt();
4236 Bool_t incrementJetPt = kTRUE;
4237 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4240 delete tracklistaside;
4243 if(type==kBckgASideWindow)
4245 Double_t normFactorASide = 0.;
4246 Double_t sumPtASideW = 0.;
4247 TList* tracklistasidew = new TList();
4248 GetTracksTiltedwrpJetAxisWindow(TMath::Pi(),inputtracklist,tracklistasidew,jet,TMath::Abs(GetFFRadius()),sumPtASideW,normFactorASide);
4249 if(fh1Mult) fh1Mult->Fill(tracklistasidew->GetSize());
4251 for(Int_t it=0; it<tracklistasidew->GetSize(); ++it){
4253 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistasidew->At(it));
4254 if(!trackVP) continue;
4255 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4257 Float_t jetPt = jet->Pt();
4258 Float_t trackPt = trackV->Pt();
4259 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4261 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorASide);
4263 // Fill track QA for background
4264 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorASide);
4268 if(tracklistasidew->GetSize()==0) {
4269 Float_t jetPt = jet->Pt();
4270 Bool_t incrementJetPt = kTRUE;
4271 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorASide);
4274 delete tracklistasidew;
4277 if(type==kBckgPerpWindow)
4279 Double_t normFactorPerp = 0.;
4280 Double_t sumPtPerpW = 0.;
4281 TList* tracklistperpw = new TList();
4282 GetTracksTiltedwrpJetAxisWindow(TMath::Pi()/2.,inputtracklist,tracklistperpw,jet,TMath::Abs(GetFFRadius()),sumPtPerpW,normFactorPerp);
4283 if(fh1Mult) fh1Mult->Fill(tracklistperpw->GetSize());
4285 for(Int_t it=0; it<tracklistperpw->GetSize(); ++it){
4287 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistperpw->At(it));
4288 if(!trackVP) continue;
4289 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4291 Float_t jetPt = jet->Pt();
4292 Float_t trackPt = trackV->Pt();
4293 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4295 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorPerp);
4297 // Fill track QA for background
4298 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt, kFALSE, normFactorPerp);
4302 if(tracklistperpw->GetSize()==0) {
4303 Float_t jetPt = jet->Pt();
4304 Bool_t incrementJetPt = kTRUE;
4305 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactorPerp);
4308 delete tracklistperpw;
4312 if(type==kBckgOut2J || type==kBckgOutAJ)
4314 if(type==kBckgOut2J && fh1Mult) fh1Mult->Fill(tracklistout2jets->GetSize());
4315 for(Int_t it=0; it<tracklistout2jets->GetSize(); ++it){
4317 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jets->At(it));
4318 if(!trackVP) continue;
4319 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4321 Float_t jetPt = jet->Pt();
4322 Float_t trackPt = trackV->Pt();
4324 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4326 if(type==kBckgOut2J)
4328 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4329 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4332 // All cases included
4333 if(nRecJetsCuts==2 && type==kBckgOutAJ)
4335 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4340 // Increment jet pt with one entry in case #tracks outside jets = 0
4341 if(tracklistout2jets->GetSize()==0) {
4342 Float_t jetPt = jet->Pt();
4343 Bool_t incrementJetPt = kTRUE;
4344 if(type==kBckgOut2J)
4346 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4348 // All cases included
4349 if(nRecJetsCuts==2 && type==kBckgOutAJ)
4351 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4356 if(type==kBckgOut2JStat || type==kBckgOutAJStat)
4358 for(Int_t it=0; it<tracklistout2jetsStat->GetSize(); ++it){
4360 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout2jetsStat->At(it));
4361 if(!trackVP) continue;
4362 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4364 Float_t jetPt = jet->Pt();
4365 Float_t trackPt = trackV->Pt();
4366 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4368 if(type==kBckgOut2JStat)
4370 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
4372 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
4375 // All cases included
4376 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
4378 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor2Jets);
4380 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
4384 // Increment jet pt with one entry in case #tracks outside jets = 0
4385 if(tracklistout2jetsStat->GetSize()==0) {
4386 Float_t jetPt = jet->Pt();
4387 Bool_t incrementJetPt = kTRUE;
4388 if(type==kBckgOut2JStat)
4390 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
4392 // All cases included
4393 if(nRecJetsCuts==2 && type==kBckgOutAJStat)
4395 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor2Jets);
4401 if(type==kBckgOut3J || type==kBckgOutAJ)
4403 if(type==kBckgOut3J && fh1Mult) fh1Mult->Fill(tracklistout3jets->GetSize());
4405 for(Int_t it=0; it<tracklistout3jets->GetSize(); ++it){
4407 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jets->At(it));
4408 if(!trackVP) continue;
4409 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4411 Float_t jetPt = jet->Pt();
4412 Float_t trackPt = trackV->Pt();
4414 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4416 if(type==kBckgOut3J)
4418 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4420 qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt);
4423 // All cases included
4424 if(nRecJetsCuts==3 && type==kBckgOutAJ)
4426 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt );
4431 // Increment jet pt with one entry in case #tracks outside jets = 0
4432 if(tracklistout3jets->GetSize()==0) {
4433 Float_t jetPt = jet->Pt();
4434 Bool_t incrementJetPt = kTRUE;
4435 if(type==kBckgOut3J)
4437 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4439 // All cases included
4440 if(nRecJetsCuts==3 && type==kBckgOutAJ)
4442 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt );
4447 if(type==kBckgOut3JStat || type==kBckgOutAJStat)
4449 for(Int_t it=0; it<tracklistout3jetsStat->GetSize(); ++it){
4451 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistout3jetsStat->At(it));
4452 if(!trackVP) continue;
4453 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4455 Float_t jetPt = jet->Pt();
4456 Float_t trackPt = trackV->Pt();
4457 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4459 if(type==kBckgOut3JStat)
4461 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets);
4463 //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
4466 // All cases included
4467 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
4469 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactor3Jets );
4471 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
4476 // Increment jet pt with one entry in case #tracks outside jets = 0
4477 if(tracklistout3jetsStat->GetSize()==0) {
4478 Float_t jetPt = jet->Pt();
4479 Bool_t incrementJetPt = kTRUE;
4480 if(type==kBckgOut3JStat)
4482 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
4484 // All cases included
4485 if(nRecJetsCuts==3 && type==kBckgOutAJStat)
4487 if(fFFMode) ffbckghistocuts->FillFF( -1., jetPt, incrementJetPt, normFactor3Jets);
4493 if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
4495 TList* tracklistClustersOutLeading = new TList();
4496 Double_t normFactorClusters = 0;
4497 Float_t jetPt = jet->Pt();
4499 GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
4500 if(fh1Mult) fh1Mult->Fill(tracklistClustersOutLeading->GetSize());
4502 for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
4504 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
4505 if(!trackVP) continue;
4506 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4508 Float_t trackPt = trackVP->Pt();
4510 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4512 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
4513 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
4518 delete tracklistClustersOutLeading;
4522 if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
4524 TList* tracklistClustersMedian = new TList();
4525 Double_t normFactorClusters = 0;
4526 Float_t jetPt = jet->Pt();
4528 GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
4529 if(fh1Mult) fh1Mult->Fill(tracklistClustersMedian->GetSize());
4531 for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
4533 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
4534 if(!trackVP) continue;
4535 TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
4537 Float_t trackPt = trackVP->Pt();
4539 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4541 if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
4542 if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
4547 delete tracklistClustersMedian;
4550 delete tracklistout2jets;
4551 delete tracklistout3jets;
4552 delete tracklistout2jetsStat;
4553 delete tracklistout3jetsStat;
4556 // -----------------------------------------------------------------
4558 Double_t AliAnalysisTaskFragmentationFunction::GetMCStrangenessFactor(const Double_t pt)
4560 // factor strangeness data/MC as function of pt from UE analysis (Sara Vallero)
4564 if(0.150<pt && pt<0.200) alpha = 3.639;
4565 if(0.200<pt && pt<0.250) alpha = 2.097;
4566 if(0.250<pt && pt<0.300) alpha = 1.930;
4567 if(0.300<pt && pt<0.350) alpha = 1.932;
4568 if(0.350<pt && pt<0.400) alpha = 1.943;
4569 if(0.400<pt && pt<0.450) alpha = 1.993;
4570 if(0.450<pt && pt<0.500) alpha = 1.989;
4571 if(0.500<pt && pt<0.600) alpha = 1.963;
4572 if(0.600<pt && pt<0.700) alpha = 1.917;
4573 if(0.700<pt && pt<0.800) alpha = 1.861;
4574 if(0.800<pt && pt<0.900) alpha = 1.820;
4575 if(0.900<pt && pt<1.000) alpha = 1.741;
4576 if(1.000<pt && pt<1.500) alpha = 0.878;
4581 // ---------------------------------------------------------------------------------------------------------------------------------
4582 void AliAnalysisTaskFragmentationFunction::FillJetShape(AliAODJet* jet, TList* list,
4583 TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt,
4584 Double_t dPhiUE, Double_t normUE, Bool_t scaleStrangeness){
4586 const Int_t kNbinsR = 50;
4587 const Float_t kBinWidthR = 0.02;
4589 Int_t nJetTracks = list->GetEntries();
4591 Float_t PtSumA[kNbinsR] = {0.0};
4592 Float_t PtWeightsA[kNbinsR] = {0.0};
4593 Float_t nTracksA[kNbinsR] = {0.0};
4595 Float_t *delRA = new Float_t[nJetTracks];
4596 Float_t *trackPtA = new Float_t[nJetTracks];
4597 Int_t *index = new Int_t[nJetTracks];
4599 for(Int_t i=0; i<nJetTracks; i++){
4606 jet->PxPyPz(jetMom);
4607 TVector3 jet3mom(jetMom);
4609 if(TMath::Abs(dPhiUE)>0){
4610 Double_t phiTilted = jet3mom.Phi();
4611 phiTilted += dPhiUE;
4612 phiTilted = TVector2::Phi_0_2pi(phiTilted);
4613 jet3mom.SetPhi(phiTilted);
4616 Double_t jetPt = jet->Pt();
4617 Double_t sumWeights = 0;
4619 for (Int_t j =0; j<nJetTracks; j++){
4621 AliVParticle* track = dynamic_cast<AliVParticle*>(list->At(j));
4624 Double_t trackMom[3];
4625 track->PxPyPz(trackMom);
4626 TVector3 track3mom(trackMom);
4628 Double_t dR = jet3mom.DeltaR(track3mom);
4631 trackPtA[j] = track->Pt();
4633 Double_t weight = GetMCStrangenessFactor(track->Pt()); // more correctly should be gen pt
4634 sumWeights += weight;
4636 for(Int_t ibin=1; ibin<=kNbinsR; ibin++){
4637 Float_t xlow = kBinWidthR*(ibin-1);
4638 Float_t xup = kBinWidthR*ibin;
4639 if(xlow <= dR && dR < xup){
4640 PtSumA[ibin-1] += track->Pt();
4641 PtWeightsA[ibin-1] += weight;
4642 nTracksA[ibin-1] += 1;
4650 for(Int_t ibin=0; ibin<kNbinsR; ibin++){
4651 Float_t fR = kBinWidthR*(ibin+0.5);
4653 for(Int_t k=0; k<5; k++){
4654 if(k==0){jetPtMin=20.0;jetPtMax=30.0;}
4655 if(k==1){jetPtMin=30.0;jetPtMax=40.0;}
4656 if(k==2){jetPtMin=40.0;jetPtMax=60.0;}
4657 if(k==3){jetPtMin=60.0;jetPtMax=80.0;}
4658 if(k==4){jetPtMin=80.0;jetPtMax=100.0;}
4659 if(jetPt>jetPtMin && jetPt<jetPtMax){
4661 if(scaleStrangeness){
4662 if(nTracksA[ibin]) hProDelRPtSum[k]->Fill(fR,PtSumA[ibin],PtWeightsA[ibin]/nTracksA[ibin]);
4663 else hProDelRPtSum[k]->Fill(fR,PtSumA[ibin],0);
4665 else hProDelRPtSum[k]->Fill(fR,PtSumA[ibin]);
4670 if(scaleStrangeness) hProNtracksLeadingJet->Fill(jetPt,sumWeights);
4671 else hProNtracksLeadingJet->Fill(jetPt,nJetTracks);
4673 if(normUE) hProNtracksLeadingJet->Fill(jetPt,nJetTracks/normUE);
4678 Float_t delRPtSum80pc = 0;
4680 TMath::Sort(nJetTracks,delRA,index,0);
4682 for(Int_t ii=0; ii<nJetTracks; ii++){
4684 if(scaleStrangeness){
4685 Double_t weight = GetMCStrangenessFactor(trackPtA[index[ii]]); // more correctly should be gen pt
4686 PtSum += weight*trackPtA[index[ii]];
4688 else PtSum += trackPtA[index[ii]];
4691 if(PtSum/jetPt >= 0.8000){
4692 delRPtSum80pc = delRA[index[ii]];
4696 hProDelR80pcPt->Fill(jetPt,delRPtSum80pc);