2 /**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 ////////////////////////////////////////////////////////////////////////
19 // Task for Heavy-flavour electron analysis in pPb collisions //
20 // (+ Electron-Hadron Jetlike Azimuthal Correlation) //
22 // version: May 30, 2014. //
25 // Elienos Pereira de Oliveira Filho (epereira@cern.ch) //
26 // Cristiane Jahnke (cristiane.jahnke@cern.ch) //
28 ////////////////////////////////////////////////////////////////////////
36 #include "AliAnalysisTask.h"
37 #include "AliAnalysisManager.h"
38 #include "AliESDEvent.h"
39 #include "AliAODEvent.h"
40 #include "AliVEvent.h"
41 #include "AliESDInputHandler.h"
42 #include "AliESDtrackCuts.h"
43 #include "AliESDCaloCluster.h"
44 #include "AliESDCaloCells.h"
45 #include "AliEMCALTrack.h"
46 #include "AliExternalTrackParam.h"
47 #include "AliPhysicsSelection.h"
48 #include "TGeoGlobalMagField.h"
52 #include "AliCentrality.h"
53 #include "AliAODMCParticle.h"
54 #include "AliAODMCHeader.h"
56 #include "AliPIDResponse.h"
57 #include "AliHFEcontainer.h"
58 #include "AliHFEcuts.h"
59 #include "AliHFEpid.h"
60 #include "AliHFEpidBase.h"
61 #include "AliHFEpidQAmanager.h"
62 #include "AliHFEtools.h"
63 #include "AliCFContainer.h"
64 #include "AliCFManager.h"
65 #include "AliSelectNonHFE.h"
66 #include "AliHFEpidTPC.h"
67 #include "AliAnalysisTaskEMCalHFEpA.h"
69 #include "THnSparse.h"
70 #include "TLorentzVector.h"
73 #include "AliESDHandler.h"
74 #include "AliMCEventHandler.h"
75 #include "AliMCEvent.h"
77 #include "TParticle.h"
79 #include "AliAnalysisTaskSE.h"
80 #include "TRefArray.h"
83 #include "TGeoManager.h"
86 #include "AliKFParticle.h"
87 #include "AliKFVertex.h"
88 #include "AliVParticle.h"
89 #include "AliVTrack.h"
90 #include "AliEventPoolManager.h"
91 #include "TObjArray.h"
92 //include to use reader as Lucile does
93 #include "AliCaloTrackAODReader.h"
94 #include "AliCaloTrackReader.h"
95 #include "AliEMCALRecoUtils.h" //to remove exotics
96 #include "AliAODHeader.h"
97 #include "AliEMCALGeometry.h"
101 // --- ANALYSIS system ---
102 #include "AliCalorimeterUtils.h"
103 #include "AliESDEvent.h"
104 #include "AliMCEvent.h"
105 #include "AliStack.h"
106 #include "AliAODPWG4Particle.h"
107 #include "AliVCluster.h"
108 #include "AliVCaloCells.h"
109 #include "AliMixedEvent.h"
110 #include "AliAODCaloCluster.h"
111 #include "AliOADBContainer.h"
112 #include "AliAnalysisManager.h"
115 #include "AliEMCALGeometry.h"
116 #include "AliPHOSGeoUtils.h"
118 //______________________________________________________________________
120 //______________________________________________________________________
121 ClassImp(AliAnalysisTaskEMCalHFEpA)
123 //______________________________________________________________________
124 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA(const char *name)
125 : AliAnalysisTaskSE(name)
131 ,fUseShowerShapeCut(kFALSE)
132 ,fFillBackground(kFALSE)
133 ,fAssocWithSPD(kFALSE)
144 ,fIsFromGamma(kFALSE)
148 ,fPartnerCuts(new AliESDtrackCuts())
151 ,fNonHFE(new AliSelectNonHFE())
156 ,fHasCentralitySelection(kFALSE)
158 ,fCentralityHistPass(0)
178 ,fPtElec_ULS_NoPid(0)
181 ,fPtElec_ULS_MC_weight(0)
184 ,fPtElec_ULS_weight(0)
185 ,fPtElec_LS_weight(0)
186 ,fPtElec_ULS2_weight(0)
187 ,fPtElec_LS2_weight(0)
200 ,fShowerShapeM02_EoverP(0)
201 ,fShowerShapeM20_EoverP(0)
208 ,fECluster_not_exotic(0)
209 ,fECluster_not_exotic1(0)
210 ,fECluster_not_exotic2(0)
213 ,fNCluster_pure_aod(0)
214 ,fNCluster_ECluster(0)
216 ,fNcells_energy_elec_selected(0)
217 ,fNcells_energy_not_exotic(0)
223 ,fpt_reco_pt_MC_num(0)
224 ,fpt_reco_pt_MC_den(0)
253 ,fNcells_electrons(0)
260 ,fTPCnsigma_eta_electrons(0)
261 ,fTPCnsigma_eta_hadrons(0)
264 ,fnsigma_p_EoverPcut(0)
265 ,fEoverP_pt_pions2(0)
267 ,fEoverP_pt_hadrons(0)
273 ,fCEtaPhi_ULS_Weight(0)
274 ,fCEtaPhi_LS_Weight(0)
275 ,fCEtaPhi_ULS_NoP_Weight(0)
276 ,fCEtaPhi_LS_NoP_Weight(0)
304 ,fAngleCutFlag(kFALSE)
305 ,fChi2CutFlag(kFALSE)
307 ,fAssHadronPtMin(0.5)
308 ,fAssHadronPtMax(2.0)
309 ,fPtBackgroundBeforeReco(0)
310 ,fPtBackgroundBeforeReco2(0)
311 ,fPtBackgroundBeforeReco_weight(0)
312 ,fPtBackgroundBeforeReco2_weight(0)
315 ,fPtBackgroundAfterReco(0)
319 ,fPtMCparticleAll_nonPrimary(0)
320 ,fPtMCparticleAlle_nonPrimary(0)
321 ,fPtMCparticleAlle_Primary(0)
322 ,fPtMCparticleReco(0)
323 ,fPtMCparticleReco_nonPrimary(0)
324 ,fPtMCparticleAllHfe1(0)
325 ,fPtMCparticleRecoHfe1(0)
326 ,fPtMCparticleAllHfe2(0)
327 ,fPtMCparticleRecoHfe2(0)
328 ,fPtMCelectronAfterAll(0)
329 ,fPtMCelectronAfterAll_unfolding(0)
330 ,fPtMCelectronAfterAll_nonPrimary(0)
331 ,fPtMCelectronAfterAll_Primary(0)
339 ,fPtMC_EMCal_Selected(0)
341 ,fPtMC_TPC_Selected(0)
342 ,fPt_track_match_den(0)
343 ,fPt_track_match_num(0)
345 ,fPtMCWithoutLabel(0)
346 ,fPtIsPhysicaPrimary(0)
350 ,fPID(new AliHFEpid("hfePid"))
354 ,fRejectKinkMother(kFALSE)
359 ,fMCtrackGGGMother(0)
364 ,fMCparticleMother(0)
365 ,fMCparticleGMother(0)
366 ,fMCparticleGGMother(0)
367 ,fMCparticleGGGMother(0)
377 ,fCEtaPhi_ULS_Weight_EM(0)
378 ,fCEtaPhi_LS_Weight_EM(0)
381 ,fCEtaPhi_Inc_DiHadron(0)
383 //,fEMCALRecoUtils(new AliEMCALRecoUtils)
388 //,fEMCALRecoUtils(0)//exotic
392 // Define input and output slots here
393 // Input slot #0 works with a TChain
396 //fEMCALRecoUtils = new AliEMCALRecoUtils();
398 DefineInput(0, TChain::Class());
399 // Output slot #0 id reserved by the base class for AOD
400 // Output slot #1 writes into a TH1 container
401 // DefineOutput(1, TH1I::Class());
402 DefineOutput(1, TList::Class());
403 // DefineOutput(3, TTree::Class());
406 //________________________________________________________________________
407 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
408 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
413 ,fUseShowerShapeCut(kFALSE)
414 ,fFillBackground(kFALSE)
415 ,fAssocWithSPD(kFALSE)
425 ,fIsFromGamma(kFALSE)
429 ,fPartnerCuts(new AliESDtrackCuts())
432 ,fNonHFE(new AliSelectNonHFE())
437 ,fHasCentralitySelection(kFALSE)
439 ,fCentralityHistPass(0)
459 ,fPtElec_ULS_NoPid(0)
462 ,fPtElec_ULS_MC_weight(0)
465 ,fPtElec_ULS_weight(0)
466 ,fPtElec_LS_weight(0)
467 ,fPtElec_ULS2_weight(0)
468 ,fPtElec_LS2_weight(0)
481 ,fShowerShapeM02_EoverP(0)
482 ,fShowerShapeM20_EoverP(0)
489 ,fECluster_not_exotic(0)
490 ,fECluster_not_exotic1(0)
491 ,fECluster_not_exotic2(0)
494 ,fNCluster_pure_aod(0)
495 ,fNCluster_ECluster(0)
497 ,fNcells_energy_elec_selected(0)
498 ,fNcells_energy_not_exotic(0)
503 ,fpt_reco_pt_MC_num(0)
504 ,fpt_reco_pt_MC_den(0)
534 ,fNcells_electrons(0)
541 ,fTPCnsigma_eta_electrons(0)
542 ,fTPCnsigma_eta_hadrons(0)
545 ,fnsigma_p_EoverPcut(0)
546 ,fEoverP_pt_pions2(0)
548 ,fEoverP_pt_hadrons(0)
554 ,fCEtaPhi_ULS_Weight(0)
555 ,fCEtaPhi_LS_Weight(0)
556 ,fCEtaPhi_ULS_NoP_Weight(0)
557 ,fCEtaPhi_LS_NoP_Weight(0)
585 ,fAngleCutFlag(kFALSE)
586 ,fChi2CutFlag(kFALSE)
588 ,fAssHadronPtMin(0.5)
589 ,fAssHadronPtMax(2.0)
590 ,fPtBackgroundBeforeReco(0)
591 ,fPtBackgroundBeforeReco2(0)
592 ,fPtBackgroundBeforeReco_weight(0)
593 ,fPtBackgroundBeforeReco2_weight(0)
596 ,fPtBackgroundAfterReco(0)
600 ,fPtMCparticleAll_nonPrimary(0)
601 ,fPtMCparticleAlle_nonPrimary(0)
602 ,fPtMCparticleAlle_Primary(0)
603 ,fPtMCparticleReco(0)
604 ,fPtMCparticleReco_nonPrimary(0)
605 ,fPtMCparticleAllHfe1(0)
606 ,fPtMCparticleRecoHfe1(0)
607 ,fPtMCparticleAllHfe2(0)
608 ,fPtMCparticleRecoHfe2(0)
609 ,fPtMCelectronAfterAll(0)
610 ,fPtMCelectronAfterAll_unfolding(0)
611 ,fPtMCelectronAfterAll_nonPrimary(0)
612 ,fPtMCelectronAfterAll_Primary(0)
620 ,fPtMC_EMCal_Selected(0)
622 ,fPtMC_TPC_Selected(0)
623 ,fPt_track_match_den(0)
624 ,fPt_track_match_num(0)
626 ,fPtMCWithoutLabel(0)
627 ,fPtIsPhysicaPrimary(0)
632 ,fPID(new AliHFEpid("hfePid"))
635 ,fRejectKinkMother(kFALSE)
640 ,fMCtrackGGGMother(0)
645 ,fMCparticleMother(0)
646 ,fMCparticleGMother(0)
647 ,fMCparticleGGMother(0)
648 ,fMCparticleGGGMother(0)
658 ,fCEtaPhi_ULS_Weight_EM(0)
659 ,fCEtaPhi_LS_Weight_EM(0)
662 ,fCEtaPhi_Inc_DiHadron(0)
664 //,fEMCALRecoUtils(new AliEMCALRecoUtils)
668 //,fEMCALRecoUtils(0)//exotic
671 // Define input and output slots here
672 // Input slot #0 works with a TChain
675 // fEMCALRecoUtils = new AliEMCALRecoUtils();
677 DefineInput(0, TChain::Class());
678 // Output slot #0 id reserved by the base class for AOD
679 // Output slot #1 writes into a TH1 container
680 // DefineOutput(1, TH1I::Class());
681 DefineOutput(1, TList::Class());
682 //DefineOutput(3, TTree::Class());
685 //______________________________________________________________________
686 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
695 //if(fEMCALRecoUtils) delete fEMCALRecoUtils ;
698 //______________________________________________________________________
699 //Create Output Objects
700 //Here we can define the histograms and others output files
702 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
704 //______________________________________________________________________
706 if(!fPID->GetNumberOfPIDdetectors())
708 fPID->AddDetector("TPC", 0);
711 fPID->SortDetectors();
713 fPIDqa = new AliHFEpidQAmanager();
714 fPIDqa->Initialize(fPID);
715 //______________________________________________________________________
717 //______________________________________________________________________
718 //Initialize correction Framework and Cuts
719 fCFM = new AliCFManager;
720 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
721 fCFM->SetNStepParticle(kNcutSteps);
722 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
726 AliWarning("Cuts not available. Default cuts will be used");
727 fCuts = new AliHFEcuts;
728 fCuts->CreateStandardCuts();
731 fCuts->Initialize(fCFM);
732 //______________________________________________________________________
734 ///___________________//Lucile
737 // reader = new AliCaloTrackAODReader();
739 //___________________________________________________
742 fOutputList = new TList();
743 fOutputList->SetOwner();
746 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
748 //Store the number of events
750 fNevent = new TH1F("fNevent","Number of Events",30,0,30);
751 fNevent2 = new TH1F("fNevent2","Number of Events 2",30,0,30);
752 //And then, add to the output list
753 fOutputList->Add(fNevent);
754 fOutputList->Add(fNevent2);
756 fpid = new TH1F("fpid","PID flag",5,0,5);
757 fOutputList->Add(fpid);
760 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
762 fPtPrim = new TH1F("fPtPrim","Primary Electrons aod track; p_{T} (GeV/c); Count",300,0,30);
763 fPtSec = new TH1F("fPtSec","Secundary Electrons aod track; p_{T} (GeV/c); Count",300,0,30);
764 fPtPrim2 = new TH1F("fPtPrim2","Primary Electrons vtrack; p_{T} (GeV/c); Count",300,0,30);
765 fPtSec2 = new TH1F("fPtSec2","Secundary Electrons vtrack; p_{T} (GeV/c); Count",300,0,30);
768 fPtElec_ULS = new TH1F("fPtElec_ULS","ULS; p_{T} (GeV/c); Count",300,0,30);
769 fPtElec_LS = new TH1F("fPtElec_LS","LS; p_{T} (GeV/c); Count",300,0,30);
771 fPtElec_ULS_NoPid = new TH1F("fPtElec_ULS_NoPid","ULS; p_{T} (GeV/c); Count",300,0,30);
772 fPtElec_LS_NoPid = new TH1F("fPtElec_LS_NoPid","LS; p_{T} (GeV/c); Count",300,0,30);
774 fPtElec_ULS_MC = new TH1F("fPtElec_ULS_MC","ULS; p_{T} (GeV/c); Count",300,0,30);
775 fPtElec_ULS_MC_weight = new TH1F("fPtElec_ULS_MC_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
777 fPtElec_ULS_weight = new TH1F("fPtElec_ULS_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
778 fPtElec_LS_weight = new TH1F("fPtElec_LS_weight","LS; p_{T} (GeV/c); Count",300,0,30);
780 fTOF01 = new TH2F("fTOF01","",200,-20,20,200,-20,20);
781 fTOF02 = new TH2F("fTOF02","",200,-20,20,200,-20,20);
782 fTOF03 = new TH2F("fTOF03","",200,-20,20,200,-20,20);
785 fPtElec_ULS2 = new TH1F("fPtElec_ULS2","ULS; p_{T} (GeV/c); Count",300,0,30);
786 fPtElec_LS2 = new TH1F("fPtElec_LS2","LS; p_{T} (GeV/c); Count",300,0,30);
788 fPtElec_ULS2_weight = new TH1F("fPtElec_ULS2_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
789 fPtElec_LS2_weight = new TH1F("fPtElec_LS2_weight","LS; p_{T} (GeV/c); Count",300,0,30);
793 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",300,0,30);
794 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
795 fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
796 fEtaPhi_num=new TH2F("fEtaPhi_num","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
797 fEtaPhi_den=new TH2F("fEtaPhi_den","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
798 fEtaPhi_data=new TH2F("fEtaPhi_data","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
800 fpt_reco_pt_MC_num=new TH2F("fpt_reco_pt_MC_num","pt reco x pt MC;pt reco; pt MC",300,0.,30,300,0.,30);
801 fpt_reco_pt_MC_den=new TH2F("fpt_reco_pt_MC_den","pt reco x pt MC;pt reco; pt MC",300,0.,30,300,0.,30);
804 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
805 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
807 fECluster_pure= new TH1F("fECluster_pure", ";ECluster pure",2000,0,100);
808 fECluster_not_exotic= new TH1F("fECluster_not_exotic", ";ECluster not exotic - function ",2000,0,100);
810 fECluster_not_exotic1= new TH1F("fECluster_not_exotic1", ";ECluster not exotic Ncells > E/3+1",2000,0,100);
812 fECluster_not_exotic2= new TH1F("fECluster_not_exotic2", ";ECluster not exotic 2",2000,0,100);
813 fECluster_exotic= new TH1F("fECluster_exotic", ";ECluster exotic",2000,0,100);
815 //not associated with tracks
816 fNCluster_pure= new TH1F("fNCluster_pure", ";Number of clusters - pure",2000,-1,1999);
817 fNCluster_pure_aod= new TH1F("fNCluster_pure_aod", ";Number of clusters - pure -aod",2000,-1,1999);
818 fNCluster_ECluster= new TH2F("fNCluster_ECluster", ";Number of clusters vs. Energy of Cluster",2000,-1,1999, 4000, -1, 1999);
820 fNcells_energy= new TH2F("fNcells_energy", "all clusters;Number of cells;Energy of Cluster",100,0,100, 2000, 0, 100);
821 fNcells_energy_elec_selected= new TH2F("fNcells_energy_elec_selected", "clusters for electrons on TPC;Number of cells;Energy of Cluster",100,0,100, 2000, 0, 100);
822 fNcells_energy_not_exotic= new TH2F("fNcells_energy_not_exotic", "not exotic cluster;Number of cells;Energy of Cluster ",100,0,100, 2000, 0, 100);
827 fTime = new TH2D("fTime","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
828 fTime2 = new TH2D("fTime2","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
831 ftimingEle = new TH2D("ftimingEle","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
832 ftimingEle2 = new TH2D("ftimingEle2","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
834 fShowerShape_ha = new TH2F("fShowerShape_ha","Shower Shape hadrons;M02;M20",500,0,1.8,500,0,1.8);
835 fShowerShape_ele = new TH2F("fShowerShape_ele","Shower Shape electrons;M02;M20",500,0,1.8,500,0,1.8);
837 fShowerShapeM02_EoverP = new TH2F("fShowerShapeM02_EoverP","Shower Shape;M02;E/p",500,0,1.8,500,0,1.8);
838 fShowerShapeM20_EoverP = new TH2F("fShowerShapeM20_EoverP","Shower Shape;M20;E/p",500,0,1.8,500,0,1.8);
842 fOutputList->Add(fTOF01);
843 fOutputList->Add(fTOF02);
844 fOutputList->Add(fTOF03);
846 fOutputList->Add(fEtaPhi_num);
847 fOutputList->Add(fEtaPhi_den);
848 fOutputList->Add(fEtaPhi_data);
850 fOutputList->Add(fpt_reco_pt_MC_num);
851 fOutputList->Add(fpt_reco_pt_MC_den);
854 fOutputList->Add(fPtElec_Inc);
855 fOutputList->Add(fPtElec_ULS);
856 fOutputList->Add(fPtElec_LS);
857 fOutputList->Add(fPtElec_ULS_NoPid);
858 fOutputList->Add(fPtElec_LS_NoPid);
859 fOutputList->Add(fPtElec_ULS_MC);
860 fOutputList->Add(fPtElec_ULS_MC_weight);
862 fOutputList->Add(fPtPrim);
863 fOutputList->Add(fPtSec);
864 fOutputList->Add(fPtPrim2);
865 fOutputList->Add(fPtSec2);
869 fOutputList->Add(fPtElec_ULS_weight);
870 fOutputList->Add(fPtElec_LS_weight);
873 fOutputList->Add(fPtElec_ULS2);
874 fOutputList->Add(fPtElec_LS2);
875 fOutputList->Add(fPtElec_ULS2_weight);
876 fOutputList->Add(fPtElec_LS2_weight);
880 fOutputList->Add(fPtTrigger_Inc);
881 fOutputList->Add(fTPCnsigma_pt_2D);
882 fOutputList->Add(fShowerShapeCut);
884 fOutputList->Add(fCharge_n);
885 fOutputList->Add(fCharge_p);
887 fOutputList->Add(fECluster_pure);
888 fOutputList->Add(fECluster_not_exotic);
889 fOutputList->Add(fECluster_not_exotic1);
890 fOutputList->Add(fECluster_not_exotic2);
891 fOutputList->Add(fECluster_exotic);
893 fOutputList->Add(fNCluster_pure);
894 fOutputList->Add(fNCluster_pure_aod);
896 fOutputList->Add(fNCluster_ECluster);
897 fOutputList->Add(fNcells_energy);
898 fOutputList->Add(fNcells_energy_elec_selected);
899 fOutputList->Add(fNcells_energy_not_exotic);
905 fOutputList->Add(fTime);
906 fOutputList->Add(fTime2);
910 fOutputList->Add(ftimingEle);
911 fOutputList->Add(ftimingEle2);
913 fOutputList->Add(fShowerShape_ha);
914 fOutputList->Add(fShowerShape_ele);
916 fOutputList->Add(fShowerShapeM02_EoverP);
917 fOutputList->Add(fShowerShapeM20_EoverP);
923 fVtxZ_new1= new TH1F("fVtxZ_new1","fVtxZ_new1",4000, -50,50);
924 fVtxZ_new2= new TH1F("fVtxZ_new2","fVtxZ_new2",4000, -50,50);
925 fVtxZ_new3= new TH1F("fVtxZ_new3","fVtxZ_new3",4000, -50,50);
926 fVtxZ_new4= new TH1F("fVtxZ_new4","fVtxZ_new4",4000, -50,50);
928 fzRes1= new TH1F("fzRes1","fzRes1",4000, 0,1);
929 fzRes2= new TH1F("fzRes2","fzRes2",4000, 0,1);
930 fSPD_track_vtx1= new TH1F("fSPD_track_vtx1","fSPD_track_vtx1",4000, -5,5);
931 fSPD_track_vtx2= new TH1F("fSPD_track_vtx2","fSPD_track_vtx2",4000, -5,5);
937 //Step 1: Before Track cuts
941 fEoverP_pt = new TH2F *[3];
942 fTPC_p = new TH2F *[3];
943 fTPCnsigma_p = new TH2F *[3];
945 fECluster= new TH1F *[3];
946 fEtaPhi= new TH2F *[3];
947 fVtxZ= new TH1F *[3];
948 fEtad= new TH1F *[3];
949 fNTracks= new TH1F *[3];
951 fNTracks_pt= new TH2F *[3];
952 fNTracks_eta= new TH2F *[3];
953 fNTracks_phi= new TH2F *[3];
955 fNClusters= new TH1F *[3];
956 fTPCNcls_EoverP= new TH2F *[3];
957 fTPCNcls_pid=new TH2F *[4];
961 for(Int_t i = 0; i < 3; i++)
963 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
964 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);
965 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
968 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
969 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
970 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
971 fEtad[i]= new TH1F(Form("fEtad%d",i),"Eta distribution",200, -1.2,1.2);
972 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,5000);
974 fNTracks_pt[i]= new TH2F(Form("fNTracks_pt%d",i),"NTracks vs. pt",1000, 0,5000, 1000, 0, 100);
975 fNTracks_eta[i]= new TH2F(Form("fNTracks_eta%d",i),"NTracks vs. pt",1000, 0,5000, 500, -1.0, 1.0);
976 fNTracks_phi[i]= new TH2F(Form("fNTracks_phi%d",i),"NTracks vs. pt",1000, 0,5000, 500, 0, 5.0);
980 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
981 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
985 fOutputList->Add(fEoverP_pt[i]);
986 fOutputList->Add(fTPC_p[i]);
987 fOutputList->Add(fTPCnsigma_p[i]);
990 fOutputList->Add(fECluster[i]);
991 fOutputList->Add(fEtaPhi[i]);
992 fOutputList->Add(fVtxZ[i]);
993 fOutputList->Add(fEtad[i]);
994 fOutputList->Add(fNTracks[i]);
996 fOutputList->Add(fNTracks_pt[i]);
997 fOutputList->Add(fNTracks_eta[i]);
998 fOutputList->Add(fNTracks_phi[i]);
1000 fOutputList->Add(fNClusters[i]);
1001 fOutputList->Add(fTPCNcls_EoverP[i]);
1004 fTrack_Multi= new TH1F("fTrack_Multi","fTrack_Multi",1000, 0,1000);
1006 for(Int_t i = 0; i < 4; i++)
1008 fTPCNcls_pid[i]= new TH2F(Form("fTPCNcls_pid%d",i),"fTPCNcls_pid;NCls;NCls for PID",200,0,200,200,0,200);
1009 fOutputList->Add(fTPCNcls_pid[i]);
1013 Int_t fPtBin[7] = {1,2,4,6,8,10,15};
1015 fEoverP_tpc = new TH2F *[6];
1016 fTPC_pt = new TH1F *[6];
1017 fTPCnsigma_pt = new TH1F *[6];
1022 fR_EoverP=new TH2F *[6];
1023 fNcells=new TH1F *[6];
1024 fNcells_EoverP=new TH2F *[6];
1025 fM02_EoverP= new TH2F *[6];
1026 fM20_EoverP= new TH2F *[6];
1027 fEoverP_ptbins=new TH1F *[6];
1028 fECluster_ptbins=new TH1F *[6];
1029 fEoverP_wSSCut=new TH1F *[6];
1030 fNcells_electrons=new TH1F *[6];
1031 fNcells_hadrons=new TH1F *[6];
1032 fTPCnsigma_eta_electrons=new TH2F *[6];
1033 fTPCnsigma_eta_hadrons=new TH2F *[6];
1035 if(fCorrelationFlag)
1037 fCEtaPhi_Inc = new TH2F *[6];
1038 fCEtaPhi_Inc_DiHadron = new TH2F *[6];
1040 fCEtaPhi_ULS = new TH2F *[6];
1041 fCEtaPhi_LS = new TH2F *[6];
1042 fCEtaPhi_ULS_NoP = new TH2F *[6];
1043 fCEtaPhi_LS_NoP = new TH2F *[6];
1045 fCEtaPhi_ULS_Weight = new TH2F *[6];
1046 fCEtaPhi_LS_Weight = new TH2F *[6];
1047 fCEtaPhi_ULS_NoP_Weight = new TH2F *[6];
1048 fCEtaPhi_LS_NoP_Weight = new TH2F *[6];
1050 fCEtaPhi_Inc_EM = new TH2F *[6];
1052 fCEtaPhi_ULS_EM = new TH2F *[6];
1053 fCEtaPhi_LS_EM = new TH2F *[6];
1055 fCEtaPhi_ULS_Weight_EM = new TH2F *[6];
1056 fCEtaPhi_LS_Weight_EM = new TH2F *[6];
1058 fInvMass = new TH1F("fInvMass","",200,0,0.3);
1059 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
1060 fDCA = new TH1F("fDCA","",200,0,1);
1061 fDCABack = new TH1F("fDCABack","",200,0,1);
1062 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
1063 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
1065 fOutputList->Add(fInvMass);
1066 fOutputList->Add(fInvMassBack);
1067 fOutputList->Add(fDCA);
1068 fOutputList->Add(fDCABack);
1069 fOutputList->Add(fOpAngle);
1070 fOutputList->Add(fOpAngleBack);
1073 if(fFillBackground){
1075 fInvMass = new TH1F("fInvMass","",200,0,0.3);
1076 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
1077 fDCA = new TH1F("fDCA","",200,0,1);
1078 fDCABack = new TH1F("fDCABack","",200,0,1);
1079 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
1080 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
1082 fOutputList->Add(fInvMass);
1083 fOutputList->Add(fInvMassBack);
1084 fOutputList->Add(fDCA);
1085 fOutputList->Add(fDCABack);
1086 fOutputList->Add(fOpAngle);
1087 fOutputList->Add(fOpAngleBack);
1089 //histos for TPC-only
1090 fInvMass2 = new TH1F("fInvMass2","",200,0,0.3);
1091 fInvMassBack2 = new TH1F("fInvMassBack2","",200,0,0.3);
1092 fDCA2 = new TH1F("fDCA2","",200,0,1);
1093 fDCABack2 = new TH1F("fDCABack2","",200,0,1);
1094 fOpAngle2 = new TH1F("fOpAngle2","",200,0,0.5);
1095 fOpAngleBack2 = new TH1F("fOpAngleBack2","",200,0,0.5);
1097 fOutputList->Add(fInvMass2);
1098 fOutputList->Add(fInvMassBack2);
1099 fOutputList->Add(fDCA2);
1100 fOutputList->Add(fDCABack2);
1101 fOutputList->Add(fOpAngle2);
1102 fOutputList->Add(fOpAngleBack2);
1106 for(Int_t i = 0; i < 6; i++)
1108 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);
1109 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);
1110 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);
1112 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);
1113 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);
1114 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);
1115 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);
1116 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);
1117 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);
1118 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);
1119 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);
1120 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);
1121 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);
1122 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);
1123 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);
1124 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);
1125 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);
1126 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);
1128 fOutputList->Add(fEoverP_tpc[i]);
1129 fOutputList->Add(fTPC_pt[i]);
1130 fOutputList->Add(fTPCnsigma_pt[i]);
1132 fOutputList->Add(fEta[i]);
1133 fOutputList->Add(fPhi[i]);
1134 fOutputList->Add(fR[i]);
1135 fOutputList->Add(fR_EoverP[i]);
1136 fOutputList->Add(fNcells[i]);
1137 fOutputList->Add(fNcells_electrons[i]);
1138 fOutputList->Add(fNcells_hadrons[i]);
1139 fOutputList->Add(fNcells_EoverP[i]);
1140 fOutputList->Add(fECluster_ptbins[i]);
1141 fOutputList->Add(fEoverP_ptbins[i]);
1142 fOutputList->Add(fEoverP_wSSCut[i]);
1143 fOutputList->Add(fM02_EoverP[i]);
1144 fOutputList->Add(fM20_EoverP[i]);
1145 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
1146 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
1149 if(fCorrelationFlag)
1151 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);
1152 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);
1154 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);
1155 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);
1156 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);
1157 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);
1159 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);
1160 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);
1161 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);
1162 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);
1164 fOutputList->Add(fCEtaPhi_Inc[i]);
1165 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
1167 fOutputList->Add(fCEtaPhi_ULS[i]);
1168 fOutputList->Add(fCEtaPhi_LS[i]);
1169 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
1170 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
1172 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
1173 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
1174 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
1175 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
1177 if(fEventMixingFlag)
1179 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);
1181 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);
1182 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);
1184 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);
1185 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);
1187 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
1189 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
1190 fOutputList->Add(fCEtaPhi_LS_EM[i]);
1192 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
1193 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
1199 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
1200 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
1204 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
1205 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
1207 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
1208 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
1210 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
1211 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
1214 fOutputList->Add(fTPCnsigma_eta);
1215 fOutputList->Add(fTPCnsigma_phi);
1217 fOutputList->Add(fNcells_pt);
1218 fOutputList->Add(fEoverP_pt_pions);
1220 fOutputList->Add(ftpc_p_EoverPcut);
1221 fOutputList->Add(fnsigma_p_EoverPcut);
1223 fOutputList->Add(fEoverP_pt_pions2);
1224 fOutputList->Add(fEoverP_pt_hadrons);
1226 fOutputList->Add(fVtxZ_new1);
1227 fOutputList->Add(fVtxZ_new2);
1228 fOutputList->Add(fVtxZ_new3);
1229 fOutputList->Add(fVtxZ_new4);
1231 fOutputList->Add(fzRes1);
1232 fOutputList->Add(fzRes2);
1233 fOutputList->Add(fSPD_track_vtx1);
1234 fOutputList->Add(fSPD_track_vtx2);
1238 //__________________________________________________________________
1239 //Efficiency studies
1242 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{T} (GeV/c);Count",300,0,30);
1243 fPtBackgroundBeforeReco_weight = new TH1F("fPtBackgroundBeforeReco_weight",";p_{T} (GeV/c);Count",300,0,30);
1244 if(fFillBackground)fPtBackgroundBeforeReco2 = new TH1F("fPtBackgroundBeforeReco2",";p_{T} (GeV/c);Count",300,0,30);
1245 if(fFillBackground)fPtBackgroundBeforeReco2_weight = new TH1F("fPtBackgroundBeforeReco2_weight",";p_{T} (GeV/c);Count",300,0,30);
1246 fpT_m_electron= new TH2F("fpT_m_electron","fpT_m_electron",300,0,30,300,0,30);
1247 fpT_gm_electron= new TH2F("fpT_gm_electron","fpT_gm_electron",300,0,30,300,0,30);
1249 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{T} (GeV/c);Count",300,0,30);
1250 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{T} (GeV/c);Count",200,0,40);
1251 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{T} (GeV/c);Count",200,0,40);
1253 fPtMCparticleAll_nonPrimary = new TH1F("fPtMCparticleAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1254 fPtMCparticleAlle_nonPrimary = new TH1F("fPtMCparticleAlle_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1255 fPtMCparticleAlle_Primary = new TH1F("fPtMCparticleAlle_Primary",";p_{T} (GeV/c);Count",200,0,40);
1257 fPtMCparticleReco_nonPrimary = new TH1F("fPtMCparticleReco_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1259 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
1260 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
1261 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
1262 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
1264 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{T} (GeV/c);Count",200,0,40);
1265 fPtMCelectronAfterAll_unfolding = new TH1F("fPtMCelectronAfterAll_unfolding",";p_{T} (GeV/c);Count",200,0,40);
1266 fPtMCelectronAfterAll_nonPrimary = new TH1F("fPtMCelectronAfterAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1267 fPtMCelectronAfterAll_Primary = new TH1F("fPtMCelectronAfterAll_Primary",";p_{T} (GeV/c);Count",200,0,40);
1271 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,30);
1272 fPtMCeta = new TH1F("fPtMCeta",";p_{T} (GeV/c);Count",200,0,30);
1273 fPtMCpi02 = new TH1F("fPtMCpi02",";p_{t} (GeV/c);Count",200,0,30);
1274 fPtMCeta2 = new TH1F("fPtMCeta2",";p_{T} (GeV/c);Count",200,0,30);
1275 fPtMCpi03 = new TH1F("fPtMCpi03",";p_{t} (GeV/c);Count",200,0,30);
1276 fPtMCeta3 = new TH1F("fPtMCeta3",";p_{T} (GeV/c);Count",200,0,30);
1278 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
1279 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
1280 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{T} (GeV/c);Count",200,0,40);
1281 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{T} (GeV/c);Count",200,0,40);
1283 fPt_track_match_den = new TH1F("fPt_track_match_den",";p_{T} (GeV/c);Count",200,0,40);
1284 fPt_track_match_num = new TH1F("fPt_track_match_num",";p_{T} (GeV/c);Count",200,0,40);
1286 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
1287 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
1288 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
1290 fOutputList->Add(fPtBackgroundBeforeReco);
1291 fOutputList->Add(fPtBackgroundBeforeReco_weight);
1293 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2);
1294 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2_weight);
1296 fOutputList->Add(fpT_m_electron);
1297 fOutputList->Add(fpT_gm_electron);
1299 fOutputList->Add(fPtBackgroundAfterReco);
1300 fOutputList->Add(fPtMCparticleAll);
1301 fOutputList->Add(fPtMCparticleReco);
1303 fOutputList->Add(fPtMCparticleAll_nonPrimary);
1304 fOutputList->Add(fPtMCparticleAlle_nonPrimary);
1306 fOutputList->Add(fPtMCparticleAlle_Primary);
1307 fOutputList->Add(fPtMCparticleReco_nonPrimary);
1309 fOutputList->Add(fPtMCparticleAllHfe1);
1310 fOutputList->Add(fPtMCparticleRecoHfe1);
1311 fOutputList->Add(fPtMCparticleAllHfe2);
1312 fOutputList->Add(fPtMCparticleRecoHfe2);
1313 fOutputList->Add(fPtMCelectronAfterAll);
1314 fOutputList->Add(fPtMCelectronAfterAll_unfolding);
1316 fOutputList->Add(fPtMCelectronAfterAll_nonPrimary);
1317 fOutputList->Add(fPtMCelectronAfterAll_Primary);
1321 fOutputList->Add(fPtMCpi0);
1322 fOutputList->Add(fPtMCeta);
1323 fOutputList->Add(fPtMCpi02);
1324 fOutputList->Add(fPtMCeta2);
1325 fOutputList->Add(fPtMCpi03);
1326 fOutputList->Add(fPtMCeta3);
1327 fOutputList->Add(fPtMC_EMCal_All);
1328 fOutputList->Add(fPtMC_EMCal_Selected);
1329 fOutputList->Add(fPtMC_TPC_All);
1330 fOutputList->Add(fPtMC_TPC_Selected);
1332 fOutputList->Add(fPt_track_match_den);
1333 fOutputList->Add(fPt_track_match_num);
1335 fOutputList->Add(fPtMCWithLabel);
1336 fOutputList->Add(fPtMCWithoutLabel);
1337 fOutputList->Add(fPtIsPhysicaPrimary);
1340 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
1341 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
1342 fOutputList->Add(fCentralityHist);
1343 fOutputList->Add(fCentralityHistPass);
1345 //______________________________________________________________________
1346 //Mixed event analysis
1347 if(fEventMixingFlag)
1349 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
1350 fOutputList->Add(fPoolNevents);
1352 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.
1353 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
1355 Int_t nCentralityBins = 15;
1356 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
1358 Int_t nZvtxBins = 9;
1359 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
1361 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
1363 //______________________________________________________________________
1365 PostData(1, fOutputList);
1367 ///______________________________________________________________________
1370 //______________________________________________________________________
1372 //Called for each event
1373 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
1376 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1377 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
1381 printf("ERROR: fESD & fAOD not available\n");
1385 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
1389 printf("ERROR: fVEvent not available\n");
1396 AliError("HFE cuts not available");
1400 if(!fPID->IsInitialized())
1402 // Initialize PID with the given run number
1403 AliWarning("PID not initialised, get from Run no");
1407 fPID->InitializePID(fAOD->GetRunNumber());
1411 fPID->InitializePID(fESD->GetRunNumber());
1416 fPidResponse = fInputHandler->GetPIDResponse();
1419 //Check PID response
1422 AliDebug(1, "Using default PID Response");
1423 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
1426 fPID->SetPIDResponse(fPidResponse);
1428 fCFM->SetRecEventInfo(fVevent);
1430 Double_t *fListOfmotherkink = 0;
1431 Int_t fNumberOfVertices = 0;
1432 Int_t fNumberOfMotherkink = 0;
1435 //total event before event selection
1438 //______________________________________________________________________
1442 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
1443 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1444 TString vtxTtl = trkVtx->GetTitle();
1445 if(!vtxTtl.Contains("VertexerTracks")) return;
1446 //Float_t zvtx = trkVtx->GetZ();
1447 Float_t zvtx = -100;
1448 zvtx=trkVtx->GetZ();
1451 fVtxZ_new1->Fill(fZvtx);
1453 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
1454 if(spdVtx->GetNContributors()<=0) return;
1455 TString vtxTyp = spdVtx->GetTitle();
1456 Double_t cov[6]={0};
1457 spdVtx->GetCovarianceMatrix(cov);
1458 Double_t zRes = TMath::Sqrt(cov[5]);
1461 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1464 fSPD_track_vtx1->Fill(spdVtx->GetZ() - trkVtx->GetZ());
1465 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1466 fSPD_track_vtx2->Fill(spdVtx->GetZ() - trkVtx->GetZ());
1469 if(TMath::Abs(zvtx) > 10) return;
1470 fVtxZ_new2->Fill(fZvtx);
1472 if(fabs(zvtx>10.0))return;
1473 fVtxZ_new3->Fill(fZvtx);
1476 //Look for kink mother for AOD
1478 fNumberOfVertices = 0;
1479 fNumberOfMotherkink = 0;
1483 fNumberOfVertices = fAOD->GetNumberOfVertices();
1485 fListOfmotherkink = new Double_t[fNumberOfVertices];
1487 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
1489 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
1490 if(!aodvertex) continue;
1491 if(aodvertex->GetType()==AliAODVertex::kKink)
1493 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
1494 if(!mother1) continue;
1495 Int_t idmother = mother1->GetID();
1496 fListOfmotherkink[fNumberOfMotherkink] = idmother;
1497 fNumberOfMotherkink++;
1508 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
1509 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1510 TString vtxTtl = trkVtx->GetTitle();
1511 if(!vtxTtl.Contains("VertexerTracks")) return;
1512 Float_t zvtx = -100;
1513 zvtx=trkVtx->GetZ();
1516 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
1517 if(spdVtx->GetNContributors()<=0) return;
1518 TString vtxTyp = spdVtx->GetTitle();
1519 Double_t cov[6]={0};
1520 spdVtx->GetCovarianceMatrix(cov);
1521 Double_t zRes = TMath::Sqrt(cov[5]);
1522 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1523 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1524 if(TMath::Abs(zvtx) > 10) return;
1527 //______________________________________________________________________
1528 //after vertex selection
1531 //______________________________________________________________________
1532 //EMCal Trigger Selection (Threshold selection)
1534 TString firedTrigger;
1535 TString TriggerEG1("EG1"); //takes trigger with name with EG1, ex: CEMC7EG1-B-NOPF-CENTNOTRD
1536 TString TriggerEG2("EG2");
1538 //TString TriggerEJE("EJE");
1540 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1541 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1543 //Bool_t IsEventEMCALL0=kTRUE;
1544 Bool_t IsEventEMCALL1=kFALSE;
1546 if(firedTrigger.Contains(TriggerEG1)){
1548 IsEventEMCALL1=kTRUE;
1550 if(firedTrigger.Contains(TriggerEG2)){
1552 IsEventEMCALL1=kTRUE;
1555 //if the flag is for a given threshold and it was not fired, return.
1558 if(!firedTrigger.Contains(TriggerEG1))return;
1559 if(firedTrigger.Contains(TriggerEG2)){
1568 if(!firedTrigger.Contains(TriggerEG2))return;
1569 if(firedTrigger.Contains(TriggerEG1)){
1577 //______________________________________________________________________
1578 //Testing if there is an overlap EGA and EJE
1581 if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2) ) && !firedTrigger.Contains(TriggerEJE))
1586 if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && !firedTrigger.Contains(TriggerEJE))
1591 if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
1596 if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
1605 //Only events with at least 2 tracks are accepted
1606 Int_t fNOtrks = fVevent->GetNumberOfTracks();
1607 if(fNOtrks<2) return;
1612 Int_t fNOtrks2 = fAOD->GetNumberOfTracks();
1613 if(fNOtrks2<2) return;
1617 //______________________________________________________________________
1618 //new track loop to select events
1619 //track pt cut (at least 2)
1623 double fTrackMulti=0;
1624 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1626 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1627 if (!Vtrack) continue;
1629 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1630 //AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1632 if((track->Pt())<0.2 || (track->Pt())>1000.0) continue;
1633 else fTrackMulti=fTrackMulti+1;
1636 //Only take event if track multiplicity is bigger than 2.
1637 if(fTrackMulti<2) return;
1641 //______________________________________________________________________
1642 //Using more cuts than I have beeing using
1643 //eta cut and primary (at least 2)
1646 double fTrackMulti2=0;
1647 for(Int_t i = 0; i < fVevent->GetNumberOfTracks(); i++)
1649 AliVParticle* Vtrack2 = fVevent->GetTrack(i);
1650 if (!Vtrack2) continue;
1653 AliVTrack *track_new = dynamic_cast<AliVTrack*>(Vtrack2);
1654 AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(Vtrack2);
1661 if(TMath::Abs(track_new->Eta())> 0.9) continue;
1662 if (aodtrack->GetType()!= AliAODTrack::kPrimary) continue ;
1663 else fTrackMulti2=fTrackMulti2+1;
1666 //Only take event if track multiplicity is bigger than 2.
1667 if(fTrackMulti2<2) return;
1673 //______________________________________________________________________
1674 //Using more cuts than I have beeing using
1675 //hybrid (at least2)
1678 double fTrackMulti3=0;
1679 for(Int_t i = 0; i < fVevent->GetNumberOfTracks(); i++)
1681 AliVParticle* Vtrack3 = fVevent->GetTrack(i);
1682 if (!Vtrack3) continue;
1684 //AliVTrack *track_new = dynamic_cast<AliVTrack*>(Vtrack3);
1685 AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(Vtrack3);
1691 if (!aodtrack->IsHybridGlobalConstrainedGlobal()) continue ;
1692 //another option if I don't want to use hybrid
1693 //if ( aodtrack->TestFilterBit(128)==kFALSE) continue ;
1694 else fTrackMulti3=fTrackMulti3+1;
1697 //Only take event if track multiplicity is bigger than 2.
1698 if(fTrackMulti3<2) return;
1703 //______________________________________________________________________
1708 double fTrackMulti4=0;
1709 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1711 AliVParticle* Vtrack4 = fVevent->GetTrack(iTracks);
1712 if (!Vtrack4) continue;
1715 //AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack4);
1716 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack4);
1718 if(!atrack->TestFilterBit(768)) continue;
1719 if(!atrack->IsHybridGlobalConstrainedGlobal()) continue ;
1722 else fTrackMulti4=fTrackMulti4+1;
1725 //Only take event if track multiplicity is bigger than 2.
1726 if(fTrackMulti4<2) return;
1727 fTrack_Multi->Fill(fTrackMulti4);
1731 //______________________________________________________________________
1734 //______________________________________________________________________
1735 //Centrality Selection
1736 if(fHasCentralitySelection)
1738 Float_t centrality = -1;
1742 fCentrality = fAOD->GetHeader()->GetCentralityP();
1746 fCentrality = fESD->GetCentrality();
1749 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
1750 else centrality = fCentrality->GetCentralityPercentile("V0A");
1752 //cout << "Centrality = " << centrality << " %" << endl;
1754 fCentralityHist->Fill(centrality);
1756 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
1758 fCentralityHistPass->Fill(centrality);
1760 //______________________________________________________________________
1765 //______________________________________________________________________
1771 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1775 AliError("Array of MC particles not found");
1779 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1783 AliError("Could not find MC Header in AOD");
1787 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1789 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1790 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1792 Int_t pdg = fMCparticle->GetPdgCode();
1794 //====================================================================
1795 //trying take pions spectra 27/May/2014
1796 //IsPrimary only take events from pythia
1797 //IsPhysicalPrimariee: (all prompt particles, including strong decay products plus weak decay product from heavy-flavor).
1798 //eta cut same as MinJung
1800 if(fMCparticle->Eta()>=-0.8 && fMCparticle->Eta()<=0.8)
1802 if(fMCparticle->IsPrimary()){
1804 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1805 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1806 //eta cut same as MinJung
1809 if(fMCparticle->IsPhysicalPrimary()){
1810 if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
1811 if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
1815 if(TMath::Abs(pdg)==111) fPtMCpi03->Fill(fMCparticle->Pt());
1816 if(TMath::Abs(pdg)==221) fPtMCeta3->Fill(fMCparticle->Pt());
1818 //====================================================================
1820 double proX = fMCparticle->Xv();
1821 double proY = fMCparticle->Yv();
1822 double proR = sqrt(pow(proX,2)+pow(proY,2));
1825 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1827 //to correct background
1828 if (TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0){
1829 Int_t mpdg = fMCparticleMother->GetPdgCode();
1831 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1834 fPtMCparticleAlle_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons, and not primary
1840 if (TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()){
1841 fPtMCparticleAlle_Primary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons primary
1844 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1847 fPtMCparticleAll_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all particles, and not primary
1848 if(fMCparticle->IsPhysicalPrimary())
1850 fPtMCparticleAll->Fill(fMCparticle->Pt());
1852 Bool_t MotherFound = FindMother(iMC);
1853 //Bool_t MotherFound = FindMother(track->GetLabel());
1857 //denominator for total efficiency and tracking
1858 //unfolding: denominator is pt_MC and numerator is pt_reco
1859 fPtMCparticleAllHfe1->Fill(fMCparticle->Pt());
1860 fEtaPhi_den->Fill(fMCparticle->Phi(),fMCparticle->Eta());
1863 } //denominator for total efficiency and tracking
1865 fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1878 //second loop over track, but only the primaries ones
1879 //only primary pions --> how to take the primaries ones in AOD?
1881 for(Int_t iMC = 0; iMC < fMCarray->GetNPrimary(); iMC++){
1882 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1883 pdg = fMCparticle->GetPdgCode();
1885 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1886 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1888 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax)
1891 if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
1892 if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
1902 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1903 if (!fEventHandler) {
1904 Printf("ERROR: Could not retrieve MC event handler");
1908 fMCevent = fEventHandler->MCEvent();
1910 Printf("ERROR: Could not retrieve MC event");
1914 fMCstack = fMCevent->Stack();
1916 //pion and eta spectrum
1919 //----------------------------------------------------------------------------------------------------
1920 AliVParticle *mctrack2 = NULL;
1921 AliMCParticle *mctrack0 = NULL;
1924 for(Int_t imc = 0; imc <fMCEvent->GetNumberOfPrimaries(); imc++){
1925 if(!(mctrack2 = fMCEvent->GetTrack(imc))) continue;
1926 TParticle* mcpart0 = fMCEvent->Stack()->Particle(imc);
1927 if(!mcpart0) continue;
1928 mctrack0 = dynamic_cast<AliMCParticle *>(mctrack2);
1929 if(!mctrack0) continue;
1931 if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8){
1933 if(TMath::Abs(mctrack0->PdgCode()) == 111) // pi0
1935 fPtMCpi0->Fill(mctrack0->Pt());
1938 if(TMath::Abs(mctrack0->PdgCode()) == 221) // eta
1940 fPtMCeta->Fill(mctrack0->Pt());
1947 //----------------------------------------------------------------------------------------------------
1950 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1953 fMCtrack = fMCstack->Particle(iMC);
1954 if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1955 TParticle *particle=fMCstack->Particle(iMC);
1957 Int_t pdg = fMCtrack->GetPdgCode();
1960 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
1961 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCtrack->Pt());
1964 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1967 //to correct background
1968 if (TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0){
1969 Int_t mpdg = fMCtrackMother->GetPdgCode();
1970 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1971 Double_t proR=particle->R();
1973 fPtMCparticleAlle_nonPrimary->Fill(fMCtrack->Pt()); //denominator for total efficiency for all electrons, and not primary
1978 if(TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(iMC)){
1980 fPtMCparticleAlle_Primary->Fill(fMCtrack->Pt());
1983 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1985 fPtMCparticleAll_nonPrimary->Fill(fMCtrack->Pt());//denominator for total efficiency for all particle, non Primary track
1987 if(fMCstack->IsPhysicalPrimary(iMC))
1989 fPtMCparticleAll->Fill(fMCtrack->Pt());
1991 Bool_t MotherFound = FindMother(iMC);
1992 //Bool_t MotherFound = FindMother(track->GetLabel());
1996 fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency and tracking
1997 fEtaPhi_den->Fill(fMCtrack->Phi(),fMCtrack->Eta());
2000 fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
2003 }//Is Physical primary
2010 //______________________________________________________________________
2011 //threshold selection was here
2012 //______________________________________________________________________
2013 //all events selected
2018 //______________________________________________________________________
2019 //events in the threshold
2021 if(firedTrigger.Contains(TriggerEG1))
2025 if(!firedTrigger.Contains(TriggerEG2)) fNevent->Fill(19);
2026 //if(firedTrigger.Contains(TriggerEG2)) return;
2032 if(firedTrigger.Contains(TriggerEG2))
2036 if(!firedTrigger.Contains(TriggerEG1)) fNevent->Fill(21);
2037 //if(firedTrigger.Contains(TriggerEG1)) return;
2043 //New cluster information
2044 //after trigger threshold selection
2045 Int_t ClsNo2 = -999;
2046 ClsNo2 = fVevent->GetNumberOfCaloClusters();
2047 fNCluster_pure->Fill(ClsNo2);
2052 fNevent->Fill(22); //events with no cluster
2056 //in order to include time cut
2057 //fEMCALCells = fAOD->GetEMCALCells();
2058 //Double_t tof = clus->GetTOF();
2060 //if ( clus->E() < minE ) continue ;
2064 if(fUseTrigger && fIsAOD){
2066 //AliAODHeader * aodh = fAOD->GetHeader();
2067 //Int_t bc= aodh->GetBunchCrossNumber();
2070 Int_t ClsNo_aod = -999;
2071 ClsNo_aod = fAOD->GetNumberOfCaloClusters();
2072 fNCluster_pure_aod->Fill(ClsNo_aod);
2073 //Bool_t exotic=kTRUE;
2075 for (Int_t i=0; i< ClsNo_aod; i++ ){
2077 //fClus = fVevent->GetCaloCluster(i);
2078 //to be compatible with Shingo
2079 AliVCluster *clust = 0x0;
2080 clust = (AliVCluster*) fAOD->GetCaloCluster(i);
2082 if(clust && clust->IsEMCAL())
2084 //pure cluster information
2085 fECluster_pure->Fill(clust->E());
2087 fNcells_energy->Fill(clust->GetNCells(),clust->E());
2088 fNCluster_ECluster->Fill(ClsNo_aod,clust->E());
2090 if(clust->E()>1000) fNevent->Fill(23);
2094 exotic = fEMCALRecoUtils->IsExoticCluster(clust, (AliVCaloCells*)fAOD->GetEMCALCells(), bc);
2095 if(exotic == kFALSE){
2096 fECluster_not_exotic->Fill(clust->E());
2097 fNcells_energy_not_exotic->Fill(clust->GetNCells(),clust->E());
2101 //approximation to remove exotics
2102 if(clust->GetNCells()<5 && clust->E()>15.0){
2103 fECluster_exotic->Fill(clust->E());
2106 else if((clust->GetNCells())> ((clust->E())/3+1)){
2107 fECluster_not_exotic1->Fill(clust->E());
2110 fECluster_not_exotic2->Fill(clust->E());
2116 //______________________________________________________________________
2117 //Trying to remove events with bad cells and find patches
2118 //First, I will try to count them
2119 //______________________________________________________________________
2121 if(clust && clust->IsEMCAL())
2123 Bool_t badchannel = ContainsBadChannel("EMCAL", clust->GetCellsAbsId(),clust->GetNCells() );
2124 printf("Contém bad channel? %d ", badchannel);
2125 if(badchannel)fNevent2->Fill(0);
2127 //trying to find patches
2128 TArrayI patches_found=GetTriggerPatches(IsEventEMCALL0, IsEventEMCALL1);
2129 printf("N patches %d, first %d, last %d\n",patches_found.GetSize(), patches_found.At(0), patches_found.At(patches_found.GetSize()-1));
2134 //______________________________________________________________________
2141 fNevent->Fill(24); //events with cluster
2144 fVtxZ_new4->Fill(fZvtx);
2148 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
2149 else ClsNo = fAOD->GetNumberOfCaloClusters();
2151 //______________________________________________________________________
2153 ///_____________________________________________________________________
2155 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2157 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
2160 printf("ERROR: Could not receive track %d\n", iTracks);
2164 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
2165 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
2166 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
2169 Double_t fTPCnSigma = -999;
2170 Double_t fTOFnSigma = -999;
2171 Double_t fTPCnSigma_pion = -999;
2172 Double_t fTPCnSigma_proton = -999;
2173 Double_t fTPCnSigma_kaon = -999;
2174 Double_t fTPCsignal = -999;
2175 Double_t fPt = -999;
2179 //Etacut test on the begging
2180 fEtad[0]->Fill(track->Eta());
2181 //if(track->Eta()<fEtaCutMin || track->Eta()>fEtaCutMax) continue;
2182 fEtad[1]->Fill(track->Eta());
2187 ///_____________________________________________________________________________
2188 ///Fill QA plots without track selection
2190 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
2192 fTPCsignal = track->GetTPCsignal();
2193 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
2194 fTOFnSigma = fPidResponse->NumberOfSigmasTOF(track, AliPID::kElectron);
2195 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
2196 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
2197 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
2199 fTPC_p[0]->Fill(fPt,fTPCsignal);
2200 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
2203 Float_t TPCNcls = track->GetTPCNcls();
2205 Float_t TPCNcls_pid = track->GetTPCsignalN();
2209 Float_t pos[3]={0,0,0};
2211 Double_t fEMCflag = kFALSE;
2212 if(track->GetEMCALcluster()>0)
2214 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2215 if(fClus->IsEMCAL())
2218 //only for charged tracks
2219 fECluster[0]->Fill(fClus->E());
2222 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2225 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
2228 Float_t Energy = fClus->E();
2229 Float_t EoverP = Energy/track->P();
2230 //Float_t M02 = fClus->GetM02();
2231 //Float_t M20 = fClus->GetM20();
2233 /////////////// for Eta Phi distribution
2234 fClus->GetPosition(pos);
2235 TVector3 vpos(pos[0],pos[1],pos[2]);
2236 Double_t cphi = vpos.Phi();
2237 Double_t ceta = vpos.Eta();
2238 fEtaPhi[0]->Fill(cphi,ceta);
2241 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
2246 //______________________________________________________________
2249 fVtxZ[0]->Fill(fZvtx);
2250 if(iTracks == 0)fNTracks[0]->Fill(fNOtrks);
2251 fNTracks_pt[0]->Fill(fNOtrks, fPt);
2252 fNTracks_eta[0]->Fill(fNOtrks, track->Eta());
2253 fNTracks_phi[0]->Fill(fNOtrks, track->Phi());
2256 fNClusters[0]->Fill(ClsNo);
2257 fTPCNcls_pid[0]->Fill(TPCNcls, TPCNcls_pid);
2258 //______________________________________________________________
2260 ///Fill QA plots without track selection
2261 ///_____________________________________________________________________________
2262 //______________________________________________________________________________________
2263 //Track Selection Cuts
2265 //AOD (Test Filter Bit)
2268 // standard cuts with very loose DCA - BIT(4)
2271 GetStandardITSTPCTrackCuts2011(kFALSE)
2272 SetMaxChi2PerClusterTPC(4);
2273 SetAcceptKinkDaughters(kFALSE);
2274 SetRequireTPCRefit(kTRUE);
2275 SetRequireITSRefit(kTRUE);
2276 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
2277 SetMaxDCAToVertexZ(2);
2278 SetMaxDCAToVertex2D(kFALSE);
2279 SetRequireSigmaToVertex(kFALSE);
2280 SetMaxChi2PerClusterITS(36);
2281 SetMaxDCAToVertexXY(2.4)
2282 SetMaxDCAToVertexZ(3.2)
2283 SetDCaToVertex2D(kTRUE)
2286 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
2289 //RecKine: ITSTPC cuts
2290 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
2292 if(fRejectKinkMother)
2296 Bool_t kinkmotherpass = kTRUE;
2297 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
2299 if(track->GetID() == fListOfmotherkink[kinkmother])
2301 kinkmotherpass = kFALSE;
2305 if(!kinkmotherpass) continue;
2309 if(etrack->GetKinkIndex(0) != 0) continue;
2316 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
2319 //HFEcuts: ITS layers cuts
2320 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
2322 //HFE cuts: TPC PID cleanup
2323 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
2324 //______________________________________________________________________________________
2327 //AOD test -- Fancesco suggestion
2328 //aod test -- Francesco suggestion
2329 AliAODTrack *aod_track=fAOD->GetTrack(iTracks);
2331 Int_t type=aod_track->GetType();
2332 if(type==AliAODTrack::kPrimary) fPtPrim->Fill(aod_track->Pt());
2333 if(type==AliAODTrack::kSecondary) fPtSec->Fill(aod_track->Pt());
2335 //Int_t type2=track->GetType();
2336 if(type==AliAODTrack::kPrimary) fPtPrim2->Fill(track->Pt());
2337 if(type==AliAODTrack::kSecondary) fPtSec2->Fill(track->Pt());
2341 ///_____________________________________________________________
2342 ///QA plots after track selection
2345 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
2346 else fPtMCWithoutLabel->Fill(fPt);
2349 if(fIsMC && track->GetLabel()>=0)
2353 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2356 if(fMCparticle->IsPhysicalPrimary())
2358 fPtIsPhysicaPrimary->Fill(fPt);
2361 Int_t pdg = fMCparticle->GetPdgCode();
2362 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
2366 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2368 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
2370 if(fMCparticle->IsPhysicalPrimary())
2372 fPtMCparticleReco->Fill(fMCparticle->Pt());
2374 Bool_t MotherFound = FindMother(track->GetLabel());
2379 fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());//numerator tracking
2381 fpt_reco_pt_MC_den->Fill(track->Pt(),fMCparticle->Pt());
2385 fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
2400 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
2403 fMCtrack = fMCstack->Particle(track->GetLabel());
2404 Int_t pdg = fMCtrack->GetPdgCode();
2406 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2408 fPtMCparticleReco_nonPrimary->Fill(fMCtrack->Pt());//not Primary track
2412 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2414 fPtIsPhysicaPrimary->Fill(fPt);
2417 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2419 fPtMCparticleReco->Fill(fMCtrack->Pt());
2421 Bool_t MotherFound = FindMother(track->GetLabel());
2424 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());//numerator tracking
2425 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
2433 fTPC_p[1]->Fill(fPt,fTPCsignal);
2434 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
2435 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
2437 TPCNcls = track->GetTPCNcls();
2438 Float_t pos2[3]={0,0,0};
2440 if(track->GetEMCALcluster()>0)
2442 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2443 if(fClus->IsEMCAL())
2445 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2447 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
2449 Float_t Energy = fClus->E();
2450 Float_t EoverP = Energy/track->P();
2451 Float_t M02 = fClus->GetM02();
2452 Float_t M20 = fClus->GetM20();
2453 Float_t ncells = fClus->GetNCells();
2455 /////////////// for Eta Phi distribution
2456 fClus->GetPosition(pos2);
2457 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
2458 Double_t cphi = vpos.Phi();
2459 Double_t ceta = vpos.Eta();
2460 fEtaPhi[1]->Fill(cphi,ceta);
2462 fECluster[1]->Fill(Energy);
2463 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
2466 //for EMCal trigger performance
2468 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
2469 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
2474 //for hadron contamination calculations
2478 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2480 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
2482 if(fTPCnSigma<-3.5){
2483 fEoverP_pt_hadrons->Fill(fPt,EoverP);
2484 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
2487 //for systematic studies of hadron contamination
2488 if(fTPCnSigma < -4){
2489 fEoverP_pt_pions->Fill(fPt, EoverP);
2493 if(fTPCnSigma < -5){
2494 fEoverP_pt_pions2->Fill(fPt, EoverP);
2504 for(Int_t i = 0; i < 6; i++)
2506 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2509 if(fTPCnSigma < -5 && fTPCnSigma > -10){
2510 fNcells_hadrons[i]->Fill(ncells);
2512 //hadrons selection using E/p
2513 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
2514 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
2516 //electrons selection using E/p
2517 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
2518 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
2523 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
2525 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
2526 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
2530 if(fTPCnSigma < 3.5 && fCorrelationFlag)
2532 fPtTrigger_Inc->Fill(fPt);
2533 DiHadronCorrelation(track, iTracks);
2542 //______________________________________________________________
2545 fVtxZ[1]->Fill(fZvtx);
2546 if(iTracks == 0)fNTracks[1]->Fill(fNOtrks);
2547 fNTracks_pt[1]->Fill(fNOtrks, fPt);
2548 fNTracks_eta[1]->Fill(fNOtrks, track->Eta());
2549 fNTracks_phi[1]->Fill(fNOtrks, track->Phi());
2550 fNClusters[1]->Fill(ClsNo);
2551 fTPCNcls_pid[1]->Fill(TPCNcls, TPCNcls_pid);
2553 //______________________________________________________________
2555 ///______________________________________________________________________
2556 ///Histograms for PID Studies
2557 //Double_t fPtBin[6] = {2,4,6,8,10,15};
2559 for(Int_t i = 0; i < 6; i++)
2561 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2563 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2566 fTPC_pt[i]->Fill(fTPCsignal);
2567 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
2572 ///QA plots after track selection
2573 ///_____________________________________________________________
2575 //_______________________________________________________
2576 //Correlation Analysis - DiHadron
2579 if(fTPCnSigma < 3.5 && fCorrelationFlag)
2581 fPtTrigger_Inc->Fill(fPt);
2582 DiHadronCorrelation(track, iTracks);
2585 //_______________________________________________________
2588 ///////////////////////////////////////////////////////////////////
2589 ///TPC - efficiency calculation //
2591 /// changing start here
2592 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2594 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2595 Int_t pdg = fMCparticle->GetPdgCode();
2598 if(fMCparticle->IsPhysicalPrimary()){
2601 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2603 Bool_t MotherFound = FindMother(track->GetLabel());
2605 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2606 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2607 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
2614 else if(fIsMC && track->GetLabel()>=0)//ESD
2617 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2618 fMCtrack = fMCstack->Particle(track->GetLabel());
2620 Int_t pdg = fMCtrack->GetPdgCode();
2621 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2623 if(fMCtrack->GetFirstMother()>0){
2624 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2625 Bool_t MotherFound = FindMother(track->GetLabel());
2627 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2628 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
2637 if(fPt>1 && fPt<2) fTOF01->Fill(fTOFnSigma,fTPCnSigma);
2638 if(fPt>2 && fPt<4) fTOF02->Fill(fTOFnSigma,fTPCnSigma);
2639 if(fPt>4 && fPt<6) fTOF03->Fill(fTOFnSigma,fTPCnSigma);
2641 ///________________________________________________________________________
2643 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
2644 Int_t pidpassed = 1;
2645 AliHFEpidObject hfetrack;
2646 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
2647 hfetrack.SetRecTrack(track);
2648 hfetrack.SetPP(); //proton-proton analysis
2649 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
2650 fpid->Fill(pidpassed);
2652 if(pidpassed==0) continue;
2653 ///________________________________________________________________________
2656 ////////////////////////////////////////////////////////////////////
2657 ///TPC efficiency calculations
2660 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2662 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2663 Int_t pdg = fMCparticle->GetPdgCode();
2666 if(fMCparticle->IsPhysicalPrimary()){
2669 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2671 Bool_t MotherFound = FindMother(track->GetLabel());
2673 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2674 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2675 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
2682 else if(fIsMC && track->GetLabel()>=0)//ESD
2685 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2686 fMCtrack = fMCstack->Particle(track->GetLabel());
2688 Int_t pdg = fMCtrack->GetPdgCode();
2689 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2691 if(fMCtrack->GetFirstMother()>0){
2692 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2693 Bool_t MotherFound = FindMother(track->GetLabel());
2695 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2696 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
2704 //Eta Cut for TPC only
2705 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2706 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
2709 //Background for TPC only
2710 if(fFillBackground){
2712 //efficiency without SS cut for TPC only
2713 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
2714 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
2715 } //Eta cut to be consistent with other efficiency
2719 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
2720 fTPC_p[2]->Fill(fP,fTPCsignal);
2721 TPCNcls = track->GetTPCNcls();
2722 Float_t pos3[3]={0,0,0};
2725 //here denominator for track-matching efficiency
2726 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2728 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2729 Int_t pdg = fMCparticle->GetPdgCode();
2732 if(fMCparticle->IsPhysicalPrimary()){
2735 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2737 Bool_t MotherFound = FindMother(track->GetLabel());
2739 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2740 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2741 if(fIsHFE1) fPt_track_match_den->Fill(fMCparticle->Pt());
2749 if(track->GetEMCALcluster()>0)
2751 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2752 if(fClus->IsEMCAL())
2755 //________________________________________________________________________
2758 //Cluster timing distribution -- for ESD
2759 if(fUseEMCal && !fIsAOD){
2761 AliESDCaloCells &cells_esd=*(fESD->GetEMCALCells());
2762 TRefArray* caloClusters_esd = new TRefArray();
2763 fESD->GetEMCALClusters(caloClusters_esd);
2764 Int_t nclus_esd = caloClusters_esd->GetEntries();
2767 for (Int_t icl = 0; icl < nclus_esd; icl++) {
2769 AliESDCaloCluster* clus_esd = (AliESDCaloCluster*)caloClusters_esd->At(icl);
2771 if(clus_esd->IsEMCAL()){
2772 Float_t ncells_esd = fClus->GetNCells();
2773 UShort_t * index_esd = clus_esd->GetCellsAbsId() ;
2774 UShort_t * index2_esd = fClus->GetCellsAbsId() ;
2777 for(Int_t i = 0; i < ncells_esd ; i++){
2779 Int_t absId_esd = index_esd[i];
2780 fTime->Fill(fPt,cells_esd.GetCellTime(absId_esd));
2782 Int_t absId2_esd = index2_esd[i];
2783 fTime2->Fill(fPt,cells_esd.GetCellTime(absId2_esd));
2791 //Cluster timing distribution -- for AOD
2792 if(fUseEMCal && fIsAOD){
2794 AliAODCaloCells &cells_aod=*(fAOD->GetEMCALCells());
2796 TRefArray* caloClusters_aod = new TRefArray();
2797 fAOD->GetEMCALClusters(caloClusters_aod);
2799 Int_t nclus_aod = caloClusters_aod->GetEntries();
2801 for (Int_t icl = 0; icl < nclus_aod; icl++) {
2803 AliAODCaloCluster* clus_aod = (AliAODCaloCluster*)caloClusters_aod->At(icl);
2806 if(clus_aod->IsEMCAL()){
2807 Float_t ncells_aod = fClus->GetNCells();
2808 UShort_t * index_aod = clus_aod->GetCellsAbsId() ;
2809 UShort_t * index2_aod = fClus->GetCellsAbsId() ;
2812 for(Int_t i = 0; i < ncells_aod ; i++){
2814 Int_t absId_aod = index_aod[i];
2815 fTime->Fill(fPt,cells_aod.GetCellTime(absId_aod));
2817 Int_t absId2_aod = index2_aod[i];
2818 fTime2->Fill(fPt,cells_aod.GetCellTime(absId2_aod));
2829 double emctof = fClus->GetTOF();
2830 ftimingEle->Fill(fPt,emctof);
2832 //________________________________________________________________________
2838 Double_t Dx = fClus->GetTrackDx();
2839 Double_t Dz = fClus->GetTrackDz();
2840 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
2842 for(Int_t i = 0; i < 6; i++)
2844 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2853 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2855 Float_t Energy = fClus->E();
2856 Float_t EoverP = Energy/track->P();
2857 Float_t M02 = fClus->GetM02();
2858 Float_t M20 = fClus->GetM20();
2859 Float_t ncells = fClus->GetNCells();
2861 //here numerator for track-matching efficiency
2862 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2864 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2865 Int_t pdg = fMCparticle->GetPdgCode();
2868 if(fMCparticle->IsPhysicalPrimary()){
2871 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2873 Bool_t MotherFound = FindMother(track->GetLabel());
2875 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2876 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2877 if(fIsHFE1) fPt_track_match_num->Fill(fMCparticle->Pt());
2886 //----------------------------------------------------------------------------------------
2888 //EtaCut electrons histogram
2890 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2892 if(fUseShowerShapeCut){
2893 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
2894 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2895 fShowerShapeCut->Fill(M02,M20);
2896 //in order to check if there are exotic cluster in this selected cluster (27 may 2014)
2897 fNcells_energy_elec_selected->Fill(ncells,Energy);
2902 if(!fUseShowerShapeCut){
2903 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2904 fShowerShapeCut->Fill(M02,M20);
2905 fNcells_energy_elec_selected->Fill(ncells,Energy);
2909 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
2911 //for shower shape cut studies - now with TPC PID Cut
2913 fShowerShapeM02_EoverP->Fill(M02,EoverP);
2914 fShowerShapeM20_EoverP->Fill(M20,EoverP);
2919 //----------------------------------------------------------------------------------------
2923 // for Eta Phi distribution
2924 fClus->GetPosition(pos3);
2925 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
2926 Double_t cphi = vpos.Phi();
2927 Double_t ceta = vpos.Eta();
2928 fEtaPhi[2]->Fill(cphi,ceta);
2932 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
2934 for(Int_t i = 0; i < 6; i++)
2936 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2939 fR_EoverP[i]->Fill(R, EoverP);
2940 fNcells[i]->Fill(ncells);
2941 fNcells_EoverP[i]->Fill(EoverP, ncells);
2942 fM02_EoverP[i]->Fill(M02,EoverP);
2943 fM20_EoverP[i]->Fill(M20,EoverP);
2944 fECluster_ptbins[i]->Fill(Energy);
2945 fEoverP_ptbins[i]->Fill(EoverP);
2947 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
2948 fNcells_electrons[i]->Fill(ncells);
2951 if(M02<0.5 && M20<0.3) {
2952 fEoverP_wSSCut[i]->Fill(EoverP);
2957 fNcells_pt->Fill(fPt, ncells);
2960 ////////////////////////////////////////////////////////////////////
2961 ///EMCal - Efficiency calculations
2964 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2966 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2967 Int_t pdg = fMCparticle->GetPdgCode();
2970 if(fMCparticle->IsPhysicalPrimary()){
2972 //Phi cut && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi()
2973 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2975 Bool_t MotherFound = FindMother(track->GetLabel());
2977 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2978 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2979 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCparticle->Pt());
2986 else if(fIsMC && track->GetLabel()>=0)//ESD
2989 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2992 fMCtrack = fMCstack->Particle(track->GetLabel());
2994 Int_t pdg = fMCtrack->GetPdgCode();
2995 //Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
2996 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax )
2998 Bool_t MotherFound = FindMother(track->GetLabel());
2999 //MotherFound included
3001 if(fMCtrack->GetFirstMother()>0){
3002 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3003 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
3004 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCtrack->Pt());
3012 //_______________________________________________________
3014 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
3018 fECluster[2]->Fill(Energy);
3019 fTPCNcls_pid[3]->Fill(TPCNcls, TPCNcls_pid);
3024 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
3025 fPtElec_Inc->Fill(fPt);
3026 //eta phi distribution for data
3027 fEtaPhi_data->Fill(track->Phi(),track->Eta());
3030 //Eta cut for background
3031 if(fFillBackground){
3032 fEtad[2]->Fill(track->Eta());
3034 //background for triggered data: trigger electron must have same cuts on shower shape 06/Jan/2014
3035 if(fUseShowerShapeCut){
3036 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3037 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
3038 Background(track, iTracks, Vtrack, kFALSE);
3043 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
3044 Background(track, iTracks, Vtrack, kFALSE);
3050 double emctof2 = fClus->GetTOF();
3051 ftimingEle2->Fill(fPt,emctof2);
3052 //Correlation Analysis
3053 if(fCorrelationFlag)
3055 ElectronHadronCorrelation(track, iTracks, Vtrack);
3058 //_______________________________________________________
3060 ////////////////////////////////////////////////////////////////////
3061 ///EMCal - efficiency calculations
3063 if(track->Charge()<0) fCharge_n->Fill(fPt);
3064 if(track->Charge()>0) fCharge_p->Fill(fPt);
3068 if(fIsMC && fIsAOD && track->GetLabel()>=0)//AOD
3070 if(track->Charge()<0) fCharge_n->Fill(fPt);
3071 if(track->Charge()>0) fCharge_p->Fill(fPt);
3073 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3074 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3075 Int_t pdg = fMCparticle->GetPdgCode();
3077 double proX = fMCparticle->Xv();
3078 double proY = fMCparticle->Yv();
3079 double proR = sqrt(pow(proX,2)+pow(proY,2));
3082 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi() ){
3084 if( TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0 ){
3085 Int_t mpdg = fMCparticleMother->GetPdgCode();
3086 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
3087 if(proR<7)fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
3090 if( TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCelectronAfterAll_Primary->Fill(fMCparticle->Pt());
3095 if(fMCparticle->IsPhysicalPrimary()){
3098 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3100 Bool_t MotherFound = FindMother(track->GetLabel());
3103 if(!fUseShowerShapeCut){
3105 //Unfolding pt_reco/pt_MC in the efficiency
3106 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
3107 fPtMCelectronAfterAll_unfolding->Fill(track->Pt());
3108 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
3110 //new histo to estimate how different is pt reco from pt MC
3111 fpt_reco_pt_MC_num->Fill(track->Pt(),fMCparticle->Pt());
3112 }//numerator for the total efficiency AOD
3114 //November 11 for efficiency of triggered data
3115 if(fUseShowerShapeCut){
3116 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3118 //Unfolding pt_reco/pt_MC in the efficiency
3119 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
3120 fPtMCelectronAfterAll_unfolding->Fill(track->Pt());
3121 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
3123 //new histo to estimate how different is pt reco from pt MC
3124 fpt_reco_pt_MC_num->Fill(track->Pt(),fMCparticle->Pt());
3125 }//numerator for the total efficiency AOD
3131 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3132 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3133 if(fIsHFE1)fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
3140 else if(fIsMC && track->GetLabel()>=0)//ESD
3142 if(track->Charge()<0) fCharge_n->Fill(fPt);
3143 if(track->Charge()>0) fCharge_p->Fill(fPt);
3145 fMCtrack = fMCstack->Particle(track->GetLabel());
3146 if(fMCtrack->GetFirstMother()>0)
3148 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3150 TParticle *particle=fMCstack->Particle(track->GetLabel());
3152 Int_t pdg = fMCtrack->GetPdgCode();
3155 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3157 if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 )
3159 Int_t mpdg = fMCtrackMother->GetPdgCode();
3160 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111)
3162 Double_t proR=particle->R();
3165 fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
3169 if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel()))
3171 fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
3175 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
3177 Bool_t MotherFound = FindMother(track->GetLabel());
3181 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3183 if(!fUseShowerShapeCut){
3185 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
3186 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
3189 //November 11 for efficiency of triggered data
3190 if(fUseShowerShapeCut){
3191 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3193 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
3194 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
3206 // Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
3207 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3209 //included MotherFound
3213 if(fMCtrack->GetFirstMother()>0){
3214 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3215 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
3217 if(fIsHFE1){fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());}
3224 ///////////////////////////////////////////////////////////////////
3232 //______________________________________________________________
3235 fVtxZ[2]->Fill(fZvtx);
3236 if(iTracks == 0)fNTracks[2]->Fill(fNOtrks);
3237 fNTracks_pt[2]->Fill(fNOtrks, fPt);
3238 fNTracks_eta[2]->Fill(fNOtrks, track->Eta());
3239 fNTracks_phi[2]->Fill(fNOtrks, track->Phi());
3240 fNClusters[2]->Fill(ClsNo);
3241 fTPCNcls_pid[2]->Fill(TPCNcls, TPCNcls_pid);
3243 //______________________________________________________________
3245 //_______________________________________________________
3246 //Correlation Analysis
3249 fPtElec_Inc->Fill(fPt);
3251 if(fCorrelationFlag)
3253 ElectronHadronCorrelation(track, iTracks, Vtrack);
3256 //_______________________________________________________
3258 ///________________________________________________________________________
3261 //__________________________________________________________________
3262 //Event Mixing Analysis
3264 if(fEventMixingFlag)
3266 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
3268 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
3270 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!
3275 //__________________________________________________________________
3277 delete fListOfmotherkink;
3278 PostData(1, fOutputList);
3281 //______________________________________________________________________
3282 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
3284 //Draw result to the screen
3285 //Called once at the end of the query
3287 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
3291 printf("ERROR: Output list not available\n");
3296 //______________________________________________________________________
3297 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
3299 //Check single track cuts for a given cut step
3300 //Note this function is called inside the UserExec function
3301 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
3302 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
3307 //______________________________________________________________________
3310 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
3312 ///_________________________________________________________________
3314 //Bool_t IsMCefix=kFALSE; //to make correction on efix, use kTRUE (do not change the efficiency, so I will keep the correction only for d3)
3318 if(track->GetLabel() < 0)
3320 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
3326 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3328 if(fMCparticle->GetMother()<0) return;
3330 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3331 if(fMCparticleMother->GetMother()>0)fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
3333 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3336 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
3337 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
3340 //October 08th weighted histos
3341 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221 ){
3343 Double_t mPt=fMCparticleMother->Pt();
3347 //________________________________________________________________
3348 //correction for d3 based on data //from Jan
3350 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3353 mweight=CalculateWeight(111, x);
3357 //________________________________________________________________
3359 //Histo pT mother versus pT electron
3360 fpT_m_electron->Fill(mPt, track->Pt());
3362 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./mweight);
3363 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./mweight);
3365 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3367 Double_t gmPt=fMCparticleGMother->Pt();
3368 Double_t gmweight=1;
3370 //________________________________________________________________
3371 //correction for d3 based on data
3373 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3375 gmweight=CalculateWeight(111, x);
3379 //________________________________________________________________
3380 //Histo pT gmother versus pT electron
3382 fpT_gm_electron->Fill(gmPt, track->Pt());
3384 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./gmweight);
3385 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./gmweight);
3388 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt());
3389 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt());
3396 fMCtrack = fMCstack->Particle(track->GetLabel());
3398 if(fMCtrack->GetFirstMother()<0) return;
3400 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3402 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3405 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
3406 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
3411 ///_________________________________________________________________
3413 //________________________________________________
3414 //Associated particle cut
3415 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
3416 fPartnerCuts->SetRequireITSRefit(kTRUE);
3417 fPartnerCuts->SetRequireTPCRefit(kTRUE);
3418 fPartnerCuts->SetEtaRange(-0.9,0.9);
3419 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
3420 fPartnerCuts->SetMinNClustersTPC(80);
3421 fPartnerCuts->SetPtRange(0,1e10);
3422 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
3423 //fPartnerCuts->SetMaxDCAToVertexXY(1);
3424 //fPartnerCuts->SetMaxDCAToVertexZ(3);
3425 //_________________________________________________
3427 ///#################################################################
3428 //Non-HFE reconstruction
3429 fNonHFE = new AliSelectNonHFE();
3430 fNonHFE->SetAODanalysis(fIsAOD);
3431 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
3432 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
3433 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
3434 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
3435 fNonHFE->SetAlgorithm("DCA"); //KF
3436 fNonHFE->SetPIDresponse(fPidResponse);
3437 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
3438 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
3441 fNonHFE->SetHistAngleBack(fOpAngleBack);
3442 fNonHFE->SetHistAngle(fOpAngle);
3443 fNonHFE->SetHistDCABack(fDCABack);
3444 fNonHFE->SetHistDCA(fDCA);
3445 fNonHFE->SetHistMassBack(fInvMassBack);
3446 fNonHFE->SetHistMass(fInvMass);
3449 fNonHFE->SetHistAngleBack(fOpAngleBack2);
3450 fNonHFE->SetHistAngle(fOpAngle2);
3451 fNonHFE->SetHistDCABack(fDCABack2);
3452 fNonHFE->SetHistDCA(fDCA2);
3453 fNonHFE->SetHistMassBack(fInvMassBack2);
3454 fNonHFE->SetHistMass(fInvMass2);
3457 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
3459 //index of track selected as partner
3460 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
3462 //Electron Information
3463 Double_t fPhiE = -999;
3464 Double_t fEtaE = -999;
3465 Double_t fPtE = -999;
3466 fPhiE = track->Phi();
3467 fEtaE = track->Eta();
3470 ///_________________________________________________________________
3476 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3482 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3483 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3488 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3489 Double_t mPt=fMCparticleMother->Pt();
3490 Double_t mweight1=1;
3491 Double_t mweight2=1;
3492 //Double_t weight=1;
3495 //----------------------------------------------------------------------------
3496 //correction based on data only for pi0
3497 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3499 weight=CalculateWeight(111, x);
3503 //----------------------------------------------------------------------------
3506 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
3507 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
3510 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, mweight1);
3511 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, mweight2);
3513 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3514 Double_t gmPt=fMCparticleGMother->Pt();
3515 Double_t gmweight1=1;
3516 Double_t gmweight2=1;
3517 //Double_t weight=1;
3519 //----------------------------------------------------------------------------
3521 //----------------------------------------------------------------------------
3523 //correction based on data only for pi0
3525 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3527 weight=CalculateWeight(111, x);
3535 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
3536 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
3539 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, gmweight1);
3540 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, gmweight2);
3543 if(fNonHFE->IsULS()) fPtElec_ULS_weight->Fill(fPtE,fNonHFE->GetNULS());
3544 if(fNonHFE->IsLS()) fPtElec_LS_weight->Fill(fPtE,fNonHFE->GetNLS());
3551 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
3552 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
3554 //new 08 October //weighted histograms
3555 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3556 Double_t mPt=fMCparticleMother->Pt();
3558 Double_t mweight1=1;
3559 Double_t mweight2=1;
3560 //Double_t weight=1;
3563 //----------------------------------------------------------------------------
3565 //correction based on data only for pi0 for d3
3567 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3569 weight=CalculateWeight(111, x);
3575 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
3576 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
3579 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, mweight1);
3580 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, mweight2);
3582 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3583 Double_t gmPt=fMCparticleGMother->Pt();
3584 Double_t gmweight1=1;
3585 Double_t gmweight2=1;
3586 //Double_t weight=1;
3589 //----------------------------------------------------------------------------
3590 //correction based on data only for pi0
3592 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3595 weight=CalculateWeight(111, x);
3599 //----------------------------------------------------------------------------
3604 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
3605 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
3608 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, gmweight1);
3609 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, gmweight2);
3612 if(fNonHFE->IsULS()) fPtElec_ULS2_weight->Fill(fPtE,fNonHFE->GetNULS());
3613 if(fNonHFE->IsLS()) fPtElec_LS2_weight->Fill(fPtE,fNonHFE->GetNLS());
3617 //----------------------------------------------------------------------------
3618 //to check other way to calculate efficiency
3619 //ULS with no weight from ULS-LS original
3620 //we have to know if track2 comes from same mother!!!
3621 //----------------------------------------------------------------------------
3622 if(fNonHFE->IsULS()){
3624 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3627 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3630 printf("ERROR: Could not receive track %d\n", iTracks);
3633 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3634 if(track2->GetLabel()<0) continue;
3635 fMCparticle2 = (AliAODMCParticle*) fMCarray->At(track2->GetLabel());
3636 if(fMCparticle2->GetMother()<0) continue;
3638 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
3640 if(fUlsPartner[i]==iTracks){
3641 //only fill if it has same mother
3642 //with weight to take into account the number of partners
3643 if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC->Fill(fPtE, fNonHFE->GetNULS());
3645 //-----------------------------------------------------------------------------------------------------------
3647 //Double_t weight2=1;
3648 Double_t mPt=fMCparticleMother->Pt();
3651 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3653 weight=CalculateWeight(111, x);
3658 //weight for grandmother
3659 Double_t gmPt=fMCparticleGMother->Pt();
3660 if(TMath::Abs((fMCparticleMother->GetMother()>0) && ((fMCparticleGMother->GetPdgCode())==111))){
3662 weight=CalculateWeight(111, x);
3667 if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC_weight->Fill(fPtE, (fNonHFE->GetNULS())*1./weight);
3669 //-----------------------------------------------------------------------------------------------------------
3672 }//partner found same as track
3673 }//loop in all partner
3677 //----------------------------------------------------------------------------
3678 //end of part to check other way to calculate efficiency
3679 //----------------------------------------------------------------------------
3686 //ULS-LS with no pid AOD
3687 if(fNonHFE->IsULS()) fPtElec_ULS_NoPid->Fill(fPtE,fNonHFE->GetNULS());
3688 if(fNonHFE->IsLS()) fPtElec_LS_NoPid->Fill(fPtE,fNonHFE->GetNLS());
3695 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3698 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3699 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3703 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
3704 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
3711 ///_________________________________________________________________
3716 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3717 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3721 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
3722 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
3728 }//end of Background function
3730 //______________________________________________________________________
3731 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
3734 ///_________________________________________________________________
3738 if(track->GetLabel() < 0)
3740 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
3746 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3748 if(fMCparticle->GetMother()<0) return;
3750 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3752 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3755 fPtBackgroundBeforeReco->Fill(track->Pt());
3760 fMCtrack = fMCstack->Particle(track->GetLabel());
3762 if(fMCtrack->GetFirstMother()<0) return;
3764 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3766 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3769 fPtBackgroundBeforeReco->Fill(track->Pt());
3773 ///_________________________________________________________________
3775 //________________________________________________
3776 //Associated particle cut
3777 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
3778 fPartnerCuts->SetRequireITSRefit(kTRUE);
3779 fPartnerCuts->SetRequireTPCRefit(kTRUE);
3780 fPartnerCuts->SetEtaRange(-0.9,0.9);
3781 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
3782 fPartnerCuts->SetMinNClustersTPC(80);
3783 fPartnerCuts->SetPtRange(0.3,1e10);
3784 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
3785 //fPartnerCuts->SetMaxDCAToVertexXY(1);
3786 //fPartnerCuts->SetMaxDCAToVertexZ(3);
3787 //_________________________________________________
3789 ///#################################################################
3790 //Non-HFE reconstruction
3791 fNonHFE = new AliSelectNonHFE();
3792 fNonHFE->SetAODanalysis(fIsAOD);
3793 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
3794 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
3795 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
3796 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
3797 fNonHFE->SetAlgorithm("DCA"); //KF
3798 fNonHFE->SetPIDresponse(fPidResponse);
3799 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
3800 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
3803 fNonHFE->SetHistAngleBack(fOpAngleBack);
3804 fNonHFE->SetHistAngle(fOpAngle);
3805 fNonHFE->SetHistDCABack(fDCABack);
3806 fNonHFE->SetHistDCA(fDCA);
3807 fNonHFE->SetHistMassBack(fInvMassBack);
3808 fNonHFE->SetHistMass(fInvMass);
3810 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
3812 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
3813 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
3814 Bool_t fUlsIsPartner = kFALSE;
3815 Bool_t fLsIsPartner = kFALSE;
3816 ///#################################################################
3819 //Electron Information
3820 Double_t fPhiE = -999;
3821 Double_t fEtaE = -999;
3822 Double_t fPhiH = -999;
3823 Double_t fEtaH = -999;
3824 Double_t fDphi = -999;
3825 Double_t fDeta = -999;
3826 Double_t fPtE = -999;
3827 Double_t fPtH = -999;
3829 Double_t pi = TMath::Pi();
3831 fPhiE = track->Phi();
3832 fEtaE = track->Eta();
3836 ///_________________________________________________________________
3842 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3844 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3845 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3850 if(fNonHFE->IsULS()) fPtElec_ULS_NoPid->Fill(fPtE,fNonHFE->GetNULS());
3851 if(fNonHFE->IsLS()) fPtElec_LS_NoPid->Fill(fPtE,fNonHFE->GetNLS());
3855 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3857 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3858 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3865 ///_________________________________________________________________
3868 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3869 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3875 //__________________________________________________________________
3876 //Event Mixing Analysis - Hadron Loop
3878 if(fEventMixingFlag)
3880 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
3882 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
3884 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
3886 fPoolNevents->Fill(fPool->GetCurrentNEvents());
3888 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
3890 TObjArray* bgTracks = fPool->GetEvent(jMix);
3892 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
3894 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
3895 if (NULL == MixedTrack) continue;
3897 fPhiH = MixedTrack->Phi();
3898 fEtaH = MixedTrack->Eta();
3899 fPtH = MixedTrack->Pt();
3901 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
3903 fDphi = fPhiE - fPhiH;
3905 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
3906 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
3908 fDeta = fEtaE - fEtaH;
3910 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
3912 for(Int_t i = 0; i < 6; i++)
3914 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
3916 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
3918 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
3919 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
3921 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
3922 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
3926 // TODO your code: do event mixing with current event and bgTracks
3927 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
3932 //__________________________________________________________________
3934 //__________________________________________________________________
3935 //Same Event Analysis - Hadron Loop
3936 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3938 if(trackIndex==iTracks) continue;
3940 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3943 printf("ERROR: Could not receive track %d\n", iTracks);
3947 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3949 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
3953 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
3954 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
3955 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
3956 if(atrack2->GetTPCNcls() < 80) continue;
3957 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
3961 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
3962 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
3965 fPhiH = track2->Phi();
3966 fEtaH = track2->Eta();
3967 fPtH = track2->Pt();
3969 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
3971 fDphi = fPhiE - fPhiH;
3973 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
3974 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
3976 fDeta = fEtaE - fEtaH;
3978 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
3980 //______________________________________________________________
3981 //Check if this track is a Non-HFE partner
3982 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
3984 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
3986 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
3988 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
3990 //______________________________________________________________
3992 for(Int_t i = 0; i < 6; i++)
3994 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
3996 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
3998 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
3999 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
4000 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
4001 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
4003 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4004 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4005 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4006 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4012 //____________________________________________________________________________________________________________
4013 //Create a TObjArray with selected hadrons, for the mixed event analysis
4014 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
4016 fTracksClone = new TObjArray;
4017 fTracksClone->SetOwner(kTRUE);
4019 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4021 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4024 printf("ERROR: Could not receive track %d\n", iTracks);
4028 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4030 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4034 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4035 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4036 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4037 if(atrack2->GetTPCNcls() < 80) continue;
4038 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4042 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4043 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4046 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
4048 return fTracksClone;
4050 //____________________________________________________________________________________________________________
4052 //______________________________________________________________________
4053 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
4055 //________________________________________________
4056 //Associated particle cut
4057 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
4058 fPartnerCuts->SetRequireITSRefit(kTRUE);
4059 fPartnerCuts->SetRequireTPCRefit(kTRUE);
4060 fPartnerCuts->SetEtaRange(-0.9,0.9);
4061 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
4062 fPartnerCuts->SetMinNClustersTPC(80);
4063 fPartnerCuts->SetPtRange(0.3,1e10);
4064 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
4065 //fPartnerCuts->SetMaxDCAToVertexXY(1);
4066 //fPartnerCuts->SetMaxDCAToVertexZ(3);
4067 //_________________________________________________
4069 //Electron Information
4070 Double_t fPhiE = -999;
4071 Double_t fEtaE = -999;
4072 Double_t fPhiH = -999;
4073 Double_t fEtaH = -999;
4074 Double_t fDphi = -999;
4075 Double_t fDeta = -999;
4076 Double_t fPtE = -999;
4077 Double_t fPtH = -999;
4079 Double_t pi = TMath::Pi();
4081 fPhiE = track->Phi();
4082 fEtaE = track->Eta();
4085 //__________________________________________________________________
4086 //Same Event Analysis - Hadron Loop
4087 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4089 if(trackIndex==iTracks) continue;
4091 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4094 printf("ERROR: Could not receive track %d\n", iTracks);
4098 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4099 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4103 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4104 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4105 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4106 if(atrack2->GetTPCNcls() < 80) continue;
4107 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4111 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4112 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4115 fPhiH = track2->Phi();
4116 fEtaH = track2->Eta();
4117 fPtH = track2->Pt();
4119 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4121 fDphi = fPhiE - fPhiH;
4123 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4124 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4126 fDeta = fEtaE - fEtaH;
4128 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4130 for(Int_t i = 0; i < 6; i++)
4132 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4134 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
4139 //____________________________________________________________________________________________________________
4141 //______________________________________________________________________
4142 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
4149 fIsFromPi0 = kFALSE;
4150 fIsFromEta = kFALSE;
4151 fIsFromGamma = kFALSE;
4153 if(mcIndex < 0 || !fIsMC)
4159 Int_t mpdg = -99999;
4160 Int_t gmpdg = -99999;
4161 Int_t ggmpdg = -99999;
4162 Int_t gggmpdg = -99999;
4166 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
4168 pdg = TMath::Abs(fMCparticle->GetPdgCode());
4178 fIsFromPi0 = kFALSE;
4179 fIsFromEta = kFALSE;
4180 fIsFromGamma = kFALSE;
4184 if(fMCparticle->GetMother()<0)
4191 fIsFromPi0 = kFALSE;
4192 fIsFromEta = kFALSE;
4193 fIsFromGamma = kFALSE;
4197 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
4198 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
4200 if(fMCparticleMother->GetMother()<0)
4208 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
4209 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
4210 if(fMCparticleGMother->GetMother()<0)
4217 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
4218 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
4219 if(fMCparticleGGMother->GetMother()<0)
4225 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
4226 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
4233 fMCtrack = fMCstack->Particle(mcIndex);
4235 pdg = TMath::Abs(fMCtrack->GetPdgCode());
4244 fIsFromPi0 = kFALSE;
4245 fIsFromEta = kFALSE;
4246 fIsFromGamma = kFALSE;
4250 if(fMCtrack->GetFirstMother()<0)
4257 fIsFromPi0 = kFALSE;
4258 fIsFromEta = kFALSE;
4259 fIsFromGamma = kFALSE;
4263 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
4264 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
4266 if(fMCtrackMother->GetFirstMother()<0)
4274 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
4275 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
4277 if(fMCtrackGMother->GetFirstMother()<0)
4284 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
4285 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
4287 if(fMCtrackGGMother->GetFirstMother()<0)
4293 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
4294 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
4300 //Tag Electron Source
4301 if(mpdg==111 || mpdg==221 || mpdg==22)
4309 fIsFromPi0 = kFALSE;
4310 fIsFromEta = kFALSE;
4311 fIsFromGamma = kFALSE;
4313 if(mpdg==111) fIsFromPi0 = kFALSE;
4314 if(mpdg==221)fIsFromEta = kFALSE;
4315 if(mpdg==22) fIsFromGamma = kFALSE;
4324 fIsFromPi0 = kFALSE;
4325 fIsFromEta = kFALSE;
4326 fIsFromGamma = kFALSE;
4333 if(mpdg>400 && mpdg<500)
4335 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
4350 else if(mpdg>500 && mpdg<600)
4367 Bool_t AliAnalysisTaskEMCalHFEpA::ContainsBadChannel(TString calorimeter,UShort_t* cellList, Int_t nCells)
4369 // Check that in the cluster cells, there is no bad channel of those stored
4370 // in fEMCALBadChannelMap
4371 // adapted from AliCalorimeterUtils
4373 //if (!fRemoveBadChannels) return kFALSE;
4374 //printf("fEMCALBadChannelMap %p, fPHOSBadChannelMap %p \n",fEMCALBadChannelMap,fPHOSBadChannelMap);
4375 if( !fEMCALRecoUtils->GetEMCALChannelStatusMap(0)) return kFALSE;
4380 for(Int_t iCell = 0; iCell<nCells; iCell++){
4382 //Get the column and row
4383 if(calorimeter == "EMCAL"){
4384 return fEMCALRecoUtils->ClusterContainsBadChannel((AliEMCALGeometry*)fEMCALGeo,cellList,nCells);
4388 }// cell cluster loop
4396 //________________________________________________________________________________
4397 TArrayI AliAnalysisTaskEMCalHFEpA::GetTriggerPatches(Bool_t IsEventEMCALL0, Bool_t IsEventEMCALL1)
4399 // Select the patches that triggered
4400 // Depend on L0 or L1
4403 //Int_t trigtimes[30], globCol, globRow,ntimes, i;
4404 Int_t globCol, globRow;
4406 Int_t absId = -1; //[100];
4411 // get object pointer
4412 AliVCaloTrigger *caloTrigger = InputEvent()->GetCaloTrigger( "EMCAL" );
4414 // class is not empty
4415 if( caloTrigger->GetEntries() > 0 )
4417 // must reset before usage, or the class will fail
4418 caloTrigger->Reset();
4420 // go throuth the trigger channels
4421 while( caloTrigger->Next() )
4423 // get position in global 2x2 tower coordinates
4424 caloTrigger->GetPosition( globCol, globRow );
4433 else if(IsEventEMCALL1) // L1
4436 caloTrigger->GetTriggerBits(bit);
4438 Bool_t isEGA = ((bit >> fBitEGA) & 0x1);
4439 //Bool_t isEJE = ((bit >> fBitEJE) & 0x1) && IsEventEMCALL1Jet () ;
4441 if(!isEGA) continue;
4443 Int_t patchsize = -1;
4444 if(isEGA) patchsize = 2;
4445 //else if (isEJE) patchsize = 16;
4447 // add 2x2 (EGA) or 16x16 (EJE) patches
4448 for(Int_t irow=0; irow < patchsize; irow++)
4450 for(Int_t icol=0; icol < patchsize; icol++)
4452 GetCaloUtils()->GetEMCALGeometry()->GetAbsFastORIndexFromPositionInEMCAL(globCol+icol,globRow+irow, absId);
4453 //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absIDTrig[nTrig]);
4454 patches.Set(nPatch+1); // Set size of this array to nPatch+1 ints.
4455 patches.AddAt(absId,nPatch++); //Add Int_t absId at position nPatch++
4461 } // trigger iterator
4462 } // go thorough triggers
4464 printf("N patches %d, test %d,first %d, last %d\n",patches.GetSize(), nPatch, patches.At(0), patches.At(patches.GetSize()-1));
4469 Double_t AliAnalysisTaskEMCalHFEpA::CalculateWeight(Int_t pdg_particle, Double_t x)
4471 //weight for d3 based on MinJung parametrization //sent by Jan
4473 if(pdg_particle==111){
4474 if(x>= 0.100000 && x < 0.112797 ) weight=1.262120;
4475 if(x>= 0.112797 && x < 0.127231 ) weight=1.277765;
4476 if(x>= 0.127231 && x < 0.143512 ) weight=1.295605;
4477 if(x>= 0.143512 && x < 0.161877 ) weight=1.318155;
4478 if(x>= 0.161877 && x < 0.182592 ) weight=1.348693;
4479 if(x>= 0.182592 && x < 0.205957 ) weight=1.388636;
4480 if(x>= 0.205957 && x < 0.232313 ) weight=1.439122;
4481 if(x>= 0.232313 && x < 0.262041 ) weight=1.497452;
4482 if(x>= 0.262041 && x < 0.295573 ) weight=1.559409;
4483 if(x>= 0.295573 && x < 0.333397 ) weight=1.615169;
4484 if(x>= 0.333397 && x < 0.376060 ) weight=1.654954;
4485 if(x>= 0.376060 && x < 0.424183 ) weight=1.668753;
4486 if(x>= 0.424183 && x < 0.478465 ) weight=1.652225;
4487 if(x>= 0.478465 && x < 0.539692 ) weight=1.603119;
4488 if(x>= 0.539692 && x < 0.608754 ) weight=1.526049;
4489 if(x>= 0.608754 && x < 0.686654 ) weight=1.426724;
4490 if(x>= 0.686654 && x < 0.774523 ) weight=1.312684;
4491 if(x>= 0.774523 && x < 0.873636 ) weight=1.195395;
4492 if(x>= 0.873636 && x < 0.985432 ) weight=1.086264;
4493 if(x>= 0.985432 && x < 1.111534 ) weight=0.993666;
4494 if(x>= 1.111534 && x < 1.253773 ) weight=0.922587;
4495 if(x>= 1.253773 && x < 1.414214 ) weight=0.875739;
4496 if(x>= 1.414214 && x < 1.595185 ) weight=0.852181;
4497 if(x>= 1.595185 && x < 1.799315 ) weight=0.847828;
4498 if(x>= 1.799315 && x < 2.029567 ) weight=0.863875;
4499 if(x>= 2.029567 && x < 2.289283 ) weight=0.899112;
4500 if(x>= 2.289283 && x < 2.582235 ) weight=0.955194;
4501 if(x>= 2.582235 && x < 2.912674 ) weight=1.033824;
4502 if(x>= 2.912674 && x < 3.285398 ) weight=1.133714;
4503 if(x>= 3.285398 && x < 3.705818 ) weight=1.259471;
4504 if(x>= 3.705818 && x < 4.180038 ) weight=1.406883;
4505 if(x>= 4.180038 && x < 4.714942 ) weight=1.578923;
4506 if(x>= 4.714942 && x < 5.318296 ) weight=1.778513;
4507 if(x>= 5.318296 && x < 5.998859 ) weight=2.001171;
4508 if(x>= 5.998859 && x < 6.766511 ) weight=2.223161;
4509 if(x>= 6.766511 && x < 7.632396 ) weight=2.449445;
4510 if(x>= 7.632396 && x < 8.609086 ) weight=2.661734;
4511 if(x>= 8.609086 && x < 9.710759 ) weight=2.851935;
4512 if(x>= 9.710759 && x < 10.953409 ) weight=2.974319;
4513 if(x>= 10.953409 && x < 12.355077 ) weight=3.106314;
4514 if(x>= 12.355077 && x < 13.936111 ) weight=3.126815;
4515 if(x>= 13.936111 && x < 15.719464 ) weight=3.150053;
4516 if(x>= 15.719464 && x < 17.731026 ) weight=3.218509;
4517 if(x>= 17.731026 && x < 20.000000 ) weight=3.252141;
4520 else if(pdg_particle==221){