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 **************************************************************************/
29 #include "THnSparse.h"
31 #include "AliAODInputHandler.h"
32 #include "AliAODHandler.h"
33 #include "AliESDEvent.h"
34 #include "AliAODMCParticle.h"
35 #include "AliAODJet.h"
36 #include "AliGenPythiaEventHeader.h"
37 #include "AliInputEventHandler.h"
39 #include "AliAnalysisHelperJetTasks.h"
40 #include "AliAnalysisManager.h"
41 #include "AliAnalysisTaskSE.h"
43 #include "AliAnalysisTaskFragmentationFunction.h"
46 ClassImp(AliAnalysisTaskFragmentationFunction)
48 //____________________________________________________________________________
49 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
54 ,fBranchRecJets("jets")
72 ,fDiJetPtFractionCut(0)
79 ,fTracksAODMCCharged(0)
80 ,fTracksRecQualityCuts(0)
86 ,fQATrackHistosRecCuts(0)
89 ,fQAJetHistosRecCuts(0)
90 ,fQAJetHistosRecCutsLeading(0)
92 ,fQAJetHistosGenLeading(0)
93 ,fQAJetHistosRecEffLeading(0)
95 ,fFFHistosRecLeading(0)
96 ,fFFHistosRecLeadingTrack(0)
98 ,fFFHistosGenLeading(0)
99 ,fFFHistosGenLeadingTrack(0)
101 ,fIJHistosRecLeading(0)
102 ,fIJHistosRecLeadingTrack(0)
104 ,fIJHistosGenLeading(0)
105 ,fIJHistosGenLeadingTrack(0)
106 ,fFFDiJetHistosRecCuts(0)
107 ,fFFDiJetHistosRecLeading(0)
108 ,fFFDiJetHistosRecLeadingTrack(0)
109 ,fFFDiJetHistosGen(0)
110 ,fFFDiJetHistosGenLeading(0)
111 ,fFFDiJetHistosGenLeadingTrack(0)
112 ,fQADiJetHistosRecCuts(0)
113 ,fQADiJetHistosGen(0)
114 ,fQATrackHighPtThreshold(0)
163 ,fDiJetNBinsJetInvMass(0)
164 ,fDiJetJetInvMassMin(0)
165 ,fDiJetJetInvMassMax(0)
178 ,fQADiJetNBinsInvMass(0)
179 ,fQADiJetInvMassMin(0)
180 ,fQADiJetInvMassMax(0)
181 ,fQADiJetNBinsJetPt(0)
184 ,fQADiJetNBinsDeltaPhi(0)
185 ,fQADiJetDeltaPhiMin(0)
186 ,fQADiJetDeltaPhiMax(0)
187 ,fQADiJetNBinsDeltaEta(0)
188 ,fQADiJetDeltaEtaMin(0)
189 ,fQADiJetDeltaEtaMax(0)
190 ,fQADiJetNBinsDeltaPt(0)
191 ,fQADiJetDeltaPtMin(0)
192 ,fQADiJetDeltaPtMax(0)
195 ,fh1VertexNContributors(0)
201 ,fhnSingleTrackRecEffHisto(0)
202 ,fhnJetTrackRecEffHisto(0)
204 // default constructor
207 //__________________________________________________________________________________________
208 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name)
209 : AliAnalysisTaskSE(name)
213 ,fBranchRecJets("jets")
230 ,fDiJetDeltaPhiCut(0)
231 ,fDiJetPtFractionCut(0)
238 ,fTracksAODMCCharged(0)
239 ,fTracksRecQualityCuts(0)
244 ,fQATrackHistosRec(0)
245 ,fQATrackHistosRecCuts(0)
246 ,fQATrackHistosGen(0)
248 ,fQAJetHistosRecCuts(0)
249 ,fQAJetHistosRecCutsLeading(0)
251 ,fQAJetHistosGenLeading(0)
252 ,fQAJetHistosRecEffLeading(0)
254 ,fFFHistosRecLeading(0)
255 ,fFFHistosRecLeadingTrack(0)
257 ,fFFHistosGenLeading(0)
258 ,fFFHistosGenLeadingTrack(0)
260 ,fIJHistosRecLeading(0)
261 ,fIJHistosRecLeadingTrack(0)
263 ,fIJHistosGenLeading(0)
264 ,fIJHistosGenLeadingTrack(0)
265 ,fFFDiJetHistosRecCuts(0)
266 ,fFFDiJetHistosRecLeading(0)
267 ,fFFDiJetHistosRecLeadingTrack(0)
268 ,fFFDiJetHistosGen(0)
269 ,fFFDiJetHistosGenLeading(0)
270 ,fFFDiJetHistosGenLeadingTrack(0)
271 ,fQADiJetHistosRecCuts(0)
272 ,fQADiJetHistosGen(0)
273 ,fQATrackHighPtThreshold(0)
322 ,fDiJetNBinsJetInvMass(0)
323 ,fDiJetJetInvMassMin(0)
324 ,fDiJetJetInvMassMax(0)
337 ,fQADiJetNBinsInvMass(0)
338 ,fQADiJetInvMassMin(0)
339 ,fQADiJetInvMassMax(0)
340 ,fQADiJetNBinsJetPt(0)
343 ,fQADiJetNBinsDeltaPhi(0)
344 ,fQADiJetDeltaPhiMin(0)
345 ,fQADiJetDeltaPhiMax(0)
346 ,fQADiJetNBinsDeltaEta(0)
347 ,fQADiJetDeltaEtaMin(0)
348 ,fQADiJetDeltaEtaMax(0)
349 ,fQADiJetNBinsDeltaPt(0)
350 ,fQADiJetDeltaPtMin(0)
351 ,fQADiJetDeltaPtMax(0)
354 ,fh1VertexNContributors(0)
360 ,fhnSingleTrackRecEffHisto(0)
361 ,fhnJetTrackRecEffHisto(0)
365 DefineOutput(1,TList::Class());
370 //__________________________________________________________________________________________________________________________
371 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction ©)
372 : AliAnalysisTaskSE()
375 ,fMCEvent(copy.fMCEvent)
376 ,fBranchRecJets(copy.fBranchRecJets)
377 ,fBranchGenJets(copy.fBranchGenJets)
378 ,fTrackTypeGen(copy.fTrackTypeGen)
379 ,fJetTypeGen(copy.fJetTypeGen)
380 ,fJetTypeRecEff(copy.fJetTypeRecEff)
381 ,fFilterMask(copy.fFilterMask)
382 ,fTrackPtCut(copy.fTrackPtCut)
383 ,fTrackEtaMin(copy.fTrackEtaMin)
384 ,fTrackEtaMax(copy.fTrackEtaMax)
385 ,fTrackPhiMin(copy.fTrackPhiMin)
386 ,fTrackPhiMax(copy.fTrackPhiMax)
387 ,fJetPtCut(copy.fJetPtCut)
388 ,fJetEtaMin(copy.fJetEtaMin)
389 ,fJetEtaMax(copy.fJetEtaMax)
390 ,fJetPhiMin(copy.fJetPhiMin)
391 ,fJetPhiMax(copy.fJetPhiMax)
392 ,fDiJetCut(copy.fDiJetCut)
393 ,fDiJetDeltaPhiCut(copy.fDiJetDeltaPhiCut)
394 ,fDiJetPtFractionCut(copy.fDiJetPtFractionCut)
395 ,fDiJetCDFCut(copy.fDiJetCDFCut)
396 ,fDiJetKindBins(copy.fDiJetKindBins)
397 ,fFFRadius(copy.fFFRadius)
398 ,fTracksRec(copy.fTracksRec)
399 ,fTracksRecCuts(copy.fTracksRecCuts)
400 ,fTracksGen(copy.fTracksGen)
401 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
402 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
403 ,fJetsRec(copy.fJetsRec)
404 ,fJetsRecCuts(copy.fJetsRecCuts)
405 ,fJetsGen(copy.fJetsGen)
406 ,fJetsRecEff(copy.fJetsRecEff)
407 ,fQATrackHistosRec(copy.fQATrackHistosRec)
408 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
409 ,fQATrackHistosGen(copy.fQATrackHistosGen)
410 ,fQAJetHistosRec(copy.fQAJetHistosRec)
411 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
412 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
413 ,fQAJetHistosGen(copy.fQAJetHistosGen)
414 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
415 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
416 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
417 ,fFFHistosRecLeading(copy.fFFHistosRecLeading)
418 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
419 ,fFFHistosGen(copy.fFFHistosGen)
420 ,fFFHistosGenLeading(copy.fFFHistosGenLeading)
421 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
422 ,fIJHistosRecCuts(copy.fIJHistosRecCuts)
423 ,fIJHistosRecLeading(copy.fIJHistosRecLeading)
424 ,fIJHistosRecLeadingTrack(copy.fIJHistosRecLeadingTrack)
425 ,fIJHistosGen(copy.fIJHistosGen)
426 ,fIJHistosGenLeading(copy.fIJHistosGenLeading)
427 ,fIJHistosGenLeadingTrack(copy.fIJHistosGenLeadingTrack)
428 ,fFFDiJetHistosRecCuts(copy.fFFDiJetHistosRecCuts)
429 ,fFFDiJetHistosRecLeading(copy.fFFDiJetHistosRecLeading)
430 ,fFFDiJetHistosRecLeadingTrack(copy.fFFDiJetHistosRecLeadingTrack)
431 ,fFFDiJetHistosGen(copy.fFFDiJetHistosGen)
432 ,fFFDiJetHistosGenLeading(copy.fFFDiJetHistosGenLeading)
433 ,fFFDiJetHistosGenLeadingTrack(copy.fFFDiJetHistosGenLeadingTrack)
434 ,fQADiJetHistosRecCuts(copy.fQADiJetHistosRecCuts)
435 ,fQADiJetHistosGen(copy.fQADiJetHistosGen)
436 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
437 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
438 ,fFFJetPtMin(copy.fFFJetPtMin)
439 ,fFFJetPtMax(copy.fFFJetPtMax)
440 ,fFFNBinsPt(copy.fFFNBinsPt)
441 ,fFFPtMin(copy.fFFPtMin)
442 ,fFFPtMax(copy.fFFPtMax)
443 ,fFFNBinsXi(copy.fFFNBinsXi)
444 ,fFFXiMin(copy.fFFXiMin)
445 ,fFFXiMax(copy.fFFXiMax)
446 ,fFFNBinsZ(copy.fFFNBinsZ)
447 ,fFFZMin(copy.fFFZMin)
448 ,fFFZMax(copy.fFFZMax)
449 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
450 ,fQAJetPtMin(copy.fQAJetPtMin)
451 ,fQAJetPtMax(copy.fQAJetPtMax)
452 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
453 ,fQAJetEtaMin(copy.fQAJetEtaMin)
454 ,fQAJetEtaMax(copy.fQAJetEtaMax)
455 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
456 ,fQAJetPhiMin(copy.fQAJetPhiMin)
457 ,fQAJetPhiMax(copy.fQAJetPhiMax)
458 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
459 ,fQATrackPtMin(copy.fQATrackPtMin)
460 ,fQATrackPtMax(copy.fQATrackPtMax)
461 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
462 ,fQATrackEtaMin(copy.fQATrackEtaMin)
463 ,fQATrackEtaMax(copy.fQATrackEtaMax)
464 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
465 ,fQATrackPhiMin(copy.fQATrackPhiMin)
466 ,fQATrackPhiMax(copy.fQATrackPhiMax)
467 ,fIJNBinsJetPt(copy.fIJNBinsJetPt)
468 ,fIJJetPtMin(copy.fIJJetPtMin)
469 ,fIJJetPtMax(copy.fIJJetPtMax)
470 ,fIJNBinsPt(copy.fIJNBinsPt)
471 ,fIJPtMin(copy.fIJPtMin)
472 ,fIJPtMax(copy.fIJPtMax)
473 ,fIJNBinsZ(copy.fIJNBinsZ)
474 ,fIJZMin(copy.fIJZMin)
475 ,fIJZMax(copy.fIJZMax)
476 ,fIJNBinsCosTheta(copy.fIJNBinsCosTheta)
477 ,fIJCosThetaMin(copy.fIJCosThetaMin)
478 ,fIJCosThetaMax(copy.fIJCosThetaMax)
479 ,fIJNBinsTheta(copy.fIJNBinsTheta)
480 ,fIJThetaMin(copy.fIJThetaMin)
481 ,fIJThetaMax(copy.fIJThetaMax)
482 ,fIJNBinsJt(copy.fIJNBinsJt)
483 ,fIJJtMin(copy.fIJJtMin)
484 ,fIJJtMax(copy.fIJJtMax)
485 ,fDiJetNBinsJetInvMass(copy.fDiJetNBinsJetInvMass)
486 ,fDiJetJetInvMassMin(copy.fDiJetJetInvMassMin)
487 ,fDiJetJetInvMassMax(copy.fDiJetJetInvMassMax)
488 ,fDiJetNBinsJetPt(copy.fDiJetNBinsJetPt)
489 ,fDiJetJetPtMin(copy.fDiJetJetPtMin)
490 ,fDiJetJetPtMax(copy.fDiJetJetPtMax)
491 ,fDiJetNBinsPt(copy.fDiJetNBinsPt)
492 ,fDiJetPtMin(copy.fDiJetPtMin)
493 ,fDiJetPtMax(copy.fDiJetPtMax)
494 ,fDiJetNBinsXi(copy.fDiJetNBinsXi)
495 ,fDiJetXiMin(copy.fDiJetXiMin)
496 ,fDiJetXiMax(copy.fDiJetXiMax)
497 ,fDiJetNBinsZ(copy.fDiJetNBinsZ)
498 ,fDiJetZMin(copy.fDiJetZMin)
499 ,fDiJetZMax(copy.fDiJetZMax)
500 ,fQADiJetNBinsInvMass(copy.fQADiJetNBinsInvMass)
501 ,fQADiJetInvMassMin(copy.fQADiJetInvMassMin)
502 ,fQADiJetInvMassMax(copy.fQADiJetInvMassMax)
503 ,fQADiJetNBinsJetPt(copy.fQADiJetNBinsJetPt)
504 ,fQADiJetJetPtMin(copy.fQADiJetJetPtMin)
505 ,fQADiJetJetPtMax(copy.fQADiJetJetPtMax)
506 ,fQADiJetNBinsDeltaPhi(copy.fQADiJetNBinsDeltaPhi)
507 ,fQADiJetDeltaPhiMin(copy.fQADiJetDeltaPhiMin)
508 ,fQADiJetDeltaPhiMax(copy.fQADiJetDeltaPhiMax)
509 ,fQADiJetNBinsDeltaEta(copy.fQADiJetNBinsDeltaEta)
510 ,fQADiJetDeltaEtaMin(copy.fQADiJetDeltaEtaMin)
511 ,fQADiJetDeltaEtaMax(copy.fQADiJetDeltaEtaMax)
512 ,fQADiJetNBinsDeltaPt(copy.fQADiJetNBinsDeltaPt)
513 ,fQADiJetDeltaPtMin(copy.fQADiJetDeltaPtMin)
514 ,fQADiJetDeltaPtMax(copy.fQADiJetDeltaPtMax)
515 ,fCommonHistList(copy.fCommonHistList)
516 ,fh1EvtSelection(copy.fh1EvtSelection)
517 ,fh1VertexNContributors(copy.fh1VertexNContributors)
518 ,fh1VertexZ(copy.fh1VertexZ)
519 ,fh1EvtMult(copy.fh1EvtMult)
520 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
521 ,fh1nGenJets(copy.fh1nGenJets)
522 ,fh1nRecEffJets(copy.fh1nRecEffJets)
523 ,fhnSingleTrackRecEffHisto(copy.fhnSingleTrackRecEffHisto)
524 ,fhnJetTrackRecEffHisto(copy.fhnJetTrackRecEffHisto)
530 // _________________________________________________________________________________________________________________________________
531 AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
537 AliAnalysisTaskSE::operator=(o);
540 fMCEvent = o.fMCEvent;
541 fBranchRecJets = o.fBranchRecJets;
542 fBranchGenJets = o.fBranchGenJets;
543 fTrackTypeGen = o.fTrackTypeGen;
544 fJetTypeGen = o.fJetTypeGen;
545 fJetTypeRecEff = o.fJetTypeRecEff;
546 fFilterMask = o.fFilterMask;
547 fTrackPtCut = o.fTrackPtCut;
548 fTrackEtaMin = o.fTrackEtaMin;
549 fTrackEtaMax = o.fTrackEtaMax;
550 fTrackPhiMin = o.fTrackPhiMin;
551 fTrackPhiMax = o.fTrackPhiMax;
552 fJetPtCut = o.fJetPtCut;
553 fJetEtaMin = o.fJetEtaMin;
554 fJetEtaMax = o.fJetEtaMax;
555 fJetPhiMin = o.fJetPhiMin;
556 fJetPhiMax = o.fJetPhiMin;
557 fDiJetCut = o.fDiJetCut;
558 fDiJetDeltaPhiCut = o.fDiJetDeltaPhiCut;
559 fDiJetPtFractionCut = o.fDiJetPtFractionCut;
560 fDiJetCDFCut = o.fDiJetCDFCut;
561 fDiJetKindBins = o.fDiJetKindBins;
562 fFFRadius = o.fFFRadius;
563 fTracksRec = o.fTracksRec;
564 fTracksRecCuts = o.fTracksRecCuts;
565 fTracksGen = o.fTracksGen;
566 fTracksAODMCCharged = o.fTracksAODMCCharged;
567 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
568 fJetsRec = o.fJetsRec;
569 fJetsRecCuts = o.fJetsRecCuts;
570 fJetsGen = o.fJetsGen;
571 fJetsRecEff = o.fJetsRecEff;
572 fQATrackHistosRec = o.fQATrackHistosRec;
573 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
574 fQATrackHistosGen = o.fQATrackHistosGen;
575 fQAJetHistosRec = o.fQAJetHistosRec;
576 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
577 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
578 fQAJetHistosGen = o.fQAJetHistosGen;
579 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
580 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
581 fFFHistosRecCuts = o.fFFHistosRecCuts;
582 fFFHistosRecLeading = o.fFFHistosRecLeading;
583 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
584 fFFHistosGen = o.fFFHistosGen;
585 fFFHistosGenLeading = o.fFFHistosGenLeading;
586 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
587 fIJHistosRecCuts = o.fIJHistosRecCuts;
588 fIJHistosRecLeading = o.fIJHistosRecLeading;
589 fIJHistosRecLeadingTrack = o.fIJHistosRecLeadingTrack;
590 fIJHistosGen = o.fIJHistosGen;
591 fIJHistosGenLeading = o.fIJHistosGenLeading;
592 fIJHistosGenLeadingTrack = o.fIJHistosGenLeadingTrack;
593 fFFDiJetHistosRecCuts = o.fFFDiJetHistosRecCuts;
594 fFFDiJetHistosRecLeading = o.fFFDiJetHistosRecLeading;
595 fFFDiJetHistosRecLeadingTrack = o.fFFDiJetHistosRecLeadingTrack;
596 fFFDiJetHistosGen = o.fFFDiJetHistosGen;
597 fFFDiJetHistosGenLeading = o.fFFDiJetHistosGenLeading;
598 fFFDiJetHistosGenLeadingTrack = o.fFFDiJetHistosGenLeadingTrack;
599 fQADiJetHistosRecCuts = o.fQADiJetHistosRecCuts;
600 fQADiJetHistosGen = o.fQADiJetHistosGen;
601 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
602 fFFNBinsJetPt = o.fFFNBinsJetPt;
603 fFFJetPtMin = o.fFFJetPtMin;
604 fFFJetPtMax = o.fFFJetPtMax;
605 fFFNBinsPt = o.fFFNBinsPt;
606 fFFPtMin = o.fFFPtMin;
607 fFFPtMax = o.fFFPtMax;
608 fFFNBinsXi = o.fFFNBinsXi;
609 fFFXiMin = o.fFFXiMin;
610 fFFXiMax = o.fFFXiMax;
611 fFFNBinsZ = o.fFFNBinsZ;
614 fQAJetNBinsPt = o.fQAJetNBinsPt;
615 fQAJetPtMin = o.fQAJetPtMin;
616 fQAJetPtMax = o.fQAJetPtMax;
617 fQAJetNBinsEta = o.fQAJetNBinsEta;
618 fQAJetEtaMin = o.fQAJetEtaMin;
619 fQAJetEtaMax = o.fQAJetEtaMax;
620 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
621 fQAJetPhiMin = o.fQAJetPhiMin;
622 fQAJetPhiMax = o.fQAJetPhiMax;
623 fQATrackNBinsPt = o.fQATrackNBinsPt;
624 fQATrackPtMin = o.fQATrackPtMin;
625 fQATrackPtMax = o.fQATrackPtMax;
626 fQATrackNBinsEta = o.fQATrackNBinsEta;
627 fQATrackEtaMin = o.fQATrackEtaMin;
628 fQATrackEtaMax = o.fQATrackEtaMax;
629 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
630 fQATrackPhiMin = o.fQATrackPhiMin;
631 fQATrackPhiMax = o.fQATrackPhiMax;
632 fIJNBinsJetPt = o.fIJNBinsJetPt;
633 fIJJetPtMin = o.fIJJetPtMin;
634 fIJJetPtMax = o.fIJJetPtMax;
635 fIJNBinsPt = o.fIJNBinsPt;
636 fIJPtMin = o.fIJPtMin;
637 fIJPtMax = o.fIJPtMax;
638 fIJNBinsZ = o.fIJNBinsZ;
641 fIJNBinsCosTheta = o.fIJNBinsCosTheta;
642 fIJCosThetaMin = o.fIJCosThetaMin;
643 fIJCosThetaMax = o.fIJCosThetaMax;
644 fIJNBinsTheta = o.fIJNBinsTheta;
645 fIJThetaMin = o.fIJThetaMin;
646 fIJThetaMax = o.fIJThetaMax;
647 fIJNBinsJt = o.fIJNBinsJt;
648 fIJJtMin = o.fIJJtMin;
649 fIJJtMax = o.fIJJtMax;
650 fDiJetNBinsJetInvMass = o.fDiJetNBinsJetInvMass;
651 fDiJetJetInvMassMin = o.fDiJetJetInvMassMin;
652 fDiJetJetInvMassMax = o.fDiJetJetInvMassMax;
653 fDiJetNBinsJetPt = o.fDiJetNBinsJetPt;
654 fDiJetJetPtMin = o.fDiJetJetPtMin;
655 fDiJetJetPtMax = o.fDiJetJetPtMax;
656 fDiJetNBinsPt = o.fDiJetNBinsPt;
657 fDiJetPtMin = o.fDiJetPtMin;
658 fDiJetPtMax = o.fDiJetPtMax;
659 fDiJetNBinsXi = o.fDiJetNBinsXi;
660 fDiJetXiMin = o.fDiJetXiMin;
661 fDiJetXiMax = o.fDiJetXiMax;
662 fDiJetNBinsZ = o.fDiJetNBinsZ;
663 fDiJetZMin = o.fDiJetZMin;
664 fDiJetZMax = o.fDiJetZMax;
665 fQADiJetNBinsInvMass = o.fQADiJetNBinsInvMass;
666 fQADiJetInvMassMin = o.fQADiJetInvMassMin;
667 fQADiJetInvMassMax = o.fQADiJetInvMassMax;
668 fQADiJetNBinsJetPt = o.fQADiJetNBinsJetPt;
669 fQADiJetJetPtMin = o.fQADiJetJetPtMin;
670 fQADiJetJetPtMax = o.fQADiJetJetPtMax;
671 fQADiJetNBinsDeltaPhi = o.fQADiJetNBinsDeltaPhi;
672 fQADiJetDeltaPhiMin = o.fQADiJetDeltaPhiMin;
673 fQADiJetDeltaPhiMax = o.fQADiJetDeltaPhiMax;
674 fQADiJetNBinsDeltaEta = o.fQADiJetNBinsDeltaEta;
675 fQADiJetDeltaEtaMin = o.fQADiJetDeltaEtaMin;
676 fQADiJetDeltaEtaMax = o.fQADiJetDeltaEtaMax;
677 fQADiJetNBinsDeltaPt = o.fQADiJetNBinsDeltaPt;
678 fQADiJetDeltaPtMin = o.fQADiJetDeltaPtMin;
679 fQADiJetDeltaPtMax = o.fQADiJetDeltaPtMax;
680 fCommonHistList = o.fCommonHistList;
681 fh1EvtSelection = o.fh1EvtSelection;
682 fh1VertexNContributors = o.fh1VertexNContributors;
683 fh1VertexZ = o.fh1VertexZ;
684 fh1EvtMult = o.fh1EvtMult;
685 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
686 fh1nGenJets = o.fh1nGenJets;
687 fh1nRecEffJets = o.fh1nRecEffJets;
688 fhnSingleTrackRecEffHisto = o.fhnSingleTrackRecEffHisto;
689 fhnJetTrackRecEffHisto = o.fhnJetTrackRecEffHisto;
695 //___________________________________________________________________________
696 AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
700 if(fTracksRec) delete fTracksRec;
701 if(fTracksRecCuts) delete fTracksRecCuts;
702 if(fTracksGen) delete fTracksGen;
703 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
704 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
705 if(fJetsRec) delete fJetsRec;
706 if(fJetsRecCuts) delete fJetsRecCuts;
707 if(fJetsGen) delete fJetsGen;
708 if(fJetsRecEff) delete fJetsRecEff;
710 // if(fDiJetBins) delete fDiJetBins;
714 //______________________________________________________________________________________________________
715 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
716 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
717 Int_t nPt, Float_t ptMin, Float_t ptMax,
718 Int_t nXi, Float_t xiMin, Float_t xiMax,
719 Int_t nZ , Float_t zMin , Float_t zMax )
739 // default constructor
743 //___________________________________________________________________________
744 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
746 ,fNBinsJetPt(copy.fNBinsJetPt)
747 ,fJetPtMin(copy.fJetPtMin)
748 ,fJetPtMax(copy.fJetPtMax)
749 ,fNBinsPt(copy.fNBinsPt)
752 ,fNBinsXi(copy.fNBinsXi)
755 ,fNBinsZ(copy.fNBinsZ)
758 ,fh2TrackPt(copy.fh2TrackPt)
761 ,fh1JetPt(copy.fh1JetPt)
767 //_______________________________________________________________________________________________________________________________________________________________
768 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
773 TObject::operator=(o);
774 fNBinsJetPt = o.fNBinsJetPt;
775 fJetPtMin = o.fJetPtMin;
776 fJetPtMax = o.fJetPtMax;
777 fNBinsPt = o.fNBinsPt;
780 fNBinsXi = o.fNBinsXi;
786 fh2TrackPt = o.fh2TrackPt;
789 fh1JetPt = o.fh1JetPt;
796 //_________________________________________________________
797 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
801 if(fh1JetPt) delete fh1JetPt;
802 if(fh2TrackPt) delete fh2TrackPt;
803 if(fh2Xi) delete fh2Xi;
804 if(fh2Z) delete fh2Z;
807 //_________________________________________________________________
808 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
812 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fName.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
813 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
814 fh2Xi = new TH2F(Form("fh2FFXi%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
815 fh2Z = new TH2F(Form("fh2FFZ%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
817 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
818 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
819 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
820 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
823 //_______________________________________________________________________________________________________________
824 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt)
828 if(incrementJetPt) fh1JetPt->Fill(jetPt);
829 fh2TrackPt->Fill(jetPt,trackPt);
832 if(jetPt>0) z = trackPt / jetPt;
834 if(z>0) xi = TMath::Log(1/z);
836 fh2Xi->Fill(jetPt,xi);
840 //_________________________________________________________________________________
841 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
843 // add histos to list
847 list->Add(fh2TrackPt);
852 //_________________________________________________________________________________________________________
853 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
854 Int_t nPt, Float_t ptMin, Float_t ptMax,
855 Int_t nEta, Float_t etaMin, Float_t etaMax,
856 Int_t nPhi, Float_t phiMin, Float_t phiMax)
871 // default constructor
874 //____________________________________________________________________________________
875 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
877 ,fNBinsPt(copy.fNBinsPt)
880 ,fNBinsEta(copy.fNBinsEta)
881 ,fEtaMin(copy.fEtaMin)
882 ,fEtaMax(copy.fEtaMax)
883 ,fNBinsPhi(copy.fNBinsPhi)
884 ,fPhiMin(copy.fPhiMin)
885 ,fPhiMax(copy.fPhiMax)
886 ,fh2EtaPhi(copy.fh2EtaPhi)
893 //________________________________________________________________________________________________________________________________________________________________________
894 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
899 TObject::operator=(o);
900 fNBinsPt = o.fNBinsPt;
903 fNBinsEta = o.fNBinsEta;
906 fNBinsPhi = o.fNBinsPhi;
909 fh2EtaPhi = o.fh2EtaPhi;
917 //______________________________________________________________
918 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
922 if(fh2EtaPhi) delete fh2EtaPhi;
923 if(fh1Pt) delete fh1Pt;
926 //____________________________________________________________________
927 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
929 // book jet QA histos
931 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
932 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fName.Data()), Form("%s: p_{T} distribution", fName.Data()), fNBinsPt, fPtMin, fPtMax);
934 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
935 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
938 //____________________________________________________________________________________________________
939 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
941 // fill jet QA histos
943 fh2EtaPhi->Fill( eta, phi);
947 //____________________________________________________________________________________
948 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
950 // add histos to list
952 list->Add(fh2EtaPhi);
956 //___________________________________________________________________________________________________________
957 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
958 Int_t nPt, Float_t ptMin, Float_t ptMax,
959 Int_t nEta, Float_t etaMin, Float_t etaMax,
960 Int_t nPhi, Float_t phiMin, Float_t phiMax,
972 ,fHighPtThreshold(ptThresh)
978 // default constructor
981 //__________________________________________________________________________________________
982 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
984 ,fNBinsPt(copy.fNBinsPt)
987 ,fNBinsEta(copy.fNBinsEta)
988 ,fEtaMin(copy.fEtaMin)
989 ,fEtaMax(copy.fEtaMax)
990 ,fNBinsPhi(copy.fNBinsPhi)
991 ,fPhiMin(copy.fPhiMin)
992 ,fPhiMax(copy.fPhiMax)
993 ,fHighPtThreshold(copy.fHighPtThreshold)
994 ,fh2EtaPhi(copy.fh2EtaPhi)
996 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1002 // _____________________________________________________________________________________________________________________________________________________________________________
1003 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
1008 TObject::operator=(o);
1009 fNBinsPt = o.fNBinsPt;
1012 fNBinsEta = o.fNBinsEta;
1013 fEtaMin = o.fEtaMin;
1014 fEtaMax = o.fEtaMax;
1015 fNBinsPhi = o.fNBinsPhi;
1016 fPhiMin = o.fPhiMin;
1017 fPhiMax = o.fPhiMax;
1018 fHighPtThreshold = o.fHighPtThreshold;
1019 fh2EtaPhi = o.fh2EtaPhi;
1021 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1028 //___________________________________________________________________
1029 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1033 if(fh2EtaPhi) delete fh2EtaPhi;
1034 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1035 if(fh1Pt) delete fh1Pt;
1038 //______________________________________________________________________
1039 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
1041 // book track QA histos
1043 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1044 fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1045 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fName.Data()), Form("%s: p_{T} distribution", fName.Data()), fNBinsPt, fPtMin, fPtMax);
1047 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
1048 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1049 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1052 //________________________________________________________________________________________________________
1053 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt)
1055 // fill track QA histos
1057 fh2EtaPhi->Fill( eta, phi);
1058 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi);
1062 //______________________________________________________________________________________
1063 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1065 // add histos to list
1067 list->Add(fh2EtaPhi);
1068 list->Add(fh2HighPtEtaPhi);
1072 //______________________________________________________________________________________________________
1073 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const char* name,
1074 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1075 Int_t nPt, Float_t ptMin, Float_t ptMax,
1076 Int_t nZ , Float_t zMin , Float_t zMax,
1077 Int_t nCosTheta , Float_t costhetaMin , Float_t costhetaMax,
1078 Int_t nTheta , Float_t thetaMin , Float_t thetaMax,
1079 Int_t nJt , Float_t jtMin , Float_t jtMax)
1081 ,fNBinsJetPt(nJetPt)
1082 ,fJetPtMin(jetPtMin)
1083 ,fJetPtMax(jetPtMax)
1093 ,fNBinsTheta(nTheta)
1094 ,fThetaMin(thetaMin)
1095 ,fThetaMax(thetaMax)
1096 ,fNBinsCosTheta(nCosTheta)
1097 ,fCosThetaMin(costhetaMin)
1098 ,fCosThetaMax(costhetaMax)
1107 // default constructor
1111 //___________________________________________________________________________
1112 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AliFragFuncIntraJetHistos(const AliFragFuncIntraJetHistos& copy)
1114 ,fNBinsJetPt(copy.fNBinsJetPt)
1115 ,fJetPtMin(copy.fJetPtMin)
1116 ,fJetPtMax(copy.fJetPtMax)
1117 ,fNBinsPt(copy.fNBinsPt)
1118 ,fPtMin(copy.fPtMin)
1119 ,fPtMax(copy.fPtMax)
1120 ,fNBinsZ(copy.fNBinsZ)
1123 ,fNBinsJt(copy.fNBinsJt)
1124 ,fJtMin(copy.fJtMin)
1125 ,fJtMax(copy.fJtMax)
1126 ,fNBinsTheta(copy.fNBinsTheta)
1127 ,fThetaMin(copy.fThetaMin)
1128 ,fThetaMax(copy.fThetaMax)
1129 ,fNBinsCosTheta(copy.fNBinsCosTheta)
1130 ,fCosThetaMin(copy.fCosThetaMin)
1131 ,fCosThetaMax(copy.fCosThetaMax)
1132 ,fh2Theta(copy.fh2Theta)
1133 ,fh2CosTheta(copy.fh2CosTheta)
1135 ,fh2PtvsZ(copy.fh2PtvsZ)
1136 ,fhnIntraJet(copy.fhnIntraJet)
1143 //_______________________________________________________________________________________________________________________________________________________________
1144 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos& o)
1149 TObject::operator=(o);
1150 fNBinsJetPt = o.fNBinsJetPt;
1151 fJetPtMin = o.fJetPtMin;
1152 fJetPtMax = o.fJetPtMax;
1153 fNBinsPt = o.fNBinsPt;
1156 fNBinsZ = o.fNBinsZ;
1159 fNBinsJt = o.fNBinsJt;
1162 fNBinsTheta = o.fNBinsTheta;
1163 fThetaMin = o.fThetaMin;
1164 fThetaMax = o.fThetaMax;
1165 fNBinsCosTheta = o.fNBinsCosTheta;
1166 fCosThetaMin = o.fCosThetaMin;
1167 fCosThetaMax = o.fCosThetaMax;
1168 fh2Theta = o.fh2Theta;
1169 fh2CosTheta = o.fh2CosTheta;
1171 fh2PtvsZ = o.fh2PtvsZ;
1172 fhnIntraJet = o.fhnIntraJet;
1180 //_________________________________________________________
1181 AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::~AliFragFuncIntraJetHistos()
1186 if(fh2Theta) delete fh2Theta;
1187 if(fh2CosTheta) delete fh2CosTheta;
1188 if(fh2Jt) delete fh2Jt;
1189 if(fh2PtvsZ) delete fh2PtvsZ;
1190 if(fhnIntraJet) delete fhnIntraJet;
1194 //_________________________________________________________________
1195 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::DefineHistos()
1199 fh2Theta = new TH2F(Form("fh2IJTheta%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsTheta, fThetaMin, fThetaMax);
1200 fh2CosTheta = new TH2F(Form("fh2IJcosTheta%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsCosTheta, fCosThetaMin, fCosThetaMax);
1201 fh2Jt = new TH2F(Form("fh2IJJt%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsJt, fJtMin, fJtMax);
1203 // Create 3D histograms
1204 Int_t *iBin = new Int_t[fnDim];
1205 Double_t *min = new Double_t[fnDim];
1206 Double_t *max = new Double_t[fnDim];
1208 iBin[0] = fNBinsJetPt; iBin[1] = fNBinsTheta; iBin[2] = fNBinsCosTheta; iBin[3] = fNBinsJt; iBin[4] = fNBinsZ; iBin[5] = fNBinsPt;
1209 min[0] = fJetPtMin; min[1] = fThetaMin; min[2] = fCosThetaMin; min[3] = fJtMin; min[4] = fZMin; min[5] = fPtMin;
1210 max[0] = fJetPtMax; max[1] = fThetaMax; max[2] = fCosThetaMax; max[3] = fJtMax; max[4] = fZMax; max[5] = fPtMax;
1212 const char* title = Form("fhnIntraJetPart%s",fName.Data());
1213 const char* comment = "THnSparseF p_{T} jet [GeV/c] : #Theta : cos(#Theta) : j_{T} : Z : p_{T} part [GeV/c]";
1214 fhnIntraJet = new THnSparseF(title,comment,fnDim,iBin,min,max);
1216 const char** axisTitle = new const char*[fnDim];
1217 axisTitle[0] = "p_{T}^{jet} [GeV/c]";
1218 axisTitle[1] = "#Theta";
1219 axisTitle[2] = "Cos(#Theta)";
1220 axisTitle[3] = "j_{T} [GeV]";
1221 axisTitle[4] = "z = p_{T}^{had}/p_{T}^{jet}";
1222 axisTitle[5] = "p_{T}^{had} [GeV/c]";
1224 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Theta,"jet p_{T} [GeV/c]","#Theta","entries");
1225 AliAnalysisTaskFragmentationFunction::SetProperties(fh2CosTheta,"jet p_{T} [GeV/c]","cos(#Theta)", "entries");
1226 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Jt,"jet p_{T} [GeV/c]","j_{T}","entries");
1227 AliAnalysisTaskFragmentationFunction::SetProperties(fhnIntraJet,fnDim,axisTitle);
1234 //_______________________________________________________________________________________________________________
1235 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::FillIntraJet(TLorentzVector* trackV, TLorentzVector* jetV)
1237 // fill IntraJet histos
1239 Float_t cosTheta = 0.; Float_t theta = 0.;
1240 Float_t jt = 0.; Float_t z = 0.;
1241 // For Theta distribution
1242 Float_t pxT = trackV->Px();
1243 Float_t pyT = trackV->Py();
1244 Float_t pzT = trackV->Pz();
1245 Float_t ptT = trackV->Pt();
1246 Float_t pT = trackV->P();
1247 Float_t etaT = trackV->Eta();
1248 Float_t phiT = trackV->Phi(); // Check the value returned
1249 Float_t pxJ = jetV->Px();
1250 Float_t pyJ = jetV->Py();
1251 Float_t pzJ = jetV->Pz();
1252 Float_t ptJ = jetV->Pt();
1253 Float_t pJ = jetV->P();
1256 z = (Float_t)(ptT/ptJ);
1259 cosTheta = (pxT*pxJ+pyT*pyJ+pzT*pzJ)/(pT*pJ);
1260 theta = TMath::ACos(cosTheta);
1263 TVector3 trackP; TVector3 jetP;
1267 trackP.SetPtEtaPhi(ptT,etaT,phiT);
1268 jt = TMath::Sin(trackP.Angle(jetP))*trackP.Mag();
1270 // Fill histos and THnSparse
1271 fh2CosTheta->Fill(ptJ,cosTheta);
1272 fh2Theta->Fill(ptJ,theta);
1273 fh2Jt->Fill(ptJ,jt);
1276 Double_t *content = new Double_t[fnDim];
1277 content[0]= ptJ; content[1] = theta; content[2] = cosTheta; content[3] = jt; content[4] = z; content[5] = ptT;
1279 fhnIntraJet->Fill(content);
1285 //______________________________________________________________________________________________________
1286 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const char* name, Int_t kindSlices,
1287 Int_t nJetInvMass, Float_t jetInvMassMin, Float_t jetInvMassMax,
1288 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1289 Int_t nPt, Float_t ptMin, Float_t ptMax,
1290 Int_t nXi, Float_t xiMin, Float_t xiMax,
1291 Int_t nZ , Float_t zMin , Float_t zMax)
1293 ,fKindSlices(kindSlices)
1294 ,fNBinsJetInvMass(nJetInvMass)
1295 ,fJetInvMassMin(jetInvMassMin)
1296 ,fJetInvMassMax(jetInvMassMax)
1297 ,fNBinsJetPt(nJetPt)
1298 ,fJetPtMin(jetPtMin)
1299 ,fJetPtMax(jetPtMax)
1326 // default constructor
1330 //______________________________________________________________________________________________________
1331 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AliFragFuncDiJetHistos(const AliFragFuncDiJetHistos& copy)
1333 ,fKindSlices(copy.fKindSlices)
1334 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1335 ,fJetInvMassMin(copy.fJetInvMassMin)
1336 ,fJetInvMassMax(copy.fJetInvMassMax)
1337 ,fNBinsJetPt(copy.fNBinsJetPt)
1338 ,fJetPtMin(copy.fJetPtMin)
1339 ,fJetPtMax(copy.fJetPtMax)
1340 ,fNBinsPt(copy.fNBinsPt)
1341 ,fPtMin(copy.fPtMin)
1342 ,fPtMax(copy.fPtMax)
1343 ,fNBinsXi(copy.fNBinsXi)
1344 ,fXiMin(copy.fXiMin)
1345 ,fXiMax(copy.fXiMax)
1346 ,fNBinsZ(copy.fNBinsZ)
1349 ,fh2TrackPtJet1(copy.fh2TrackPtJet1)
1350 ,fh2TrackPtJet2(copy.fh2TrackPtJet2)
1351 ,fh2TrackPtJet(copy.fh2TrackPtJet)
1352 ,fh1Jet1Pt(copy.fh1Jet1Pt)
1353 ,fh1Jet2Pt(copy.fh1Jet2Pt)
1354 ,fh1JetPt(copy.fh1JetPt)
1355 ,fh2Xi1(copy.fh2Xi1)
1356 ,fh2Xi2(copy.fh2Xi2)
1361 ,fh2Pt1(copy.fh2Pt1)
1362 ,fh2Pt2(copy.fh2Pt2)
1366 // default constructor
1370 //_______________________________________________________________________________________________________________________________________________________________
1371 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos& o)
1376 TObject::operator=(o);
1377 fKindSlices = o.fKindSlices;
1378 fNBinsJetInvMass = o.fNBinsJetInvMass;
1379 fJetInvMassMin = o.fJetInvMassMin;
1380 fJetInvMassMax = o.fJetInvMassMax;
1381 fNBinsJetPt = o.fNBinsJetPt;
1382 fJetPtMin = o.fJetPtMin;
1383 fJetPtMax = o.fJetPtMax;
1384 fNBinsPt = o.fNBinsPt;
1387 fNBinsXi = o.fNBinsXi;
1390 fNBinsZ = o.fNBinsZ;
1393 fh2TrackPtJet1 = o.fh2TrackPtJet1;
1394 fh2TrackPtJet2 = o.fh2TrackPtJet2;
1395 fh2TrackPtJet = o.fh2TrackPtJet;
1396 fh1Jet1Pt = o.fh1Jet1Pt;
1397 fh1Jet2Pt = o.fh1Jet2Pt;
1398 fh1JetPt = o.fh1JetPt;
1414 //_________________________________________________________
1415 AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::~AliFragFuncDiJetHistos()
1419 if(fh2TrackPtJet1) delete fh2TrackPtJet1;
1420 if(fh2TrackPtJet2) delete fh2TrackPtJet2;
1421 if(fh2TrackPtJet ) delete fh2TrackPtJet;
1422 if(fh1Jet1Pt) delete fh1Jet1Pt;
1423 if(fh1Jet2Pt) delete fh1Jet2Pt;
1424 if(fh1JetPt) delete fh1JetPt;
1425 if(fh2Xi1) delete fh2Xi1;
1426 if(fh2Xi2) delete fh2Xi2;
1427 if(fh2Xi) delete fh2Xi;
1428 if(fh2Z1) delete fh2Z1;
1429 if(fh2Z2) delete fh2Z2;
1430 if(fh2Z) delete fh2Z;
1431 if(fh2Pt1) delete fh2Pt1;
1432 if(fh2Pt2) delete fh2Pt2;
1433 if(fh2Pt) delete fh2Pt;
1436 //________________________________________________________________________
1437 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::DefineDiJetHistos()
1443 const char *xaxis = "";
1444 if(fKindSlices == 1)
1446 nBins = fNBinsJetInvMass;
1447 min = fJetInvMassMin;
1448 max = fJetInvMassMax;
1449 xaxis = "M_{JJ} [GeV]";
1451 if(fKindSlices == 2 || fKindSlices == 3)
1453 nBins = fNBinsJetPt;
1456 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
1457 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
1460 fh1Jet1Pt = new TH1F(Form("fh1DJJet1Pt%s", fName.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
1461 fh1Jet2Pt = new TH1F(Form("fh1DJJet2Pt%s", fName.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
1462 fh1JetPt = new TH1F(Form("fh1DJJetPt%s", fName.Data()), "", fNBinsJetPt, fJetPtMin, fJetPtMax);
1464 fh2TrackPtJet1 = new TH2F(Form("fh2DJTrackPtJet1%s", fName.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1465 fh2TrackPtJet2 = new TH2F(Form("fh2DJTrackPtJet2%s", fName.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1466 fh2TrackPtJet = new TH2F(Form("fh2DJTrackPtJet%s", fName.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1468 fh2Xi1 = new TH2F(Form("fh2DJXi1%s", fName.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
1469 fh2Xi2 = new TH2F(Form("fh2DJXi2%s", fName.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
1470 fh2Xi = new TH2F(Form("fh2DJXi%s", fName.Data()), "",nBins, min, max, fNBinsXi, fXiMin, fXiMax);
1472 fh2Z1 = new TH2F(Form("fh2DJZ1%s", fName.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
1473 fh2Z2 = new TH2F(Form("fh2DJZ2%s", fName.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
1474 fh2Z = new TH2F(Form("fh2DJZ%s", fName.Data()), "",nBins, min, max, fNBinsZ, fZMin, fZMax);
1476 fh2Pt1 = new TH2F(Form("fh2DJPt1%s", fName.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1477 fh2Pt2 = new TH2F(Form("fh2DJPt2%s", fName.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1478 fh2Pt = new TH2F(Form("fh2DJPtZ%s", fName.Data()), "",nBins, min, max, fNBinsPt, fPtMin, fPtMax);
1480 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet1Pt, "p_{T} [GeV/c]", "entries");
1481 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Jet2Pt, "p_{T} [GeV/c]", "entries");
1482 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
1484 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet1, xaxis, "p_{T} [GeV/c]", "Entries");
1485 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet2, xaxis, "p_{T} [GeV/c]", "Entries");
1486 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPtJet, xaxis, "p_{T} [GeV/c]", "Entries");
1487 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi1, xaxis, "#xi", "Entries");
1488 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi2, xaxis, "#xi", "Entries");
1489 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi, xaxis, "#xi", "Entries");
1490 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z1, xaxis, "z", "Entries");
1491 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z2, xaxis, "z", "Entries");
1492 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z, xaxis, "z", "Entries");
1493 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt1, xaxis, "p_{T} [GeV/c]", "Entries");
1494 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt2, xaxis, "p_{T} [GeV/c]", "Entries");
1495 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Pt, xaxis, "p_{T} [GeV/c]", "Entries");
1499 //________________________________________________________________________
1500 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::FillDiJetFF(Int_t jetType, Float_t trackPt, Float_t jetPt, Double_t jetBin, Bool_t incrementJetPt)
1504 if(incrementJetPt) fh1JetPt->Fill(jetPt);
1506 fh2TrackPtJet->Fill(jetBin, trackPt);
1508 Double_t z = trackPt / jetPt;
1510 if(z!=0) xi = TMath::Log(1/z);
1512 fh2Xi->Fill(jetBin, xi);
1513 fh2Z->Fill(jetBin, z);
1517 if(incrementJetPt) fh1Jet1Pt->Fill(jetPt);
1519 fh2TrackPtJet1->Fill(jetBin, trackPt);
1521 Double_t z = trackPt / jetPt;
1523 if(z!=0) xi = TMath::Log(1/z);
1525 fh2Xi1->Fill(jetBin, xi);
1526 fh2Z1->Fill(jetBin, z);
1530 if(incrementJetPt) fh1Jet2Pt->Fill(jetPt);
1532 fh2TrackPtJet2->Fill(jetBin, trackPt);
1534 Double_t z = trackPt / jetPt;
1536 if(z!=0) xi = TMath::Log(1/z);
1538 fh2Xi2->Fill(jetBin, xi);
1539 fh2Z2->Fill(jetBin, z);
1545 //________________________________________________________________________
1546 void AliAnalysisTaskFragmentationFunction::AliFragFuncDiJetHistos::AddToOutput(TList* list)const
1548 list->Add(fh1Jet1Pt);
1549 list->Add(fh1Jet2Pt);
1550 list->Add(fh1JetPt);
1551 list->Add(fh2TrackPtJet1);
1552 list->Add(fh2TrackPtJet2);
1553 list->Add(fh2TrackPtJet);
1562 //______________________________________________________________________________________________________
1563 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const char* name, Int_t kindSlices,
1564 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax,
1565 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1566 Int_t nDeltaPhi, Float_t deltaPhiMin, Float_t deltaPhiMax,
1567 Int_t nDeltaEta, Float_t deltaEtaMin, Float_t deltaEtaMax,
1568 Int_t nDeltaPt, Float_t deltaPtMin, Float_t deltaPtMax)
1570 ,fKindSlices(kindSlices)
1571 ,fNBinsJetInvMass(nInvMass)
1572 ,fJetInvMassMin(invMassMin)
1573 ,fJetInvMassMax(invMassMax)
1574 ,fNBinsJetPt(nJetPt)
1575 ,fJetPtMin(jetPtMin)
1576 ,fJetPtMax(jetPtMax)
1577 ,fNBinsDeltaPhi(nDeltaPhi)
1578 ,fDeltaPhiMin(deltaPhiMin)
1579 ,fDeltaPhiMax(deltaPhiMax)
1580 ,fNBinsDeltaEta(nDeltaEta)
1581 ,fDeltaEtaMin(deltaEtaMin)
1582 ,fDeltaEtaMax(deltaEtaMax)
1583 ,fNBinsDeltaPt(nDeltaPt)
1584 ,fDeltaPtMin(deltaPtMin)
1585 ,fDeltaPtMax(deltaPtMax)
1592 // default constructor
1596 //______________________________________________________________________________________________________
1597 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AliFragFuncQADiJetHistos(const AliFragFuncQADiJetHistos& copy)
1599 ,fKindSlices(copy.fKindSlices)
1600 ,fNBinsJetInvMass(copy.fNBinsJetInvMass)
1601 ,fJetInvMassMin(copy.fJetInvMassMin)
1602 ,fJetInvMassMax(copy.fJetInvMassMax)
1603 ,fNBinsJetPt(copy.fNBinsJetPt)
1604 ,fJetPtMin(copy.fJetPtMin)
1605 ,fJetPtMax(copy.fJetPtMax)
1606 ,fNBinsDeltaPhi(copy.fNBinsDeltaPhi)
1607 ,fDeltaPhiMin(copy.fDeltaPhiMin)
1608 ,fDeltaPhiMax(copy.fDeltaPhiMax)
1609 ,fNBinsDeltaEta(copy.fNBinsDeltaEta)
1610 ,fDeltaEtaMin(copy.fDeltaEtaMin)
1611 ,fDeltaEtaMax(copy.fDeltaEtaMax)
1612 ,fNBinsDeltaPt(copy.fNBinsDeltaPt)
1613 ,fDeltaPtMin(copy.fDeltaPtMin)
1614 ,fDeltaPtMax(copy.fDeltaPtMax)
1615 ,fh2InvMass(copy.fh2InvMass)
1616 ,fh2DeltaPhi(copy.fh2DeltaPhi)
1617 ,fh2DeltaEta(copy.fh2DeltaEta)
1618 ,fh2DeltaPt(copy.fh2DeltaPt)
1621 // default constructor
1625 //_______________________________________________________________________________________________________________________________________________________________
1626 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos& o)
1631 TObject::operator=(o);
1632 fKindSlices = o.fKindSlices;
1633 fNBinsJetInvMass = o.fNBinsJetInvMass;
1634 fJetInvMassMin = o.fJetInvMassMin;
1635 fJetInvMassMax = o.fJetInvMassMax;
1636 fNBinsJetPt = o.fNBinsJetPt;
1637 fJetPtMin = o.fJetPtMin;
1638 fJetPtMax = o.fJetPtMax;
1639 fNBinsDeltaPhi = o.fNBinsDeltaPhi;
1640 fDeltaPhiMin = o.fDeltaPhiMin;
1641 fDeltaPhiMax = o.fDeltaPhiMax;
1642 fNBinsDeltaEta = o.fNBinsDeltaEta;
1643 fDeltaEtaMin = o.fDeltaEtaMin;
1644 fDeltaEtaMax = o.fDeltaEtaMax;
1645 fNBinsDeltaPt = o.fNBinsDeltaPt;
1646 fDeltaPtMin = o.fDeltaPtMin;
1647 fDeltaPtMax = o.fDeltaPtMax;
1648 fh2InvMass = o.fh2InvMass;
1649 fh2DeltaPhi = o.fh2DeltaPhi;
1650 fh2DeltaEta = o.fh2DeltaEta;
1651 fh2DeltaPt = o.fh2DeltaPt;
1658 //_________________________________________________________
1659 AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::~AliFragFuncQADiJetHistos()
1663 if(fh2InvMass) delete fh2InvMass;
1664 if(fh2DeltaPhi) delete fh2DeltaPhi;
1665 if(fh2DeltaEta) delete fh2DeltaEta;
1666 if(fh2DeltaPt) delete fh2DeltaPt;
1669 //________________________________________________________________________
1670 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::DefineQADiJetHistos()
1676 const char *xaxis = "";
1677 if(fKindSlices == 1)
1679 nBins = fNBinsJetInvMass;
1680 min = fJetInvMassMin;
1681 max = fJetInvMassMax;
1682 xaxis = "M_{JJ} [GeV]";
1684 if(fKindSlices == 2 || fKindSlices == 3)
1686 nBins = fNBinsJetPt;
1689 if(fKindSlices == 2) xaxis = "E_{Tmean} [GeV]";
1690 if(fKindSlices == 3) xaxis ="leading jet p_{T} [GeV/c]";
1694 fh2InvMass = new TH2F(Form("fh2DJInvMassPositionCut%s", fName.Data()), "",nBins, min, max, fNBinsJetInvMass, fJetInvMassMin, fJetInvMassMax);
1695 fh2DeltaPhi = new TH2F(Form("fh2DJDeltaPhiPositionCut%s", fName.Data()), "",nBins, min, max, fNBinsDeltaPhi, fDeltaPhiMin, fDeltaPhiMax);
1696 fh2DeltaEta = new TH2F(Form("fh2DJDeltaEtaPositionCut%s", fName.Data()), "",nBins, min, max, fNBinsDeltaEta, fDeltaEtaMin, fDeltaEtaMax);
1697 fh2DeltaPt = new TH2F(Form("fh2DJDeltaPtPositionCut%s", fName.Data()), "",nBins, min, max, fNBinsDeltaPt, fDeltaPtMin, fDeltaPtMax);
1699 AliAnalysisTaskFragmentationFunction::SetProperties(fh2InvMass, xaxis, "Invariant Mass", "Entries");
1700 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPhi, xaxis, "#Delta #phi", "Entries");
1701 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaEta, xaxis, "#Delta #eta", "Entries");
1702 AliAnalysisTaskFragmentationFunction::SetProperties(fh2DeltaPt, xaxis, "#Delta p_{T}", "Entries");
1706 //________________________________________________________________________
1707 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::FillDiJetQA(Double_t invMass, Double_t deltaPhi, Double_t deltaEta,Double_t deltaPt, Double_t jetBin)
1709 fh2InvMass->Fill(jetBin, invMass);
1710 fh2DeltaPhi->Fill(jetBin, deltaPhi);
1711 fh2DeltaEta->Fill(jetBin, deltaEta);
1712 fh2DeltaPt->Fill(jetBin, deltaPt);
1715 //________________________________________________________________________
1716 void AliAnalysisTaskFragmentationFunction::AliFragFuncQADiJetHistos::AddToOutput(TList* list)const
1718 list->Add(fh2InvMass);
1719 list->Add(fh2DeltaPhi);
1720 list->Add(fh2DeltaEta);
1721 list->Add(fh2DeltaPt);
1724 //_________________________________________________________________________________
1725 void AliAnalysisTaskFragmentationFunction::AliFragFuncIntraJetHistos::AddToOutput(TList* list) const
1727 // add histos to list
1729 list->Add(fh2CosTheta);
1730 list->Add(fh2Theta);
1733 list->Add(fhnIntraJet);
1737 //__________________________________________________________________
1738 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
1740 // create output objects
1742 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
1744 // create list of tracks and jets
1746 fTracksRec = new TList();
1747 fTracksRec->SetOwner(kFALSE);
1749 fTracksRecCuts = new TList();
1750 fTracksRecCuts->SetOwner(kFALSE);
1752 fTracksGen = new TList();
1753 fTracksGen->SetOwner(kFALSE);
1755 fTracksAODMCCharged = new TList();
1756 fTracksAODMCCharged->SetOwner(kFALSE);
1758 fTracksRecQualityCuts = new TList();
1759 fTracksRecQualityCuts->SetOwner(kFALSE);
1761 fJetsRec = new TList();
1762 fJetsRec->SetOwner(kFALSE);
1764 fJetsRecCuts = new TList();
1765 fJetsRecCuts->SetOwner(kFALSE);
1767 fJetsGen = new TList();
1768 fJetsGen->SetOwner(kFALSE);
1770 fJetsRecEff = new TList();
1771 fJetsRecEff->SetOwner(kFALSE);
1773 // fJetsKine = new TList();
1774 // fJetsKine->SetOwner(kTRUE); // delete AOD jets using mom from Kine Tree via TList::Clear()
1778 // Create histograms / output container
1782 fCommonHistList = new TList();
1784 Bool_t oldStatus = TH1::AddDirectoryStatus();
1785 TH1::AddDirectory(kFALSE);
1789 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1790 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 11,-.5, 10.5);
1791 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1792 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",100,0.,100.);
1793 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1794 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1795 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1797 // 5D single track eff histo: phi:eta:gen pt:rec pt:isReconstructed - use binning as for track QA
1798 Int_t nBinsSingleTrackEffHisto[5] = { fQATrackNBinsPhi, fQATrackNBinsEta, fQATrackNBinsPt, fQATrackNBinsPt, 2 };
1799 Double_t binMinSingleTrackEffHisto[5] = { fQATrackPhiMin, fQATrackEtaMin, fQATrackPtMin, fQATrackPtMin, 0 };
1800 Double_t binMaxSingleTrackEffHisto[5] = { fQATrackPhiMax, fQATrackEtaMax, fQATrackPtMax, fQATrackPtMax, 2 };
1801 const char* labelsSingleTrackEffHisto[5] = {"#phi","#eta","gen p_{T} [GeV/c]", "rec p_{T} [GeV/c]", "isRec"};
1803 fhnSingleTrackRecEffHisto = new THnSparseF("fhnSingleTrackRecEffHisto","generated tracks phi:eta:pt:isReconstructed",5,
1804 nBinsSingleTrackEffHisto,binMinSingleTrackEffHisto,binMaxSingleTrackEffHisto);
1806 AliAnalysisTaskFragmentationFunction::SetProperties(fhnSingleTrackRecEffHisto,5,labelsSingleTrackEffHisto);
1809 // 7D jets track eff histo: jet phi:eta:pt:track pt:z:xi:isReconstructed - use binning as for track/jet QA
1810 Int_t nBinsJetTrackEffHisto[7] = { fQAJetNBinsPhi, fQAJetNBinsEta, fFFNBinsJetPt, fFFNBinsPt, fFFNBinsZ, fFFNBinsXi, 2};
1811 Double_t binMinJetTrackEffHisto[7] = { fQAJetPhiMin, fQAJetEtaMin, fFFJetPtMin , fFFPtMin, fFFZMin , fFFXiMin, 0 };
1812 Double_t binMaxJetTrackEffHisto[7] = { fQAJetPhiMax, fQAJetEtaMax, fFFJetPtMax , fFFPtMax, fFFZMax , fFFXiMax, 2 };
1813 const char* labelsJetTrackEffHisto[7] = {"jet #phi","jet #eta","jet p_{T} [GeV/c]","track p_{T} [GeV/c]","z","#xi","isRec"};
1815 fhnJetTrackRecEffHisto = new THnSparseF("fhnJetTrackRecEffHisto","generated tracks - jet phi:jet eta:jet pt:track pt:z:xi:isReconstructed",7,
1816 nBinsJetTrackEffHisto,binMinJetTrackEffHisto,binMaxJetTrackEffHisto);
1818 AliAnalysisTaskFragmentationFunction::SetProperties(fhnJetTrackRecEffHisto,7,labelsJetTrackEffHisto);
1821 fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1822 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1823 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1824 fQATrackHighPtThreshold);
1825 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1826 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1827 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1828 fQATrackHighPtThreshold);
1829 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1830 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1831 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1832 fQATrackHighPtThreshold);
1835 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1836 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1837 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1838 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1839 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1840 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1841 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1842 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1843 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1844 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1845 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1846 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1847 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1848 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1849 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1850 fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1851 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1854 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1855 fFFNBinsPt, fFFPtMin, fFFPtMax,
1856 fFFNBinsXi, fFFXiMin, fFFXiMax,
1857 fFFNBinsZ , fFFZMin , fFFZMax);
1858 fFFHistosRecLeading = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1859 fFFNBinsPt, fFFPtMin, fFFPtMax,
1860 fFFNBinsXi, fFFXiMin, fFFXiMax,
1861 fFFNBinsZ , fFFZMin , fFFZMax);
1862 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1863 fFFNBinsPt, fFFPtMin, fFFPtMax,
1864 fFFNBinsXi, fFFXiMin, fFFXiMax,
1865 fFFNBinsZ , fFFZMin , fFFZMax);
1866 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1867 fFFNBinsPt, fFFPtMin, fFFPtMax,
1868 fFFNBinsXi, fFFXiMin, fFFXiMax,
1869 fFFNBinsZ , fFFZMin , fFFZMax);
1870 fFFHistosGenLeading = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1871 fFFNBinsPt, fFFPtMin, fFFPtMax,
1872 fFFNBinsXi, fFFXiMin, fFFXiMax,
1873 fFFNBinsZ , fFFZMin , fFFZMax);
1874 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
1875 fFFNBinsPt, fFFPtMin, fFFPtMax,
1876 fFFNBinsXi, fFFXiMin, fFFXiMax,
1877 fFFNBinsZ , fFFZMin , fFFZMax);
1880 fIJHistosRecCuts = new AliFragFuncIntraJetHistos("RecCuts", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1881 fIJNBinsPt, fIJPtMin, fIJPtMax,
1882 fIJNBinsZ, fIJZMin, fIJZMax,
1883 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1884 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1885 fIJNBinsJt , fIJJtMin , fIJJtMax);
1886 fIJHistosRecLeading = new AliFragFuncIntraJetHistos("RecLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1887 fIJNBinsPt, fIJPtMin, fIJPtMax,
1888 fIJNBinsZ, fIJZMin, fIJZMax,
1889 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1890 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1891 fIJNBinsJt , fIJJtMin , fIJJtMax);
1892 fIJHistosRecLeadingTrack = new AliFragFuncIntraJetHistos("RecLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1893 fIJNBinsPt, fIJPtMin, fIJPtMax,
1894 fIJNBinsZ, fIJZMin, fIJZMax,
1895 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1896 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1897 fIJNBinsJt , fIJJtMin , fIJJtMax);
1898 fIJHistosGen = new AliFragFuncIntraJetHistos("Gen", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1899 fIJNBinsPt, fIJPtMin, fIJPtMax,
1900 fIJNBinsZ, fIJZMin, fIJZMax,
1901 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1902 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1903 fIJNBinsJt , fIJJtMin , fIJJtMax);
1904 fIJHistosGenLeading = new AliFragFuncIntraJetHistos("GenLeading", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1905 fIJNBinsPt, fIJPtMin, fIJPtMax,
1906 fIJNBinsZ, fIJZMin, fIJZMax,
1907 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1908 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1909 fIJNBinsJt , fIJJtMin , fIJJtMax);
1910 fIJHistosGenLeadingTrack = new AliFragFuncIntraJetHistos("GenLeadingTrack", fIJNBinsJetPt, fIJJetPtMin, fIJJetPtMax,
1911 fIJNBinsPt, fIJPtMin, fIJPtMax,
1912 fIJNBinsZ, fIJZMin, fIJZMax,
1913 fIJNBinsCosTheta , fIJCosThetaMin , fIJCosThetaMax,
1914 fIJNBinsTheta , fIJThetaMin , fIJThetaMax,
1915 fIJNBinsJt , fIJJtMin , fIJJtMax);
1918 fFFDiJetHistosRecCuts = new AliFragFuncDiJetHistos("RecCuts", fDiJetKindBins,
1919 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
1920 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
1921 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
1922 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
1923 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
1924 fFFDiJetHistosRecLeading = new AliFragFuncDiJetHistos("RecLeading", fDiJetKindBins,
1925 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
1926 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
1927 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
1928 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
1929 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
1930 fFFDiJetHistosRecLeadingTrack = new AliFragFuncDiJetHistos("RecLeadingTrack", fDiJetKindBins,
1931 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
1932 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
1933 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
1934 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
1935 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
1937 fFFDiJetHistosGen = new AliFragFuncDiJetHistos("Gen", fDiJetKindBins,
1938 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
1939 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
1940 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
1941 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
1942 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
1943 fFFDiJetHistosGenLeading = new AliFragFuncDiJetHistos("GenLeading", fDiJetKindBins,
1944 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
1945 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
1946 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
1947 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
1948 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
1949 fFFDiJetHistosGenLeadingTrack = new AliFragFuncDiJetHistos("GenLeadingTrack", fDiJetKindBins,
1950 fDiJetNBinsJetInvMass, fDiJetJetInvMassMin, fDiJetJetInvMassMax,
1951 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
1952 fDiJetNBinsPt, fDiJetPtMin, fDiJetPtMax,
1953 fDiJetNBinsXi, fDiJetXiMin, fDiJetXiMax,
1954 fDiJetNBinsZ, fDiJetZMin, fDiJetZMax);
1956 fQADiJetHistosRecCuts = new AliFragFuncQADiJetHistos("RecCuts", fDiJetKindBins,
1957 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
1958 fQADiJetNBinsJetPt, fQADiJetJetPtMin, fQADiJetJetPtMax,
1959 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax ,
1960 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax ,
1961 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax);
1962 fQADiJetHistosGen = new AliFragFuncQADiJetHistos("Gen", fDiJetKindBins,
1963 fQADiJetNBinsInvMass, fQADiJetInvMassMin, fQADiJetInvMassMax,
1964 fDiJetNBinsJetPt, fDiJetJetPtMin, fDiJetJetPtMax,
1965 fQADiJetNBinsDeltaPhi, fQADiJetDeltaPhiMin, fQADiJetDeltaPhiMax,
1966 fQADiJetNBinsDeltaEta, fQADiJetDeltaEtaMin, fQADiJetDeltaEtaMax,
1967 fQADiJetNBinsDeltaPt, fQADiJetDeltaPtMin, fQADiJetDeltaPtMax);
1970 fQATrackHistosRec->DefineHistos();
1971 fQATrackHistosRecCuts->DefineHistos();
1972 fQATrackHistosGen->DefineHistos();
1974 fQAJetHistosRec->DefineHistos();
1975 fQAJetHistosRecCuts->DefineHistos();
1976 fQAJetHistosRecCutsLeading->DefineHistos();
1977 fQAJetHistosGen->DefineHistos();
1978 fQAJetHistosGenLeading->DefineHistos();
1979 fQAJetHistosRecEffLeading->DefineHistos();
1981 fFFHistosRecCuts->DefineHistos();
1982 fFFHistosRecLeading->DefineHistos();
1983 fFFHistosRecLeadingTrack->DefineHistos();
1984 fFFHistosGen->DefineHistos();
1985 fFFHistosGenLeading->DefineHistos();
1986 fFFHistosGenLeadingTrack->DefineHistos();
1988 fIJHistosRecCuts->DefineHistos();
1989 fIJHistosRecLeading->DefineHistos();
1990 fIJHistosRecLeadingTrack->DefineHistos();
1991 fIJHistosGen->DefineHistos();
1992 fIJHistosGenLeading->DefineHistos();
1993 fIJHistosGenLeadingTrack->DefineHistos();
1995 fFFDiJetHistosRecCuts->DefineDiJetHistos();
1996 fFFDiJetHistosRecLeading->DefineDiJetHistos();
1997 fFFDiJetHistosRecLeadingTrack->DefineDiJetHistos();
1998 fFFDiJetHistosGen->DefineDiJetHistos();
1999 fFFDiJetHistosGenLeading->DefineDiJetHistos();
2000 fFFDiJetHistosGenLeadingTrack->DefineDiJetHistos();
2001 fQADiJetHistosRecCuts->DefineQADiJetHistos();
2002 fQADiJetHistosGen->DefineQADiJetHistos();
2004 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
2005 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
2006 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
2009 const Int_t saveLevel = 5;
2011 fCommonHistList->Add(fh1EvtSelection);
2012 fFFHistosRecCuts->AddToOutput(fCommonHistList);
2013 fFFHistosRecLeading->AddToOutput(fCommonHistList);
2014 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
2016 if(genJets && genTracks){
2017 fFFHistosGen->AddToOutput(fCommonHistList);
2018 fFFHistosGenLeading->AddToOutput(fCommonHistList);
2019 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
2023 fQATrackHistosRec->AddToOutput(fCommonHistList);
2024 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
2025 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
2027 fQAJetHistosRec->AddToOutput(fCommonHistList);
2028 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
2029 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
2030 if(recJetsEff) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
2033 fQAJetHistosGen->AddToOutput(fCommonHistList);
2034 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
2037 fCommonHistList->Add(fh1EvtMult);
2038 fCommonHistList->Add(fh1nRecJetsCuts);
2039 if(genJets) fCommonHistList->Add(fh1nGenJets);
2042 fCommonHistList->Add(fh1VertexNContributors);
2043 fCommonHistList->Add(fh1VertexZ);
2046 fIJHistosRecCuts->AddToOutput(fCommonHistList);
2047 fIJHistosRecLeading->AddToOutput(fCommonHistList);
2048 fIJHistosRecLeadingTrack->AddToOutput(fCommonHistList);
2050 if(genJets && genTracks){
2051 fIJHistosGen->AddToOutput(fCommonHistList);
2052 fIJHistosGenLeading->AddToOutput(fCommonHistList);
2053 fIJHistosGenLeadingTrack->AddToOutput(fCommonHistList);
2057 fFFDiJetHistosRecCuts->AddToOutput(fCommonHistList);
2058 fFFDiJetHistosRecLeading->AddToOutput(fCommonHistList);
2059 fFFDiJetHistosRecLeadingTrack->AddToOutput(fCommonHistList);
2060 fQADiJetHistosRecCuts->AddToOutput(fCommonHistList);
2062 if(genJets && genTracks){
2063 fFFDiJetHistosGen->AddToOutput(fCommonHistList);
2064 fFFDiJetHistosGenLeading->AddToOutput(fCommonHistList);
2065 fFFDiJetHistosGenLeadingTrack->AddToOutput(fCommonHistList);
2066 fQADiJetHistosGen->AddToOutput(fCommonHistList);
2069 if(recJetsEff && genTracks){
2070 fCommonHistList->Add(fhnSingleTrackRecEffHisto);
2071 fCommonHistList->Add(fhnJetTrackRecEffHisto);
2072 fCommonHistList->Add(fh1nRecEffJets);
2076 // =========== Switch on Sumw2 for all histos ===========
2077 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
2078 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
2079 if (h1) h1->Sumw2();
2081 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
2082 if(hnSparse) hnSparse->Sumw2();
2086 TH1::AddDirectory(oldStatus);
2089 //_______________________________________________
2090 void AliAnalysisTaskFragmentationFunction::Init()
2093 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
2097 //_____________________________________________________________
2098 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
2101 // Called for each event
2102 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
2105 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
2106 // Trigger selection
2108 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
2109 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
2110 if(inputHandler->IsEventSelected() & AliVEvent::kMB){
2111 if(fDebug > 1) Printf(" Trigger Selection: event ACCEPTED ... ");
2112 fh1EvtSelection->Fill(1.);
2114 fh1EvtSelection->Fill(0.);
2115 if(inputHandler->InheritsFrom("AliESDInputHandler")){ // PhysicsSelection only with ESD input
2116 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
2117 PostData(1, fCommonHistList);
2122 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
2124 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
2127 fMCEvent = MCEvent();
2129 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
2132 // get AOD event from input/ouput
2133 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
2134 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
2135 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
2136 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
2139 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
2140 if( handler && handler->InheritsFrom("AliAODHandler") ) {
2141 fAOD = ((AliAODHandler*)handler)->GetAOD();
2142 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
2147 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
2152 // event selection (vertex) *****************************************
2154 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
2155 Int_t nTracksPrim = primVtx->GetNContributors();
2156 fh1VertexNContributors->Fill(nTracksPrim);
2158 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
2160 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
2161 fh1EvtSelection->Fill(2.);
2162 PostData(1, fCommonHistList);
2166 fh1VertexZ->Fill(primVtx->GetZ());
2168 if(TMath::Abs(primVtx->GetZ())>10){
2169 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2170 fh1EvtSelection->Fill(3.);
2171 PostData(1, fCommonHistList);
2175 TString primVtxName(primVtx->GetName());
2177 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
2178 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
2179 fh1EvtSelection->Fill(4.);
2180 PostData(1, fCommonHistList);
2183 if (fDebug > 1) Printf("%s:%d primary vertex selection: event ACCEPTED ...",(char*)__FILE__,__LINE__);
2184 fh1EvtSelection->Fill(5.);
2187 //___ fetch jets __________________________________________________________________________
2189 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
2191 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
2192 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2193 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
2195 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
2196 Int_t nRecJetsCuts = 0;
2197 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
2198 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2199 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2200 fh1nRecJetsCuts->Fill(nRecJetsCuts);
2203 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2204 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
2206 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
2207 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2208 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
2209 fh1nGenJets->Fill(nGenJets);
2212 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
2213 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
2214 Int_t nRecEffJets = 0;
2215 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
2216 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2217 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
2218 fh1nRecEffJets->Fill(nRecEffJets);
2221 //____ fetch particles __________________________________________________________
2223 Int_t nT = GetListOfTracks(fTracksRec, kTrackAOD);
2225 if(nT>=0) nRecPart = fTracksRec->GetEntries();
2226 if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
2227 if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
2230 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
2231 Int_t nRecPartCuts = 0;
2232 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
2233 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2234 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
2235 fh1EvtMult->Fill(nRecPartCuts);
2238 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
2240 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
2241 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2242 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
2245 //____ analysis, fill histos ___________________________________________________
2249 for(Int_t it=0; it<nRecPart; ++it){
2250 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));
2251 fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2253 for(Int_t it=0; it<nRecPartCuts; ++it){
2254 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
2255 fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2257 for(Int_t it=0; it<nGenPart; ++it){
2258 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
2259 fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
2264 for(Int_t ij=0; ij<nRecJets; ++ij){
2266 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
2267 fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2271 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
2273 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(ij));
2274 fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2276 if(ij==0){ // leading jet
2278 fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
2280 TList* jettracklist = new TList();
2281 Double_t sumPt = 0.;
2282 Float_t leadTrackPx = 0.;
2283 Float_t leadTrackPy = 0.;
2284 Float_t leadTrackPz = 0.;
2285 Float_t leadTrackP = 0.;
2286 Float_t leadTrackPt = 0.;
2287 TLorentzVector* leadTrackV = new TLorentzVector();
2289 if(GetFFRadius()<=0){
2290 GetJetTracksTrackrefs(jettracklist, jet);
2292 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt);
2295 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2296 Float_t trackPx = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Px();
2297 Float_t trackPy = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Py();
2298 Float_t trackPz = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Pz();
2299 Float_t trackP = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->P();
2300 Float_t trackPt = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Pt();
2301 Float_t jetPx = jet->Px();
2302 Float_t jetPy = jet->Py();
2303 Float_t jetPz = jet->Pz();
2304 Float_t jetP = jet->P();
2305 Float_t jetPt = jet->Pt();
2306 TLorentzVector* trackV = new TLorentzVector();
2307 TLorentzVector *jetV = new TLorentzVector();
2308 trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
2309 jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
2311 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2313 fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);
2314 fIJHistosRecCuts->FillIntraJet( trackV, jetV );
2317 leadTrackPx = trackPx;
2318 leadTrackPy = trackPy;
2319 leadTrackPz = trackPz;
2320 leadTrackP = trackP;
2321 leadTrackPt = trackPt;
2322 fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
2324 leadTrackV->SetPxPyPzE(leadTrackPx,leadTrackPy,leadTrackPz,leadTrackP);
2325 fIJHistosRecLeadingTrack->FillIntraJet( leadTrackV, jetV );
2327 fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);
2328 fIJHistosRecLeading->FillIntraJet( trackV, leadTrackV );
2335 delete jettracklist;
2340 for(Int_t ij=0; ij<nGenJets; ++ij){
2342 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
2343 fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2345 if(ij==0){ // leading jet
2347 fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
2349 TList* jettracklist = new TList();
2350 Double_t sumPt = 0.;
2351 Float_t leadTrackPx = 0.;
2352 Float_t leadTrackPy = 0.;
2353 Float_t leadTrackPz = 0.;
2354 Float_t leadTrackP = 0.;
2355 Float_t leadTrackPt = 0.;
2356 TLorentzVector* leadTrackV = new TLorentzVector();
2358 if(GetFFRadius()<=0){
2359 GetJetTracksTrackrefs(jettracklist, jet);
2361 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt);
2364 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2365 Float_t trackPx = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Px();
2366 Float_t trackPy = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Py();
2367 Float_t trackPz = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Pz();
2368 Float_t trackP = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->P();
2369 Float_t trackPt = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Pt();
2370 Float_t jetPx = jet->Px();
2371 Float_t jetPy = jet->Py();
2372 Float_t jetPz = jet->Pz();
2373 Float_t jetP = jet->P();
2374 Float_t jetPt = jet->Pt();
2375 TLorentzVector* trackV = new TLorentzVector();
2376 TLorentzVector *jetV = new TLorentzVector();
2377 trackV->SetPxPyPzE(trackPx,trackPy,trackPz,trackP);
2378 jetV->SetPxPyPzE(jetPx,jetPy,jetPz,jetP);
2380 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2382 fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt);
2383 fIJHistosGen->FillIntraJet( trackV, jetV );
2386 leadTrackPx = trackPx;
2387 leadTrackPy = trackPy;
2388 leadTrackPz = trackPz;
2389 leadTrackP = trackP;
2390 leadTrackPt = trackPt;
2391 fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
2393 leadTrackV->SetPxPyPzE(leadTrackPx,leadTrackPy,leadTrackPz,leadTrackP);
2394 fIJHistosGenLeadingTrack->FillIntraJet( leadTrackV, jetV );
2396 fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt);
2397 fIJHistosGenLeading->FillIntraJet( trackV, leadTrackV );
2404 delete jettracklist;
2408 //_______ DiJet part _____________________________________________________
2410 if (nRecJetsCuts > 1) // OB: debugged this
2413 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(0));
2414 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(1));
2416 // DiJet deltaphi calculation
2417 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
2418 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
2419 Double_t deltaPhi = TMath::Abs(phi1-phi2);
2420 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
2422 // DiJet CDF cut calculation
2423 Double_t Et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
2424 Double_t Et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
2425 Double_t sumEt = Et1 + Et2;
2426 Double_t normEt1PlusEt2 = TMath::Sqrt(Et1*Et1+Et2*Et2+2*Et1*Et2*TMath::Cos(deltaPhi));
2427 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
2429 // DiJet events selection
2430 Bool_t positionCut = 0;
2431 Bool_t positionEnergyCut = 0;
2435 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
2436 // Position-Energy cut :
2437 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
2439 if (ratio < fDiJetCDFCut) cdfCut = 1;
2443 if (fDiJetCut == 1 && positionCut == 1) go = 1;
2444 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
2445 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
2449 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
2450 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
2451 Double_t meanEt = (Double_t)((Et1+Et2)/2.);
2452 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
2454 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
2458 fQADiJetHistosRecCuts->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, jetBin);
2460 TList* jettracklist1 = new TList();
2461 Double_t sumPt1 = 0.;
2462 Float_t leadTrackPt1 = 0;
2464 TList* jettracklist2 = new TList();
2465 Double_t sumPt2 = 0.;
2466 Float_t leadTrackPt2 = 0;
2468 if(GetFFRadius()<=0)
2470 GetJetTracksTrackrefs(jettracklist1, jet1);
2471 GetJetTracksTrackrefs(jettracklist2, jet2);
2475 GetJetTracksPointing(fTracksRecCuts, jettracklist1, jet1, GetFFRadius(), sumPt1);
2476 GetJetTracksPointing(fTracksRecCuts, jettracklist2, jet2, GetFFRadius(), sumPt2);
2479 Int_t nTracks = jettracklist1->GetSize();
2480 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
2482 for(Int_t it=0; it<nTracks; ++it)
2484 if (it < jettracklist1->GetSize())
2486 Float_t trackPt1 = (dynamic_cast<AliVParticle*> (jettracklist1->At(it)))->Pt();
2487 Float_t jetPt1 = jet1->Pt();
2489 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2491 fFFDiJetHistosRecCuts->FillDiJetFF(1, trackPt1, jetPt1, jetBin, incrementJetPt);
2492 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt1, jetPt1, jetBin, incrementJetPt);
2496 leadTrackPt1 = trackPt1;
2498 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(1, leadTrackPt1, jetPt1, jetBin, kTRUE);
2499 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt1, jetPt1, jetBin, kTRUE);
2502 fFFDiJetHistosRecLeading->FillDiJetFF(1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
2503 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
2506 if (it < jettracklist2->GetSize())
2508 Float_t trackPt2 = (dynamic_cast<AliVParticle*>(jettracklist2->At(it)))->Pt();
2509 Float_t jetPt2 = jet2->Pt();
2511 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2513 fFFDiJetHistosRecCuts->FillDiJetFF(2, trackPt2, jetPt2, jetBin, incrementJetPt);
2514 fFFDiJetHistosRecCuts->FillDiJetFF(0, trackPt2, jetPt2, jetBin, incrementJetPt);
2518 leadTrackPt2 = trackPt2;
2520 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(2, leadTrackPt2, jetPt2, jetBin, kTRUE);
2521 fFFDiJetHistosRecLeadingTrack->FillDiJetFF(0, leadTrackPt2, jetPt2, jetBin, kTRUE);
2524 fFFDiJetHistosRecLeading->FillDiJetFF(2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
2525 fFFDiJetHistosRecLeading->FillDiJetFF(0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
2527 } // End loop on tracks
2529 delete jettracklist1;
2530 delete jettracklist2;
2532 } // End if(jetBin > 0)
2533 else { Printf("Jet bins for di-jet studies not set !");}
2535 } // End if(nRecJets > 1)
2539 AliAODJet* jet1 = dynamic_cast<AliAODJet*>(fJetsGen->At(0));
2540 AliAODJet* jet2 = dynamic_cast<AliAODJet*>(fJetsGen->At(1));
2542 Double_t deltaPhi = 0;
2543 Double_t phi1 = TVector2::Phi_0_2pi(jet1->Phi());
2544 Double_t phi2 = TVector2::Phi_0_2pi(jet2->Phi());
2545 deltaPhi = TMath::Abs(phi1-phi2);
2546 if (deltaPhi > TMath::Pi() && deltaPhi < 2*TMath::Pi()) deltaPhi = 2*TMath::Pi() - deltaPhi;
2548 Double_t Et1 = TMath::Abs(jet1->E()*TMath::Sin(jet1->Theta()));
2549 Double_t Et2 = TMath::Abs(jet2->E()*TMath::Sin(jet2->Theta()));
2550 Double_t sumEt = Et1 + Et2;
2551 Double_t normEt1PlusEt2 = TMath::Sqrt(Et1*Et1+Et2*Et2+2*Et1*Et2*TMath::Cos(deltaPhi));
2552 Double_t ratio = (Double_t)(normEt1PlusEt2/sumEt);
2554 // DiJet events selection
2555 Bool_t positionCut = 0;
2556 Bool_t positionEnergyCut = 0;
2560 if (deltaPhi > fDiJetDeltaPhiCut) positionCut = 1;
2561 // Position-Energy cut :
2562 if ((deltaPhi > fDiJetDeltaPhiCut) && ((jet2->Pt()) >= fDiJetPtFractionCut*(jet1->Pt()))) positionEnergyCut = 1;
2564 if (ratio < fDiJetCDFCut) cdfCut = 1;
2568 if (fDiJetCut == 1 && positionCut == 1) go = 1;
2569 if (fDiJetCut == 2 && positionEnergyCut == 1) go = 1;
2570 if (fDiJetCut == 3 && cdfCut == 1) go = 1;
2574 Double_t deltaEta = TMath::Abs(jet1->Eta()-jet2->Eta());
2575 Double_t deltaPt = TMath::Abs(jet1->Pt()-jet2->Pt());
2576 Double_t meanEt = (Double_t)((Et1+Et2)/2.);
2577 Double_t invariantMass = (Double_t)InvMass(jet1,jet2);
2579 Double_t jetBin = GetDiJetBin(invariantMass, jet1->Pt(), meanEt, fDiJetKindBins);
2583 fQADiJetHistosGen->FillDiJetQA(invariantMass, deltaPhi, deltaEta, deltaPt, jetBin);
2585 TList* jettracklist1 = new TList();
2586 Double_t sumPt1 = 0.;
2587 Float_t leadTrackPt1 = 0.;
2589 TList* jettracklist2 = new TList();
2590 Double_t sumPt2 = 0.;
2591 Float_t leadTrackPt2 = 0.;
2593 if(GetFFRadius()<=0)
2595 GetJetTracksTrackrefs(jettracklist1, jet1);
2596 GetJetTracksTrackrefs(jettracklist2, jet2);
2600 GetJetTracksPointing(fTracksGen, jettracklist1, jet1, GetFFRadius(), sumPt1);
2601 GetJetTracksPointing(fTracksGen, jettracklist2, jet2, GetFFRadius(), sumPt2);
2604 Int_t nTracks = jettracklist1->GetSize();
2605 if (jettracklist1->GetSize() < jettracklist2->GetSize()) nTracks = jettracklist2->GetSize();
2607 for(Int_t it=0; it<nTracks; ++it)
2609 if (it < jettracklist1->GetSize())
2611 Float_t trackPt1 = (dynamic_cast<AliAODTrack*>(jettracklist1->At(it)))->Pt();
2612 Float_t jetPt1 = jet1->Pt();
2614 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2616 fFFDiJetHistosGen->FillDiJetFF( 1, trackPt1, jetPt1, jetBin, incrementJetPt);
2617 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt1, jetPt1, jetBin, incrementJetPt);
2621 leadTrackPt1 = trackPt1;
2623 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 1, leadTrackPt1, jetPt1, jetBin, kTRUE);
2624 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt1, jetPt1, jetBin, kTRUE);
2627 fFFDiJetHistosGenLeading->FillDiJetFF( 1, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
2628 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt1, leadTrackPt1, jetBin, incrementJetPt);
2631 if (it < jettracklist2->GetSize())
2633 Float_t trackPt2 = (dynamic_cast<AliAODTrack*>(jettracklist2->At(it)))->Pt();
2634 Float_t jetPt2 = jet2->Pt();
2636 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2638 fFFDiJetHistosGen->FillDiJetFF( 2, trackPt2, jetPt2, jetBin, incrementJetPt);
2639 fFFDiJetHistosGen->FillDiJetFF( 0, trackPt2, jetPt2, jetBin, incrementJetPt);
2643 leadTrackPt2 = trackPt2;
2645 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 2, leadTrackPt2, jetPt2, jetBin, kTRUE);
2646 fFFDiJetHistosGenLeadingTrack->FillDiJetFF( 0, leadTrackPt2, jetPt2, jetBin, kTRUE);
2649 fFFDiJetHistosGenLeading->FillDiJetFF( 2, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
2650 fFFDiJetHistosGenLeading->FillDiJetFF( 0, trackPt2, leadTrackPt2, jetBin, incrementJetPt);
2652 } // End loop on tracks
2654 delete jettracklist1;
2655 delete jettracklist2;
2657 } // End if(jetBin > 0)
2658 else { Printf("Jet bins for di-jet studies not set !");}
2660 } // End if(nGenJets > 1)
2663 // ____ efficiency _______________________________
2665 // arrays for generated particles: reconstructed AOD track index, isPrimary flag
2669 // array for reconcstructed AOD tracks: generated particle index
2672 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
2673 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
2675 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
2676 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
2678 // associate gen and rec tracks, store indices in TArrays
2679 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim);
2682 FillSingleTrackRecEffHisto(fhnSingleTrackRecEffHisto,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim);
2685 for(Int_t ij=0; ij<nRecEffJets; ++ij){
2687 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecEff->At(ij));
2689 if(ij==0){ // leading jet
2691 TList* jettracklist = new TList();
2692 Double_t sumPt = 0.;
2694 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt); // for efficiency: gen tracks from pointing with gen/rec jet
2696 Double_t jetEta = jet->Eta();
2697 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
2698 Double_t jetPt = sumPt;
2700 fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, jetPt );
2701 FillJetTrackRecEffHisto(fhnJetTrackRecEffHisto,jetPhi,jetEta,jetPt,jettracklist,fTracksAODMCCharged,indexAODTr,isGenPrim);
2703 delete jettracklist;
2707 //___________________
2709 fTracksRec->Clear();
2710 fTracksRecCuts->Clear();
2711 fTracksGen->Clear();
2712 fTracksAODMCCharged->Clear();
2713 fTracksRecQualityCuts->Clear();
2716 fJetsRecCuts->Clear();
2718 fJetsRecEff->Clear();
2721 PostData(1, fCommonHistList);
2725 //________________________________________________________________________________________
2726 Double_t AliAnalysisTaskFragmentationFunction::InvMass(AliAODJet* jet1, AliAODJet* jet2)
2729 Double_t invMass = 0.;
2730 invMass = TMath::Sqrt(pow(jet1->E()+jet2->E(),2) - pow(jet1->Px()+jet2->Px(),2) -
2731 pow(jet1->Py()+jet2->Py(),2) - pow(jet1->Pz()+jet2->Pz(),2));
2737 //________________________________________________________________________________________
2738 Double_t AliAnalysisTaskFragmentationFunction::GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t EtMean, Int_t kindBins)
2740 Double_t jetBinOk = 0.;
2741 Double_t jetBin = 0.;
2743 Float_t stepInvMass = (fDiJetJetInvMassMax - fDiJetJetInvMassMin)/fDiJetNBinsJetInvMass;
2744 Float_t stepPt = (fDiJetJetPtMax - fDiJetJetPtMin)/fDiJetNBinsJetPt;
2748 for(Int_t i=0; i<fDiJetNBinsJetInvMass; ++i)
2750 jetBin = fDiJetJetInvMassMin + i*stepInvMass/2.;
2751 if(((fDiJetJetInvMassMin+i*stepInvMass) <= invMass) &&
2752 (fDiJetJetInvMassMin + (i+1)*stepInvMass) > invMass) jetBinOk = jetBin;
2756 else if (kindBins == 3)
2758 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
2760 jetBin = fDiJetJetPtMin + i*stepPt/2.;
2761 if(((fDiJetJetPtMin+i*stepPt) <= EtMean) &&
2762 (fDiJetJetPtMin + (i+1)*stepPt) > EtMean) jetBinOk = jetBin;
2766 else if (kindBins == 2)
2768 for(Int_t i=0; i<fDiJetNBinsJetPt; ++i)
2770 jetBin = fDiJetJetPtMin + i*stepPt/2.;
2771 if(((fDiJetJetPtMin+i*stepPt) <= leadingJetPt) &&
2772 (fDiJetJetPtMin + (i+1)*stepPt) > leadingJetPt) jetBinOk = jetBin;
2776 else {Printf("WARNING: kindBins wrongly set ! Please make sure to call SetKindSlices() and set the kind parameter to 1, 2 or 3.\n");}
2783 //______________________________________________________________
2784 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
2788 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
2791 //_________________________________________________________________________________
2792 Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
2794 // fill list of tracks selected according to type
2796 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
2799 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2803 if(type==kTrackUndef) return 0;
2806 if(type==kTrackAODCuts || type==kTrackAOD){
2808 // all rec. tracks, esd filter mask, eta range
2809 if(!fAOD) return -1;
2811 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
2812 AliAODTrack *tr = fAOD->GetTrack(it);
2814 if(type == kTrackAODCuts){
2815 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2816 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2817 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2818 if(tr->Pt() < fTrackPtCut) continue;
2824 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2825 // kine particles, all or rather charged
2826 if(!fMCEvent) return iCount;
2828 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2829 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2831 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2832 if(part->Charge()==0) continue;
2834 if(type == kTrackKineChargedAcceptance &&
2835 ( part->Eta() < fTrackEtaMin
2836 || part->Eta() > fTrackEtaMax
2837 || part->Phi() < fTrackPhiMin
2838 || part->Phi() > fTrackPhiMax
2839 || part->Pt() < fTrackPtCut)) continue;
2846 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance) {
2847 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2848 if(!fAOD) return -1;
2850 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2851 if(!tca)return iCount;
2853 for(int it=0; it<tca->GetEntriesFast(); ++it){
2854 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2855 if(!part->IsPhysicalPrimary())continue;
2857 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance){
2858 if(part->Charge()==0) continue;
2859 if(type==kTrackAODMCChargedAcceptance &&
2860 ( part->Eta() > fTrackEtaMax
2861 || part->Eta() < fTrackEtaMin
2862 || part->Phi() > fTrackPhiMax
2863 || part->Phi() < fTrackPhiMin
2864 || part->Pt() < fTrackPtCut)) continue;
2876 // _______________________________________________________________________________
2877 Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
2879 // fill list of jets selected according to type
2882 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2886 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
2888 if(fBranchRecJets.Length()==0){
2889 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
2890 if(fDebug>1)fAOD->Print();
2894 TClonesArray *aodRecJets = new TClonesArray();
2895 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchRecJets.Data()));
\r
2896 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchRecJets.Data()));
\r
2899 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
2901 if(fDebug>1)fAOD->Print();
2907 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
2909 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
2912 if( tmp->Pt() < fJetPtCut ) continue;
2913 if( type == kJetsRecAcceptance &&
2914 ( tmp->Eta() < fJetEtaMin
2915 || tmp->Eta() > fJetEtaMax
2916 || tmp->Phi() < fJetPhiMin
2917 || tmp->Phi() > fJetPhiMax )) continue;
2928 else if(type == kJetsKine || type == kJetsKineAcceptance){
2934 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
2938 AliGenPythiaEventHeader* pythiaGenHeader = AliAnalysisHelperJetTasks::GetPythiaEventHeader(fMCEvent);
2939 if(!pythiaGenHeader){
2940 Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
2944 // fetch the pythia generated jets
2945 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
2948 AliAODJet *jet = new AliAODJet();
2949 pythiaGenHeader->TriggerJet(ip, p);
2950 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
2952 if( type == kJetsKineAcceptance &&
2953 ( jet->Eta() < fJetEtaMin
2954 || jet->Eta() > fJetEtaMax
2955 || jet->Phi() < fJetPhiMin
2956 || jet->Phi() > fJetPhiMax )) continue;
2964 else if(type == kJetsGen || type == kJetsGenAcceptance ){
2966 if(fBranchGenJets.Length()==0){
2967 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
2971 TClonesArray *aodGenJets = new TClonesArray();
2972 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchGenJets.Data()));
\r
2973 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchGenJets.Data()));
\r
2977 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
2979 if(fDebug>1)fAOD->Print();
2985 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
2987 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
2990 if( tmp->Pt() < fJetPtCut ) continue;
2991 if( type == kJetsGenAcceptance &&
2992 ( tmp->Eta() < fJetEtaMin
2993 || tmp->Eta() > fJetEtaMax
2994 || tmp->Phi() < fJetPhiMin
2995 || tmp->Phi() > fJetPhiMax )) continue;
3006 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
3011 // _________________________________________________________________________________________________________
3012 void AliAnalysisTaskFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
3014 //Set properties of THnSparse
3016 for(Int_t i=0; i<dim; i++){
3018 h->GetAxis(i)->SetTitle(labels[i]);
3019 h->GetAxis(i)->SetTitleColor(1);
3023 // __________________________________________________________________________________________
3024 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
3026 //Set properties of histos (x and y title)
3030 h->GetXaxis()->SetTitleColor(1);
3031 h->GetYaxis()->SetTitleColor(1);
3034 // _________________________________________________________________________________________________________
3035 void AliAnalysisTaskFragmentationFunction::SetProperties(TH2* h,const char* x, const char* y, const char* z)
3037 //Set properties of histos (x,y and z title)
3042 h->GetXaxis()->SetTitleColor(1);
3043 h->GetYaxis()->SetTitleColor(1);
3044 h->GetZaxis()->SetTitleColor(1);
3047 // ________________________________________________________________________________________________________________________________________________________
3048 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, AliAODJet* jet, const Double_t radius,Double_t& sumPt)
3050 // fill list of tracks in cone around jet axis
3055 jet->PxPyPz(jetMom);
3056 TVector3 jet3mom(jetMom);
3058 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
3060 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
3062 Double_t trackMom[3];
3063 track->PxPyPz(trackMom);
3064 TVector3 track3mom(trackMom);
3066 Double_t dR = jet3mom.DeltaR(track3mom);
3070 outputlist->Add(track);
3072 sumPt += track->Pt();
3079 // ___________________________________________________________________________________________
3080 void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, AliAODJet* jet)
3082 // list of jet tracks from trackrefs
3084 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
3086 for (Int_t itrack=0; itrack<nTracks; itrack++) {
3088 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
3090 AliError("expected ref track not found ");
3100 // _ ________________________________________________________________________________________________________________________________
3101 void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,TArrayS& isGenPrim)
3103 // associate generated and reconstructed tracks, fill TArrays of list indices
3106 Int_t nTracksRec = tracksRec->GetSize();
3107 Int_t nTracksGen = tracksAODMCCharged->GetSize();
3108 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3110 if(!nTracksGen) return;
3114 indexAODTr.Set(nTracksGen);
3115 indexMCTr.Set(nTracksRec);
3116 isGenPrim.Set(nTracksGen);
3118 indexAODTr.Reset(-1);
3119 indexMCTr.Reset(-1);
3122 // loop over reconstructed tracks, get generated track
3124 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
3126 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
3128 Int_t label = rectrack->GetLabel();
3130 // find MC track in our list
3131 AliAODMCParticle* gentrack = 0x0;
3132 if(label>=0) gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
3134 Int_t listIndex = -1;
3135 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
3139 indexAODTr[listIndex] = iRec;
3140 indexMCTr[iRec] = listIndex;
3145 // define primary sample for reconstruction efficiency
3147 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
3149 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
3151 Int_t pdg = gentrack->GetPdgCode();
3153 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
3154 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
3155 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
3157 isGenPrim[iGen] = kTRUE;
3162 // _____________________________________________________________________________________________________________________________________________
3163 void AliAnalysisTaskFragmentationFunction::FillSingleTrackRecEffHisto(THnSparse* histo, TList* tracksGen, TList* tracksRec, TArrayI& indexAODTr, TArrayS& isGenPrim){
3165 // fill THnSparse for single track reconstruction efficiency
3167 Int_t nTracksGen = tracksGen->GetSize();
3169 if(!nTracksGen) return;
3171 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
3173 if(isGenPrim[iGen] != 1) continue; // select primaries
3175 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
3177 Double_t ptGen = gentrack->Pt();
3178 Double_t etaGen = gentrack->Eta();
3179 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
3181 // apply same acc & pt cuts as for FF
3182 // could in principle also be done setting THNsparse axis limits before projecting,
3183 // but then the binning needs to be fine grained enough
3185 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
3186 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
3187 if(ptGen < fTrackPtCut) continue;
3189 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3191 Double_t ptRec = -1;
3195 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
3196 ptRec = rectrack->Pt();
3200 Double_t entries[5] = {phiGen,etaGen,ptGen,ptRec,isRec};
3201 histo->Fill(entries);
3205 // ______________________________________________________________________________________________________________________________________________________
3206 void AliAnalysisTaskFragmentationFunction::FillJetTrackRecEffHisto(THnSparse* histo,Double_t jetPhi, Double_t jetEta, Double_t jetPt, TList* jetTrackList,
3207 TList* tracksGen, TArrayI& indexAODTr, TArrayS& isGenPrim)
3209 // fill THnSparse for jet track reconstruction efficiency
3211 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
3213 if(!nTracksJet) return;
3215 for(Int_t iTr=0; iTr<nTracksJet; iTr++){
3217 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
3219 // find jet track in gen tracks list
3220 Int_t iGen = tracksGen->IndexOf(gentrack);
3223 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
3227 if(isGenPrim[iGen] != 1) continue; // select primaries
3229 Double_t ptGen = gentrack->Pt();
3230 Double_t etaGen = gentrack->Eta();
3231 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
3233 // apply same acc & pt cuts as for FF
3234 // could in principle also be done setting THNsparse axis limits before projecting,
3235 // but then the binning needs to be fine grained enough
3237 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
3238 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
3239 if(ptGen < fTrackPtCut) continue;
3241 Double_t z = ptGen / jetPt;
3243 if(z>0) xi = TMath::Log(1/z);
3246 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
3247 if(iRec>=0) isRec = 1;
3249 Double_t entries[7] = {jetPhi,jetEta,jetPt,ptGen,z,xi,isRec};
3250 histo->Fill(entries);