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 = ((AliVAODHeader*)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 = dynamic_cast<AliAODHeader*>(fAOD->GetHeader());
2163 // if(!aodh) AliFatal("Not a standard AOD");
2164 //Int_t bc= aodh->GetBunchCrossNumber();
2167 Int_t ClsNo_aod = -999;
2168 ClsNo_aod = fAOD->GetNumberOfCaloClusters();
2169 fNCluster_pure_aod->Fill(ClsNo_aod);
2170 //Bool_t exotic=kTRUE;
2172 for (Int_t i=0; i< ClsNo_aod; i++ ){
2174 //fClus = fVevent->GetCaloCluster(i);
2175 //to be compatible with Shingo
2176 AliVCluster *clust = 0x0;
2177 clust = (AliVCluster*) fAOD->GetCaloCluster(i);
2179 if(clust && clust->IsEMCAL())
2181 //pure cluster information
2182 fECluster_pure->Fill(clust->E());
2184 fNcells_energy->Fill(clust->GetNCells(),clust->E());
2185 fNCluster_ECluster->Fill(ClsNo_aod,clust->E());
2187 if(clust->E()>1000) fNevent->Fill(23);
2191 exotic = fEMCALRecoUtils->IsExoticCluster(clust, (AliVCaloCells*)fAOD->GetEMCALCells(), bc);
2192 if(exotic == kFALSE){
2193 fECluster_not_exotic->Fill(clust->E());
2194 fNcells_energy_not_exotic->Fill(clust->GetNCells(),clust->E());
2198 //approximation to remove exotics
2199 if(clust->GetNCells()<5 && clust->E()>15.0){
2200 fECluster_exotic->Fill(clust->E());
2202 //Marcel cut (another approximation to remove exotics)
2203 else if((clust->GetNCells())> ((clust->E())/3+1)){
2204 fECluster_not_exotic1->Fill(clust->E());
2207 fECluster_not_exotic2->Fill(clust->E());
2213 //______________________________________________________________________
2214 //Trying to remove events with bad cells and find patches
2215 //First, I will try to count them
2216 //______________________________________________________________________
2218 if(clust && clust->IsEMCAL())
2220 Bool_t badchannel = ContainsBadChannel("EMCAL", clust->GetCellsAbsId(),clust->GetNCells() );
2221 printf("Contém bad channel? %d ", badchannel);
2222 if(badchannel)fNevent2->Fill(0);
2224 //trying to find patches
2225 TArrayI patches_found=GetTriggerPatches(IsEventEMCALL0, IsEventEMCALL1);
2226 printf("N patches %d, first %d, last %d\n",patches_found.GetSize(), patches_found.At(0), patches_found.At(patches_found.GetSize()-1));
2231 //______________________________________________________________________
2238 fNevent->Fill(24); //events with cluster
2241 fVtxZ_new4->Fill(fZvtx);
2245 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
2246 else ClsNo = fAOD->GetNumberOfCaloClusters();
2248 //______________________________________________________________________
2250 ///_____________________________________________________________________
2252 Int_t NTracks=fVevent->GetNumberOfTracks();
2254 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2257 TClonesArray *fTracks_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("AODFilterTracks"));
2258 NTracks = fTracks_tender->GetEntries();
2259 TClonesArray *fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
2260 ClsNo = fCaloClusters_tender->GetEntries();
2263 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2265 for(Int_t iTracks = 0; iTracks < NTracks; iTracks++)
2267 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
2270 printf("ERROR: Could not receive track %d\n", iTracks);
2274 //main place where track is defined
2276 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
2277 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
2278 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
2280 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2283 TClonesArray *fTracks_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("AODFilterTracks"));
2284 track = static_cast<AliAODTrack*>(fTracks_tender->At(iTracks));
2286 printf("ERROR: Could not receive track calibrated %d\n", iTracks);
2290 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2292 Double_t fTPCnSigma = -999;
2293 Double_t fTOFnSigma = -999;
2294 Double_t fTPCnSigma_pion = -999;
2295 Double_t fTPCnSigma_proton = -999;
2296 Double_t fTPCnSigma_kaon = -999;
2297 Double_t fTPCsignal = -999;
2298 Double_t fPt = -999;
2302 //Etacut test on the begging
2303 fEtad[0]->Fill(track->Eta());
2304 //if(track->Eta()<fEtaCutMin || track->Eta()>fEtaCutMax) continue;
2305 fEtad[1]->Fill(track->Eta());
2310 ///_____________________________________________________________________________
2311 ///Fill QA plots without track selection
2313 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
2315 fTPCsignal = track->GetTPCsignal();
2316 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
2317 fTOFnSigma = fPidResponse->NumberOfSigmasTOF(track, AliPID::kElectron);
2318 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
2319 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
2320 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
2322 fTPC_p[0]->Fill(fPt,fTPCsignal);
2323 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
2326 Float_t TPCNcls = track->GetTPCNcls();
2328 Float_t TPCNcls_pid = track->GetTPCsignalN();
2332 Float_t pos[3]={0,0,0};
2334 Double_t fEMCflag = kFALSE;
2335 if(track->GetEMCALcluster()>0)
2337 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2338 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2341 int EMCalIndex = -1;
2342 EMCalIndex = track->GetEMCALcluster();
2343 TClonesArray *fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
2344 fClus = static_cast<AliVCluster*>(fCaloClusters_tender->At(EMCalIndex));
2346 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2348 if(fClus->IsEMCAL())
2351 //only for charged tracks
2352 fECluster[0]->Fill(fClus->E());
2355 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2358 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
2361 Float_t Energy = fClus->E();
2362 Float_t EoverP = Energy/track->P();
2363 //Float_t M02 = fClus->GetM02();
2364 //Float_t M20 = fClus->GetM20();
2366 /////////////// for Eta Phi distribution
2367 fClus->GetPosition(pos);
2368 TVector3 vpos(pos[0],pos[1],pos[2]);
2369 Double_t cphi = vpos.Phi();
2370 Double_t ceta = vpos.Eta();
2371 fEtaPhi[0]->Fill(cphi,ceta);
2374 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
2379 //______________________________________________________________
2382 fVtxZ[0]->Fill(fZvtx);
2383 if(iTracks == 0)fNTracks[0]->Fill(fNOtrks);
2384 fNTracks_pt[0]->Fill(fNOtrks, fPt);
2385 fNTracks_eta[0]->Fill(fNOtrks, track->Eta());
2386 fNTracks_phi[0]->Fill(fNOtrks, track->Phi());
2389 fNClusters[0]->Fill(ClsNo);
2390 fTPCNcls_pid[0]->Fill(TPCNcls, TPCNcls_pid);
2391 //______________________________________________________________
2393 ///Fill QA plots without track selection
2394 ///_____________________________________________________________________________
2395 //______________________________________________________________________________________
2396 //Track Selection Cuts
2398 //AOD (Test Filter Bit)
2401 // standard cuts with very loose DCA - BIT(4)
2404 GetStandardITSTPCTrackCuts2011(kFALSE)
2405 SetMaxChi2PerClusterTPC(4);
2406 SetAcceptKinkDaughters(kFALSE);
2407 SetRequireTPCRefit(kTRUE);
2408 SetRequireITSRefit(kTRUE);
2409 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
2410 SetMaxDCAToVertexZ(2);
2411 SetMaxDCAToVertex2D(kFALSE);
2412 SetRequireSigmaToVertex(kFALSE);
2413 SetMaxChi2PerClusterITS(36);
2414 SetMaxDCAToVertexXY(2.4)
2415 SetMaxDCAToVertexZ(3.2)
2416 SetDCaToVertex2D(kTRUE)
2419 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
2422 //RecKine: ITSTPC cuts
2423 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
2425 if(fRejectKinkMother)
2429 Bool_t kinkmotherpass = kTRUE;
2430 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
2432 if(track->GetID() == fListOfmotherkink[kinkmother])
2434 kinkmotherpass = kFALSE;
2438 if(!kinkmotherpass) continue;
2442 if(etrack->GetKinkIndex(0) != 0) continue;
2448 //it was not working on aod... testing again
2449 //July 29th, 2014: aparently working again
2454 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
2457 //HFEcuts: ITS layers cuts
2458 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
2460 //HFE cuts: TPC PID cleanup
2461 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
2463 //DCA cut done by hand -- July 29th, 2014 -> fix it... has to be in absolute values!!!!
2465 Double_t d0z0[2], cov[3];
2466 AliAODVertex *prim_vtx = fAOD->GetPrimaryVertex();
2467 track->PropagateToDCA(prim_vtx, fAOD->GetMagneticField(), 20., d0z0, cov);
2468 Double_t DCAxy = d0z0[0];
2469 Double_t DCAz = d0z0[1];
2471 if(DCAxy >= fDCAcutr || DCAz>=fDCAcutz) continue;
2478 //______________________________________________________________________________________
2481 //AOD test -- Francesco suggestion
2482 //aod test -- Francesco suggestion
2483 AliAODTrack *aod_track=dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iTracks));
2484 if(!aod_track) AliFatal("Not a standard AOD");
2486 Int_t type=aod_track->GetType();
2487 if(type==AliAODTrack::kPrimary) fPtPrim->Fill(aod_track->Pt());
2488 if(type==AliAODTrack::kFromDecayVtx) fPtSec->Fill(aod_track->Pt());
2490 //Int_t type2=track->GetType();
2491 if(type==AliAODTrack::kPrimary) fPtPrim2->Fill(track->Pt());
2492 if(type==AliAODTrack::kFromDecayVtx) fPtSec2->Fill(track->Pt());
2496 ///_____________________________________________________________
2497 ///QA plots after track selection
2500 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
2501 else fPtMCWithoutLabel->Fill(fPt);
2504 if(fIsMC && track->GetLabel()>=0)
2508 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2511 if(fMCparticle->IsPhysicalPrimary())
2513 fPtIsPhysicaPrimary->Fill(fPt);
2516 Int_t pdg = fMCparticle->GetPdgCode();
2517 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
2521 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2523 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
2525 if(fMCparticle->IsPhysicalPrimary())
2527 fPtMCparticleReco->Fill(fMCparticle->Pt());
2529 Bool_t MotherFound = FindMother(track->GetLabel());
2534 fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());//numerator tracking
2536 fpt_reco_pt_MC_den->Fill(track->Pt(),fMCparticle->Pt());
2540 fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
2555 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
2558 fMCtrack = fMCstack->Particle(track->GetLabel());
2559 Int_t pdg = fMCtrack->GetPdgCode();
2561 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2563 fPtMCparticleReco_nonPrimary->Fill(fMCtrack->Pt());//not Primary track
2567 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2569 fPtIsPhysicaPrimary->Fill(fPt);
2572 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
2574 fPtMCparticleReco->Fill(fMCtrack->Pt());
2576 Bool_t MotherFound = FindMother(track->GetLabel());
2579 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());//numerator tracking
2580 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
2588 fTPC_p[1]->Fill(fPt,fTPCsignal);
2589 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
2590 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
2591 Double_t fPtBin_trigger[11] = {1,2,4,6,8,10,12,14,16,18,20};
2593 TPCNcls = track->GetTPCNcls();
2594 Float_t pos2[3]={0,0,0};
2596 if(track->GetEMCALcluster()>0)
2598 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2599 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2602 int EMCalIndex = -1;
2603 EMCalIndex = track->GetEMCALcluster();
2604 TClonesArray *fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
2605 fClus = static_cast<AliVCluster*>(fCaloClusters_tender->At(EMCalIndex));
2607 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2609 if(fClus->IsEMCAL())
2611 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2613 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
2615 Float_t Energy = fClus->E();
2616 Float_t EoverP = Energy/track->P();
2617 Float_t M02 = fClus->GetM02();
2618 Float_t M20 = fClus->GetM20();
2619 Float_t ncells = fClus->GetNCells();
2621 /////////////// for Eta Phi distribution
2622 fClus->GetPosition(pos2);
2623 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
2624 Double_t cphi = vpos.Phi();
2625 Double_t ceta = vpos.Eta();
2626 fEtaPhi[1]->Fill(cphi,ceta);
2628 fECluster[1]->Fill(Energy);
2629 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
2632 //for EMCal trigger performance
2634 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
2635 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
2640 //for hadron contamination calculations
2644 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2646 //-------------------------------------------------------------------
2647 //true hadrons E/p shape before cuts
2648 if(fIsMC && fIsAOD && track->GetLabel()>=0){
2649 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2650 Int_t pdg = fMCparticle->GetPdgCode();
2652 if( TMath::Abs(pdg) != 11){
2653 fEoverP_pt_true_hadrons0->Fill(fPt,(fClus->E() / fP));
2658 //true electrons E/p shape before cuts
2659 if(fIsMC && fIsAOD && track->GetLabel()>=0){
2660 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2661 Int_t pdg = fMCparticle->GetPdgCode();
2663 if( TMath::Abs(pdg) == 11){
2664 fEoverP_pt_true_electrons0->Fill(fPt,(fClus->E() / fP));
2667 //-------------------------------------------------------------------
2671 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
2673 if(fTPCnSigma<-3.5){
2674 fEoverP_pt_hadrons->Fill(fPt,EoverP);
2675 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
2678 //after cut -> Are they really hadrons? E/p shape
2679 if(fIsMC && fIsAOD && track->GetLabel()>=0){
2680 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2681 Int_t pdg = fMCparticle->GetPdgCode();
2683 if( TMath::Abs(pdg) != 11){
2684 fEoverP_pt_true_hadrons->Fill(fPt,(fClus->E() / fP));
2692 //for systematic studies of hadron contamination
2693 if(fTPCnSigma < -3){
2694 fEoverP_pt_pions->Fill(fPt, EoverP);
2698 if(fTPCnSigma < -3.5){
2699 fEoverP_pt_pions2->Fill(fPt, EoverP);
2709 for(Int_t i = 0; i < 6; i++)
2711 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2714 if(fTPCnSigma < -5 && fTPCnSigma > -10){
2715 fNcells_hadrons[i]->Fill(ncells);
2717 //hadrons selection using E/p
2718 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
2719 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
2721 //electrons selection using E/p
2722 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
2723 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
2728 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
2730 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
2731 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
2735 if(fTPCnSigma < 3.5 && fCorrelationFlag)
2737 fPtTrigger_Inc->Fill(fPt);
2738 DiHadronCorrelation(track, iTracks);
2747 //______________________________________________________________
2750 fVtxZ[1]->Fill(fZvtx);
2751 if(iTracks == 0)fNTracks[1]->Fill(fNOtrks);
2752 fNTracks_pt[1]->Fill(fNOtrks, fPt);
2753 fNTracks_eta[1]->Fill(fNOtrks, track->Eta());
2754 fNTracks_phi[1]->Fill(fNOtrks, track->Phi());
2755 fNClusters[1]->Fill(ClsNo);
2756 fTPCNcls_pid[1]->Fill(TPCNcls, TPCNcls_pid);
2758 //______________________________________________________________
2760 ///______________________________________________________________________
2761 ///Histograms for PID Studies
2762 //Double_t fPtBin[6] = {2,4,6,8,10,15};
2764 for(Int_t i = 0; i < 6; i++)
2766 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2768 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2769 fTPC_pt[i]->Fill(fTPCsignal);
2770 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
2775 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2777 //new pt bins for trigger data
2779 for(Int_t i = 0; i < 10; i++)
2781 if(fP>=fPtBin_trigger[i] && fP<fPtBin_trigger[i+1])
2783 if(fEMCflag)fEoverP_tpc_p_trigger[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2787 if(fPt>=fPtBin_trigger[i] && fPt<fPtBin_trigger[i+1])
2789 if(fEMCflag)fEoverP_tpc_pt_trigger[i]->Fill(fTPCnSigma,(fClus->E() / fP));
2795 //new way to calculate TPCnsigma distribution: TPCnsigma in function of p, with/without E/p cut
2796 fTPCnsigma_p_TPC->Fill(fP, fTPCnSigma);
2799 fTPCnsigma_p_TPC_on_EMCal_acc->Fill(fP, fTPCnSigma);
2801 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax){
2802 fTPCnsigma_p_TPC_EoverP_cut->Fill(fP, fTPCnSigma);
2809 ///QA plots after track selection
2810 ///_____________________________________________________________
2812 //_______________________________________________________
2813 //Correlation Analysis - DiHadron
2816 if(fTPCnSigma < 3.5 && fCorrelationFlag)
2818 fPtTrigger_Inc->Fill(fPt);
2819 DiHadronCorrelation(track, iTracks);
2822 //_______________________________________________________
2825 ///////////////////////////////////////////////////////////////////
2826 ///TPC - efficiency calculation //
2828 /// changing start here
2829 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2831 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2832 Int_t pdg = fMCparticle->GetPdgCode();
2835 if(fMCparticle->IsPhysicalPrimary()){
2838 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2840 Bool_t MotherFound = FindMother(track->GetLabel());
2842 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2843 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2844 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
2851 else if(fIsMC && track->GetLabel()>=0)//ESD
2854 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2855 fMCtrack = fMCstack->Particle(track->GetLabel());
2857 Int_t pdg = fMCtrack->GetPdgCode();
2858 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2860 if(fMCtrack->GetFirstMother()>0){
2861 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2862 Bool_t MotherFound = FindMother(track->GetLabel());
2864 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2865 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
2874 if(fPt>1 && fPt<2) fTOF01->Fill(fTOFnSigma,fTPCnSigma);
2875 if(fPt>2 && fPt<4) fTOF02->Fill(fTOFnSigma,fTPCnSigma);
2876 if(fPt>4 && fPt<6) fTOF03->Fill(fTOFnSigma,fTPCnSigma);
2878 ///________________________________________________________________________
2880 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
2881 Int_t pidpassed = 1;
2882 AliHFEpidObject hfetrack;
2883 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
2884 hfetrack.SetRecTrack(track);
2885 hfetrack.SetPP(); //proton-proton analysis
2886 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
2887 fpid->Fill(pidpassed);
2889 if(pidpassed==0) continue;
2890 ///________________________________________________________________________
2893 ////////////////////////////////////////////////////////////////////
2894 ///TPC efficiency calculations
2897 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2899 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2900 Int_t pdg = fMCparticle->GetPdgCode();
2903 if(fMCparticle->IsPhysicalPrimary()){
2906 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2908 Bool_t MotherFound = FindMother(track->GetLabel());
2910 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2911 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2912 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
2919 else if(fIsMC && track->GetLabel()>=0)//ESD
2922 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2923 fMCtrack = fMCstack->Particle(track->GetLabel());
2925 Int_t pdg = fMCtrack->GetPdgCode();
2926 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2928 if(fMCtrack->GetFirstMother()>0){
2929 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2930 Bool_t MotherFound = FindMother(track->GetLabel());
2932 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2933 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
2941 //Eta Cut for TPC only
2942 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2943 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
2946 //Background for TPC only
2947 if(fFillBackground){
2949 //efficiency without SS cut for TPC only
2950 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
2951 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
2952 } //Eta cut to be consistent with other efficiency
2956 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
2957 fTPC_p[2]->Fill(fP,fTPCsignal);
2958 TPCNcls = track->GetTPCNcls();
2959 Float_t pos3[3]={0,0,0};
2962 //here denominator for track-matching efficiency
2963 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2965 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2966 Int_t pdg = fMCparticle->GetPdgCode();
2969 if(fMCparticle->IsPhysicalPrimary()){
2972 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2974 Bool_t MotherFound = FindMother(track->GetLabel());
2976 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2977 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2978 if(fIsHFE1) fPt_track_match_den->Fill(fMCparticle->Pt());
2986 if(track->GetEMCALcluster()>0)
2988 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2989 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2992 int EMCalIndex = -1;
2993 EMCalIndex = track->GetEMCALcluster();
2994 TClonesArray *fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
2995 fClus = static_cast<AliVCluster*>(fCaloClusters_tender->At(EMCalIndex));
2997 ///////////////////////////////////////////////////////////////////////////////////////////////////////////
2999 if(fClus->IsEMCAL())
3002 //________________________________________________________________________
3005 //Cluster timing distribution -- for ESD
3006 if(fUseEMCal && !fIsAOD){
3008 AliESDCaloCells &cells_esd=*(fESD->GetEMCALCells());
3009 TRefArray* caloClusters_esd = new TRefArray();
3010 fESD->GetEMCALClusters(caloClusters_esd);
3011 Int_t nclus_esd = caloClusters_esd->GetEntries();
3014 for (Int_t icl = 0; icl < nclus_esd; icl++) {
3016 AliESDCaloCluster* clus_esd = (AliESDCaloCluster*)caloClusters_esd->At(icl);
3018 if(clus_esd->IsEMCAL()){
3019 Float_t ncells_esd = fClus->GetNCells();
3020 UShort_t * index_esd = clus_esd->GetCellsAbsId() ;
3021 UShort_t * index2_esd = fClus->GetCellsAbsId() ;
3024 for(Int_t i = 0; i < ncells_esd ; i++){
3026 Int_t absId_esd = index_esd[i];
3027 fTime->Fill(fPt,cells_esd.GetCellTime(absId_esd));
3029 Int_t absId2_esd = index2_esd[i];
3030 fTime2->Fill(fPt,cells_esd.GetCellTime(absId2_esd));
3038 //Cluster timing distribution -- for AOD
3039 if(fUseEMCal && fIsAOD){
3041 AliAODCaloCells &cells_aod=*(fAOD->GetEMCALCells());
3043 TRefArray* caloClusters_aod = new TRefArray();
3044 fAOD->GetEMCALClusters(caloClusters_aod);
3046 Int_t nclus_aod = caloClusters_aod->GetEntries();
3048 for (Int_t icl = 0; icl < nclus_aod; icl++) {
3050 AliAODCaloCluster* clus_aod = (AliAODCaloCluster*)caloClusters_aod->At(icl);
3053 if(clus_aod->IsEMCAL()){
3054 Float_t ncells_aod = fClus->GetNCells();
3055 UShort_t * index_aod = clus_aod->GetCellsAbsId() ;
3056 UShort_t * index2_aod = fClus->GetCellsAbsId() ;
3059 for(Int_t i = 0; i < ncells_aod ; i++){
3061 Int_t absId_aod = index_aod[i];
3062 fTime->Fill(fPt,cells_aod.GetCellTime(absId_aod));
3064 Int_t absId2_aod = index2_aod[i];
3065 fTime2->Fill(fPt,cells_aod.GetCellTime(absId2_aod));
3076 double emctof = fClus->GetTOF();
3077 ftimingEle->Fill(fPt,emctof);
3079 //________________________________________________________________________
3085 Double_t Dx = fClus->GetTrackDx();
3086 Double_t Dz = fClus->GetTrackDz();
3087 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
3089 for(Int_t i = 0; i < 6; i++)
3091 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
3100 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
3102 Float_t Energy = fClus->E();
3103 Float_t EoverP = Energy/track->P();
3104 Float_t M02 = fClus->GetM02();
3105 Float_t M20 = fClus->GetM20();
3106 Float_t ncells = fClus->GetNCells();
3108 //here numerator for track-matching efficiency
3109 if(fIsMC && fIsAOD && track->GetLabel()>=0)
3111 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3112 Int_t pdg = fMCparticle->GetPdgCode();
3115 if(fMCparticle->IsPhysicalPrimary()){
3118 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3120 Bool_t MotherFound = FindMother(track->GetLabel());
3122 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3123 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3124 if(fIsHFE1) fPt_track_match_num->Fill(fMCparticle->Pt());
3133 //----------------------------------------------------------------------------------------
3135 //EtaCut electrons histogram
3137 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
3139 if(fUseShowerShapeCut){
3140 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3141 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
3142 fShowerShapeCut->Fill(M02,M20);
3143 //in order to check if there are exotic cluster in this selected cluster (27 may 2014)
3144 fNcells_energy_elec_selected->Fill(ncells,Energy);
3146 //true electrons E/p shape
3147 if(fIsMC && fIsAOD && track->GetLabel()>=0){
3148 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3149 Int_t pdg = fMCparticle->GetPdgCode();
3151 if( TMath::Abs(pdg) == 11){
3152 fEoverP_pt_true_electrons->Fill(fPt,(fClus->E() / fP));
3161 if(!fUseShowerShapeCut){
3162 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
3163 fShowerShapeCut->Fill(M02,M20);
3164 fNcells_energy_elec_selected->Fill(ncells,Energy);
3166 //after cut -> Are they really electrons ? E/p shape
3167 if(fIsMC && fIsAOD && track->GetLabel()>=0){
3168 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3169 Int_t pdg = fMCparticle->GetPdgCode();
3171 if( TMath::Abs(pdg) == 11){
3172 fEoverP_pt_true_electrons->Fill(fPt,(fClus->E() / fP));
3178 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
3180 //for shower shape cut studies - now with TPC PID Cut
3182 fShowerShapeM02_EoverP->Fill(M02,EoverP);
3183 fShowerShapeM20_EoverP->Fill(M20,EoverP);
3188 //----------------------------------------------------------------------------------------
3192 // for Eta Phi distribution
3193 fClus->GetPosition(pos3);
3194 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
3195 Double_t cphi = vpos.Phi();
3196 Double_t ceta = vpos.Eta();
3197 fEtaPhi[2]->Fill(cphi,ceta);
3201 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
3203 for(Int_t i = 0; i < 6; i++)
3205 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
3208 fR_EoverP[i]->Fill(R, EoverP);
3209 fNcells[i]->Fill(ncells);
3210 fNcells_EoverP[i]->Fill(EoverP, ncells);
3211 fM02_EoverP[i]->Fill(M02,EoverP);
3212 fM20_EoverP[i]->Fill(M20,EoverP);
3213 fECluster_ptbins[i]->Fill(Energy);
3214 fEoverP_ptbins[i]->Fill(EoverP);
3216 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
3217 fNcells_electrons[i]->Fill(ncells);
3220 if(M02<0.5 && M20<0.3) {
3221 fEoverP_wSSCut[i]->Fill(EoverP);
3226 fNcells_pt->Fill(fPt, ncells);
3229 ////////////////////////////////////////////////////////////////////
3230 ///EMCal - Efficiency calculations
3233 if(fIsMC && fIsAOD && track->GetLabel()>=0)
3235 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3236 Int_t pdg = fMCparticle->GetPdgCode();
3239 if(fMCparticle->IsPhysicalPrimary()){
3241 //Phi cut && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi()
3242 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3244 Bool_t MotherFound = FindMother(track->GetLabel());
3246 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3247 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3248 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCparticle->Pt());
3255 else if(fIsMC && track->GetLabel()>=0)//ESD
3258 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
3261 fMCtrack = fMCstack->Particle(track->GetLabel());
3263 Int_t pdg = fMCtrack->GetPdgCode();
3264 //Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
3265 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax )
3267 Bool_t MotherFound = FindMother(track->GetLabel());
3268 //MotherFound included
3270 if(fMCtrack->GetFirstMother()>0){
3271 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3272 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
3273 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCtrack->Pt());
3281 //_______________________________________________________
3283 if(fEoverPnsigma)SetEoverPCutPtDependentMC(track->Pt());
3285 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
3289 fECluster[2]->Fill(Energy);
3290 fTPCNcls_pid[3]->Fill(TPCNcls, TPCNcls_pid);
3295 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
3296 fPtElec_Inc->Fill(fPt);
3297 //eta phi distribution for data
3298 fEtaPhi_data->Fill(track->Phi(),track->Eta());
3301 //Eta cut for background
3302 if(fFillBackground){
3303 fEtad[2]->Fill(track->Eta());
3305 //background for triggered data: trigger electron must have same cuts on shower shape 06/Jan/2014
3306 if(fUseShowerShapeCut){
3307 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3308 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
3309 Background(track, iTracks, Vtrack, kFALSE);
3314 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
3315 Background(track, iTracks, Vtrack, kFALSE);
3321 double emctof2 = fClus->GetTOF();
3322 ftimingEle2->Fill(fPt,emctof2);
3323 //Correlation Analysis
3324 if(fCorrelationFlag)
3326 ElectronHadronCorrelation(track, iTracks, Vtrack);
3329 //_______________________________________________________
3331 ////////////////////////////////////////////////////////////////////
3332 ///EMCal - efficiency calculations
3334 if(track->Charge()<0) fCharge_n->Fill(fPt);
3335 if(track->Charge()>0) fCharge_p->Fill(fPt);
3339 if(fIsMC && fIsAOD && track->GetLabel()>=0)//AOD
3341 if(track->Charge()<0) fCharge_n->Fill(fPt);
3342 if(track->Charge()>0) fCharge_p->Fill(fPt);
3344 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3345 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3346 Int_t pdg = fMCparticle->GetPdgCode();
3348 double proX = fMCparticle->Xv();
3349 double proY = fMCparticle->Yv();
3350 double proR = sqrt(pow(proX,2)+pow(proY,2));
3353 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi() ){
3355 if( TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0 ){
3356 Int_t mpdg = fMCparticleMother->GetPdgCode();
3357 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
3358 if(proR<7)fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
3361 if( TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCelectronAfterAll_Primary->Fill(fMCparticle->Pt());
3366 if(fMCparticle->IsPhysicalPrimary()){
3369 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
3371 Bool_t MotherFound = FindMother(track->GetLabel());
3374 if(!fUseShowerShapeCut){
3376 //Unfolding pt_reco/pt_MC in the efficiency
3377 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
3378 fPtMCelectronAfterAll_unfolding->Fill(track->Pt());
3379 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
3381 //new histo to estimate how different is pt reco from pt MC
3382 fpt_reco_pt_MC_num->Fill(track->Pt(),fMCparticle->Pt());
3383 }//numerator for the total efficiency AOD
3385 //November 11 for efficiency of triggered data
3386 if(fUseShowerShapeCut){
3387 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3389 //Unfolding pt_reco/pt_MC in the efficiency
3390 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
3391 fPtMCelectronAfterAll_unfolding->Fill(track->Pt());
3392 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
3394 //new histo to estimate how different is pt reco from pt MC
3395 fpt_reco_pt_MC_num->Fill(track->Pt(),fMCparticle->Pt());
3396 }//numerator for the total efficiency AOD
3402 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3403 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
3404 if(fIsHFE1)fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
3411 else if(fIsMC && track->GetLabel()>=0)//ESD
3413 if(track->Charge()<0) fCharge_n->Fill(fPt);
3414 if(track->Charge()>0) fCharge_p->Fill(fPt);
3416 fMCtrack = fMCstack->Particle(track->GetLabel());
3417 if(fMCtrack->GetFirstMother()>0)
3419 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3421 TParticle *particle=fMCstack->Particle(track->GetLabel());
3423 Int_t pdg = fMCtrack->GetPdgCode();
3426 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3428 if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 )
3430 Int_t mpdg = fMCtrackMother->GetPdgCode();
3431 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111)
3433 Double_t proR=particle->R();
3436 fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
3440 if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel()))
3442 fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
3446 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
3448 Bool_t MotherFound = FindMother(track->GetLabel());
3452 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3454 if(!fUseShowerShapeCut){
3456 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
3457 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
3460 //November 11 for efficiency of triggered data
3461 if(fUseShowerShapeCut){
3462 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
3464 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
3465 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
3477 // Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
3478 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
3480 //included MotherFound
3484 if(fMCtrack->GetFirstMother()>0){
3485 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3486 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
3488 if(fIsHFE1){fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());}
3495 ///////////////////////////////////////////////////////////////////
3503 //______________________________________________________________
3506 fVtxZ[2]->Fill(fZvtx);
3507 if(iTracks == 0)fNTracks[2]->Fill(fNOtrks);
3508 fNTracks_pt[2]->Fill(fNOtrks, fPt);
3509 fNTracks_eta[2]->Fill(fNOtrks, track->Eta());
3510 fNTracks_phi[2]->Fill(fNOtrks, track->Phi());
3511 fNClusters[2]->Fill(ClsNo);
3512 fTPCNcls_pid[2]->Fill(TPCNcls, TPCNcls_pid);
3514 //______________________________________________________________
3516 //_______________________________________________________
3517 //Correlation Analysis
3520 fPtElec_Inc->Fill(fPt);
3522 if(fCorrelationFlag)
3524 ElectronHadronCorrelation(track, iTracks, Vtrack);
3527 //_______________________________________________________
3529 ///________________________________________________________________________
3532 //__________________________________________________________________
3533 //Event Mixing Analysis
3535 if(fEventMixingFlag)
3537 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
3539 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
3541 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!
3546 //__________________________________________________________________
3548 delete fListOfmotherkink;
3549 PostData(1, fOutputList);
3552 //______________________________________________________________________
3553 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
3555 //Draw result to the screen
3556 //Called once at the end of the query
3558 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
3562 printf("ERROR: Output list not available\n");
3567 //______________________________________________________________________
3568 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
3570 //Check single track cuts for a given cut step
3571 //Note this function is called inside the UserExec function
3572 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
3573 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
3578 //______________________________________________________________________
3581 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
3583 ///_________________________________________________________________
3585 //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)
3589 if(track->GetLabel() < 0)
3591 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
3597 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
3599 if(fMCparticle->GetMother()<0) return;
3601 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3602 if(fMCparticleMother->GetMother()>0)fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
3604 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3607 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
3608 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
3611 //October 08th weighted histos
3612 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221 ){
3614 Double_t mPt=fMCparticleMother->Pt();
3618 //________________________________________________________________
3619 //correction for d3 based on data
3621 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3623 mweight=CalculateWeight(111, x);
3626 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3628 mweight=CalculateWeight(221, x);
3632 //________________________________________________________________
3634 //Histo pT mother versus pT electron
3635 fpT_m_electron->Fill(mPt, track->Pt());
3637 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./mweight);
3638 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./mweight);
3640 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3642 Double_t gmPt=fMCparticleGMother->Pt();
3643 Double_t gmweight=1;
3645 //________________________________________________________________
3646 //correction for d3 based on data
3648 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3650 gmweight=CalculateWeight(111, x);
3652 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3654 gmweight=CalculateWeight(221, x);
3658 //________________________________________________________________
3659 //Histo pT gmother versus pT electron
3661 fpT_gm_electron->Fill(gmPt, track->Pt());
3663 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./gmweight);
3664 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./gmweight);
3667 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt());
3668 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt());
3675 fMCtrack = fMCstack->Particle(track->GetLabel());
3677 if(fMCtrack->GetFirstMother()<0) return;
3679 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3681 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3684 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
3685 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
3690 ///_________________________________________________________________
3692 //________________________________________________
3693 //Associated particle cut
3694 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
3695 fPartnerCuts->SetRequireITSRefit(kTRUE);
3696 fPartnerCuts->SetRequireTPCRefit(kTRUE);
3697 fPartnerCuts->SetEtaRange(-0.9,0.9);
3698 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
3699 fPartnerCuts->SetMinNClustersTPC(80);
3700 fPartnerCuts->SetPtRange(0,1e10);
3701 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
3702 //fPartnerCuts->SetMaxDCAToVertexXY(1);
3703 //fPartnerCuts->SetMaxDCAToVertexZ(3);
3704 //_________________________________________________
3706 ///#################################################################
3707 //Non-HFE reconstruction
3708 fNonHFE = new AliSelectNonHFE();
3709 fNonHFE->SetAODanalysis(fIsAOD);
3710 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
3711 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
3712 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
3713 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
3714 fNonHFE->SetAlgorithm("DCA"); //KF
3715 fNonHFE->SetPIDresponse(fPidResponse);
3716 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
3717 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
3720 fNonHFE->SetHistAngleBack(fOpAngleBack);
3721 fNonHFE->SetHistAngle(fOpAngle);
3722 fNonHFE->SetHistDCABack(fDCABack);
3723 fNonHFE->SetHistDCA(fDCA);
3724 fNonHFE->SetHistMassBack(fInvMassBack);
3725 fNonHFE->SetHistMass(fInvMass);
3728 fNonHFE->SetHistAngleBack(fOpAngleBack2);
3729 fNonHFE->SetHistAngle(fOpAngle2);
3730 fNonHFE->SetHistDCABack(fDCABack2);
3731 fNonHFE->SetHistDCA(fDCA2);
3732 fNonHFE->SetHistMassBack(fInvMassBack2);
3733 fNonHFE->SetHistMass(fInvMass2);
3736 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
3738 //index of track selected as partner
3739 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
3741 //Electron Information
3742 Double_t fPhiE = -999;
3743 Double_t fEtaE = -999;
3744 Double_t fPtE = -999;
3745 fPhiE = track->Phi();
3746 fEtaE = track->Eta();
3749 ///_________________________________________________________________
3755 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3761 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3762 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3767 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3768 Double_t mPt=fMCparticleMother->Pt();
3769 Double_t mweight1=1;
3770 Double_t mweight2=1;
3771 //Double_t weight=1;
3774 //----------------------------------------------------------------------------
3775 //correction based on data only
3776 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3778 weight=CalculateWeight(111, x);
3780 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3782 weight=CalculateWeight(221, x);
3786 //----------------------------------------------------------------------------
3789 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
3790 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
3793 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, mweight1);
3794 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, mweight2);
3796 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3797 Double_t gmPt=fMCparticleGMother->Pt();
3798 Double_t gmweight1=1;
3799 Double_t gmweight2=1;
3800 //Double_t weight=1;
3802 //----------------------------------------------------------------------------
3804 //----------------------------------------------------------------------------
3806 //correction based on data only for pi0
3808 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3810 weight=CalculateWeight(111, x);
3812 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3814 weight=CalculateWeight(221, x);
3822 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
3823 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
3826 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, gmweight1);
3827 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, gmweight2);
3830 if(fNonHFE->IsULS()) fPtElec_ULS_weight->Fill(fPtE,fNonHFE->GetNULS());
3831 if(fNonHFE->IsLS()) fPtElec_LS_weight->Fill(fPtE,fNonHFE->GetNLS());
3838 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
3839 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
3841 //new 08 October //weighted histograms
3842 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3843 Double_t mPt=fMCparticleMother->Pt();
3845 Double_t mweight1=1;
3846 Double_t mweight2=1;
3847 //Double_t weight=1;
3850 //----------------------------------------------------------------------------
3852 //correction based on data for d3
3854 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3856 weight=CalculateWeight(111, x);
3859 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3861 weight=CalculateWeight(221, x);
3867 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
3868 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
3871 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, mweight1);
3872 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, mweight2);
3874 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
3875 Double_t gmPt=fMCparticleGMother->Pt();
3876 Double_t gmweight1=1;
3877 Double_t gmweight2=1;
3878 //Double_t weight=1;
3881 //----------------------------------------------------------------------------
3882 //correction based on data only for pi0
3884 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
3886 weight=CalculateWeight(111, x);
3890 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
3892 weight=CalculateWeight(221, x);
3895 //----------------------------------------------------------------------------
3900 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
3901 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
3904 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, gmweight1);
3905 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, gmweight2);
3908 if(fNonHFE->IsULS()) fPtElec_ULS2_weight->Fill(fPtE,fNonHFE->GetNULS());
3909 if(fNonHFE->IsLS()) fPtElec_LS2_weight->Fill(fPtE,fNonHFE->GetNLS());
3913 //----------------------------------------------------------------------------
3914 //to check other way to calculate efficiency
3915 //ULS with no weight from ULS-LS original
3916 //we have to know if track2 comes from same mother!!!
3917 //----------------------------------------------------------------------------
3918 if(fNonHFE->IsULS()){
3920 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3923 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3926 printf("ERROR: Could not receive track %d\n", iTracks);
3929 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3930 if(track2->GetLabel()<0) continue;
3931 fMCparticle2 = (AliAODMCParticle*) fMCarray->At(track2->GetLabel());
3932 if(fMCparticle2->GetMother()<0) continue;
3934 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
3936 if(fUlsPartner[i]==iTracks){
3937 //only fill if it has same mother
3938 //with weight to take into account the number of partners
3939 if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC->Fill(fPtE, fNonHFE->GetNULS());
3941 //-----------------------------------------------------------------------------------------------------------
3943 //Double_t weight2=1;
3944 Double_t mPt=fMCparticleMother->Pt();
3947 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
3949 weight=CalculateWeight(111, x);
3953 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
3955 weight=CalculateWeight(221, x);
3960 //weight for grandmother
3962 if((fMCparticleMother->GetMother()>0) && TMath::Abs(((fMCparticleGMother->GetPdgCode())==111))){
3963 Double_t gmPt=fMCparticleGMother->Pt();
3965 weight=CalculateWeight(111, x);
3968 if((fMCparticleMother->GetMother()>0) && TMath::Abs(((fMCparticleGMother->GetPdgCode())==221))){
3969 Double_t gmPt=fMCparticleGMother->Pt();
3971 weight=CalculateWeight(221, x);
3976 if(fMCparticle2->GetMother()==fMCparticle->GetMother()) fPtElec_ULS_MC_weight->Fill(fPtE, (fNonHFE->GetNULS())*1./weight);
3978 //-----------------------------------------------------------------------------------------------------------
3981 }//partner found same as track
3982 }//loop in all partner
3986 //----------------------------------------------------------------------------
3987 //end of part to check other way to calculate efficiency
3988 //----------------------------------------------------------------------------
3995 //ULS-LS with no pid AOD
3996 if(fNonHFE->IsULS()) fPtElec_ULS_NoPid->Fill(fPtE,fNonHFE->GetNULS());
3997 if(fNonHFE->IsLS()) fPtElec_LS_NoPid->Fill(fPtE,fNonHFE->GetNLS());
4004 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
4007 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4008 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4012 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
4013 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
4020 ///_________________________________________________________________
4025 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4026 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4030 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
4031 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
4035 //for MC closure test
4036 // to be used as data, with MC input
4038 if(fNonHFE->IsULS()) fPtElec_ULS_mc_closure->Fill(fPtE,fNonHFE->GetNULS());
4039 if(fNonHFE->IsLS()) fPtElec_LS_mc_closure->Fill(fPtE,fNonHFE->GetNLS());
4043 if(fNonHFE->IsULS()) fPtElec_ULS2_mc_closure->Fill(fPtE,fNonHFE->GetNULS());
4044 if(fNonHFE->IsLS()) fPtElec_LS2_mc_closure->Fill(fPtE,fNonHFE->GetNLS());
4049 }//end of Background function
4051 //______________________________________________________________________
4052 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
4055 ///_________________________________________________________________
4059 if(track->GetLabel() < 0)
4061 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
4067 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
4069 if(fMCparticle->GetMother()<0) return;
4071 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
4073 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
4076 fPtBackgroundBeforeReco->Fill(track->Pt());
4081 fMCtrack = fMCstack->Particle(track->GetLabel());
4083 if(fMCtrack->GetFirstMother()<0) return;
4085 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
4087 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
4090 fPtBackgroundBeforeReco->Fill(track->Pt());
4094 ///_________________________________________________________________
4096 //________________________________________________
4097 //Associated particle cut
4098 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
4099 fPartnerCuts->SetRequireITSRefit(kTRUE);
4100 fPartnerCuts->SetRequireTPCRefit(kTRUE);
4101 fPartnerCuts->SetEtaRange(-0.9,0.9);
4102 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
4103 fPartnerCuts->SetMinNClustersTPC(80);
4104 fPartnerCuts->SetPtRange(0.3,1e10);
4105 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
4106 //fPartnerCuts->SetMaxDCAToVertexXY(1);
4107 //fPartnerCuts->SetMaxDCAToVertexZ(3);
4108 //_________________________________________________
4110 ///#################################################################
4111 //Non-HFE reconstruction
4112 fNonHFE = new AliSelectNonHFE();
4113 fNonHFE->SetAODanalysis(fIsAOD);
4114 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
4115 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
4116 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
4117 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
4118 fNonHFE->SetAlgorithm("DCA"); //KF
4119 fNonHFE->SetPIDresponse(fPidResponse);
4120 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
4121 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
4124 fNonHFE->SetHistAngleBack(fOpAngleBack);
4125 fNonHFE->SetHistAngle(fOpAngle);
4126 fNonHFE->SetHistDCABack(fDCABack);
4127 fNonHFE->SetHistDCA(fDCA);
4128 fNonHFE->SetHistMassBack(fInvMassBack);
4129 fNonHFE->SetHistMass(fInvMass);
4131 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
4133 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
4134 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
4135 Bool_t fUlsIsPartner = kFALSE;
4136 Bool_t fLsIsPartner = kFALSE;
4137 ///#################################################################
4140 //Electron Information
4141 Double_t fPhiE = -999;
4142 Double_t fEtaE = -999;
4143 Double_t fPhiH = -999;
4144 Double_t fEtaH = -999;
4145 Double_t fDphi = -999;
4146 Double_t fDeta = -999;
4147 Double_t fPtE = -999;
4148 Double_t fPtH = -999;
4150 Double_t pi = TMath::Pi();
4152 fPhiE = track->Phi();
4153 fEtaE = track->Eta();
4157 ///_________________________________________________________________
4163 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
4165 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4166 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4171 if(fNonHFE->IsULS()) fPtElec_ULS_NoPid->Fill(fPtE,fNonHFE->GetNULS());
4172 if(fNonHFE->IsLS()) fPtElec_LS_NoPid->Fill(fPtE,fNonHFE->GetNLS());
4176 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
4178 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4179 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4186 ///_________________________________________________________________
4189 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
4190 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
4196 //__________________________________________________________________
4197 //Event Mixing Analysis - Hadron Loop
4199 if(fEventMixingFlag)
4201 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
4203 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
4205 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
4207 fPoolNevents->Fill(fPool->GetCurrentNEvents());
4209 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
4211 TObjArray* bgTracks = fPool->GetEvent(jMix);
4213 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
4215 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
4216 if (NULL == MixedTrack) continue;
4218 fPhiH = MixedTrack->Phi();
4219 fEtaH = MixedTrack->Eta();
4220 fPtH = MixedTrack->Pt();
4222 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4224 fDphi = fPhiE - fPhiH;
4226 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4227 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4229 fDeta = fEtaE - fEtaH;
4231 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4233 for(Int_t i = 0; i < 6; i++)
4235 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4237 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
4239 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
4240 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
4242 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4243 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4247 // TODO your code: do event mixing with current event and bgTracks
4248 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
4253 //__________________________________________________________________
4255 //__________________________________________________________________
4256 //Same Event Analysis - Hadron Loop
4257 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4259 if(trackIndex==iTracks) continue;
4261 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4264 printf("ERROR: Could not receive track %d\n", iTracks);
4268 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4270 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4274 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4275 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4276 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4277 if(atrack2->GetTPCNcls() < 80) continue;
4278 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4282 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4283 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4286 fPhiH = track2->Phi();
4287 fEtaH = track2->Eta();
4288 fPtH = track2->Pt();
4290 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4292 fDphi = fPhiE - fPhiH;
4294 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4295 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4297 fDeta = fEtaE - fEtaH;
4299 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4301 //______________________________________________________________
4302 //Check if this track is a Non-HFE partner
4303 fUlsIsPartner = kFALSE;
4304 fLsIsPartner = kFALSE;
4305 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
4307 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
4309 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
4311 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
4313 //______________________________________________________________
4315 for(Int_t i = 0; i < 6; i++)
4317 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4319 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
4321 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
4322 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
4323 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
4324 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
4326 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4327 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4328 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
4329 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
4335 //____________________________________________________________________________________________________________
4336 //Create a TObjArray with selected hadrons, for the mixed event analysis
4337 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
4339 fTracksClone = new TObjArray;
4340 fTracksClone->SetOwner(kTRUE);
4342 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4344 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4347 printf("ERROR: Could not receive track %d\n", iTracks);
4351 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4353 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4357 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4358 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4359 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4360 if(atrack2->GetTPCNcls() < 80) continue;
4361 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4365 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4366 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4369 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
4371 return fTracksClone;
4373 //____________________________________________________________________________________________________________
4375 //______________________________________________________________________
4376 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
4378 //________________________________________________
4379 //Associated particle cut
4380 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
4381 fPartnerCuts->SetRequireITSRefit(kTRUE);
4382 fPartnerCuts->SetRequireTPCRefit(kTRUE);
4383 fPartnerCuts->SetEtaRange(-0.9,0.9);
4384 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
4385 fPartnerCuts->SetMinNClustersTPC(80);
4386 fPartnerCuts->SetPtRange(0.3,1e10);
4387 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
4388 //fPartnerCuts->SetMaxDCAToVertexXY(1);
4389 //fPartnerCuts->SetMaxDCAToVertexZ(3);
4390 //_________________________________________________
4392 //Electron Information
4393 Double_t fPhiE = -999;
4394 Double_t fEtaE = -999;
4395 Double_t fPhiH = -999;
4396 Double_t fEtaH = -999;
4397 Double_t fDphi = -999;
4398 Double_t fDeta = -999;
4399 Double_t fPtE = -999;
4400 Double_t fPtH = -999;
4402 Double_t pi = TMath::Pi();
4404 fPhiE = track->Phi();
4405 fEtaE = track->Eta();
4408 //__________________________________________________________________
4409 //Same Event Analysis - Hadron Loop
4410 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
4412 if(trackIndex==iTracks) continue;
4414 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
4417 printf("ERROR: Could not receive track %d\n", iTracks);
4421 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
4422 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
4426 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
4427 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
4428 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
4429 if(atrack2->GetTPCNcls() < 80) continue;
4430 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
4434 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
4435 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
4438 fPhiH = track2->Phi();
4439 fEtaH = track2->Eta();
4440 fPtH = track2->Pt();
4442 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
4444 fDphi = fPhiE - fPhiH;
4446 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
4447 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
4449 fDeta = fEtaE - fEtaH;
4451 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
4453 for(Int_t i = 0; i < 6; i++)
4455 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
4457 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
4462 //____________________________________________________________________________________________________________
4464 //______________________________________________________________________
4465 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
4472 fIsFromPi0 = kFALSE;
4473 fIsFromEta = kFALSE;
4474 fIsFromGamma = kFALSE;
4476 if(mcIndex < 0 || !fIsMC)
4482 Int_t mpdg = -99999;
4483 Int_t gmpdg = -99999;
4484 Int_t ggmpdg = -99999;
4485 Int_t gggmpdg = -99999;
4489 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
4491 pdg = TMath::Abs(fMCparticle->GetPdgCode());
4501 fIsFromPi0 = kFALSE;
4502 fIsFromEta = kFALSE;
4503 fIsFromGamma = kFALSE;
4507 if(fMCparticle->GetMother()<0)
4514 fIsFromPi0 = kFALSE;
4515 fIsFromEta = kFALSE;
4516 fIsFromGamma = kFALSE;
4520 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
4521 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
4523 if(fMCparticleMother->GetMother()<0)
4531 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
4532 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
4533 if(fMCparticleGMother->GetMother()<0)
4540 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
4541 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
4542 if(fMCparticleGGMother->GetMother()<0)
4548 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
4549 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
4556 fMCtrack = fMCstack->Particle(mcIndex);
4558 pdg = TMath::Abs(fMCtrack->GetPdgCode());
4567 fIsFromPi0 = kFALSE;
4568 fIsFromEta = kFALSE;
4569 fIsFromGamma = kFALSE;
4573 if(fMCtrack->GetFirstMother()<0)
4580 fIsFromPi0 = kFALSE;
4581 fIsFromEta = kFALSE;
4582 fIsFromGamma = kFALSE;
4586 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
4587 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
4589 if(fMCtrackMother->GetFirstMother()<0)
4597 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
4598 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
4600 if(fMCtrackGMother->GetFirstMother()<0)
4607 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
4608 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
4610 if(fMCtrackGGMother->GetFirstMother()<0)
4616 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
4617 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
4623 //Tag Electron Source
4624 if(mpdg==111 || mpdg==221 || mpdg==22)
4632 fIsFromPi0 = kFALSE;
4633 fIsFromEta = kFALSE;
4634 fIsFromGamma = kFALSE;
4636 if(mpdg==111) fIsFromPi0 = kFALSE;
4637 if(mpdg==221)fIsFromEta = kFALSE;
4638 if(mpdg==22) fIsFromGamma = kFALSE;
4647 fIsFromPi0 = kFALSE;
4648 fIsFromEta = kFALSE;
4649 fIsFromGamma = kFALSE;
4656 if(mpdg>400 && mpdg<500)
4658 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
4673 else if(mpdg>500 && mpdg<600)
4690 Bool_t AliAnalysisTaskEMCalHFEpA::ContainsBadChannel(TString calorimeter,UShort_t* cellList, Int_t nCells)
4692 // Check that in the cluster cells, there is no bad channel of those stored
4693 // in fEMCALBadChannelMap
4694 // adapted from AliCalorimeterUtils
4696 //if (!fRemoveBadChannels) return kFALSE;
4697 //printf("fEMCALBadChannelMap %p, fPHOSBadChannelMap %p \n",fEMCALBadChannelMap,fPHOSBadChannelMap);
4698 if( !fEMCALRecoUtils->GetEMCALChannelStatusMap(0)) return kFALSE;
4703 for(Int_t iCell = 0; iCell<nCells; iCell++){
4705 //Get the column and row
4706 if(calorimeter == "EMCAL"){
4707 return fEMCALRecoUtils->ClusterContainsBadChannel((AliEMCALGeometry*)fEMCALGeo,cellList,nCells);
4711 }// cell cluster loop
4719 //________________________________________________________________________________
4720 TArrayI AliAnalysisTaskEMCalHFEpA::GetTriggerPatches(Bool_t IsEventEMCALL0, Bool_t IsEventEMCALL1)
4722 // Select the patches that triggered
4723 // Depend on L0 or L1
4726 //Int_t trigtimes[30], globCol, globRow,ntimes, i;
4727 Int_t globCol, globRow;
4729 Int_t absId = -1; //[100];
4734 // get object pointer
4735 AliVCaloTrigger *caloTrigger = InputEvent()->GetCaloTrigger( "EMCAL" );
4737 // class is not empty
4738 if( caloTrigger->GetEntries() > 0 )
4740 // must reset before usage, or the class will fail
4741 caloTrigger->Reset();
4743 // go throuth the trigger channels
4744 while( caloTrigger->Next() )
4746 // get position in global 2x2 tower coordinates
4747 caloTrigger->GetPosition( globCol, globRow );
4756 else if(IsEventEMCALL1) // L1
4759 caloTrigger->GetTriggerBits(bit);
4761 Bool_t isEGA = ((bit >> fBitEGA) & 0x1);
4762 //Bool_t isEJE = ((bit >> fBitEJE) & 0x1) && IsEventEMCALL1Jet () ;
4764 if(!isEGA) continue;
4766 Int_t patchsize = -1;
4767 if(isEGA) patchsize = 2;
4768 //else if (isEJE) patchsize = 16;
4770 // add 2x2 (EGA) or 16x16 (EJE) patches
4771 for(Int_t irow=0; irow < patchsize; irow++)
4773 for(Int_t icol=0; icol < patchsize; icol++)
4775 GetCaloUtils()->GetEMCALGeometry()->GetAbsFastORIndexFromPositionInEMCAL(globCol+icol,globRow+irow, absId);
4776 //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absIDTrig[nTrig]);
4777 patches.Set(nPatch+1); // Set size of this array to nPatch+1 ints.
4778 patches.AddAt(absId,nPatch++); //Add Int_t absId at position nPatch++
4784 } // trigger iterator
4785 } // go thorough triggers
4787 printf("N patches %d, test %d,first %d, last %d\n",patches.GetSize(), nPatch, patches.At(0), patches.At(patches.GetSize()-1));
4792 Double_t AliAnalysisTaskEMCalHFEpA::CalculateWeight(Int_t pdg_particle, Double_t x)
4794 //weight for d3 based on MinJung parametrization //sent by Jan
4796 if(pdg_particle==111){
4797 if(x>= 0.100000 && x < 0.112797 ) weight=1.262120;
4798 if(x>= 0.112797 && x < 0.127231 ) weight=1.277765;
4799 if(x>= 0.127231 && x < 0.143512 ) weight=1.295605;
4800 if(x>= 0.143512 && x < 0.161877 ) weight=1.318155;
4801 if(x>= 0.161877 && x < 0.182592 ) weight=1.348693;
4802 if(x>= 0.182592 && x < 0.205957 ) weight=1.388636;
4803 if(x>= 0.205957 && x < 0.232313 ) weight=1.439122;
4804 if(x>= 0.232313 && x < 0.262041 ) weight=1.497452;
4805 if(x>= 0.262041 && x < 0.295573 ) weight=1.559409;
4806 if(x>= 0.295573 && x < 0.333397 ) weight=1.615169;
4807 if(x>= 0.333397 && x < 0.376060 ) weight=1.654954;
4808 if(x>= 0.376060 && x < 0.424183 ) weight=1.668753;
4809 if(x>= 0.424183 && x < 0.478465 ) weight=1.652225;
4810 if(x>= 0.478465 && x < 0.539692 ) weight=1.603119;
4811 if(x>= 0.539692 && x < 0.608754 ) weight=1.526049;
4812 if(x>= 0.608754 && x < 0.686654 ) weight=1.426724;
4813 if(x>= 0.686654 && x < 0.774523 ) weight=1.312684;
4814 if(x>= 0.774523 && x < 0.873636 ) weight=1.195395;
4815 if(x>= 0.873636 && x < 0.985432 ) weight=1.086264;
4816 if(x>= 0.985432 && x < 1.111534 ) weight=0.993666;
4817 if(x>= 1.111534 && x < 1.253773 ) weight=0.922587;
4818 if(x>= 1.253773 && x < 1.414214 ) weight=0.875739;
4819 if(x>= 1.414214 && x < 1.595185 ) weight=0.852181;
4820 if(x>= 1.595185 && x < 1.799315 ) weight=0.847828;
4821 if(x>= 1.799315 && x < 2.029567 ) weight=0.863875;
4822 if(x>= 2.029567 && x < 2.289283 ) weight=0.899112;
4823 if(x>= 2.289283 && x < 2.582235 ) weight=0.955194;
4824 if(x>= 2.582235 && x < 2.912674 ) weight=1.033824;
4825 if(x>= 2.912674 && x < 3.285398 ) weight=1.133714;
4826 if(x>= 3.285398 && x < 3.705818 ) weight=1.259471;
4827 if(x>= 3.705818 && x < 4.180038 ) weight=1.406883;
4828 if(x>= 4.180038 && x < 4.714942 ) weight=1.578923;
4829 if(x>= 4.714942 && x < 5.318296 ) weight=1.778513;
4830 if(x>= 5.318296 && x < 5.998859 ) weight=2.001171;
4831 if(x>= 5.998859 && x < 6.766511 ) weight=2.223161;
4832 if(x>= 6.766511 && x < 7.632396 ) weight=2.449445;
4833 if(x>= 7.632396 && x < 8.609086 ) weight=2.661734;
4834 if(x>= 8.609086 && x < 9.710759 ) weight=2.851935;
4835 if(x>= 9.710759 && x < 10.953409 ) weight=2.974319;
4836 if(x>= 10.953409 && x < 12.355077 ) weight=3.106314;
4837 if(x>= 12.355077 && x < 13.936111 ) weight=3.126815;
4838 if(x>= 13.936111 && x < 15.719464 ) weight=3.150053;
4839 if(x>= 15.719464 && x < 17.731026 ) weight=3.218509;
4840 if(x>= 17.731026 && x < 20.000000 ) weight=3.252141;
4843 else if(pdg_particle==221){
4844 if(x>= 0.100000 && x < 0.112797 ) weight=2.159358;
4845 if(x>= 0.112797 && x < 0.127231 ) weight=2.145546;
4846 if(x>= 0.127231 && x < 0.143512 ) weight=2.132390;
4847 if(x>= 0.143512 && x < 0.161877 ) weight=2.109918;
4848 if(x>= 0.161877 && x < 0.182592 ) weight=2.084920;
4849 if(x>= 0.182592 && x < 0.205957 ) weight=2.054302;
4850 if(x>= 0.205957 && x < 0.232313 ) weight=2.015202;
4851 if(x>= 0.232313 && x < 0.262041 ) weight=1.966068;
4852 if(x>= 0.262041 && x < 0.295573 ) weight=1.912255;
4853 if(x>= 0.295573 && x < 0.333397 ) weight=1.844087;
4854 if(x>= 0.333397 && x < 0.376060 ) weight=1.767913;
4855 if(x>= 0.376060 && x < 0.424183 ) weight=1.680366;
4856 if(x>= 0.424183 && x < 0.478465 ) weight=1.583468;
4857 if(x>= 0.478465 && x < 0.539692 ) weight=1.475131;
4858 if(x>= 0.539692 && x < 0.608754 ) weight=1.361436;
4859 if(x>= 0.608754 && x < 0.686654 ) weight=1.244388;
4860 if(x>= 0.686654 && x < 0.774523 ) weight=1.125973;
4861 if(x>= 0.774523 && x < 0.873636 ) weight=1.015769;
4862 if(x>= 0.873636 && x < 0.985432 ) weight=0.914579;
4863 if(x>= 0.985432 && x < 1.111534 ) weight=0.830529;
4864 if(x>= 1.111534 && x < 1.253773 ) weight=0.766397;
4865 if(x>= 1.253773 && x < 1.414214 ) weight=0.723663;
4866 if(x>= 1.414214 && x < 1.595185 ) weight=0.701236;
4867 if(x>= 1.595185 && x < 1.799315 ) weight=0.695605;
4868 if(x>= 1.799315 && x < 2.029567 ) weight=0.707578;
4869 if(x>= 2.029567 && x < 2.289283 ) weight=0.735194;
4870 if(x>= 2.289283 && x < 2.582235 ) weight=0.781052;
4871 if(x>= 2.582235 && x < 2.912674 ) weight=0.842350;
4872 if(x>= 2.912674 && x < 3.285398 ) weight=0.923676;
4873 if(x>= 3.285398 && x < 3.705818 ) weight=1.028317;
4874 if(x>= 3.705818 && x < 4.180038 ) weight=1.154029;
4875 if(x>= 4.180038 && x < 4.714942 ) weight=1.296915;
4876 if(x>= 4.714942 && x < 5.318296 ) weight=1.463674;
4877 if(x>= 5.318296 && x < 5.998859 ) weight=1.651985;
4878 if(x>= 5.998859 && x < 6.766511 ) weight=1.847912;
4879 if(x>= 6.766511 && x < 7.632396 ) weight=2.066284;
4880 if(x>= 7.632396 && x < 8.609086 ) weight=2.202231;
4881 if(x>= 8.609086 && x < 9.710759 ) weight=2.399942;
4882 if(x>= 9.710759 && x < 10.953409 ) weight=2.555106;
4883 if(x>= 10.953409 && x < 12.355077 ) weight=2.632377;
4884 if(x>= 12.355077 && x < 13.936111 ) weight=2.609660;
4885 if(x>= 13.936111 && x < 15.719464 ) weight=2.656343;
4886 if(x>= 15.719464 && x < 17.731026 ) weight=2.615438;
4887 if(x>= 17.731026 && x < 20.000000 ) weight=2.576269;
4895 Double_t AliAnalysisTaskEMCalHFEpA::SetEoverPCutPtDependentMC(Double_t pt)
4902 ////======================================================================================
4903 ////======================================================================================
4904 ////============================= data 2 sigma ===========================================
4907 if(pt>= 2.00 && pt < 2.50){
4908 fEoverPCutMin=0.7719;
4909 fEoverPCutMax=1.1023;
4911 if(pt>= 2.50 && pt < 3.00){
4912 fEoverPCutMin=0.7966;
4913 fEoverPCutMax=1.1088;
4915 if(pt>= 3.00 && pt < 4.00){
4916 fEoverPCutMin=0.8175;
4917 fEoverPCutMax=1.1101;
4919 if(pt>= 4.00 && pt < 5.00){
4920 fEoverPCutMin=0.8302;
4921 fEoverPCutMax=1.1194;
4923 if(pt>= 5.00 && pt < 6.00){
4924 fEoverPCutMin=0.8517;
4925 fEoverPCutMax=1.1177;
4927 if(pt>= 6.00 && pt < 8.00){
4928 fEoverPCutMin=0.8901;
4929 fEoverPCutMax=1.1139;
4931 if(pt>= 8.00 && pt < 10.00){
4932 fEoverPCutMin=0.8703;
4933 fEoverPCutMax=1.1377;
4935 if(pt>= 10.00 && pt < 12.00){
4936 fEoverPCutMin=0.9043;
4937 fEoverPCutMax=1.1977;
4941 ////=========================================== MC 2 sigma ===========================================
4946 if(pt>= 2.00 && pt < 2.50){
4947 fEoverPCutMin=0.7712;
4948 fEoverPCutMax=1.0746;
4950 if(pt>= 2.50 && pt < 3.00){
4951 fEoverPCutMin=0.7946;
4952 fEoverPCutMax=1.0708;
4954 if(pt>= 3.00 && pt < 4.00){
4955 fEoverPCutMin=0.8196;
4956 fEoverPCutMax=1.0678;
4958 if(pt>= 4.00 && pt < 5.00){
4959 fEoverPCutMin=0.8396;
4960 fEoverPCutMax=1.0646;
4962 if(pt>= 5.00 && pt < 6.00){
4963 fEoverPCutMin=0.8527;
4964 fEoverPCutMax=1.0647;
4966 if(pt>= 6.00 && pt < 8.00){
4967 fEoverPCutMin=0.8652;
4968 fEoverPCutMax=1.0670;
4970 if(pt>= 8.00 && pt < 10.00){
4971 fEoverPCutMin=0.8748;
4972 fEoverPCutMax=1.0804;
4974 if(pt>= 10.00 && pt < 12.00){
4975 fEoverPCutMin=0.8814;
4976 fEoverPCutMax=1.0842;
4981 ////======================================================================================
4982 ////======================================================================================
4983 ////=========================== data 1.5 sigma ===========================================
4987 if(pt>= 2.00 && pt < 2.50){
4988 fEoverPCutMin=0.8132;
4989 fEoverPCutMax=1.0610;
4991 if(pt>= 2.50 && pt < 3.00){
4992 fEoverPCutMin=0.8356;
4993 fEoverPCutMax=1.0698;
4995 if(pt>= 3.00 && pt < 4.00){
4996 fEoverPCutMin=0.8541;
4997 fEoverPCutMax=1.0735;
4999 if(pt>= 4.00 && pt < 5.00){
5000 fEoverPCutMin=0.8664;
5001 fEoverPCutMax=1.0832;
5003 if(pt>= 5.00 && pt < 6.00){
5004 fEoverPCutMin=0.8849;
5005 fEoverPCutMax=1.0845;
5007 if(pt>= 6.00 && pt < 8.00){
5008 fEoverPCutMin=0.9180;
5009 fEoverPCutMax=1.0860;
5011 if(pt>= 8.00 && pt < 10.00){
5012 fEoverPCutMin=0.9037;
5013 fEoverPCutMax=1.1043;
5015 if(pt>= 10.00 && pt < 12.00){
5016 fEoverPCutMin=0.9409;
5017 fEoverPCutMax=1.1611;
5021 ////======================================================================================
5022 ////======================================================================================
5023 ////=========================== MC 1.5 sigma ===========================================
5027 if(pt>= 2.00 && pt < 2.50){
5028 fEoverPCutMin=0.8091;
5029 fEoverPCutMax=1.0367;
5031 if(pt>= 2.50 && pt < 3.00){
5032 fEoverPCutMin=0.8292;
5033 fEoverPCutMax=1.0362;
5035 if(pt>= 3.00 && pt < 4.00){
5036 fEoverPCutMin=0.8506;
5037 fEoverPCutMax=1.0368;
5039 if(pt>= 4.00 && pt < 5.00){
5040 fEoverPCutMin=0.8677;
5041 fEoverPCutMax=1.0365;
5043 if(pt>= 5.00 && pt < 6.00){
5044 fEoverPCutMin=0.8792;
5045 fEoverPCutMax=1.0382;
5047 if(pt>= 6.00 && pt < 8.00){
5048 fEoverPCutMin=0.8904;
5049 fEoverPCutMax=1.0418;
5051 if(pt>= 8.00 && pt < 10.00){
5052 fEoverPCutMin=0.9005;
5053 fEoverPCutMax=1.0547;
5055 if(pt>= 10.00 && pt < 12.00){
5056 fEoverPCutMin=0.9067;
5057 fEoverPCutMax=1.0589;
5062 ////======================================================================================
5063 ////======================================================================================
5064 ////=========================== data 2.5 sigma ===========================================
5068 if(pt>= 2.00 && pt < 2.50){
5069 fEoverPCutMin=0.7306;
5070 fEoverPCutMax=1.1436;
5072 if(pt>= 2.50 && pt < 3.00){
5073 fEoverPCutMin=0.7575;
5074 fEoverPCutMax=1.1479;
5076 if(pt>= 3.00 && pt < 4.00){
5077 fEoverPCutMin=0.7809;
5078 fEoverPCutMax=1.1467;
5080 if(pt>= 4.00 && pt < 5.00){
5081 fEoverPCutMin=0.7941;
5082 fEoverPCutMax=1.1555;
5084 if(pt>= 5.00 && pt < 6.00){
5085 fEoverPCutMin=0.8184;
5086 fEoverPCutMax=1.1510;
5088 if(pt>= 6.00 && pt < 8.00){
5089 fEoverPCutMin=0.8621;
5090 fEoverPCutMax=1.1419;
5092 if(pt>= 8.00 && pt < 10.00){
5093 fEoverPCutMin=0.8368;
5094 fEoverPCutMax=1.1712;
5096 if(pt>= 10.00 && pt < 12.00){
5097 fEoverPCutMin=0.8676;
5098 fEoverPCutMax=1.2344;
5103 ////======================================================================================
5104 ////======================================================================================
5105 ////=========================== MC 2.5 sigma ===========================================
5109 if(pt>= 2.00 && pt < 2.50){
5110 fEoverPCutMin=0.7333;
5111 fEoverPCutMax=1.1125;
5113 if(pt>= 2.50 && pt < 3.00){
5114 fEoverPCutMin=0.7601;
5115 fEoverPCutMax=1.1053;
5117 if(pt>= 3.00 && pt < 4.00){
5118 fEoverPCutMin=0.7885;
5119 fEoverPCutMax=1.0989;
5121 if(pt>= 4.00 && pt < 5.00){
5122 fEoverPCutMin=0.8115;
5123 fEoverPCutMax=1.0927;
5125 if(pt>= 5.00 && pt < 6.00){
5126 fEoverPCutMin=0.8262;
5127 fEoverPCutMax=1.0912;
5129 if(pt>= 6.00 && pt < 8.00){
5130 fEoverPCutMin=0.8400;
5131 fEoverPCutMax=1.0922;
5133 if(pt>= 8.00 && pt < 10.00){
5134 fEoverPCutMin=0.8492;
5135 fEoverPCutMax=1.1060;
5137 if(pt>= 10.00 && pt < 12.00){
5138 fEoverPCutMin=0.8560;
5139 fEoverPCutMax=1.1096;
5144 return fEoverPCutMin;
5145 return fEoverPCutMax;