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: September 16, 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 ,fEoverPnsigma(kFALSE)
134 ,fAssocWithSPD(kFALSE)
144 ,fIsFromGamma(kFALSE)
148 ,fPartnerCuts(new AliESDtrackCuts())
151 ,fNonHFE(new AliSelectNonHFE())
156 ,fHasCentralitySelection(kFALSE)
158 ,fCentralityHistPass(0)
179 ,fPtElec_ULS_NoPid(0)
182 ,fPtElec_ULS_MC_weight(0)
186 ,fPtElec_ULS_mc_closure(0)
187 ,fPtElec_LS_mc_closure(0)
188 ,fPtElec_ULS2_mc_closure(0)
189 ,fPtElec_LS2_mc_closure(0)
191 ,fPtElec_ULS_weight(0)
192 ,fPtElec_LS_weight(0)
193 ,fPtElec_ULS2_weight(0)
194 ,fPtElec_LS2_weight(0)
199 ,fEoverP_pt_true_electrons(0)
200 ,fEoverP_pt_true_hadrons(0)
201 ,fEoverP_pt_true_electrons0(0)
202 ,fEoverP_pt_true_hadrons0(0)
205 ,fEoverP_tpc_p_trigger(0)
206 ,fEoverP_tpc_pt_trigger(0)
212 ,fTPCnsigma_p_TPC_on_EMCal_acc(0)
213 ,fTPCnsigma_p_TPC_EoverP_cut(0)
216 ,fShowerShapeM02_EoverP(0)
217 ,fShowerShapeM20_EoverP(0)
224 ,fECluster_not_exotic(0)
225 ,fECluster_not_exotic1(0)
226 ,fECluster_not_exotic2(0)
229 ,fNCluster_pure_aod(0)
230 ,fNCluster_ECluster(0)
232 ,fNcells_energy_elec_selected(0)
233 ,fNcells_energy_not_exotic(0)
239 ,fpt_reco_pt_MC_num(0)
240 ,fpt_reco_pt_MC_den(0)
269 ,fNcells_electrons(0)
276 ,fTPCnsigma_eta_electrons(0)
277 ,fTPCnsigma_eta_hadrons(0)
280 ,fnsigma_p_EoverPcut(0)
281 ,fEoverP_pt_pions2(0)
283 ,fEoverP_pt_hadrons(0)
289 ,fCEtaPhi_ULS_Weight(0)
290 ,fCEtaPhi_LS_Weight(0)
291 ,fCEtaPhi_ULS_NoP_Weight(0)
292 ,fCEtaPhi_LS_NoP_Weight(0)
318 ,fDCAcut(999)//dca between two tracks
319 ,fDCAcutr(999)//dca to vertex
320 ,fDCAcutz(999)//dca to vertex
322 ,fAngleCutFlag(kFALSE)
323 ,fChi2CutFlag(kFALSE)
325 ,fAssHadronPtMin(0.5)
326 ,fAssHadronPtMax(2.0)
327 ,fPtBackgroundBeforeReco(0)
328 ,fPtBackgroundBeforeReco2(0)
329 ,fPtBackgroundBeforeReco_weight(0)
330 ,fPtBackgroundBeforeReco2_weight(0)
333 ,fPtBackgroundAfterReco(0)
337 ,fPtMCparticleAll_nonPrimary(0)
338 ,fPtMCparticleAlle_nonPrimary(0)
339 ,fPtMCparticleAlle_Primary(0)
340 ,fPtMCparticleReco(0)
341 ,fPtMCparticleReco_nonPrimary(0)
342 ,fPtMCparticleAllHfe1(0)
343 ,fPtMCparticleRecoHfe1(0)
344 ,fPtMCparticleAllHfe2(0)
345 ,fPtMCparticleRecoHfe2(0)
346 ,fPtMCelectronAfterAll(0)
347 ,fPtMCelectronAfterAll_unfolding(0)
348 ,fPtMCelectronAfterAll_nonPrimary(0)
349 ,fPtMCelectronAfterAll_Primary(0)
357 ,fPtMC_EMCal_Selected(0)
359 ,fPtMC_TPC_Selected(0)
360 ,fPt_track_match_den(0)
361 ,fPt_track_match_num(0)
363 ,fPtMCWithoutLabel(0)
364 ,fPtIsPhysicaPrimary(0)
368 ,fPID(new AliHFEpid("hfePid"))
372 ,fRejectKinkMother(kFALSE)
377 ,fMCtrackGGGMother(0)
382 ,fMCparticleMother(0)
383 ,fMCparticleGMother(0)
384 ,fMCparticleGGMother(0)
385 ,fMCparticleGGGMother(0)
395 ,fCEtaPhi_ULS_Weight_EM(0)
396 ,fCEtaPhi_LS_Weight_EM(0)
399 ,fCEtaPhi_Inc_DiHadron(0)
401 //,fEMCALRecoUtils(new AliEMCALRecoUtils)
406 //,fEMCALRecoUtils(0)//exotic
410 // Define input and output slots here
411 // Input slot #0 works with a TChain
414 //fEMCALRecoUtils = new AliEMCALRecoUtils();
416 DefineInput(0, TChain::Class());
417 // Output slot #0 id reserved by the base class for AOD
418 // Output slot #1 writes into a TH1 container
419 // DefineOutput(1, TH1I::Class());
420 DefineOutput(1, TList::Class());
421 // DefineOutput(3, TTree::Class());
424 //________________________________________________________________________
425 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
426 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
432 ,fUseShowerShapeCut(kFALSE)
433 ,fFillBackground(kFALSE)
434 ,fEoverPnsigma(kFALSE)
435 ,fAssocWithSPD(kFALSE)
445 ,fIsFromGamma(kFALSE)
449 ,fPartnerCuts(new AliESDtrackCuts())
452 ,fNonHFE(new AliSelectNonHFE())
457 ,fHasCentralitySelection(kFALSE)
459 ,fCentralityHistPass(0)
479 ,fPtElec_ULS_NoPid(0)
482 ,fPtElec_ULS_MC_weight(0)
486 ,fPtElec_ULS_mc_closure(0)
487 ,fPtElec_LS_mc_closure(0)
488 ,fPtElec_ULS2_mc_closure(0)
489 ,fPtElec_LS2_mc_closure(0)
491 ,fPtElec_ULS_weight(0)
492 ,fPtElec_LS_weight(0)
493 ,fPtElec_ULS2_weight(0)
494 ,fPtElec_LS2_weight(0)
499 ,fEoverP_pt_true_electrons(0)
500 ,fEoverP_pt_true_hadrons(0)
501 ,fEoverP_pt_true_electrons0(0)
502 ,fEoverP_pt_true_hadrons0(0)
505 ,fEoverP_tpc_p_trigger(0)
506 ,fEoverP_tpc_pt_trigger(0)
512 ,fTPCnsigma_p_TPC_on_EMCal_acc(0)
513 ,fTPCnsigma_p_TPC_EoverP_cut(0)
516 ,fShowerShapeM02_EoverP(0)
517 ,fShowerShapeM20_EoverP(0)
524 ,fECluster_not_exotic(0)
525 ,fECluster_not_exotic1(0)
526 ,fECluster_not_exotic2(0)
529 ,fNCluster_pure_aod(0)
530 ,fNCluster_ECluster(0)
532 ,fNcells_energy_elec_selected(0)
533 ,fNcells_energy_not_exotic(0)
538 ,fpt_reco_pt_MC_num(0)
539 ,fpt_reco_pt_MC_den(0)
569 ,fNcells_electrons(0)
576 ,fTPCnsigma_eta_electrons(0)
577 ,fTPCnsigma_eta_hadrons(0)
580 ,fnsigma_p_EoverPcut(0)
581 ,fEoverP_pt_pions2(0)
583 ,fEoverP_pt_hadrons(0)
589 ,fCEtaPhi_ULS_Weight(0)
590 ,fCEtaPhi_LS_Weight(0)
591 ,fCEtaPhi_ULS_NoP_Weight(0)
592 ,fCEtaPhi_LS_NoP_Weight(0)
618 ,fDCAcut(999)//dca between two tracks
619 ,fDCAcutr(999)//dca to vertex
620 ,fDCAcutz(999)//dca to vertex
622 ,fAngleCutFlag(kFALSE)
623 ,fChi2CutFlag(kFALSE)
625 ,fAssHadronPtMin(0.5)
626 ,fAssHadronPtMax(2.0)
627 ,fPtBackgroundBeforeReco(0)
628 ,fPtBackgroundBeforeReco2(0)
629 ,fPtBackgroundBeforeReco_weight(0)
630 ,fPtBackgroundBeforeReco2_weight(0)
633 ,fPtBackgroundAfterReco(0)
637 ,fPtMCparticleAll_nonPrimary(0)
638 ,fPtMCparticleAlle_nonPrimary(0)
639 ,fPtMCparticleAlle_Primary(0)
640 ,fPtMCparticleReco(0)
641 ,fPtMCparticleReco_nonPrimary(0)
642 ,fPtMCparticleAllHfe1(0)
643 ,fPtMCparticleRecoHfe1(0)
644 ,fPtMCparticleAllHfe2(0)
645 ,fPtMCparticleRecoHfe2(0)
646 ,fPtMCelectronAfterAll(0)
647 ,fPtMCelectronAfterAll_unfolding(0)
648 ,fPtMCelectronAfterAll_nonPrimary(0)
649 ,fPtMCelectronAfterAll_Primary(0)
657 ,fPtMC_EMCal_Selected(0)
659 ,fPtMC_TPC_Selected(0)
660 ,fPt_track_match_den(0)
661 ,fPt_track_match_num(0)
663 ,fPtMCWithoutLabel(0)
664 ,fPtIsPhysicaPrimary(0)
669 ,fPID(new AliHFEpid("hfePid"))
672 ,fRejectKinkMother(kFALSE)
677 ,fMCtrackGGGMother(0)
682 ,fMCparticleMother(0)
683 ,fMCparticleGMother(0)
684 ,fMCparticleGGMother(0)
685 ,fMCparticleGGGMother(0)
695 ,fCEtaPhi_ULS_Weight_EM(0)
696 ,fCEtaPhi_LS_Weight_EM(0)
699 ,fCEtaPhi_Inc_DiHadron(0)
701 //,fEMCALRecoUtils(new AliEMCALRecoUtils)
705 //,fEMCALRecoUtils(0)//exotic
708 // Define input and output slots here
709 // Input slot #0 works with a TChain
712 // fEMCALRecoUtils = new AliEMCALRecoUtils();
714 DefineInput(0, TChain::Class());
715 // Output slot #0 id reserved by the base class for AOD
716 // Output slot #1 writes into a TH1 container
717 // DefineOutput(1, TH1I::Class());
718 DefineOutput(1, TList::Class());
719 //DefineOutput(3, TTree::Class());
722 //______________________________________________________________________
723 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
732 //if(fEMCALRecoUtils) delete fEMCALRecoUtils ;
735 //______________________________________________________________________
736 //Create Output Objects
737 //Here we can define the histograms and others output files
739 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
741 //______________________________________________________________________
743 if(!fPID->GetNumberOfPIDdetectors())
745 fPID->AddDetector("TPC", 0);
748 fPID->SortDetectors();
750 fPIDqa = new AliHFEpidQAmanager();
751 fPIDqa->Initialize(fPID);
752 //______________________________________________________________________
754 //______________________________________________________________________
755 //Initialize correction Framework and Cuts
756 fCFM = new AliCFManager;
757 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
758 fCFM->SetNStepParticle(kNcutSteps);
759 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
763 AliWarning("Cuts not available. Default cuts will be used");
764 fCuts = new AliHFEcuts;
765 fCuts->CreateStandardCuts();
768 fCuts->Initialize(fCFM);
769 //______________________________________________________________________
771 ///___________________//Lucile
774 // reader = new AliCaloTrackAODReader();
776 //___________________________________________________
779 fOutputList = new TList();
780 fOutputList->SetOwner();
783 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
785 //Store the number of events
787 fNevent = new TH1F("fNevent","Number of Events",30,0,30);
788 fNevent2 = new TH1F("fNevent2","Number of Events 2",30,0,30);
789 //And then, add to the output list
790 fOutputList->Add(fNevent);
791 fOutputList->Add(fNevent2);
793 fpid = new TH1F("fpid","PID flag",5,0,5);
794 fOutputList->Add(fpid);
797 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
799 fPtPrim = new TH1F("fPtPrim","Primary Electrons aod track; p_{T} (GeV/c); Count",300,0,30);
800 fPtSec = new TH1F("fPtSec","Secundary Electrons aod track; p_{T} (GeV/c); Count",300,0,30);
801 fPtPrim2 = new TH1F("fPtPrim2","Primary Electrons vtrack; p_{T} (GeV/c); Count",300,0,30);
802 fPtSec2 = new TH1F("fPtSec2","Secundary Electrons vtrack; p_{T} (GeV/c); Count",300,0,30);
805 fPtElec_ULS = new TH1F("fPtElec_ULS","ULS; p_{T} (GeV/c); Count",300,0,30);
806 fPtElec_LS = new TH1F("fPtElec_LS","LS; p_{T} (GeV/c); Count",300,0,30);
808 fPtElec_ULS_NoPid = new TH1F("fPtElec_ULS_NoPid","ULS; p_{T} (GeV/c); Count",300,0,30);
809 fPtElec_LS_NoPid = new TH1F("fPtElec_LS_NoPid","LS; p_{T} (GeV/c); Count",300,0,30);
811 fPtElec_ULS_MC = new TH1F("fPtElec_ULS_MC","ULS; p_{T} (GeV/c); Count",300,0,30);
812 fPtElec_ULS_MC_weight = new TH1F("fPtElec_ULS_MC_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
814 fPtElec_ULS_weight = new TH1F("fPtElec_ULS_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
815 fPtElec_LS_weight = new TH1F("fPtElec_LS_weight","LS; p_{T} (GeV/c); Count",300,0,30);
817 fTOF01 = new TH2F("fTOF01","",200,-20,20,200,-20,20);
818 fTOF02 = new TH2F("fTOF02","",200,-20,20,200,-20,20);
819 fTOF03 = new TH2F("fTOF03","",200,-20,20,200,-20,20);
822 fPtElec_ULS2 = new TH1F("fPtElec_ULS2","ULS; p_{T} (GeV/c); Count",300,0,30);
823 fPtElec_LS2 = new TH1F("fPtElec_LS2","LS; p_{T} (GeV/c); Count",300,0,30);
825 fPtElec_ULS2_weight = new TH1F("fPtElec_ULS2_weight","ULS; p_{T} (GeV/c); Count",300,0,30);
826 fPtElec_LS2_weight = new TH1F("fPtElec_LS2_weight","LS; p_{T} (GeV/c); Count",300,0,30);
829 fPtElec_ULS_mc_closure = new TH1F("fPtElec_ULS_mc_closure","ULS; p_{T} (GeV/c); Count",300,0,30);
830 fPtElec_LS_mc_closure = new TH1F("fPtElec_LS_mc_closure","LS; p_{T} (GeV/c); Count",300,0,30);
831 fPtElec_ULS2_mc_closure = new TH1F("fPtElec_ULS2_mc_closure","ULS; p_{T} (GeV/c); Count",300,0,30);
832 fPtElec_LS2_mc_closure = new TH1F("fPtElec_LS2_mc_closure","LS; p_{T} (GeV/c); Count",300,0,30);
838 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",300,0,30);
839 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
841 //new histos for TPC signal -> Can be used for any p range
842 fTPCnsigma_p_TPC = new TH2F("fTPCnsigma_p_TPC",";p (GeV/c);TPC Electron N#sigma",3000,0,30,1000,-15,10);
843 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);
844 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);
847 fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
848 fEtaPhi_num=new TH2F("fEtaPhi_num","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
849 fEtaPhi_den=new TH2F("fEtaPhi_den","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
850 fEtaPhi_data=new TH2F("fEtaPhi_data","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
852 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);
853 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);
856 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
857 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
859 fECluster_pure= new TH1F("fECluster_pure", ";ECluster pure",2000,0,100);
860 fECluster_not_exotic= new TH1F("fECluster_not_exotic", ";ECluster not exotic - function ",2000,0,100);
862 fECluster_not_exotic1= new TH1F("fECluster_not_exotic1", ";ECluster not exotic Ncells > E/3+1",2000,0,100);
864 fECluster_not_exotic2= new TH1F("fECluster_not_exotic2", ";ECluster not exotic 2",2000,0,100);
865 fECluster_exotic= new TH1F("fECluster_exotic", ";ECluster exotic",2000,0,100);
867 //not associated with tracks
868 fNCluster_pure= new TH1F("fNCluster_pure", ";Number of clusters - pure",2000,-1,1999);
869 fNCluster_pure_aod= new TH1F("fNCluster_pure_aod", ";Number of clusters - pure -aod",2000,-1,1999);
870 fNCluster_ECluster= new TH2F("fNCluster_ECluster", ";Number of clusters vs. Energy of Cluster",2000,-1,1999, 4000, -1, 1999);
872 fNcells_energy= new TH2F("fNcells_energy", "all clusters;Number of cells;Energy of Cluster",100,0,100, 2000, 0, 100);
873 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);
874 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);
879 fTime = new TH2D("fTime","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
880 fTime2 = new TH2D("fTime2","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
883 ftimingEle = new TH2D("ftimingEle","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
884 ftimingEle2 = new TH2D("ftimingEle2","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
886 fShowerShape_ha = new TH2F("fShowerShape_ha","Shower Shape hadrons;M02;M20",500,0,1.8,500,0,1.8);
887 fShowerShape_ele = new TH2F("fShowerShape_ele","Shower Shape electrons;M02;M20",500,0,1.8,500,0,1.8);
889 fShowerShapeM02_EoverP = new TH2F("fShowerShapeM02_EoverP","Shower Shape;M02;E/p",500,0,1.8,500,0,1.8);
890 fShowerShapeM20_EoverP = new TH2F("fShowerShapeM20_EoverP","Shower Shape;M20;E/p",500,0,1.8,500,0,1.8);
894 fOutputList->Add(fTOF01);
895 fOutputList->Add(fTOF02);
896 fOutputList->Add(fTOF03);
898 fOutputList->Add(fEtaPhi_num);
899 fOutputList->Add(fEtaPhi_den);
900 fOutputList->Add(fEtaPhi_data);
902 fOutputList->Add(fpt_reco_pt_MC_num);
903 fOutputList->Add(fpt_reco_pt_MC_den);
906 fOutputList->Add(fPtElec_Inc);
907 fOutputList->Add(fPtElec_ULS);
908 fOutputList->Add(fPtElec_LS);
909 fOutputList->Add(fPtElec_ULS_NoPid);
910 fOutputList->Add(fPtElec_LS_NoPid);
911 fOutputList->Add(fPtElec_ULS_MC);
912 fOutputList->Add(fPtElec_ULS_MC_weight);
914 fOutputList->Add(fPtPrim);
915 fOutputList->Add(fPtSec);
916 fOutputList->Add(fPtPrim2);
917 fOutputList->Add(fPtSec2);
921 fOutputList->Add(fPtElec_ULS_weight);
922 fOutputList->Add(fPtElec_LS_weight);
925 fOutputList->Add(fPtElec_ULS2);
926 fOutputList->Add(fPtElec_LS2);
927 fOutputList->Add(fPtElec_ULS2_weight);
928 fOutputList->Add(fPtElec_LS2_weight);
930 fOutputList->Add(fPtElec_ULS_mc_closure);
931 fOutputList->Add(fPtElec_LS_mc_closure);
932 fOutputList->Add(fPtElec_ULS2_mc_closure);
933 fOutputList->Add(fPtElec_LS2_mc_closure);
937 fOutputList->Add(fPtTrigger_Inc);
938 fOutputList->Add(fTPCnsigma_pt_2D);
940 fOutputList->Add(fTPCnsigma_p_TPC);
941 fOutputList->Add(fTPCnsigma_p_TPC_on_EMCal_acc);
942 fOutputList->Add(fTPCnsigma_p_TPC_EoverP_cut);
946 fOutputList->Add(fShowerShapeCut);
948 fOutputList->Add(fCharge_n);
949 fOutputList->Add(fCharge_p);
951 fOutputList->Add(fECluster_pure);
952 fOutputList->Add(fECluster_not_exotic);
953 fOutputList->Add(fECluster_not_exotic1);
954 fOutputList->Add(fECluster_not_exotic2);
955 fOutputList->Add(fECluster_exotic);
957 fOutputList->Add(fNCluster_pure);
958 fOutputList->Add(fNCluster_pure_aod);
960 fOutputList->Add(fNCluster_ECluster);
961 fOutputList->Add(fNcells_energy);
962 fOutputList->Add(fNcells_energy_elec_selected);
963 fOutputList->Add(fNcells_energy_not_exotic);
969 fOutputList->Add(fTime);
970 fOutputList->Add(fTime2);
974 fOutputList->Add(ftimingEle);
975 fOutputList->Add(ftimingEle2);
977 fOutputList->Add(fShowerShape_ha);
978 fOutputList->Add(fShowerShape_ele);
980 fOutputList->Add(fShowerShapeM02_EoverP);
981 fOutputList->Add(fShowerShapeM20_EoverP);
987 fVtxZ_new1= new TH1F("fVtxZ_new1","fVtxZ_new1",4000, -50,50);
988 fVtxZ_new2= new TH1F("fVtxZ_new2","fVtxZ_new2",4000, -50,50);
989 fVtxZ_new3= new TH1F("fVtxZ_new3","fVtxZ_new3",4000, -50,50);
990 fVtxZ_new4= new TH1F("fVtxZ_new4","fVtxZ_new4",4000, -50,50);
992 fzRes1= new TH1F("fzRes1","fzRes1",4000, 0,1);
993 fzRes2= new TH1F("fzRes2","fzRes2",4000, 0,1);
994 fSPD_track_vtx1= new TH1F("fSPD_track_vtx1","fSPD_track_vtx1",4000, -5,5);
995 fSPD_track_vtx2= new TH1F("fSPD_track_vtx2","fSPD_track_vtx2",4000, -5,5);
1001 //Step 1: Before Track cuts
1002 //Step 2: Before PID
1005 fEoverP_pt = new TH2F *[3];
1006 fTPC_p = new TH2F *[3];
1007 fTPCnsigma_p = new TH2F *[3];
1009 fECluster= new TH1F *[3];
1010 fEtaPhi= new TH2F *[3];
1011 fVtxZ= new TH1F *[3];
1012 fEtad= new TH1F *[3];
1013 fNTracks= new TH1F *[3];
1015 fNTracks_pt= new TH2F *[3];
1016 fNTracks_eta= new TH2F *[3];
1017 fNTracks_phi= new TH2F *[3];
1019 fNClusters= new TH1F *[3];
1020 fTPCNcls_EoverP= new TH2F *[3];
1021 fTPCNcls_pid=new TH2F *[4];
1023 fEoverP_pt_true_electrons = new TH2F("fEoverP_pt_true_electrons",";p_{T} (GeV/c);E/p ",1000,0,30,2000,0,2);
1024 fOutputList->Add(fEoverP_pt_true_electrons);
1025 fEoverP_pt_true_electrons0 = new TH2F("fEoverP_pt_true_electrons0",";p_{T} (GeV/c);E/p ",1000,0,30,2000,0,2);
1026 fOutputList->Add(fEoverP_pt_true_electrons0);
1029 fEoverP_pt_true_hadrons = new TH2F("fEoverP_pt_true_hadrons",";p_{T} (GeV/c);E/p ",1000,0,30,2000,0,2);
1030 fOutputList->Add(fEoverP_pt_true_hadrons);
1031 fEoverP_pt_true_hadrons0 = new TH2F("fEoverP_pt_true_hadrons0",";p_{T} (GeV/c);E/p ",1000,0,30,2000,0,2);
1032 fOutputList->Add(fEoverP_pt_true_hadrons0);
1037 for(Int_t i = 0; i < 3; i++)
1039 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,2000,0,2);
1040 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);
1041 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
1044 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
1045 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
1046 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
1047 fEtad[i]= new TH1F(Form("fEtad%d",i),"Eta distribution",200, -1.2,1.2);
1048 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,5000);
1050 fNTracks_pt[i]= new TH2F(Form("fNTracks_pt%d",i),"NTracks vs. pt",1000, 0,5000, 1000, 0, 100);
1051 fNTracks_eta[i]= new TH2F(Form("fNTracks_eta%d",i),"NTracks vs. pt",1000, 0,5000, 500, -1.0, 1.0);
1052 fNTracks_phi[i]= new TH2F(Form("fNTracks_phi%d",i),"NTracks vs. pt",1000, 0,5000, 500, 0, 5.0);
1056 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
1057 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
1060 fOutputList->Add(fEoverP_pt[i]);
1061 fOutputList->Add(fTPC_p[i]);
1062 fOutputList->Add(fTPCnsigma_p[i]);
1065 fOutputList->Add(fECluster[i]);
1066 fOutputList->Add(fEtaPhi[i]);
1067 fOutputList->Add(fVtxZ[i]);
1068 fOutputList->Add(fEtad[i]);
1069 fOutputList->Add(fNTracks[i]);
1071 fOutputList->Add(fNTracks_pt[i]);
1072 fOutputList->Add(fNTracks_eta[i]);
1073 fOutputList->Add(fNTracks_phi[i]);
1075 fOutputList->Add(fNClusters[i]);
1076 fOutputList->Add(fTPCNcls_EoverP[i]);
1082 fTrack_Multi= new TH1F("fTrack_Multi","fTrack_Multi",1000, 0,1000);
1084 for(Int_t i = 0; i < 4; i++)
1086 fTPCNcls_pid[i]= new TH2F(Form("fTPCNcls_pid%d",i),"fTPCNcls_pid;NCls;NCls for PID",200,0,200,200,0,200);
1087 fOutputList->Add(fTPCNcls_pid[i]);
1091 Int_t fPtBin[7] = {1,2,4,6,8,10,15};
1094 Int_t fPtBin_trigger[11] = {1,2,4,6,8,10,12,14,16,18,20};
1095 fEoverP_tpc_p_trigger = new TH2F *[10];
1096 fEoverP_tpc_pt_trigger = new TH2F *[10];
1099 fEoverP_tpc = new TH2F *[6];
1100 fTPC_pt = new TH1F *[6];
1101 fTPCnsigma_pt = new TH1F *[6];
1106 fR_EoverP=new TH2F *[6];
1107 fNcells=new TH1F *[6];
1108 fNcells_EoverP=new TH2F *[6];
1109 fM02_EoverP= new TH2F *[6];
1110 fM20_EoverP= new TH2F *[6];
1111 fEoverP_ptbins=new TH1F *[6];
1112 fECluster_ptbins=new TH1F *[6];
1113 fEoverP_wSSCut=new TH1F *[6];
1114 fNcells_electrons=new TH1F *[6];
1115 fNcells_hadrons=new TH1F *[6];
1116 fTPCnsigma_eta_electrons=new TH2F *[6];
1117 fTPCnsigma_eta_hadrons=new TH2F *[6];
1119 if(fCorrelationFlag)
1121 fCEtaPhi_Inc = new TH2F *[6];
1122 fCEtaPhi_Inc_DiHadron = new TH2F *[6];
1124 fCEtaPhi_ULS = new TH2F *[6];
1125 fCEtaPhi_LS = new TH2F *[6];
1126 fCEtaPhi_ULS_NoP = new TH2F *[6];
1127 fCEtaPhi_LS_NoP = new TH2F *[6];
1129 fCEtaPhi_ULS_Weight = new TH2F *[6];
1130 fCEtaPhi_LS_Weight = new TH2F *[6];
1131 fCEtaPhi_ULS_NoP_Weight = new TH2F *[6];
1132 fCEtaPhi_LS_NoP_Weight = new TH2F *[6];
1134 fCEtaPhi_Inc_EM = new TH2F *[6];
1136 fCEtaPhi_ULS_EM = new TH2F *[6];
1137 fCEtaPhi_LS_EM = new TH2F *[6];
1139 fCEtaPhi_ULS_Weight_EM = new TH2F *[6];
1140 fCEtaPhi_LS_Weight_EM = new TH2F *[6];
1142 fInvMass = new TH1F("fInvMass","",200,0,0.3);
1143 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
1144 fDCA = new TH1F("fDCA","",200,0,1);
1145 fDCABack = new TH1F("fDCABack","",200,0,1);
1146 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
1147 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
1149 fOutputList->Add(fInvMass);
1150 fOutputList->Add(fInvMassBack);
1151 fOutputList->Add(fDCA);
1152 fOutputList->Add(fDCABack);
1153 fOutputList->Add(fOpAngle);
1154 fOutputList->Add(fOpAngleBack);
1157 if(fFillBackground){
1159 fInvMass = new TH1F("fInvMass","",200,0,0.3);
1160 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
1161 fDCA = new TH1F("fDCA","",200,0,1);
1162 fDCABack = new TH1F("fDCABack","",200,0,1);
1163 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
1164 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
1166 fOutputList->Add(fInvMass);
1167 fOutputList->Add(fInvMassBack);
1168 fOutputList->Add(fDCA);
1169 fOutputList->Add(fDCABack);
1170 fOutputList->Add(fOpAngle);
1171 fOutputList->Add(fOpAngleBack);
1173 //histos for TPC-only
1174 fInvMass2 = new TH1F("fInvMass2","",200,0,0.3);
1175 fInvMassBack2 = new TH1F("fInvMassBack2","",200,0,0.3);
1176 fDCA2 = new TH1F("fDCA2","",200,0,1);
1177 fDCABack2 = new TH1F("fDCABack2","",200,0,1);
1178 fOpAngle2 = new TH1F("fOpAngle2","",200,0,0.5);
1179 fOpAngleBack2 = new TH1F("fOpAngleBack2","",200,0,0.5);
1181 fOutputList->Add(fInvMass2);
1182 fOutputList->Add(fInvMassBack2);
1183 fOutputList->Add(fDCA2);
1184 fOutputList->Add(fDCABack2);
1185 fOutputList->Add(fOpAngle2);
1186 fOutputList->Add(fOpAngleBack2);
1190 //new histo for trigger data
1192 for(Int_t i = 0; i < 10; i++)
1194 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);
1195 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);
1196 fOutputList->Add(fEoverP_tpc_pt_trigger[i]);
1197 fOutputList->Add(fEoverP_tpc_p_trigger[i]);
1202 for(Int_t i = 0; i < 6; i++)
1204 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);
1205 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);
1206 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);
1208 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);
1209 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);
1210 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);
1211 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);
1212 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);
1213 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);
1214 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);
1215 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);
1216 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);
1217 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);
1218 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);
1219 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);
1220 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);
1221 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);
1222 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);
1224 fOutputList->Add(fEoverP_tpc[i]);
1225 fOutputList->Add(fTPC_pt[i]);
1226 fOutputList->Add(fTPCnsigma_pt[i]);
1228 fOutputList->Add(fEta[i]);
1229 fOutputList->Add(fPhi[i]);
1230 fOutputList->Add(fR[i]);
1231 fOutputList->Add(fR_EoverP[i]);
1232 fOutputList->Add(fNcells[i]);
1233 fOutputList->Add(fNcells_electrons[i]);
1234 fOutputList->Add(fNcells_hadrons[i]);
1235 fOutputList->Add(fNcells_EoverP[i]);
1236 fOutputList->Add(fECluster_ptbins[i]);
1237 fOutputList->Add(fEoverP_ptbins[i]);
1238 fOutputList->Add(fEoverP_wSSCut[i]);
1239 fOutputList->Add(fM02_EoverP[i]);
1240 fOutputList->Add(fM20_EoverP[i]);
1241 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
1242 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
1245 if(fCorrelationFlag)
1247 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);
1248 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);
1250 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);
1251 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);
1252 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);
1253 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);
1255 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);
1256 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);
1257 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);
1258 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);
1260 fOutputList->Add(fCEtaPhi_Inc[i]);
1261 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
1263 fOutputList->Add(fCEtaPhi_ULS[i]);
1264 fOutputList->Add(fCEtaPhi_LS[i]);
1265 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
1266 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
1268 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
1269 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
1270 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
1271 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
1273 if(fEventMixingFlag)
1275 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);
1277 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);
1278 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);
1280 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);
1281 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);
1283 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
1285 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
1286 fOutputList->Add(fCEtaPhi_LS_EM[i]);
1288 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
1289 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
1295 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
1296 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
1300 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
1301 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,2000,0,2);
1303 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
1304 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
1306 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,2000,0,2);
1307 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,2000,0,2);
1310 fOutputList->Add(fTPCnsigma_eta);
1311 fOutputList->Add(fTPCnsigma_phi);
1313 fOutputList->Add(fNcells_pt);
1314 fOutputList->Add(fEoverP_pt_pions);
1316 fOutputList->Add(ftpc_p_EoverPcut);
1317 fOutputList->Add(fnsigma_p_EoverPcut);
1319 fOutputList->Add(fEoverP_pt_pions2);
1320 fOutputList->Add(fEoverP_pt_hadrons);
1322 fOutputList->Add(fVtxZ_new1);
1323 fOutputList->Add(fVtxZ_new2);
1324 fOutputList->Add(fVtxZ_new3);
1325 fOutputList->Add(fVtxZ_new4);
1327 fOutputList->Add(fzRes1);
1328 fOutputList->Add(fzRes2);
1329 fOutputList->Add(fSPD_track_vtx1);
1330 fOutputList->Add(fSPD_track_vtx2);
1334 //__________________________________________________________________
1335 //Efficiency studies
1338 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{T} (GeV/c);Count",300,0,30);
1339 fPtBackgroundBeforeReco_weight = new TH1F("fPtBackgroundBeforeReco_weight",";p_{T} (GeV/c);Count",300,0,30);
1340 if(fFillBackground)fPtBackgroundBeforeReco2 = new TH1F("fPtBackgroundBeforeReco2",";p_{T} (GeV/c);Count",300,0,30);
1341 if(fFillBackground)fPtBackgroundBeforeReco2_weight = new TH1F("fPtBackgroundBeforeReco2_weight",";p_{T} (GeV/c);Count",300,0,30);
1342 fpT_m_electron= new TH2F("fpT_m_electron","fpT_m_electron",300,0,30,300,0,30);
1343 fpT_gm_electron= new TH2F("fpT_gm_electron","fpT_gm_electron",300,0,30,300,0,30);
1345 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{T} (GeV/c);Count",300,0,30);
1346 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{T} (GeV/c);Count",200,0,40);
1347 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{T} (GeV/c);Count",200,0,40);
1349 fPtMCparticleAll_nonPrimary = new TH1F("fPtMCparticleAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1350 fPtMCparticleAlle_nonPrimary = new TH1F("fPtMCparticleAlle_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1351 fPtMCparticleAlle_Primary = new TH1F("fPtMCparticleAlle_Primary",";p_{T} (GeV/c);Count",200,0,40);
1353 fPtMCparticleReco_nonPrimary = new TH1F("fPtMCparticleReco_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1355 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
1356 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
1357 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
1358 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
1360 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{T} (GeV/c);Count",200,0,40);
1361 fPtMCelectronAfterAll_unfolding = new TH1F("fPtMCelectronAfterAll_unfolding",";p_{T} (GeV/c);Count",200,0,40);
1362 fPtMCelectronAfterAll_nonPrimary = new TH1F("fPtMCelectronAfterAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1363 fPtMCelectronAfterAll_Primary = new TH1F("fPtMCelectronAfterAll_Primary",";p_{T} (GeV/c);Count",200,0,40);
1367 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,30);
1368 fPtMCeta = new TH1F("fPtMCeta",";p_{T} (GeV/c);Count",200,0,30);
1369 fPtMCpi02 = new TH1F("fPtMCpi02",";p_{t} (GeV/c);Count",200,0,30);
1370 fPtMCeta2 = new TH1F("fPtMCeta2",";p_{T} (GeV/c);Count",200,0,30);
1371 fPtMCpi03 = new TH1F("fPtMCpi03",";p_{t} (GeV/c);Count",200,0,30);
1372 fPtMCeta3 = new TH1F("fPtMCeta3",";p_{T} (GeV/c);Count",200,0,30);
1374 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
1375 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
1376 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{T} (GeV/c);Count",200,0,40);
1377 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{T} (GeV/c);Count",200,0,40);
1379 fPt_track_match_den = new TH1F("fPt_track_match_den",";p_{T} (GeV/c);Count",200,0,40);
1380 fPt_track_match_num = new TH1F("fPt_track_match_num",";p_{T} (GeV/c);Count",200,0,40);
1382 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
1383 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
1384 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
1386 fOutputList->Add(fPtBackgroundBeforeReco);
1387 fOutputList->Add(fPtBackgroundBeforeReco_weight);
1389 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2);
1390 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2_weight);
1392 fOutputList->Add(fpT_m_electron);
1393 fOutputList->Add(fpT_gm_electron);
1395 fOutputList->Add(fPtBackgroundAfterReco);
1396 fOutputList->Add(fPtMCparticleAll);
1397 fOutputList->Add(fPtMCparticleReco);
1399 fOutputList->Add(fPtMCparticleAll_nonPrimary);
1400 fOutputList->Add(fPtMCparticleAlle_nonPrimary);
1402 fOutputList->Add(fPtMCparticleAlle_Primary);
1403 fOutputList->Add(fPtMCparticleReco_nonPrimary);
1405 fOutputList->Add(fPtMCparticleAllHfe1);
1406 fOutputList->Add(fPtMCparticleRecoHfe1);
1407 fOutputList->Add(fPtMCparticleAllHfe2);
1408 fOutputList->Add(fPtMCparticleRecoHfe2);
1409 fOutputList->Add(fPtMCelectronAfterAll);
1410 fOutputList->Add(fPtMCelectronAfterAll_unfolding);
1412 fOutputList->Add(fPtMCelectronAfterAll_nonPrimary);
1413 fOutputList->Add(fPtMCelectronAfterAll_Primary);
1417 fOutputList->Add(fPtMCpi0);
1418 fOutputList->Add(fPtMCeta);
1419 fOutputList->Add(fPtMCpi02);
1420 fOutputList->Add(fPtMCeta2);
1421 fOutputList->Add(fPtMCpi03);
1422 fOutputList->Add(fPtMCeta3);
1423 fOutputList->Add(fPtMC_EMCal_All);
1424 fOutputList->Add(fPtMC_EMCal_Selected);
1425 fOutputList->Add(fPtMC_TPC_All);
1426 fOutputList->Add(fPtMC_TPC_Selected);
1428 fOutputList->Add(fPt_track_match_den);
1429 fOutputList->Add(fPt_track_match_num);
1431 fOutputList->Add(fPtMCWithLabel);
1432 fOutputList->Add(fPtMCWithoutLabel);
1433 fOutputList->Add(fPtIsPhysicaPrimary);
1436 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
1437 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
1438 fOutputList->Add(fCentralityHist);
1439 fOutputList->Add(fCentralityHistPass);
1441 //______________________________________________________________________
1442 //Mixed event analysis
1443 if(fEventMixingFlag)
1445 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
1446 fOutputList->Add(fPoolNevents);
1448 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.
1449 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
1451 Int_t nCentralityBins = 15;
1452 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
1454 Int_t nZvtxBins = 9;
1455 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
1457 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
1459 //______________________________________________________________________
1461 PostData(1, fOutputList);
1463 ///______________________________________________________________________
1466 //______________________________________________________________________
1468 //Called for each event
1469 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
1472 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1473 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
1477 printf("ERROR: fESD & fAOD not available\n");
1481 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
1485 printf("ERROR: fVEvent not available\n");
1492 AliError("HFE cuts not available");
1496 if(!fPID->IsInitialized())
1498 // Initialize PID with the given run number
1499 AliWarning("PID not initialised, get from Run no");
1503 fPID->InitializePID(fAOD->GetRunNumber());
1507 fPID->InitializePID(fESD->GetRunNumber());
1512 fPidResponse = fInputHandler->GetPIDResponse();
1515 //Check PID response
1518 AliDebug(1, "Using default PID Response");
1519 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
1522 fPID->SetPIDResponse(fPidResponse);
1524 fCFM->SetRecEventInfo(fVevent);
1526 Double_t *fListOfmotherkink = 0;
1527 Int_t fNumberOfVertices = 0;
1528 Int_t fNumberOfMotherkink = 0;
1531 //total event before event selection
1534 //______________________________________________________________________
1538 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
1539 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1540 TString vtxTtl = trkVtx->GetTitle();
1541 if(!vtxTtl.Contains("VertexerTracks")) return;
1542 //Float_t zvtx = trkVtx->GetZ();
1543 Float_t zvtx = -100;
1544 zvtx=trkVtx->GetZ();
1547 fVtxZ_new1->Fill(fZvtx);
1549 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
1550 if(spdVtx->GetNContributors()<=0) return;
1551 TString vtxTyp = spdVtx->GetTitle();
1552 Double_t cov[6]={0};
1553 spdVtx->GetCovarianceMatrix(cov);
1554 Double_t zRes = TMath::Sqrt(cov[5]);
1557 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1560 fSPD_track_vtx1->Fill(spdVtx->GetZ() - trkVtx->GetZ());
1561 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1562 fSPD_track_vtx2->Fill(spdVtx->GetZ() - trkVtx->GetZ());
1565 if(TMath::Abs(zvtx) > 10) return;
1566 fVtxZ_new2->Fill(fZvtx);
1568 if(fabs(zvtx>10.0))return;
1569 fVtxZ_new3->Fill(fZvtx);
1572 //Look for kink mother for AOD
1574 fNumberOfVertices = 0;
1575 fNumberOfMotherkink = 0;
1579 fNumberOfVertices = fAOD->GetNumberOfVertices();
1581 fListOfmotherkink = new Double_t[fNumberOfVertices];
1583 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
1585 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
1586 if(!aodvertex) continue;
1587 if(aodvertex->GetType()==AliAODVertex::kKink)
1589 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
1590 if(!mother1) continue;
1591 Int_t idmother = mother1->GetID();
1592 fListOfmotherkink[fNumberOfMotherkink] = idmother;
1593 fNumberOfMotherkink++;
1604 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
1605 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1606 TString vtxTtl = trkVtx->GetTitle();
1607 if(!vtxTtl.Contains("VertexerTracks")) return;
1608 Float_t zvtx = -100;
1609 zvtx=trkVtx->GetZ();
1612 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
1613 if(spdVtx->GetNContributors()<=0) return;
1614 TString vtxTyp = spdVtx->GetTitle();
1615 Double_t cov[6]={0};
1616 spdVtx->GetCovarianceMatrix(cov);
1617 Double_t zRes = TMath::Sqrt(cov[5]);
1618 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1619 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1620 if(TMath::Abs(zvtx) > 10) return;
1623 //______________________________________________________________________
1624 //after vertex selection
1627 //______________________________________________________________________
1628 //EMCal Trigger Selection (Threshold selection)
1630 TString firedTrigger;
1631 TString TriggerEG1("EG1"); //takes trigger with name with EG1, ex: CEMC7EG1-B-NOPF-CENTNOTRD
1632 TString TriggerEG2("EG2");
1634 //TString TriggerEJE("EJE");
1636 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1637 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1639 //Bool_t IsEventEMCALL0=kTRUE;
1640 Bool_t IsEventEMCALL1=kFALSE;
1642 if(firedTrigger.Contains(TriggerEG1)){
1644 IsEventEMCALL1=kTRUE;
1646 if(firedTrigger.Contains(TriggerEG2)){
1648 IsEventEMCALL1=kTRUE;
1651 //if the flag is for a given threshold and it was not fired, return.
1654 if(!firedTrigger.Contains(TriggerEG1))return;
1655 if(firedTrigger.Contains(TriggerEG2)){
1664 if(!firedTrigger.Contains(TriggerEG2))return;
1665 if(firedTrigger.Contains(TriggerEG1)){
1673 //______________________________________________________________________
1674 //Testing if there is an overlap EGA and EJE
1677 if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2) ) && !firedTrigger.Contains(TriggerEJE))
1682 if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && !firedTrigger.Contains(TriggerEJE))
1687 if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
1692 if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
1701 //Only events with at least 2 tracks are accepted
1702 Int_t fNOtrks = fVevent->GetNumberOfTracks();
1703 if(fNOtrks<2) return;
1708 Int_t fNOtrks2 = fAOD->GetNumberOfTracks();
1709 if(fNOtrks2<2) return;
1713 //______________________________________________________________________
1714 //new track loop to select events
1715 //track pt cut (at least 2)
1719 double fTrackMulti=0;
1720 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1722 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1723 if (!Vtrack) continue;
1725 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1726 //AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1728 if((track->Pt())<0.2 || (track->Pt())>1000.0) continue;
1729 else fTrackMulti=fTrackMulti+1;
1732 //Only take event if track multiplicity is bigger than 2.
1733 if(fTrackMulti<2) return;
1737 //______________________________________________________________________
1738 //Using more cuts than I have beeing using
1739 //eta cut and primary (at least 2)
1742 double fTrackMulti2=0;
1743 for(Int_t i = 0; i < fVevent->GetNumberOfTracks(); i++)
1745 AliVParticle* Vtrack2 = fVevent->GetTrack(i);
1746 if (!Vtrack2) continue;
1749 AliVTrack *track_new = dynamic_cast<AliVTrack*>(Vtrack2);
1750 AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(Vtrack2);
1757 if(TMath::Abs(track_new->Eta())> 0.9) continue;
1758 if (aodtrack->GetType()!= AliAODTrack::kPrimary) continue ;
1759 else fTrackMulti2=fTrackMulti2+1;
1762 //Only take event if track multiplicity is bigger than 2.
1763 if(fTrackMulti2<2) return;
1769 //______________________________________________________________________
1770 //Using more cuts than I have beeing using
1771 //hybrid (at least2)
1774 double fTrackMulti3=0;
1775 for(Int_t i = 0; i < fVevent->GetNumberOfTracks(); i++)
1777 AliVParticle* Vtrack3 = fVevent->GetTrack(i);
1778 if (!Vtrack3) continue;
1780 //AliVTrack *track_new = dynamic_cast<AliVTrack*>(Vtrack3);
1781 AliAODTrack *aodtrack = dynamic_cast<AliAODTrack*>(Vtrack3);
1787 if (!aodtrack->IsHybridGlobalConstrainedGlobal()) continue ;
1788 //another option if I don't want to use hybrid
1789 //if ( aodtrack->TestFilterBit(128)==kFALSE) continue ;
1790 else fTrackMulti3=fTrackMulti3+1;
1793 //Only take event if track multiplicity is bigger than 2.
1794 if(fTrackMulti3<2) return;
1799 //______________________________________________________________________
1804 double fTrackMulti4=0;
1805 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1807 AliVParticle* Vtrack4 = fVevent->GetTrack(iTracks);
1808 if (!Vtrack4) continue;
1811 //AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack4);
1812 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack4);
1814 if(!atrack->TestFilterBit(768)) continue;
1815 if(!atrack->IsHybridGlobalConstrainedGlobal()) continue ;
1818 else fTrackMulti4=fTrackMulti4+1;
1821 //Only take event if track multiplicity is bigger than 2.
1822 if(fTrackMulti4<2) return;
1823 fTrack_Multi->Fill(fTrackMulti4);
1827 //______________________________________________________________________
1830 //______________________________________________________________________
1831 //Centrality Selection
1832 if(fHasCentralitySelection)
1834 Float_t centrality = -1;
1838 fCentrality = fAOD->GetHeader()->GetCentralityP();
1842 fCentrality = fESD->GetCentrality();
1845 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
1846 else centrality = fCentrality->GetCentralityPercentile("V0A");
1848 //cout << "Centrality = " << centrality << " %" << endl;
1850 fCentralityHist->Fill(centrality);
1852 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
1854 fCentralityHistPass->Fill(centrality);
1856 //______________________________________________________________________
1861 //______________________________________________________________________
1867 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1871 AliError("Array of MC particles not found");
1875 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1879 AliError("Could not find MC Header in AOD");
1883 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1885 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1886 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1888 Int_t pdg = fMCparticle->GetPdgCode();
1890 //====================================================================
1891 //trying take pions spectra 27/May/2014
1892 //IsPrimary only take events from pythia
1893 //IsPhysicalPrimariee: (all prompt particles, including strong decay products plus weak decay product from heavy-flavor).
1894 //eta cut same as MinJung
1896 if(fMCparticle->Eta()>=-0.8 && fMCparticle->Eta()<=0.8)
1898 if(fMCparticle->IsPrimary()){
1900 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1901 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1902 //eta cut same as MinJung
1905 if(fMCparticle->IsPhysicalPrimary()){
1906 if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
1907 if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
1911 if(TMath::Abs(pdg)==111) fPtMCpi03->Fill(fMCparticle->Pt());
1912 if(TMath::Abs(pdg)==221) fPtMCeta3->Fill(fMCparticle->Pt());
1914 //====================================================================
1916 double proX = fMCparticle->Xv();
1917 double proY = fMCparticle->Yv();
1918 double proR = sqrt(pow(proX,2)+pow(proY,2));
1921 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1923 //to correct background
1924 if (TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0){
1925 Int_t mpdg = fMCparticleMother->GetPdgCode();
1927 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1930 fPtMCparticleAlle_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons, and not primary
1936 if (TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()){
1937 fPtMCparticleAlle_Primary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons primary
1940 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1943 fPtMCparticleAll_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all particles, and not primary
1944 if(fMCparticle->IsPhysicalPrimary())
1946 fPtMCparticleAll->Fill(fMCparticle->Pt());
1948 Bool_t MotherFound = FindMother(iMC);
1949 //Bool_t MotherFound = FindMother(track->GetLabel());
1953 //denominator for total efficiency and tracking
1954 //unfolding: denominator is pt_MC and numerator is pt_reco
1955 fPtMCparticleAllHfe1->Fill(fMCparticle->Pt());
1956 fEtaPhi_den->Fill(fMCparticle->Phi(),fMCparticle->Eta());
1959 } //denominator for total efficiency and tracking
1961 fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1974 //second loop over track, but only the primaries ones
1975 //only primary pions --> how to take the primaries ones in AOD?
1977 for(Int_t iMC = 0; iMC < fMCarray->GetNPrimary(); iMC++){
1978 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1979 pdg = fMCparticle->GetPdgCode();
1981 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1982 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1984 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax)
1987 if(TMath::Abs(pdg)==111) fPtMCpi02->Fill(fMCparticle->Pt());
1988 if(TMath::Abs(pdg)==221) fPtMCeta2->Fill(fMCparticle->Pt());
1998 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1999 if (!fEventHandler) {
2000 Printf("ERROR: Could not retrieve MC event handler");
2004 fMCevent = fEventHandler->MCEvent();
2006 Printf("ERROR: Could not retrieve MC event");
2010 fMCstack = fMCevent->Stack();
2012 //pion and eta spectrum
2015 //----------------------------------------------------------------------------------------------------
2016 AliVParticle *mctrack2 = NULL;
2017 AliMCParticle *mctrack0 = NULL;
2020 for(Int_t imc = 0; imc <fMCEvent->GetNumberOfPrimaries(); imc++){
2021 if(!(mctrack2 = fMCEvent->GetTrack(imc))) continue;
2022 TParticle* mcpart0 = fMCEvent->Stack()->Particle(imc);
2023 if(!mcpart0) continue;
2024 mctrack0 = dynamic_cast<AliMCParticle *>(mctrack2);
2025 if(!mctrack0) continue;
2027 if(TMath::Abs(AliHFEtools::GetRapidity(mcpart0))<0.8){
2029 if(TMath::Abs(mctrack0->PdgCode()) == 111) // pi0
2031 fPtMCpi0->Fill(mctrack0->Pt());
2034 if(TMath::Abs(mctrack0->PdgCode()) == 221) // eta
2036 fPtMCeta->Fill(mctrack0->Pt());
2043 //----------------------------------------------------------------------------------------------------
2046 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
2049 fMCtrack = fMCstack->Particle(iMC);
2050 if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2051 TParticle *particle=fMCstack->Particle(iMC);
2053 Int_t pdg = fMCtrack->GetPdgCode();
2056 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
2057 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCtrack->Pt());
2060 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
2063 //to correct background
2064 if (TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0){
2065 Int_t mpdg = fMCtrackMother->GetPdgCode();
2066 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
2067 Double_t proR=particle->R();
2069 fPtMCparticleAlle_nonPrimary->Fill(fMCtrack->Pt()); //denominator for total efficiency for all electrons, and not primary
2074 if(TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(iMC)){
2076 fPtMCparticleAlle_Primary->Fill(fMCtrack->Pt());
2079 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2081 fPtMCparticleAll_nonPrimary->Fill(fMCtrack->Pt());//denominator for total efficiency for all particle, non Primary track
2083 if(fMCstack->IsPhysicalPrimary(iMC))
2085 fPtMCparticleAll->Fill(fMCtrack->Pt());
2087 Bool_t MotherFound = FindMother(iMC);
2088 //Bool_t MotherFound = FindMother(track->GetLabel());
2092 fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency and tracking
2093 fEtaPhi_den->Fill(fMCtrack->Phi(),fMCtrack->Eta());
2096 fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
2099 }//Is Physical primary
2106 //______________________________________________________________________
2107 //threshold selection was here
2108 //______________________________________________________________________
2109 //all events selected
2114 //______________________________________________________________________
2115 //events in the threshold
2117 if(firedTrigger.Contains(TriggerEG1))
2121 if(!firedTrigger.Contains(TriggerEG2)) fNevent->Fill(19);
2122 //if(firedTrigger.Contains(TriggerEG2)) return;
2128 if(firedTrigger.Contains(TriggerEG2))
2132 if(!firedTrigger.Contains(TriggerEG1)) fNevent->Fill(21);
2133 //if(firedTrigger.Contains(TriggerEG1)) return;
2139 //New cluster information
2140 //after trigger threshold selection
2141 Int_t ClsNo2 = -999;
2142 ClsNo2 = fVevent->GetNumberOfCaloClusters();
2143 fNCluster_pure->Fill(ClsNo2);
2148 fNevent->Fill(22); //events with no cluster
2152 //in order to include time cut
2153 //fEMCALCells = fAOD->GetEMCALCells();
2154 //Double_t tof = clus->GetTOF();
2156 //if ( clus->E() < minE ) continue ;
2162 //AliAODHeader * aodh = fAOD->GetHeader();
2163 //Int_t bc= aodh->GetBunchCrossNumber();
2166 Int_t ClsNo_aod = -999;
2167 ClsNo_aod = fAOD->GetNumberOfCaloClusters();
2168 fNCluster_pure_aod->Fill(ClsNo_aod);
2169 //Bool_t exotic=kTRUE;
2171 for (Int_t i=0; i< ClsNo_aod; i++ ){
2173 //fClus = fVevent->GetCaloCluster(i);
2174 //to be compatible with Shingo
2175 AliVCluster *clust = 0x0;
2176 clust = (AliVCluster*) fAOD->GetCaloCluster(i);
2178 if(clust && clust->IsEMCAL())
2180 //pure cluster information
2181 fECluster_pure->Fill(clust->E());
2183 fNcells_energy->Fill(clust->GetNCells(),clust->E());
2184 fNCluster_ECluster->Fill(ClsNo_aod,clust->E());
2186 if(clust->E()>1000) fNevent->Fill(23);
2190 exotic = fEMCALRecoUtils->IsExoticCluster(clust, (AliVCaloCells*)fAOD->GetEMCALCells(), bc);
2191 if(exotic == kFALSE){
2192 fECluster_not_exotic->Fill(clust->E());
2193 fNcells_energy_not_exotic->Fill(clust->GetNCells(),clust->E());
2197 //approximation to remove exotics
2198 if(clust->GetNCells()<5 && clust->E()>15.0){
2199 fECluster_exotic->Fill(clust->E());
2201 //Marcel cut (another approximation to remove exotics)
2202 else if((clust->GetNCells())> ((clust->E())/3+1)){
2203 fECluster_not_exotic1->Fill(clust->E());
2206 fECluster_not_exotic2->Fill(clust->E());
2212 //______________________________________________________________________
2213 //Trying to remove events with bad cells and find patches
2214 //First, I will try to count them
2215 //______________________________________________________________________
2217 if(clust && clust->IsEMCAL())
2219 Bool_t badchannel = ContainsBadChannel("EMCAL", clust->GetCellsAbsId(),clust->GetNCells() );
2220 printf("Contém bad channel? %d ", badchannel);
2221 if(badchannel)fNevent2->Fill(0);
2223 //trying to find patches
2224 TArrayI patches_found=GetTriggerPatches(IsEventEMCALL0, IsEventEMCALL1);
2225 printf("N patches %d, first %d, last %d\n",patches_found.GetSize(), patches_found.At(0), patches_found.At(patches_found.GetSize()-1));
2230 //______________________________________________________________________
2237 fNevent->Fill(24); //events with cluster
2240 fVtxZ_new4->Fill(fZvtx);
2244 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
2245 else ClsNo = fAOD->GetNumberOfCaloClusters();
2247 //______________________________________________________________________
2249 ///_____________________________________________________________________
2251 Int_t NTracks=fVevent->GetNumberOfTracks();
2253 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2256 TClonesArray *fTracks_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("AODFilterTracks"));
2257 NTracks = fTracks_tender->GetEntries();
2258 TClonesArray *fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
2259 ClsNo = fCaloClusters_tender->GetEntries();
2262 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2264 for(Int_t iTracks = 0; iTracks < NTracks; iTracks++)
2266 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
2269 printf("ERROR: Could not receive track %d\n", iTracks);
2273 //main place where track is defined
2275 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
2276 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
2277 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
2279 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2282 TClonesArray *fTracks_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("AODFilterTracks"));
2283 track = static_cast<AliAODTrack*>(fTracks_tender->At(iTracks));
2285 printf("ERROR: Could not receive track calibrated %d\n", iTracks);
2289 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2291 Double_t fTPCnSigma = -999;
2292 Double_t fTOFnSigma = -999;
2293 Double_t fTPCnSigma_pion = -999;
2294 Double_t fTPCnSigma_proton = -999;
2295 Double_t fTPCnSigma_kaon = -999;
2296 Double_t fTPCsignal = -999;
2297 Double_t fPt = -999;
2301 //Etacut test on the begging
2302 fEtad[0]->Fill(track->Eta());
2303 //if(track->Eta()<fEtaCutMin || track->Eta()>fEtaCutMax) continue;
2304 fEtad[1]->Fill(track->Eta());
2309 ///_____________________________________________________________________________
2310 ///Fill QA plots without track selection
2312 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
2314 fTPCsignal = track->GetTPCsignal();
2315 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
2316 fTOFnSigma = fPidResponse->NumberOfSigmasTOF(track, AliPID::kElectron);
2317 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
2318 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
2319 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
2321 fTPC_p[0]->Fill(fPt,fTPCsignal);
2322 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
2325 Float_t TPCNcls = track->GetTPCNcls();
2327 Float_t TPCNcls_pid = track->GetTPCsignalN();
2331 Float_t pos[3]={0,0,0};
2333 Double_t fEMCflag = kFALSE;
2334 if(track->GetEMCALcluster()>0)
2336 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2337 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2340 int EMCalIndex = -1;
2341 EMCalIndex = track->GetEMCALcluster();
2342 TClonesArray *fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
2343 fClus = static_cast<AliVCluster*>(fCaloClusters_tender->At(EMCalIndex));
2345 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2347 if(fClus->IsEMCAL())
2350 //only for charged tracks
2351 fECluster[0]->Fill(fClus->E());
2354 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2357 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
2360 Float_t Energy = fClus->E();
2361 Float_t EoverP = Energy/track->P();
2362 //Float_t M02 = fClus->GetM02();
2363 //Float_t M20 = fClus->GetM20();
2365 /////////////// for Eta Phi distribution
2366 fClus->GetPosition(pos);
2367 TVector3 vpos(pos[0],pos[1],pos[2]);
2368 Double_t cphi = vpos.Phi();
2369 Double_t ceta = vpos.Eta();
2370 fEtaPhi[0]->Fill(cphi,ceta);
2373 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
2378 //______________________________________________________________
2381 fVtxZ[0]->Fill(fZvtx);
2382 if(iTracks == 0)fNTracks[0]->Fill(fNOtrks);
2383 fNTracks_pt[0]->Fill(fNOtrks, fPt);
2384 fNTracks_eta[0]->Fill(fNOtrks, track->Eta());
2385 fNTracks_phi[0]->Fill(fNOtrks, track->Phi());
2388 fNClusters[0]->Fill(ClsNo);
2389 fTPCNcls_pid[0]->Fill(TPCNcls, TPCNcls_pid);
2390 //______________________________________________________________
2392 ///Fill QA plots without track selection
2393 ///_____________________________________________________________________________
2394 //______________________________________________________________________________________
2395 //Track Selection Cuts
2397 //AOD (Test Filter Bit)
2400 // standard cuts with very loose DCA - BIT(4)
2403 GetStandardITSTPCTrackCuts2011(kFALSE)
2404 SetMaxChi2PerClusterTPC(4);
2405 SetAcceptKinkDaughters(kFALSE);
2406 SetRequireTPCRefit(kTRUE);
2407 SetRequireITSRefit(kTRUE);
2408 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
2409 SetMaxDCAToVertexZ(2);
2410 SetMaxDCAToVertex2D(kFALSE);
2411 SetRequireSigmaToVertex(kFALSE);
2412 SetMaxChi2PerClusterITS(36);
2413 SetMaxDCAToVertexXY(2.4)
2414 SetMaxDCAToVertexZ(3.2)
2415 SetDCaToVertex2D(kTRUE)
2418 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
2421 //RecKine: ITSTPC cuts
2422 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
2424 if(fRejectKinkMother)
2428 Bool_t kinkmotherpass = kTRUE;
2429 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
2431 if(track->GetID() == fListOfmotherkink[kinkmother])
2433 kinkmotherpass = kFALSE;
2437 if(!kinkmotherpass) continue;
2441 if(etrack->GetKinkIndex(0) != 0) continue;
2447 //it was not working on aod... testing again
2448 //July 29th, 2014: aparently working again
2453 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
2456 //HFEcuts: ITS layers cuts
2457 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
2459 //HFE cuts: TPC PID cleanup
2460 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
2462 //DCA cut done by hand -- July 29th, 2014 -> fix it... has to be in absolute values!!!!
2464 Double_t d0z0[2], cov[3];
2465 AliAODVertex *prim_vtx = fAOD->GetPrimaryVertex();
2466 track->PropagateToDCA(prim_vtx, fAOD->GetMagneticField(), 20., d0z0, cov);
2467 Double_t DCAxy = d0z0[0];
2468 Double_t DCAz = d0z0[1];
2470 if(DCAxy >= fDCAcutr || DCAz>=fDCAcutz) continue;
2477 //______________________________________________________________________________________
2480 //AOD test -- Francesco suggestion
2481 //aod test -- Francesco suggestion
2482 AliAODTrack *aod_track=fAOD->GetTrack(iTracks);
2484 Int_t type=aod_track->GetType();
2485 if(type==AliAODTrack::kPrimary) fPtPrim->Fill(aod_track->Pt());
2486 if(type==AliAODTrack::kSecondary) fPtSec->Fill(aod_track->Pt());
2488 //Int_t type2=track->GetType();
2489 if(type==AliAODTrack::kPrimary) fPtPrim2->Fill(track->Pt());
2490 if(type==AliAODTrack::kSecondary) fPtSec2->Fill(track->Pt());
2494 ///_____________________________________________________________
2495 ///QA plots after track selection
2498 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
2499 else fPtMCWithoutLabel->Fill(fPt);
2502 if(fIsMC && track->GetLabel()>=0)
2506 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2509 if(fMCparticle->IsPhysicalPrimary())
2511 fPtIsPhysicaPrimary->Fill(fPt);
2514 Int_t pdg = fMCparticle->GetPdgCode();
2515 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
2519 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2521 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
2523 if(fMCparticle->IsPhysicalPrimary())
2525 fPtMCparticleReco->Fill(fMCparticle->Pt());
2527 Bool_t MotherFound = FindMother(track->GetLabel());
2532 fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());//numerator tracking
2534 fpt_reco_pt_MC_den->Fill(track->Pt(),fMCparticle->Pt());
2538 fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
2553 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
2556 fMCtrack = fMCstack->Particle(track->GetLabel());
2557 Int_t pdg = fMCtrack->GetPdgCode();
2559 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2561 fPtMCparticleReco_nonPrimary->Fill(fMCtrack->Pt());//not Primary track
2565 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2567 fPtIsPhysicaPrimary->Fill(fPt);
2570 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2572 fPtMCparticleReco->Fill(fMCtrack->Pt());
2574 Bool_t MotherFound = FindMother(track->GetLabel());
2577 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());//numerator tracking
2578 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
2586 fTPC_p[1]->Fill(fPt,fTPCsignal);
2587 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
2588 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
2589 Double_t fPtBin_trigger[11] = {1,2,4,6,8,10,12,14,16,18,20};
2591 TPCNcls = track->GetTPCNcls();
2592 Float_t pos2[3]={0,0,0};
2594 if(track->GetEMCALcluster()>0)
2596 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2597 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2600 int EMCalIndex = -1;
2601 EMCalIndex = track->GetEMCALcluster();
2602 TClonesArray *fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
2603 fClus = static_cast<AliVCluster*>(fCaloClusters_tender->At(EMCalIndex));
2605 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2607 if(fClus->IsEMCAL())
2609 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2611 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
2613 Float_t Energy = fClus->E();
2614 Float_t EoverP = Energy/track->P();
2615 Float_t M02 = fClus->GetM02();
2616 Float_t M20 = fClus->GetM20();
2617 Float_t ncells = fClus->GetNCells();
2619 /////////////// for Eta Phi distribution
2620 fClus->GetPosition(pos2);
2621 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
2622 Double_t cphi = vpos.Phi();
2623 Double_t ceta = vpos.Eta();
2624 fEtaPhi[1]->Fill(cphi,ceta);
2626 fECluster[1]->Fill(Energy);
2627 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
2630 //for EMCal trigger performance
2632 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
2633 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
2638 //for hadron contamination calculations
2642 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2644 //-------------------------------------------------------------------
2645 //true hadrons E/p shape before cuts
2646 if(fIsMC && fIsAOD && track->GetLabel()>=0){
2647 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2648 Int_t pdg = fMCparticle->GetPdgCode();
2650 if( TMath::Abs(pdg) != 11){
2651 fEoverP_pt_true_hadrons0->Fill(fPt,(fClus->E() / fP));
2656 //true electrons E/p shape before cuts
2657 if(fIsMC && fIsAOD && track->GetLabel()>=0){
2658 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2659 Int_t pdg = fMCparticle->GetPdgCode();
2661 if( TMath::Abs(pdg) == 11){
2662 fEoverP_pt_true_electrons0->Fill(fPt,(fClus->E() / fP));
2665 //-------------------------------------------------------------------
2669 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
2671 if(fTPCnSigma<-3.5){
2672 fEoverP_pt_hadrons->Fill(fPt,EoverP);
2673 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
2676 //after cut -> Are they really hadrons? E/p shape
2677 if(fIsMC && fIsAOD && track->GetLabel()>=0){
2678 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2679 Int_t pdg = fMCparticle->GetPdgCode();
2681 if( TMath::Abs(pdg) != 11){
2682 fEoverP_pt_true_hadrons->Fill(fPt,(fClus->E() / fP));
2690 //for systematic studies of hadron contamination
2691 if(fTPCnSigma < -3){
2692 fEoverP_pt_pions->Fill(fPt, EoverP);
2696 if(fTPCnSigma < -3.5){
2697 fEoverP_pt_pions2->Fill(fPt, EoverP);
2707 for(Int_t i = 0; i < 6; i++)
2709 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2712 if(fTPCnSigma < -5 && fTPCnSigma > -10){
2713 fNcells_hadrons[i]->Fill(ncells);
2715 //hadrons selection using E/p
2716 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
2717 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
2719 //electrons selection using E/p
2720 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
2721 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
2726 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
2728 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
2729 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
2733 if(fTPCnSigma < 3.5 && fCorrelationFlag)
2735 fPtTrigger_Inc->Fill(fPt);
2736 DiHadronCorrelation(track, iTracks);
2745 //______________________________________________________________
2748 fVtxZ[1]->Fill(fZvtx);
2749 if(iTracks == 0)fNTracks[1]->Fill(fNOtrks);
2750 fNTracks_pt[1]->Fill(fNOtrks, fPt);
2751 fNTracks_eta[1]->Fill(fNOtrks, track->Eta());
2752 fNTracks_phi[1]->Fill(fNOtrks, track->Phi());
2753 fNClusters[1]->Fill(ClsNo);
2754 fTPCNcls_pid[1]->Fill(TPCNcls, TPCNcls_pid);
2756 //______________________________________________________________
2758 ///______________________________________________________________________
2759 ///Histograms for PID Studies
2760 //Double_t fPtBin[6] = {2,4,6,8,10,15};
2762 for(Int_t i = 0; i < 6; i++)
2764 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2766 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2767 fTPC_pt[i]->Fill(fTPCsignal);
2768 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
2773 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2775 //new pt bins for trigger data
2777 for(Int_t i = 0; i < 10; i++)
2779 if(fP>=fPtBin_trigger[i] && fP<fPtBin_trigger[i+1])
2781 if(fEMCflag)fEoverP_tpc_p_trigger[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2785 if(fPt>=fPtBin_trigger[i] && fPt<fPtBin_trigger[i+1])
2787 if(fEMCflag)fEoverP_tpc_pt_trigger[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2793 //new way to calculate TPCnsigma distribution: TPCnsigma in function of p, with/without E/p cut
2794 fTPCnsigma_p_TPC->Fill(fP, fTPCnSigma);
2797 fTPCnsigma_p_TPC_on_EMCal_acc->Fill(fP, fTPCnSigma);
2799 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax){
2800 fTPCnsigma_p_TPC_EoverP_cut->Fill(fP, fTPCnSigma);
2807 ///QA plots after track selection
2808 ///_____________________________________________________________
2810 //_______________________________________________________
2811 //Correlation Analysis - DiHadron
2814 if(fTPCnSigma < 3.5 && fCorrelationFlag)
2816 fPtTrigger_Inc->Fill(fPt);
2817 DiHadronCorrelation(track, iTracks);
2820 //_______________________________________________________
2823 ///////////////////////////////////////////////////////////////////
2824 ///TPC - efficiency calculation //
2826 /// changing start here
2827 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2829 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2830 Int_t pdg = fMCparticle->GetPdgCode();
2833 if(fMCparticle->IsPhysicalPrimary()){
2836 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2838 Bool_t MotherFound = FindMother(track->GetLabel());
2840 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2841 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2842 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
2849 else if(fIsMC && track->GetLabel()>=0)//ESD
2852 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2853 fMCtrack = fMCstack->Particle(track->GetLabel());
2855 Int_t pdg = fMCtrack->GetPdgCode();
2856 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2858 if(fMCtrack->GetFirstMother()>0){
2859 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2860 Bool_t MotherFound = FindMother(track->GetLabel());
2862 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2863 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
2872 if(fPt>1 && fPt<2) fTOF01->Fill(fTOFnSigma,fTPCnSigma);
2873 if(fPt>2 && fPt<4) fTOF02->Fill(fTOFnSigma,fTPCnSigma);
2874 if(fPt>4 && fPt<6) fTOF03->Fill(fTOFnSigma,fTPCnSigma);
2876 ///________________________________________________________________________
2878 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
2879 Int_t pidpassed = 1;
2880 AliHFEpidObject hfetrack;
2881 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
2882 hfetrack.SetRecTrack(track);
2883 hfetrack.SetPP(); //proton-proton analysis
2884 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
2885 fpid->Fill(pidpassed);
2887 if(pidpassed==0) continue;
2888 ///________________________________________________________________________
2891 ////////////////////////////////////////////////////////////////////
2892 ///TPC efficiency calculations
2895 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2897 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2898 Int_t pdg = fMCparticle->GetPdgCode();
2901 if(fMCparticle->IsPhysicalPrimary()){
2904 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2906 Bool_t MotherFound = FindMother(track->GetLabel());
2908 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2909 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2910 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
2917 else if(fIsMC && track->GetLabel()>=0)//ESD
2920 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2921 fMCtrack = fMCstack->Particle(track->GetLabel());
2923 Int_t pdg = fMCtrack->GetPdgCode();
2924 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2926 if(fMCtrack->GetFirstMother()>0){
2927 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2928 Bool_t MotherFound = FindMother(track->GetLabel());
2930 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2931 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
2939 //Eta Cut for TPC only
2940 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2941 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
2944 //Background for TPC only
2945 if(fFillBackground){
2947 //efficiency without SS cut for TPC only
2948 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
2949 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
2950 } //Eta cut to be consistent with other efficiency
2954 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
2955 fTPC_p[2]->Fill(fP,fTPCsignal);
2956 TPCNcls = track->GetTPCNcls();
2957 Float_t pos3[3]={0,0,0};
2960 //here denominator for track-matching efficiency
2961 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2963 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2964 Int_t pdg = fMCparticle->GetPdgCode();
2967 if(fMCparticle->IsPhysicalPrimary()){
2970 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2972 Bool_t MotherFound = FindMother(track->GetLabel());
2974 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2975 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2976 if(fIsHFE1) fPt_track_match_den->Fill(fMCparticle->Pt());
2984 if(track->GetEMCALcluster()>0)
2986 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2987 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2990 int EMCalIndex = -1;
2991 EMCalIndex = track->GetEMCALcluster();
2992 TClonesArray *fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
2993 fClus = static_cast<AliVCluster*>(fCaloClusters_tender->At(EMCalIndex));
2995 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2997 if(fClus->IsEMCAL())
3000 //________________________________________________________________________
3003 //Cluster timing distribution -- for ESD
3004 if(fUseEMCal && !fIsAOD){
3006 AliESDCaloCells &cells_esd=*(fESD->GetEMCALCells());
3007 TRefArray* caloClusters_esd = new TRefArray();
3008 fESD->GetEMCALClusters(caloClusters_esd);
3009 Int_t nclus_esd = caloClusters_esd->GetEntries();
3012 for (Int_t icl = 0; icl < nclus_esd; icl++) {
3014 AliESDCaloCluster* clus_esd = (AliESDCaloCluster*)caloClusters_esd->At(icl);
3016 if(clus_esd->IsEMCAL()){
3017 Float_t ncells_esd = fClus->GetNCells();
3018 UShort_t * index_esd = clus_esd->GetCellsAbsId() ;
3019 UShort_t * index2_esd = fClus->GetCellsAbsId() ;
3022 for(Int_t i = 0; i < ncells_esd ; i++){
3024 Int_t absId_esd = index_esd[i];
3025 fTime->Fill(fPt,cells_esd.GetCellTime(absId_esd));
3027 Int_t absId2_esd = index2_esd[i];
3028 fTime2->Fill(fPt,cells_esd.GetCellTime(absId2_esd));
3036 //Cluster timing distribution -- for AOD
3037 if(fUseEMCal && fIsAOD){
3039 AliAODCaloCells &cells_aod=*(fAOD->GetEMCALCells());
3041 TRefArray* caloClusters_aod = new TRefArray();
3042 fAOD->GetEMCALClusters(caloClusters_aod);
3044 Int_t nclus_aod = caloClusters_aod->GetEntries();
3046 for (Int_t icl = 0; icl < nclus_aod; icl++) {
3048 AliAODCaloCluster* clus_aod = (AliAODCaloCluster*)caloClusters_aod->At(icl);
3051 if(clus_aod->IsEMCAL()){
3052 Float_t ncells_aod = fClus->GetNCells();
3053 UShort_t * index_aod = clus_aod->GetCellsAbsId() ;
3054 UShort_t * index2_aod = fClus->GetCellsAbsId() ;
3057 for(Int_t i = 0; i < ncells_aod ; i++){
3059 Int_t absId_aod = index_aod[i];
3060 fTime->Fill(fPt,cells_aod.GetCellTime(absId_aod));
3062 Int_t absId2_aod = index2_aod[i];
3063 fTime2->Fill(fPt,cells_aod.GetCellTime(absId2_aod));
3074 double emctof = fClus->GetTOF();
3075 ftimingEle->Fill(fPt,emctof);
3077 //________________________________________________________________________
3083 Double_t Dx = fClus->GetTrackDx();
3084 Double_t Dz = fClus->GetTrackDz();
3085 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
3087 for(Int_t i = 0; i < 6; i++)
3089 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
3098 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
3100 Float_t Energy = fClus->E();
3101 Float_t EoverP = Energy/track->P();
3102 Float_t M02 = fClus->GetM02();
3103 Float_t M20 = fClus->GetM20();
3104 Float_t ncells = fClus->GetNCells();
3106 //here numerator for track-matching efficiency
3107 if(fIsMC && fIsAOD && track->GetLabel()>=0)
3109 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3110 Int_t pdg = fMCparticle->GetPdgCode();
3113 if(fMCparticle->IsPhysicalPrimary()){
3116 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3118 Bool_t MotherFound = FindMother(track->GetLabel());
3120 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3121 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3122 if(fIsHFE1) fPt_track_match_num->Fill(fMCparticle->Pt());
3131 //----------------------------------------------------------------------------------------
3133 //EtaCut electrons histogram
3135 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
3137 if(fUseShowerShapeCut){
3138 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3139 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
3140 fShowerShapeCut->Fill(M02,M20);
3141 //in order to check if there are exotic cluster in this selected cluster (27 may 2014)
3142 fNcells_energy_elec_selected->Fill(ncells,Energy);
3144 //true electrons E/p shape
3145 if(fIsMC && fIsAOD && track->GetLabel()>=0){
3146 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3147 Int_t pdg = fMCparticle->GetPdgCode();
3149 if( TMath::Abs(pdg) == 11){
3150 fEoverP_pt_true_electrons->Fill(fPt,(fClus->E() / fP));
3159 if(!fUseShowerShapeCut){
3160 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
3161 fShowerShapeCut->Fill(M02,M20);
3162 fNcells_energy_elec_selected->Fill(ncells,Energy);
3164 //after cut -> Are they really electrons ? E/p shape
3165 if(fIsMC && fIsAOD && track->GetLabel()>=0){
3166 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3167 Int_t pdg = fMCparticle->GetPdgCode();
3169 if( TMath::Abs(pdg) == 11){
3170 fEoverP_pt_true_electrons->Fill(fPt,(fClus->E() / fP));
3176 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
3178 //for shower shape cut studies - now with TPC PID Cut
3180 fShowerShapeM02_EoverP->Fill(M02,EoverP);
3181 fShowerShapeM20_EoverP->Fill(M20,EoverP);
3186 //----------------------------------------------------------------------------------------
3190 // for Eta Phi distribution
3191 fClus->GetPosition(pos3);
3192 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
3193 Double_t cphi = vpos.Phi();
3194 Double_t ceta = vpos.Eta();
3195 fEtaPhi[2]->Fill(cphi,ceta);
3199 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
3201 for(Int_t i = 0; i < 6; i++)
3203 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
3206 fR_EoverP[i]->Fill(R, EoverP);
3207 fNcells[i]->Fill(ncells);
3208 fNcells_EoverP[i]->Fill(EoverP, ncells);
3209 fM02_EoverP[i]->Fill(M02,EoverP);
3210 fM20_EoverP[i]->Fill(M20,EoverP);
3211 fECluster_ptbins[i]->Fill(Energy);
3212 fEoverP_ptbins[i]->Fill(EoverP);
3214 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
3215 fNcells_electrons[i]->Fill(ncells);
3218 if(M02<0.5 && M20<0.3) {
3219 fEoverP_wSSCut[i]->Fill(EoverP);
3224 fNcells_pt->Fill(fPt, ncells);
3227 ////////////////////////////////////////////////////////////////////
3228 ///EMCal - Efficiency calculations
3231 if(fIsMC && fIsAOD && track->GetLabel()>=0)
3233 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3234 Int_t pdg = fMCparticle->GetPdgCode();
3237 if(fMCparticle->IsPhysicalPrimary()){
3239 //Phi cut && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi()
3240 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3242 Bool_t MotherFound = FindMother(track->GetLabel());
3244 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3245 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3246 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCparticle->Pt());
3253 else if(fIsMC && track->GetLabel()>=0)//ESD
3256 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
3259 fMCtrack = fMCstack->Particle(track->GetLabel());
3261 Int_t pdg = fMCtrack->GetPdgCode();
3262 //Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
3263 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax )
3265 Bool_t MotherFound = FindMother(track->GetLabel());
3266 //MotherFound included
3268 if(fMCtrack->GetFirstMother()>0){
3269 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3270 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
3271 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCtrack->Pt());
3279 //_______________________________________________________
3281 if(fEoverPnsigma)SetEoverPCutPtDependentMC(track->Pt());
3283 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
3287 fECluster[2]->Fill(Energy);
3288 fTPCNcls_pid[3]->Fill(TPCNcls, TPCNcls_pid);
3293 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
3294 fPtElec_Inc->Fill(fPt);
3295 //eta phi distribution for data
3296 fEtaPhi_data->Fill(track->Phi(),track->Eta());
3299 //Eta cut for background
3300 if(fFillBackground){
3301 fEtad[2]->Fill(track->Eta());
3303 //background for triggered data: trigger electron must have same cuts on shower shape 06/Jan/2014
3304 if(fUseShowerShapeCut){
3305 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3306 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
3307 Background(track, iTracks, Vtrack, kFALSE);
3312 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
3313 Background(track, iTracks, Vtrack, kFALSE);
3319 double emctof2 = fClus->GetTOF();
3320 ftimingEle2->Fill(fPt,emctof2);
3321 //Correlation Analysis
3322 if(fCorrelationFlag)
3324 ElectronHadronCorrelation(track, iTracks, Vtrack);
3327 //_______________________________________________________
3329 ////////////////////////////////////////////////////////////////////
3330 ///EMCal - efficiency calculations
3332 if(track->Charge()<0) fCharge_n->Fill(fPt);
3333 if(track->Charge()>0) fCharge_p->Fill(fPt);
3337 if(fIsMC && fIsAOD && track->GetLabel()>=0)//AOD
3339 if(track->Charge()<0) fCharge_n->Fill(fPt);
3340 if(track->Charge()>0) fCharge_p->Fill(fPt);
3342 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3343 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3344 Int_t pdg = fMCparticle->GetPdgCode();
3346 double proX = fMCparticle->Xv();
3347 double proY = fMCparticle->Yv();
3348 double proR = sqrt(pow(proX,2)+pow(proY,2));
3351 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi() ){
3353 if( TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0 ){
3354 Int_t mpdg = fMCparticleMother->GetPdgCode();
3355 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
3356 if(proR<7)fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
3359 if( TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCelectronAfterAll_Primary->Fill(fMCparticle->Pt());
3364 if(fMCparticle->IsPhysicalPrimary()){
3367 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3369 Bool_t MotherFound = FindMother(track->GetLabel());
3372 if(!fUseShowerShapeCut){
3374 //Unfolding pt_reco/pt_MC in the efficiency
3375 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
3376 fPtMCelectronAfterAll_unfolding->Fill(track->Pt());
3377 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
3379 //new histo to estimate how different is pt reco from pt MC
3380 fpt_reco_pt_MC_num->Fill(track->Pt(),fMCparticle->Pt());
3381 }//numerator for the total efficiency AOD
3383 //November 11 for efficiency of triggered data
3384 if(fUseShowerShapeCut){
3385 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3387 //Unfolding pt_reco/pt_MC in the efficiency
3388 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
3389 fPtMCelectronAfterAll_unfolding->Fill(track->Pt());
3390 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
3392 //new histo to estimate how different is pt reco from pt MC
3393 fpt_reco_pt_MC_num->Fill(track->Pt(),fMCparticle->Pt());
3394 }//numerator for the total efficiency AOD
3400 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3401 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3402 if(fIsHFE1)fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
3409 else if(fIsMC && track->GetLabel()>=0)//ESD
3411 if(track->Charge()<0) fCharge_n->Fill(fPt);
3412 if(track->Charge()>0) fCharge_p->Fill(fPt);
3414 fMCtrack = fMCstack->Particle(track->GetLabel());
3415 if(fMCtrack->GetFirstMother()>0)
3417 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3419 TParticle *particle=fMCstack->Particle(track->GetLabel());
3421 Int_t pdg = fMCtrack->GetPdgCode();
3424 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3426 if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 )
3428 Int_t mpdg = fMCtrackMother->GetPdgCode();
3429 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111)
3431 Double_t proR=particle->R();
3434 fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
3438 if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel()))
3440 fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
3444 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
3446 Bool_t MotherFound = FindMother(track->GetLabel());
3450 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3452 if(!fUseShowerShapeCut){
3454 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
3455 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
3458 //November 11 for efficiency of triggered data
3459 if(fUseShowerShapeCut){
3460 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3462 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
3463 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
3475 // Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
3476 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3478 //included MotherFound
3482 if(fMCtrack->GetFirstMother()>0){
3483 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3484 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
3486 if(fIsHFE1){fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());}
3493 ///////////////////////////////////////////////////////////////////
3501 //______________________________________________________________
3504 fVtxZ[2]->Fill(fZvtx);
3505 if(iTracks == 0)fNTracks[2]->Fill(fNOtrks);
3506 fNTracks_pt[2]->Fill(fNOtrks, fPt);
3507 fNTracks_eta[2]->Fill(fNOtrks, track->Eta());
3508 fNTracks_phi[2]->Fill(fNOtrks, track->Phi());
3509 fNClusters[2]->Fill(ClsNo);
3510 fTPCNcls_pid[2]->Fill(TPCNcls, TPCNcls_pid);
3512 //______________________________________________________________
3514 //_______________________________________________________
3515 //Correlation Analysis
3518 fPtElec_Inc->Fill(fPt);
3520 if(fCorrelationFlag)
3522 ElectronHadronCorrelation(track, iTracks, Vtrack);
3525 //_______________________________________________________
3527 ///________________________________________________________________________
3530 //__________________________________________________________________
3531 //Event Mixing Analysis
3533 if(fEventMixingFlag)
3535 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
3537 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
3539 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!
3544 //__________________________________________________________________
3546 delete fListOfmotherkink;
3547 PostData(1, fOutputList);
3550 //______________________________________________________________________
3551 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
3553 //Draw result to the screen
3554 //Called once at the end of the query
3556 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
3560 printf("ERROR: Output list not available\n");
3565 //______________________________________________________________________
3566 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
3568 //Check single track cuts for a given cut step
3569 //Note this function is called inside the UserExec function
3570 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
3571 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
3576 //______________________________________________________________________
3579 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
3581 ///_________________________________________________________________
3583 //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)
3587 if(track->GetLabel() < 0)
3589 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
3595 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3597 if(fMCparticle->GetMother()<0) return;
3599 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3600 if(fMCparticleMother->GetMother()>0)fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
3602 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3605 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
3606 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
3609 //October 08th weighted histos
3610 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221 ){
3612 Double_t mPt=fMCparticleMother->Pt();
3616 //________________________________________________________________
3617 //correction for d3 based on data
3619 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3621 mweight=CalculateWeight(111, x);
3624 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3626 mweight=CalculateWeight(221, x);
3630 //________________________________________________________________
3632 //Histo pT mother versus pT electron
3633 fpT_m_electron->Fill(mPt, track->Pt());
3635 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./mweight);
3636 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./mweight);
3638 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3640 Double_t gmPt=fMCparticleGMother->Pt();
3641 Double_t gmweight=1;
3643 //________________________________________________________________
3644 //correction for d3 based on data
3646 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3648 gmweight=CalculateWeight(111, x);
3650 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3652 gmweight=CalculateWeight(221, x);
3656 //________________________________________________________________
3657 //Histo pT gmother versus pT electron
3659 fpT_gm_electron->Fill(gmPt, track->Pt());
3661 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./gmweight);
3662 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./gmweight);
3665 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt());
3666 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt());
3673 fMCtrack = fMCstack->Particle(track->GetLabel());
3675 if(fMCtrack->GetFirstMother()<0) return;
3677 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3679 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3682 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
3683 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
3688 ///_________________________________________________________________
3690 //________________________________________________
3691 //Associated particle cut
3692 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
3693 fPartnerCuts->SetRequireITSRefit(kTRUE);
3694 fPartnerCuts->SetRequireTPCRefit(kTRUE);
3695 fPartnerCuts->SetEtaRange(-0.9,0.9);
3696 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
3697 fPartnerCuts->SetMinNClustersTPC(80);
3698 fPartnerCuts->SetPtRange(0,1e10);
3699 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
3700 //fPartnerCuts->SetMaxDCAToVertexXY(1);
3701 //fPartnerCuts->SetMaxDCAToVertexZ(3);
3702 //_________________________________________________
3704 ///#################################################################
3705 //Non-HFE reconstruction
3706 fNonHFE = new AliSelectNonHFE();
3707 fNonHFE->SetAODanalysis(fIsAOD);
3708 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
3709 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
3710 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
3711 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
3712 fNonHFE->SetAlgorithm("DCA"); //KF
3713 fNonHFE->SetPIDresponse(fPidResponse);
3714 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
3715 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
3718 fNonHFE->SetHistAngleBack(fOpAngleBack);
3719 fNonHFE->SetHistAngle(fOpAngle);
3720 fNonHFE->SetHistDCABack(fDCABack);
3721 fNonHFE->SetHistDCA(fDCA);
3722 fNonHFE->SetHistMassBack(fInvMassBack);
3723 fNonHFE->SetHistMass(fInvMass);
3726 fNonHFE->SetHistAngleBack(fOpAngleBack2);
3727 fNonHFE->SetHistAngle(fOpAngle2);
3728 fNonHFE->SetHistDCABack(fDCABack2);
3729 fNonHFE->SetHistDCA(fDCA2);
3730 fNonHFE->SetHistMassBack(fInvMassBack2);
3731 fNonHFE->SetHistMass(fInvMass2);
3734 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
3736 //index of track selected as partner
3737 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
3739 //Electron Information
3740 Double_t fPhiE = -999;
3741 Double_t fEtaE = -999;
3742 Double_t fPtE = -999;
3743 fPhiE = track->Phi();
3744 fEtaE = track->Eta();
3747 ///_________________________________________________________________
3753 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3759 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3760 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3765 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3766 Double_t mPt=fMCparticleMother->Pt();
3767 Double_t mweight1=1;
3768 Double_t mweight2=1;
3769 //Double_t weight=1;
3772 //----------------------------------------------------------------------------
3773 //correction based on data only
3774 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3776 weight=CalculateWeight(111, x);
3778 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3780 weight=CalculateWeight(221, x);
3784 //----------------------------------------------------------------------------
3787 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
3788 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
3791 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, mweight1);
3792 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, mweight2);
3794 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3795 Double_t gmPt=fMCparticleGMother->Pt();
3796 Double_t gmweight1=1;
3797 Double_t gmweight2=1;
3798 //Double_t weight=1;
3800 //----------------------------------------------------------------------------
3802 //----------------------------------------------------------------------------
3804 //correction based on data only for pi0
3806 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3808 weight=CalculateWeight(111, x);
3810 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3812 weight=CalculateWeight(221, x);
3820 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
3821 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
3824 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, gmweight1);
3825 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, gmweight2);
3828 if(fNonHFE->IsULS()) fPtElec_ULS_weight->Fill(fPtE,fNonHFE->GetNULS());
3829 if(fNonHFE->IsLS()) fPtElec_LS_weight->Fill(fPtE,fNonHFE->GetNLS());
3836 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
3837 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
3839 //new 08 October //weighted histograms
3840 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3841 Double_t mPt=fMCparticleMother->Pt();
3843 Double_t mweight1=1;
3844 Double_t mweight2=1;
3845 //Double_t weight=1;
3848 //----------------------------------------------------------------------------
3850 //correction based on data for d3
3852 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3854 weight=CalculateWeight(111, x);
3857 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3859 weight=CalculateWeight(221, x);
3865 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
3866 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
3869 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, mweight1);
3870 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, mweight2);
3872 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3873 Double_t gmPt=fMCparticleGMother->Pt();
3874 Double_t gmweight1=1;
3875 Double_t gmweight2=1;
3876 //Double_t weight=1;
3879 //----------------------------------------------------------------------------
3880 //correction based on data only for pi0
3882 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3884 weight=CalculateWeight(111, x);
3888 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3890 weight=CalculateWeight(221, x);
3893 //----------------------------------------------------------------------------
3898 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
3899 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
3902 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, gmweight1);
3903 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, gmweight2);
3906 if(fNonHFE->IsULS()) fPtElec_ULS2_weight->Fill(fPtE,fNonHFE->GetNULS());
3907 if(fNonHFE->IsLS()) fPtElec_LS2_weight->Fill(fPtE,fNonHFE->GetNLS());
3911 //----------------------------------------------------------------------------
3912 //to check other way to calculate efficiency
3913 //ULS with no weight from ULS-LS original
3914 //we have to know if track2 comes from same mother!!!
3915 //----------------------------------------------------------------------------
3916 if(fNonHFE->IsULS()){
3918 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3921 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3924 printf("ERROR: Could not receive track %d\n", iTracks);
3927 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3928 if(track2->GetLabel()<0) continue;
3929 fMCparticle2 = (AliAODMCParticle*) fMCarray->At(track2->GetLabel());
3930 if(fMCparticle2->GetMother()<0) continue;
3932 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
3934 if(fUlsPartner[i]==iTracks){
3935 //only fill if it has same mother
3936 //with weight to take into account the number of partners
3937 if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC->Fill(fPtE, fNonHFE->GetNULS());
3939 //-----------------------------------------------------------------------------------------------------------
3941 //Double_t weight2=1;
3942 Double_t mPt=fMCparticleMother->Pt();
3945 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3947 weight=CalculateWeight(111, x);
3951 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3953 weight=CalculateWeight(221, x);
3958 //weight for grandmother
3960 if((fMCparticleMother->GetMother()>0) && TMath::Abs(((fMCparticleGMother->GetPdgCode())==111))){
3961 Double_t gmPt=fMCparticleGMother->Pt();
3963 weight=CalculateWeight(111, x);
3966 if((fMCparticleMother->GetMother()>0) && TMath::Abs(((fMCparticleGMother->GetPdgCode())==221))){
3967 Double_t gmPt=fMCparticleGMother->Pt();
3969 weight=CalculateWeight(221, x);
3974 if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC_weight->Fill(fPtE, (fNonHFE->GetNULS())*1./weight);
3976 //-----------------------------------------------------------------------------------------------------------
3979 }//partner found same as track
3980 }//loop in all partner
3984 //----------------------------------------------------------------------------
3985 //end of part to check other way to calculate efficiency
3986 //----------------------------------------------------------------------------
3993 //ULS-LS with no pid AOD
3994 if(fNonHFE->IsULS()) fPtElec_ULS_NoPid->Fill(fPtE,fNonHFE->GetNULS());
3995 if(fNonHFE->IsLS()) fPtElec_LS_NoPid->Fill(fPtE,fNonHFE->GetNLS());
4002 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
4005 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4006 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4010 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
4011 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
4018 ///_________________________________________________________________
4023 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4024 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4028 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
4029 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
4033 //for MC closure test
4034 // to be used as data, with MC input
4036 if(fNonHFE->IsULS()) fPtElec_ULS_mc_closure->Fill(fPtE,fNonHFE->GetNULS());
4037 if(fNonHFE->IsLS()) fPtElec_LS_mc_closure->Fill(fPtE,fNonHFE->GetNLS());
4041 if(fNonHFE->IsULS()) fPtElec_ULS2_mc_closure->Fill(fPtE,fNonHFE->GetNULS());
4042 if(fNonHFE->IsLS()) fPtElec_LS2_mc_closure->Fill(fPtE,fNonHFE->GetNLS());
4047 }//end of Background function
4049 //______________________________________________________________________
4050 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
4053 ///_________________________________________________________________
4057 if(track->GetLabel() < 0)
4059 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
4065 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
4067 if(fMCparticle->GetMother()<0) return;
4069 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
4071 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
4074 fPtBackgroundBeforeReco->Fill(track->Pt());
4079 fMCtrack = fMCstack->Particle(track->GetLabel());
4081 if(fMCtrack->GetFirstMother()<0) return;
4083 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
4085 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
4088 fPtBackgroundBeforeReco->Fill(track->Pt());
4092 ///_________________________________________________________________
4094 //________________________________________________
4095 //Associated particle cut
4096 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
4097 fPartnerCuts->SetRequireITSRefit(kTRUE);
4098 fPartnerCuts->SetRequireTPCRefit(kTRUE);
4099 fPartnerCuts->SetEtaRange(-0.9,0.9);
4100 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
4101 fPartnerCuts->SetMinNClustersTPC(80);
4102 fPartnerCuts->SetPtRange(0.3,1e10);
4103 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
4104 //fPartnerCuts->SetMaxDCAToVertexXY(1);
4105 //fPartnerCuts->SetMaxDCAToVertexZ(3);
4106 //_________________________________________________
4108 ///#################################################################
4109 //Non-HFE reconstruction
4110 fNonHFE = new AliSelectNonHFE();
4111 fNonHFE->SetAODanalysis(fIsAOD);
4112 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
4113 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
4114 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
4115 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
4116 fNonHFE->SetAlgorithm("DCA"); //KF
4117 fNonHFE->SetPIDresponse(fPidResponse);
4118 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
4119 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
4122 fNonHFE->SetHistAngleBack(fOpAngleBack);
4123 fNonHFE->SetHistAngle(fOpAngle);
4124 fNonHFE->SetHistDCABack(fDCABack);
4125 fNonHFE->SetHistDCA(fDCA);
4126 fNonHFE->SetHistMassBack(fInvMassBack);
4127 fNonHFE->SetHistMass(fInvMass);
4129 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
4131 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
4132 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
4133 Bool_t fUlsIsPartner = kFALSE;
4134 Bool_t fLsIsPartner = kFALSE;
4135 ///#################################################################
4138 //Electron Information
4139 Double_t fPhiE = -999;
4140 Double_t fEtaE = -999;
4141 Double_t fPhiH = -999;
4142 Double_t fEtaH = -999;
4143 Double_t fDphi = -999;
4144 Double_t fDeta = -999;
4145 Double_t fPtE = -999;
4146 Double_t fPtH = -999;
4148 Double_t pi = TMath::Pi();
4150 fPhiE = track->Phi();
4151 fEtaE = track->Eta();
4155 ///_________________________________________________________________
4161 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
4163 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4164 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4169 if(fNonHFE->IsULS()) fPtElec_ULS_NoPid->Fill(fPtE,fNonHFE->GetNULS());
4170 if(fNonHFE->IsLS()) fPtElec_LS_NoPid->Fill(fPtE,fNonHFE->GetNLS());
4174 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
4176 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4177 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4184 ///_________________________________________________________________
4187 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4188 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4194 //__________________________________________________________________
4195 //Event Mixing Analysis - Hadron Loop
4197 if(fEventMixingFlag)
4199 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
4201 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
4203 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
4205 fPoolNevents->Fill(fPool->GetCurrentNEvents());
4207 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
4209 TObjArray* bgTracks = fPool->GetEvent(jMix);
4211 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
4213 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
4214 if (NULL == MixedTrack) continue;
4216 fPhiH = MixedTrack->Phi();
4217 fEtaH = MixedTrack->Eta();
4218 fPtH = MixedTrack->Pt();
4220 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4222 fDphi = fPhiE - fPhiH;
4224 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4225 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4227 fDeta = fEtaE - fEtaH;
4229 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4231 for(Int_t i = 0; i < 6; i++)
4233 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4235 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
4237 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
4238 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
4240 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4241 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4245 // TODO your code: do event mixing with current event and bgTracks
4246 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
4251 //__________________________________________________________________
4253 //__________________________________________________________________
4254 //Same Event Analysis - Hadron Loop
4255 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4257 if(trackIndex==iTracks) continue;
4259 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4262 printf("ERROR: Could not receive track %d\n", iTracks);
4266 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4268 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4272 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4273 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4274 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4275 if(atrack2->GetTPCNcls() < 80) continue;
4276 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4280 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4281 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4284 fPhiH = track2->Phi();
4285 fEtaH = track2->Eta();
4286 fPtH = track2->Pt();
4288 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4290 fDphi = fPhiE - fPhiH;
4292 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4293 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4295 fDeta = fEtaE - fEtaH;
4297 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4299 //______________________________________________________________
4300 //Check if this track is a Non-HFE partner
4301 fUlsIsPartner = kFALSE;
4302 fLsIsPartner = kFALSE;
4303 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
4305 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
4307 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
4309 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
4311 //______________________________________________________________
4313 for(Int_t i = 0; i < 6; i++)
4315 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4317 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
4319 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
4320 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
4321 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
4322 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
4324 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4325 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4326 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4327 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4333 //____________________________________________________________________________________________________________
4334 //Create a TObjArray with selected hadrons, for the mixed event analysis
4335 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
4337 fTracksClone = new TObjArray;
4338 fTracksClone->SetOwner(kTRUE);
4340 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4342 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4345 printf("ERROR: Could not receive track %d\n", iTracks);
4349 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4351 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4355 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4356 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4357 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4358 if(atrack2->GetTPCNcls() < 80) continue;
4359 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4363 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4364 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4367 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
4369 return fTracksClone;
4371 //____________________________________________________________________________________________________________
4373 //______________________________________________________________________
4374 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
4376 //________________________________________________
4377 //Associated particle cut
4378 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
4379 fPartnerCuts->SetRequireITSRefit(kTRUE);
4380 fPartnerCuts->SetRequireTPCRefit(kTRUE);
4381 fPartnerCuts->SetEtaRange(-0.9,0.9);
4382 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
4383 fPartnerCuts->SetMinNClustersTPC(80);
4384 fPartnerCuts->SetPtRange(0.3,1e10);
4385 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
4386 //fPartnerCuts->SetMaxDCAToVertexXY(1);
4387 //fPartnerCuts->SetMaxDCAToVertexZ(3);
4388 //_________________________________________________
4390 //Electron Information
4391 Double_t fPhiE = -999;
4392 Double_t fEtaE = -999;
4393 Double_t fPhiH = -999;
4394 Double_t fEtaH = -999;
4395 Double_t fDphi = -999;
4396 Double_t fDeta = -999;
4397 Double_t fPtE = -999;
4398 Double_t fPtH = -999;
4400 Double_t pi = TMath::Pi();
4402 fPhiE = track->Phi();
4403 fEtaE = track->Eta();
4406 //__________________________________________________________________
4407 //Same Event Analysis - Hadron Loop
4408 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4410 if(trackIndex==iTracks) continue;
4412 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4415 printf("ERROR: Could not receive track %d\n", iTracks);
4419 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4420 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4424 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4425 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4426 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4427 if(atrack2->GetTPCNcls() < 80) continue;
4428 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4432 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4433 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4436 fPhiH = track2->Phi();
4437 fEtaH = track2->Eta();
4438 fPtH = track2->Pt();
4440 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4442 fDphi = fPhiE - fPhiH;
4444 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4445 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4447 fDeta = fEtaE - fEtaH;
4449 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4451 for(Int_t i = 0; i < 6; i++)
4453 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4455 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
4460 //____________________________________________________________________________________________________________
4462 //______________________________________________________________________
4463 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
4470 fIsFromPi0 = kFALSE;
4471 fIsFromEta = kFALSE;
4472 fIsFromGamma = kFALSE;
4474 if(mcIndex < 0 || !fIsMC)
4480 Int_t mpdg = -99999;
4481 Int_t gmpdg = -99999;
4482 Int_t ggmpdg = -99999;
4483 Int_t gggmpdg = -99999;
4487 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
4489 pdg = TMath::Abs(fMCparticle->GetPdgCode());
4499 fIsFromPi0 = kFALSE;
4500 fIsFromEta = kFALSE;
4501 fIsFromGamma = kFALSE;
4505 if(fMCparticle->GetMother()<0)
4512 fIsFromPi0 = kFALSE;
4513 fIsFromEta = kFALSE;
4514 fIsFromGamma = kFALSE;
4518 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
4519 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
4521 if(fMCparticleMother->GetMother()<0)
4529 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
4530 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
4531 if(fMCparticleGMother->GetMother()<0)
4538 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
4539 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
4540 if(fMCparticleGGMother->GetMother()<0)
4546 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
4547 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
4554 fMCtrack = fMCstack->Particle(mcIndex);
4556 pdg = TMath::Abs(fMCtrack->GetPdgCode());
4565 fIsFromPi0 = kFALSE;
4566 fIsFromEta = kFALSE;
4567 fIsFromGamma = kFALSE;
4571 if(fMCtrack->GetFirstMother()<0)
4578 fIsFromPi0 = kFALSE;
4579 fIsFromEta = kFALSE;
4580 fIsFromGamma = kFALSE;
4584 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
4585 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
4587 if(fMCtrackMother->GetFirstMother()<0)
4595 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
4596 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
4598 if(fMCtrackGMother->GetFirstMother()<0)
4605 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
4606 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
4608 if(fMCtrackGGMother->GetFirstMother()<0)
4614 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
4615 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
4621 //Tag Electron Source
4622 if(mpdg==111 || mpdg==221 || mpdg==22)
4630 fIsFromPi0 = kFALSE;
4631 fIsFromEta = kFALSE;
4632 fIsFromGamma = kFALSE;
4634 if(mpdg==111) fIsFromPi0 = kFALSE;
4635 if(mpdg==221)fIsFromEta = kFALSE;
4636 if(mpdg==22) fIsFromGamma = kFALSE;
4645 fIsFromPi0 = kFALSE;
4646 fIsFromEta = kFALSE;
4647 fIsFromGamma = kFALSE;
4654 if(mpdg>400 && mpdg<500)
4656 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
4671 else if(mpdg>500 && mpdg<600)
4688 Bool_t AliAnalysisTaskEMCalHFEpA::ContainsBadChannel(TString calorimeter,UShort_t* cellList, Int_t nCells)
4690 // Check that in the cluster cells, there is no bad channel of those stored
4691 // in fEMCALBadChannelMap
4692 // adapted from AliCalorimeterUtils
4694 //if (!fRemoveBadChannels) return kFALSE;
4695 //printf("fEMCALBadChannelMap %p, fPHOSBadChannelMap %p \n",fEMCALBadChannelMap,fPHOSBadChannelMap);
4696 if( !fEMCALRecoUtils->GetEMCALChannelStatusMap(0)) return kFALSE;
4701 for(Int_t iCell = 0; iCell<nCells; iCell++){
4703 //Get the column and row
4704 if(calorimeter == "EMCAL"){
4705 return fEMCALRecoUtils->ClusterContainsBadChannel((AliEMCALGeometry*)fEMCALGeo,cellList,nCells);
4709 }// cell cluster loop
4717 //________________________________________________________________________________
4718 TArrayI AliAnalysisTaskEMCalHFEpA::GetTriggerPatches(Bool_t IsEventEMCALL0, Bool_t IsEventEMCALL1)
4720 // Select the patches that triggered
4721 // Depend on L0 or L1
4724 //Int_t trigtimes[30], globCol, globRow,ntimes, i;
4725 Int_t globCol, globRow;
4727 Int_t absId = -1; //[100];
4732 // get object pointer
4733 AliVCaloTrigger *caloTrigger = InputEvent()->GetCaloTrigger( "EMCAL" );
4735 // class is not empty
4736 if( caloTrigger->GetEntries() > 0 )
4738 // must reset before usage, or the class will fail
4739 caloTrigger->Reset();
4741 // go throuth the trigger channels
4742 while( caloTrigger->Next() )
4744 // get position in global 2x2 tower coordinates
4745 caloTrigger->GetPosition( globCol, globRow );
4754 else if(IsEventEMCALL1) // L1
4757 caloTrigger->GetTriggerBits(bit);
4759 Bool_t isEGA = ((bit >> fBitEGA) & 0x1);
4760 //Bool_t isEJE = ((bit >> fBitEJE) & 0x1) && IsEventEMCALL1Jet () ;
4762 if(!isEGA) continue;
4764 Int_t patchsize = -1;
4765 if(isEGA) patchsize = 2;
4766 //else if (isEJE) patchsize = 16;
4768 // add 2x2 (EGA) or 16x16 (EJE) patches
4769 for(Int_t irow=0; irow < patchsize; irow++)
4771 for(Int_t icol=0; icol < patchsize; icol++)
4773 GetCaloUtils()->GetEMCALGeometry()->GetAbsFastORIndexFromPositionInEMCAL(globCol+icol,globRow+irow, absId);
4774 //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absIDTrig[nTrig]);
4775 patches.Set(nPatch+1); // Set size of this array to nPatch+1 ints.
4776 patches.AddAt(absId,nPatch++); //Add Int_t absId at position nPatch++
4782 } // trigger iterator
4783 } // go thorough triggers
4785 printf("N patches %d, test %d,first %d, last %d\n",patches.GetSize(), nPatch, patches.At(0), patches.At(patches.GetSize()-1));
4790 Double_t AliAnalysisTaskEMCalHFEpA::CalculateWeight(Int_t pdg_particle, Double_t x)
4792 //weight for d3 based on MinJung parametrization //sent by Jan
4794 if(pdg_particle==111){
4795 if(x>= 0.100000 && x < 0.112797 ) weight=1.262120;
4796 if(x>= 0.112797 && x < 0.127231 ) weight=1.277765;
4797 if(x>= 0.127231 && x < 0.143512 ) weight=1.295605;
4798 if(x>= 0.143512 && x < 0.161877 ) weight=1.318155;
4799 if(x>= 0.161877 && x < 0.182592 ) weight=1.348693;
4800 if(x>= 0.182592 && x < 0.205957 ) weight=1.388636;
4801 if(x>= 0.205957 && x < 0.232313 ) weight=1.439122;
4802 if(x>= 0.232313 && x < 0.262041 ) weight=1.497452;
4803 if(x>= 0.262041 && x < 0.295573 ) weight=1.559409;
4804 if(x>= 0.295573 && x < 0.333397 ) weight=1.615169;
4805 if(x>= 0.333397 && x < 0.376060 ) weight=1.654954;
4806 if(x>= 0.376060 && x < 0.424183 ) weight=1.668753;
4807 if(x>= 0.424183 && x < 0.478465 ) weight=1.652225;
4808 if(x>= 0.478465 && x < 0.539692 ) weight=1.603119;
4809 if(x>= 0.539692 && x < 0.608754 ) weight=1.526049;
4810 if(x>= 0.608754 && x < 0.686654 ) weight=1.426724;
4811 if(x>= 0.686654 && x < 0.774523 ) weight=1.312684;
4812 if(x>= 0.774523 && x < 0.873636 ) weight=1.195395;
4813 if(x>= 0.873636 && x < 0.985432 ) weight=1.086264;
4814 if(x>= 0.985432 && x < 1.111534 ) weight=0.993666;
4815 if(x>= 1.111534 && x < 1.253773 ) weight=0.922587;
4816 if(x>= 1.253773 && x < 1.414214 ) weight=0.875739;
4817 if(x>= 1.414214 && x < 1.595185 ) weight=0.852181;
4818 if(x>= 1.595185 && x < 1.799315 ) weight=0.847828;
4819 if(x>= 1.799315 && x < 2.029567 ) weight=0.863875;
4820 if(x>= 2.029567 && x < 2.289283 ) weight=0.899112;
4821 if(x>= 2.289283 && x < 2.582235 ) weight=0.955194;
4822 if(x>= 2.582235 && x < 2.912674 ) weight=1.033824;
4823 if(x>= 2.912674 && x < 3.285398 ) weight=1.133714;
4824 if(x>= 3.285398 && x < 3.705818 ) weight=1.259471;
4825 if(x>= 3.705818 && x < 4.180038 ) weight=1.406883;
4826 if(x>= 4.180038 && x < 4.714942 ) weight=1.578923;
4827 if(x>= 4.714942 && x < 5.318296 ) weight=1.778513;
4828 if(x>= 5.318296 && x < 5.998859 ) weight=2.001171;
4829 if(x>= 5.998859 && x < 6.766511 ) weight=2.223161;
4830 if(x>= 6.766511 && x < 7.632396 ) weight=2.449445;
4831 if(x>= 7.632396 && x < 8.609086 ) weight=2.661734;
4832 if(x>= 8.609086 && x < 9.710759 ) weight=2.851935;
4833 if(x>= 9.710759 && x < 10.953409 ) weight=2.974319;
4834 if(x>= 10.953409 && x < 12.355077 ) weight=3.106314;
4835 if(x>= 12.355077 && x < 13.936111 ) weight=3.126815;
4836 if(x>= 13.936111 && x < 15.719464 ) weight=3.150053;
4837 if(x>= 15.719464 && x < 17.731026 ) weight=3.218509;
4838 if(x>= 17.731026 && x < 20.000000 ) weight=3.252141;
4841 else if(pdg_particle==221){
4842 if(x>= 0.100000 && x < 0.112797 ) weight=2.159358;
4843 if(x>= 0.112797 && x < 0.127231 ) weight=2.145546;
4844 if(x>= 0.127231 && x < 0.143512 ) weight=2.132390;
4845 if(x>= 0.143512 && x < 0.161877 ) weight=2.109918;
4846 if(x>= 0.161877 && x < 0.182592 ) weight=2.084920;
4847 if(x>= 0.182592 && x < 0.205957 ) weight=2.054302;
4848 if(x>= 0.205957 && x < 0.232313 ) weight=2.015202;
4849 if(x>= 0.232313 && x < 0.262041 ) weight=1.966068;
4850 if(x>= 0.262041 && x < 0.295573 ) weight=1.912255;
4851 if(x>= 0.295573 && x < 0.333397 ) weight=1.844087;
4852 if(x>= 0.333397 && x < 0.376060 ) weight=1.767913;
4853 if(x>= 0.376060 && x < 0.424183 ) weight=1.680366;
4854 if(x>= 0.424183 && x < 0.478465 ) weight=1.583468;
4855 if(x>= 0.478465 && x < 0.539692 ) weight=1.475131;
4856 if(x>= 0.539692 && x < 0.608754 ) weight=1.361436;
4857 if(x>= 0.608754 && x < 0.686654 ) weight=1.244388;
4858 if(x>= 0.686654 && x < 0.774523 ) weight=1.125973;
4859 if(x>= 0.774523 && x < 0.873636 ) weight=1.015769;
4860 if(x>= 0.873636 && x < 0.985432 ) weight=0.914579;
4861 if(x>= 0.985432 && x < 1.111534 ) weight=0.830529;
4862 if(x>= 1.111534 && x < 1.253773 ) weight=0.766397;
4863 if(x>= 1.253773 && x < 1.414214 ) weight=0.723663;
4864 if(x>= 1.414214 && x < 1.595185 ) weight=0.701236;
4865 if(x>= 1.595185 && x < 1.799315 ) weight=0.695605;
4866 if(x>= 1.799315 && x < 2.029567 ) weight=0.707578;
4867 if(x>= 2.029567 && x < 2.289283 ) weight=0.735194;
4868 if(x>= 2.289283 && x < 2.582235 ) weight=0.781052;
4869 if(x>= 2.582235 && x < 2.912674 ) weight=0.842350;
4870 if(x>= 2.912674 && x < 3.285398 ) weight=0.923676;
4871 if(x>= 3.285398 && x < 3.705818 ) weight=1.028317;
4872 if(x>= 3.705818 && x < 4.180038 ) weight=1.154029;
4873 if(x>= 4.180038 && x < 4.714942 ) weight=1.296915;
4874 if(x>= 4.714942 && x < 5.318296 ) weight=1.463674;
4875 if(x>= 5.318296 && x < 5.998859 ) weight=1.651985;
4876 if(x>= 5.998859 && x < 6.766511 ) weight=1.847912;
4877 if(x>= 6.766511 && x < 7.632396 ) weight=2.066284;
4878 if(x>= 7.632396 && x < 8.609086 ) weight=2.202231;
4879 if(x>= 8.609086 && x < 9.710759 ) weight=2.399942;
4880 if(x>= 9.710759 && x < 10.953409 ) weight=2.555106;
4881 if(x>= 10.953409 && x < 12.355077 ) weight=2.632377;
4882 if(x>= 12.355077 && x < 13.936111 ) weight=2.609660;
4883 if(x>= 13.936111 && x < 15.719464 ) weight=2.656343;
4884 if(x>= 15.719464 && x < 17.731026 ) weight=2.615438;
4885 if(x>= 17.731026 && x < 20.000000 ) weight=2.576269;
4893 Double_t AliAnalysisTaskEMCalHFEpA::SetEoverPCutPtDependentMC(Double_t pt)
4900 ////======================================================================================
4901 ////======================================================================================
4902 ////============================= data 2 sigma ===========================================
4905 if(pt>= 2.00 && pt < 2.50){
4906 fEoverPCutMin=0.7719;
4907 fEoverPCutMax=1.1023;
4909 if(pt>= 2.50 && pt < 3.00){
4910 fEoverPCutMin=0.7966;
4911 fEoverPCutMax=1.1088;
4913 if(pt>= 3.00 && pt < 4.00){
4914 fEoverPCutMin=0.8175;
4915 fEoverPCutMax=1.1101;
4917 if(pt>= 4.00 && pt < 5.00){
4918 fEoverPCutMin=0.8302;
4919 fEoverPCutMax=1.1194;
4921 if(pt>= 5.00 && pt < 6.00){
4922 fEoverPCutMin=0.8517;
4923 fEoverPCutMax=1.1177;
4925 if(pt>= 6.00 && pt < 8.00){
4926 fEoverPCutMin=0.8901;
4927 fEoverPCutMax=1.1139;
4929 if(pt>= 8.00 && pt < 10.00){
4930 fEoverPCutMin=0.8703;
4931 fEoverPCutMax=1.1377;
4933 if(pt>= 10.00 && pt < 12.00){
4934 fEoverPCutMin=0.9043;
4935 fEoverPCutMax=1.1977;
4939 ////=========================================== MC 2 sigma ===========================================
4944 if(pt>= 2.00 && pt < 2.50){
4945 fEoverPCutMin=0.7712;
4946 fEoverPCutMax=1.0746;
4948 if(pt>= 2.50 && pt < 3.00){
4949 fEoverPCutMin=0.7946;
4950 fEoverPCutMax=1.0708;
4952 if(pt>= 3.00 && pt < 4.00){
4953 fEoverPCutMin=0.8196;
4954 fEoverPCutMax=1.0678;
4956 if(pt>= 4.00 && pt < 5.00){
4957 fEoverPCutMin=0.8396;
4958 fEoverPCutMax=1.0646;
4960 if(pt>= 5.00 && pt < 6.00){
4961 fEoverPCutMin=0.8527;
4962 fEoverPCutMax=1.0647;
4964 if(pt>= 6.00 && pt < 8.00){
4965 fEoverPCutMin=0.8652;
4966 fEoverPCutMax=1.0670;
4968 if(pt>= 8.00 && pt < 10.00){
4969 fEoverPCutMin=0.8748;
4970 fEoverPCutMax=1.0804;
4972 if(pt>= 10.00 && pt < 12.00){
4973 fEoverPCutMin=0.8814;
4974 fEoverPCutMax=1.0842;
4979 ////======================================================================================
4980 ////======================================================================================
4981 ////=========================== data 1.5 sigma ===========================================
4985 if(pt>= 2.00 && pt < 2.50){
4986 fEoverPCutMin=0.8132;
4987 fEoverPCutMax=1.0610;
4989 if(pt>= 2.50 && pt < 3.00){
4990 fEoverPCutMin=0.8356;
4991 fEoverPCutMax=1.0698;
4993 if(pt>= 3.00 && pt < 4.00){
4994 fEoverPCutMin=0.8541;
4995 fEoverPCutMax=1.0735;
4997 if(pt>= 4.00 && pt < 5.00){
4998 fEoverPCutMin=0.8664;
4999 fEoverPCutMax=1.0832;
5001 if(pt>= 5.00 && pt < 6.00){
5002 fEoverPCutMin=0.8849;
5003 fEoverPCutMax=1.0845;
5005 if(pt>= 6.00 && pt < 8.00){
5006 fEoverPCutMin=0.9180;
5007 fEoverPCutMax=1.0860;
5009 if(pt>= 8.00 && pt < 10.00){
5010 fEoverPCutMin=0.9037;
5011 fEoverPCutMax=1.1043;
5013 if(pt>= 10.00 && pt < 12.00){
5014 fEoverPCutMin=0.9409;
5015 fEoverPCutMax=1.1611;
5019 ////======================================================================================
5020 ////======================================================================================
5021 ////=========================== MC 1.5 sigma ===========================================
5025 if(pt>= 2.00 && pt < 2.50){
5026 fEoverPCutMin=0.8091;
5027 fEoverPCutMax=1.0367;
5029 if(pt>= 2.50 && pt < 3.00){
5030 fEoverPCutMin=0.8292;
5031 fEoverPCutMax=1.0362;
5033 if(pt>= 3.00 && pt < 4.00){
5034 fEoverPCutMin=0.8506;
5035 fEoverPCutMax=1.0368;
5037 if(pt>= 4.00 && pt < 5.00){
5038 fEoverPCutMin=0.8677;
5039 fEoverPCutMax=1.0365;
5041 if(pt>= 5.00 && pt < 6.00){
5042 fEoverPCutMin=0.8792;
5043 fEoverPCutMax=1.0382;
5045 if(pt>= 6.00 && pt < 8.00){
5046 fEoverPCutMin=0.8904;
5047 fEoverPCutMax=1.0418;
5049 if(pt>= 8.00 && pt < 10.00){
5050 fEoverPCutMin=0.9005;
5051 fEoverPCutMax=1.0547;
5053 if(pt>= 10.00 && pt < 12.00){
5054 fEoverPCutMin=0.9067;
5055 fEoverPCutMax=1.0589;
5060 ////======================================================================================
5061 ////======================================================================================
5062 ////=========================== data 2.5 sigma ===========================================
5066 if(pt>= 2.00 && pt < 2.50){
5067 fEoverPCutMin=0.7306;
5068 fEoverPCutMax=1.1436;
5070 if(pt>= 2.50 && pt < 3.00){
5071 fEoverPCutMin=0.7575;
5072 fEoverPCutMax=1.1479;
5074 if(pt>= 3.00 && pt < 4.00){
5075 fEoverPCutMin=0.7809;
5076 fEoverPCutMax=1.1467;
5078 if(pt>= 4.00 && pt < 5.00){
5079 fEoverPCutMin=0.7941;
5080 fEoverPCutMax=1.1555;
5082 if(pt>= 5.00 && pt < 6.00){
5083 fEoverPCutMin=0.8184;
5084 fEoverPCutMax=1.1510;
5086 if(pt>= 6.00 && pt < 8.00){
5087 fEoverPCutMin=0.8621;
5088 fEoverPCutMax=1.1419;
5090 if(pt>= 8.00 && pt < 10.00){
5091 fEoverPCutMin=0.8368;
5092 fEoverPCutMax=1.1712;
5094 if(pt>= 10.00 && pt < 12.00){
5095 fEoverPCutMin=0.8676;
5096 fEoverPCutMax=1.2344;
5101 ////======================================================================================
5102 ////======================================================================================
5103 ////=========================== MC 2.5 sigma ===========================================
5107 if(pt>= 2.00 && pt < 2.50){
5108 fEoverPCutMin=0.7333;
5109 fEoverPCutMax=1.1125;
5111 if(pt>= 2.50 && pt < 3.00){
5112 fEoverPCutMin=0.7601;
5113 fEoverPCutMax=1.1053;
5115 if(pt>= 3.00 && pt < 4.00){
5116 fEoverPCutMin=0.7885;
5117 fEoverPCutMax=1.0989;
5119 if(pt>= 4.00 && pt < 5.00){
5120 fEoverPCutMin=0.8115;
5121 fEoverPCutMax=1.0927;
5123 if(pt>= 5.00 && pt < 6.00){
5124 fEoverPCutMin=0.8262;
5125 fEoverPCutMax=1.0912;
5127 if(pt>= 6.00 && pt < 8.00){
5128 fEoverPCutMin=0.8400;
5129 fEoverPCutMax=1.0922;
5131 if(pt>= 8.00 && pt < 10.00){
5132 fEoverPCutMin=0.8492;
5133 fEoverPCutMax=1.1060;
5135 if(pt>= 10.00 && pt < 12.00){
5136 fEoverPCutMin=0.8560;
5137 fEoverPCutMax=1.1096;
5142 return fEoverPCutMin;
5143 return fEoverPCutMax;