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: June 18, 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)
194 ,fEoverP_tpc_p_trigger(0)
195 ,fEoverP_tpc_pt_trigger(0)
201 ,fTPCnsigma_p_TPC_on_EMCal_acc(0)
202 ,fTPCnsigma_p_TPC_EoverP_cut(0)
205 ,fShowerShapeM02_EoverP(0)
206 ,fShowerShapeM20_EoverP(0)
213 ,fECluster_not_exotic(0)
214 ,fECluster_not_exotic1(0)
215 ,fECluster_not_exotic2(0)
218 ,fNCluster_pure_aod(0)
219 ,fNCluster_ECluster(0)
221 ,fNcells_energy_elec_selected(0)
222 ,fNcells_energy_not_exotic(0)
228 ,fpt_reco_pt_MC_num(0)
229 ,fpt_reco_pt_MC_den(0)
258 ,fNcells_electrons(0)
265 ,fTPCnsigma_eta_electrons(0)
266 ,fTPCnsigma_eta_hadrons(0)
269 ,fnsigma_p_EoverPcut(0)
270 ,fEoverP_pt_pions2(0)
272 ,fEoverP_pt_hadrons(0)
278 ,fCEtaPhi_ULS_Weight(0)
279 ,fCEtaPhi_LS_Weight(0)
280 ,fCEtaPhi_ULS_NoP_Weight(0)
281 ,fCEtaPhi_LS_NoP_Weight(0)
309 ,fAngleCutFlag(kFALSE)
310 ,fChi2CutFlag(kFALSE)
312 ,fAssHadronPtMin(0.5)
313 ,fAssHadronPtMax(2.0)
314 ,fPtBackgroundBeforeReco(0)
315 ,fPtBackgroundBeforeReco2(0)
316 ,fPtBackgroundBeforeReco_weight(0)
317 ,fPtBackgroundBeforeReco2_weight(0)
320 ,fPtBackgroundAfterReco(0)
324 ,fPtMCparticleAll_nonPrimary(0)
325 ,fPtMCparticleAlle_nonPrimary(0)
326 ,fPtMCparticleAlle_Primary(0)
327 ,fPtMCparticleReco(0)
328 ,fPtMCparticleReco_nonPrimary(0)
329 ,fPtMCparticleAllHfe1(0)
330 ,fPtMCparticleRecoHfe1(0)
331 ,fPtMCparticleAllHfe2(0)
332 ,fPtMCparticleRecoHfe2(0)
333 ,fPtMCelectronAfterAll(0)
334 ,fPtMCelectronAfterAll_unfolding(0)
335 ,fPtMCelectronAfterAll_nonPrimary(0)
336 ,fPtMCelectronAfterAll_Primary(0)
344 ,fPtMC_EMCal_Selected(0)
346 ,fPtMC_TPC_Selected(0)
347 ,fPt_track_match_den(0)
348 ,fPt_track_match_num(0)
350 ,fPtMCWithoutLabel(0)
351 ,fPtIsPhysicaPrimary(0)
355 ,fPID(new AliHFEpid("hfePid"))
359 ,fRejectKinkMother(kFALSE)
364 ,fMCtrackGGGMother(0)
369 ,fMCparticleMother(0)
370 ,fMCparticleGMother(0)
371 ,fMCparticleGGMother(0)
372 ,fMCparticleGGGMother(0)
382 ,fCEtaPhi_ULS_Weight_EM(0)
383 ,fCEtaPhi_LS_Weight_EM(0)
386 ,fCEtaPhi_Inc_DiHadron(0)
388 //,fEMCALRecoUtils(new AliEMCALRecoUtils)
393 //,fEMCALRecoUtils(0)//exotic
397 // Define input and output slots here
398 // Input slot #0 works with a TChain
401 //fEMCALRecoUtils = new AliEMCALRecoUtils();
403 DefineInput(0, TChain::Class());
404 // Output slot #0 id reserved by the base class for AOD
405 // Output slot #1 writes into a TH1 container
406 // DefineOutput(1, TH1I::Class());
407 DefineOutput(1, TList::Class());
408 // DefineOutput(3, TTree::Class());
411 //________________________________________________________________________
412 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
413 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
418 ,fUseShowerShapeCut(kFALSE)
419 ,fFillBackground(kFALSE)
420 ,fAssocWithSPD(kFALSE)
430 ,fIsFromGamma(kFALSE)
434 ,fPartnerCuts(new AliESDtrackCuts())
437 ,fNonHFE(new AliSelectNonHFE())
442 ,fHasCentralitySelection(kFALSE)
444 ,fCentralityHistPass(0)
464 ,fPtElec_ULS_NoPid(0)
467 ,fPtElec_ULS_MC_weight(0)
470 ,fPtElec_ULS_weight(0)
471 ,fPtElec_LS_weight(0)
472 ,fPtElec_ULS2_weight(0)
473 ,fPtElec_LS2_weight(0)
480 ,fEoverP_tpc_p_trigger(0)
481 ,fEoverP_tpc_pt_trigger(0)
487 ,fTPCnsigma_p_TPC_on_EMCal_acc(0)
488 ,fTPCnsigma_p_TPC_EoverP_cut(0)
491 ,fShowerShapeM02_EoverP(0)
492 ,fShowerShapeM20_EoverP(0)
499 ,fECluster_not_exotic(0)
500 ,fECluster_not_exotic1(0)
501 ,fECluster_not_exotic2(0)
504 ,fNCluster_pure_aod(0)
505 ,fNCluster_ECluster(0)
507 ,fNcells_energy_elec_selected(0)
508 ,fNcells_energy_not_exotic(0)
513 ,fpt_reco_pt_MC_num(0)
514 ,fpt_reco_pt_MC_den(0)
544 ,fNcells_electrons(0)
551 ,fTPCnsigma_eta_electrons(0)
552 ,fTPCnsigma_eta_hadrons(0)
555 ,fnsigma_p_EoverPcut(0)
556 ,fEoverP_pt_pions2(0)
558 ,fEoverP_pt_hadrons(0)
564 ,fCEtaPhi_ULS_Weight(0)
565 ,fCEtaPhi_LS_Weight(0)
566 ,fCEtaPhi_ULS_NoP_Weight(0)
567 ,fCEtaPhi_LS_NoP_Weight(0)
595 ,fAngleCutFlag(kFALSE)
596 ,fChi2CutFlag(kFALSE)
598 ,fAssHadronPtMin(0.5)
599 ,fAssHadronPtMax(2.0)
600 ,fPtBackgroundBeforeReco(0)
601 ,fPtBackgroundBeforeReco2(0)
602 ,fPtBackgroundBeforeReco_weight(0)
603 ,fPtBackgroundBeforeReco2_weight(0)
606 ,fPtBackgroundAfterReco(0)
610 ,fPtMCparticleAll_nonPrimary(0)
611 ,fPtMCparticleAlle_nonPrimary(0)
612 ,fPtMCparticleAlle_Primary(0)
613 ,fPtMCparticleReco(0)
614 ,fPtMCparticleReco_nonPrimary(0)
615 ,fPtMCparticleAllHfe1(0)
616 ,fPtMCparticleRecoHfe1(0)
617 ,fPtMCparticleAllHfe2(0)
618 ,fPtMCparticleRecoHfe2(0)
619 ,fPtMCelectronAfterAll(0)
620 ,fPtMCelectronAfterAll_unfolding(0)
621 ,fPtMCelectronAfterAll_nonPrimary(0)
622 ,fPtMCelectronAfterAll_Primary(0)
630 ,fPtMC_EMCal_Selected(0)
632 ,fPtMC_TPC_Selected(0)
633 ,fPt_track_match_den(0)
634 ,fPt_track_match_num(0)
636 ,fPtMCWithoutLabel(0)
637 ,fPtIsPhysicaPrimary(0)
642 ,fPID(new AliHFEpid("hfePid"))
645 ,fRejectKinkMother(kFALSE)
650 ,fMCtrackGGGMother(0)
655 ,fMCparticleMother(0)
656 ,fMCparticleGMother(0)
657 ,fMCparticleGGMother(0)
658 ,fMCparticleGGGMother(0)
668 ,fCEtaPhi_ULS_Weight_EM(0)
669 ,fCEtaPhi_LS_Weight_EM(0)
672 ,fCEtaPhi_Inc_DiHadron(0)
674 //,fEMCALRecoUtils(new AliEMCALRecoUtils)
678 //,fEMCALRecoUtils(0)//exotic
681 // Define input and output slots here
682 // Input slot #0 works with a TChain
685 // fEMCALRecoUtils = new AliEMCALRecoUtils();
687 DefineInput(0, TChain::Class());
688 // Output slot #0 id reserved by the base class for AOD
689 // Output slot #1 writes into a TH1 container
690 // DefineOutput(1, TH1I::Class());
691 DefineOutput(1, TList::Class());
692 //DefineOutput(3, TTree::Class());
695 //______________________________________________________________________
696 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
705 //if(fEMCALRecoUtils) delete fEMCALRecoUtils ;
708 //______________________________________________________________________
709 //Create Output Objects
710 //Here we can define the histograms and others output files
712 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
714 //______________________________________________________________________
716 if(!fPID->GetNumberOfPIDdetectors())
718 fPID->AddDetector("TPC", 0);
721 fPID->SortDetectors();
723 fPIDqa = new AliHFEpidQAmanager();
724 fPIDqa->Initialize(fPID);
725 //______________________________________________________________________
727 //______________________________________________________________________
728 //Initialize correction Framework and Cuts
729 fCFM = new AliCFManager;
730 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
731 fCFM->SetNStepParticle(kNcutSteps);
732 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
736 AliWarning("Cuts not available. Default cuts will be used");
737 fCuts = new AliHFEcuts;
738 fCuts->CreateStandardCuts();
741 fCuts->Initialize(fCFM);
742 //______________________________________________________________________
744 ///___________________//Lucile
747 // reader = new AliCaloTrackAODReader();
749 //___________________________________________________
752 fOutputList = new TList();
753 fOutputList->SetOwner();
756 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
758 //Store the number of events
760 fNevent = new TH1F("fNevent","Number of Events",30,0,30);
761 fNevent2 = new TH1F("fNevent2","Number of Events 2",30,0,30);
762 //And then, add to the output list
763 fOutputList->Add(fNevent);
764 fOutputList->Add(fNevent2);
766 fpid = new TH1F("fpid","PID flag",5,0,5);
767 fOutputList->Add(fpid);
770 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
772 fPtPrim = new TH1F("fPtPrim","Primary Electrons aod track; p_{T} (GeV/c); Count",300,0,30);
773 fPtSec = new TH1F("fPtSec","Secundary Electrons aod track; p_{T} (GeV/c); Count",300,0,30);
774 fPtPrim2 = new TH1F("fPtPrim2","Primary Electrons vtrack; p_{T} (GeV/c); Count",300,0,30);
775 fPtSec2 = new TH1F("fPtSec2","Secundary Electrons vtrack; p_{T} (GeV/c); Count",300,0,30);
778 fPtElec_ULS = new TH1F("fPtElec_ULS","ULS; p_{T} (GeV/c); Count",300,0,30);
779 fPtElec_LS = new TH1F("fPtElec_LS","LS; p_{T} (GeV/c); Count",300,0,30);
781 fPtElec_ULS_NoPid = new TH1F("fPtElec_ULS_NoPid","ULS; p_{T} (GeV/c); Count",300,0,30);
782 fPtElec_LS_NoPid = new TH1F("fPtElec_LS_NoPid","LS; p_{T} (GeV/c); Count",300,0,30);
784 fPtElec_ULS_MC = new TH1F("fPtElec_ULS_MC","ULS; p_{T} (GeV/c); Count",300,0,30);
785 fPtElec_ULS_MC_weight = new TH1F("fPtElec_ULS_MC_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
787 fPtElec_ULS_weight = new TH1F("fPtElec_ULS_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
788 fPtElec_LS_weight = new TH1F("fPtElec_LS_weight","LS; p_{T} (GeV/c); Count",300,0,30);
790 fTOF01 = new TH2F("fTOF01","",200,-20,20,200,-20,20);
791 fTOF02 = new TH2F("fTOF02","",200,-20,20,200,-20,20);
792 fTOF03 = new TH2F("fTOF03","",200,-20,20,200,-20,20);
795 fPtElec_ULS2 = new TH1F("fPtElec_ULS2","ULS; p_{T} (GeV/c); Count",300,0,30);
796 fPtElec_LS2 = new TH1F("fPtElec_LS2","LS; p_{T} (GeV/c); Count",300,0,30);
798 fPtElec_ULS2_weight = new TH1F("fPtElec_ULS2_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
799 fPtElec_LS2_weight = new TH1F("fPtElec_LS2_weight","LS; p_{T} (GeV/c); Count",300,0,30);
803 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",300,0,30);
804 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
806 //new histos for TPC signal -> Can be used for any p range
807 fTPCnsigma_p_TPC = new TH2F("fTPCnsigma_p_TPC",";p (GeV/c);TPC Electron N#sigma",3000,0,30,1000,-15,10);
808 fTPCnsigma_p_TPC_on_EMCal_acc = new TH2F("fTPCnsigma_p_TPC_on_EMCal_acc",";p (GeV/c);TPC Electron N#sigma",3000,0,30,1000,-15,10);
809 fTPCnsigma_p_TPC_EoverP_cut = new TH2F("fTPCnsigma_p_TPC_EoverP_cut",";p (GeV/c);TPC Electron N#sigma",3000,0,30,1000,-15,10);
812 fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
813 fEtaPhi_num=new TH2F("fEtaPhi_num","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
814 fEtaPhi_den=new TH2F("fEtaPhi_den","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
815 fEtaPhi_data=new TH2F("fEtaPhi_data","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
817 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);
818 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);
821 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
822 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
824 fECluster_pure= new TH1F("fECluster_pure", ";ECluster pure",2000,0,100);
825 fECluster_not_exotic= new TH1F("fECluster_not_exotic", ";ECluster not exotic - function ",2000,0,100);
827 fECluster_not_exotic1= new TH1F("fECluster_not_exotic1", ";ECluster not exotic Ncells > E/3+1",2000,0,100);
829 fECluster_not_exotic2= new TH1F("fECluster_not_exotic2", ";ECluster not exotic 2",2000,0,100);
830 fECluster_exotic= new TH1F("fECluster_exotic", ";ECluster exotic",2000,0,100);
832 //not associated with tracks
833 fNCluster_pure= new TH1F("fNCluster_pure", ";Number of clusters - pure",2000,-1,1999);
834 fNCluster_pure_aod= new TH1F("fNCluster_pure_aod", ";Number of clusters - pure -aod",2000,-1,1999);
835 fNCluster_ECluster= new TH2F("fNCluster_ECluster", ";Number of clusters vs. Energy of Cluster",2000,-1,1999, 4000, -1, 1999);
837 fNcells_energy= new TH2F("fNcells_energy", "all clusters;Number of cells;Energy of Cluster",100,0,100, 2000, 0, 100);
838 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);
839 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);
844 fTime = new TH2D("fTime","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
845 fTime2 = new TH2D("fTime2","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
848 ftimingEle = new TH2D("ftimingEle","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
849 ftimingEle2 = new TH2D("ftimingEle2","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
851 fShowerShape_ha = new TH2F("fShowerShape_ha","Shower Shape hadrons;M02;M20",500,0,1.8,500,0,1.8);
852 fShowerShape_ele = new TH2F("fShowerShape_ele","Shower Shape electrons;M02;M20",500,0,1.8,500,0,1.8);
854 fShowerShapeM02_EoverP = new TH2F("fShowerShapeM02_EoverP","Shower Shape;M02;E/p",500,0,1.8,500,0,1.8);
855 fShowerShapeM20_EoverP = new TH2F("fShowerShapeM20_EoverP","Shower Shape;M20;E/p",500,0,1.8,500,0,1.8);
859 fOutputList->Add(fTOF01);
860 fOutputList->Add(fTOF02);
861 fOutputList->Add(fTOF03);
863 fOutputList->Add(fEtaPhi_num);
864 fOutputList->Add(fEtaPhi_den);
865 fOutputList->Add(fEtaPhi_data);
867 fOutputList->Add(fpt_reco_pt_MC_num);
868 fOutputList->Add(fpt_reco_pt_MC_den);
871 fOutputList->Add(fPtElec_Inc);
872 fOutputList->Add(fPtElec_ULS);
873 fOutputList->Add(fPtElec_LS);
874 fOutputList->Add(fPtElec_ULS_NoPid);
875 fOutputList->Add(fPtElec_LS_NoPid);
876 fOutputList->Add(fPtElec_ULS_MC);
877 fOutputList->Add(fPtElec_ULS_MC_weight);
879 fOutputList->Add(fPtPrim);
880 fOutputList->Add(fPtSec);
881 fOutputList->Add(fPtPrim2);
882 fOutputList->Add(fPtSec2);
886 fOutputList->Add(fPtElec_ULS_weight);
887 fOutputList->Add(fPtElec_LS_weight);
890 fOutputList->Add(fPtElec_ULS2);
891 fOutputList->Add(fPtElec_LS2);
892 fOutputList->Add(fPtElec_ULS2_weight);
893 fOutputList->Add(fPtElec_LS2_weight);
897 fOutputList->Add(fPtTrigger_Inc);
898 fOutputList->Add(fTPCnsigma_pt_2D);
900 fOutputList->Add(fTPCnsigma_p_TPC);
901 fOutputList->Add(fTPCnsigma_p_TPC_on_EMCal_acc);
902 fOutputList->Add(fTPCnsigma_p_TPC_EoverP_cut);
906 fOutputList->Add(fShowerShapeCut);
908 fOutputList->Add(fCharge_n);
909 fOutputList->Add(fCharge_p);
911 fOutputList->Add(fECluster_pure);
912 fOutputList->Add(fECluster_not_exotic);
913 fOutputList->Add(fECluster_not_exotic1);
914 fOutputList->Add(fECluster_not_exotic2);
915 fOutputList->Add(fECluster_exotic);
917 fOutputList->Add(fNCluster_pure);
918 fOutputList->Add(fNCluster_pure_aod);
920 fOutputList->Add(fNCluster_ECluster);
921 fOutputList->Add(fNcells_energy);
922 fOutputList->Add(fNcells_energy_elec_selected);
923 fOutputList->Add(fNcells_energy_not_exotic);
929 fOutputList->Add(fTime);
930 fOutputList->Add(fTime2);
934 fOutputList->Add(ftimingEle);
935 fOutputList->Add(ftimingEle2);
937 fOutputList->Add(fShowerShape_ha);
938 fOutputList->Add(fShowerShape_ele);
940 fOutputList->Add(fShowerShapeM02_EoverP);
941 fOutputList->Add(fShowerShapeM20_EoverP);
947 fVtxZ_new1= new TH1F("fVtxZ_new1","fVtxZ_new1",4000, -50,50);
948 fVtxZ_new2= new TH1F("fVtxZ_new2","fVtxZ_new2",4000, -50,50);
949 fVtxZ_new3= new TH1F("fVtxZ_new3","fVtxZ_new3",4000, -50,50);
950 fVtxZ_new4= new TH1F("fVtxZ_new4","fVtxZ_new4",4000, -50,50);
952 fzRes1= new TH1F("fzRes1","fzRes1",4000, 0,1);
953 fzRes2= new TH1F("fzRes2","fzRes2",4000, 0,1);
954 fSPD_track_vtx1= new TH1F("fSPD_track_vtx1","fSPD_track_vtx1",4000, -5,5);
955 fSPD_track_vtx2= new TH1F("fSPD_track_vtx2","fSPD_track_vtx2",4000, -5,5);
961 //Step 1: Before Track cuts
965 fEoverP_pt = new TH2F *[3];
966 fTPC_p = new TH2F *[3];
967 fTPCnsigma_p = new TH2F *[3];
969 fECluster= new TH1F *[3];
970 fEtaPhi= new TH2F *[3];
971 fVtxZ= new TH1F *[3];
972 fEtad= new TH1F *[3];
973 fNTracks= new TH1F *[3];
975 fNTracks_pt= new TH2F *[3];
976 fNTracks_eta= new TH2F *[3];
977 fNTracks_phi= new TH2F *[3];
979 fNClusters= new TH1F *[3];
980 fTPCNcls_EoverP= new TH2F *[3];
981 fTPCNcls_pid=new TH2F *[4];
985 for(Int_t i = 0; i < 3; i++)
987 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
988 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);
989 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
992 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
993 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
994 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
995 fEtad[i]= new TH1F(Form("fEtad%d",i),"Eta distribution",200, -1.2,1.2);
996 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,5000);
998 fNTracks_pt[i]= new TH2F(Form("fNTracks_pt%d",i),"NTracks vs. pt",1000, 0,5000, 1000, 0, 100);
999 fNTracks_eta[i]= new TH2F(Form("fNTracks_eta%d",i),"NTracks vs. pt",1000, 0,5000, 500, -1.0, 1.0);
1000 fNTracks_phi[i]= new TH2F(Form("fNTracks_phi%d",i),"NTracks vs. pt",1000, 0,5000, 500, 0, 5.0);
1004 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
1005 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
1009 fOutputList->Add(fEoverP_pt[i]);
1010 fOutputList->Add(fTPC_p[i]);
1011 fOutputList->Add(fTPCnsigma_p[i]);
1014 fOutputList->Add(fECluster[i]);
1015 fOutputList->Add(fEtaPhi[i]);
1016 fOutputList->Add(fVtxZ[i]);
1017 fOutputList->Add(fEtad[i]);
1018 fOutputList->Add(fNTracks[i]);
1020 fOutputList->Add(fNTracks_pt[i]);
1021 fOutputList->Add(fNTracks_eta[i]);
1022 fOutputList->Add(fNTracks_phi[i]);
1024 fOutputList->Add(fNClusters[i]);
1025 fOutputList->Add(fTPCNcls_EoverP[i]);
1028 fTrack_Multi= new TH1F("fTrack_Multi","fTrack_Multi",1000, 0,1000);
1030 for(Int_t i = 0; i < 4; i++)
1032 fTPCNcls_pid[i]= new TH2F(Form("fTPCNcls_pid%d",i),"fTPCNcls_pid;NCls;NCls for PID",200,0,200,200,0,200);
1033 fOutputList->Add(fTPCNcls_pid[i]);
1037 Int_t fPtBin[7] = {1,2,4,6,8,10,15};
1040 Int_t fPtBin_trigger[11] = {1,2,4,6,8,10,12,14,16,18,20};
1041 fEoverP_tpc_p_trigger = new TH2F *[10];
1042 fEoverP_tpc_pt_trigger = new TH2F *[10];
1045 fEoverP_tpc = new TH2F *[6];
1046 fTPC_pt = new TH1F *[6];
1047 fTPCnsigma_pt = new TH1F *[6];
1052 fR_EoverP=new TH2F *[6];
1053 fNcells=new TH1F *[6];
1054 fNcells_EoverP=new TH2F *[6];
1055 fM02_EoverP= new TH2F *[6];
1056 fM20_EoverP= new TH2F *[6];
1057 fEoverP_ptbins=new TH1F *[6];
1058 fECluster_ptbins=new TH1F *[6];
1059 fEoverP_wSSCut=new TH1F *[6];
1060 fNcells_electrons=new TH1F *[6];
1061 fNcells_hadrons=new TH1F *[6];
1062 fTPCnsigma_eta_electrons=new TH2F *[6];
1063 fTPCnsigma_eta_hadrons=new TH2F *[6];
1065 if(fCorrelationFlag)
1067 fCEtaPhi_Inc = new TH2F *[6];
1068 fCEtaPhi_Inc_DiHadron = new TH2F *[6];
1070 fCEtaPhi_ULS = new TH2F *[6];
1071 fCEtaPhi_LS = new TH2F *[6];
1072 fCEtaPhi_ULS_NoP = new TH2F *[6];
1073 fCEtaPhi_LS_NoP = new TH2F *[6];
1075 fCEtaPhi_ULS_Weight = new TH2F *[6];
1076 fCEtaPhi_LS_Weight = new TH2F *[6];
1077 fCEtaPhi_ULS_NoP_Weight = new TH2F *[6];
1078 fCEtaPhi_LS_NoP_Weight = new TH2F *[6];
1080 fCEtaPhi_Inc_EM = new TH2F *[6];
1082 fCEtaPhi_ULS_EM = new TH2F *[6];
1083 fCEtaPhi_LS_EM = new TH2F *[6];
1085 fCEtaPhi_ULS_Weight_EM = new TH2F *[6];
1086 fCEtaPhi_LS_Weight_EM = new TH2F *[6];
1088 fInvMass = new TH1F("fInvMass","",200,0,0.3);
1089 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
1090 fDCA = new TH1F("fDCA","",200,0,1);
1091 fDCABack = new TH1F("fDCABack","",200,0,1);
1092 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
1093 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
1095 fOutputList->Add(fInvMass);
1096 fOutputList->Add(fInvMassBack);
1097 fOutputList->Add(fDCA);
1098 fOutputList->Add(fDCABack);
1099 fOutputList->Add(fOpAngle);
1100 fOutputList->Add(fOpAngleBack);
1103 if(fFillBackground){
1105 fInvMass = new TH1F("fInvMass","",200,0,0.3);
1106 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
1107 fDCA = new TH1F("fDCA","",200,0,1);
1108 fDCABack = new TH1F("fDCABack","",200,0,1);
1109 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
1110 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
1112 fOutputList->Add(fInvMass);
1113 fOutputList->Add(fInvMassBack);
1114 fOutputList->Add(fDCA);
1115 fOutputList->Add(fDCABack);
1116 fOutputList->Add(fOpAngle);
1117 fOutputList->Add(fOpAngleBack);
1119 //histos for TPC-only
1120 fInvMass2 = new TH1F("fInvMass2","",200,0,0.3);
1121 fInvMassBack2 = new TH1F("fInvMassBack2","",200,0,0.3);
1122 fDCA2 = new TH1F("fDCA2","",200,0,1);
1123 fDCABack2 = new TH1F("fDCABack2","",200,0,1);
1124 fOpAngle2 = new TH1F("fOpAngle2","",200,0,0.5);
1125 fOpAngleBack2 = new TH1F("fOpAngleBack2","",200,0,0.5);
1127 fOutputList->Add(fInvMass2);
1128 fOutputList->Add(fInvMassBack2);
1129 fOutputList->Add(fDCA2);
1130 fOutputList->Add(fDCABack2);
1131 fOutputList->Add(fOpAngle2);
1132 fOutputList->Add(fOpAngleBack2);
1136 //new histo for trigger data
1138 for(Int_t i = 0; i < 10; i++)
1140 fEoverP_tpc_pt_trigger[i] = new TH2F(Form("fEoverP_tpc_pt_trigger%d",i),Form("%d < p_{t} < %d GeV/c;TPC Electron N#sigma; E/p ",fPtBin_trigger[i],fPtBin_trigger[i+1]),1000,-15,15,100,0,2);
1141 fEoverP_tpc_p_trigger[i] = new TH2F(Form("fEoverP_tpc_p_trigger%d",i),Form("%d < p < %d GeV/c;TPC Electron N#sigma; E/p ",fPtBin_trigger[i],fPtBin_trigger[i+1]),1000,-15,15,100,0,2);
1142 fOutputList->Add(fEoverP_tpc_pt_trigger[i]);
1143 fOutputList->Add(fEoverP_tpc_p_trigger[i]);
1148 for(Int_t i = 0; i < 6; i++)
1150 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);
1151 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);
1152 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);
1154 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);
1155 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);
1156 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);
1157 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);
1158 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);
1159 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);
1160 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);
1161 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);
1162 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);
1163 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);
1164 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);
1165 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);
1166 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);
1167 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);
1168 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);
1170 fOutputList->Add(fEoverP_tpc[i]);
1171 fOutputList->Add(fTPC_pt[i]);
1172 fOutputList->Add(fTPCnsigma_pt[i]);
1174 fOutputList->Add(fEta[i]);
1175 fOutputList->Add(fPhi[i]);
1176 fOutputList->Add(fR[i]);
1177 fOutputList->Add(fR_EoverP[i]);
1178 fOutputList->Add(fNcells[i]);
1179 fOutputList->Add(fNcells_electrons[i]);
1180 fOutputList->Add(fNcells_hadrons[i]);
1181 fOutputList->Add(fNcells_EoverP[i]);
1182 fOutputList->Add(fECluster_ptbins[i]);
1183 fOutputList->Add(fEoverP_ptbins[i]);
1184 fOutputList->Add(fEoverP_wSSCut[i]);
1185 fOutputList->Add(fM02_EoverP[i]);
1186 fOutputList->Add(fM20_EoverP[i]);
1187 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
1188 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
1191 if(fCorrelationFlag)
1193 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);
1194 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);
1196 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);
1197 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);
1198 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);
1199 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);
1201 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);
1202 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);
1203 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);
1204 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);
1206 fOutputList->Add(fCEtaPhi_Inc[i]);
1207 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
1209 fOutputList->Add(fCEtaPhi_ULS[i]);
1210 fOutputList->Add(fCEtaPhi_LS[i]);
1211 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
1212 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
1214 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
1215 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
1216 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
1217 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
1219 if(fEventMixingFlag)
1221 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);
1223 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);
1224 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);
1226 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);
1227 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);
1229 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
1231 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
1232 fOutputList->Add(fCEtaPhi_LS_EM[i]);
1234 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
1235 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
1241 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
1242 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
1246 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
1247 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
1249 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
1250 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
1252 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
1253 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
1256 fOutputList->Add(fTPCnsigma_eta);
1257 fOutputList->Add(fTPCnsigma_phi);
1259 fOutputList->Add(fNcells_pt);
1260 fOutputList->Add(fEoverP_pt_pions);
1262 fOutputList->Add(ftpc_p_EoverPcut);
1263 fOutputList->Add(fnsigma_p_EoverPcut);
1265 fOutputList->Add(fEoverP_pt_pions2);
1266 fOutputList->Add(fEoverP_pt_hadrons);
1268 fOutputList->Add(fVtxZ_new1);
1269 fOutputList->Add(fVtxZ_new2);
1270 fOutputList->Add(fVtxZ_new3);
1271 fOutputList->Add(fVtxZ_new4);
1273 fOutputList->Add(fzRes1);
1274 fOutputList->Add(fzRes2);
1275 fOutputList->Add(fSPD_track_vtx1);
1276 fOutputList->Add(fSPD_track_vtx2);
1280 //__________________________________________________________________
1281 //Efficiency studies
1284 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{T} (GeV/c);Count",300,0,30);
1285 fPtBackgroundBeforeReco_weight = new TH1F("fPtBackgroundBeforeReco_weight",";p_{T} (GeV/c);Count",300,0,30);
1286 if(fFillBackground)fPtBackgroundBeforeReco2 = new TH1F("fPtBackgroundBeforeReco2",";p_{T} (GeV/c);Count",300,0,30);
1287 if(fFillBackground)fPtBackgroundBeforeReco2_weight = new TH1F("fPtBackgroundBeforeReco2_weight",";p_{T} (GeV/c);Count",300,0,30);
1288 fpT_m_electron= new TH2F("fpT_m_electron","fpT_m_electron",300,0,30,300,0,30);
1289 fpT_gm_electron= new TH2F("fpT_gm_electron","fpT_gm_electron",300,0,30,300,0,30);
1291 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{T} (GeV/c);Count",300,0,30);
1292 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{T} (GeV/c);Count",200,0,40);
1293 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{T} (GeV/c);Count",200,0,40);
1295 fPtMCparticleAll_nonPrimary = new TH1F("fPtMCparticleAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1296 fPtMCparticleAlle_nonPrimary = new TH1F("fPtMCparticleAlle_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1297 fPtMCparticleAlle_Primary = new TH1F("fPtMCparticleAlle_Primary",";p_{T} (GeV/c);Count",200,0,40);
1299 fPtMCparticleReco_nonPrimary = new TH1F("fPtMCparticleReco_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1301 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
1302 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
1303 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
1304 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
1306 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{T} (GeV/c);Count",200,0,40);
1307 fPtMCelectronAfterAll_unfolding = new TH1F("fPtMCelectronAfterAll_unfolding",";p_{T} (GeV/c);Count",200,0,40);
1308 fPtMCelectronAfterAll_nonPrimary = new TH1F("fPtMCelectronAfterAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1309 fPtMCelectronAfterAll_Primary = new TH1F("fPtMCelectronAfterAll_Primary",";p_{T} (GeV/c);Count",200,0,40);
1313 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,30);
1314 fPtMCeta = new TH1F("fPtMCeta",";p_{T} (GeV/c);Count",200,0,30);
1315 fPtMCpi02 = new TH1F("fPtMCpi02",";p_{t} (GeV/c);Count",200,0,30);
1316 fPtMCeta2 = new TH1F("fPtMCeta2",";p_{T} (GeV/c);Count",200,0,30);
1317 fPtMCpi03 = new TH1F("fPtMCpi03",";p_{t} (GeV/c);Count",200,0,30);
1318 fPtMCeta3 = new TH1F("fPtMCeta3",";p_{T} (GeV/c);Count",200,0,30);
1320 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
1321 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
1322 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{T} (GeV/c);Count",200,0,40);
1323 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{T} (GeV/c);Count",200,0,40);
1325 fPt_track_match_den = new TH1F("fPt_track_match_den",";p_{T} (GeV/c);Count",200,0,40);
1326 fPt_track_match_num = new TH1F("fPt_track_match_num",";p_{T} (GeV/c);Count",200,0,40);
1328 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
1329 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
1330 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
1332 fOutputList->Add(fPtBackgroundBeforeReco);
1333 fOutputList->Add(fPtBackgroundBeforeReco_weight);
1335 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2);
1336 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2_weight);
1338 fOutputList->Add(fpT_m_electron);
1339 fOutputList->Add(fpT_gm_electron);
1341 fOutputList->Add(fPtBackgroundAfterReco);
1342 fOutputList->Add(fPtMCparticleAll);
1343 fOutputList->Add(fPtMCparticleReco);
1345 fOutputList->Add(fPtMCparticleAll_nonPrimary);
1346 fOutputList->Add(fPtMCparticleAlle_nonPrimary);
1348 fOutputList->Add(fPtMCparticleAlle_Primary);
1349 fOutputList->Add(fPtMCparticleReco_nonPrimary);
1351 fOutputList->Add(fPtMCparticleAllHfe1);
1352 fOutputList->Add(fPtMCparticleRecoHfe1);
1353 fOutputList->Add(fPtMCparticleAllHfe2);
1354 fOutputList->Add(fPtMCparticleRecoHfe2);
1355 fOutputList->Add(fPtMCelectronAfterAll);
1356 fOutputList->Add(fPtMCelectronAfterAll_unfolding);
1358 fOutputList->Add(fPtMCelectronAfterAll_nonPrimary);
1359 fOutputList->Add(fPtMCelectronAfterAll_Primary);
1363 fOutputList->Add(fPtMCpi0);
1364 fOutputList->Add(fPtMCeta);
1365 fOutputList->Add(fPtMCpi02);
1366 fOutputList->Add(fPtMCeta2);
1367 fOutputList->Add(fPtMCpi03);
1368 fOutputList->Add(fPtMCeta3);
1369 fOutputList->Add(fPtMC_EMCal_All);
1370 fOutputList->Add(fPtMC_EMCal_Selected);
1371 fOutputList->Add(fPtMC_TPC_All);
1372 fOutputList->Add(fPtMC_TPC_Selected);
1374 fOutputList->Add(fPt_track_match_den);
1375 fOutputList->Add(fPt_track_match_num);
1377 fOutputList->Add(fPtMCWithLabel);
1378 fOutputList->Add(fPtMCWithoutLabel);
1379 fOutputList->Add(fPtIsPhysicaPrimary);
1382 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
1383 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
1384 fOutputList->Add(fCentralityHist);
1385 fOutputList->Add(fCentralityHistPass);
1387 //______________________________________________________________________
1388 //Mixed event analysis
1389 if(fEventMixingFlag)
1391 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
1392 fOutputList->Add(fPoolNevents);
1394 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.
1395 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
1397 Int_t nCentralityBins = 15;
1398 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
1400 Int_t nZvtxBins = 9;
1401 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
1403 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
1405 //______________________________________________________________________
1407 PostData(1, fOutputList);
1409 ///______________________________________________________________________
1412 //______________________________________________________________________
1414 //Called for each event
1415 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
1418 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1419 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
1423 printf("ERROR: fESD & fAOD not available\n");
1427 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
1431 printf("ERROR: fVEvent not available\n");
1438 AliError("HFE cuts not available");
1442 if(!fPID->IsInitialized())
1444 // Initialize PID with the given run number
1445 AliWarning("PID not initialised, get from Run no");
1449 fPID->InitializePID(fAOD->GetRunNumber());
1453 fPID->InitializePID(fESD->GetRunNumber());
1458 fPidResponse = fInputHandler->GetPIDResponse();
1461 //Check PID response
1464 AliDebug(1, "Using default PID Response");
1465 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
1468 fPID->SetPIDResponse(fPidResponse);
1470 fCFM->SetRecEventInfo(fVevent);
1472 Double_t *fListOfmotherkink = 0;
1473 Int_t fNumberOfVertices = 0;
1474 Int_t fNumberOfMotherkink = 0;
1477 //total event before event selection
1480 //______________________________________________________________________
1484 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
1485 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1486 TString vtxTtl = trkVtx->GetTitle();
1487 if(!vtxTtl.Contains("VertexerTracks")) return;
1488 //Float_t zvtx = trkVtx->GetZ();
1489 Float_t zvtx = -100;
1490 zvtx=trkVtx->GetZ();
1493 fVtxZ_new1->Fill(fZvtx);
1495 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
1496 if(spdVtx->GetNContributors()<=0) return;
1497 TString vtxTyp = spdVtx->GetTitle();
1498 Double_t cov[6]={0};
1499 spdVtx->GetCovarianceMatrix(cov);
1500 Double_t zRes = TMath::Sqrt(cov[5]);
1503 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1506 fSPD_track_vtx1->Fill(spdVtx->GetZ() - trkVtx->GetZ());
1507 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1508 fSPD_track_vtx2->Fill(spdVtx->GetZ() - trkVtx->GetZ());
1511 if(TMath::Abs(zvtx) > 10) return;
1512 fVtxZ_new2->Fill(fZvtx);
1514 if(fabs(zvtx>10.0))return;
1515 fVtxZ_new3->Fill(fZvtx);
1518 //Look for kink mother for AOD
1520 fNumberOfVertices = 0;
1521 fNumberOfMotherkink = 0;
1525 fNumberOfVertices = fAOD->GetNumberOfVertices();
1527 fListOfmotherkink = new Double_t[fNumberOfVertices];
1529 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
1531 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
1532 if(!aodvertex) continue;
1533 if(aodvertex->GetType()==AliAODVertex::kKink)
1535 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
1536 if(!mother1) continue;
1537 Int_t idmother = mother1->GetID();
1538 fListOfmotherkink[fNumberOfMotherkink] = idmother;
1539 fNumberOfMotherkink++;
1550 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
1551 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1552 TString vtxTtl = trkVtx->GetTitle();
1553 if(!vtxTtl.Contains("VertexerTracks")) return;
1554 Float_t zvtx = -100;
1555 zvtx=trkVtx->GetZ();
1558 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
1559 if(spdVtx->GetNContributors()<=0) return;
1560 TString vtxTyp = spdVtx->GetTitle();
1561 Double_t cov[6]={0};
1562 spdVtx->GetCovarianceMatrix(cov);
1563 Double_t zRes = TMath::Sqrt(cov[5]);
1564 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1565 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1566 if(TMath::Abs(zvtx) > 10) return;
1569 //______________________________________________________________________
1570 //after vertex selection
1573 //______________________________________________________________________
1574 //EMCal Trigger Selection (Threshold selection)
1576 TString firedTrigger;
1577 TString TriggerEG1("EG1"); //takes trigger with name with EG1, ex: CEMC7EG1-B-NOPF-CENTNOTRD
1578 TString TriggerEG2("EG2");
1580 //TString TriggerEJE("EJE");
1582 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1583 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1585 //Bool_t IsEventEMCALL0=kTRUE;
1586 Bool_t IsEventEMCALL1=kFALSE;
1588 if(firedTrigger.Contains(TriggerEG1)){
1590 IsEventEMCALL1=kTRUE;
1592 if(firedTrigger.Contains(TriggerEG2)){
1594 IsEventEMCALL1=kTRUE;
1597 //if the flag is for a given threshold and it was not fired, return.
1600 if(!firedTrigger.Contains(TriggerEG1))return;
1601 if(firedTrigger.Contains(TriggerEG2)){
1610 if(!firedTrigger.Contains(TriggerEG2))return;
1611 if(firedTrigger.Contains(TriggerEG1)){
1619 //______________________________________________________________________
1620 //Testing if there is an overlap EGA and EJE
1623 if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2) ) && !firedTrigger.Contains(TriggerEJE))
1628 if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && !firedTrigger.Contains(TriggerEJE))
1633 if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
1638 if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
1647 //Only events with at least 2 tracks are accepted
1648 Int_t fNOtrks = fVevent->GetNumberOfTracks();
1649 if(fNOtrks<2) return;
1654 Int_t fNOtrks2 = fAOD->GetNumberOfTracks();
1655 if(fNOtrks2<2) return;
1659 //______________________________________________________________________
1660 //new track loop to select events
1661 //track pt cut (at least 2)
1665 double fTrackMulti=0;
1666 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1668 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1669 if (!Vtrack) continue;
1671 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1672 //AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1674 if((track->Pt())<0.2 || (track->Pt())>1000.0) continue;
1675 else fTrackMulti=fTrackMulti+1;
1678 //Only take event if track multiplicity is bigger than 2.
1679 if(fTrackMulti<2) return;
1683 //______________________________________________________________________
1684 //Using more cuts than I have beeing using
1685 //eta cut and primary (at least 2)
1688 double fTrackMulti2=0;
1689 for(Int_t i = 0; i < fVevent->GetNumberOfTracks(); i++)
1691 AliVParticle* Vtrack2 = fVevent->GetTrack(i);
1692 if (!Vtrack2) continue;
1695 AliVTrack *track_new = dynamic_cast<AliVTrack*>(Vtrack2);
1696 AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(Vtrack2);
1703 if(TMath::Abs(track_new->Eta())> 0.9) continue;
1704 if (aodtrack->GetType()!= AliAODTrack::kPrimary) continue ;
1705 else fTrackMulti2=fTrackMulti2+1;
1708 //Only take event if track multiplicity is bigger than 2.
1709 if(fTrackMulti2<2) return;
1715 //______________________________________________________________________
1716 //Using more cuts than I have beeing using
1717 //hybrid (at least2)
1720 double fTrackMulti3=0;
1721 for(Int_t i = 0; i < fVevent->GetNumberOfTracks(); i++)
1723 AliVParticle* Vtrack3 = fVevent->GetTrack(i);
1724 if (!Vtrack3) continue;
1726 //AliVTrack *track_new = dynamic_cast<AliVTrack*>(Vtrack3);
1727 AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(Vtrack3);
1733 if (!aodtrack->IsHybridGlobalConstrainedGlobal()) continue ;
1734 //another option if I don't want to use hybrid
1735 //if ( aodtrack->TestFilterBit(128)==kFALSE) continue ;
1736 else fTrackMulti3=fTrackMulti3+1;
1739 //Only take event if track multiplicity is bigger than 2.
1740 if(fTrackMulti3<2) return;
1745 //______________________________________________________________________
1750 double fTrackMulti4=0;
1751 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1753 AliVParticle* Vtrack4 = fVevent->GetTrack(iTracks);
1754 if (!Vtrack4) continue;
1757 //AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack4);
1758 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack4);
1760 if(!atrack->TestFilterBit(768)) continue;
1761 if(!atrack->IsHybridGlobalConstrainedGlobal()) continue ;
1764 else fTrackMulti4=fTrackMulti4+1;
1767 //Only take event if track multiplicity is bigger than 2.
1768 if(fTrackMulti4<2) return;
1769 fTrack_Multi->Fill(fTrackMulti4);
1773 //______________________________________________________________________
1776 //______________________________________________________________________
1777 //Centrality Selection
1778 if(fHasCentralitySelection)
1780 Float_t centrality = -1;
1784 fCentrality = fAOD->GetHeader()->GetCentralityP();
1788 fCentrality = fESD->GetCentrality();
1791 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
1792 else centrality = fCentrality->GetCentralityPercentile("V0A");
1794 //cout << "Centrality = " << centrality << " %" << endl;
1796 fCentralityHist->Fill(centrality);
1798 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
1800 fCentralityHistPass->Fill(centrality);
1802 //______________________________________________________________________
1807 //______________________________________________________________________
1813 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1817 AliError("Array of MC particles not found");
1821 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1825 AliError("Could not find MC Header in AOD");
1829 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1831 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1832 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1834 Int_t pdg = fMCparticle->GetPdgCode();
1836 //====================================================================
1837 //trying take pions spectra 27/May/2014
1838 //IsPrimary only take events from pythia
1839 //IsPhysicalPrimariee: (all prompt particles, including strong decay products plus weak decay product from heavy-flavor).
1840 //eta cut same as MinJung
1842 if(fMCparticle->Eta()>=-0.8 && fMCparticle->Eta()<=0.8)
1844 if(fMCparticle->IsPrimary()){
1846 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1847 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1848 //eta cut same as MinJung
1851 if(fMCparticle->IsPhysicalPrimary()){
1852 if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
1853 if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
1857 if(TMath::Abs(pdg)==111) fPtMCpi03->Fill(fMCparticle->Pt());
1858 if(TMath::Abs(pdg)==221) fPtMCeta3->Fill(fMCparticle->Pt());
1860 //====================================================================
1862 double proX = fMCparticle->Xv();
1863 double proY = fMCparticle->Yv();
1864 double proR = sqrt(pow(proX,2)+pow(proY,2));
1867 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1869 //to correct background
1870 if (TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0){
1871 Int_t mpdg = fMCparticleMother->GetPdgCode();
1873 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1876 fPtMCparticleAlle_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons, and not primary
1882 if (TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()){
1883 fPtMCparticleAlle_Primary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons primary
1886 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1889 fPtMCparticleAll_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all particles, and not primary
1890 if(fMCparticle->IsPhysicalPrimary())
1892 fPtMCparticleAll->Fill(fMCparticle->Pt());
1894 Bool_t MotherFound = FindMother(iMC);
1895 //Bool_t MotherFound = FindMother(track->GetLabel());
1899 //denominator for total efficiency and tracking
1900 //unfolding: denominator is pt_MC and numerator is pt_reco
1901 fPtMCparticleAllHfe1->Fill(fMCparticle->Pt());
1902 fEtaPhi_den->Fill(fMCparticle->Phi(),fMCparticle->Eta());
1905 } //denominator for total efficiency and tracking
1907 fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1920 //second loop over track, but only the primaries ones
1921 //only primary pions --> how to take the primaries ones in AOD?
1923 for(Int_t iMC = 0; iMC < fMCarray->GetNPrimary(); iMC++){
1924 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1925 pdg = fMCparticle->GetPdgCode();
1927 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1928 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1930 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax)
1933 if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
1934 if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
1944 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1945 if (!fEventHandler) {
1946 Printf("ERROR: Could not retrieve MC event handler");
1950 fMCevent = fEventHandler->MCEvent();
1952 Printf("ERROR: Could not retrieve MC event");
1956 fMCstack = fMCevent->Stack();
1958 //pion and eta spectrum
1961 //----------------------------------------------------------------------------------------------------
1962 AliVParticle *mctrack2 = NULL;
1963 AliMCParticle *mctrack0 = NULL;
1966 for(Int_t imc = 0; imc <fMCEvent->GetNumberOfPrimaries(); imc++){
1967 if(!(mctrack2 = fMCEvent->GetTrack(imc))) continue;
1968 TParticle* mcpart0 = fMCEvent->Stack()->Particle(imc);
1969 if(!mcpart0) continue;
1970 mctrack0 = dynamic_cast<AliMCParticle *>(mctrack2);
1971 if(!mctrack0) continue;
1973 if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8){
1975 if(TMath::Abs(mctrack0->PdgCode()) == 111) // pi0
1977 fPtMCpi0->Fill(mctrack0->Pt());
1980 if(TMath::Abs(mctrack0->PdgCode()) == 221) // eta
1982 fPtMCeta->Fill(mctrack0->Pt());
1989 //----------------------------------------------------------------------------------------------------
1992 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1995 fMCtrack = fMCstack->Particle(iMC);
1996 if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1997 TParticle *particle=fMCstack->Particle(iMC);
1999 Int_t pdg = fMCtrack->GetPdgCode();
2002 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
2003 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCtrack->Pt());
2006 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
2009 //to correct background
2010 if (TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0){
2011 Int_t mpdg = fMCtrackMother->GetPdgCode();
2012 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
2013 Double_t proR=particle->R();
2015 fPtMCparticleAlle_nonPrimary->Fill(fMCtrack->Pt()); //denominator for total efficiency for all electrons, and not primary
2020 if(TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(iMC)){
2022 fPtMCparticleAlle_Primary->Fill(fMCtrack->Pt());
2025 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2027 fPtMCparticleAll_nonPrimary->Fill(fMCtrack->Pt());//denominator for total efficiency for all particle, non Primary track
2029 if(fMCstack->IsPhysicalPrimary(iMC))
2031 fPtMCparticleAll->Fill(fMCtrack->Pt());
2033 Bool_t MotherFound = FindMother(iMC);
2034 //Bool_t MotherFound = FindMother(track->GetLabel());
2038 fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency and tracking
2039 fEtaPhi_den->Fill(fMCtrack->Phi(),fMCtrack->Eta());
2042 fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
2045 }//Is Physical primary
2052 //______________________________________________________________________
2053 //threshold selection was here
2054 //______________________________________________________________________
2055 //all events selected
2060 //______________________________________________________________________
2061 //events in the threshold
2063 if(firedTrigger.Contains(TriggerEG1))
2067 if(!firedTrigger.Contains(TriggerEG2)) fNevent->Fill(19);
2068 //if(firedTrigger.Contains(TriggerEG2)) return;
2074 if(firedTrigger.Contains(TriggerEG2))
2078 if(!firedTrigger.Contains(TriggerEG1)) fNevent->Fill(21);
2079 //if(firedTrigger.Contains(TriggerEG1)) return;
2085 //New cluster information
2086 //after trigger threshold selection
2087 Int_t ClsNo2 = -999;
2088 ClsNo2 = fVevent->GetNumberOfCaloClusters();
2089 fNCluster_pure->Fill(ClsNo2);
2094 fNevent->Fill(22); //events with no cluster
2098 //in order to include time cut
2099 //fEMCALCells = fAOD->GetEMCALCells();
2100 //Double_t tof = clus->GetTOF();
2102 //if ( clus->E() < minE ) continue ;
2108 //AliAODHeader * aodh = fAOD->GetHeader();
2109 //Int_t bc= aodh->GetBunchCrossNumber();
2112 Int_t ClsNo_aod = -999;
2113 ClsNo_aod = fAOD->GetNumberOfCaloClusters();
2114 fNCluster_pure_aod->Fill(ClsNo_aod);
2115 //Bool_t exotic=kTRUE;
2117 for (Int_t i=0; i< ClsNo_aod; i++ ){
2119 //fClus = fVevent->GetCaloCluster(i);
2120 //to be compatible with Shingo
2121 AliVCluster *clust = 0x0;
2122 clust = (AliVCluster*) fAOD->GetCaloCluster(i);
2124 if(clust && clust->IsEMCAL())
2126 //pure cluster information
2127 fECluster_pure->Fill(clust->E());
2129 fNcells_energy->Fill(clust->GetNCells(),clust->E());
2130 fNCluster_ECluster->Fill(ClsNo_aod,clust->E());
2132 if(clust->E()>1000) fNevent->Fill(23);
2136 exotic = fEMCALRecoUtils->IsExoticCluster(clust, (AliVCaloCells*)fAOD->GetEMCALCells(), bc);
2137 if(exotic == kFALSE){
2138 fECluster_not_exotic->Fill(clust->E());
2139 fNcells_energy_not_exotic->Fill(clust->GetNCells(),clust->E());
2143 //approximation to remove exotics
2144 if(clust->GetNCells()<5 && clust->E()>15.0){
2145 fECluster_exotic->Fill(clust->E());
2147 //Marcel cut (another approximation to remove exotics)
2148 else if((clust->GetNCells())> ((clust->E())/3+1)){
2149 fECluster_not_exotic1->Fill(clust->E());
2152 fECluster_not_exotic2->Fill(clust->E());
2158 //______________________________________________________________________
2159 //Trying to remove events with bad cells and find patches
2160 //First, I will try to count them
2161 //______________________________________________________________________
2163 if(clust && clust->IsEMCAL())
2165 Bool_t badchannel = ContainsBadChannel("EMCAL", clust->GetCellsAbsId(),clust->GetNCells() );
2166 printf("Contém bad channel? %d ", badchannel);
2167 if(badchannel)fNevent2->Fill(0);
2169 //trying to find patches
2170 TArrayI patches_found=GetTriggerPatches(IsEventEMCALL0, IsEventEMCALL1);
2171 printf("N patches %d, first %d, last %d\n",patches_found.GetSize(), patches_found.At(0), patches_found.At(patches_found.GetSize()-1));
2176 //______________________________________________________________________
2183 fNevent->Fill(24); //events with cluster
2186 fVtxZ_new4->Fill(fZvtx);
2190 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
2191 else ClsNo = fAOD->GetNumberOfCaloClusters();
2193 //______________________________________________________________________
2195 ///_____________________________________________________________________
2197 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2199 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
2202 printf("ERROR: Could not receive track %d\n", iTracks);
2206 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
2207 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
2208 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
2211 Double_t fTPCnSigma = -999;
2212 Double_t fTOFnSigma = -999;
2213 Double_t fTPCnSigma_pion = -999;
2214 Double_t fTPCnSigma_proton = -999;
2215 Double_t fTPCnSigma_kaon = -999;
2216 Double_t fTPCsignal = -999;
2217 Double_t fPt = -999;
2221 //Etacut test on the begging
2222 fEtad[0]->Fill(track->Eta());
2223 //if(track->Eta()<fEtaCutMin || track->Eta()>fEtaCutMax) continue;
2224 fEtad[1]->Fill(track->Eta());
2229 ///_____________________________________________________________________________
2230 ///Fill QA plots without track selection
2232 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
2234 fTPCsignal = track->GetTPCsignal();
2235 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
2236 fTOFnSigma = fPidResponse->NumberOfSigmasTOF(track, AliPID::kElectron);
2237 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
2238 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
2239 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
2241 fTPC_p[0]->Fill(fPt,fTPCsignal);
2242 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
2245 Float_t TPCNcls = track->GetTPCNcls();
2247 Float_t TPCNcls_pid = track->GetTPCsignalN();
2251 Float_t pos[3]={0,0,0};
2253 Double_t fEMCflag = kFALSE;
2254 if(track->GetEMCALcluster()>0)
2256 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2257 if(fClus->IsEMCAL())
2260 //only for charged tracks
2261 fECluster[0]->Fill(fClus->E());
2264 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2267 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
2270 Float_t Energy = fClus->E();
2271 Float_t EoverP = Energy/track->P();
2272 //Float_t M02 = fClus->GetM02();
2273 //Float_t M20 = fClus->GetM20();
2275 /////////////// for Eta Phi distribution
2276 fClus->GetPosition(pos);
2277 TVector3 vpos(pos[0],pos[1],pos[2]);
2278 Double_t cphi = vpos.Phi();
2279 Double_t ceta = vpos.Eta();
2280 fEtaPhi[0]->Fill(cphi,ceta);
2283 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
2288 //______________________________________________________________
2291 fVtxZ[0]->Fill(fZvtx);
2292 if(iTracks == 0)fNTracks[0]->Fill(fNOtrks);
2293 fNTracks_pt[0]->Fill(fNOtrks, fPt);
2294 fNTracks_eta[0]->Fill(fNOtrks, track->Eta());
2295 fNTracks_phi[0]->Fill(fNOtrks, track->Phi());
2298 fNClusters[0]->Fill(ClsNo);
2299 fTPCNcls_pid[0]->Fill(TPCNcls, TPCNcls_pid);
2300 //______________________________________________________________
2302 ///Fill QA plots without track selection
2303 ///_____________________________________________________________________________
2304 //______________________________________________________________________________________
2305 //Track Selection Cuts
2307 //AOD (Test Filter Bit)
2310 // standard cuts with very loose DCA - BIT(4)
2313 GetStandardITSTPCTrackCuts2011(kFALSE)
2314 SetMaxChi2PerClusterTPC(4);
2315 SetAcceptKinkDaughters(kFALSE);
2316 SetRequireTPCRefit(kTRUE);
2317 SetRequireITSRefit(kTRUE);
2318 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
2319 SetMaxDCAToVertexZ(2);
2320 SetMaxDCAToVertex2D(kFALSE);
2321 SetRequireSigmaToVertex(kFALSE);
2322 SetMaxChi2PerClusterITS(36);
2323 SetMaxDCAToVertexXY(2.4)
2324 SetMaxDCAToVertexZ(3.2)
2325 SetDCaToVertex2D(kTRUE)
2328 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
2331 //RecKine: ITSTPC cuts
2332 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
2334 if(fRejectKinkMother)
2338 Bool_t kinkmotherpass = kTRUE;
2339 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
2341 if(track->GetID() == fListOfmotherkink[kinkmother])
2343 kinkmotherpass = kFALSE;
2347 if(!kinkmotherpass) continue;
2351 if(etrack->GetKinkIndex(0) != 0) continue;
2358 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
2361 //HFEcuts: ITS layers cuts
2362 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
2364 //HFE cuts: TPC PID cleanup
2365 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
2366 //______________________________________________________________________________________
2369 //AOD test -- Fancesco suggestion
2370 //aod test -- Francesco suggestion
2371 AliAODTrack *aod_track=fAOD->GetTrack(iTracks);
2373 Int_t type=aod_track->GetType();
2374 if(type==AliAODTrack::kPrimary) fPtPrim->Fill(aod_track->Pt());
2375 if(type==AliAODTrack::kSecondary) fPtSec->Fill(aod_track->Pt());
2377 //Int_t type2=track->GetType();
2378 if(type==AliAODTrack::kPrimary) fPtPrim2->Fill(track->Pt());
2379 if(type==AliAODTrack::kSecondary) fPtSec2->Fill(track->Pt());
2383 ///_____________________________________________________________
2384 ///QA plots after track selection
2387 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
2388 else fPtMCWithoutLabel->Fill(fPt);
2391 if(fIsMC && track->GetLabel()>=0)
2395 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2398 if(fMCparticle->IsPhysicalPrimary())
2400 fPtIsPhysicaPrimary->Fill(fPt);
2403 Int_t pdg = fMCparticle->GetPdgCode();
2404 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
2408 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2410 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
2412 if(fMCparticle->IsPhysicalPrimary())
2414 fPtMCparticleReco->Fill(fMCparticle->Pt());
2416 Bool_t MotherFound = FindMother(track->GetLabel());
2421 fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());//numerator tracking
2423 fpt_reco_pt_MC_den->Fill(track->Pt(),fMCparticle->Pt());
2427 fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
2442 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
2445 fMCtrack = fMCstack->Particle(track->GetLabel());
2446 Int_t pdg = fMCtrack->GetPdgCode();
2448 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2450 fPtMCparticleReco_nonPrimary->Fill(fMCtrack->Pt());//not Primary track
2454 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2456 fPtIsPhysicaPrimary->Fill(fPt);
2459 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2461 fPtMCparticleReco->Fill(fMCtrack->Pt());
2463 Bool_t MotherFound = FindMother(track->GetLabel());
2466 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());//numerator tracking
2467 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
2475 fTPC_p[1]->Fill(fPt,fTPCsignal);
2476 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
2477 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
2478 Double_t fPtBin_trigger[11] = {1,2,4,6,8,10,12,14,16,18,20};
2480 TPCNcls = track->GetTPCNcls();
2481 Float_t pos2[3]={0,0,0};
2483 if(track->GetEMCALcluster()>0)
2485 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2486 if(fClus->IsEMCAL())
2488 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2490 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
2492 Float_t Energy = fClus->E();
2493 Float_t EoverP = Energy/track->P();
2494 Float_t M02 = fClus->GetM02();
2495 Float_t M20 = fClus->GetM20();
2496 Float_t ncells = fClus->GetNCells();
2498 /////////////// for Eta Phi distribution
2499 fClus->GetPosition(pos2);
2500 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
2501 Double_t cphi = vpos.Phi();
2502 Double_t ceta = vpos.Eta();
2503 fEtaPhi[1]->Fill(cphi,ceta);
2505 fECluster[1]->Fill(Energy);
2506 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
2509 //for EMCal trigger performance
2511 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
2512 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
2517 //for hadron contamination calculations
2521 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2523 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
2525 if(fTPCnSigma<-3.5){
2526 fEoverP_pt_hadrons->Fill(fPt,EoverP);
2527 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
2530 //for systematic studies of hadron contamination
2531 if(fTPCnSigma < -4){
2532 fEoverP_pt_pions->Fill(fPt, EoverP);
2536 if(fTPCnSigma < -5){
2537 fEoverP_pt_pions2->Fill(fPt, EoverP);
2547 for(Int_t i = 0; i < 6; i++)
2549 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2552 if(fTPCnSigma < -5 && fTPCnSigma > -10){
2553 fNcells_hadrons[i]->Fill(ncells);
2555 //hadrons selection using E/p
2556 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
2557 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
2559 //electrons selection using E/p
2560 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
2561 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
2566 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
2568 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
2569 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
2573 if(fTPCnSigma < 3.5 && fCorrelationFlag)
2575 fPtTrigger_Inc->Fill(fPt);
2576 DiHadronCorrelation(track, iTracks);
2585 //______________________________________________________________
2588 fVtxZ[1]->Fill(fZvtx);
2589 if(iTracks == 0)fNTracks[1]->Fill(fNOtrks);
2590 fNTracks_pt[1]->Fill(fNOtrks, fPt);
2591 fNTracks_eta[1]->Fill(fNOtrks, track->Eta());
2592 fNTracks_phi[1]->Fill(fNOtrks, track->Phi());
2593 fNClusters[1]->Fill(ClsNo);
2594 fTPCNcls_pid[1]->Fill(TPCNcls, TPCNcls_pid);
2596 //______________________________________________________________
2598 ///______________________________________________________________________
2599 ///Histograms for PID Studies
2600 //Double_t fPtBin[6] = {2,4,6,8,10,15};
2602 for(Int_t i = 0; i < 6; i++)
2604 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2606 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2607 fTPC_pt[i]->Fill(fTPCsignal);
2608 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
2613 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2615 //new pt bins for trigger data
2617 for(Int_t i = 0; i < 10; i++)
2619 if(fP>=fPtBin_trigger[i] && fP<fPtBin_trigger[i+1])
2621 if(fEMCflag)fEoverP_tpc_p_trigger[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2625 if(fPt>=fPtBin_trigger[i] && fPt<fPtBin_trigger[i+1])
2627 if(fEMCflag)fEoverP_tpc_pt_trigger[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2633 //new way to calculate TPCnsigma distribution: TPCnsigma in function of p, with/without E/p cut
2634 fTPCnsigma_p_TPC->Fill(fP, fTPCnSigma);
2637 fTPCnsigma_p_TPC_on_EMCal_acc->Fill(fP, fTPCnSigma);
2639 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax){
2640 fTPCnsigma_p_TPC_EoverP_cut->Fill(fP, fTPCnSigma);
2647 ///QA plots after track selection
2648 ///_____________________________________________________________
2650 //_______________________________________________________
2651 //Correlation Analysis - DiHadron
2654 if(fTPCnSigma < 3.5 && fCorrelationFlag)
2656 fPtTrigger_Inc->Fill(fPt);
2657 DiHadronCorrelation(track, iTracks);
2660 //_______________________________________________________
2663 ///////////////////////////////////////////////////////////////////
2664 ///TPC - efficiency calculation //
2666 /// changing start here
2667 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2669 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2670 Int_t pdg = fMCparticle->GetPdgCode();
2673 if(fMCparticle->IsPhysicalPrimary()){
2676 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2678 Bool_t MotherFound = FindMother(track->GetLabel());
2680 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2681 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2682 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
2689 else if(fIsMC && track->GetLabel()>=0)//ESD
2692 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2693 fMCtrack = fMCstack->Particle(track->GetLabel());
2695 Int_t pdg = fMCtrack->GetPdgCode();
2696 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2698 if(fMCtrack->GetFirstMother()>0){
2699 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2700 Bool_t MotherFound = FindMother(track->GetLabel());
2702 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2703 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
2712 if(fPt>1 && fPt<2) fTOF01->Fill(fTOFnSigma,fTPCnSigma);
2713 if(fPt>2 && fPt<4) fTOF02->Fill(fTOFnSigma,fTPCnSigma);
2714 if(fPt>4 && fPt<6) fTOF03->Fill(fTOFnSigma,fTPCnSigma);
2716 ///________________________________________________________________________
2718 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
2719 Int_t pidpassed = 1;
2720 AliHFEpidObject hfetrack;
2721 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
2722 hfetrack.SetRecTrack(track);
2723 hfetrack.SetPP(); //proton-proton analysis
2724 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
2725 fpid->Fill(pidpassed);
2727 if(pidpassed==0) continue;
2728 ///________________________________________________________________________
2731 ////////////////////////////////////////////////////////////////////
2732 ///TPC efficiency calculations
2735 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2737 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2738 Int_t pdg = fMCparticle->GetPdgCode();
2741 if(fMCparticle->IsPhysicalPrimary()){
2744 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2746 Bool_t MotherFound = FindMother(track->GetLabel());
2748 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2749 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2750 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
2757 else if(fIsMC && track->GetLabel()>=0)//ESD
2760 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2761 fMCtrack = fMCstack->Particle(track->GetLabel());
2763 Int_t pdg = fMCtrack->GetPdgCode();
2764 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2766 if(fMCtrack->GetFirstMother()>0){
2767 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2768 Bool_t MotherFound = FindMother(track->GetLabel());
2770 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2771 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
2779 //Eta Cut for TPC only
2780 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2781 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
2784 //Background for TPC only
2785 if(fFillBackground){
2787 //efficiency without SS cut for TPC only
2788 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
2789 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
2790 } //Eta cut to be consistent with other efficiency
2794 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
2795 fTPC_p[2]->Fill(fP,fTPCsignal);
2796 TPCNcls = track->GetTPCNcls();
2797 Float_t pos3[3]={0,0,0};
2800 //here denominator for track-matching efficiency
2801 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2803 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2804 Int_t pdg = fMCparticle->GetPdgCode();
2807 if(fMCparticle->IsPhysicalPrimary()){
2810 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2812 Bool_t MotherFound = FindMother(track->GetLabel());
2814 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2815 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2816 if(fIsHFE1) fPt_track_match_den->Fill(fMCparticle->Pt());
2824 if(track->GetEMCALcluster()>0)
2826 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2827 if(fClus->IsEMCAL())
2830 //________________________________________________________________________
2833 //Cluster timing distribution -- for ESD
2834 if(fUseEMCal && !fIsAOD){
2836 AliESDCaloCells &cells_esd=*(fESD->GetEMCALCells());
2837 TRefArray* caloClusters_esd = new TRefArray();
2838 fESD->GetEMCALClusters(caloClusters_esd);
2839 Int_t nclus_esd = caloClusters_esd->GetEntries();
2842 for (Int_t icl = 0; icl < nclus_esd; icl++) {
2844 AliESDCaloCluster* clus_esd = (AliESDCaloCluster*)caloClusters_esd->At(icl);
2846 if(clus_esd->IsEMCAL()){
2847 Float_t ncells_esd = fClus->GetNCells();
2848 UShort_t * index_esd = clus_esd->GetCellsAbsId() ;
2849 UShort_t * index2_esd = fClus->GetCellsAbsId() ;
2852 for(Int_t i = 0; i < ncells_esd ; i++){
2854 Int_t absId_esd = index_esd[i];
2855 fTime->Fill(fPt,cells_esd.GetCellTime(absId_esd));
2857 Int_t absId2_esd = index2_esd[i];
2858 fTime2->Fill(fPt,cells_esd.GetCellTime(absId2_esd));
2866 //Cluster timing distribution -- for AOD
2867 if(fUseEMCal && fIsAOD){
2869 AliAODCaloCells &cells_aod=*(fAOD->GetEMCALCells());
2871 TRefArray* caloClusters_aod = new TRefArray();
2872 fAOD->GetEMCALClusters(caloClusters_aod);
2874 Int_t nclus_aod = caloClusters_aod->GetEntries();
2876 for (Int_t icl = 0; icl < nclus_aod; icl++) {
2878 AliAODCaloCluster* clus_aod = (AliAODCaloCluster*)caloClusters_aod->At(icl);
2881 if(clus_aod->IsEMCAL()){
2882 Float_t ncells_aod = fClus->GetNCells();
2883 UShort_t * index_aod = clus_aod->GetCellsAbsId() ;
2884 UShort_t * index2_aod = fClus->GetCellsAbsId() ;
2887 for(Int_t i = 0; i < ncells_aod ; i++){
2889 Int_t absId_aod = index_aod[i];
2890 fTime->Fill(fPt,cells_aod.GetCellTime(absId_aod));
2892 Int_t absId2_aod = index2_aod[i];
2893 fTime2->Fill(fPt,cells_aod.GetCellTime(absId2_aod));
2904 double emctof = fClus->GetTOF();
2905 ftimingEle->Fill(fPt,emctof);
2907 //________________________________________________________________________
2913 Double_t Dx = fClus->GetTrackDx();
2914 Double_t Dz = fClus->GetTrackDz();
2915 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
2917 for(Int_t i = 0; i < 6; i++)
2919 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2928 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2930 Float_t Energy = fClus->E();
2931 Float_t EoverP = Energy/track->P();
2932 Float_t M02 = fClus->GetM02();
2933 Float_t M20 = fClus->GetM20();
2934 Float_t ncells = fClus->GetNCells();
2936 //here numerator for track-matching efficiency
2937 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2939 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2940 Int_t pdg = fMCparticle->GetPdgCode();
2943 if(fMCparticle->IsPhysicalPrimary()){
2946 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2948 Bool_t MotherFound = FindMother(track->GetLabel());
2950 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2951 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2952 if(fIsHFE1) fPt_track_match_num->Fill(fMCparticle->Pt());
2961 //----------------------------------------------------------------------------------------
2963 //EtaCut electrons histogram
2965 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2967 if(fUseShowerShapeCut){
2968 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
2969 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2970 fShowerShapeCut->Fill(M02,M20);
2971 //in order to check if there are exotic cluster in this selected cluster (27 may 2014)
2972 fNcells_energy_elec_selected->Fill(ncells,Energy);
2977 if(!fUseShowerShapeCut){
2978 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2979 fShowerShapeCut->Fill(M02,M20);
2980 fNcells_energy_elec_selected->Fill(ncells,Energy);
2984 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
2986 //for shower shape cut studies - now with TPC PID Cut
2988 fShowerShapeM02_EoverP->Fill(M02,EoverP);
2989 fShowerShapeM20_EoverP->Fill(M20,EoverP);
2994 //----------------------------------------------------------------------------------------
2998 // for Eta Phi distribution
2999 fClus->GetPosition(pos3);
3000 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
3001 Double_t cphi = vpos.Phi();
3002 Double_t ceta = vpos.Eta();
3003 fEtaPhi[2]->Fill(cphi,ceta);
3007 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
3009 for(Int_t i = 0; i < 6; i++)
3011 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
3014 fR_EoverP[i]->Fill(R, EoverP);
3015 fNcells[i]->Fill(ncells);
3016 fNcells_EoverP[i]->Fill(EoverP, ncells);
3017 fM02_EoverP[i]->Fill(M02,EoverP);
3018 fM20_EoverP[i]->Fill(M20,EoverP);
3019 fECluster_ptbins[i]->Fill(Energy);
3020 fEoverP_ptbins[i]->Fill(EoverP);
3022 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
3023 fNcells_electrons[i]->Fill(ncells);
3026 if(M02<0.5 && M20<0.3) {
3027 fEoverP_wSSCut[i]->Fill(EoverP);
3032 fNcells_pt->Fill(fPt, ncells);
3035 ////////////////////////////////////////////////////////////////////
3036 ///EMCal - Efficiency calculations
3039 if(fIsMC && fIsAOD && track->GetLabel()>=0)
3041 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3042 Int_t pdg = fMCparticle->GetPdgCode();
3045 if(fMCparticle->IsPhysicalPrimary()){
3047 //Phi cut && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi()
3048 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3050 Bool_t MotherFound = FindMother(track->GetLabel());
3052 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3053 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3054 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCparticle->Pt());
3061 else if(fIsMC && track->GetLabel()>=0)//ESD
3064 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
3067 fMCtrack = fMCstack->Particle(track->GetLabel());
3069 Int_t pdg = fMCtrack->GetPdgCode();
3070 //Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
3071 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax )
3073 Bool_t MotherFound = FindMother(track->GetLabel());
3074 //MotherFound included
3076 if(fMCtrack->GetFirstMother()>0){
3077 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3078 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
3079 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCtrack->Pt());
3087 //_______________________________________________________
3089 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
3093 fECluster[2]->Fill(Energy);
3094 fTPCNcls_pid[3]->Fill(TPCNcls, TPCNcls_pid);
3099 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
3100 fPtElec_Inc->Fill(fPt);
3101 //eta phi distribution for data
3102 fEtaPhi_data->Fill(track->Phi(),track->Eta());
3105 //Eta cut for background
3106 if(fFillBackground){
3107 fEtad[2]->Fill(track->Eta());
3109 //background for triggered data: trigger electron must have same cuts on shower shape 06/Jan/2014
3110 if(fUseShowerShapeCut){
3111 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3112 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
3113 Background(track, iTracks, Vtrack, kFALSE);
3118 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
3119 Background(track, iTracks, Vtrack, kFALSE);
3125 double emctof2 = fClus->GetTOF();
3126 ftimingEle2->Fill(fPt,emctof2);
3127 //Correlation Analysis
3128 if(fCorrelationFlag)
3130 ElectronHadronCorrelation(track, iTracks, Vtrack);
3133 //_______________________________________________________
3135 ////////////////////////////////////////////////////////////////////
3136 ///EMCal - efficiency calculations
3138 if(track->Charge()<0) fCharge_n->Fill(fPt);
3139 if(track->Charge()>0) fCharge_p->Fill(fPt);
3143 if(fIsMC && fIsAOD && track->GetLabel()>=0)//AOD
3145 if(track->Charge()<0) fCharge_n->Fill(fPt);
3146 if(track->Charge()>0) fCharge_p->Fill(fPt);
3148 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3149 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3150 Int_t pdg = fMCparticle->GetPdgCode();
3152 double proX = fMCparticle->Xv();
3153 double proY = fMCparticle->Yv();
3154 double proR = sqrt(pow(proX,2)+pow(proY,2));
3157 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi() ){
3159 if( TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0 ){
3160 Int_t mpdg = fMCparticleMother->GetPdgCode();
3161 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
3162 if(proR<7)fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
3165 if( TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCelectronAfterAll_Primary->Fill(fMCparticle->Pt());
3170 if(fMCparticle->IsPhysicalPrimary()){
3173 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3175 Bool_t MotherFound = FindMother(track->GetLabel());
3178 if(!fUseShowerShapeCut){
3180 //Unfolding pt_reco/pt_MC in the efficiency
3181 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
3182 fPtMCelectronAfterAll_unfolding->Fill(track->Pt());
3183 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
3185 //new histo to estimate how different is pt reco from pt MC
3186 fpt_reco_pt_MC_num->Fill(track->Pt(),fMCparticle->Pt());
3187 }//numerator for the total efficiency AOD
3189 //November 11 for efficiency of triggered data
3190 if(fUseShowerShapeCut){
3191 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3193 //Unfolding pt_reco/pt_MC in the efficiency
3194 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
3195 fPtMCelectronAfterAll_unfolding->Fill(track->Pt());
3196 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
3198 //new histo to estimate how different is pt reco from pt MC
3199 fpt_reco_pt_MC_num->Fill(track->Pt(),fMCparticle->Pt());
3200 }//numerator for the total efficiency AOD
3206 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3207 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3208 if(fIsHFE1)fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
3215 else if(fIsMC && track->GetLabel()>=0)//ESD
3217 if(track->Charge()<0) fCharge_n->Fill(fPt);
3218 if(track->Charge()>0) fCharge_p->Fill(fPt);
3220 fMCtrack = fMCstack->Particle(track->GetLabel());
3221 if(fMCtrack->GetFirstMother()>0)
3223 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3225 TParticle *particle=fMCstack->Particle(track->GetLabel());
3227 Int_t pdg = fMCtrack->GetPdgCode();
3230 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3232 if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 )
3234 Int_t mpdg = fMCtrackMother->GetPdgCode();
3235 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111)
3237 Double_t proR=particle->R();
3240 fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
3244 if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel()))
3246 fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
3250 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
3252 Bool_t MotherFound = FindMother(track->GetLabel());
3256 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3258 if(!fUseShowerShapeCut){
3260 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
3261 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
3264 //November 11 for efficiency of triggered data
3265 if(fUseShowerShapeCut){
3266 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3268 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
3269 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
3281 // Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
3282 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3284 //included MotherFound
3288 if(fMCtrack->GetFirstMother()>0){
3289 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3290 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
3292 if(fIsHFE1){fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());}
3299 ///////////////////////////////////////////////////////////////////
3307 //______________________________________________________________
3310 fVtxZ[2]->Fill(fZvtx);
3311 if(iTracks == 0)fNTracks[2]->Fill(fNOtrks);
3312 fNTracks_pt[2]->Fill(fNOtrks, fPt);
3313 fNTracks_eta[2]->Fill(fNOtrks, track->Eta());
3314 fNTracks_phi[2]->Fill(fNOtrks, track->Phi());
3315 fNClusters[2]->Fill(ClsNo);
3316 fTPCNcls_pid[2]->Fill(TPCNcls, TPCNcls_pid);
3318 //______________________________________________________________
3320 //_______________________________________________________
3321 //Correlation Analysis
3324 fPtElec_Inc->Fill(fPt);
3326 if(fCorrelationFlag)
3328 ElectronHadronCorrelation(track, iTracks, Vtrack);
3331 //_______________________________________________________
3333 ///________________________________________________________________________
3336 //__________________________________________________________________
3337 //Event Mixing Analysis
3339 if(fEventMixingFlag)
3341 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
3343 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
3345 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!
3350 //__________________________________________________________________
3352 delete fListOfmotherkink;
3353 PostData(1, fOutputList);
3356 //______________________________________________________________________
3357 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
3359 //Draw result to the screen
3360 //Called once at the end of the query
3362 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
3366 printf("ERROR: Output list not available\n");
3371 //______________________________________________________________________
3372 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
3374 //Check single track cuts for a given cut step
3375 //Note this function is called inside the UserExec function
3376 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
3377 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
3382 //______________________________________________________________________
3385 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
3387 ///_________________________________________________________________
3389 //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)
3393 if(track->GetLabel() < 0)
3395 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
3401 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3403 if(fMCparticle->GetMother()<0) return;
3405 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3406 if(fMCparticleMother->GetMother()>0)fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
3408 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3411 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
3412 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
3415 //October 08th weighted histos
3416 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221 ){
3418 Double_t mPt=fMCparticleMother->Pt();
3422 //________________________________________________________________
3423 //correction for d3 based on data
3425 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3427 mweight=CalculateWeight(111, x);
3430 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3432 mweight=CalculateWeight(221, x);
3436 //________________________________________________________________
3438 //Histo pT mother versus pT electron
3439 fpT_m_electron->Fill(mPt, track->Pt());
3441 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./mweight);
3442 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./mweight);
3444 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3446 Double_t gmPt=fMCparticleGMother->Pt();
3447 Double_t gmweight=1;
3449 //________________________________________________________________
3450 //correction for d3 based on data
3452 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3454 gmweight=CalculateWeight(111, x);
3456 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3458 gmweight=CalculateWeight(221, x);
3462 //________________________________________________________________
3463 //Histo pT gmother versus pT electron
3465 fpT_gm_electron->Fill(gmPt, track->Pt());
3467 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./gmweight);
3468 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./gmweight);
3471 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt());
3472 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt());
3479 fMCtrack = fMCstack->Particle(track->GetLabel());
3481 if(fMCtrack->GetFirstMother()<0) return;
3483 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3485 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3488 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
3489 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
3494 ///_________________________________________________________________
3496 //________________________________________________
3497 //Associated particle cut
3498 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
3499 fPartnerCuts->SetRequireITSRefit(kTRUE);
3500 fPartnerCuts->SetRequireTPCRefit(kTRUE);
3501 fPartnerCuts->SetEtaRange(-0.9,0.9);
3502 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
3503 fPartnerCuts->SetMinNClustersTPC(80);
3504 fPartnerCuts->SetPtRange(0,1e10);
3505 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
3506 //fPartnerCuts->SetMaxDCAToVertexXY(1);
3507 //fPartnerCuts->SetMaxDCAToVertexZ(3);
3508 //_________________________________________________
3510 ///#################################################################
3511 //Non-HFE reconstruction
3512 fNonHFE = new AliSelectNonHFE();
3513 fNonHFE->SetAODanalysis(fIsAOD);
3514 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
3515 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
3516 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
3517 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
3518 fNonHFE->SetAlgorithm("DCA"); //KF
3519 fNonHFE->SetPIDresponse(fPidResponse);
3520 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
3521 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
3524 fNonHFE->SetHistAngleBack(fOpAngleBack);
3525 fNonHFE->SetHistAngle(fOpAngle);
3526 fNonHFE->SetHistDCABack(fDCABack);
3527 fNonHFE->SetHistDCA(fDCA);
3528 fNonHFE->SetHistMassBack(fInvMassBack);
3529 fNonHFE->SetHistMass(fInvMass);
3532 fNonHFE->SetHistAngleBack(fOpAngleBack2);
3533 fNonHFE->SetHistAngle(fOpAngle2);
3534 fNonHFE->SetHistDCABack(fDCABack2);
3535 fNonHFE->SetHistDCA(fDCA2);
3536 fNonHFE->SetHistMassBack(fInvMassBack2);
3537 fNonHFE->SetHistMass(fInvMass2);
3540 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
3542 //index of track selected as partner
3543 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
3545 //Electron Information
3546 Double_t fPhiE = -999;
3547 Double_t fEtaE = -999;
3548 Double_t fPtE = -999;
3549 fPhiE = track->Phi();
3550 fEtaE = track->Eta();
3553 ///_________________________________________________________________
3559 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3565 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3566 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3571 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3572 Double_t mPt=fMCparticleMother->Pt();
3573 Double_t mweight1=1;
3574 Double_t mweight2=1;
3575 //Double_t weight=1;
3578 //----------------------------------------------------------------------------
3579 //correction based on data only
3580 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3582 weight=CalculateWeight(111, x);
3584 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3586 weight=CalculateWeight(221, x);
3590 //----------------------------------------------------------------------------
3593 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
3594 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
3597 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, mweight1);
3598 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, mweight2);
3600 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3601 Double_t gmPt=fMCparticleGMother->Pt();
3602 Double_t gmweight1=1;
3603 Double_t gmweight2=1;
3604 //Double_t weight=1;
3606 //----------------------------------------------------------------------------
3608 //----------------------------------------------------------------------------
3610 //correction based on data only for pi0
3612 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3614 weight=CalculateWeight(111, x);
3616 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3618 weight=CalculateWeight(221, x);
3626 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
3627 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
3630 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, gmweight1);
3631 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, gmweight2);
3634 if(fNonHFE->IsULS()) fPtElec_ULS_weight->Fill(fPtE,fNonHFE->GetNULS());
3635 if(fNonHFE->IsLS()) fPtElec_LS_weight->Fill(fPtE,fNonHFE->GetNLS());
3642 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
3643 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
3645 //new 08 October //weighted histograms
3646 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3647 Double_t mPt=fMCparticleMother->Pt();
3649 Double_t mweight1=1;
3650 Double_t mweight2=1;
3651 //Double_t weight=1;
3654 //----------------------------------------------------------------------------
3656 //correction based on data for d3
3658 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3660 weight=CalculateWeight(111, x);
3663 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3665 weight=CalculateWeight(221, x);
3671 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
3672 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
3675 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, mweight1);
3676 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, mweight2);
3678 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3679 Double_t gmPt=fMCparticleGMother->Pt();
3680 Double_t gmweight1=1;
3681 Double_t gmweight2=1;
3682 //Double_t weight=1;
3685 //----------------------------------------------------------------------------
3686 //correction based on data only for pi0
3688 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3690 weight=CalculateWeight(111, x);
3694 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3696 weight=CalculateWeight(221, x);
3699 //----------------------------------------------------------------------------
3704 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
3705 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
3708 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, gmweight1);
3709 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, gmweight2);
3712 if(fNonHFE->IsULS()) fPtElec_ULS2_weight->Fill(fPtE,fNonHFE->GetNULS());
3713 if(fNonHFE->IsLS()) fPtElec_LS2_weight->Fill(fPtE,fNonHFE->GetNLS());
3717 //----------------------------------------------------------------------------
3718 //to check other way to calculate efficiency
3719 //ULS with no weight from ULS-LS original
3720 //we have to know if track2 comes from same mother!!!
3721 //----------------------------------------------------------------------------
3722 if(fNonHFE->IsULS()){
3724 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3727 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3730 printf("ERROR: Could not receive track %d\n", iTracks);
3733 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3734 if(track2->GetLabel()<0) continue;
3735 fMCparticle2 = (AliAODMCParticle*) fMCarray->At(track2->GetLabel());
3736 if(fMCparticle2->GetMother()<0) continue;
3738 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
3740 if(fUlsPartner[i]==iTracks){
3741 //only fill if it has same mother
3742 //with weight to take into account the number of partners
3743 if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC->Fill(fPtE, fNonHFE->GetNULS());
3745 //-----------------------------------------------------------------------------------------------------------
3747 //Double_t weight2=1;
3748 Double_t mPt=fMCparticleMother->Pt();
3751 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3753 weight=CalculateWeight(111, x);
3757 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3759 weight=CalculateWeight(221, x);
3764 //weight for grandmother
3766 if((fMCparticleMother->GetMother()>0) && TMath::Abs(((fMCparticleGMother->GetPdgCode())==111))){
3767 Double_t gmPt=fMCparticleGMother->Pt();
3769 weight=CalculateWeight(111, x);
3772 if((fMCparticleMother->GetMother()>0) && TMath::Abs(((fMCparticleGMother->GetPdgCode())==221))){
3773 Double_t gmPt=fMCparticleGMother->Pt();
3775 weight=CalculateWeight(221, x);
3780 if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC_weight->Fill(fPtE, (fNonHFE->GetNULS())*1./weight);
3782 //-----------------------------------------------------------------------------------------------------------
3785 }//partner found same as track
3786 }//loop in all partner
3790 //----------------------------------------------------------------------------
3791 //end of part to check other way to calculate efficiency
3792 //----------------------------------------------------------------------------
3799 //ULS-LS with no pid AOD
3800 if(fNonHFE->IsULS()) fPtElec_ULS_NoPid->Fill(fPtE,fNonHFE->GetNULS());
3801 if(fNonHFE->IsLS()) fPtElec_LS_NoPid->Fill(fPtE,fNonHFE->GetNLS());
3808 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3811 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3812 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3816 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
3817 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
3824 ///_________________________________________________________________
3829 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3830 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3834 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
3835 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
3841 }//end of Background function
3843 //______________________________________________________________________
3844 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
3847 ///_________________________________________________________________
3851 if(track->GetLabel() < 0)
3853 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
3859 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3861 if(fMCparticle->GetMother()<0) return;
3863 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3865 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3868 fPtBackgroundBeforeReco->Fill(track->Pt());
3873 fMCtrack = fMCstack->Particle(track->GetLabel());
3875 if(fMCtrack->GetFirstMother()<0) return;
3877 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3879 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3882 fPtBackgroundBeforeReco->Fill(track->Pt());
3886 ///_________________________________________________________________
3888 //________________________________________________
3889 //Associated particle cut
3890 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
3891 fPartnerCuts->SetRequireITSRefit(kTRUE);
3892 fPartnerCuts->SetRequireTPCRefit(kTRUE);
3893 fPartnerCuts->SetEtaRange(-0.9,0.9);
3894 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
3895 fPartnerCuts->SetMinNClustersTPC(80);
3896 fPartnerCuts->SetPtRange(0.3,1e10);
3897 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
3898 //fPartnerCuts->SetMaxDCAToVertexXY(1);
3899 //fPartnerCuts->SetMaxDCAToVertexZ(3);
3900 //_________________________________________________
3902 ///#################################################################
3903 //Non-HFE reconstruction
3904 fNonHFE = new AliSelectNonHFE();
3905 fNonHFE->SetAODanalysis(fIsAOD);
3906 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
3907 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
3908 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
3909 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
3910 fNonHFE->SetAlgorithm("DCA"); //KF
3911 fNonHFE->SetPIDresponse(fPidResponse);
3912 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
3913 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
3916 fNonHFE->SetHistAngleBack(fOpAngleBack);
3917 fNonHFE->SetHistAngle(fOpAngle);
3918 fNonHFE->SetHistDCABack(fDCABack);
3919 fNonHFE->SetHistDCA(fDCA);
3920 fNonHFE->SetHistMassBack(fInvMassBack);
3921 fNonHFE->SetHistMass(fInvMass);
3923 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
3925 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
3926 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
3927 Bool_t fUlsIsPartner = kFALSE;
3928 Bool_t fLsIsPartner = kFALSE;
3929 ///#################################################################
3932 //Electron Information
3933 Double_t fPhiE = -999;
3934 Double_t fEtaE = -999;
3935 Double_t fPhiH = -999;
3936 Double_t fEtaH = -999;
3937 Double_t fDphi = -999;
3938 Double_t fDeta = -999;
3939 Double_t fPtE = -999;
3940 Double_t fPtH = -999;
3942 Double_t pi = TMath::Pi();
3944 fPhiE = track->Phi();
3945 fEtaE = track->Eta();
3949 ///_________________________________________________________________
3955 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3957 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3958 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3963 if(fNonHFE->IsULS()) fPtElec_ULS_NoPid->Fill(fPtE,fNonHFE->GetNULS());
3964 if(fNonHFE->IsLS()) fPtElec_LS_NoPid->Fill(fPtE,fNonHFE->GetNLS());
3968 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3970 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3971 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3978 ///_________________________________________________________________
3981 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3982 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3988 //__________________________________________________________________
3989 //Event Mixing Analysis - Hadron Loop
3991 if(fEventMixingFlag)
3993 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
3995 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
3997 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
3999 fPoolNevents->Fill(fPool->GetCurrentNEvents());
4001 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
4003 TObjArray* bgTracks = fPool->GetEvent(jMix);
4005 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
4007 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
4008 if (NULL == MixedTrack) continue;
4010 fPhiH = MixedTrack->Phi();
4011 fEtaH = MixedTrack->Eta();
4012 fPtH = MixedTrack->Pt();
4014 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4016 fDphi = fPhiE - fPhiH;
4018 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4019 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4021 fDeta = fEtaE - fEtaH;
4023 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4025 for(Int_t i = 0; i < 6; i++)
4027 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4029 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
4031 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
4032 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
4034 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4035 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4039 // TODO your code: do event mixing with current event and bgTracks
4040 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
4045 //__________________________________________________________________
4047 //__________________________________________________________________
4048 //Same Event Analysis - Hadron Loop
4049 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4051 if(trackIndex==iTracks) continue;
4053 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4056 printf("ERROR: Could not receive track %d\n", iTracks);
4060 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4062 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4066 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4067 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4068 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4069 if(atrack2->GetTPCNcls() < 80) continue;
4070 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4074 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4075 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4078 fPhiH = track2->Phi();
4079 fEtaH = track2->Eta();
4080 fPtH = track2->Pt();
4082 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4084 fDphi = fPhiE - fPhiH;
4086 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4087 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4089 fDeta = fEtaE - fEtaH;
4091 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4093 //______________________________________________________________
4094 //Check if this track is a Non-HFE partner
4095 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
4097 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
4099 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
4101 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
4103 //______________________________________________________________
4105 for(Int_t i = 0; i < 6; i++)
4107 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4109 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
4111 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
4112 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
4113 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
4114 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
4116 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4117 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4118 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4119 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4125 //____________________________________________________________________________________________________________
4126 //Create a TObjArray with selected hadrons, for the mixed event analysis
4127 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
4129 fTracksClone = new TObjArray;
4130 fTracksClone->SetOwner(kTRUE);
4132 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4134 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4137 printf("ERROR: Could not receive track %d\n", iTracks);
4141 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4143 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4147 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4148 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4149 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4150 if(atrack2->GetTPCNcls() < 80) continue;
4151 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4155 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4156 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4159 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
4161 return fTracksClone;
4163 //____________________________________________________________________________________________________________
4165 //______________________________________________________________________
4166 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
4168 //________________________________________________
4169 //Associated particle cut
4170 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
4171 fPartnerCuts->SetRequireITSRefit(kTRUE);
4172 fPartnerCuts->SetRequireTPCRefit(kTRUE);
4173 fPartnerCuts->SetEtaRange(-0.9,0.9);
4174 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
4175 fPartnerCuts->SetMinNClustersTPC(80);
4176 fPartnerCuts->SetPtRange(0.3,1e10);
4177 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
4178 //fPartnerCuts->SetMaxDCAToVertexXY(1);
4179 //fPartnerCuts->SetMaxDCAToVertexZ(3);
4180 //_________________________________________________
4182 //Electron Information
4183 Double_t fPhiE = -999;
4184 Double_t fEtaE = -999;
4185 Double_t fPhiH = -999;
4186 Double_t fEtaH = -999;
4187 Double_t fDphi = -999;
4188 Double_t fDeta = -999;
4189 Double_t fPtE = -999;
4190 Double_t fPtH = -999;
4192 Double_t pi = TMath::Pi();
4194 fPhiE = track->Phi();
4195 fEtaE = track->Eta();
4198 //__________________________________________________________________
4199 //Same Event Analysis - Hadron Loop
4200 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4202 if(trackIndex==iTracks) continue;
4204 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4207 printf("ERROR: Could not receive track %d\n", iTracks);
4211 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4212 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4216 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4217 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4218 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4219 if(atrack2->GetTPCNcls() < 80) continue;
4220 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4224 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4225 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4228 fPhiH = track2->Phi();
4229 fEtaH = track2->Eta();
4230 fPtH = track2->Pt();
4232 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4234 fDphi = fPhiE - fPhiH;
4236 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4237 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4239 fDeta = fEtaE - fEtaH;
4241 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4243 for(Int_t i = 0; i < 6; i++)
4245 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4247 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
4252 //____________________________________________________________________________________________________________
4254 //______________________________________________________________________
4255 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
4262 fIsFromPi0 = kFALSE;
4263 fIsFromEta = kFALSE;
4264 fIsFromGamma = kFALSE;
4266 if(mcIndex < 0 || !fIsMC)
4272 Int_t mpdg = -99999;
4273 Int_t gmpdg = -99999;
4274 Int_t ggmpdg = -99999;
4275 Int_t gggmpdg = -99999;
4279 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
4281 pdg = TMath::Abs(fMCparticle->GetPdgCode());
4291 fIsFromPi0 = kFALSE;
4292 fIsFromEta = kFALSE;
4293 fIsFromGamma = kFALSE;
4297 if(fMCparticle->GetMother()<0)
4304 fIsFromPi0 = kFALSE;
4305 fIsFromEta = kFALSE;
4306 fIsFromGamma = kFALSE;
4310 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
4311 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
4313 if(fMCparticleMother->GetMother()<0)
4321 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
4322 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
4323 if(fMCparticleGMother->GetMother()<0)
4330 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
4331 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
4332 if(fMCparticleGGMother->GetMother()<0)
4338 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
4339 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
4346 fMCtrack = fMCstack->Particle(mcIndex);
4348 pdg = TMath::Abs(fMCtrack->GetPdgCode());
4357 fIsFromPi0 = kFALSE;
4358 fIsFromEta = kFALSE;
4359 fIsFromGamma = kFALSE;
4363 if(fMCtrack->GetFirstMother()<0)
4370 fIsFromPi0 = kFALSE;
4371 fIsFromEta = kFALSE;
4372 fIsFromGamma = kFALSE;
4376 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
4377 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
4379 if(fMCtrackMother->GetFirstMother()<0)
4387 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
4388 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
4390 if(fMCtrackGMother->GetFirstMother()<0)
4397 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
4398 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
4400 if(fMCtrackGGMother->GetFirstMother()<0)
4406 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
4407 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
4413 //Tag Electron Source
4414 if(mpdg==111 || mpdg==221 || mpdg==22)
4422 fIsFromPi0 = kFALSE;
4423 fIsFromEta = kFALSE;
4424 fIsFromGamma = kFALSE;
4426 if(mpdg==111) fIsFromPi0 = kFALSE;
4427 if(mpdg==221)fIsFromEta = kFALSE;
4428 if(mpdg==22) fIsFromGamma = kFALSE;
4437 fIsFromPi0 = kFALSE;
4438 fIsFromEta = kFALSE;
4439 fIsFromGamma = kFALSE;
4446 if(mpdg>400 && mpdg<500)
4448 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
4463 else if(mpdg>500 && mpdg<600)
4480 Bool_t AliAnalysisTaskEMCalHFEpA::ContainsBadChannel(TString calorimeter,UShort_t* cellList, Int_t nCells)
4482 // Check that in the cluster cells, there is no bad channel of those stored
4483 // in fEMCALBadChannelMap
4484 // adapted from AliCalorimeterUtils
4486 //if (!fRemoveBadChannels) return kFALSE;
4487 //printf("fEMCALBadChannelMap %p, fPHOSBadChannelMap %p \n",fEMCALBadChannelMap,fPHOSBadChannelMap);
4488 if( !fEMCALRecoUtils->GetEMCALChannelStatusMap(0)) return kFALSE;
4493 for(Int_t iCell = 0; iCell<nCells; iCell++){
4495 //Get the column and row
4496 if(calorimeter == "EMCAL"){
4497 return fEMCALRecoUtils->ClusterContainsBadChannel((AliEMCALGeometry*)fEMCALGeo,cellList,nCells);
4501 }// cell cluster loop
4509 //________________________________________________________________________________
4510 TArrayI AliAnalysisTaskEMCalHFEpA::GetTriggerPatches(Bool_t IsEventEMCALL0, Bool_t IsEventEMCALL1)
4512 // Select the patches that triggered
4513 // Depend on L0 or L1
4516 //Int_t trigtimes[30], globCol, globRow,ntimes, i;
4517 Int_t globCol, globRow;
4519 Int_t absId = -1; //[100];
4524 // get object pointer
4525 AliVCaloTrigger *caloTrigger = InputEvent()->GetCaloTrigger( "EMCAL" );
4527 // class is not empty
4528 if( caloTrigger->GetEntries() > 0 )
4530 // must reset before usage, or the class will fail
4531 caloTrigger->Reset();
4533 // go throuth the trigger channels
4534 while( caloTrigger->Next() )
4536 // get position in global 2x2 tower coordinates
4537 caloTrigger->GetPosition( globCol, globRow );
4546 else if(IsEventEMCALL1) // L1
4549 caloTrigger->GetTriggerBits(bit);
4551 Bool_t isEGA = ((bit >> fBitEGA) & 0x1);
4552 //Bool_t isEJE = ((bit >> fBitEJE) & 0x1) && IsEventEMCALL1Jet () ;
4554 if(!isEGA) continue;
4556 Int_t patchsize = -1;
4557 if(isEGA) patchsize = 2;
4558 //else if (isEJE) patchsize = 16;
4560 // add 2x2 (EGA) or 16x16 (EJE) patches
4561 for(Int_t irow=0; irow < patchsize; irow++)
4563 for(Int_t icol=0; icol < patchsize; icol++)
4565 GetCaloUtils()->GetEMCALGeometry()->GetAbsFastORIndexFromPositionInEMCAL(globCol+icol,globRow+irow, absId);
4566 //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absIDTrig[nTrig]);
4567 patches.Set(nPatch+1); // Set size of this array to nPatch+1 ints.
4568 patches.AddAt(absId,nPatch++); //Add Int_t absId at position nPatch++
4574 } // trigger iterator
4575 } // go thorough triggers
4577 printf("N patches %d, test %d,first %d, last %d\n",patches.GetSize(), nPatch, patches.At(0), patches.At(patches.GetSize()-1));
4582 Double_t AliAnalysisTaskEMCalHFEpA::CalculateWeight(Int_t pdg_particle, Double_t x)
4584 //weight for d3 based on MinJung parametrization //sent by Jan
4586 if(pdg_particle==111){
4587 if(x>= 0.100000 && x < 0.112797 ) weight=1.262120;
4588 if(x>= 0.112797 && x < 0.127231 ) weight=1.277765;
4589 if(x>= 0.127231 && x < 0.143512 ) weight=1.295605;
4590 if(x>= 0.143512 && x < 0.161877 ) weight=1.318155;
4591 if(x>= 0.161877 && x < 0.182592 ) weight=1.348693;
4592 if(x>= 0.182592 && x < 0.205957 ) weight=1.388636;
4593 if(x>= 0.205957 && x < 0.232313 ) weight=1.439122;
4594 if(x>= 0.232313 && x < 0.262041 ) weight=1.497452;
4595 if(x>= 0.262041 && x < 0.295573 ) weight=1.559409;
4596 if(x>= 0.295573 && x < 0.333397 ) weight=1.615169;
4597 if(x>= 0.333397 && x < 0.376060 ) weight=1.654954;
4598 if(x>= 0.376060 && x < 0.424183 ) weight=1.668753;
4599 if(x>= 0.424183 && x < 0.478465 ) weight=1.652225;
4600 if(x>= 0.478465 && x < 0.539692 ) weight=1.603119;
4601 if(x>= 0.539692 && x < 0.608754 ) weight=1.526049;
4602 if(x>= 0.608754 && x < 0.686654 ) weight=1.426724;
4603 if(x>= 0.686654 && x < 0.774523 ) weight=1.312684;
4604 if(x>= 0.774523 && x < 0.873636 ) weight=1.195395;
4605 if(x>= 0.873636 && x < 0.985432 ) weight=1.086264;
4606 if(x>= 0.985432 && x < 1.111534 ) weight=0.993666;
4607 if(x>= 1.111534 && x < 1.253773 ) weight=0.922587;
4608 if(x>= 1.253773 && x < 1.414214 ) weight=0.875739;
4609 if(x>= 1.414214 && x < 1.595185 ) weight=0.852181;
4610 if(x>= 1.595185 && x < 1.799315 ) weight=0.847828;
4611 if(x>= 1.799315 && x < 2.029567 ) weight=0.863875;
4612 if(x>= 2.029567 && x < 2.289283 ) weight=0.899112;
4613 if(x>= 2.289283 && x < 2.582235 ) weight=0.955194;
4614 if(x>= 2.582235 && x < 2.912674 ) weight=1.033824;
4615 if(x>= 2.912674 && x < 3.285398 ) weight=1.133714;
4616 if(x>= 3.285398 && x < 3.705818 ) weight=1.259471;
4617 if(x>= 3.705818 && x < 4.180038 ) weight=1.406883;
4618 if(x>= 4.180038 && x < 4.714942 ) weight=1.578923;
4619 if(x>= 4.714942 && x < 5.318296 ) weight=1.778513;
4620 if(x>= 5.318296 && x < 5.998859 ) weight=2.001171;
4621 if(x>= 5.998859 && x < 6.766511 ) weight=2.223161;
4622 if(x>= 6.766511 && x < 7.632396 ) weight=2.449445;
4623 if(x>= 7.632396 && x < 8.609086 ) weight=2.661734;
4624 if(x>= 8.609086 && x < 9.710759 ) weight=2.851935;
4625 if(x>= 9.710759 && x < 10.953409 ) weight=2.974319;
4626 if(x>= 10.953409 && x < 12.355077 ) weight=3.106314;
4627 if(x>= 12.355077 && x < 13.936111 ) weight=3.126815;
4628 if(x>= 13.936111 && x < 15.719464 ) weight=3.150053;
4629 if(x>= 15.719464 && x < 17.731026 ) weight=3.218509;
4630 if(x>= 17.731026 && x < 20.000000 ) weight=3.252141;
4633 else if(pdg_particle==221){
4634 if(x>= 0.100000 && x < 0.112797 ) weight=2.159358;
4635 if(x>= 0.112797 && x < 0.127231 ) weight=2.145546;
4636 if(x>= 0.127231 && x < 0.143512 ) weight=2.132390;
4637 if(x>= 0.143512 && x < 0.161877 ) weight=2.109918;
4638 if(x>= 0.161877 && x < 0.182592 ) weight=2.084920;
4639 if(x>= 0.182592 && x < 0.205957 ) weight=2.054302;
4640 if(x>= 0.205957 && x < 0.232313 ) weight=2.015202;
4641 if(x>= 0.232313 && x < 0.262041 ) weight=1.966068;
4642 if(x>= 0.262041 && x < 0.295573 ) weight=1.912255;
4643 if(x>= 0.295573 && x < 0.333397 ) weight=1.844087;
4644 if(x>= 0.333397 && x < 0.376060 ) weight=1.767913;
4645 if(x>= 0.376060 && x < 0.424183 ) weight=1.680366;
4646 if(x>= 0.424183 && x < 0.478465 ) weight=1.583468;
4647 if(x>= 0.478465 && x < 0.539692 ) weight=1.475131;
4648 if(x>= 0.539692 && x < 0.608754 ) weight=1.361436;
4649 if(x>= 0.608754 && x < 0.686654 ) weight=1.244388;
4650 if(x>= 0.686654 && x < 0.774523 ) weight=1.125973;
4651 if(x>= 0.774523 && x < 0.873636 ) weight=1.015769;
4652 if(x>= 0.873636 && x < 0.985432 ) weight=0.914579;
4653 if(x>= 0.985432 && x < 1.111534 ) weight=0.830529;
4654 if(x>= 1.111534 && x < 1.253773 ) weight=0.766397;
4655 if(x>= 1.253773 && x < 1.414214 ) weight=0.723663;
4656 if(x>= 1.414214 && x < 1.595185 ) weight=0.701236;
4657 if(x>= 1.595185 && x < 1.799315 ) weight=0.695605;
4658 if(x>= 1.799315 && x < 2.029567 ) weight=0.707578;
4659 if(x>= 2.029567 && x < 2.289283 ) weight=0.735194;
4660 if(x>= 2.289283 && x < 2.582235 ) weight=0.781052;
4661 if(x>= 2.582235 && x < 2.912674 ) weight=0.842350;
4662 if(x>= 2.912674 && x < 3.285398 ) weight=0.923676;
4663 if(x>= 3.285398 && x < 3.705818 ) weight=1.028317;
4664 if(x>= 3.705818 && x < 4.180038 ) weight=1.154029;
4665 if(x>= 4.180038 && x < 4.714942 ) weight=1.296915;
4666 if(x>= 4.714942 && x < 5.318296 ) weight=1.463674;
4667 if(x>= 5.318296 && x < 5.998859 ) weight=1.651985;
4668 if(x>= 5.998859 && x < 6.766511 ) weight=1.847912;
4669 if(x>= 6.766511 && x < 7.632396 ) weight=2.066284;
4670 if(x>= 7.632396 && x < 8.609086 ) weight=2.202231;
4671 if(x>= 8.609086 && x < 9.710759 ) weight=2.399942;
4672 if(x>= 9.710759 && x < 10.953409 ) weight=2.555106;
4673 if(x>= 10.953409 && x < 12.355077 ) weight=2.632377;
4674 if(x>= 12.355077 && x < 13.936111 ) weight=2.609660;
4675 if(x>= 13.936111 && x < 15.719464 ) weight=2.656343;
4676 if(x>= 15.719464 && x < 17.731026 ) weight=2.615438;
4677 if(x>= 17.731026 && x < 20.000000 ) weight=2.576269;