1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ////////////////////////////////////////////////////////////////////////
18 // Task for Heavy-flavour electron analysis in pPb collisions //
19 // (+ Electron-Hadron Jetlike Azimuthal Correlation) //
21 // version: October 14th, 2013. //
24 // Elienos Pereira de Oliveira Filho (epereira@cern.ch) //
25 // Cristiane Jahnke (cristiane.jahnke@cern.ch) //
27 ////////////////////////////////////////////////////////////////////////
35 #include "AliAnalysisTask.h"
36 #include "AliAnalysisManager.h"
37 #include "AliESDEvent.h"
38 #include "AliAODEvent.h"
39 #include "AliVEvent.h"
40 #include "AliESDInputHandler.h"
41 #include "AliESDtrackCuts.h"
42 #include "AliESDCaloCluster.h"
43 #include "AliESDCaloCells.h"
44 #include "AliEMCALTrack.h"
45 #include "AliExternalTrackParam.h"
46 #include "AliPhysicsSelection.h"
47 #include "TGeoGlobalMagField.h"
51 #include "AliCentrality.h"
52 #include "AliAODMCParticle.h"
53 #include "AliAODMCHeader.h"
55 #include "AliPIDResponse.h"
56 #include "AliHFEcontainer.h"
57 #include "AliHFEcuts.h"
58 #include "AliHFEpid.h"
59 #include "AliHFEpidBase.h"
60 #include "AliHFEpidQAmanager.h"
61 #include "AliHFEtools.h"
62 #include "AliCFContainer.h"
63 #include "AliCFManager.h"
64 #include "AliSelectNonHFE.h"
65 #include "AliHFEpidTPC.h"
66 #include "AliAnalysisTaskEMCalHFEpA.h"
68 #include "THnSparse.h"
69 #include "TLorentzVector.h"
72 #include "AliESDHandler.h"
73 #include "AliMCEventHandler.h"
74 #include "AliMCEvent.h"
76 #include "TParticle.h"
78 #include "AliAnalysisTaskSE.h"
79 #include "TRefArray.h"
82 #include "TGeoManager.h"
85 #include "AliKFParticle.h"
86 #include "AliKFVertex.h"
87 #include "AliVParticle.h"
88 #include "AliVTrack.h"
89 #include "AliEventPoolManager.h"
90 #include "TObjArray.h"
91 //______________________________________________________________________
93 //______________________________________________________________________
94 ClassImp(AliAnalysisTaskEMCalHFEpA)
96 //______________________________________________________________________
97 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA(const char *name)
98 : AliAnalysisTaskSE(name)
102 ,fUseShowerShapeCut(kFALSE)
103 ,fFillBackground(kFALSE)
104 ,fAssocWithSPD(kFALSE)
115 ,fIsFromGamma(kFALSE)
119 ,fPartnerCuts(new AliESDtrackCuts())
122 ,fNonHFE(new AliSelectNonHFE())
127 ,fHasCentralitySelection(kFALSE)
129 ,fCentralityHistPass(0)
151 ,fPtElec_ULS_weight(0)
152 ,fPtElec_LS_weight(0)
153 ,fPtElec_ULS2_weight(0)
154 ,fPtElec_LS2_weight(0)
169 ,fShowerShapeM02_EoverP(0)
170 ,fShowerShapeM20_EoverP(0)
189 ,fNcells_electrons(0)
196 ,fTPCnsigma_eta_electrons(0)
197 ,fTPCnsigma_eta_hadrons(0)
200 ,fnsigma_p_EoverPcut(0)
201 ,fEoverP_pt_pions2(0)
203 ,fEoverP_pt_hadrons(0)
209 ,fCEtaPhi_ULS_Weight(0)
210 ,fCEtaPhi_LS_Weight(0)
211 ,fCEtaPhi_ULS_NoP_Weight(0)
212 ,fCEtaPhi_LS_NoP_Weight(0)
248 ,fAngleCutFlag(kFALSE)
249 ,fChi2CutFlag(kFALSE)
251 ,fPtBackgroundBeforeReco(0)
252 ,fPtBackgroundBeforeReco2(0)
253 ,fPtBackgroundBeforeReco_weight(0)
254 ,fPtBackgroundBeforeReco2_weight(0)
257 ,fPtBackgroundAfterReco(0)
263 ,fPtMCparticleAll_nonPrimary(0)
264 ,fPtMCparticleAlle_nonPrimary(0)
265 ,fPtMCparticleAlle_Primary(0)
266 ,fPtMCparticleReco(0)
267 ,fPtMCparticleReco_nonPrimary(0)
268 ,fPtMCparticleAllHfe1(0)
269 ,fPtMCparticleRecoHfe1(0)
270 ,fPtMCparticleAllHfe2(0)
271 ,fPtMCparticleRecoHfe2(0)
272 ,fPtMCelectronAfterAll(0)
273 ,fPtMCelectronAfterAll_nonPrimary(0)
274 ,fPtMCelectronAfterAll_Primary(0)
278 ,fPtMC_EMCal_Selected(0)
280 ,fPtMC_TPC_Selected(0)
282 ,fPtMCWithoutLabel(0)
283 ,fPtIsPhysicaPrimary(0)
286 ,fPID(new AliHFEpid("hfePid"))
289 ,fRejectKinkMother(kFALSE)
294 ,fMCtrackGGGMother(0)
298 ,fMCparticleMother(0)
299 ,fMCparticleGMother(0)
300 ,fMCparticleGGMother(0)
301 ,fMCparticleGGGMother(0)
311 ,fCEtaPhi_ULS_Weight_EM(0)
312 ,fCEtaPhi_LS_Weight_EM(0)
315 ,fCEtaPhi_Inc_DiHadron(0)
319 // Define input and output slots here
320 // Input slot #0 works with a TChain
321 DefineInput(0, TChain::Class());
322 // Output slot #0 id reserved by the base class for AOD
323 // Output slot #1 writes into a TH1 container
324 // DefineOutput(1, TH1I::Class());
325 DefineOutput(1, TList::Class());
326 // DefineOutput(3, TTree::Class());
329 //________________________________________________________________________
330 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
331 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
335 ,fUseShowerShapeCut(kFALSE)
336 ,fFillBackground(kFALSE)
337 ,fAssocWithSPD(kFALSE)
347 ,fIsFromGamma(kFALSE)
351 ,fPartnerCuts(new AliESDtrackCuts())
354 ,fNonHFE(new AliSelectNonHFE())
359 ,fHasCentralitySelection(kFALSE)
361 ,fCentralityHistPass(0)
384 ,fPtElec_ULS_weight(0)
385 ,fPtElec_LS_weight(0)
386 ,fPtElec_ULS2_weight(0)
387 ,fPtElec_LS2_weight(0)
401 ,fShowerShapeM02_EoverP(0)
402 ,fShowerShapeM20_EoverP(0)
421 ,fNcells_electrons(0)
428 ,fTPCnsigma_eta_electrons(0)
429 ,fTPCnsigma_eta_hadrons(0)
432 ,fnsigma_p_EoverPcut(0)
433 ,fEoverP_pt_pions2(0)
435 ,fEoverP_pt_hadrons(0)
441 ,fCEtaPhi_ULS_Weight(0)
442 ,fCEtaPhi_LS_Weight(0)
443 ,fCEtaPhi_ULS_NoP_Weight(0)
444 ,fCEtaPhi_LS_NoP_Weight(0)
479 ,fAngleCutFlag(kFALSE)
480 ,fChi2CutFlag(kFALSE)
482 ,fPtBackgroundBeforeReco(0)
483 ,fPtBackgroundBeforeReco2(0)
484 ,fPtBackgroundBeforeReco_weight(0)
485 ,fPtBackgroundBeforeReco2_weight(0)
488 ,fPtBackgroundAfterReco(0)
495 ,fPtMCparticleAll_nonPrimary(0)
496 ,fPtMCparticleAlle_nonPrimary(0)
497 ,fPtMCparticleAlle_Primary(0)
498 ,fPtMCparticleReco(0)
499 ,fPtMCparticleReco_nonPrimary(0)
501 ,fPtMCparticleAllHfe1(0)
502 ,fPtMCparticleRecoHfe1(0)
503 ,fPtMCparticleAllHfe2(0)
504 ,fPtMCparticleRecoHfe2(0)
505 ,fPtMCelectronAfterAll(0)
506 ,fPtMCelectronAfterAll_nonPrimary(0)
507 ,fPtMCelectronAfterAll_Primary(0)
512 ,fPtMC_EMCal_Selected(0)
514 ,fPtMC_TPC_Selected(0)
516 ,fPtMCWithoutLabel(0)
517 ,fPtIsPhysicaPrimary(0)
520 ,fPID(new AliHFEpid("hfePid"))
523 ,fRejectKinkMother(kFALSE)
528 ,fMCtrackGGGMother(0)
532 ,fMCparticleMother(0)
533 ,fMCparticleGMother(0)
534 ,fMCparticleGGMother(0)
535 ,fMCparticleGGGMother(0)
545 ,fCEtaPhi_ULS_Weight_EM(0)
546 ,fCEtaPhi_LS_Weight_EM(0)
549 ,fCEtaPhi_Inc_DiHadron(0)
553 // Define input and output slots here
554 // Input slot #0 works with a TChain
555 DefineInput(0, TChain::Class());
556 // Output slot #0 id reserved by the base class for AOD
557 // Output slot #1 writes into a TH1 container
558 // DefineOutput(1, TH1I::Class());
559 DefineOutput(1, TList::Class());
560 //DefineOutput(3, TTree::Class());
563 //______________________________________________________________________
564 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
573 //______________________________________________________________________
574 //Create Output Objects
575 //Here we can define the histograms and others output files
577 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
579 //______________________________________________________________________
581 if(!fPID->GetNumberOfPIDdetectors())
583 fPID->AddDetector("TPC", 0);
586 fPID->SortDetectors();
588 fPIDqa = new AliHFEpidQAmanager();
589 fPIDqa->Initialize(fPID);
590 //______________________________________________________________________
592 //______________________________________________________________________
593 //Initialize correction Framework and Cuts
594 fCFM = new AliCFManager;
595 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
596 fCFM->SetNStepParticle(kNcutSteps);
597 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
601 AliWarning("Cuts not available. Default cuts will be used");
602 fCuts = new AliHFEcuts;
603 fCuts->CreateStandardCuts();
606 fCuts->Initialize(fCFM);
607 //______________________________________________________________________
609 ///______________________________________________________________________
612 fOutputList = new TList();
613 fOutputList->SetOwner();
616 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
618 //Store the number of events
620 fNevent = new TH1F("fNevent","Number of Events",5,-0.5,4.5);
621 //And then, add to the output list
622 fOutputList->Add(fNevent);
624 fpid = new TH1F("fpid","PID flag",5,0,5);
625 fOutputList->Add(fpid);
628 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
630 fPtElec_ULS = new TH1F("fPtElec_ULS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
631 fPtElec_LS = new TH1F("fPtElec_LS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
633 fPtElec_ULS_weight = new TH1F("fPtElec_ULS_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
634 fPtElec_LS_weight = new TH1F("fPtElec_LS_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
636 fTOF01 = new TH2F("fTOF01","",200,-20,20,200,-20,20);
637 fTOF02 = new TH2F("fTOF02","",200,-20,20,200,-20,20);
638 fTOF03 = new TH2F("fTOF03","",200,-20,20,200,-20,20);
641 fPtElec_ULS2 = new TH1F("fPtElec_ULS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
642 fPtElec_LS2 = new TH1F("fPtElec_LS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
644 fPtElec_ULS2_weight = new TH1F("fPtElec_ULS2_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
645 fPtElec_LS2_weight = new TH1F("fPtElec_LS2_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
649 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",300,0,30);
650 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
651 fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
655 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
656 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
661 fTime = new TH2D("fTime","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
662 fTime2 = new TH2D("fTime2","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
665 ftimingEle = new TH2D("ftimingEle","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
666 ftimingEle2 = new TH2D("ftimingEle2","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
668 fShowerShape_ha = new TH2F("fShowerShape_ha","Shower Shape hadrons;M02;M20",500,0,1.8,500,0,1.8);
669 fShowerShape_ele = new TH2F("fShowerShape_ele","Shower Shape electrons;M02;M20",500,0,1.8,500,0,1.8);
671 fShowerShapeM02_EoverP = new TH2F("fShowerShapeM02_EoverP","Shower Shape;M02;E/p",500,0,1.8,500,0,1.8);
672 fShowerShapeM20_EoverP = new TH2F("fShowerShapeM20_EoverP","Shower Shape;M20;E/p",500,0,1.8,500,0,1.8);
676 fOutputList->Add(fTOF01);
677 fOutputList->Add(fTOF02);
678 fOutputList->Add(fTOF03);
680 fOutputList->Add(fPtElec_Inc);
681 fOutputList->Add(fPtElec_ULS);
682 fOutputList->Add(fPtElec_LS);
683 fOutputList->Add(fPtElec_ULS_weight);
684 fOutputList->Add(fPtElec_LS_weight);
687 fOutputList->Add(fPtElec_ULS2);
688 fOutputList->Add(fPtElec_LS2);
689 fOutputList->Add(fPtElec_ULS2_weight);
690 fOutputList->Add(fPtElec_LS2_weight);
694 fOutputList->Add(fPtTrigger_Inc);
695 fOutputList->Add(fTPCnsigma_pt_2D);
696 fOutputList->Add(fShowerShapeCut);
698 fOutputList->Add(fCharge_n);
699 fOutputList->Add(fCharge_p);
704 fOutputList->Add(fTime);
705 fOutputList->Add(fTime2);
709 fOutputList->Add(ftimingEle);
710 fOutputList->Add(ftimingEle2);
712 fOutputList->Add(fShowerShape_ha);
713 fOutputList->Add(fShowerShape_ele);
715 fOutputList->Add(fShowerShapeM02_EoverP);
716 fOutputList->Add(fShowerShapeM20_EoverP);
725 //Step 1: Before Track cuts
729 fEoverP_pt = new TH2F *[3];
730 fTPC_p = new TH2F *[3];
731 fTPCnsigma_p = new TH2F *[3];
733 fECluster= new TH1F *[3];
734 fEtaPhi= new TH2F *[3];
735 fVtxZ= new TH1F *[3];
736 fNTracks= new TH1F *[3];
737 fNClusters= new TH1F *[3];
738 fTPCNcls_EoverP= new TH2F *[3];
740 for(Int_t i = 0; i < 3; i++)
742 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
743 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);
744 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
747 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
748 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
749 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
750 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,1000);
751 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
752 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
755 fOutputList->Add(fEoverP_pt[i]);
756 fOutputList->Add(fTPC_p[i]);
757 fOutputList->Add(fTPCnsigma_p[i]);
760 fOutputList->Add(fECluster[i]);
761 fOutputList->Add(fEtaPhi[i]);
762 fOutputList->Add(fVtxZ[i]);
763 fOutputList->Add(fNTracks[i]);
764 fOutputList->Add(fNClusters[i]);
765 fOutputList->Add(fTPCNcls_EoverP[i]);
769 Int_t fPtBin[7] = {1,2,4,6,8,10,15};
771 fEoverP_tpc = new TH2F *[6];
772 fTPC_pt = new TH1F *[6];
773 fTPCnsigma_pt = new TH1F *[6];
778 fR_EoverP=new TH2F *[6];
779 fNcells=new TH1F *[6];
780 fNcells_EoverP=new TH2F *[6];
781 fM02_EoverP= new TH2F *[6];
782 fM20_EoverP= new TH2F *[6];
783 fEoverP_ptbins=new TH1F *[6];
784 fECluster_ptbins=new TH1F *[6];
785 fEoverP_wSSCut=new TH1F *[6];
786 fNcells_electrons=new TH1F *[6];
787 fNcells_hadrons=new TH1F *[6];
788 fTPCnsigma_eta_electrons=new TH2F *[6];
789 fTPCnsigma_eta_hadrons=new TH2F *[6];
793 fCEtaPhi_Inc = new TH2F *[6];
794 fCEtaPhi_Inc_DiHadron = new TH2F *[6];
796 fCEtaPhi_ULS = new TH2F *[6];
797 fCEtaPhi_LS = new TH2F *[6];
798 fCEtaPhi_ULS_NoP = new TH2F *[6];
799 fCEtaPhi_LS_NoP = new TH2F *[6];
801 fCEtaPhi_ULS_Weight = new TH2F *[6];
802 fCEtaPhi_LS_Weight = new TH2F *[6];
803 fCEtaPhi_ULS_NoP_Weight = new TH2F *[6];
804 fCEtaPhi_LS_NoP_Weight = new TH2F *[6];
806 fCEtaPhi_Inc_EM = new TH2F *[6];
808 fCEtaPhi_ULS_EM = new TH2F *[6];
809 fCEtaPhi_LS_EM = new TH2F *[6];
811 fCEtaPhi_ULS_Weight_EM = new TH2F *[6];
812 fCEtaPhi_LS_Weight_EM = new TH2F *[6];
814 fInvMass = new TH1F("fInvMass","",200,0,0.3);
815 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
816 fDCA = new TH1F("fDCA","",200,0,1);
817 fDCABack = new TH1F("fDCABack","",200,0,1);
818 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
819 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
821 fOutputList->Add(fInvMass);
822 fOutputList->Add(fInvMassBack);
823 fOutputList->Add(fDCA);
824 fOutputList->Add(fDCABack);
825 fOutputList->Add(fOpAngle);
826 fOutputList->Add(fOpAngleBack);
831 fInvMass = new TH1F("fInvMass","",200,0,0.3);
832 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
833 fDCA = new TH1F("fDCA","",200,0,1);
834 fDCABack = new TH1F("fDCABack","",200,0,1);
835 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
836 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
838 fOutputList->Add(fInvMass);
839 fOutputList->Add(fInvMassBack);
840 fOutputList->Add(fDCA);
841 fOutputList->Add(fDCABack);
842 fOutputList->Add(fOpAngle);
843 fOutputList->Add(fOpAngleBack);
845 //histos for TPC-only
846 fInvMass2 = new TH1F("fInvMass2","",200,0,0.3);
847 fInvMassBack2 = new TH1F("fInvMassBack2","",200,0,0.3);
848 fDCA2 = new TH1F("fDCA2","",200,0,1);
849 fDCABack2 = new TH1F("fDCABack2","",200,0,1);
850 fOpAngle2 = new TH1F("fOpAngle2","",200,0,0.5);
851 fOpAngleBack2 = new TH1F("fOpAngleBack2","",200,0,0.5);
853 fOutputList->Add(fInvMass2);
854 fOutputList->Add(fInvMassBack2);
855 fOutputList->Add(fDCA2);
856 fOutputList->Add(fDCABack2);
857 fOutputList->Add(fOpAngle2);
858 fOutputList->Add(fOpAngleBack2);
862 for(Int_t i = 0; i < 6; i++)
864 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);
865 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);
866 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);
868 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);
869 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);
870 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);
871 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);
872 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);
873 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);
874 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);
875 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);
876 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);
877 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);
878 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);
879 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);
880 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);
881 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);
882 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);
884 fOutputList->Add(fEoverP_tpc[i]);
885 fOutputList->Add(fTPC_pt[i]);
886 fOutputList->Add(fTPCnsigma_pt[i]);
888 fOutputList->Add(fEta[i]);
889 fOutputList->Add(fPhi[i]);
890 fOutputList->Add(fR[i]);
891 fOutputList->Add(fR_EoverP[i]);
892 fOutputList->Add(fNcells[i]);
893 fOutputList->Add(fNcells_electrons[i]);
894 fOutputList->Add(fNcells_hadrons[i]);
895 fOutputList->Add(fNcells_EoverP[i]);
896 fOutputList->Add(fECluster_ptbins[i]);
897 fOutputList->Add(fEoverP_ptbins[i]);
898 fOutputList->Add(fEoverP_wSSCut[i]);
899 fOutputList->Add(fM02_EoverP[i]);
900 fOutputList->Add(fM20_EoverP[i]);
901 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
902 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
907 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);
908 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);
910 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);
911 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);
912 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);
913 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);
915 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);
916 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);
917 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);
918 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);
920 fOutputList->Add(fCEtaPhi_Inc[i]);
921 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
923 fOutputList->Add(fCEtaPhi_ULS[i]);
924 fOutputList->Add(fCEtaPhi_LS[i]);
925 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
926 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
928 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
929 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
930 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
931 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
935 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);
937 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);
938 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);
940 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);
941 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);
943 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
945 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
946 fOutputList->Add(fCEtaPhi_LS_EM[i]);
948 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
949 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
955 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
956 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
959 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
960 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
962 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
963 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
965 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
966 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
969 fOutputList->Add(fTPCnsigma_eta);
970 fOutputList->Add(fTPCnsigma_phi);
972 fOutputList->Add(fNcells_pt);
973 fOutputList->Add(fEoverP_pt_pions);
975 fOutputList->Add(ftpc_p_EoverPcut);
976 fOutputList->Add(fnsigma_p_EoverPcut);
978 fOutputList->Add(fEoverP_pt_pions2);
979 fOutputList->Add(fEoverP_pt_hadrons);
981 //__________________________________________________________________
985 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{T} (GeV/c);Count",300,0,30);
986 fPtBackgroundBeforeReco_weight = new TH1F("fPtBackgroundBeforeReco_weight",";p_{T} (GeV/c);Count",300,0,30);
987 if(fFillBackground)fPtBackgroundBeforeReco2 = new TH1F("fPtBackgroundBeforeReco2",";p_{T} (GeV/c);Count",300,0,30);
988 if(fFillBackground)fPtBackgroundBeforeReco2_weight = new TH1F("fPtBackgroundBeforeReco2_weight",";p_{T} (GeV/c);Count",300,0,30);
989 fpT_m_electron= new TH2F("fpT_m_electron","fpT_m_electron",300,0,30,300,0,30);
990 fpT_gm_electron= new TH2F("fpT_gm_electron","fpT_gm_electron",300,0,30,300,0,30);
992 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{T} (GeV/c);Count",300,0,30);
993 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{T} (GeV/c);Count",200,0,40);
994 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{T} (GeV/c);Count",200,0,40);
996 fPtMCparticleAll_nonPrimary = new TH1F("fPtMCparticleAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
997 fPtMCparticleAlle_nonPrimary = new TH1F("fPtMCparticleAlle_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
998 fPtMCparticleAlle_Primary = new TH1F("fPtMCparticleAlle_Primary",";p_{T} (GeV/c);Count",200,0,40);
1000 fPtMCparticleReco_nonPrimary = new TH1F("fPtMCparticleReco_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1002 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
1003 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
1004 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
1005 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
1007 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{T} (GeV/c);Count",200,0,40);
1008 fPtMCelectronAfterAll_nonPrimary = new TH1F("fPtMCelectronAfterAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1009 fPtMCelectronAfterAll_Primary = new TH1F("fPtMCelectronAfterAll_Primary",";p_{T} (GeV/c);Count",200,0,40);
1013 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,30);
1014 fPtMCeta = new TH1F("fPtMCeta",";p_{T} (GeV/c);Count",200,0,30);
1015 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
1016 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
1017 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{t} (GeV/c);Count",200,0,40);
1018 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{t} (GeV/c);Count",200,0,40);
1019 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
1020 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
1021 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
1023 fOutputList->Add(fPtBackgroundBeforeReco);
1024 fOutputList->Add(fPtBackgroundBeforeReco_weight);
1026 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2);
1027 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2_weight);
1029 fOutputList->Add(fpT_m_electron);
1030 fOutputList->Add(fpT_gm_electron);
1032 fOutputList->Add(fPtBackgroundAfterReco);
1033 fOutputList->Add(fPtMCparticleAll);
1034 fOutputList->Add(fPtMCparticleReco);
1036 fOutputList->Add(fPtMCparticleAll_nonPrimary);
1037 fOutputList->Add(fPtMCparticleAlle_nonPrimary);
1039 fOutputList->Add(fPtMCparticleAlle_Primary);
1040 fOutputList->Add(fPtMCparticleReco_nonPrimary);
1042 fOutputList->Add(fPtMCparticleAllHfe1);
1043 fOutputList->Add(fPtMCparticleRecoHfe1);
1044 fOutputList->Add(fPtMCparticleAllHfe2);
1045 fOutputList->Add(fPtMCparticleRecoHfe2);
1046 fOutputList->Add(fPtMCelectronAfterAll);
1048 fOutputList->Add(fPtMCelectronAfterAll_nonPrimary);
1049 fOutputList->Add(fPtMCelectronAfterAll_Primary);
1053 fOutputList->Add(fPtMCpi0);
1054 fOutputList->Add(fPtMCeta);
1055 fOutputList->Add(fPtMC_EMCal_All);
1056 fOutputList->Add(fPtMC_EMCal_Selected);
1057 fOutputList->Add(fPtMC_TPC_All);
1058 fOutputList->Add(fPtMC_TPC_Selected);
1059 fOutputList->Add(fPtMCWithLabel);
1060 fOutputList->Add(fPtMCWithoutLabel);
1061 fOutputList->Add(fPtIsPhysicaPrimary);
1064 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
1065 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
1066 fOutputList->Add(fCentralityHist);
1067 fOutputList->Add(fCentralityHistPass);
1069 //______________________________________________________________________
1070 //Mixed event analysis
1071 if(fEventMixingFlag)
1073 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
1074 fOutputList->Add(fPoolNevents);
1076 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.
1077 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
1079 Int_t nCentralityBins = 15;
1080 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
1082 Int_t nZvtxBins = 9;
1083 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
1085 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
1087 //______________________________________________________________________
1089 PostData(1, fOutputList);
1091 ///______________________________________________________________________
1094 //______________________________________________________________________
1096 //Called for each event
1097 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
1100 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1101 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
1105 printf("ERROR: fESD & fAOD not available\n");
1109 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
1113 printf("ERROR: fVEvent not available\n");
1120 AliError("HFE cuts not available");
1124 if(!fPID->IsInitialized())
1126 // Initialize PID with the given run number
1127 AliWarning("PID not initialised, get from Run no");
1131 fPID->InitializePID(fAOD->GetRunNumber());
1135 fPID->InitializePID(fESD->GetRunNumber());
1140 fPidResponse = fInputHandler->GetPIDResponse();
1143 //Check PID response
1146 AliDebug(1, "Using default PID Response");
1147 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
1150 fPID->SetPIDResponse(fPidResponse);
1152 fCFM->SetRecEventInfo(fVevent);
1154 Double_t *fListOfmotherkink = 0;
1155 Int_t fNumberOfVertices = 0;
1156 Int_t fNumberOfMotherkink = 0;
1158 //______________________________________________________________________
1162 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
1163 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1164 TString vtxTtl = trkVtx->GetTitle();
1165 if(!vtxTtl.Contains("VertexerTracks")) return;
1166 Float_t zvtx = trkVtx->GetZ();
1168 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
1169 if(spdVtx->GetNContributors()<=0) return;
1170 TString vtxTyp = spdVtx->GetTitle();
1171 Double_t cov[6]={0};
1172 spdVtx->GetCovarianceMatrix(cov);
1173 Double_t zRes = TMath::Sqrt(cov[5]);
1174 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1175 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1176 if(TMath::Abs(zvtx) > 10) return;
1178 //Look for kink mother for AOD
1180 fNumberOfVertices = 0;
1181 fNumberOfMotherkink = 0;
1185 fNumberOfVertices = fAOD->GetNumberOfVertices();
1187 fListOfmotherkink = new Double_t[fNumberOfVertices];
1189 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
1191 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
1192 if(!aodvertex) continue;
1193 if(aodvertex->GetType()==AliAODVertex::kKink)
1195 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
1196 if(!mother1) continue;
1197 Int_t idmother = mother1->GetID();
1198 fListOfmotherkink[fNumberOfMotherkink] = idmother;
1199 fNumberOfMotherkink++;
1210 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
1211 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1212 TString vtxTtl = trkVtx->GetTitle();
1213 if(!vtxTtl.Contains("VertexerTracks")) return;
1214 Float_t zvtx = trkVtx->GetZ();
1216 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
1217 if(spdVtx->GetNContributors()<=0) return;
1218 TString vtxTyp = spdVtx->GetTitle();
1219 Double_t cov[6]={0};
1220 spdVtx->GetCovarianceMatrix(cov);
1221 Double_t zRes = TMath::Sqrt(cov[5]);
1222 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1223 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1224 if(TMath::Abs(zvtx) > 10) return;
1227 //______________________________________________________________________
1229 //Only events with at least 2 tracks are accepted
1230 Int_t fNOtrks = fVevent->GetNumberOfTracks();
1231 if(fNOtrks<2) return;
1233 //______________________________________________________________________
1234 //Centrality Selection
1235 if(fHasCentralitySelection)
1237 Float_t centrality = -1;
1241 fCentrality = fAOD->GetHeader()->GetCentralityP();
1245 fCentrality = fESD->GetCentrality();
1248 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
1249 else centrality = fCentrality->GetCentralityPercentile("V0A");
1251 //cout << "Centrality = " << centrality << " %" << endl;
1253 fCentralityHist->Fill(centrality);
1255 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
1257 fCentralityHistPass->Fill(centrality);
1259 //______________________________________________________________________
1261 //______________________________________________________________________
1267 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1271 AliError("Array of MC particles not found");
1275 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1279 AliError("Could not find MC Header in AOD");
1283 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1285 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1286 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1288 Int_t pdg = fMCparticle->GetPdgCode();
1291 double proX = fMCparticle->Xv();
1292 double proY = fMCparticle->Yv();
1293 double proR = sqrt(pow(proX,2)+pow(proY,2));
1296 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1298 //to correct background
1299 if (TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0){
1300 Int_t mpdg = fMCparticleMother->GetPdgCode();
1302 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1305 fPtMCparticleAlle_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons, and not primary
1311 if (TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCparticleAlle_Primary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons primary
1313 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1316 fPtMCparticleAll_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all particles, and not primary
1317 if(fMCparticle->IsPhysicalPrimary())
1319 fPtMCparticleAll->Fill(fMCparticle->Pt());
1321 Bool_t MotherFound = FindMother(iMC);
1324 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCparticle->Pt()); //denominator for total efficiency
1325 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1331 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1332 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1337 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1338 if (!fEventHandler) {
1339 Printf("ERROR: Could not retrieve MC event handler");
1343 fMCevent = fEventHandler->MCEvent();
1345 Printf("ERROR: Could not retrieve MC event");
1349 fMCstack = fMCevent->Stack();
1351 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1354 fMCtrack = fMCstack->Particle(iMC);
1355 if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1356 TParticle *particle=fMCstack->Particle(iMC);
1358 Int_t pdg = fMCtrack->GetPdgCode();
1361 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
1362 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCtrack->Pt());
1365 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1368 //to correct background
1369 if (TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0){
1370 Int_t mpdg = fMCtrackMother->GetPdgCode();
1371 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1372 Double_t proR=particle->R();
1374 fPtMCparticleAlle_nonPrimary->Fill(fMCtrack->Pt()); //denominator for total efficiency for all electrons, and not primary
1379 if (TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(iMC)) fPtMCparticleAlle_Primary->Fill(fMCtrack->Pt());
1382 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1384 fPtMCparticleAll_nonPrimary->Fill(fMCtrack->Pt());//denominator for total efficiency for all particle, non Primary track
1386 if(!fMCstack->IsPhysicalPrimary(iMC)) continue;
1387 fPtMCparticleAll->Fill(fMCtrack->Pt());
1389 Bool_t MotherFound = FindMother(iMC);
1392 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency
1393 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
1401 //______________________________________________________________________
1402 //EMCal Trigger Selection (Threshould selection)
1403 TString firedTrigger;
1404 TString TriggerEG1("EG1");
1405 TString TriggerEG2("EG2");
1407 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1408 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1411 if(firedTrigger.Contains(TriggerEG1)) fNevent->Fill(1);
1412 if(firedTrigger.Contains(TriggerEG2)) fNevent->Fill(2);
1415 if(firedTrigger.Contains(TriggerEG1))
1425 if(firedTrigger.Contains(TriggerEG2))
1434 //______________________________________________________________________
1437 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
1438 else ClsNo = fAOD->GetNumberOfCaloClusters();
1440 //______________________________________________________________________
1442 ///______________________________________________________________________
1444 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1446 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1449 printf("ERROR: Could not receive track %d\n", iTracks);
1453 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1454 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
1455 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1457 Double_t fTPCnSigma = -999;
1458 Double_t fTOFnSigma = -999;
1459 Double_t fTPCnSigma_pion = -999;
1460 Double_t fTPCnSigma_proton = -999;
1461 Double_t fTPCnSigma_kaon = -999;
1462 Double_t fTPCsignal = -999;
1463 Double_t fPt = -999;
1466 ///_____________________________________________________________________________
1467 ///Fill QA plots without track selection
1469 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
1471 fTPCsignal = track->GetTPCsignal();
1472 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
1473 fTOFnSigma = fPidResponse->NumberOfSigmasTOF(track, AliPID::kElectron);
1474 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
1475 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
1476 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
1478 fTPC_p[0]->Fill(fPt,fTPCsignal);
1479 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
1482 Float_t TPCNcls = track->GetTPCNcls();
1483 Float_t pos[3]={0,0,0};
1485 Double_t fEMCflag = kFALSE;
1486 if(track->GetEMCALcluster()>0)
1488 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1489 if(fClus->IsEMCAL())
1491 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1494 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
1497 Float_t Energy = fClus->E();
1498 Float_t EoverP = Energy/track->P();
1499 //Float_t M02 = fClus->GetM02();
1500 //Float_t M20 = fClus->GetM20();
1502 /////////////// for Eta Phi distribution
1503 fClus->GetPosition(pos);
1504 TVector3 vpos(pos[0],pos[1],pos[2]);
1505 Double_t cphi = vpos.Phi();
1506 Double_t ceta = vpos.Eta();
1507 fEtaPhi[0]->Fill(cphi,ceta);
1509 fECluster[0]->Fill(Energy);
1510 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
1515 //______________________________________________________________
1518 fVtxZ[0]->Fill(fZvtx);
1519 fNTracks[0]->Fill(fNOtrks);
1520 fNClusters[0]->Fill(ClsNo);
1522 //______________________________________________________________
1524 ///Fill QA plots without track selection
1525 ///_____________________________________________________________________________
1526 //______________________________________________________________________________________
1527 //Track Selection Cuts
1529 //AOD (Test Filter Bit)
1532 // standard cuts with very loose DCA - BIT(4)
1535 GetStandardITSTPCTrackCuts2011(kFALSE)
1536 SetMaxChi2PerClusterTPC(4);
1537 SetAcceptKinkDaughters(kFALSE);
1538 SetRequireTPCRefit(kTRUE);
1539 SetRequireITSRefit(kTRUE);
1540 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1541 SetMaxDCAToVertexZ(2);
1542 SetMaxDCAToVertex2D(kFALSE);
1543 SetRequireSigmaToVertex(kFALSE);
1544 SetMaxChi2PerClusterITS(36);
1545 SetMaxDCAToVertexXY(2.4)
1546 SetMaxDCAToVertexZ(3.2)
1547 SetDCaToVertex2D(kTRUE)
1550 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
1553 //RecKine: ITSTPC cuts
1554 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
1556 if(fRejectKinkMother)
1560 Bool_t kinkmotherpass = kTRUE;
1561 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
1563 if(track->GetID() == fListOfmotherkink[kinkmother])
1565 kinkmotherpass = kFALSE;
1569 if(!kinkmotherpass) continue;
1573 if(etrack->GetKinkIndex(0) != 0) continue;
1580 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
1583 //HFEcuts: ITS layers cuts
1584 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
1586 //HFE cuts: TPC PID cleanup
1587 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
1588 //______________________________________________________________________________________
1590 ///_____________________________________________________________
1591 ///QA plots after track selection
1594 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
1595 else fPtMCWithoutLabel->Fill(fPt);
1598 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1600 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1602 if(fMCparticle->IsPhysicalPrimary()) fPtIsPhysicaPrimary->Fill(fPt);
1604 Int_t pdg = fMCparticle->GetPdgCode();
1605 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1609 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1611 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
1613 if(fMCparticle->IsPhysicalPrimary())
1615 fPtMCparticleReco->Fill(fMCparticle->Pt());
1617 Bool_t MotherFound = FindMother(track->GetLabel());
1620 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());
1621 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
1627 else if(fIsMC && track->GetLabel()>=0)
1629 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1632 fMCtrack = fMCstack->Particle(track->GetLabel());
1633 Int_t pdg = fMCtrack->GetPdgCode();
1635 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1637 fPtMCparticleReco_nonPrimary->Fill(fMCtrack->Pt());//not Primary track
1641 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1643 fPtIsPhysicaPrimary->Fill(fPt);
1648 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1650 fPtMCparticleReco->Fill(fMCtrack->Pt());
1652 Bool_t MotherFound = FindMother(track->GetLabel());
1655 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());
1656 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
1663 fTPC_p[1]->Fill(fPt,fTPCsignal);
1664 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
1665 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
1667 TPCNcls = track->GetTPCNcls();
1668 Float_t pos2[3]={0,0,0};
1670 if(track->GetEMCALcluster()>0)
1672 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1673 if(fClus->IsEMCAL())
1675 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1677 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
1679 Float_t Energy = fClus->E();
1680 Float_t EoverP = Energy/track->P();
1681 Float_t M02 = fClus->GetM02();
1682 Float_t M20 = fClus->GetM20();
1683 Float_t ncells = fClus->GetNCells();
1685 /////////////// for Eta Phi distribution
1686 fClus->GetPosition(pos2);
1687 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
1688 Double_t cphi = vpos.Phi();
1689 Double_t ceta = vpos.Eta();
1690 fEtaPhi[1]->Fill(cphi,ceta);
1692 fECluster[1]->Fill(Energy);
1693 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
1696 //for EMCal trigger performance
1698 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
1699 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
1704 //for hadron contamination calculations
1708 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1710 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
1712 if(fTPCnSigma<-3.5){
1713 fEoverP_pt_hadrons->Fill(fPt,EoverP);
1714 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
1718 if(fTPCnSigma < -3.5){
1719 fEoverP_pt_pions->Fill(fPt, EoverP);
1723 if(fTPCnSigma < -3.5 && fTPCnSigma > -10){
1724 fEoverP_pt_pions2->Fill(fPt, EoverP);
1734 for(Int_t i = 0; i < 6; i++)
1736 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1739 if(fTPCnSigma < -5 && fTPCnSigma > -10){
1740 fNcells_hadrons[i]->Fill(ncells);
1742 //hadrons selection using E/p
1743 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
1744 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
1746 //electrons selection using E/p
1747 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1748 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
1753 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1755 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
1756 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
1760 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1762 fPtTrigger_Inc->Fill(fPt);
1763 DiHadronCorrelation(track, iTracks);
1772 //______________________________________________________________
1775 fVtxZ[1]->Fill(fZvtx);
1776 fNTracks[1]->Fill(fNOtrks);
1777 fNClusters[1]->Fill(ClsNo);
1778 //______________________________________________________________
1780 ///______________________________________________________________________
1781 ///Histograms for PID Studies
1782 //Double_t fPtBin[6] = {2,4,6,8,10,15};
1784 for(Int_t i = 0; i < 6; i++)
1786 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1788 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
1791 fTPC_pt[i]->Fill(fTPCsignal);
1792 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
1797 ///QA plots after track selection
1798 ///_____________________________________________________________
1800 //_______________________________________________________
1801 //Correlation Analysis - DiHadron
1804 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1806 fPtTrigger_Inc->Fill(fPt);
1807 DiHadronCorrelation(track, iTracks);
1810 //_______________________________________________________
1813 ///////////////////////////////////////////////////////////////////
1814 ///TPC - efficiency calculation //
1816 /// changing start here
1817 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1819 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1820 Int_t pdg = fMCparticle->GetPdgCode();
1823 if(fMCparticle->IsPhysicalPrimary()){
1826 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1828 Bool_t MotherFound = FindMother(track->GetLabel());
1830 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1831 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1832 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
1839 else if(fIsMC && track->GetLabel()>=0)//ESD
1842 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1843 fMCtrack = fMCstack->Particle(track->GetLabel());
1845 Int_t pdg = fMCtrack->GetPdgCode();
1846 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1848 if(fMCtrack->GetFirstMother()>0){
1849 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1850 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1851 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
1859 if(fPt>1 && fPt<2) fTOF01->Fill(fTOFnSigma,fTPCnSigma);
1860 if(fPt>2 && fPt<4) fTOF02->Fill(fTOFnSigma,fTPCnSigma);
1861 if(fPt>4 && fPt<6) fTOF03->Fill(fTOFnSigma,fTPCnSigma);
1863 ///________________________________________________________________________
1865 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
1866 Int_t pidpassed = 1;
1867 AliHFEpidObject hfetrack;
1868 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
1869 hfetrack.SetRecTrack(track);
1870 hfetrack.SetPP(); //proton-proton analysis
1871 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
1872 fpid->Fill(pidpassed);
1874 if(pidpassed==0) continue;
1875 ///________________________________________________________________________
1878 ////////////////////////////////////////////////////////////////////
1879 ///TPC efficiency calculations
1881 /// changing start here
1882 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1884 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1885 Int_t pdg = fMCparticle->GetPdgCode();
1888 if(fMCparticle->IsPhysicalPrimary()){
1891 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1893 Bool_t MotherFound = FindMother(track->GetLabel());
1895 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1896 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1897 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
1904 else if(fIsMC && track->GetLabel()>=0)//ESD
1907 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1908 fMCtrack = fMCstack->Particle(track->GetLabel());
1910 Int_t pdg = fMCtrack->GetPdgCode();
1911 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1913 if(fMCtrack->GetFirstMother()>0){
1914 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1915 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1916 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
1923 //Eta Cut for TPC only
1924 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1925 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
1928 //Background for TPC only
1929 if(fFillBackground){
1930 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
1934 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
1935 fTPC_p[2]->Fill(fP,fTPCsignal);
1936 TPCNcls = track->GetTPCNcls();
1937 Float_t pos3[3]={0,0,0};
1939 if(track->GetEMCALcluster()>0)
1941 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1942 if(fClus->IsEMCAL())
1945 //________________________________________________________________________
1948 //Cluster timing distribution
1949 if(fUseEMCal && !fIsAOD ){
1950 AliESDCaloCells &cells=*(fESD->GetEMCALCells());
1951 // Int_t nTotalCells = cells.GetNumberOfCells() ;
1952 //Int_t type = cells.GetType();
1953 //for (Int_t icell= 0; icell < nTotalCells; icell++) {
1954 //fTime->Fill(cells.GetTime(icell));
1957 TRefArray* caloClusters = new TRefArray();
1958 fESD->GetEMCALClusters(caloClusters);
1960 Int_t nclus = caloClusters->GetEntries();
1962 //fClusESD = fESD->GetCaloCluster(track->GetEMCALcluster());
1964 for (Int_t icl = 0; icl < nclus; icl++) {
1966 AliESDCaloCluster* clus = (AliESDCaloCluster*)caloClusters->At(icl);
1968 if(fClus->IsEMCAL()){
1969 Float_t ncells = fClus->GetNCells();
1970 UShort_t * index = clus->GetCellsAbsId() ;
1971 UShort_t * index2 = fClus->GetCellsAbsId() ;
1974 for(Int_t i = 0; i < ncells ; i++){
1976 Int_t absId = index[i];
1977 fTime->Fill(fPt,cells.GetCellTime(absId));
1979 Int_t absId2 = index2[i];
1980 fTime2->Fill(fPt,cells.GetCellTime(absId2));
1992 double emctof = fClus->GetTOF();
1993 ftimingEle->Fill(fPt,emctof);
1995 //________________________________________________________________________
2000 /////////////// Residuals
2001 Double_t Dx = fClus->GetTrackDx();
2002 Double_t Dz = fClus->GetTrackDz();
2003 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
2004 for(Int_t i = 0; i < 6; i++)
2006 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2015 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2017 Float_t Energy = fClus->E();
2018 Float_t EoverP = Energy/track->P();
2019 Float_t M02 = fClus->GetM02();
2020 Float_t M20 = fClus->GetM20();
2021 Float_t ncells = fClus->GetNCells();
2022 //----------------------------------------------------------------------------------------
2023 // EtaCut electrons histogram
2025 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2027 if(fUseShowerShapeCut){
2028 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
2029 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2030 fShowerShapeCut->Fill(M02,M20);
2035 if(!fUseShowerShapeCut){
2036 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2037 fShowerShapeCut->Fill(M02,M20);
2040 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
2042 //for shower shape cut studies - now with TPC PID Cut
2044 fShowerShapeM02_EoverP->Fill(M02,EoverP);
2045 fShowerShapeM20_EoverP->Fill(M20,EoverP);
2050 //----------------------------------------------------------------------------------------
2054 /////////////// for Eta Phi distribution
2055 fClus->GetPosition(pos3);
2056 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
2057 Double_t cphi = vpos.Phi();
2058 Double_t ceta = vpos.Eta();
2059 fEtaPhi[2]->Fill(cphi,ceta);
2063 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
2065 for(Int_t i = 0; i < 6; i++)
2067 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2070 fR_EoverP[i]->Fill(R, EoverP);
2071 fNcells[i]->Fill(ncells);
2072 fNcells_EoverP[i]->Fill(EoverP, ncells);
2073 fM02_EoverP[i]->Fill(M02,EoverP);
2074 fM20_EoverP[i]->Fill(M20,EoverP);
2075 fECluster_ptbins[i]->Fill(Energy);
2076 fEoverP_ptbins[i]->Fill(EoverP);
2078 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
2079 fNcells_electrons[i]->Fill(ncells);
2082 if(M02<0.5 && M20<0.3) {
2083 fEoverP_wSSCut[i]->Fill(EoverP);
2088 fNcells_pt->Fill(fPt, ncells);
2091 ////////////////////////////////////////////////////////////////////
2092 ///EMCal - Efficiency calculations
2094 /// changing start here
2095 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2097 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2098 Int_t pdg = fMCparticle->GetPdgCode();
2101 if(fMCparticle->IsPhysicalPrimary()){
2104 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2106 Bool_t MotherFound = FindMother(track->GetLabel());
2108 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2109 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2110 fPtMC_EMCal_All->Fill(fMCparticle->Pt());
2117 else if(fIsMC && track->GetLabel()>=0)//ESD
2120 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2123 fMCtrack = fMCstack->Particle(track->GetLabel());
2125 Int_t pdg = fMCtrack->GetPdgCode();
2126 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
2128 if(fMCtrack->GetFirstMother()>0){
2129 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2130 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2132 fPtMC_EMCal_All->Fill(fMCtrack->Pt());
2140 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
2143 fECluster[2]->Fill(Energy);
2144 //_______________________________________________________
2145 //Correlation Analysis
2148 fPtElec_Inc->Fill(fPt);
2149 //new function to fill non-HFE histos
2150 if(fFillBackground){
2151 Background(track, iTracks, Vtrack, kFALSE);
2154 double emctof2 = fClus->GetTOF();
2155 ftimingEle2->Fill(fPt,emctof2);
2157 if(fCorrelationFlag)
2159 ElectronHadronCorrelation(track, iTracks, Vtrack);
2162 //_______________________________________________________
2164 ////////////////////////////////////////////////////////////////////
2165 ///EMCal - efficiency calculations
2167 if(track->Charge()<0) fCharge_n->Fill(fPt);
2168 if(track->Charge()>0) fCharge_p->Fill(fPt);
2171 /// changing start here
2172 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2174 if(track->Charge()<0) fCharge_n->Fill(fPt);
2175 if(track->Charge()>0) fCharge_p->Fill(fPt);
2177 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2178 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2179 Int_t pdg = fMCparticle->GetPdgCode();
2181 double proX = fMCparticle->Xv();
2182 double proY = fMCparticle->Yv();
2183 double proR = sqrt(pow(proX,2)+pow(proY,2));
2186 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2188 if( TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0 ){
2189 Int_t mpdg = fMCparticleMother->GetPdgCode();
2190 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
2191 if(proR<7)fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
2194 if( TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCelectronAfterAll_Primary->Fill(fMCparticle->Pt());
2199 if(fMCparticle->IsPhysicalPrimary()){
2202 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2204 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCparticle->Pt()); //numerator for the total efficiency
2207 Bool_t MotherFound = FindMother(track->GetLabel());
2209 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2210 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2211 fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
2218 else if(fIsMC && track->GetLabel()>=0)//ESD
2220 if(track->Charge()<0) fCharge_n->Fill(fPt);
2221 if(track->Charge()>0) fCharge_p->Fill(fPt);
2223 fMCtrack = fMCstack->Particle(track->GetLabel());
2224 if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2225 TParticle *particle=fMCstack->Particle(track->GetLabel());
2227 Int_t pdg = fMCtrack->GetPdgCode();
2230 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2231 if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 ){
2232 Int_t mpdg = fMCtrackMother->GetPdgCode();
2233 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
2234 Double_t proR=particle->R();
2236 fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
2240 if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel())) fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
2243 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2245 Bool_t MotherFound = FindMother(track->GetLabel());
2249 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2250 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency
2257 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
2259 if(fMCtrack->GetFirstMother()>0){
2260 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2261 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2263 fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());
2269 ///////////////////////////////////////////////////////////////////
2277 //______________________________________________________________
2280 fVtxZ[2]->Fill(fZvtx);
2281 fNTracks[2]->Fill(fNOtrks);
2282 fNClusters[2]->Fill(ClsNo);
2284 //______________________________________________________________
2286 //_______________________________________________________
2287 //Correlation Analysis
2290 fPtElec_Inc->Fill(fPt);
2292 if(fCorrelationFlag)
2294 ElectronHadronCorrelation(track, iTracks, Vtrack);
2297 //_______________________________________________________
2299 ///________________________________________________________________________
2302 //__________________________________________________________________
2303 //Event Mixing Analysis
2305 if(fEventMixingFlag)
2307 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2309 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2311 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!
2316 //__________________________________________________________________
2318 delete fListOfmotherkink;
2319 PostData(1, fOutputList);
2322 //______________________________________________________________________
2323 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
2325 //Draw result to the screen
2326 //Called once at the end of the query
2328 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
2332 printf("ERROR: Output list not available\n");
2337 //______________________________________________________________________
2338 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
2340 //Check single track cuts for a given cut step
2341 //Note this function is called inside the UserExec function
2342 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
2343 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
2348 //______________________________________________________________________
2351 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
2353 ///_________________________________________________________________
2357 if(track->GetLabel() < 0)
2359 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2365 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2367 if(fMCparticle->GetMother()<0) return;
2369 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2370 if(fMCparticleMother->GetMother()>0)fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
2372 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2375 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2376 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2379 //October 08th weighted histos
2380 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221 ){
2382 Double_t mPt=fMCparticleMother->Pt();
2387 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
2389 if(mPt<=4.5) mweight=x*x*0.089-0.277*x+1.46;
2390 if(mPt>4.5) mweight=TMath::Erf((x-0.425)/13.05)*5.94;
2395 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2397 if(mPt<=4.5) mweight=x*x*0.071-0.295*x+1.36;
2398 if(mPt>4.5) mweight=TMath::Erf((x-0.341)/13.31)*4.32;
2402 //Histo pT mother versus pT electron
2403 fpT_m_electron->Fill(mPt, track->Pt());
2405 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./mweight);
2406 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./mweight);
2408 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
2410 Double_t gmPt=fMCparticleGMother->Pt();
2411 Double_t gmweight=1;
2415 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
2417 if(gmPt<=4.5) gmweight=x*x*0.089-0.277*x+1.46;
2418 if(gmPt>4.5) gmweight=TMath::Erf((x-0.425)/13.05)*5.94;
2423 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
2425 if(gmPt<=4.5) gmweight=x*x*0.071-0.295*x+1.36;
2426 if(gmPt>4.5) gmweight=TMath::Erf((x-0.341)/13.31)*4.32;
2429 //Histo pT gmother versus pT electron
2430 fpT_gm_electron->Fill(gmPt, track->Pt());
2432 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./gmweight);
2433 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./gmweight);
2436 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt());
2437 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt());
2444 fMCtrack = fMCstack->Particle(track->GetLabel());
2446 if(fMCtrack->GetFirstMother()<0) return;
2448 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2450 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2453 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2454 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2459 ///_________________________________________________________________
2461 //________________________________________________
2462 //Associated particle cut
2463 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2464 fPartnerCuts->SetRequireITSRefit(kTRUE);
2465 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2466 fPartnerCuts->SetEtaRange(-0.9,0.9);
2467 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2468 fPartnerCuts->SetMinNClustersTPC(80);
2469 fPartnerCuts->SetPtRange(0.3,1e10);
2470 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2471 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2472 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2473 //_________________________________________________
2475 ///#################################################################
2476 //Non-HFE reconstruction
2477 fNonHFE = new AliSelectNonHFE();
2478 fNonHFE->SetAODanalysis(fIsAOD);
2479 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2480 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2481 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2482 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2483 fNonHFE->SetAlgorithm("DCA"); //KF
2484 fNonHFE->SetPIDresponse(fPidResponse);
2485 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2486 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2489 fNonHFE->SetHistAngleBack(fOpAngleBack);
2490 fNonHFE->SetHistAngle(fOpAngle);
2491 fNonHFE->SetHistDCABack(fDCABack);
2492 fNonHFE->SetHistDCA(fDCA);
2493 fNonHFE->SetHistMassBack(fInvMassBack);
2494 fNonHFE->SetHistMass(fInvMass);
2497 fNonHFE->SetHistAngleBack(fOpAngleBack2);
2498 fNonHFE->SetHistAngle(fOpAngle2);
2499 fNonHFE->SetHistDCABack(fDCABack2);
2500 fNonHFE->SetHistDCA(fDCA2);
2501 fNonHFE->SetHistMassBack(fInvMassBack2);
2502 fNonHFE->SetHistMass(fInvMass2);
2505 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2509 //Electron Information
2510 Double_t fPhiE = -999;
2511 Double_t fEtaE = -999;
2512 Double_t fPtE = -999;
2513 fPhiE = track->Phi();
2514 fEtaE = track->Eta();
2517 ///_________________________________________________________________
2523 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2529 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2530 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2534 //new 26 September //weighted histograms
2535 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2536 Double_t mPt=fMCparticleMother->Pt();
2537 Double_t mweight1=1;
2538 Double_t mweight2=1;
2539 //Double_t weight=1;
2542 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
2544 if(mPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2545 if(mPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2548 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2550 if(mPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2551 if(mPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2557 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
2558 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
2561 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, mweight1);
2562 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, mweight2);
2564 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
2565 Double_t gmPt=fMCparticleGMother->Pt();
2566 Double_t gmweight1=1;
2567 Double_t gmweight2=1;
2568 //Double_t weight=1;
2572 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
2574 if(gmPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2575 if(gmPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2579 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
2581 if(gmPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2582 if(gmPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2588 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
2589 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
2592 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, gmweight1);
2593 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, gmweight2);
2596 if(fNonHFE->IsULS()) fPtElec_ULS_weight->Fill(fPtE,fNonHFE->GetNULS());
2597 if(fNonHFE->IsLS()) fPtElec_LS_weight->Fill(fPtE,fNonHFE->GetNLS());
2604 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2605 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2610 //new 08 October //weighted histograms
2611 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2612 Double_t mPt=fMCparticleMother->Pt();
2614 Double_t mweight1=1;
2615 Double_t mweight2=1;
2616 //Double_t weight=1;
2619 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
2621 if(mPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2622 if(mPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2626 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2628 if(mPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2629 if(mPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2636 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
2637 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
2640 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, mweight1);
2641 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, mweight2);
2643 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
2644 Double_t gmPt=fMCparticleGMother->Pt();
2645 Double_t gmweight1=1;
2646 Double_t gmweight2=1;
2647 //Double_t weight=1;
2651 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
2653 if(gmPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2654 if(gmPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2658 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
2660 if(gmPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2661 if(gmPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2666 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
2667 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
2670 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, gmweight1);
2671 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, gmweight2);
2674 if(fNonHFE->IsULS()) fPtElec_ULS2_weight->Fill(fPtE,fNonHFE->GetNULS());
2675 if(fNonHFE->IsLS()) fPtElec_LS2_weight->Fill(fPtE,fNonHFE->GetNLS());
2685 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2688 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2689 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2693 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2694 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2699 ///_________________________________________________________________
2704 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2705 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2709 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2710 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2719 //______________________________________________________________________
2720 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
2723 ///_________________________________________________________________
2727 if(track->GetLabel() < 0)
2729 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2735 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2737 if(fMCparticle->GetMother()<0) return;
2739 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2741 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2744 fPtBackgroundBeforeReco->Fill(track->Pt());
2749 fMCtrack = fMCstack->Particle(track->GetLabel());
2751 if(fMCtrack->GetFirstMother()<0) return;
2753 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2755 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2758 fPtBackgroundBeforeReco->Fill(track->Pt());
2762 ///_________________________________________________________________
2764 //________________________________________________
2765 //Associated particle cut
2766 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2767 fPartnerCuts->SetRequireITSRefit(kTRUE);
2768 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2769 fPartnerCuts->SetEtaRange(-0.9,0.9);
2770 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2771 fPartnerCuts->SetMinNClustersTPC(80);
2772 fPartnerCuts->SetPtRange(0.3,1e10);
2773 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2774 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2775 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2776 //_________________________________________________
2778 ///#################################################################
2779 //Non-HFE reconstruction
2780 fNonHFE = new AliSelectNonHFE();
2781 fNonHFE->SetAODanalysis(fIsAOD);
2782 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2783 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2784 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2785 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2786 fNonHFE->SetAlgorithm("DCA"); //KF
2787 fNonHFE->SetPIDresponse(fPidResponse);
2788 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2789 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2792 fNonHFE->SetHistAngleBack(fOpAngleBack);
2793 fNonHFE->SetHistAngle(fOpAngle);
2794 fNonHFE->SetHistDCABack(fDCABack);
2795 fNonHFE->SetHistDCA(fDCA);
2796 fNonHFE->SetHistMassBack(fInvMassBack);
2797 fNonHFE->SetHistMass(fInvMass);
2799 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2801 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
2802 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
2803 Bool_t fUlsIsPartner = kFALSE;
2804 Bool_t fLsIsPartner = kFALSE;
2805 ///#################################################################
2808 //Electron Information
2809 Double_t fPhiE = -999;
2810 Double_t fEtaE = -999;
2811 Double_t fPhiH = -999;
2812 Double_t fEtaH = -999;
2813 Double_t fDphi = -999;
2814 Double_t fDeta = -999;
2815 Double_t fPtE = -999;
2816 Double_t fPtH = -999;
2818 Double_t pi = TMath::Pi();
2820 fPhiE = track->Phi();
2821 fEtaE = track->Eta();
2825 ///_________________________________________________________________
2831 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2833 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2834 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2839 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2841 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2842 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2846 ///_________________________________________________________________
2849 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2850 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2856 //__________________________________________________________________
2857 //Event Mixing Analysis - Hadron Loop
2859 if(fEventMixingFlag)
2861 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2863 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2865 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
2867 fPoolNevents->Fill(fPool->GetCurrentNEvents());
2869 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
2871 TObjArray* bgTracks = fPool->GetEvent(jMix);
2873 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
2875 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
2876 if (NULL == MixedTrack) continue;
2878 fPhiH = MixedTrack->Phi();
2879 fEtaH = MixedTrack->Eta();
2880 fPtH = MixedTrack->Pt();
2882 if(fPtH<0.5 || fPtH>2.0) continue;
2884 fDphi = fPhiE - fPhiH;
2886 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2887 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2889 fDeta = fEtaE - fEtaH;
2891 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
2893 for(Int_t i = 0; i < 6; i++)
2895 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2897 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
2899 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
2900 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
2902 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2903 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2907 // TODO your code: do event mixing with current event and bgTracks
2908 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
2913 //__________________________________________________________________
2915 //__________________________________________________________________
2916 //Same Event Analysis - Hadron Loop
2917 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2919 if(trackIndex==iTracks) continue;
2921 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2924 printf("ERROR: Could not receive track %d\n", iTracks);
2928 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2932 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2933 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2934 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2935 if(atrack2->GetTPCNcls() < 80) continue;
2936 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
2940 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2941 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2944 fPhiH = track2->Phi();
2945 fEtaH = track2->Eta();
2946 fPtH = track2->Pt();
2948 if(fPtH<0.5 || fPtH>2.0) continue;
2950 fDphi = fPhiE - fPhiH;
2952 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2953 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2955 fDeta = fEtaE - fEtaH;
2957 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
2959 //______________________________________________________________
2960 //Check if this track is a Non-HFE partner
2961 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
2963 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
2965 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
2967 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
2969 //______________________________________________________________
2971 for(Int_t i = 0; i < 6; i++)
2973 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2975 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
2977 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
2978 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
2979 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
2980 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
2982 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2983 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2984 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2985 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2991 //____________________________________________________________________________________________________________
2992 //Create a TObjArray with selected hadrons, for the mixed event analysis
2993 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
2995 fTracksClone = new TObjArray;
2996 fTracksClone->SetOwner(kTRUE);
2998 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3000 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3003 printf("ERROR: Could not receive track %d\n", iTracks);
3007 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3011 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
3012 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
3013 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
3014 if(atrack2->GetTPCNcls() < 80) continue;
3015 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
3019 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
3020 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
3023 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
3025 return fTracksClone;
3027 //____________________________________________________________________________________________________________
3029 //______________________________________________________________________
3030 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
3032 //________________________________________________
3033 //Associated particle cut
3034 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
3035 fPartnerCuts->SetRequireITSRefit(kTRUE);
3036 fPartnerCuts->SetRequireTPCRefit(kTRUE);
3037 fPartnerCuts->SetEtaRange(-0.9,0.9);
3038 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
3039 fPartnerCuts->SetMinNClustersTPC(80);
3040 fPartnerCuts->SetPtRange(0.3,1e10);
3041 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
3042 //fPartnerCuts->SetMaxDCAToVertexXY(1);
3043 //fPartnerCuts->SetMaxDCAToVertexZ(3);
3044 //_________________________________________________
3046 //Electron Information
3047 Double_t fPhiE = -999;
3048 Double_t fEtaE = -999;
3049 Double_t fPhiH = -999;
3050 Double_t fEtaH = -999;
3051 Double_t fDphi = -999;
3052 Double_t fDeta = -999;
3053 Double_t fPtE = -999;
3054 Double_t fPtH = -999;
3056 Double_t pi = TMath::Pi();
3058 fPhiE = track->Phi();
3059 fEtaE = track->Eta();
3062 //__________________________________________________________________
3063 //Same Event Analysis - Hadron Loop
3064 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3066 if(trackIndex==iTracks) continue;
3068 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3071 printf("ERROR: Could not receive track %d\n", iTracks);
3075 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3079 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
3080 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
3081 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
3082 if(atrack2->GetTPCNcls() < 80) continue;
3083 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
3087 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
3088 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
3091 fPhiH = track2->Phi();
3092 fEtaH = track2->Eta();
3093 fPtH = track2->Pt();
3095 if(fPtH<0.5 || fPtH>2.0) continue;
3097 fDphi = fPhiE - fPhiH;
3099 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
3100 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
3102 fDeta = fEtaE - fEtaH;
3104 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
3106 for(Int_t i = 0; i < 6; i++)
3108 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
3110 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
3115 //____________________________________________________________________________________________________________
3117 //______________________________________________________________________
3118 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
3125 fIsFromPi0 = kFALSE;
3126 fIsFromEta = kFALSE;
3127 fIsFromGamma = kFALSE;
3129 if(mcIndex < 0 || !fIsMC)
3135 Int_t mpdg = -99999;
3136 Int_t gmpdg = -99999;
3137 Int_t ggmpdg = -99999;
3138 Int_t gggmpdg = -99999;
3142 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
3144 pdg = TMath::Abs(fMCparticle->GetPdgCode());
3154 fIsFromPi0 = kFALSE;
3155 fIsFromEta = kFALSE;
3156 fIsFromGamma = kFALSE;
3160 if(fMCparticle->GetMother()<0)
3167 fIsFromPi0 = kFALSE;
3168 fIsFromEta = kFALSE;
3169 fIsFromGamma = kFALSE;
3173 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3174 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
3176 if(fMCparticleMother->GetMother()<0)
3184 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
3185 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
3186 if(fMCparticleGMother->GetMother()<0)
3193 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
3194 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
3195 if(fMCparticleGGMother->GetMother()<0)
3201 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
3202 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
3209 fMCtrack = fMCstack->Particle(mcIndex);
3211 pdg = TMath::Abs(fMCtrack->GetPdgCode());
3220 fIsFromPi0 = kFALSE;
3221 fIsFromEta = kFALSE;
3222 fIsFromGamma = kFALSE;
3226 if(fMCtrack->GetFirstMother()<0)
3233 fIsFromPi0 = kFALSE;
3234 fIsFromEta = kFALSE;
3235 fIsFromGamma = kFALSE;
3239 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3240 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
3242 if(fMCtrackMother->GetFirstMother()<0)
3250 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
3251 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
3253 if(fMCtrackGMother->GetFirstMother()<0)
3260 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
3261 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
3263 if(fMCtrackGGMother->GetFirstMother()<0)
3269 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
3270 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
3276 //Tag Electron Source
3277 if(mpdg==111 || mpdg==221 || mpdg==22)
3285 fIsFromPi0 = kFALSE;
3286 fIsFromEta = kFALSE;
3287 fIsFromGamma = kFALSE;
3289 if(mpdg==111) fIsFromPi0 = kFALSE;
3290 if(mpdg==221)fIsFromEta = kFALSE;
3291 if(mpdg==22) fIsFromGamma = kFALSE;
3300 fIsFromPi0 = kFALSE;
3301 fIsFromEta = kFALSE;
3302 fIsFromGamma = kFALSE;
3309 if(mpdg>400 && mpdg<500)
3311 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
3326 else if(mpdg>500 && mpdg<600)