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: September 12th, 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)
115 ,fIsFromGamma(kFALSE)
119 ,fPartnerCuts(new AliESDtrackCuts())
122 ,fNonHFE(new AliSelectNonHFE())
127 ,fHasCentralitySelection(kFALSE)
129 ,fCentralityHistPass(0)
160 ,fShowerShapeM02_EoverP(0)
161 ,fShowerShapeM20_EoverP(0)
180 ,fNcells_electrons(0)
187 ,fTPCnsigma_eta_electrons(0)
188 ,fTPCnsigma_eta_hadrons(0)
191 ,fnsigma_p_EoverPcut(0)
192 ,fEoverP_pt_pions2(0)
194 ,fEoverP_pt_hadrons(0)
200 ,fCEtaPhi_ULS_Weight(0)
201 ,fCEtaPhi_LS_Weight(0)
202 ,fCEtaPhi_ULS_NoP_Weight(0)
203 ,fCEtaPhi_LS_NoP_Weight(0)
239 ,fAngleCutFlag(kFALSE)
240 ,fChi2CutFlag(kFALSE)
242 ,fPtBackgroundBeforeReco(0)
243 ,fPtBackgroundBeforeReco2(0)
244 ,fPtBackgroundAfterReco(0)
250 ,fPtMCparticleAll_nonPrimary(0)
251 ,fPtMCparticleAlle_nonPrimary(0)
252 ,fPtMCparticleReco(0)
253 ,fPtMCparticleReco_nonPrimary(0)
254 ,fPtMCparticleAllHfe1(0)
255 ,fPtMCparticleRecoHfe1(0)
256 ,fPtMCparticleAllHfe2(0)
257 ,fPtMCparticleRecoHfe2(0)
258 ,fPtMCelectronAfterAll(0)
259 ,fPtMCelectronAfterAll_nonPrimary(0)
263 ,fPtMC_EMCal_Selected(0)
265 ,fPtMC_TPC_Selected(0)
267 ,fPtMCWithoutLabel(0)
268 ,fPtIsPhysicaPrimary(0)
271 ,fPID(new AliHFEpid("hfePid"))
274 ,fRejectKinkMother(kFALSE)
279 ,fMCtrackGGGMother(0)
283 ,fMCparticleMother(0)
284 ,fMCparticleGMother(0)
285 ,fMCparticleGGMother(0)
286 ,fMCparticleGGGMother(0)
296 ,fCEtaPhi_ULS_Weight_EM(0)
297 ,fCEtaPhi_LS_Weight_EM(0)
300 ,fCEtaPhi_Inc_DiHadron(0)
304 // Define input and output slots here
305 // Input slot #0 works with a TChain
306 DefineInput(0, TChain::Class());
307 // Output slot #0 id reserved by the base class for AOD
308 // Output slot #1 writes into a TH1 container
309 // DefineOutput(1, TH1I::Class());
310 DefineOutput(1, TList::Class());
311 // DefineOutput(3, TTree::Class());
314 //________________________________________________________________________
315 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
316 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
320 ,fUseShowerShapeCut(kFALSE)
321 ,fFillBackground(kFALSE)
332 ,fIsFromGamma(kFALSE)
336 ,fPartnerCuts(new AliESDtrackCuts())
339 ,fNonHFE(new AliSelectNonHFE())
344 ,fHasCentralitySelection(kFALSE)
346 ,fCentralityHistPass(0)
377 ,fShowerShapeM02_EoverP(0)
378 ,fShowerShapeM20_EoverP(0)
397 ,fNcells_electrons(0)
404 ,fTPCnsigma_eta_electrons(0)
405 ,fTPCnsigma_eta_hadrons(0)
408 ,fnsigma_p_EoverPcut(0)
409 ,fEoverP_pt_pions2(0)
411 ,fEoverP_pt_hadrons(0)
417 ,fCEtaPhi_ULS_Weight(0)
418 ,fCEtaPhi_LS_Weight(0)
419 ,fCEtaPhi_ULS_NoP_Weight(0)
420 ,fCEtaPhi_LS_NoP_Weight(0)
455 ,fAngleCutFlag(kFALSE)
456 ,fChi2CutFlag(kFALSE)
458 ,fPtBackgroundBeforeReco(0)
459 ,fPtBackgroundBeforeReco2(0)
460 ,fPtBackgroundAfterReco(0)
467 ,fPtMCparticleAll_nonPrimary(0)
468 ,fPtMCparticleAlle_nonPrimary(0)
469 ,fPtMCparticleReco(0)
470 ,fPtMCparticleReco_nonPrimary(0)
472 ,fPtMCparticleAllHfe1(0)
473 ,fPtMCparticleRecoHfe1(0)
474 ,fPtMCparticleAllHfe2(0)
475 ,fPtMCparticleRecoHfe2(0)
476 ,fPtMCelectronAfterAll(0)
477 ,fPtMCelectronAfterAll_nonPrimary(0)
482 ,fPtMC_EMCal_Selected(0)
484 ,fPtMC_TPC_Selected(0)
486 ,fPtMCWithoutLabel(0)
487 ,fPtIsPhysicaPrimary(0)
490 ,fPID(new AliHFEpid("hfePid"))
493 ,fRejectKinkMother(kFALSE)
498 ,fMCtrackGGGMother(0)
502 ,fMCparticleMother(0)
503 ,fMCparticleGMother(0)
504 ,fMCparticleGGMother(0)
505 ,fMCparticleGGGMother(0)
515 ,fCEtaPhi_ULS_Weight_EM(0)
516 ,fCEtaPhi_LS_Weight_EM(0)
519 ,fCEtaPhi_Inc_DiHadron(0)
523 // Define input and output slots here
524 // Input slot #0 works with a TChain
525 DefineInput(0, TChain::Class());
526 // Output slot #0 id reserved by the base class for AOD
527 // Output slot #1 writes into a TH1 container
528 // DefineOutput(1, TH1I::Class());
529 DefineOutput(1, TList::Class());
530 //DefineOutput(3, TTree::Class());
533 //______________________________________________________________________
534 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
543 //______________________________________________________________________
544 //Create Output Objects
545 //Here we can define the histograms and others output files
547 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
549 //______________________________________________________________________
551 if(!fPID->GetNumberOfPIDdetectors())
553 fPID->AddDetector("TPC", 0);
556 fPID->SortDetectors();
558 fPIDqa = new AliHFEpidQAmanager();
559 fPIDqa->Initialize(fPID);
560 //______________________________________________________________________
562 //______________________________________________________________________
563 //Initialize correction Framework and Cuts
564 fCFM = new AliCFManager;
565 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
566 fCFM->SetNStepParticle(kNcutSteps);
567 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
571 AliWarning("Cuts not available. Default cuts will be used");
572 fCuts = new AliHFEcuts;
573 fCuts->CreateStandardCuts();
576 fCuts->Initialize(fCFM);
577 //______________________________________________________________________
579 ///______________________________________________________________________
582 fOutputList = new TList();
583 fOutputList->SetOwner();
586 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
588 //Store the number of events
590 fNevent = new TH1F("fNevent","Number of Events",5,-0.5,4.5);
591 //And then, add to the output list
592 fOutputList->Add(fNevent);
594 fpid = new TH1F("fpid","PID flag",5,0,5);
595 fOutputList->Add(fpid);
598 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
600 fPtElec_ULS = new TH1F("fPtElec_ULS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
601 fPtElec_LS = new TH1F("fPtElec_LS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
604 fPtElec_ULS2 = new TH1F("fPtElec_ULS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
605 fPtElec_LS2 = new TH1F("fPtElec_LS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
608 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",300,0,30);
609 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
610 fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
614 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
615 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
620 fTime = new TH2D("fTime","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
621 fTime2 = new TH2D("fTime2","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
624 ftimingEle = new TH2D("ftimingEle","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
625 ftimingEle2 = new TH2D("ftimingEle2","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
627 fShowerShape_ha = new TH2F("fShowerShape_ha","Shower Shape hadrons;M02;M20",500,0,1.8,500,0,1.8);
628 fShowerShape_ele = new TH2F("fShowerShape_ele","Shower Shape electrons;M02;M20",500,0,1.8,500,0,1.8);
630 fShowerShapeM02_EoverP = new TH2F("fShowerShapeM02_EoverP","Shower Shape;M02;E/p",500,0,1.8,500,0,1.8);
631 fShowerShapeM20_EoverP = new TH2F("fShowerShapeM20_EoverP","Shower Shape;M20;E/p",500,0,1.8,500,0,1.8);
635 fOutputList->Add(fPtElec_Inc);
636 fOutputList->Add(fPtElec_ULS);
637 fOutputList->Add(fPtElec_LS);
640 fOutputList->Add(fPtElec_ULS2);
641 fOutputList->Add(fPtElec_LS2);
645 fOutputList->Add(fPtTrigger_Inc);
646 fOutputList->Add(fTPCnsigma_pt_2D);
647 fOutputList->Add(fShowerShapeCut);
649 fOutputList->Add(fCharge_n);
650 fOutputList->Add(fCharge_p);
655 fOutputList->Add(fTime);
656 fOutputList->Add(fTime2);
660 fOutputList->Add(ftimingEle);
661 fOutputList->Add(ftimingEle2);
663 fOutputList->Add(fShowerShape_ha);
664 fOutputList->Add(fShowerShape_ele);
666 fOutputList->Add(fShowerShapeM02_EoverP);
667 fOutputList->Add(fShowerShapeM20_EoverP);
676 //Step 1: Before Track cuts
680 fEoverP_pt = new TH2F *[3];
681 fTPC_p = new TH2F *[3];
682 fTPCnsigma_p = new TH2F *[3];
684 fECluster= new TH1F *[3];
685 fEtaPhi= new TH2F *[3];
686 fVtxZ= new TH1F *[3];
687 fNTracks= new TH1F *[3];
688 fNClusters= new TH1F *[3];
689 fTPCNcls_EoverP= new TH2F *[3];
691 for(Int_t i = 0; i < 3; i++)
693 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
694 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);
695 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
698 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
699 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
700 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
701 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,1000);
702 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
703 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
706 fOutputList->Add(fEoverP_pt[i]);
707 fOutputList->Add(fTPC_p[i]);
708 fOutputList->Add(fTPCnsigma_p[i]);
711 fOutputList->Add(fECluster[i]);
712 fOutputList->Add(fEtaPhi[i]);
713 fOutputList->Add(fVtxZ[i]);
714 fOutputList->Add(fNTracks[i]);
715 fOutputList->Add(fNClusters[i]);
716 fOutputList->Add(fTPCNcls_EoverP[i]);
720 Int_t fPtBin[6] = {2,4,6,8,10,15};
722 fEoverP_tpc = new TH2F *[5];
723 fTPC_pt = new TH1F *[5];
724 fTPCnsigma_pt = new TH1F *[5];
729 fR_EoverP=new TH2F *[5];
730 fNcells=new TH1F *[5];
731 fNcells_EoverP=new TH2F *[5];
732 fM02_EoverP= new TH2F *[5];
733 fM20_EoverP= new TH2F *[5];
734 fEoverP_ptbins=new TH1F *[5];
735 fECluster_ptbins=new TH1F *[5];
736 fEoverP_wSSCut=new TH1F *[5];
737 fNcells_electrons=new TH1F *[5];
738 fNcells_hadrons=new TH1F *[5];
739 fTPCnsigma_eta_electrons=new TH2F *[5];
740 fTPCnsigma_eta_hadrons=new TH2F *[5];
744 fCEtaPhi_Inc = new TH2F *[5];
745 fCEtaPhi_Inc_DiHadron = new TH2F *[5];
747 fCEtaPhi_ULS = new TH2F *[5];
748 fCEtaPhi_LS = new TH2F *[5];
749 fCEtaPhi_ULS_NoP = new TH2F *[5];
750 fCEtaPhi_LS_NoP = new TH2F *[5];
752 fCEtaPhi_ULS_Weight = new TH2F *[5];
753 fCEtaPhi_LS_Weight = new TH2F *[5];
754 fCEtaPhi_ULS_NoP_Weight = new TH2F *[5];
755 fCEtaPhi_LS_NoP_Weight = new TH2F *[5];
757 fCEtaPhi_Inc_EM = new TH2F *[5];
759 fCEtaPhi_ULS_EM = new TH2F *[5];
760 fCEtaPhi_LS_EM = new TH2F *[5];
762 fCEtaPhi_ULS_Weight_EM = new TH2F *[5];
763 fCEtaPhi_LS_Weight_EM = new TH2F *[5];
765 fInvMass = new TH1F("fInvMass","",200,0,0.3);
766 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
767 fDCA = new TH1F("fDCA","",200,0,1);
768 fDCABack = new TH1F("fDCABack","",200,0,1);
769 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
770 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
772 fOutputList->Add(fInvMass);
773 fOutputList->Add(fInvMassBack);
774 fOutputList->Add(fDCA);
775 fOutputList->Add(fDCABack);
776 fOutputList->Add(fOpAngle);
777 fOutputList->Add(fOpAngleBack);
782 fInvMass = new TH1F("fInvMass","",200,0,0.3);
783 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
784 fDCA = new TH1F("fDCA","",200,0,1);
785 fDCABack = new TH1F("fDCABack","",200,0,1);
786 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
787 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
789 fOutputList->Add(fInvMass);
790 fOutputList->Add(fInvMassBack);
791 fOutputList->Add(fDCA);
792 fOutputList->Add(fDCABack);
793 fOutputList->Add(fOpAngle);
794 fOutputList->Add(fOpAngleBack);
796 //histos for TPC-only
797 fInvMass2 = new TH1F("fInvMass2","",200,0,0.3);
798 fInvMassBack2 = new TH1F("fInvMassBack2","",200,0,0.3);
799 fDCA2 = new TH1F("fDCA2","",200,0,1);
800 fDCABack2 = new TH1F("fDCABack2","",200,0,1);
801 fOpAngle2 = new TH1F("fOpAngle2","",200,0,0.5);
802 fOpAngleBack2 = new TH1F("fOpAngleBack2","",200,0,0.5);
804 fOutputList->Add(fInvMass2);
805 fOutputList->Add(fInvMassBack2);
806 fOutputList->Add(fDCA2);
807 fOutputList->Add(fDCABack2);
808 fOutputList->Add(fOpAngle2);
809 fOutputList->Add(fOpAngleBack2);
813 for(Int_t i = 0; i < 5; i++)
815 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);
816 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);
817 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);
819 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);
820 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);
821 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);
822 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);
823 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);
824 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);
825 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);
826 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);
827 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);
828 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);
829 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);
830 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);
831 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);
832 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);
833 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);
835 fOutputList->Add(fEoverP_tpc[i]);
836 fOutputList->Add(fTPC_pt[i]);
837 fOutputList->Add(fTPCnsigma_pt[i]);
839 fOutputList->Add(fEta[i]);
840 fOutputList->Add(fPhi[i]);
841 fOutputList->Add(fR[i]);
842 fOutputList->Add(fR_EoverP[i]);
843 fOutputList->Add(fNcells[i]);
844 fOutputList->Add(fNcells_electrons[i]);
845 fOutputList->Add(fNcells_hadrons[i]);
846 fOutputList->Add(fNcells_EoverP[i]);
847 fOutputList->Add(fECluster_ptbins[i]);
848 fOutputList->Add(fEoverP_ptbins[i]);
849 fOutputList->Add(fEoverP_wSSCut[i]);
850 fOutputList->Add(fM02_EoverP[i]);
851 fOutputList->Add(fM20_EoverP[i]);
852 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
853 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
858 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);
859 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);
861 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);
862 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);
863 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);
864 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);
866 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);
867 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);
868 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);
869 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);
871 fOutputList->Add(fCEtaPhi_Inc[i]);
872 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
874 fOutputList->Add(fCEtaPhi_ULS[i]);
875 fOutputList->Add(fCEtaPhi_LS[i]);
876 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
877 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
879 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
880 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
881 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
882 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
886 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);
888 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);
889 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);
891 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);
892 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);
894 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
896 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
897 fOutputList->Add(fCEtaPhi_LS_EM[i]);
899 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
900 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
906 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
907 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
910 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
911 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
913 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
914 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
916 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
917 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
920 fOutputList->Add(fTPCnsigma_eta);
921 fOutputList->Add(fTPCnsigma_phi);
923 fOutputList->Add(fNcells_pt);
924 fOutputList->Add(fEoverP_pt_pions);
926 fOutputList->Add(ftpc_p_EoverPcut);
927 fOutputList->Add(fnsigma_p_EoverPcut);
929 fOutputList->Add(fEoverP_pt_pions2);
930 fOutputList->Add(fEoverP_pt_hadrons);
932 //__________________________________________________________________
936 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{T} (GeV/c);Count",300,0,30);
937 if(fFillBackground)fPtBackgroundBeforeReco2 = new TH1F("fPtBackgroundBeforeReco2",";p_{T} (GeV/c);Count",300,0,30);
938 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{T} (GeV/c);Count",300,0,30);
939 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{T} (GeV/c);Count",200,0,40);
940 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{T} (GeV/c);Count",200,0,40);
942 fPtMCparticleAll_nonPrimary = new TH1F("fPtMCparticleAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
943 fPtMCparticleAlle_nonPrimary = new TH1F("fPtMCparticleAlle_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
944 fPtMCparticleReco_nonPrimary = new TH1F("fPtMCparticleReco_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
946 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
947 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
948 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
949 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
951 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{T} (GeV/c);Count",200,0,40);
952 fPtMCelectronAfterAll_nonPrimary = new TH1F("fPtMCelectronAfterAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
956 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,30);
957 fPtMCeta = new TH1F("fPtMCeta",";p_{T} (GeV/c);Count",200,0,30);
958 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
959 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
960 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{t} (GeV/c);Count",200,0,40);
961 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{t} (GeV/c);Count",200,0,40);
962 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
963 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
964 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
966 fOutputList->Add(fPtBackgroundBeforeReco);
967 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2);
968 fOutputList->Add(fPtBackgroundAfterReco);
969 fOutputList->Add(fPtMCparticleAll);
970 fOutputList->Add(fPtMCparticleReco);
972 fOutputList->Add(fPtMCparticleAll_nonPrimary);
973 fOutputList->Add(fPtMCparticleAlle_nonPrimary);
974 fOutputList->Add(fPtMCparticleReco_nonPrimary);
976 fOutputList->Add(fPtMCparticleAllHfe1);
977 fOutputList->Add(fPtMCparticleRecoHfe1);
978 fOutputList->Add(fPtMCparticleAllHfe2);
979 fOutputList->Add(fPtMCparticleRecoHfe2);
980 fOutputList->Add(fPtMCelectronAfterAll);
982 fOutputList->Add(fPtMCelectronAfterAll_nonPrimary);
985 fOutputList->Add(fPtMCpi0);
986 fOutputList->Add(fPtMCeta);
987 fOutputList->Add(fPtMC_EMCal_All);
988 fOutputList->Add(fPtMC_EMCal_Selected);
989 fOutputList->Add(fPtMC_TPC_All);
990 fOutputList->Add(fPtMC_TPC_Selected);
991 fOutputList->Add(fPtMCWithLabel);
992 fOutputList->Add(fPtMCWithoutLabel);
993 fOutputList->Add(fPtIsPhysicaPrimary);
996 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
997 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
998 fOutputList->Add(fCentralityHist);
999 fOutputList->Add(fCentralityHistPass);
1001 //______________________________________________________________________
1002 //Mixed event analysis
1003 if(fEventMixingFlag)
1005 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
1006 fOutputList->Add(fPoolNevents);
1008 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.
1009 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
1011 Int_t nCentralityBins = 15;
1012 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
1014 Int_t nZvtxBins = 9;
1015 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
1017 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
1019 //______________________________________________________________________
1021 PostData(1, fOutputList);
1023 ///______________________________________________________________________
1026 //______________________________________________________________________
1028 //Called for each event
1029 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
1032 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1033 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
1037 printf("ERROR: fESD & fAOD not available\n");
1041 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
1045 printf("ERROR: fVEvent not available\n");
1052 AliError("HFE cuts not available");
1056 if(!fPID->IsInitialized())
1058 // Initialize PID with the given run number
1059 AliWarning("PID not initialised, get from Run no");
1063 fPID->InitializePID(fAOD->GetRunNumber());
1067 fPID->InitializePID(fESD->GetRunNumber());
1072 fPidResponse = fInputHandler->GetPIDResponse();
1075 //Check PID response
1078 AliDebug(1, "Using default PID Response");
1079 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
1082 fPID->SetPIDResponse(fPidResponse);
1084 fCFM->SetRecEventInfo(fVevent);
1086 Double_t *fListOfmotherkink = 0;
1087 Int_t fNumberOfVertices = 0;
1088 Int_t fNumberOfMotherkink = 0;
1090 //______________________________________________________________________
1094 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
1095 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1096 TString vtxTtl = trkVtx->GetTitle();
1097 if(!vtxTtl.Contains("VertexerTracks")) return;
1098 Float_t zvtx = trkVtx->GetZ();
1100 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
1101 if(spdVtx->GetNContributors()<=0) return;
1102 TString vtxTyp = spdVtx->GetTitle();
1103 Double_t cov[6]={0};
1104 spdVtx->GetCovarianceMatrix(cov);
1105 Double_t zRes = TMath::Sqrt(cov[5]);
1106 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1107 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1108 if(TMath::Abs(zvtx) > 10) return;
1110 //Look for kink mother for AOD
1112 fNumberOfVertices = 0;
1113 fNumberOfMotherkink = 0;
1117 fNumberOfVertices = fAOD->GetNumberOfVertices();
1119 fListOfmotherkink = new Double_t[fNumberOfVertices];
1121 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
1123 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
1124 if(!aodvertex) continue;
1125 if(aodvertex->GetType()==AliAODVertex::kKink)
1127 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
1128 if(!mother1) continue;
1129 Int_t idmother = mother1->GetID();
1130 fListOfmotherkink[fNumberOfMotherkink] = idmother;
1131 fNumberOfMotherkink++;
1142 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
1143 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1144 TString vtxTtl = trkVtx->GetTitle();
1145 if(!vtxTtl.Contains("VertexerTracks")) return;
1146 Float_t zvtx = trkVtx->GetZ();
1148 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
1149 if(spdVtx->GetNContributors()<=0) return;
1150 TString vtxTyp = spdVtx->GetTitle();
1151 Double_t cov[6]={0};
1152 spdVtx->GetCovarianceMatrix(cov);
1153 Double_t zRes = TMath::Sqrt(cov[5]);
1154 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1155 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1156 if(TMath::Abs(zvtx) > 10) return;
1159 //______________________________________________________________________
1161 //Only events with at least 2 tracks are accepted
1162 Int_t fNOtrks = fVevent->GetNumberOfTracks();
1163 if(fNOtrks<2) return;
1165 //______________________________________________________________________
1166 //Centrality Selection
1167 if(fHasCentralitySelection)
1169 Float_t centrality = -1;
1173 fCentrality = fAOD->GetHeader()->GetCentralityP();
1177 fCentrality = fESD->GetCentrality();
1180 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
1181 else centrality = fCentrality->GetCentralityPercentile("V0A");
1183 //cout << "Centrality = " << centrality << " %" << endl;
1185 fCentralityHist->Fill(centrality);
1187 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
1189 fCentralityHistPass->Fill(centrality);
1191 //______________________________________________________________________
1193 //______________________________________________________________________
1199 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1203 AliError("Array of MC particles not found");
1207 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1211 AliError("Could not find MC Header in AOD");
1215 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1217 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1219 Int_t pdg = fMCparticle->GetPdgCode();
1220 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1222 if (TMath::Abs(pdg) == 11) fPtMCparticleAlle_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons, and not primary
1224 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1227 fPtMCparticleAll_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all particles, and not primary
1228 if(fMCparticle->IsPhysicalPrimary())
1230 fPtMCparticleAll->Fill(fMCparticle->Pt());
1232 Bool_t MotherFound = FindMother(iMC);
1235 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCparticle->Pt()); //denominator for total efficiency
1236 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1241 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1242 if(TMath::Abs(pdg)==211) fPtMCeta->Fill(fMCparticle->Pt());
1247 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1248 if (!fEventHandler) {
1249 Printf("ERROR: Could not retrieve MC event handler");
1253 fMCevent = fEventHandler->MCEvent();
1255 Printf("ERROR: Could not retrieve MC event");
1259 fMCstack = fMCevent->Stack();
1261 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1264 fMCtrack = fMCstack->Particle(iMC);
1265 Int_t pdg = fMCtrack->GetPdgCode();
1267 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
1268 if(TMath::Abs(pdg)==211) fPtMCeta->Fill(fMCtrack->Pt());
1273 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1276 if (TMath::Abs(pdg) == 11) fPtMCparticleAlle_nonPrimary->Fill(fMCtrack->Pt());//denominator for total efficiency for all electrons, and not primary
1279 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1281 fPtMCparticleAll_nonPrimary->Fill(fMCtrack->Pt());//denominator for total efficiency for all particle, non Primary track
1283 if(!fMCstack->IsPhysicalPrimary(iMC)) continue;
1284 fPtMCparticleAll->Fill(fMCtrack->Pt());
1286 Bool_t MotherFound = FindMother(iMC);
1289 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency
1290 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
1298 //______________________________________________________________________
1299 //EMCal Trigger Selection (Threshould selection)
1300 TString firedTrigger;
1301 TString TriggerEG1("EG1");
1302 TString TriggerEG2("EG2");
1304 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1305 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1308 if(firedTrigger.Contains(TriggerEG1)) fNevent->Fill(1);
1309 if(firedTrigger.Contains(TriggerEG2)) fNevent->Fill(2);
1312 if(firedTrigger.Contains(TriggerEG1))
1322 if(firedTrigger.Contains(TriggerEG2))
1331 //______________________________________________________________________
1334 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
1335 else ClsNo = fAOD->GetNumberOfCaloClusters();
1337 //______________________________________________________________________
1339 ///______________________________________________________________________
1341 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1343 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1346 printf("ERROR: Could not receive track %d\n", iTracks);
1350 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1351 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
1352 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1354 Double_t fTPCnSigma = -999;
1355 Double_t fTPCnSigma_pion = -999;
1356 Double_t fTPCnSigma_proton = -999;
1357 Double_t fTPCnSigma_kaon = -999;
1358 Double_t fTPCsignal = -999;
1359 Double_t fPt = -999;
1362 ///_____________________________________________________________________________
1363 ///Fill QA plots without track selection
1365 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
1367 fTPCsignal = track->GetTPCsignal();
1368 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
1369 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
1370 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
1371 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
1373 fTPC_p[0]->Fill(fPt,fTPCsignal);
1374 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
1377 Float_t TPCNcls = track->GetTPCNcls();
1378 Float_t pos[3]={0,0,0};
1380 Double_t fEMCflag = kFALSE;
1381 if(track->GetEMCALcluster()>0)
1383 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1384 if(fClus->IsEMCAL())
1386 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1389 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
1392 Float_t Energy = fClus->E();
1393 Float_t EoverP = Energy/track->P();
1394 //Float_t M02 = fClus->GetM02();
1395 //Float_t M20 = fClus->GetM20();
1397 /////////////// for Eta Phi distribution
1398 fClus->GetPosition(pos);
1399 TVector3 vpos(pos[0],pos[1],pos[2]);
1400 Double_t cphi = vpos.Phi();
1401 Double_t ceta = vpos.Eta();
1402 fEtaPhi[0]->Fill(cphi,ceta);
1404 fECluster[0]->Fill(Energy);
1405 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
1410 //______________________________________________________________
1413 fVtxZ[0]->Fill(fZvtx);
1414 fNTracks[0]->Fill(fNOtrks);
1415 fNClusters[0]->Fill(ClsNo);
1417 //______________________________________________________________
1419 ///Fill QA plots without track selection
1420 ///_____________________________________________________________________________
1421 //______________________________________________________________________________________
1422 //Track Selection Cuts
1424 //AOD (Test Filter Bit)
1427 // standard cuts with very loose DCA - BIT(4)
1430 GetStandardITSTPCTrackCuts2011(kFALSE)
1431 SetMaxChi2PerClusterTPC(4);
1432 SetAcceptKinkDaughters(kFALSE);
1433 SetRequireTPCRefit(kTRUE);
1434 SetRequireITSRefit(kTRUE);
1435 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1436 SetMaxDCAToVertexZ(2);
1437 SetMaxDCAToVertex2D(kFALSE);
1438 SetRequireSigmaToVertex(kFALSE);
1439 SetMaxChi2PerClusterITS(36);
1440 SetMaxDCAToVertexXY(2.4)
1441 SetMaxDCAToVertexZ(3.2)
1442 SetDCaToVertex2D(kTRUE)
1445 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
1448 //RecKine: ITSTPC cuts
1449 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
1451 if(fRejectKinkMother)
1455 Bool_t kinkmotherpass = kTRUE;
1456 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
1458 if(track->GetID() == fListOfmotherkink[kinkmother])
1460 kinkmotherpass = kFALSE;
1464 if(!kinkmotherpass) continue;
1468 if(etrack->GetKinkIndex(0) != 0) continue;
1475 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
1478 //HFEcuts: ITS layers cuts
1479 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
1481 //HFE cuts: TPC PID cleanup
1482 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
1483 //______________________________________________________________________________________
1485 ///_____________________________________________________________
1486 ///QA plots after track selection
1489 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
1490 else fPtMCWithoutLabel->Fill(fPt);
1493 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1495 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1497 if(fMCparticle->IsPhysicalPrimary()) fPtIsPhysicaPrimary->Fill(fPt);
1499 Int_t pdg = fMCparticle->GetPdgCode();
1500 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1503 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
1505 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1507 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
1509 if(fMCparticle->IsPhysicalPrimary())
1511 fPtMCparticleReco->Fill(fMCparticle->Pt());
1513 Bool_t MotherFound = FindMother(track->GetLabel());
1516 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());
1517 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
1523 else if(fIsMC && track->GetLabel()>=0)
1525 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1528 fMCtrack = fMCstack->Particle(track->GetLabel());
1529 Int_t pdg = fMCtrack->GetPdgCode();
1531 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1533 fPtMCparticleReco_nonPrimary->Fill(fMCtrack->Pt());//not Primary track
1537 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1539 fPtIsPhysicaPrimary->Fill(fPt);
1544 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1546 fPtMCparticleReco->Fill(fMCtrack->Pt());
1548 Bool_t MotherFound = FindMother(track->GetLabel());
1551 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());
1552 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
1559 fTPC_p[1]->Fill(fPt,fTPCsignal);
1560 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
1561 Double_t fPtBin[6] = {2,4,6,8,10,15};
1563 TPCNcls = track->GetTPCNcls();
1564 Float_t pos2[3]={0,0,0};
1566 if(track->GetEMCALcluster()>0)
1568 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1569 if(fClus->IsEMCAL())
1571 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1573 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
1575 Float_t Energy = fClus->E();
1576 Float_t EoverP = Energy/track->P();
1577 Float_t M02 = fClus->GetM02();
1578 Float_t M20 = fClus->GetM20();
1579 Float_t ncells = fClus->GetNCells();
1581 /////////////// for Eta Phi distribution
1582 fClus->GetPosition(pos2);
1583 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
1584 Double_t cphi = vpos.Phi();
1585 Double_t ceta = vpos.Eta();
1586 fEtaPhi[1]->Fill(cphi,ceta);
1588 fECluster[1]->Fill(Energy);
1589 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
1592 //for EMCal trigger performance
1594 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
1595 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
1600 //for hadron contamination calculations
1604 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1606 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
1608 if(fTPCnSigma<-3.5){
1609 fEoverP_pt_hadrons->Fill(fPt,EoverP);
1610 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
1614 if(fTPCnSigma < -3.5){
1615 fEoverP_pt_pions->Fill(fPt, EoverP);
1619 if(fTPCnSigma < -3.5 && fTPCnSigma > -10){
1620 fEoverP_pt_pions2->Fill(fPt, EoverP);
1630 for(Int_t i = 0; i < 5; i++)
1632 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1635 if(fTPCnSigma < -5 && fTPCnSigma > -10){
1636 fNcells_hadrons[i]->Fill(ncells);
1638 //hadrons selection using E/p
1639 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
1640 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
1642 //electrons selection using E/p
1643 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1644 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
1649 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1651 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
1652 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
1656 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1658 fPtTrigger_Inc->Fill(fPt);
1659 DiHadronCorrelation(track, iTracks);
1668 //______________________________________________________________
1671 fVtxZ[1]->Fill(fZvtx);
1672 fNTracks[1]->Fill(fNOtrks);
1673 fNClusters[1]->Fill(ClsNo);
1674 //______________________________________________________________
1676 ///______________________________________________________________________
1677 ///Histograms for PID Studies
1678 //Double_t fPtBin[6] = {2,4,6,8,10,15};
1680 for(Int_t i = 0; i < 5; i++)
1682 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1684 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
1687 fTPC_pt[i]->Fill(fTPCsignal);
1688 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
1693 ///QA plots after track selection
1694 ///_____________________________________________________________
1696 //_______________________________________________________
1697 //Correlation Analysis - DiHadron
1700 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1702 fPtTrigger_Inc->Fill(fPt);
1703 DiHadronCorrelation(track, iTracks);
1706 //_______________________________________________________
1709 ///////////////////////////////////////////////////////////////////
1710 ///TPC - efficiency calculation //
1712 /// changing start here
1713 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1715 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1716 Int_t pdg = fMCparticle->GetPdgCode();
1719 if(fMCparticle->IsPhysicalPrimary()){
1722 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1724 Bool_t MotherFound = FindMother(track->GetLabel());
1726 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1727 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1728 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
1735 else if(fIsMC && track->GetLabel()>=0)//ESD
1738 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1739 fMCtrack = fMCstack->Particle(track->GetLabel());
1741 Int_t pdg = fMCtrack->GetPdgCode();
1742 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1744 if(fMCtrack->GetFirstMother()>0){
1745 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1746 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1747 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
1755 ///________________________________________________________________________
1757 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
1758 Int_t pidpassed = 1;
1759 AliHFEpidObject hfetrack;
1760 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
1761 hfetrack.SetRecTrack(track);
1762 hfetrack.SetPP(); //proton-proton analysis
1763 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
1764 fpid->Fill(pidpassed);
1766 if(pidpassed==0) continue;
1767 ///________________________________________________________________________
1770 ////////////////////////////////////////////////////////////////////
1771 ///TPC efficiency calculations
1773 /// changing start here
1774 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1776 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1777 Int_t pdg = fMCparticle->GetPdgCode();
1780 if(fMCparticle->IsPhysicalPrimary()){
1783 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1785 Bool_t MotherFound = FindMother(track->GetLabel());
1787 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1788 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1789 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
1796 else if(fIsMC && track->GetLabel()>=0)//ESD
1799 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1800 fMCtrack = fMCstack->Particle(track->GetLabel());
1802 Int_t pdg = fMCtrack->GetPdgCode();
1803 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1805 if(fMCtrack->GetFirstMother()>0){
1806 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1807 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1808 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
1815 //Eta Cut for TPC only
1816 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1817 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
1820 //Background for TPC only
1821 if(fFillBackground){
1822 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
1826 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
1827 fTPC_p[2]->Fill(fP,fTPCsignal);
1828 TPCNcls = track->GetTPCNcls();
1829 Float_t pos3[3]={0,0,0};
1831 if(track->GetEMCALcluster()>0)
1833 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1834 if(fClus->IsEMCAL())
1837 //________________________________________________________________________
1840 //Cluster timing distribution
1841 if(fUseEMCal && !fIsAOD ){
1842 AliESDCaloCells &cells=*(fESD->GetEMCALCells());
1843 // Int_t nTotalCells = cells.GetNumberOfCells() ;
1844 //Int_t type = cells.GetType();
1845 //for (Int_t icell= 0; icell < nTotalCells; icell++) {
1846 //fTime->Fill(cells.GetTime(icell));
1849 TRefArray* caloClusters = new TRefArray();
1850 fESD->GetEMCALClusters(caloClusters);
1852 Int_t nclus = caloClusters->GetEntries();
1854 //fClusESD = fESD->GetCaloCluster(track->GetEMCALcluster());
1856 for (Int_t icl = 0; icl < nclus; icl++) {
1858 AliESDCaloCluster* clus = (AliESDCaloCluster*)caloClusters->At(icl);
1860 if(fClus->IsEMCAL()){
1861 Float_t ncells = fClus->GetNCells();
1862 UShort_t * index = clus->GetCellsAbsId() ;
1863 UShort_t * index2 = fClus->GetCellsAbsId() ;
1866 for(Int_t i = 0; i < ncells ; i++){
1868 Int_t absId = index[i];
1869 fTime->Fill(fPt,cells.GetCellTime(absId));
1871 Int_t absId2 = index2[i];
1872 fTime2->Fill(fPt,cells.GetCellTime(absId2));
1884 double emctof = fClus->GetTOF();
1885 ftimingEle->Fill(fPt,emctof);
1887 //________________________________________________________________________
1892 /////////////// Residuals
1893 Double_t Dx = fClus->GetTrackDx();
1894 Double_t Dz = fClus->GetTrackDz();
1895 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
1896 for(Int_t i = 0; i < 5; i++)
1898 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1907 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1909 Float_t Energy = fClus->E();
1910 Float_t EoverP = Energy/track->P();
1911 Float_t M02 = fClus->GetM02();
1912 Float_t M20 = fClus->GetM20();
1913 Float_t ncells = fClus->GetNCells();
1914 //----------------------------------------------------------------------------------------
1915 // EtaCut electrons histogram
1917 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1919 if(fUseShowerShapeCut){
1920 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
1921 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
1922 fShowerShapeCut->Fill(M02,M20);
1927 if(!fUseShowerShapeCut){
1928 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
1929 fShowerShapeCut->Fill(M02,M20);
1932 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
1934 //for shower shape cut studies - now with TPC PID Cut
1936 fShowerShapeM02_EoverP->Fill(M02,EoverP);
1937 fShowerShapeM20_EoverP->Fill(M20,EoverP);
1942 //----------------------------------------------------------------------------------------
1946 /////////////// for Eta Phi distribution
1947 fClus->GetPosition(pos3);
1948 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
1949 Double_t cphi = vpos.Phi();
1950 Double_t ceta = vpos.Eta();
1951 fEtaPhi[2]->Fill(cphi,ceta);
1955 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
1957 for(Int_t i = 0; i < 5; i++)
1959 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1962 fR_EoverP[i]->Fill(R, EoverP);
1963 fNcells[i]->Fill(ncells);
1964 fNcells_EoverP[i]->Fill(EoverP, ncells);
1965 fM02_EoverP[i]->Fill(M02,EoverP);
1966 fM20_EoverP[i]->Fill(M20,EoverP);
1967 fECluster_ptbins[i]->Fill(Energy);
1968 fEoverP_ptbins[i]->Fill(EoverP);
1970 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1971 fNcells_electrons[i]->Fill(ncells);
1974 if(M02<0.5 && M20<0.3) {
1975 fEoverP_wSSCut[i]->Fill(EoverP);
1980 fNcells_pt->Fill(fPt, ncells);
1983 ////////////////////////////////////////////////////////////////////
1984 ///EMCal - Efficiency calculations
1986 /// changing start here
1987 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1989 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1990 Int_t pdg = fMCparticle->GetPdgCode();
1993 if(fMCparticle->IsPhysicalPrimary()){
1996 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1998 Bool_t MotherFound = FindMother(track->GetLabel());
2000 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2001 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2002 fPtMC_EMCal_All->Fill(fMCparticle->Pt());
2009 else if(fIsMC && track->GetLabel()>=0)//ESD
2012 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2015 fMCtrack = fMCstack->Particle(track->GetLabel());
2017 Int_t pdg = fMCtrack->GetPdgCode();
2018 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
2020 if(fMCtrack->GetFirstMother()>0){
2021 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2022 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2024 fPtMC_EMCal_All->Fill(fMCtrack->Pt());
2032 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
2035 fECluster[2]->Fill(Energy);
2036 //_______________________________________________________
2037 //Correlation Analysis
2040 fPtElec_Inc->Fill(fPt);
2041 //new function to fill non-HFE histos
2042 if(fFillBackground){
2043 Background(track, iTracks, Vtrack, kFALSE);
2046 double emctof2 = fClus->GetTOF();
2047 ftimingEle2->Fill(fPt,emctof2);
2049 if(fCorrelationFlag)
2051 ElectronHadronCorrelation(track, iTracks, Vtrack);
2054 //_______________________________________________________
2056 ////////////////////////////////////////////////////////////////////
2057 ///EMCal - efficiency calculations
2059 if(track->Charge()<0) fCharge_n->Fill(fPt);
2060 if(track->Charge()>0) fCharge_p->Fill(fPt);
2063 /// changing start here
2064 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2066 if(track->Charge()<0) fCharge_n->Fill(fPt);
2067 if(track->Charge()>0) fCharge_p->Fill(fPt);
2069 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2070 Int_t pdg = fMCparticle->GetPdgCode();
2072 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2074 if( TMath::Abs(pdg) == 11) fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
2079 if(fMCparticle->IsPhysicalPrimary()){
2082 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2084 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCparticle->Pt()); //numerator for the total efficiency
2087 Bool_t MotherFound = FindMother(track->GetLabel());
2089 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2090 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2091 fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
2098 else if(fIsMC && track->GetLabel()>=0)//ESD
2100 if(track->Charge()<0) fCharge_n->Fill(fPt);
2101 if(track->Charge()>0) fCharge_p->Fill(fPt);
2103 fMCtrack = fMCstack->Particle(track->GetLabel());
2104 Int_t pdg = fMCtrack->GetPdgCode();
2106 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2107 if( TMath::Abs(pdg) == 11) fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
2110 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2112 Bool_t MotherFound = FindMother(track->GetLabel());
2116 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2117 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency
2124 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
2126 if(fMCtrack->GetFirstMother()>0){
2127 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2128 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2130 fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());
2136 ///////////////////////////////////////////////////////////////////
2144 //______________________________________________________________
2147 fVtxZ[2]->Fill(fZvtx);
2148 fNTracks[2]->Fill(fNOtrks);
2149 fNClusters[2]->Fill(ClsNo);
2151 //______________________________________________________________
2153 //_______________________________________________________
2154 //Correlation Analysis
2157 fPtElec_Inc->Fill(fPt);
2159 if(fCorrelationFlag)
2161 ElectronHadronCorrelation(track, iTracks, Vtrack);
2164 //_______________________________________________________
2166 ///________________________________________________________________________
2169 //__________________________________________________________________
2170 //Event Mixing Analysis
2172 if(fEventMixingFlag)
2174 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2176 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2178 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!
2183 //__________________________________________________________________
2185 delete fListOfmotherkink;
2186 PostData(1, fOutputList);
2189 //______________________________________________________________________
2190 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
2192 //Draw result to the screen
2193 //Called once at the end of the query
2195 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
2199 printf("ERROR: Output list not available\n");
2204 //______________________________________________________________________
2205 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
2207 //Check single track cuts for a given cut step
2208 //Note this function is called inside the UserExec function
2209 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
2210 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
2215 //______________________________________________________________________
2218 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
2220 ///_________________________________________________________________
2224 if(track->GetLabel() < 0)
2226 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2232 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2234 if(fMCparticle->GetMother()<0) return;
2236 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2238 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2241 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2242 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2247 fMCtrack = fMCstack->Particle(track->GetLabel());
2249 if(fMCtrack->GetFirstMother()<0) return;
2251 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2253 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2256 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2257 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2261 ///_________________________________________________________________
2263 //________________________________________________
2264 //Associated particle cut
2265 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2266 fPartnerCuts->SetRequireITSRefit(kTRUE);
2267 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2268 fPartnerCuts->SetEtaRange(-0.9,0.9);
2269 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2270 fPartnerCuts->SetMinNClustersTPC(80);
2271 fPartnerCuts->SetPtRange(0.3,1e10);
2272 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2273 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2274 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2275 //_________________________________________________
2277 ///#################################################################
2278 //Non-HFE reconstruction
2279 fNonHFE = new AliSelectNonHFE();
2280 fNonHFE->SetAODanalysis(fIsAOD);
2281 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2282 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2283 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2284 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2285 fNonHFE->SetAlgorithm("DCA"); //KF
2286 fNonHFE->SetPIDresponse(fPidResponse);
2287 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2288 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2291 fNonHFE->SetHistAngleBack(fOpAngleBack);
2292 fNonHFE->SetHistAngle(fOpAngle);
2293 fNonHFE->SetHistDCABack(fDCABack);
2294 fNonHFE->SetHistDCA(fDCA);
2295 fNonHFE->SetHistMassBack(fInvMassBack);
2296 fNonHFE->SetHistMass(fInvMass);
2299 fNonHFE->SetHistAngleBack(fOpAngleBack2);
2300 fNonHFE->SetHistAngle(fOpAngle2);
2301 fNonHFE->SetHistDCABack(fDCABack2);
2302 fNonHFE->SetHistDCA(fDCA2);
2303 fNonHFE->SetHistMassBack(fInvMassBack2);
2304 fNonHFE->SetHistMass(fInvMass2);
2307 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2311 //Electron Information
2312 Double_t fPhiE = -999;
2313 Double_t fEtaE = -999;
2314 Double_t fPtE = -999;
2315 fPhiE = track->Phi();
2316 fEtaE = track->Eta();
2319 ///_________________________________________________________________
2325 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2328 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2329 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2333 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2334 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2340 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2343 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2344 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2348 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2349 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2354 ///_________________________________________________________________
2358 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2359 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2363 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2364 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2373 //______________________________________________________________________
2374 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
2377 ///_________________________________________________________________
2381 if(track->GetLabel() < 0)
2383 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2389 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2391 if(fMCparticle->GetMother()<0) return;
2393 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2395 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2398 fPtBackgroundBeforeReco->Fill(track->Pt());
2403 fMCtrack = fMCstack->Particle(track->GetLabel());
2405 if(fMCtrack->GetFirstMother()<0) return;
2407 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2409 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2412 fPtBackgroundBeforeReco->Fill(track->Pt());
2416 ///_________________________________________________________________
2418 //________________________________________________
2419 //Associated particle cut
2420 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2421 fPartnerCuts->SetRequireITSRefit(kTRUE);
2422 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2423 fPartnerCuts->SetEtaRange(-0.9,0.9);
2424 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2425 fPartnerCuts->SetMinNClustersTPC(80);
2426 fPartnerCuts->SetPtRange(0.3,1e10);
2427 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2428 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2429 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2430 //_________________________________________________
2432 ///#################################################################
2433 //Non-HFE reconstruction
2434 fNonHFE = new AliSelectNonHFE();
2435 fNonHFE->SetAODanalysis(fIsAOD);
2436 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2437 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2438 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2439 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2440 fNonHFE->SetAlgorithm("DCA"); //KF
2441 fNonHFE->SetPIDresponse(fPidResponse);
2442 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2443 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2446 fNonHFE->SetHistAngleBack(fOpAngleBack);
2447 fNonHFE->SetHistAngle(fOpAngle);
2448 fNonHFE->SetHistDCABack(fDCABack);
2449 fNonHFE->SetHistDCA(fDCA);
2450 fNonHFE->SetHistMassBack(fInvMassBack);
2451 fNonHFE->SetHistMass(fInvMass);
2453 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2455 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
2456 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
2457 Bool_t fUlsIsPartner = kFALSE;
2458 Bool_t fLsIsPartner = kFALSE;
2459 ///#################################################################
2462 //Electron Information
2463 Double_t fPhiE = -999;
2464 Double_t fEtaE = -999;
2465 Double_t fPhiH = -999;
2466 Double_t fEtaH = -999;
2467 Double_t fDphi = -999;
2468 Double_t fDeta = -999;
2469 Double_t fPtE = -999;
2470 Double_t fPtH = -999;
2472 Double_t pi = TMath::Pi();
2474 fPhiE = track->Phi();
2475 fEtaE = track->Eta();
2479 ///_________________________________________________________________
2485 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2487 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2488 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2493 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2495 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2496 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2500 ///_________________________________________________________________
2503 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2504 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2510 //__________________________________________________________________
2511 //Event Mixing Analysis - Hadron Loop
2513 if(fEventMixingFlag)
2515 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2517 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2519 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
2521 fPoolNevents->Fill(fPool->GetCurrentNEvents());
2523 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
2525 TObjArray* bgTracks = fPool->GetEvent(jMix);
2527 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
2529 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
2530 if (NULL == MixedTrack) continue;
2532 fPhiH = MixedTrack->Phi();
2533 fEtaH = MixedTrack->Eta();
2534 fPtH = MixedTrack->Pt();
2536 if(fPtH>fPtE || fPtH<1) continue;
2538 fDphi = fPhiE - fPhiH;
2540 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2541 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2543 fDeta = fEtaE - fEtaH;
2545 Double_t fPtBin[6] = {2,4,6,8,10,15};
2547 for(Int_t i = 0; i < 5; i++)
2549 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2551 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
2553 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
2554 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
2556 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2557 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2561 // TODO your code: do event mixing with current event and bgTracks
2562 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
2567 //__________________________________________________________________
2569 //__________________________________________________________________
2570 //Same Event Analysis - Hadron Loop
2571 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2573 if(trackIndex==iTracks) continue;
2575 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2578 printf("ERROR: Could not receive track %d\n", iTracks);
2582 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2586 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2587 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2588 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2589 if(atrack2->GetTPCNcls() < 80) continue;
2593 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2594 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2597 fPhiH = track2->Phi();
2598 fEtaH = track2->Eta();
2599 fPtH = track2->Pt();
2601 if(fPtH>fPtE || fPtH<1) continue;
2603 fDphi = fPhiE - fPhiH;
2605 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2606 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2608 fDeta = fEtaE - fEtaH;
2610 Double_t fPtBin[6] = {2,4,6,8,10,15};
2612 //______________________________________________________________
2613 //Check if this track is a Non-HFE partner
2614 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
2616 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
2618 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
2620 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
2622 //______________________________________________________________
2624 for(Int_t i = 0; i < 5; i++)
2626 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2628 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
2630 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
2631 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
2632 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
2633 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
2635 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2636 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2637 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2638 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2644 //____________________________________________________________________________________________________________
2645 //Create a TObjArray with selected hadrons, for the mixed event analysis
2646 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
2648 fTracksClone = new TObjArray;
2649 fTracksClone->SetOwner(kTRUE);
2651 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2653 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2656 printf("ERROR: Could not receive track %d\n", iTracks);
2660 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2664 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2665 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2666 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2667 if(atrack2->GetTPCNcls() < 80) continue;
2671 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2672 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2675 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
2677 return fTracksClone;
2679 //____________________________________________________________________________________________________________
2681 //______________________________________________________________________
2682 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
2684 //________________________________________________
2685 //Associated particle cut
2686 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2687 fPartnerCuts->SetRequireITSRefit(kTRUE);
2688 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2689 fPartnerCuts->SetEtaRange(-0.9,0.9);
2690 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2691 fPartnerCuts->SetMinNClustersTPC(80);
2692 fPartnerCuts->SetPtRange(0.3,1e10);
2693 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2694 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2695 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2696 //_________________________________________________
2698 //Electron Information
2699 Double_t fPhiE = -999;
2700 Double_t fEtaE = -999;
2701 Double_t fPhiH = -999;
2702 Double_t fEtaH = -999;
2703 Double_t fDphi = -999;
2704 Double_t fDeta = -999;
2705 Double_t fPtE = -999;
2706 Double_t fPtH = -999;
2708 Double_t pi = TMath::Pi();
2710 fPhiE = track->Phi();
2711 fEtaE = track->Eta();
2714 //__________________________________________________________________
2715 //Same Event Analysis - Hadron Loop
2716 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2718 if(trackIndex==iTracks) continue;
2720 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2723 printf("ERROR: Could not receive track %d\n", iTracks);
2727 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2731 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2732 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2733 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2734 if(atrack2->GetTPCNcls() < 80) continue;
2738 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2739 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2742 fPhiH = track2->Phi();
2743 fEtaH = track2->Eta();
2744 fPtH = track2->Pt();
2746 if(fPtH>fPtE || fPtH<1) continue;
2748 fDphi = fPhiE - fPhiH;
2750 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2751 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2753 fDeta = fEtaE - fEtaH;
2755 Double_t fPtBin[6] = {2,4,6,8,10,15};
2757 for(Int_t i = 0; i < 5; i++)
2759 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2761 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
2766 //____________________________________________________________________________________________________________
2768 //______________________________________________________________________
2769 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
2776 fIsFromPi0 = kFALSE;
2777 fIsFromEta = kFALSE;
2778 fIsFromGamma = kFALSE;
2780 if(mcIndex < 0 || !fIsMC)
2786 Int_t mpdg = -99999;
2787 Int_t gmpdg = -99999;
2788 Int_t ggmpdg = -99999;
2789 Int_t gggmpdg = -99999;
2793 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
2795 pdg = TMath::Abs(fMCparticle->GetPdgCode());
2805 fIsFromPi0 = kFALSE;
2806 fIsFromEta = kFALSE;
2807 fIsFromGamma = kFALSE;
2811 if(fMCparticle->GetMother()<0)
2818 fIsFromPi0 = kFALSE;
2819 fIsFromEta = kFALSE;
2820 fIsFromGamma = kFALSE;
2824 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2825 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
2827 if(fMCparticleMother->GetMother()<0)
2835 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
2836 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
2837 if(fMCparticleGMother->GetMother()<0)
2844 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
2845 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
2846 if(fMCparticleGGMother->GetMother()<0)
2852 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
2853 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
2860 fMCtrack = fMCstack->Particle(mcIndex);
2862 pdg = TMath::Abs(fMCtrack->GetPdgCode());
2871 fIsFromPi0 = kFALSE;
2872 fIsFromEta = kFALSE;
2873 fIsFromGamma = kFALSE;
2877 if(fMCtrack->GetFirstMother()<0)
2884 fIsFromPi0 = kFALSE;
2885 fIsFromEta = kFALSE;
2886 fIsFromGamma = kFALSE;
2890 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2891 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
2893 if(fMCtrackMother->GetFirstMother()<0)
2901 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
2902 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
2904 if(fMCtrackGMother->GetFirstMother()<0)
2911 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
2912 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
2914 if(fMCtrackGGMother->GetFirstMother()<0)
2920 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
2921 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
2927 //Tag Electron Source
2928 if(mpdg==111 || mpdg==221 || mpdg==22)
2936 fIsFromPi0 = kFALSE;
2937 fIsFromEta = kFALSE;
2938 fIsFromGamma = kFALSE;
2940 if(mpdg==111) fIsFromPi0 = kFALSE;
2941 if(mpdg==221)fIsFromEta = kFALSE;
2942 if(mpdg==22) fIsFromGamma = kFALSE;
2951 fIsFromPi0 = kFALSE;
2952 fIsFromEta = kFALSE;
2953 fIsFromGamma = kFALSE;
2960 if(mpdg>400 && mpdg<500)
2962 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
2977 else if(mpdg>500 && mpdg<600)