1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ////////////////////////////////////////////////////////////////////////
18 // Task for Heavy-flavour electron analysis in pPb collisions //
19 // (+ Electron-Hadron Jetlike Azimuthal Correlation) //
21 // version: September 12th, 2013. //
24 // Elienos Pereira de Oliveira Filho (epereira@cern.ch) //
25 // Cristiane Jahnke (cristiane.jahnke@cern.ch) //
27 ////////////////////////////////////////////////////////////////////////
35 #include "AliAnalysisTask.h"
36 #include "AliAnalysisManager.h"
37 #include "AliESDEvent.h"
38 #include "AliAODEvent.h"
39 #include "AliVEvent.h"
40 #include "AliESDInputHandler.h"
41 #include "AliESDtrackCuts.h"
42 #include "AliESDCaloCluster.h"
43 #include "AliESDCaloCells.h"
44 #include "AliEMCALTrack.h"
45 #include "AliExternalTrackParam.h"
46 #include "AliPhysicsSelection.h"
47 #include "TGeoGlobalMagField.h"
51 #include "AliCentrality.h"
52 #include "AliAODMCParticle.h"
53 #include "AliAODMCHeader.h"
55 #include "AliPIDResponse.h"
56 #include "AliHFEcontainer.h"
57 #include "AliHFEcuts.h"
58 #include "AliHFEpid.h"
59 #include "AliHFEpidBase.h"
60 #include "AliHFEpidQAmanager.h"
61 #include "AliHFEtools.h"
62 #include "AliCFContainer.h"
63 #include "AliCFManager.h"
64 #include "AliSelectNonHFE.h"
65 #include "AliHFEpidTPC.h"
66 #include "AliAnalysisTaskEMCalHFEpA.h"
68 #include "THnSparse.h"
69 #include "TLorentzVector.h"
72 #include "AliESDHandler.h"
73 #include "AliMCEventHandler.h"
74 #include "AliMCEvent.h"
76 #include "TParticle.h"
78 #include "AliAnalysisTaskSE.h"
79 #include "TRefArray.h"
82 #include "TGeoManager.h"
85 #include "AliKFParticle.h"
86 #include "AliKFVertex.h"
87 #include "AliVParticle.h"
88 #include "AliVTrack.h"
89 #include "AliEventPoolManager.h"
90 #include "TObjArray.h"
91 //______________________________________________________________________
93 //______________________________________________________________________
94 ClassImp(AliAnalysisTaskEMCalHFEpA)
96 //______________________________________________________________________
97 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA(const char *name)
98 : AliAnalysisTaskSE(name)
102 ,fUseShowerShapeCut(kFALSE)
103 ,fFillBackground(kFALSE)
104 ,fAssocWithSPD(kFALSE)
115 ,fIsFromGamma(kFALSE)
119 ,fPartnerCuts(new AliESDtrackCuts())
122 ,fNonHFE(new AliSelectNonHFE())
127 ,fHasCentralitySelection(kFALSE)
129 ,fCentralityHistPass(0)
151 ,fPtElec_ULS_weight(0)
152 ,fPtElec_LS_weight(0)
153 ,fPtElec_ULS2_weight(0)
154 ,fPtElec_LS2_weight(0)
169 ,fShowerShapeM02_EoverP(0)
170 ,fShowerShapeM20_EoverP(0)
189 ,fNcells_electrons(0)
196 ,fTPCnsigma_eta_electrons(0)
197 ,fTPCnsigma_eta_hadrons(0)
200 ,fnsigma_p_EoverPcut(0)
201 ,fEoverP_pt_pions2(0)
203 ,fEoverP_pt_hadrons(0)
209 ,fCEtaPhi_ULS_Weight(0)
210 ,fCEtaPhi_LS_Weight(0)
211 ,fCEtaPhi_ULS_NoP_Weight(0)
212 ,fCEtaPhi_LS_NoP_Weight(0)
248 ,fAngleCutFlag(kFALSE)
249 ,fChi2CutFlag(kFALSE)
251 ,fPtBackgroundBeforeReco(0)
252 ,fPtBackgroundBeforeReco2(0)
253 ,fPtBackgroundBeforeReco_weight(0)
254 ,fPtBackgroundBeforeReco2_weight(0)
255 ,fPtBackgroundAfterReco(0)
261 ,fPtMCparticleAll_nonPrimary(0)
262 ,fPtMCparticleAlle_nonPrimary(0)
263 ,fPtMCparticleAlle_Primary(0)
264 ,fPtMCparticleReco(0)
265 ,fPtMCparticleReco_nonPrimary(0)
266 ,fPtMCparticleAllHfe1(0)
267 ,fPtMCparticleRecoHfe1(0)
268 ,fPtMCparticleAllHfe2(0)
269 ,fPtMCparticleRecoHfe2(0)
270 ,fPtMCelectronAfterAll(0)
271 ,fPtMCelectronAfterAll_nonPrimary(0)
272 ,fPtMCelectronAfterAll_Primary(0)
276 ,fPtMC_EMCal_Selected(0)
278 ,fPtMC_TPC_Selected(0)
280 ,fPtMCWithoutLabel(0)
281 ,fPtIsPhysicaPrimary(0)
284 ,fPID(new AliHFEpid("hfePid"))
287 ,fRejectKinkMother(kFALSE)
292 ,fMCtrackGGGMother(0)
296 ,fMCparticleMother(0)
297 ,fMCparticleGMother(0)
298 ,fMCparticleGGMother(0)
299 ,fMCparticleGGGMother(0)
309 ,fCEtaPhi_ULS_Weight_EM(0)
310 ,fCEtaPhi_LS_Weight_EM(0)
313 ,fCEtaPhi_Inc_DiHadron(0)
317 // Define input and output slots here
318 // Input slot #0 works with a TChain
319 DefineInput(0, TChain::Class());
320 // Output slot #0 id reserved by the base class for AOD
321 // Output slot #1 writes into a TH1 container
322 // DefineOutput(1, TH1I::Class());
323 DefineOutput(1, TList::Class());
324 // DefineOutput(3, TTree::Class());
327 //________________________________________________________________________
328 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
329 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
333 ,fUseShowerShapeCut(kFALSE)
334 ,fFillBackground(kFALSE)
335 ,fAssocWithSPD(kFALSE)
345 ,fIsFromGamma(kFALSE)
349 ,fPartnerCuts(new AliESDtrackCuts())
352 ,fNonHFE(new AliSelectNonHFE())
357 ,fHasCentralitySelection(kFALSE)
359 ,fCentralityHistPass(0)
382 ,fPtElec_ULS_weight(0)
383 ,fPtElec_LS_weight(0)
384 ,fPtElec_ULS2_weight(0)
385 ,fPtElec_LS2_weight(0)
399 ,fShowerShapeM02_EoverP(0)
400 ,fShowerShapeM20_EoverP(0)
419 ,fNcells_electrons(0)
426 ,fTPCnsigma_eta_electrons(0)
427 ,fTPCnsigma_eta_hadrons(0)
430 ,fnsigma_p_EoverPcut(0)
431 ,fEoverP_pt_pions2(0)
433 ,fEoverP_pt_hadrons(0)
439 ,fCEtaPhi_ULS_Weight(0)
440 ,fCEtaPhi_LS_Weight(0)
441 ,fCEtaPhi_ULS_NoP_Weight(0)
442 ,fCEtaPhi_LS_NoP_Weight(0)
477 ,fAngleCutFlag(kFALSE)
478 ,fChi2CutFlag(kFALSE)
480 ,fPtBackgroundBeforeReco(0)
481 ,fPtBackgroundBeforeReco2(0)
482 ,fPtBackgroundBeforeReco_weight(0)
483 ,fPtBackgroundBeforeReco2_weight(0)
484 ,fPtBackgroundAfterReco(0)
491 ,fPtMCparticleAll_nonPrimary(0)
492 ,fPtMCparticleAlle_nonPrimary(0)
493 ,fPtMCparticleAlle_Primary(0)
494 ,fPtMCparticleReco(0)
495 ,fPtMCparticleReco_nonPrimary(0)
497 ,fPtMCparticleAllHfe1(0)
498 ,fPtMCparticleRecoHfe1(0)
499 ,fPtMCparticleAllHfe2(0)
500 ,fPtMCparticleRecoHfe2(0)
501 ,fPtMCelectronAfterAll(0)
502 ,fPtMCelectronAfterAll_nonPrimary(0)
503 ,fPtMCelectronAfterAll_Primary(0)
508 ,fPtMC_EMCal_Selected(0)
510 ,fPtMC_TPC_Selected(0)
512 ,fPtMCWithoutLabel(0)
513 ,fPtIsPhysicaPrimary(0)
516 ,fPID(new AliHFEpid("hfePid"))
519 ,fRejectKinkMother(kFALSE)
524 ,fMCtrackGGGMother(0)
528 ,fMCparticleMother(0)
529 ,fMCparticleGMother(0)
530 ,fMCparticleGGMother(0)
531 ,fMCparticleGGGMother(0)
541 ,fCEtaPhi_ULS_Weight_EM(0)
542 ,fCEtaPhi_LS_Weight_EM(0)
545 ,fCEtaPhi_Inc_DiHadron(0)
549 // Define input and output slots here
550 // Input slot #0 works with a TChain
551 DefineInput(0, TChain::Class());
552 // Output slot #0 id reserved by the base class for AOD
553 // Output slot #1 writes into a TH1 container
554 // DefineOutput(1, TH1I::Class());
555 DefineOutput(1, TList::Class());
556 //DefineOutput(3, TTree::Class());
559 //______________________________________________________________________
560 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
569 //______________________________________________________________________
570 //Create Output Objects
571 //Here we can define the histograms and others output files
573 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
575 //______________________________________________________________________
577 if(!fPID->GetNumberOfPIDdetectors())
579 fPID->AddDetector("TPC", 0);
582 fPID->SortDetectors();
584 fPIDqa = new AliHFEpidQAmanager();
585 fPIDqa->Initialize(fPID);
586 //______________________________________________________________________
588 //______________________________________________________________________
589 //Initialize correction Framework and Cuts
590 fCFM = new AliCFManager;
591 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
592 fCFM->SetNStepParticle(kNcutSteps);
593 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
597 AliWarning("Cuts not available. Default cuts will be used");
598 fCuts = new AliHFEcuts;
599 fCuts->CreateStandardCuts();
602 fCuts->Initialize(fCFM);
603 //______________________________________________________________________
605 ///______________________________________________________________________
608 fOutputList = new TList();
609 fOutputList->SetOwner();
612 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
614 //Store the number of events
616 fNevent = new TH1F("fNevent","Number of Events",5,-0.5,4.5);
617 //And then, add to the output list
618 fOutputList->Add(fNevent);
620 fpid = new TH1F("fpid","PID flag",5,0,5);
621 fOutputList->Add(fpid);
624 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
626 fPtElec_ULS = new TH1F("fPtElec_ULS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
627 fPtElec_LS = new TH1F("fPtElec_LS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
629 fPtElec_ULS_weight = new TH1F("fPtElec_ULS_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
630 fPtElec_LS_weight = new TH1F("fPtElec_LS_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
632 fTOF01 = new TH2F("fTOF01","",200,-20,20,200,-20,20);
633 fTOF02 = new TH2F("fTOF02","",200,-20,20,200,-20,20);
634 fTOF03 = new TH2F("fTOF03","",200,-20,20,200,-20,20);
637 fPtElec_ULS2 = new TH1F("fPtElec_ULS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
638 fPtElec_LS2 = new TH1F("fPtElec_LS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
640 fPtElec_ULS2_weight = new TH1F("fPtElec_ULS2_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
641 fPtElec_LS2_weight = new TH1F("fPtElec_LS2_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
645 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",300,0,30);
646 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
647 fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
651 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
652 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
657 fTime = new TH2D("fTime","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
658 fTime2 = new TH2D("fTime2","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
661 ftimingEle = new TH2D("ftimingEle","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
662 ftimingEle2 = new TH2D("ftimingEle2","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
664 fShowerShape_ha = new TH2F("fShowerShape_ha","Shower Shape hadrons;M02;M20",500,0,1.8,500,0,1.8);
665 fShowerShape_ele = new TH2F("fShowerShape_ele","Shower Shape electrons;M02;M20",500,0,1.8,500,0,1.8);
667 fShowerShapeM02_EoverP = new TH2F("fShowerShapeM02_EoverP","Shower Shape;M02;E/p",500,0,1.8,500,0,1.8);
668 fShowerShapeM20_EoverP = new TH2F("fShowerShapeM20_EoverP","Shower Shape;M20;E/p",500,0,1.8,500,0,1.8);
672 fOutputList->Add(fTOF01);
673 fOutputList->Add(fTOF02);
674 fOutputList->Add(fTOF03);
676 fOutputList->Add(fPtElec_Inc);
677 fOutputList->Add(fPtElec_ULS);
678 fOutputList->Add(fPtElec_LS);
679 fOutputList->Add(fPtElec_ULS_weight);
680 fOutputList->Add(fPtElec_LS_weight);
683 fOutputList->Add(fPtElec_ULS2);
684 fOutputList->Add(fPtElec_LS2);
685 fOutputList->Add(fPtElec_ULS2_weight);
686 fOutputList->Add(fPtElec_LS2_weight);
690 fOutputList->Add(fPtTrigger_Inc);
691 fOutputList->Add(fTPCnsigma_pt_2D);
692 fOutputList->Add(fShowerShapeCut);
694 fOutputList->Add(fCharge_n);
695 fOutputList->Add(fCharge_p);
700 fOutputList->Add(fTime);
701 fOutputList->Add(fTime2);
705 fOutputList->Add(ftimingEle);
706 fOutputList->Add(ftimingEle2);
708 fOutputList->Add(fShowerShape_ha);
709 fOutputList->Add(fShowerShape_ele);
711 fOutputList->Add(fShowerShapeM02_EoverP);
712 fOutputList->Add(fShowerShapeM20_EoverP);
721 //Step 1: Before Track cuts
725 fEoverP_pt = new TH2F *[3];
726 fTPC_p = new TH2F *[3];
727 fTPCnsigma_p = new TH2F *[3];
729 fECluster= new TH1F *[3];
730 fEtaPhi= new TH2F *[3];
731 fVtxZ= new TH1F *[3];
732 fNTracks= new TH1F *[3];
733 fNClusters= new TH1F *[3];
734 fTPCNcls_EoverP= new TH2F *[3];
736 for(Int_t i = 0; i < 3; i++)
738 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
739 fTPC_p[i] = new TH2F(Form("fTPC_p%d",i),";pt (GeV/c);TPC dE/dx (a. u.)",1000,0.3,15,1000,-20,200);
740 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
743 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
744 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
745 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
746 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,1000);
747 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
748 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
751 fOutputList->Add(fEoverP_pt[i]);
752 fOutputList->Add(fTPC_p[i]);
753 fOutputList->Add(fTPCnsigma_p[i]);
756 fOutputList->Add(fECluster[i]);
757 fOutputList->Add(fEtaPhi[i]);
758 fOutputList->Add(fVtxZ[i]);
759 fOutputList->Add(fNTracks[i]);
760 fOutputList->Add(fNClusters[i]);
761 fOutputList->Add(fTPCNcls_EoverP[i]);
765 Int_t fPtBin[7] = {1,2,4,6,8,10,15};
767 fEoverP_tpc = new TH2F *[6];
768 fTPC_pt = new TH1F *[6];
769 fTPCnsigma_pt = new TH1F *[6];
774 fR_EoverP=new TH2F *[6];
775 fNcells=new TH1F *[6];
776 fNcells_EoverP=new TH2F *[6];
777 fM02_EoverP= new TH2F *[6];
778 fM20_EoverP= new TH2F *[6];
779 fEoverP_ptbins=new TH1F *[6];
780 fECluster_ptbins=new TH1F *[6];
781 fEoverP_wSSCut=new TH1F *[6];
782 fNcells_electrons=new TH1F *[6];
783 fNcells_hadrons=new TH1F *[6];
784 fTPCnsigma_eta_electrons=new TH2F *[6];
785 fTPCnsigma_eta_hadrons=new TH2F *[6];
789 fCEtaPhi_Inc = new TH2F *[6];
790 fCEtaPhi_Inc_DiHadron = new TH2F *[6];
792 fCEtaPhi_ULS = new TH2F *[6];
793 fCEtaPhi_LS = new TH2F *[6];
794 fCEtaPhi_ULS_NoP = new TH2F *[6];
795 fCEtaPhi_LS_NoP = new TH2F *[6];
797 fCEtaPhi_ULS_Weight = new TH2F *[6];
798 fCEtaPhi_LS_Weight = new TH2F *[6];
799 fCEtaPhi_ULS_NoP_Weight = new TH2F *[6];
800 fCEtaPhi_LS_NoP_Weight = new TH2F *[6];
802 fCEtaPhi_Inc_EM = new TH2F *[6];
804 fCEtaPhi_ULS_EM = new TH2F *[6];
805 fCEtaPhi_LS_EM = new TH2F *[6];
807 fCEtaPhi_ULS_Weight_EM = new TH2F *[6];
808 fCEtaPhi_LS_Weight_EM = new TH2F *[6];
810 fInvMass = new TH1F("fInvMass","",200,0,0.3);
811 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
812 fDCA = new TH1F("fDCA","",200,0,1);
813 fDCABack = new TH1F("fDCABack","",200,0,1);
814 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
815 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
817 fOutputList->Add(fInvMass);
818 fOutputList->Add(fInvMassBack);
819 fOutputList->Add(fDCA);
820 fOutputList->Add(fDCABack);
821 fOutputList->Add(fOpAngle);
822 fOutputList->Add(fOpAngleBack);
827 fInvMass = new TH1F("fInvMass","",200,0,0.3);
828 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
829 fDCA = new TH1F("fDCA","",200,0,1);
830 fDCABack = new TH1F("fDCABack","",200,0,1);
831 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
832 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
834 fOutputList->Add(fInvMass);
835 fOutputList->Add(fInvMassBack);
836 fOutputList->Add(fDCA);
837 fOutputList->Add(fDCABack);
838 fOutputList->Add(fOpAngle);
839 fOutputList->Add(fOpAngleBack);
841 //histos for TPC-only
842 fInvMass2 = new TH1F("fInvMass2","",200,0,0.3);
843 fInvMassBack2 = new TH1F("fInvMassBack2","",200,0,0.3);
844 fDCA2 = new TH1F("fDCA2","",200,0,1);
845 fDCABack2 = new TH1F("fDCABack2","",200,0,1);
846 fOpAngle2 = new TH1F("fOpAngle2","",200,0,0.5);
847 fOpAngleBack2 = new TH1F("fOpAngleBack2","",200,0,0.5);
849 fOutputList->Add(fInvMass2);
850 fOutputList->Add(fInvMassBack2);
851 fOutputList->Add(fDCA2);
852 fOutputList->Add(fDCABack2);
853 fOutputList->Add(fOpAngle2);
854 fOutputList->Add(fOpAngleBack2);
858 for(Int_t i = 0; i < 6; i++)
860 fEoverP_tpc[i] = new TH2F(Form("fEoverP_tpc%d",i),Form("%d < p_{t} < %d GeV/c;TPC Electron N#sigma;E / p ",fPtBin[i],fPtBin[i+1]),1000,-15,15,100,0,2);
861 fTPC_pt[i] = new TH1F(Form("fTPC_pt%d",i),Form("%d < p_{t} < %d GeV/c;TPC Electron N#sigma;Count",fPtBin[i],fPtBin[i+1]),200,20,200);
862 fTPCnsigma_pt[i] = new TH1F(Form("fTPCnsigma_pt%d",i),Form("%d < p_{t} < %d GeV/c;TPC Electron N#sigma;Count",fPtBin[i],fPtBin[i+1]),200,-15,10);
864 fEta[i]=new TH1F(Form("fEta%d",i), Form("%d < p_{t} < %d GeV/c;#eta; counts",fPtBin[i],fPtBin[i+1]),100, -0.1,0.1);
865 fPhi[i]=new TH1F(Form("fPhi%d",i),Form("%d < p_{t} < %d GeV/c;#phi; counts )",fPtBin[i],fPtBin[i+1]), 100, -0.1,0.1);
866 fR[i]=new TH1F(Form("fR%d",i),Form("%d < p_{t} < %d GeV/c;R;counts )",fPtBin[i],fPtBin[i+1]), 100, -0.1,0.1);
867 fR_EoverP[i]=new TH2F(Form("fR_EoverP%d",i),Form("%d < p_{t} < %d GeV/c;R;E / p ",fPtBin[i],fPtBin[i+1]),100, 0,0.1,1000,0,10);
868 fNcells[i]=new TH1F(Form("fNcells%d",i), Form("%d < p_{t} < %d GeV/c;ncells;counts ",fPtBin[i],fPtBin[i+1]),100, 0, 30);
869 fNcells_electrons[i]=new TH1F(Form("fNcells_electrons%d",i), Form("%d < p_{t} < %d GeV/c;ncells;counts ",fPtBin[i],fPtBin[i+1]),100, 0, 30);
870 fNcells_hadrons[i]=new TH1F(Form("fNcells_hadrons%d",i), Form("%d < p_{t} < %d GeV/c;ncells;counts ",fPtBin[i],fPtBin[i+1]),100, 0, 30);
871 fNcells_EoverP[i]=new TH2F(Form("fNcells_EoverP%d",i),Form("%d < p_{t} < %d GeV/c; Ncells; E / p ",fPtBin[i],fPtBin[i+1]),1000, 0,20,100,0,30);
872 fM02_EoverP[i]= new TH2F(Form("fM02_EoverP%d",i),Form("%d < p_{t} < %d GeV/c; M02; E / p ",fPtBin[i],fPtBin[i+1]),1000,0,100,100,0,2);
873 fM20_EoverP[i]= new TH2F(Form("fM20_EoverP%d",i),Form("%d < p_{t} < %d GeV/c; M20; E / p ",fPtBin[i],fPtBin[i+1]),1000,0,100,100,0,2);
874 fEoverP_ptbins[i] = new TH1F(Form("fEoverP_ptbins%d",i),Form("%d < p_{t} < %d GeV/c;E / p ",fPtBin[i],fPtBin[i+1]),500,0,2);
875 fECluster_ptbins[i]= new TH1F(Form("fECluster_ptbins%d",i), Form("%d < p_{t} < %d GeV/c;ECluster; Counts ",fPtBin[i],fPtBin[i+1]),2000, 0,100);
876 fEoverP_wSSCut[i]=new TH1F(Form("fEoverP_wSSCut%d",i),Form("%d < p_{t} < %d GeV/c;E / p ; Counts",fPtBin[i],fPtBin[i+1]),500,0,2);
877 fTPCnsigma_eta_electrons[i]=new TH2F(Form("fTPCnsigma_eta_electrons%d",i),Form("%d < p_{t} < %d GeV/c;TPC Electron N#sigma;Eta ",fPtBin[i],fPtBin[i+1]),1000,-15,15,100,-1,1);
878 fTPCnsigma_eta_hadrons[i]=new TH2F(Form("fTPCnsigma_eta_hadrons%d",i),Form("%d < p_{t} < %d GeV/c;TPC Electron N#sigma;Eta ",fPtBin[i],fPtBin[i+1]),1000,-15,15,100,-1,1);
880 fOutputList->Add(fEoverP_tpc[i]);
881 fOutputList->Add(fTPC_pt[i]);
882 fOutputList->Add(fTPCnsigma_pt[i]);
884 fOutputList->Add(fEta[i]);
885 fOutputList->Add(fPhi[i]);
886 fOutputList->Add(fR[i]);
887 fOutputList->Add(fR_EoverP[i]);
888 fOutputList->Add(fNcells[i]);
889 fOutputList->Add(fNcells_electrons[i]);
890 fOutputList->Add(fNcells_hadrons[i]);
891 fOutputList->Add(fNcells_EoverP[i]);
892 fOutputList->Add(fECluster_ptbins[i]);
893 fOutputList->Add(fEoverP_ptbins[i]);
894 fOutputList->Add(fEoverP_wSSCut[i]);
895 fOutputList->Add(fM02_EoverP[i]);
896 fOutputList->Add(fM20_EoverP[i]);
897 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
898 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
903 fCEtaPhi_Inc[i] = new TH2F(Form("fCEtaPhi_Inc%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
904 fCEtaPhi_Inc_DiHadron[i] = new TH2F(Form("fCEtaPhi_Inc_DiHadron%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
906 fCEtaPhi_ULS[i] = new TH2F(Form("fCEtaPhi_ULS%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
907 fCEtaPhi_LS[i] = new TH2F(Form("fCEtaPhi_LS%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
908 fCEtaPhi_ULS_NoP[i] = new TH2F(Form("fCEtaPhi_ULS_NoP%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
909 fCEtaPhi_LS_NoP[i] = new TH2F(Form("fCEtaPhi_LS_NoP%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
911 fCEtaPhi_ULS_Weight[i] = new TH2F(Form("fCEtaPhi_ULS_Weight%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
912 fCEtaPhi_LS_Weight[i] = new TH2F(Form("fCEtaPhi_LS_Weight%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
913 fCEtaPhi_ULS_NoP_Weight[i] = new TH2F(Form("fCEtaPhi_ULS_NoP_Weight%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
914 fCEtaPhi_LS_NoP_Weight[i] = new TH2F(Form("fCEtaPhi_LS_NoP_Weight%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
916 fOutputList->Add(fCEtaPhi_Inc[i]);
917 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
919 fOutputList->Add(fCEtaPhi_ULS[i]);
920 fOutputList->Add(fCEtaPhi_LS[i]);
921 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
922 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
924 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
925 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
926 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
927 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
931 fCEtaPhi_Inc_EM[i] = new TH2F(Form("fCEtaPhi_Inc_EM%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
933 fCEtaPhi_ULS_EM[i] = new TH2F(Form("fCEtaPhi_ULS_EM%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
934 fCEtaPhi_LS_EM[i] = new TH2F(Form("fCEtaPhi_LS_EM%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
936 fCEtaPhi_ULS_Weight_EM[i] = new TH2F(Form("fCEtaPhi_ULS_Weight_EM%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
937 fCEtaPhi_LS_Weight_EM[i] = new TH2F(Form("fCEtaPhi_LS_Weight_EM%d",i),Form("%d < p_{t} < %d GeV/c;#DeltaPhi (rad);#Delta#eta",fPtBin[i],fPtBin[i+1]),200,-0.5*TMath::Pi(),1.5*TMath::Pi(),200,-2,2);
939 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
941 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
942 fOutputList->Add(fCEtaPhi_LS_EM[i]);
944 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
945 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
951 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
952 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
955 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
956 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
958 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
959 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
961 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
962 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
965 fOutputList->Add(fTPCnsigma_eta);
966 fOutputList->Add(fTPCnsigma_phi);
968 fOutputList->Add(fNcells_pt);
969 fOutputList->Add(fEoverP_pt_pions);
971 fOutputList->Add(ftpc_p_EoverPcut);
972 fOutputList->Add(fnsigma_p_EoverPcut);
974 fOutputList->Add(fEoverP_pt_pions2);
975 fOutputList->Add(fEoverP_pt_hadrons);
977 //__________________________________________________________________
981 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{T} (GeV/c);Count",300,0,30);
982 fPtBackgroundBeforeReco_weight = new TH1F("fPtBackgroundBeforeReco_weight",";p_{T} (GeV/c);Count",300,0,30);
983 if(fFillBackground)fPtBackgroundBeforeReco2 = new TH1F("fPtBackgroundBeforeReco2",";p_{T} (GeV/c);Count",300,0,30);
984 if(fFillBackground)fPtBackgroundBeforeReco2_weight = new TH1F("fPtBackgroundBeforeReco2_weight",";p_{T} (GeV/c);Count",300,0,30);
986 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{T} (GeV/c);Count",300,0,30);
987 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{T} (GeV/c);Count",200,0,40);
988 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{T} (GeV/c);Count",200,0,40);
990 fPtMCparticleAll_nonPrimary = new TH1F("fPtMCparticleAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
991 fPtMCparticleAlle_nonPrimary = new TH1F("fPtMCparticleAlle_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
992 fPtMCparticleAlle_Primary = new TH1F("fPtMCparticleAlle_Primary",";p_{T} (GeV/c);Count",200,0,40);
994 fPtMCparticleReco_nonPrimary = new TH1F("fPtMCparticleReco_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
996 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
997 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
998 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
999 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
1001 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{T} (GeV/c);Count",200,0,40);
1002 fPtMCelectronAfterAll_nonPrimary = new TH1F("fPtMCelectronAfterAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1003 fPtMCelectronAfterAll_Primary = new TH1F("fPtMCelectronAfterAll_Primary",";p_{T} (GeV/c);Count",200,0,40);
1007 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,30);
1008 fPtMCeta = new TH1F("fPtMCeta",";p_{T} (GeV/c);Count",200,0,30);
1009 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
1010 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
1011 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{t} (GeV/c);Count",200,0,40);
1012 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{t} (GeV/c);Count",200,0,40);
1013 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
1014 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
1015 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
1017 fOutputList->Add(fPtBackgroundBeforeReco);
1018 fOutputList->Add(fPtBackgroundBeforeReco_weight);
1020 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2);
1021 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2_weight);
1022 fOutputList->Add(fPtBackgroundAfterReco);
1023 fOutputList->Add(fPtMCparticleAll);
1024 fOutputList->Add(fPtMCparticleReco);
1026 fOutputList->Add(fPtMCparticleAll_nonPrimary);
1027 fOutputList->Add(fPtMCparticleAlle_nonPrimary);
1029 fOutputList->Add(fPtMCparticleAlle_Primary);
1030 fOutputList->Add(fPtMCparticleReco_nonPrimary);
1032 fOutputList->Add(fPtMCparticleAllHfe1);
1033 fOutputList->Add(fPtMCparticleRecoHfe1);
1034 fOutputList->Add(fPtMCparticleAllHfe2);
1035 fOutputList->Add(fPtMCparticleRecoHfe2);
1036 fOutputList->Add(fPtMCelectronAfterAll);
1038 fOutputList->Add(fPtMCelectronAfterAll_nonPrimary);
1039 fOutputList->Add(fPtMCelectronAfterAll_Primary);
1043 fOutputList->Add(fPtMCpi0);
1044 fOutputList->Add(fPtMCeta);
1045 fOutputList->Add(fPtMC_EMCal_All);
1046 fOutputList->Add(fPtMC_EMCal_Selected);
1047 fOutputList->Add(fPtMC_TPC_All);
1048 fOutputList->Add(fPtMC_TPC_Selected);
1049 fOutputList->Add(fPtMCWithLabel);
1050 fOutputList->Add(fPtMCWithoutLabel);
1051 fOutputList->Add(fPtIsPhysicaPrimary);
1054 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
1055 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
1056 fOutputList->Add(fCentralityHist);
1057 fOutputList->Add(fCentralityHistPass);
1059 //______________________________________________________________________
1060 //Mixed event analysis
1061 if(fEventMixingFlag)
1063 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
1064 fOutputList->Add(fPoolNevents);
1066 Int_t trackDepth = 2000; // number of objects (tracks) kept per event buffer bin. Once the number of stored objects (tracks) is above that limit, the oldest ones are removed.
1067 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
1069 Int_t nCentralityBins = 15;
1070 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
1072 Int_t nZvtxBins = 9;
1073 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
1075 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
1077 //______________________________________________________________________
1079 PostData(1, fOutputList);
1081 ///______________________________________________________________________
1084 //______________________________________________________________________
1086 //Called for each event
1087 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
1090 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1091 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
1095 printf("ERROR: fESD & fAOD not available\n");
1099 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
1103 printf("ERROR: fVEvent not available\n");
1110 AliError("HFE cuts not available");
1114 if(!fPID->IsInitialized())
1116 // Initialize PID with the given run number
1117 AliWarning("PID not initialised, get from Run no");
1121 fPID->InitializePID(fAOD->GetRunNumber());
1125 fPID->InitializePID(fESD->GetRunNumber());
1130 fPidResponse = fInputHandler->GetPIDResponse();
1133 //Check PID response
1136 AliDebug(1, "Using default PID Response");
1137 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
1140 fPID->SetPIDResponse(fPidResponse);
1142 fCFM->SetRecEventInfo(fVevent);
1144 Double_t *fListOfmotherkink = 0;
1145 Int_t fNumberOfVertices = 0;
1146 Int_t fNumberOfMotherkink = 0;
1148 //______________________________________________________________________
1152 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
1153 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1154 TString vtxTtl = trkVtx->GetTitle();
1155 if(!vtxTtl.Contains("VertexerTracks")) return;
1156 Float_t zvtx = trkVtx->GetZ();
1158 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
1159 if(spdVtx->GetNContributors()<=0) return;
1160 TString vtxTyp = spdVtx->GetTitle();
1161 Double_t cov[6]={0};
1162 spdVtx->GetCovarianceMatrix(cov);
1163 Double_t zRes = TMath::Sqrt(cov[5]);
1164 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1165 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1166 if(TMath::Abs(zvtx) > 10) return;
1168 //Look for kink mother for AOD
1170 fNumberOfVertices = 0;
1171 fNumberOfMotherkink = 0;
1175 fNumberOfVertices = fAOD->GetNumberOfVertices();
1177 fListOfmotherkink = new Double_t[fNumberOfVertices];
1179 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
1181 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
1182 if(!aodvertex) continue;
1183 if(aodvertex->GetType()==AliAODVertex::kKink)
1185 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
1186 if(!mother1) continue;
1187 Int_t idmother = mother1->GetID();
1188 fListOfmotherkink[fNumberOfMotherkink] = idmother;
1189 fNumberOfMotherkink++;
1200 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
1201 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1202 TString vtxTtl = trkVtx->GetTitle();
1203 if(!vtxTtl.Contains("VertexerTracks")) return;
1204 Float_t zvtx = trkVtx->GetZ();
1206 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
1207 if(spdVtx->GetNContributors()<=0) return;
1208 TString vtxTyp = spdVtx->GetTitle();
1209 Double_t cov[6]={0};
1210 spdVtx->GetCovarianceMatrix(cov);
1211 Double_t zRes = TMath::Sqrt(cov[5]);
1212 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1213 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1214 if(TMath::Abs(zvtx) > 10) return;
1217 //______________________________________________________________________
1219 //Only events with at least 2 tracks are accepted
1220 Int_t fNOtrks = fVevent->GetNumberOfTracks();
1221 if(fNOtrks<2) return;
1223 //______________________________________________________________________
1224 //Centrality Selection
1225 if(fHasCentralitySelection)
1227 Float_t centrality = -1;
1231 fCentrality = fAOD->GetHeader()->GetCentralityP();
1235 fCentrality = fESD->GetCentrality();
1238 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
1239 else centrality = fCentrality->GetCentralityPercentile("V0A");
1241 //cout << "Centrality = " << centrality << " %" << endl;
1243 fCentralityHist->Fill(centrality);
1245 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
1247 fCentralityHistPass->Fill(centrality);
1249 //______________________________________________________________________
1251 //______________________________________________________________________
1257 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1261 AliError("Array of MC particles not found");
1265 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1269 AliError("Could not find MC Header in AOD");
1273 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1275 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1276 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1278 Int_t pdg = fMCparticle->GetPdgCode();
1279 Int_t mpdg = fMCparticleMother->GetPdgCode();
1281 double proX = fMCparticle->Xv();
1282 double proY = fMCparticle->Yv();
1283 double proR = sqrt(pow(proX,2)+pow(proY,2));
1286 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1288 //to correct background
1289 if (TMath::Abs(pdg) == 11){
1290 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1293 fPtMCparticleAlle_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons, and not primary
1299 if (TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCparticleAlle_Primary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons primary
1301 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1304 fPtMCparticleAll_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all particles, and not primary
1305 if(fMCparticle->IsPhysicalPrimary())
1307 fPtMCparticleAll->Fill(fMCparticle->Pt());
1309 Bool_t MotherFound = FindMother(iMC);
1312 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCparticle->Pt()); //denominator for total efficiency
1313 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1319 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1320 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1325 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1326 if (!fEventHandler) {
1327 Printf("ERROR: Could not retrieve MC event handler");
1331 fMCevent = fEventHandler->MCEvent();
1333 Printf("ERROR: Could not retrieve MC event");
1337 fMCstack = fMCevent->Stack();
1339 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1342 fMCtrack = fMCstack->Particle(iMC);
1343 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1344 TParticle *particle=fMCstack->Particle(iMC);
1346 Int_t pdg = fMCtrack->GetPdgCode();
1347 Int_t mpdg = fMCtrackMother->GetPdgCode();
1349 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
1350 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCtrack->Pt());
1353 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1356 //to correct background
1357 if (TMath::Abs(pdg) == 11){
1358 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1359 Double_t proR=particle->R();
1361 fPtMCparticleAlle_nonPrimary->Fill(fMCtrack->Pt()); //denominator for total efficiency for all electrons, and not primary
1366 if (TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(iMC)) fPtMCparticleAlle_Primary->Fill(fMCtrack->Pt());
1369 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1371 fPtMCparticleAll_nonPrimary->Fill(fMCtrack->Pt());//denominator for total efficiency for all particle, non Primary track
1373 if(!fMCstack->IsPhysicalPrimary(iMC)) continue;
1374 fPtMCparticleAll->Fill(fMCtrack->Pt());
1376 Bool_t MotherFound = FindMother(iMC);
1379 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency
1380 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
1388 //______________________________________________________________________
1389 //EMCal Trigger Selection (Threshould selection)
1390 TString firedTrigger;
1391 TString TriggerEG1("EG1");
1392 TString TriggerEG2("EG2");
1394 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1395 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1398 if(firedTrigger.Contains(TriggerEG1)) fNevent->Fill(1);
1399 if(firedTrigger.Contains(TriggerEG2)) fNevent->Fill(2);
1402 if(firedTrigger.Contains(TriggerEG1))
1412 if(firedTrigger.Contains(TriggerEG2))
1421 //______________________________________________________________________
1424 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
1425 else ClsNo = fAOD->GetNumberOfCaloClusters();
1427 //______________________________________________________________________
1429 ///______________________________________________________________________
1431 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1433 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1436 printf("ERROR: Could not receive track %d\n", iTracks);
1440 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1441 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
1442 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1444 Double_t fTPCnSigma = -999;
1445 Double_t fTOFnSigma = -999;
1446 Double_t fTPCnSigma_pion = -999;
1447 Double_t fTPCnSigma_proton = -999;
1448 Double_t fTPCnSigma_kaon = -999;
1449 Double_t fTPCsignal = -999;
1450 Double_t fPt = -999;
1453 ///_____________________________________________________________________________
1454 ///Fill QA plots without track selection
1456 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
1458 fTPCsignal = track->GetTPCsignal();
1459 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
1460 fTOFnSigma = fPidResponse->NumberOfSigmasTOF(track, AliPID::kElectron);
1461 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
1462 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
1463 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
1465 fTPC_p[0]->Fill(fPt,fTPCsignal);
1466 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
1469 Float_t TPCNcls = track->GetTPCNcls();
1470 Float_t pos[3]={0,0,0};
1472 Double_t fEMCflag = kFALSE;
1473 if(track->GetEMCALcluster()>0)
1475 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1476 if(fClus->IsEMCAL())
1478 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1481 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
1484 Float_t Energy = fClus->E();
1485 Float_t EoverP = Energy/track->P();
1486 //Float_t M02 = fClus->GetM02();
1487 //Float_t M20 = fClus->GetM20();
1489 /////////////// for Eta Phi distribution
1490 fClus->GetPosition(pos);
1491 TVector3 vpos(pos[0],pos[1],pos[2]);
1492 Double_t cphi = vpos.Phi();
1493 Double_t ceta = vpos.Eta();
1494 fEtaPhi[0]->Fill(cphi,ceta);
1496 fECluster[0]->Fill(Energy);
1497 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
1502 //______________________________________________________________
1505 fVtxZ[0]->Fill(fZvtx);
1506 fNTracks[0]->Fill(fNOtrks);
1507 fNClusters[0]->Fill(ClsNo);
1509 //______________________________________________________________
1511 ///Fill QA plots without track selection
1512 ///_____________________________________________________________________________
1513 //______________________________________________________________________________________
1514 //Track Selection Cuts
1516 //AOD (Test Filter Bit)
1519 // standard cuts with very loose DCA - BIT(4)
1522 GetStandardITSTPCTrackCuts2011(kFALSE)
1523 SetMaxChi2PerClusterTPC(4);
1524 SetAcceptKinkDaughters(kFALSE);
1525 SetRequireTPCRefit(kTRUE);
1526 SetRequireITSRefit(kTRUE);
1527 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1528 SetMaxDCAToVertexZ(2);
1529 SetMaxDCAToVertex2D(kFALSE);
1530 SetRequireSigmaToVertex(kFALSE);
1531 SetMaxChi2PerClusterITS(36);
1532 SetMaxDCAToVertexXY(2.4)
1533 SetMaxDCAToVertexZ(3.2)
1534 SetDCaToVertex2D(kTRUE)
1537 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
1540 //RecKine: ITSTPC cuts
1541 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
1543 if(fRejectKinkMother)
1547 Bool_t kinkmotherpass = kTRUE;
1548 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
1550 if(track->GetID() == fListOfmotherkink[kinkmother])
1552 kinkmotherpass = kFALSE;
1556 if(!kinkmotherpass) continue;
1560 if(etrack->GetKinkIndex(0) != 0) continue;
1567 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
1570 //HFEcuts: ITS layers cuts
1571 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
1573 //HFE cuts: TPC PID cleanup
1574 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
1575 //______________________________________________________________________________________
1577 ///_____________________________________________________________
1578 ///QA plots after track selection
1581 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
1582 else fPtMCWithoutLabel->Fill(fPt);
1585 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1587 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1589 if(fMCparticle->IsPhysicalPrimary()) fPtIsPhysicaPrimary->Fill(fPt);
1591 Int_t pdg = fMCparticle->GetPdgCode();
1592 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1596 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1598 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
1600 if(fMCparticle->IsPhysicalPrimary())
1602 fPtMCparticleReco->Fill(fMCparticle->Pt());
1604 Bool_t MotherFound = FindMother(track->GetLabel());
1607 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());
1608 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
1614 else if(fIsMC && track->GetLabel()>=0)
1616 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1619 fMCtrack = fMCstack->Particle(track->GetLabel());
1620 Int_t pdg = fMCtrack->GetPdgCode();
1622 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1624 fPtMCparticleReco_nonPrimary->Fill(fMCtrack->Pt());//not Primary track
1628 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1630 fPtIsPhysicaPrimary->Fill(fPt);
1635 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1637 fPtMCparticleReco->Fill(fMCtrack->Pt());
1639 Bool_t MotherFound = FindMother(track->GetLabel());
1642 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());
1643 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
1650 fTPC_p[1]->Fill(fPt,fTPCsignal);
1651 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
1652 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
1654 TPCNcls = track->GetTPCNcls();
1655 Float_t pos2[3]={0,0,0};
1657 if(track->GetEMCALcluster()>0)
1659 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1660 if(fClus->IsEMCAL())
1662 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1664 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
1666 Float_t Energy = fClus->E();
1667 Float_t EoverP = Energy/track->P();
1668 Float_t M02 = fClus->GetM02();
1669 Float_t M20 = fClus->GetM20();
1670 Float_t ncells = fClus->GetNCells();
1672 /////////////// for Eta Phi distribution
1673 fClus->GetPosition(pos2);
1674 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
1675 Double_t cphi = vpos.Phi();
1676 Double_t ceta = vpos.Eta();
1677 fEtaPhi[1]->Fill(cphi,ceta);
1679 fECluster[1]->Fill(Energy);
1680 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
1683 //for EMCal trigger performance
1685 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
1686 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
1691 //for hadron contamination calculations
1695 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1697 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
1699 if(fTPCnSigma<-3.5){
1700 fEoverP_pt_hadrons->Fill(fPt,EoverP);
1701 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
1705 if(fTPCnSigma < -3.5){
1706 fEoverP_pt_pions->Fill(fPt, EoverP);
1710 if(fTPCnSigma < -3.5 && fTPCnSigma > -10){
1711 fEoverP_pt_pions2->Fill(fPt, EoverP);
1721 for(Int_t i = 0; i < 6; i++)
1723 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1726 if(fTPCnSigma < -5 && fTPCnSigma > -10){
1727 fNcells_hadrons[i]->Fill(ncells);
1729 //hadrons selection using E/p
1730 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
1731 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
1733 //electrons selection using E/p
1734 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1735 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
1740 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1742 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
1743 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
1747 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1749 fPtTrigger_Inc->Fill(fPt);
1750 DiHadronCorrelation(track, iTracks);
1759 //______________________________________________________________
1762 fVtxZ[1]->Fill(fZvtx);
1763 fNTracks[1]->Fill(fNOtrks);
1764 fNClusters[1]->Fill(ClsNo);
1765 //______________________________________________________________
1767 ///______________________________________________________________________
1768 ///Histograms for PID Studies
1769 //Double_t fPtBin[6] = {2,4,6,8,10,15};
1771 for(Int_t i = 0; i < 6; i++)
1773 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1775 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
1778 fTPC_pt[i]->Fill(fTPCsignal);
1779 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
1784 ///QA plots after track selection
1785 ///_____________________________________________________________
1787 //_______________________________________________________
1788 //Correlation Analysis - DiHadron
1791 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1793 fPtTrigger_Inc->Fill(fPt);
1794 DiHadronCorrelation(track, iTracks);
1797 //_______________________________________________________
1800 ///////////////////////////////////////////////////////////////////
1801 ///TPC - efficiency calculation //
1803 /// changing start here
1804 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1806 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1807 Int_t pdg = fMCparticle->GetPdgCode();
1810 if(fMCparticle->IsPhysicalPrimary()){
1813 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1815 Bool_t MotherFound = FindMother(track->GetLabel());
1817 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1818 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1819 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
1826 else if(fIsMC && track->GetLabel()>=0)//ESD
1829 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1830 fMCtrack = fMCstack->Particle(track->GetLabel());
1832 Int_t pdg = fMCtrack->GetPdgCode();
1833 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1835 if(fMCtrack->GetFirstMother()>0){
1836 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1837 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1838 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
1846 if(fPt>1 && fPt<2) fTOF01->Fill(fTOFnSigma,fTPCnSigma);
1847 if(fPt>2 && fPt<4) fTOF02->Fill(fTOFnSigma,fTPCnSigma);
1848 if(fPt>4 && fPt<6) fTOF03->Fill(fTOFnSigma,fTPCnSigma);
1850 ///________________________________________________________________________
1852 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
1853 Int_t pidpassed = 1;
1854 AliHFEpidObject hfetrack;
1855 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
1856 hfetrack.SetRecTrack(track);
1857 hfetrack.SetPP(); //proton-proton analysis
1858 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
1859 fpid->Fill(pidpassed);
1861 if(pidpassed==0) continue;
1862 ///________________________________________________________________________
1865 ////////////////////////////////////////////////////////////////////
1866 ///TPC efficiency calculations
1868 /// changing start here
1869 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1871 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1872 Int_t pdg = fMCparticle->GetPdgCode();
1875 if(fMCparticle->IsPhysicalPrimary()){
1878 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1880 Bool_t MotherFound = FindMother(track->GetLabel());
1882 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1883 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1884 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
1891 else if(fIsMC && track->GetLabel()>=0)//ESD
1894 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1895 fMCtrack = fMCstack->Particle(track->GetLabel());
1897 Int_t pdg = fMCtrack->GetPdgCode();
1898 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1900 if(fMCtrack->GetFirstMother()>0){
1901 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1902 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1903 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
1910 //Eta Cut for TPC only
1911 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1912 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
1915 //Background for TPC only
1916 if(fFillBackground){
1917 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
1921 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
1922 fTPC_p[2]->Fill(fP,fTPCsignal);
1923 TPCNcls = track->GetTPCNcls();
1924 Float_t pos3[3]={0,0,0};
1926 if(track->GetEMCALcluster()>0)
1928 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1929 if(fClus->IsEMCAL())
1932 //________________________________________________________________________
1935 //Cluster timing distribution
1936 if(fUseEMCal && !fIsAOD ){
1937 AliESDCaloCells &cells=*(fESD->GetEMCALCells());
1938 // Int_t nTotalCells = cells.GetNumberOfCells() ;
1939 //Int_t type = cells.GetType();
1940 //for (Int_t icell= 0; icell < nTotalCells; icell++) {
1941 //fTime->Fill(cells.GetTime(icell));
1944 TRefArray* caloClusters = new TRefArray();
1945 fESD->GetEMCALClusters(caloClusters);
1947 Int_t nclus = caloClusters->GetEntries();
1949 //fClusESD = fESD->GetCaloCluster(track->GetEMCALcluster());
1951 for (Int_t icl = 0; icl < nclus; icl++) {
1953 AliESDCaloCluster* clus = (AliESDCaloCluster*)caloClusters->At(icl);
1955 if(fClus->IsEMCAL()){
1956 Float_t ncells = fClus->GetNCells();
1957 UShort_t * index = clus->GetCellsAbsId() ;
1958 UShort_t * index2 = fClus->GetCellsAbsId() ;
1961 for(Int_t i = 0; i < ncells ; i++){
1963 Int_t absId = index[i];
1964 fTime->Fill(fPt,cells.GetCellTime(absId));
1966 Int_t absId2 = index2[i];
1967 fTime2->Fill(fPt,cells.GetCellTime(absId2));
1979 double emctof = fClus->GetTOF();
1980 ftimingEle->Fill(fPt,emctof);
1982 //________________________________________________________________________
1987 /////////////// Residuals
1988 Double_t Dx = fClus->GetTrackDx();
1989 Double_t Dz = fClus->GetTrackDz();
1990 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
1991 for(Int_t i = 0; i < 6; i++)
1993 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2002 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2004 Float_t Energy = fClus->E();
2005 Float_t EoverP = Energy/track->P();
2006 Float_t M02 = fClus->GetM02();
2007 Float_t M20 = fClus->GetM20();
2008 Float_t ncells = fClus->GetNCells();
2009 //----------------------------------------------------------------------------------------
2010 // EtaCut electrons histogram
2012 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2014 if(fUseShowerShapeCut){
2015 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
2016 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2017 fShowerShapeCut->Fill(M02,M20);
2022 if(!fUseShowerShapeCut){
2023 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2024 fShowerShapeCut->Fill(M02,M20);
2027 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
2029 //for shower shape cut studies - now with TPC PID Cut
2031 fShowerShapeM02_EoverP->Fill(M02,EoverP);
2032 fShowerShapeM20_EoverP->Fill(M20,EoverP);
2037 //----------------------------------------------------------------------------------------
2041 /////////////// for Eta Phi distribution
2042 fClus->GetPosition(pos3);
2043 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
2044 Double_t cphi = vpos.Phi();
2045 Double_t ceta = vpos.Eta();
2046 fEtaPhi[2]->Fill(cphi,ceta);
2050 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
2052 for(Int_t i = 0; i < 6; i++)
2054 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2057 fR_EoverP[i]->Fill(R, EoverP);
2058 fNcells[i]->Fill(ncells);
2059 fNcells_EoverP[i]->Fill(EoverP, ncells);
2060 fM02_EoverP[i]->Fill(M02,EoverP);
2061 fM20_EoverP[i]->Fill(M20,EoverP);
2062 fECluster_ptbins[i]->Fill(Energy);
2063 fEoverP_ptbins[i]->Fill(EoverP);
2065 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
2066 fNcells_electrons[i]->Fill(ncells);
2069 if(M02<0.5 && M20<0.3) {
2070 fEoverP_wSSCut[i]->Fill(EoverP);
2075 fNcells_pt->Fill(fPt, ncells);
2078 ////////////////////////////////////////////////////////////////////
2079 ///EMCal - Efficiency calculations
2081 /// changing start here
2082 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2084 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2085 Int_t pdg = fMCparticle->GetPdgCode();
2088 if(fMCparticle->IsPhysicalPrimary()){
2091 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2093 Bool_t MotherFound = FindMother(track->GetLabel());
2095 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2096 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2097 fPtMC_EMCal_All->Fill(fMCparticle->Pt());
2104 else if(fIsMC && track->GetLabel()>=0)//ESD
2107 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2110 fMCtrack = fMCstack->Particle(track->GetLabel());
2112 Int_t pdg = fMCtrack->GetPdgCode();
2113 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
2115 if(fMCtrack->GetFirstMother()>0){
2116 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2117 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2119 fPtMC_EMCal_All->Fill(fMCtrack->Pt());
2127 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
2130 fECluster[2]->Fill(Energy);
2131 //_______________________________________________________
2132 //Correlation Analysis
2135 fPtElec_Inc->Fill(fPt);
2136 //new function to fill non-HFE histos
2137 if(fFillBackground){
2138 Background(track, iTracks, Vtrack, kFALSE);
2141 double emctof2 = fClus->GetTOF();
2142 ftimingEle2->Fill(fPt,emctof2);
2144 if(fCorrelationFlag)
2146 ElectronHadronCorrelation(track, iTracks, Vtrack);
2149 //_______________________________________________________
2151 ////////////////////////////////////////////////////////////////////
2152 ///EMCal - efficiency calculations
2154 if(track->Charge()<0) fCharge_n->Fill(fPt);
2155 if(track->Charge()>0) fCharge_p->Fill(fPt);
2158 /// changing start here
2159 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2161 if(track->Charge()<0) fCharge_n->Fill(fPt);
2162 if(track->Charge()>0) fCharge_p->Fill(fPt);
2164 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2165 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2166 Int_t pdg = fMCparticle->GetPdgCode();
2167 Int_t mpdg = fMCparticleMother->GetPdgCode();
2171 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2173 if( TMath::Abs(pdg) == 11 ){
2174 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
2175 fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
2178 if( TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCelectronAfterAll_Primary->Fill(fMCparticle->Pt());
2183 if(fMCparticle->IsPhysicalPrimary()){
2186 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2188 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCparticle->Pt()); //numerator for the total efficiency
2191 Bool_t MotherFound = FindMother(track->GetLabel());
2193 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2194 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2195 fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
2202 else if(fIsMC && track->GetLabel()>=0)//ESD
2204 if(track->Charge()<0) fCharge_n->Fill(fPt);
2205 if(track->Charge()>0) fCharge_p->Fill(fPt);
2207 fMCtrack = fMCstack->Particle(track->GetLabel());
2208 Int_t pdg = fMCtrack->GetPdgCode();
2210 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2211 if( TMath::Abs(pdg) == 11) fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
2212 if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel())) fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
2215 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2217 Bool_t MotherFound = FindMother(track->GetLabel());
2221 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2222 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency
2229 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
2231 if(fMCtrack->GetFirstMother()>0){
2232 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2233 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2235 fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());
2241 ///////////////////////////////////////////////////////////////////
2249 //______________________________________________________________
2252 fVtxZ[2]->Fill(fZvtx);
2253 fNTracks[2]->Fill(fNOtrks);
2254 fNClusters[2]->Fill(ClsNo);
2256 //______________________________________________________________
2258 //_______________________________________________________
2259 //Correlation Analysis
2262 fPtElec_Inc->Fill(fPt);
2264 if(fCorrelationFlag)
2266 ElectronHadronCorrelation(track, iTracks, Vtrack);
2269 //_______________________________________________________
2271 ///________________________________________________________________________
2274 //__________________________________________________________________
2275 //Event Mixing Analysis
2277 if(fEventMixingFlag)
2279 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2281 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2283 fPool->UpdatePool(SelectedHadrons()); // fill the tracks in the event buffer. The ownership is handed over to the event mixing class. We are not allowed to delete tracksClone anymore!
2288 //__________________________________________________________________
2290 delete fListOfmotherkink;
2291 PostData(1, fOutputList);
2294 //______________________________________________________________________
2295 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
2297 //Draw result to the screen
2298 //Called once at the end of the query
2300 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
2304 printf("ERROR: Output list not available\n");
2309 //______________________________________________________________________
2310 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
2312 //Check single track cuts for a given cut step
2313 //Note this function is called inside the UserExec function
2314 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
2315 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
2320 //______________________________________________________________________
2323 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
2325 ///_________________________________________________________________
2329 if(track->GetLabel() < 0)
2331 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2337 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2339 if(fMCparticle->GetMother()<0) return;
2341 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2343 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2346 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2347 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2350 //new 23 September //weighted histograms //test
2351 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 ){
2352 //Double_t mPt=fMCparticleMother->Pt();
2353 //Double_t mweight=3*mPt;
2355 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), mweight);
2356 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), mweight);
2358 else if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111 ){
2359 //Double_t gmPt=fMCparticleGMother->Pt();
2360 //Double_t gmweight=3*gmPt;
2361 Double_t gmweight=1;
2362 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), gmweight);
2363 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), gmweight);
2366 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt());
2367 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt());
2374 fMCtrack = fMCstack->Particle(track->GetLabel());
2376 if(fMCtrack->GetFirstMother()<0) return;
2378 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2380 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2383 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2384 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2389 ///_________________________________________________________________
2391 //________________________________________________
2392 //Associated particle cut
2393 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2394 fPartnerCuts->SetRequireITSRefit(kTRUE);
2395 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2396 fPartnerCuts->SetEtaRange(-0.9,0.9);
2397 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2398 fPartnerCuts->SetMinNClustersTPC(80);
2399 fPartnerCuts->SetPtRange(0.3,1e10);
2400 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2401 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2402 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2403 //_________________________________________________
2405 ///#################################################################
2406 //Non-HFE reconstruction
2407 fNonHFE = new AliSelectNonHFE();
2408 fNonHFE->SetAODanalysis(fIsAOD);
2409 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2410 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2411 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2412 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2413 fNonHFE->SetAlgorithm("DCA"); //KF
2414 fNonHFE->SetPIDresponse(fPidResponse);
2415 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2416 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2419 fNonHFE->SetHistAngleBack(fOpAngleBack);
2420 fNonHFE->SetHistAngle(fOpAngle);
2421 fNonHFE->SetHistDCABack(fDCABack);
2422 fNonHFE->SetHistDCA(fDCA);
2423 fNonHFE->SetHistMassBack(fInvMassBack);
2424 fNonHFE->SetHistMass(fInvMass);
2427 fNonHFE->SetHistAngleBack(fOpAngleBack2);
2428 fNonHFE->SetHistAngle(fOpAngle2);
2429 fNonHFE->SetHistDCABack(fDCABack2);
2430 fNonHFE->SetHistDCA(fDCA2);
2431 fNonHFE->SetHistMassBack(fInvMassBack2);
2432 fNonHFE->SetHistMass(fInvMass2);
2435 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2439 //Electron Information
2440 Double_t fPhiE = -999;
2441 Double_t fEtaE = -999;
2442 Double_t fPtE = -999;
2443 fPhiE = track->Phi();
2444 fEtaE = track->Eta();
2447 ///_________________________________________________________________
2453 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2459 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2460 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2464 //new 26 September //weighted histograms
2465 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2466 Double_t mPt=fMCparticleMother->Pt();
2467 Double_t mweight1=1;
2468 Double_t mweight2=1;
2472 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
2474 if(mPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2475 if(mPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2478 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2480 if(mPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2481 if(mPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2486 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
2487 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
2490 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, mweight1);
2491 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, mweight2);
2493 else if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 ){
2494 Double_t gmPt=fMCparticleGMother->Pt();
2495 Double_t gmweight1=1;
2496 Double_t gmweight2=1;
2500 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
2502 if(gmPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2503 if(gmPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2506 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
2508 if(gmPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2509 if(gmPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2514 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
2515 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
2518 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, gmweight1);
2519 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, gmweight2);
2522 if(fNonHFE->IsULS()) fPtElec_ULS_weight->Fill(fPtE,fNonHFE->GetNULS());
2523 if(fNonHFE->IsLS()) fPtElec_LS_weight->Fill(fPtE,fNonHFE->GetNLS());
2530 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2531 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2536 //new 26 September //weighted histograms
2537 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2538 Double_t mPt=fMCparticleMother->Pt();
2540 Double_t mweight1=1;
2541 Double_t mweight2=1;
2545 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
2547 if(mPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2548 if(mPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2551 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2553 if(mPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2554 if(mPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2560 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
2561 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
2564 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, mweight1);
2565 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, mweight2);
2567 else if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 ){
2568 Double_t gmPt=fMCparticleGMother->Pt();
2569 Double_t gmweight1=1;
2570 Double_t gmweight2=1;
2574 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
2576 if(gmPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2577 if(gmPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2580 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
2582 if(gmPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2583 if(gmPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2588 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
2589 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
2592 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, gmweight1);
2593 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, gmweight2);
2596 if(fNonHFE->IsULS()) fPtElec_ULS2_weight->Fill(fPtE,fNonHFE->GetNULS());
2597 if(fNonHFE->IsLS()) fPtElec_LS2_weight->Fill(fPtE,fNonHFE->GetNLS());
2607 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2610 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2611 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2615 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2616 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2621 ///_________________________________________________________________
2626 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2627 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2631 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2632 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2641 //______________________________________________________________________
2642 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
2645 ///_________________________________________________________________
2649 if(track->GetLabel() < 0)
2651 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2657 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2659 if(fMCparticle->GetMother()<0) return;
2661 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2663 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2666 fPtBackgroundBeforeReco->Fill(track->Pt());
2671 fMCtrack = fMCstack->Particle(track->GetLabel());
2673 if(fMCtrack->GetFirstMother()<0) return;
2675 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2677 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2680 fPtBackgroundBeforeReco->Fill(track->Pt());
2684 ///_________________________________________________________________
2686 //________________________________________________
2687 //Associated particle cut
2688 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2689 fPartnerCuts->SetRequireITSRefit(kTRUE);
2690 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2691 fPartnerCuts->SetEtaRange(-0.9,0.9);
2692 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2693 fPartnerCuts->SetMinNClustersTPC(80);
2694 fPartnerCuts->SetPtRange(0.3,1e10);
2695 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2696 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2697 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2698 //_________________________________________________
2700 ///#################################################################
2701 //Non-HFE reconstruction
2702 fNonHFE = new AliSelectNonHFE();
2703 fNonHFE->SetAODanalysis(fIsAOD);
2704 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2705 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2706 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2707 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2708 fNonHFE->SetAlgorithm("DCA"); //KF
2709 fNonHFE->SetPIDresponse(fPidResponse);
2710 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2711 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2714 fNonHFE->SetHistAngleBack(fOpAngleBack);
2715 fNonHFE->SetHistAngle(fOpAngle);
2716 fNonHFE->SetHistDCABack(fDCABack);
2717 fNonHFE->SetHistDCA(fDCA);
2718 fNonHFE->SetHistMassBack(fInvMassBack);
2719 fNonHFE->SetHistMass(fInvMass);
2721 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2723 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
2724 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
2725 Bool_t fUlsIsPartner = kFALSE;
2726 Bool_t fLsIsPartner = kFALSE;
2727 ///#################################################################
2730 //Electron Information
2731 Double_t fPhiE = -999;
2732 Double_t fEtaE = -999;
2733 Double_t fPhiH = -999;
2734 Double_t fEtaH = -999;
2735 Double_t fDphi = -999;
2736 Double_t fDeta = -999;
2737 Double_t fPtE = -999;
2738 Double_t fPtH = -999;
2740 Double_t pi = TMath::Pi();
2742 fPhiE = track->Phi();
2743 fEtaE = track->Eta();
2747 ///_________________________________________________________________
2753 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2755 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2756 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2761 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2763 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2764 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2768 ///_________________________________________________________________
2771 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2772 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2778 //__________________________________________________________________
2779 //Event Mixing Analysis - Hadron Loop
2781 if(fEventMixingFlag)
2783 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2785 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2787 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
2789 fPoolNevents->Fill(fPool->GetCurrentNEvents());
2791 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
2793 TObjArray* bgTracks = fPool->GetEvent(jMix);
2795 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
2797 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
2798 if (NULL == MixedTrack) continue;
2800 fPhiH = MixedTrack->Phi();
2801 fEtaH = MixedTrack->Eta();
2802 fPtH = MixedTrack->Pt();
2804 if(fPtH<0.5 || fPtH>2.0) continue;
2806 fDphi = fPhiE - fPhiH;
2808 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2809 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2811 fDeta = fEtaE - fEtaH;
2813 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
2815 for(Int_t i = 0; i < 6; i++)
2817 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2819 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
2821 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
2822 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
2824 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2825 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2829 // TODO your code: do event mixing with current event and bgTracks
2830 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
2835 //__________________________________________________________________
2837 //__________________________________________________________________
2838 //Same Event Analysis - Hadron Loop
2839 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2841 if(trackIndex==iTracks) continue;
2843 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2846 printf("ERROR: Could not receive track %d\n", iTracks);
2850 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2854 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2855 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2856 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2857 if(atrack2->GetTPCNcls() < 80) continue;
2858 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
2862 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2863 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2866 fPhiH = track2->Phi();
2867 fEtaH = track2->Eta();
2868 fPtH = track2->Pt();
2870 if(fPtH<0.5 || fPtH>2.0) continue;
2872 fDphi = fPhiE - fPhiH;
2874 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2875 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2877 fDeta = fEtaE - fEtaH;
2879 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
2881 //______________________________________________________________
2882 //Check if this track is a Non-HFE partner
2883 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
2885 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
2887 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
2889 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
2891 //______________________________________________________________
2893 for(Int_t i = 0; i < 6; i++)
2895 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2897 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
2899 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
2900 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
2901 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
2902 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
2904 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2905 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2906 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2907 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2913 //____________________________________________________________________________________________________________
2914 //Create a TObjArray with selected hadrons, for the mixed event analysis
2915 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
2917 fTracksClone = new TObjArray;
2918 fTracksClone->SetOwner(kTRUE);
2920 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2922 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2925 printf("ERROR: Could not receive track %d\n", iTracks);
2929 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2933 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2934 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2935 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2936 if(atrack2->GetTPCNcls() < 80) continue;
2937 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
2941 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2942 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2945 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
2947 return fTracksClone;
2949 //____________________________________________________________________________________________________________
2951 //______________________________________________________________________
2952 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
2954 //________________________________________________
2955 //Associated particle cut
2956 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2957 fPartnerCuts->SetRequireITSRefit(kTRUE);
2958 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2959 fPartnerCuts->SetEtaRange(-0.9,0.9);
2960 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2961 fPartnerCuts->SetMinNClustersTPC(80);
2962 fPartnerCuts->SetPtRange(0.3,1e10);
2963 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2964 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2965 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2966 //_________________________________________________
2968 //Electron Information
2969 Double_t fPhiE = -999;
2970 Double_t fEtaE = -999;
2971 Double_t fPhiH = -999;
2972 Double_t fEtaH = -999;
2973 Double_t fDphi = -999;
2974 Double_t fDeta = -999;
2975 Double_t fPtE = -999;
2976 Double_t fPtH = -999;
2978 Double_t pi = TMath::Pi();
2980 fPhiE = track->Phi();
2981 fEtaE = track->Eta();
2984 //__________________________________________________________________
2985 //Same Event Analysis - Hadron Loop
2986 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2988 if(trackIndex==iTracks) continue;
2990 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2993 printf("ERROR: Could not receive track %d\n", iTracks);
2997 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3001 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
3002 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
3003 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
3004 if(atrack2->GetTPCNcls() < 80) continue;
3005 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
3009 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
3010 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
3013 fPhiH = track2->Phi();
3014 fEtaH = track2->Eta();
3015 fPtH = track2->Pt();
3017 if(fPtH<0.5 || fPtH>2.0) continue;
3019 fDphi = fPhiE - fPhiH;
3021 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
3022 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
3024 fDeta = fEtaE - fEtaH;
3026 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
3028 for(Int_t i = 0; i < 6; i++)
3030 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
3032 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
3037 //____________________________________________________________________________________________________________
3039 //______________________________________________________________________
3040 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
3047 fIsFromPi0 = kFALSE;
3048 fIsFromEta = kFALSE;
3049 fIsFromGamma = kFALSE;
3051 if(mcIndex < 0 || !fIsMC)
3057 Int_t mpdg = -99999;
3058 Int_t gmpdg = -99999;
3059 Int_t ggmpdg = -99999;
3060 Int_t gggmpdg = -99999;
3064 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
3066 pdg = TMath::Abs(fMCparticle->GetPdgCode());
3076 fIsFromPi0 = kFALSE;
3077 fIsFromEta = kFALSE;
3078 fIsFromGamma = kFALSE;
3082 if(fMCparticle->GetMother()<0)
3089 fIsFromPi0 = kFALSE;
3090 fIsFromEta = kFALSE;
3091 fIsFromGamma = kFALSE;
3095 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3096 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
3098 if(fMCparticleMother->GetMother()<0)
3106 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
3107 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
3108 if(fMCparticleGMother->GetMother()<0)
3115 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
3116 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
3117 if(fMCparticleGGMother->GetMother()<0)
3123 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
3124 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
3131 fMCtrack = fMCstack->Particle(mcIndex);
3133 pdg = TMath::Abs(fMCtrack->GetPdgCode());
3142 fIsFromPi0 = kFALSE;
3143 fIsFromEta = kFALSE;
3144 fIsFromGamma = kFALSE;
3148 if(fMCtrack->GetFirstMother()<0)
3155 fIsFromPi0 = kFALSE;
3156 fIsFromEta = kFALSE;
3157 fIsFromGamma = kFALSE;
3161 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3162 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
3164 if(fMCtrackMother->GetFirstMother()<0)
3172 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
3173 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
3175 if(fMCtrackGMother->GetFirstMother()<0)
3182 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
3183 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
3185 if(fMCtrackGGMother->GetFirstMother()<0)
3191 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
3192 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
3198 //Tag Electron Source
3199 if(mpdg==111 || mpdg==221 || mpdg==22)
3207 fIsFromPi0 = kFALSE;
3208 fIsFromEta = kFALSE;
3209 fIsFromGamma = kFALSE;
3211 if(mpdg==111) fIsFromPi0 = kFALSE;
3212 if(mpdg==221)fIsFromEta = kFALSE;
3213 if(mpdg==22) fIsFromGamma = kFALSE;
3222 fIsFromPi0 = kFALSE;
3223 fIsFromEta = kFALSE;
3224 fIsFromGamma = kFALSE;
3231 if(mpdg>400 && mpdg<500)
3233 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
3248 else if(mpdg>500 && mpdg<600)