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: August 15th, 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 ,fPtMCparticleReco(0)
251 ,fPtMCparticleAllHfe1(0)
252 ,fPtMCparticleRecoHfe1(0)
253 ,fPtMCparticleAllHfe2(0)
254 ,fPtMCparticleRecoHfe2(0)
255 ,fPtMCelectronAfterAll(0)
258 ,fPtMC_EMCal_Selected(0)
260 ,fPtMC_TPC_Selected(0)
262 ,fPtMCWithoutLabel(0)
263 ,fPtIsPhysicaPrimary(0)
266 ,fPID(new AliHFEpid("hfePid"))
269 ,fRejectKinkMother(kFALSE)
274 ,fMCtrackGGGMother(0)
278 ,fMCparticleMother(0)
279 ,fMCparticleGMother(0)
280 ,fMCparticleGGMother(0)
281 ,fMCparticleGGGMother(0)
291 ,fCEtaPhi_ULS_Weight_EM(0)
292 ,fCEtaPhi_LS_Weight_EM(0)
295 ,fCEtaPhi_Inc_DiHadron(0)
299 // Define input and output slots here
300 // Input slot #0 works with a TChain
301 DefineInput(0, TChain::Class());
302 // Output slot #0 id reserved by the base class for AOD
303 // Output slot #1 writes into a TH1 container
304 // DefineOutput(1, TH1I::Class());
305 DefineOutput(1, TList::Class());
306 // DefineOutput(3, TTree::Class());
309 //________________________________________________________________________
310 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
311 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
315 ,fUseShowerShapeCut(kFALSE)
316 ,fFillBackground(kFALSE)
327 ,fIsFromGamma(kFALSE)
331 ,fPartnerCuts(new AliESDtrackCuts())
334 ,fNonHFE(new AliSelectNonHFE())
339 ,fHasCentralitySelection(kFALSE)
341 ,fCentralityHistPass(0)
372 ,fShowerShapeM02_EoverP(0)
373 ,fShowerShapeM20_EoverP(0)
392 ,fNcells_electrons(0)
399 ,fTPCnsigma_eta_electrons(0)
400 ,fTPCnsigma_eta_hadrons(0)
403 ,fnsigma_p_EoverPcut(0)
404 ,fEoverP_pt_pions2(0)
406 ,fEoverP_pt_hadrons(0)
412 ,fCEtaPhi_ULS_Weight(0)
413 ,fCEtaPhi_LS_Weight(0)
414 ,fCEtaPhi_ULS_NoP_Weight(0)
415 ,fCEtaPhi_LS_NoP_Weight(0)
450 ,fAngleCutFlag(kFALSE)
451 ,fChi2CutFlag(kFALSE)
453 ,fPtBackgroundBeforeReco(0)
454 ,fPtBackgroundBeforeReco2(0)
455 ,fPtBackgroundAfterReco(0)
462 ,fPtMCparticleReco(0)
463 ,fPtMCparticleAllHfe1(0)
464 ,fPtMCparticleRecoHfe1(0)
465 ,fPtMCparticleAllHfe2(0)
466 ,fPtMCparticleRecoHfe2(0)
467 ,fPtMCelectronAfterAll(0)
470 ,fPtMC_EMCal_Selected(0)
472 ,fPtMC_TPC_Selected(0)
474 ,fPtMCWithoutLabel(0)
475 ,fPtIsPhysicaPrimary(0)
478 ,fPID(new AliHFEpid("hfePid"))
481 ,fRejectKinkMother(kFALSE)
486 ,fMCtrackGGGMother(0)
490 ,fMCparticleMother(0)
491 ,fMCparticleGMother(0)
492 ,fMCparticleGGMother(0)
493 ,fMCparticleGGGMother(0)
503 ,fCEtaPhi_ULS_Weight_EM(0)
504 ,fCEtaPhi_LS_Weight_EM(0)
507 ,fCEtaPhi_Inc_DiHadron(0)
511 // Define input and output slots here
512 // Input slot #0 works with a TChain
513 DefineInput(0, TChain::Class());
514 // Output slot #0 id reserved by the base class for AOD
515 // Output slot #1 writes into a TH1 container
516 // DefineOutput(1, TH1I::Class());
517 DefineOutput(1, TList::Class());
518 //DefineOutput(3, TTree::Class());
521 //______________________________________________________________________
522 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
531 //______________________________________________________________________
532 //Create Output Objects
533 //Here we can define the histograms and others output files
535 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
537 //______________________________________________________________________
539 if(!fPID->GetNumberOfPIDdetectors())
541 fPID->AddDetector("TPC", 0);
544 fPID->SortDetectors();
546 fPIDqa = new AliHFEpidQAmanager();
547 fPIDqa->Initialize(fPID);
548 //______________________________________________________________________
550 //______________________________________________________________________
551 //Initialize correction Framework and Cuts
552 fCFM = new AliCFManager;
553 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
554 fCFM->SetNStepParticle(kNcutSteps);
555 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
559 AliWarning("Cuts not available. Default cuts will be used");
560 fCuts = new AliHFEcuts;
561 fCuts->CreateStandardCuts();
564 fCuts->Initialize(fCFM);
565 //______________________________________________________________________
567 ///______________________________________________________________________
570 fOutputList = new TList();
571 fOutputList->SetOwner();
574 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
576 //Store the number of events
578 fNevent = new TH1F("fNevent","Number of Events",5,-0.5,4.5);
579 //And then, add to the output list
580 fOutputList->Add(fNevent);
582 fpid = new TH1F("fpid","PID flag",5,0,5);
583 fOutputList->Add(fpid);
586 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
588 fPtElec_ULS = new TH1F("fPtElec_ULS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
589 fPtElec_LS = new TH1F("fPtElec_LS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
592 fPtElec_ULS2 = new TH1F("fPtElec_ULS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
593 fPtElec_LS2 = new TH1F("fPtElec_LS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
596 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",300,0,30);
597 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
598 fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
602 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
603 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
608 fTime = new TH2D("fTime","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
609 fTime2 = new TH2D("fTime2","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
612 ftimingEle = new TH2D("ftimingEle","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
613 ftimingEle2 = new TH2D("ftimingEle2","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
615 fShowerShape_ha = new TH2F("fShowerShape_ha","Shower Shape hadrons;M02;M20",500,0,1.8,500,0,1.8);
616 fShowerShape_ele = new TH2F("fShowerShape_ele","Shower Shape electrons;M02;M20",500,0,1.8,500,0,1.8);
618 fShowerShapeM02_EoverP = new TH2F("fShowerShapeM02_EoverP","Shower Shape;M02;E/p",500,0,1.8,500,0,1.8);
619 fShowerShapeM20_EoverP = new TH2F("fShowerShapeM20_EoverP","Shower Shape;M20;E/p",500,0,1.8,500,0,1.8);
623 fOutputList->Add(fPtElec_Inc);
624 fOutputList->Add(fPtElec_ULS);
625 fOutputList->Add(fPtElec_LS);
628 fOutputList->Add(fPtElec_ULS2);
629 fOutputList->Add(fPtElec_LS2);
633 fOutputList->Add(fPtTrigger_Inc);
634 fOutputList->Add(fTPCnsigma_pt_2D);
635 fOutputList->Add(fShowerShapeCut);
637 fOutputList->Add(fCharge_n);
638 fOutputList->Add(fCharge_p);
643 fOutputList->Add(fTime);
644 fOutputList->Add(fTime2);
648 fOutputList->Add(ftimingEle);
649 fOutputList->Add(ftimingEle2);
651 fOutputList->Add(fShowerShape_ha);
652 fOutputList->Add(fShowerShape_ele);
654 fOutputList->Add(fShowerShapeM02_EoverP);
655 fOutputList->Add(fShowerShapeM20_EoverP);
664 //Step 1: Before Track cuts
668 fEoverP_pt = new TH2F *[3];
669 fTPC_p = new TH2F *[3];
670 fTPCnsigma_p = new TH2F *[3];
672 fECluster= new TH1F *[3];
673 fEtaPhi= new TH2F *[3];
674 fVtxZ= new TH1F *[3];
675 fNTracks= new TH1F *[3];
676 fNClusters= new TH1F *[3];
677 fTPCNcls_EoverP= new TH2F *[3];
679 for(Int_t i = 0; i < 3; i++)
681 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
682 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);
683 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
686 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
687 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
688 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
689 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,1000);
690 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
691 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
694 fOutputList->Add(fEoverP_pt[i]);
695 fOutputList->Add(fTPC_p[i]);
696 fOutputList->Add(fTPCnsigma_p[i]);
699 fOutputList->Add(fECluster[i]);
700 fOutputList->Add(fEtaPhi[i]);
701 fOutputList->Add(fVtxZ[i]);
702 fOutputList->Add(fNTracks[i]);
703 fOutputList->Add(fNClusters[i]);
704 fOutputList->Add(fTPCNcls_EoverP[i]);
708 Int_t fPtBin[6] = {2,4,6,8,10,15};
710 fEoverP_tpc = new TH2F *[5];
711 fTPC_pt = new TH1F *[5];
712 fTPCnsigma_pt = new TH1F *[5];
717 fR_EoverP=new TH2F *[5];
718 fNcells=new TH1F *[5];
719 fNcells_EoverP=new TH2F *[5];
720 fM02_EoverP= new TH2F *[5];
721 fM20_EoverP= new TH2F *[5];
722 fEoverP_ptbins=new TH1F *[5];
723 fECluster_ptbins=new TH1F *[5];
724 fEoverP_wSSCut=new TH1F *[5];
725 fNcells_electrons=new TH1F *[5];
726 fNcells_hadrons=new TH1F *[5];
727 fTPCnsigma_eta_electrons=new TH2F *[5];
728 fTPCnsigma_eta_hadrons=new TH2F *[5];
732 fCEtaPhi_Inc = new TH2F *[5];
733 fCEtaPhi_Inc_DiHadron = new TH2F *[5];
735 fCEtaPhi_ULS = new TH2F *[5];
736 fCEtaPhi_LS = new TH2F *[5];
737 fCEtaPhi_ULS_NoP = new TH2F *[5];
738 fCEtaPhi_LS_NoP = new TH2F *[5];
740 fCEtaPhi_ULS_Weight = new TH2F *[5];
741 fCEtaPhi_LS_Weight = new TH2F *[5];
742 fCEtaPhi_ULS_NoP_Weight = new TH2F *[5];
743 fCEtaPhi_LS_NoP_Weight = new TH2F *[5];
745 fCEtaPhi_Inc_EM = new TH2F *[5];
747 fCEtaPhi_ULS_EM = new TH2F *[5];
748 fCEtaPhi_LS_EM = new TH2F *[5];
750 fCEtaPhi_ULS_Weight_EM = new TH2F *[5];
751 fCEtaPhi_LS_Weight_EM = new TH2F *[5];
753 fInvMass = new TH1F("fInvMass","",200,0,0.3);
754 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
755 fDCA = new TH1F("fDCA","",200,0,1);
756 fDCABack = new TH1F("fDCABack","",200,0,1);
757 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
758 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
760 fOutputList->Add(fInvMass);
761 fOutputList->Add(fInvMassBack);
762 fOutputList->Add(fDCA);
763 fOutputList->Add(fDCABack);
764 fOutputList->Add(fOpAngle);
765 fOutputList->Add(fOpAngleBack);
770 fInvMass = new TH1F("fInvMass","",200,0,0.3);
771 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
772 fDCA = new TH1F("fDCA","",200,0,1);
773 fDCABack = new TH1F("fDCABack","",200,0,1);
774 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
775 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
777 fOutputList->Add(fInvMass);
778 fOutputList->Add(fInvMassBack);
779 fOutputList->Add(fDCA);
780 fOutputList->Add(fDCABack);
781 fOutputList->Add(fOpAngle);
782 fOutputList->Add(fOpAngleBack);
784 //histos for TPC-only
785 fInvMass2 = new TH1F("fInvMass2","",200,0,0.3);
786 fInvMassBack2 = new TH1F("fInvMassBack2","",200,0,0.3);
787 fDCA2 = new TH1F("fDCA2","",200,0,1);
788 fDCABack2 = new TH1F("fDCABack2","",200,0,1);
789 fOpAngle2 = new TH1F("fOpAngle2","",200,0,0.5);
790 fOpAngleBack2 = new TH1F("fOpAngleBack2","",200,0,0.5);
792 fOutputList->Add(fInvMass2);
793 fOutputList->Add(fInvMassBack2);
794 fOutputList->Add(fDCA2);
795 fOutputList->Add(fDCABack2);
796 fOutputList->Add(fOpAngle2);
797 fOutputList->Add(fOpAngleBack2);
801 for(Int_t i = 0; i < 5; i++)
803 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);
804 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);
805 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);
807 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);
808 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);
809 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);
810 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);
811 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);
812 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);
813 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);
814 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);
815 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);
816 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);
817 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);
818 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);
819 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);
820 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);
821 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);
823 fOutputList->Add(fEoverP_tpc[i]);
824 fOutputList->Add(fTPC_pt[i]);
825 fOutputList->Add(fTPCnsigma_pt[i]);
827 fOutputList->Add(fEta[i]);
828 fOutputList->Add(fPhi[i]);
829 fOutputList->Add(fR[i]);
830 fOutputList->Add(fR_EoverP[i]);
831 fOutputList->Add(fNcells[i]);
832 fOutputList->Add(fNcells_electrons[i]);
833 fOutputList->Add(fNcells_hadrons[i]);
834 fOutputList->Add(fNcells_EoverP[i]);
835 fOutputList->Add(fECluster_ptbins[i]);
836 fOutputList->Add(fEoverP_ptbins[i]);
837 fOutputList->Add(fEoverP_wSSCut[i]);
838 fOutputList->Add(fM02_EoverP[i]);
839 fOutputList->Add(fM20_EoverP[i]);
840 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
841 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
846 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);
847 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);
849 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);
850 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);
851 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);
852 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);
854 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);
855 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);
856 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);
857 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);
859 fOutputList->Add(fCEtaPhi_Inc[i]);
860 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
862 fOutputList->Add(fCEtaPhi_ULS[i]);
863 fOutputList->Add(fCEtaPhi_LS[i]);
864 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
865 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
867 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
868 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
869 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
870 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
874 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);
876 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);
877 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);
879 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);
880 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);
882 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
884 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
885 fOutputList->Add(fCEtaPhi_LS_EM[i]);
887 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
888 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
894 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
895 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
898 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
899 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
901 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
902 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
904 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
905 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
908 fOutputList->Add(fTPCnsigma_eta);
909 fOutputList->Add(fTPCnsigma_phi);
911 fOutputList->Add(fNcells_pt);
912 fOutputList->Add(fEoverP_pt_pions);
914 fOutputList->Add(ftpc_p_EoverPcut);
915 fOutputList->Add(fnsigma_p_EoverPcut);
917 fOutputList->Add(fEoverP_pt_pions2);
918 fOutputList->Add(fEoverP_pt_hadrons);
920 //__________________________________________________________________
924 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{T} (GeV/c);Count",300,0,30);
925 if(fFillBackground)fPtBackgroundBeforeReco2 = new TH1F("fPtBackgroundBeforeReco2",";p_{T} (GeV/c);Count",300,0,30);
926 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{T} (GeV/c);Count",300,0,30);
927 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{t} (GeV/c);Count",200,0,40);
928 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{t} (GeV/c);Count",200,0,40);
929 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
930 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
931 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
932 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
933 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{t} (GeV/c);Count",200,0,40);
934 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,40);
935 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
936 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
937 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{t} (GeV/c);Count",200,0,40);
938 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{t} (GeV/c);Count",200,0,40);
939 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
940 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
941 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
943 fOutputList->Add(fPtBackgroundBeforeReco);
944 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2);
945 fOutputList->Add(fPtBackgroundAfterReco);
946 fOutputList->Add(fPtMCparticleAll);
947 fOutputList->Add(fPtMCparticleReco);
948 fOutputList->Add(fPtMCparticleAllHfe1);
949 fOutputList->Add(fPtMCparticleRecoHfe1);
950 fOutputList->Add(fPtMCparticleAllHfe2);
951 fOutputList->Add(fPtMCparticleRecoHfe2);
952 fOutputList->Add(fPtMCelectronAfterAll);
953 fOutputList->Add(fPtMCpi0);
954 fOutputList->Add(fPtMC_EMCal_All);
955 fOutputList->Add(fPtMC_EMCal_Selected);
956 fOutputList->Add(fPtMC_TPC_All);
957 fOutputList->Add(fPtMC_TPC_Selected);
958 fOutputList->Add(fPtMCWithLabel);
959 fOutputList->Add(fPtMCWithoutLabel);
960 fOutputList->Add(fPtIsPhysicaPrimary);
963 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
964 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
965 fOutputList->Add(fCentralityHist);
966 fOutputList->Add(fCentralityHistPass);
968 //______________________________________________________________________
969 //Mixed event analysis
972 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
973 fOutputList->Add(fPoolNevents);
975 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.
976 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
978 Int_t nCentralityBins = 15;
979 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
982 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
984 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
986 //______________________________________________________________________
988 PostData(1, fOutputList);
990 ///______________________________________________________________________
993 //______________________________________________________________________
995 //Called for each event
996 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
999 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1000 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
1004 printf("ERROR: fESD & fAOD not available\n");
1008 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
1012 printf("ERROR: fVEvent not available\n");
1019 AliError("HFE cuts not available");
1023 if(!fPID->IsInitialized())
1025 // Initialize PID with the given run number
1026 AliWarning("PID not initialised, get from Run no");
1030 fPID->InitializePID(fAOD->GetRunNumber());
1034 fPID->InitializePID(fESD->GetRunNumber());
1039 fPidResponse = fInputHandler->GetPIDResponse();
1042 //Check PID response
1045 AliDebug(1, "Using default PID Response");
1046 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
1049 fPID->SetPIDResponse(fPidResponse);
1051 fCFM->SetRecEventInfo(fVevent);
1053 Double_t *fListOfmotherkink = 0;
1054 Int_t fNumberOfVertices = 0;
1055 Int_t fNumberOfMotherkink = 0;
1057 //______________________________________________________________________
1061 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
1062 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1063 TString vtxTtl = trkVtx->GetTitle();
1064 if(!vtxTtl.Contains("VertexerTracks")) return;
1065 Float_t zvtx = trkVtx->GetZ();
1067 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
1068 if(spdVtx->GetNContributors()<=0) return;
1069 TString vtxTyp = spdVtx->GetTitle();
1070 Double_t cov[6]={0};
1071 spdVtx->GetCovarianceMatrix(cov);
1072 Double_t zRes = TMath::Sqrt(cov[5]);
1073 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1074 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1075 if(TMath::Abs(zvtx) > 10) return;
1077 //Look for kink mother for AOD
1079 fNumberOfVertices = 0;
1080 fNumberOfMotherkink = 0;
1084 fNumberOfVertices = fAOD->GetNumberOfVertices();
1086 fListOfmotherkink = new Double_t[fNumberOfVertices];
1088 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
1090 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
1091 if(!aodvertex) continue;
1092 if(aodvertex->GetType()==AliAODVertex::kKink)
1094 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
1095 if(!mother1) continue;
1096 Int_t idmother = mother1->GetID();
1097 fListOfmotherkink[fNumberOfMotherkink] = idmother;
1098 fNumberOfMotherkink++;
1109 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
1110 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1111 TString vtxTtl = trkVtx->GetTitle();
1112 if(!vtxTtl.Contains("VertexerTracks")) return;
1113 Float_t zvtx = trkVtx->GetZ();
1115 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
1116 if(spdVtx->GetNContributors()<=0) return;
1117 TString vtxTyp = spdVtx->GetTitle();
1118 Double_t cov[6]={0};
1119 spdVtx->GetCovarianceMatrix(cov);
1120 Double_t zRes = TMath::Sqrt(cov[5]);
1121 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1122 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1123 if(TMath::Abs(zvtx) > 10) return;
1126 //______________________________________________________________________
1128 //Only events with at least 2 tracks are accepted
1129 Int_t fNOtrks = fVevent->GetNumberOfTracks();
1130 if(fNOtrks<2) return;
1132 //______________________________________________________________________
1133 //Centrality Selection
1134 if(fHasCentralitySelection)
1136 Float_t centrality = -1;
1140 fCentrality = fAOD->GetHeader()->GetCentralityP();
1144 fCentrality = fESD->GetCentrality();
1147 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
1148 else centrality = fCentrality->GetCentralityPercentile("V0A");
1150 //cout << "Centrality = " << centrality << " %" << endl;
1152 fCentralityHist->Fill(centrality);
1154 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
1156 fCentralityHistPass->Fill(centrality);
1158 //______________________________________________________________________
1160 //______________________________________________________________________
1166 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1170 AliError("Array of MC particles not found");
1174 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1178 AliError("Could not find MC Header in AOD");
1182 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1184 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1186 Int_t pdg = fMCparticle->GetPdgCode();
1187 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1189 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1191 if(fMCparticle->IsPhysicalPrimary())
1193 fPtMCparticleAll->Fill(fMCparticle->Pt());
1195 Bool_t MotherFound = FindMother(iMC);
1198 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCparticle->Pt()); //denominator for total efficiency
1199 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1204 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1209 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1210 if (!fEventHandler) {
1211 Printf("ERROR: Could not retrieve MC event handler");
1215 fMCevent = fEventHandler->MCEvent();
1217 Printf("ERROR: Could not retrieve MC event");
1221 fMCstack = fMCevent->Stack();
1223 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1226 fMCtrack = fMCstack->Particle(iMC);
1227 Int_t pdg = fMCtrack->GetPdgCode();
1228 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
1230 if(!fMCstack->IsPhysicalPrimary(iMC)) continue;
1233 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1235 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1237 fPtMCparticleAll->Fill(fMCtrack->Pt());
1239 Bool_t MotherFound = FindMother(iMC);
1242 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency
1243 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
1251 //______________________________________________________________________
1252 //EMCal Trigger Selection (Threshould selection)
1253 TString firedTrigger;
1254 TString TriggerEG1("EG1");
1255 TString TriggerEG2("EG2");
1257 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1258 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1261 if(firedTrigger.Contains(TriggerEG1)) fNevent->Fill(1);
1262 if(firedTrigger.Contains(TriggerEG2)) fNevent->Fill(2);
1265 if(firedTrigger.Contains(TriggerEG1))
1275 if(firedTrigger.Contains(TriggerEG2))
1284 //______________________________________________________________________
1287 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
1288 else ClsNo = fAOD->GetNumberOfCaloClusters();
1290 //______________________________________________________________________
1292 ///______________________________________________________________________
1294 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1296 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1299 printf("ERROR: Could not receive track %d\n", iTracks);
1303 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1304 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
1305 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1307 Double_t fTPCnSigma = -999;
1308 Double_t fTPCnSigma_pion = -999;
1309 Double_t fTPCnSigma_proton = -999;
1310 Double_t fTPCnSigma_kaon = -999;
1311 Double_t fTPCsignal = -999;
1312 Double_t fPt = -999;
1315 ///_____________________________________________________________________________
1316 ///Fill QA plots without track selection
1318 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
1320 fTPCsignal = track->GetTPCsignal();
1321 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
1322 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
1323 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
1324 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
1326 fTPC_p[0]->Fill(fPt,fTPCsignal);
1327 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
1330 Float_t TPCNcls = track->GetTPCNcls();
1331 Float_t pos[3]={0,0,0};
1333 Double_t fEMCflag = kFALSE;
1334 if(track->GetEMCALcluster()>0)
1336 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1337 if(fClus->IsEMCAL())
1339 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1342 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
1345 Float_t Energy = fClus->E();
1346 Float_t EoverP = Energy/track->P();
1347 //Float_t M02 = fClus->GetM02();
1348 //Float_t M20 = fClus->GetM20();
1350 /////////////// for Eta Phi distribution
1351 fClus->GetPosition(pos);
1352 TVector3 vpos(pos[0],pos[1],pos[2]);
1353 Double_t cphi = vpos.Phi();
1354 Double_t ceta = vpos.Eta();
1355 fEtaPhi[0]->Fill(cphi,ceta);
1357 fECluster[0]->Fill(Energy);
1358 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
1363 //______________________________________________________________
1366 fVtxZ[0]->Fill(fZvtx);
1367 fNTracks[0]->Fill(fNOtrks);
1368 fNClusters[0]->Fill(ClsNo);
1370 //______________________________________________________________
1372 ///Fill QA plots without track selection
1373 ///_____________________________________________________________________________
1374 //______________________________________________________________________________________
1375 //Track Selection Cuts
1377 //AOD (Test Filter Bit)
1380 // standard cuts with very loose DCA - BIT(4)
1383 GetStandardITSTPCTrackCuts2011(kFALSE)
1384 SetMaxChi2PerClusterTPC(4);
1385 SetAcceptKinkDaughters(kFALSE);
1386 SetRequireTPCRefit(kTRUE);
1387 SetRequireITSRefit(kTRUE);
1388 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1389 SetMaxDCAToVertexZ(2);
1390 SetMaxDCAToVertex2D(kFALSE);
1391 SetRequireSigmaToVertex(kFALSE);
1392 SetMaxChi2PerClusterITS(36);
1393 SetMaxDCAToVertexXY(2.4)
1394 SetMaxDCAToVertexZ(3.2)
1395 SetDCaToVertex2D(kTRUE)
1398 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
1401 //RecKine: ITSTPC cuts
1402 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
1404 if(fRejectKinkMother)
1408 Bool_t kinkmotherpass = kTRUE;
1409 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
1411 if(track->GetID() == fListOfmotherkink[kinkmother])
1413 kinkmotherpass = kFALSE;
1417 if(!kinkmotherpass) continue;
1421 if(etrack->GetKinkIndex(0) != 0) continue;
1428 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
1431 //HFEcuts: ITS layers cuts
1432 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
1434 //HFE cuts: TPC PID cleanup
1435 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
1436 //______________________________________________________________________________________
1438 ///_____________________________________________________________
1439 ///QA plots after track selection
1442 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
1443 else fPtMCWithoutLabel->Fill(fPt);
1446 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1448 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1450 if(fMCparticle->IsPhysicalPrimary()) fPtIsPhysicaPrimary->Fill(fPt);
1452 Int_t pdg = fMCparticle->GetPdgCode();
1453 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1455 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1457 if(fMCparticle->IsPhysicalPrimary())
1459 fPtMCparticleReco->Fill(fMCparticle->Pt());
1461 Bool_t MotherFound = FindMother(track->GetLabel());
1464 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());
1465 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
1471 else if(fIsMC && track->GetLabel()>=0)
1473 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1475 fPtIsPhysicaPrimary->Fill(fPt);
1476 fMCtrack = fMCstack->Particle(track->GetLabel());
1478 Int_t pdg = fMCtrack->GetPdgCode();
1479 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1481 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1483 fPtMCparticleReco->Fill(fMCtrack->Pt());
1485 Bool_t MotherFound = FindMother(track->GetLabel());
1488 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());
1489 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
1496 fTPC_p[1]->Fill(fPt,fTPCsignal);
1497 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
1498 Double_t fPtBin[6] = {2,4,6,8,10,15};
1500 TPCNcls = track->GetTPCNcls();
1501 Float_t pos2[3]={0,0,0};
1503 if(track->GetEMCALcluster()>0)
1505 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1506 if(fClus->IsEMCAL())
1508 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1510 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
1512 Float_t Energy = fClus->E();
1513 Float_t EoverP = Energy/track->P();
1514 Float_t M02 = fClus->GetM02();
1515 Float_t M20 = fClus->GetM20();
1516 Float_t ncells = fClus->GetNCells();
1518 /////////////// for Eta Phi distribution
1519 fClus->GetPosition(pos2);
1520 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
1521 Double_t cphi = vpos.Phi();
1522 Double_t ceta = vpos.Eta();
1523 fEtaPhi[1]->Fill(cphi,ceta);
1525 fECluster[1]->Fill(Energy);
1526 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
1529 //for EMCal triggger performance
1531 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
1532 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
1537 //for hadron contamination calculations
1541 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1543 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
1545 if(fTPCnSigma<-3.5){
1546 fEoverP_pt_hadrons->Fill(fPt,EoverP);
1547 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
1551 if(fTPCnSigma < -3.5){
1552 fEoverP_pt_pions->Fill(fPt, EoverP);
1556 if(fTPCnSigma < -3.5 && fTPCnSigma > -10){
1557 fEoverP_pt_pions2->Fill(fPt, EoverP);
1567 for(Int_t i = 0; i < 5; i++)
1569 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1572 if(fTPCnSigma < -5 && fTPCnSigma > -10){
1573 fNcells_hadrons[i]->Fill(ncells);
1575 //hadrons selection using E/p
1576 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
1577 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
1579 //electrons selection using E/p
1580 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1581 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
1586 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1588 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
1589 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
1593 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1595 fPtTrigger_Inc->Fill(fPt);
1596 DiHadronCorrelation(track, iTracks);
1605 //______________________________________________________________
1608 fVtxZ[1]->Fill(fZvtx);
1609 fNTracks[1]->Fill(fNOtrks);
1610 fNClusters[1]->Fill(ClsNo);
1611 //______________________________________________________________
1613 ///______________________________________________________________________
1614 ///Histograms for PID Studies
1615 //Double_t fPtBin[6] = {2,4,6,8,10,15};
1617 for(Int_t i = 0; i < 5; i++)
1619 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1621 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
1624 fTPC_pt[i]->Fill(fTPCsignal);
1625 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
1630 ///QA plots after track selection
1631 ///_____________________________________________________________
1633 //_______________________________________________________
1634 //Correlation Analysis - DiHadron
1637 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1639 fPtTrigger_Inc->Fill(fPt);
1640 DiHadronCorrelation(track, iTracks);
1643 //_______________________________________________________
1646 ///////////////////////////////////////////////////////////////////
1647 ///TPC - efficiency calculation //
1649 /// changing start here
1650 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1652 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1653 Int_t pdg = fMCparticle->GetPdgCode();
1656 if(fMCparticle->IsPhysicalPrimary()){
1659 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1661 Bool_t MotherFound = FindMother(track->GetLabel());
1663 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1664 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1665 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
1672 else if(fIsMC && track->GetLabel()>=0)//ESD
1675 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1676 fMCtrack = fMCstack->Particle(track->GetLabel());
1678 Int_t pdg = fMCtrack->GetPdgCode();
1679 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1681 if(fMCtrack->GetFirstMother()>0){
1682 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1683 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1684 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
1692 ///________________________________________________________________________
1694 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
1695 Int_t pidpassed = 1;
1696 AliHFEpidObject hfetrack;
1697 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
1698 hfetrack.SetRecTrack(track);
1699 hfetrack.SetPP(); //proton-proton analysis
1700 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
1701 fpid->Fill(pidpassed);
1703 if(pidpassed==0) continue;
1704 ///________________________________________________________________________
1707 ////////////////////////////////////////////////////////////////////
1708 ///TPC efficiency calculations
1710 /// changing start here
1711 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1713 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1714 Int_t pdg = fMCparticle->GetPdgCode();
1717 if(fMCparticle->IsPhysicalPrimary()){
1720 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1722 Bool_t MotherFound = FindMother(track->GetLabel());
1724 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1725 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1726 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
1733 else if(fIsMC && track->GetLabel()>=0)//ESD
1736 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1737 fMCtrack = fMCstack->Particle(track->GetLabel());
1739 Int_t pdg = fMCtrack->GetPdgCode();
1740 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1742 if(fMCtrack->GetFirstMother()>0){
1743 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1744 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1745 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
1752 //Eta Cut for TPC only
1753 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1754 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
1757 //Background for TPC only
1758 if(fFillBackground){
1759 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
1763 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
1764 fTPC_p[2]->Fill(fP,fTPCsignal);
1765 TPCNcls = track->GetTPCNcls();
1766 Float_t pos3[3]={0,0,0};
1768 if(track->GetEMCALcluster()>0)
1770 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1771 if(fClus->IsEMCAL())
1774 //________________________________________________________________________
1777 //Cluster timing distribution
1778 if(fUseEMCal && !fIsAOD ){
1779 AliESDCaloCells &cells=*(fESD->GetEMCALCells());
1780 // Int_t nTotalCells = cells.GetNumberOfCells() ;
1781 //Int_t type = cells.GetType();
1782 //for (Int_t icell= 0; icell < nTotalCells; icell++) {
1783 //fTime->Fill(cells.GetTime(icell));
1786 TRefArray* caloClusters = new TRefArray();
1787 fESD->GetEMCALClusters(caloClusters);
1789 Int_t nclus = caloClusters->GetEntries();
1791 //fClusESD = fESD->GetCaloCluster(track->GetEMCALcluster());
1793 for (Int_t icl = 0; icl < nclus; icl++) {
1795 AliESDCaloCluster* clus = (AliESDCaloCluster*)caloClusters->At(icl);
1797 if(fClus->IsEMCAL()){
1798 Float_t ncells = fClus->GetNCells();
1799 UShort_t * index = clus->GetCellsAbsId() ;
1800 UShort_t * index2 = fClus->GetCellsAbsId() ;
1803 for(Int_t i = 0; i < ncells ; i++){
1805 Int_t absId = index[i];
1806 fTime->Fill(fPt,cells.GetCellTime(absId));
1808 Int_t absId2 = index2[i];
1809 fTime2->Fill(fPt,cells.GetCellTime(absId2));
1821 double emctof = fClus->GetTOF();
1822 ftimingEle->Fill(fPt,emctof);
1824 //________________________________________________________________________
1829 /////////////// Residuals
1830 Double_t Dx = fClus->GetTrackDx();
1831 Double_t Dz = fClus->GetTrackDz();
1832 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
1833 for(Int_t i = 0; i < 5; i++)
1835 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1844 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1846 Float_t Energy = fClus->E();
1847 Float_t EoverP = Energy/track->P();
1848 Float_t M02 = fClus->GetM02();
1849 Float_t M20 = fClus->GetM20();
1850 Float_t ncells = fClus->GetNCells();
1851 //----------------------------------------------------------------------------------------
1852 // EtaCut electrons histogram
1854 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1856 if(fUseShowerShapeCut){
1857 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
1858 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
1859 fShowerShapeCut->Fill(M02,M20);
1864 if(!fUseShowerShapeCut){
1865 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
1866 fShowerShapeCut->Fill(M02,M20);
1869 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
1871 //for shower shape cut studies - now with TPC PID Cut
1873 fShowerShapeM02_EoverP->Fill(M02,EoverP);
1874 fShowerShapeM20_EoverP->Fill(M20,EoverP);
1879 //----------------------------------------------------------------------------------------
1883 /////////////// for Eta Phi distribution
1884 fClus->GetPosition(pos3);
1885 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
1886 Double_t cphi = vpos.Phi();
1887 Double_t ceta = vpos.Eta();
1888 fEtaPhi[2]->Fill(cphi,ceta);
1892 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
1894 for(Int_t i = 0; i < 5; i++)
1896 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1899 fR_EoverP[i]->Fill(R, EoverP);
1900 fNcells[i]->Fill(ncells);
1901 fNcells_EoverP[i]->Fill(EoverP, ncells);
1902 fM02_EoverP[i]->Fill(M02,EoverP);
1903 fM20_EoverP[i]->Fill(M20,EoverP);
1904 fECluster_ptbins[i]->Fill(Energy);
1905 fEoverP_ptbins[i]->Fill(EoverP);
1907 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1908 fNcells_electrons[i]->Fill(ncells);
1911 if(M02<0.5 && M20<0.3) {
1912 fEoverP_wSSCut[i]->Fill(EoverP);
1917 fNcells_pt->Fill(fPt, ncells);
1920 ////////////////////////////////////////////////////////////////////
1921 ///EMCal - Efficiency calculations
1923 /// changing start here
1924 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1926 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1927 Int_t pdg = fMCparticle->GetPdgCode();
1930 if(fMCparticle->IsPhysicalPrimary()){
1933 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1935 Bool_t MotherFound = FindMother(track->GetLabel());
1937 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1938 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1939 fPtMC_EMCal_All->Fill(fMCparticle->Pt());
1946 else if(fIsMC && track->GetLabel()>=0)//ESD
1949 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1952 fMCtrack = fMCstack->Particle(track->GetLabel());
1954 Int_t pdg = fMCtrack->GetPdgCode();
1955 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
1957 if(fMCtrack->GetFirstMother()>0){
1958 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1959 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1961 fPtMC_EMCal_All->Fill(fMCtrack->Pt());
1969 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1972 fECluster[2]->Fill(Energy);
1973 //_______________________________________________________
1974 //Correlation Analysis
1977 fPtElec_Inc->Fill(fPt);
1978 //new function to fill non-HFE histos
1979 if(fFillBackground){
1980 Background(track, iTracks, Vtrack, kFALSE);
1983 double emctof2 = fClus->GetTOF();
1984 ftimingEle2->Fill(fPt,emctof2);
1986 if(fCorrelationFlag)
1988 ElectronHadronCorrelation(track, iTracks, Vtrack);
1991 //_______________________________________________________
1993 ////////////////////////////////////////////////////////////////////
1994 ///EMCal - efficiency calculations
1996 if(track->Charge()<0) fCharge_n->Fill(fPt);
1997 if(track->Charge()>0) fCharge_p->Fill(fPt);
2000 /// changing start here
2001 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2003 if(track->Charge()<0) fCharge_n->Fill(fPt);
2004 if(track->Charge()>0) fCharge_p->Fill(fPt);
2006 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2007 Int_t pdg = fMCparticle->GetPdgCode();
2010 if(fMCparticle->IsPhysicalPrimary()){
2013 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2015 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCparticle->Pt()); //numerator for the total efficiency
2018 Bool_t MotherFound = FindMother(track->GetLabel());
2020 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2021 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2022 fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
2029 else if(fIsMC && track->GetLabel()>=0)//ESD
2031 if(track->Charge()<0) fCharge_n->Fill(fPt);
2032 if(track->Charge()>0) fCharge_p->Fill(fPt);
2034 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2036 Bool_t MotherFound = FindMother(track->GetLabel());
2037 fMCtrack = fMCstack->Particle(track->GetLabel());
2040 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2041 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency
2047 Int_t pdg = fMCtrack->GetPdgCode();
2048 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
2050 if(fMCtrack->GetFirstMother()>0){
2051 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2052 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2054 fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());
2060 ///////////////////////////////////////////////////////////////////
2068 //______________________________________________________________
2071 fVtxZ[2]->Fill(fZvtx);
2072 fNTracks[2]->Fill(fNOtrks);
2073 fNClusters[2]->Fill(ClsNo);
2075 //______________________________________________________________
2077 //_______________________________________________________
2078 //Correlation Analysis
2081 fPtElec_Inc->Fill(fPt);
2083 if(fCorrelationFlag)
2085 ElectronHadronCorrelation(track, iTracks, Vtrack);
2088 //_______________________________________________________
2090 ///________________________________________________________________________
2093 //__________________________________________________________________
2094 //Event Mixing Analysis
2096 if(fEventMixingFlag)
2098 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2100 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2102 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!
2107 //__________________________________________________________________
2109 delete fListOfmotherkink;
2110 PostData(1, fOutputList);
2113 //______________________________________________________________________
2114 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
2116 //Draw result to the screen
2117 //Called once at the end of the query
2119 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
2123 printf("ERROR: Output list not available\n");
2128 //______________________________________________________________________
2129 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
2131 //Check single track cuts for a given cut step
2132 //Note this function is called inside the UserExec function
2133 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
2134 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
2139 //______________________________________________________________________
2142 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
2144 ///_________________________________________________________________
2148 if(track->GetLabel() < 0)
2150 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2156 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2158 if(fMCparticle->GetMother()<0) return;
2160 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2162 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2165 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2166 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2171 fMCtrack = fMCstack->Particle(track->GetLabel());
2173 if(fMCtrack->GetFirstMother()<0) return;
2175 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2177 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2180 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2181 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2185 ///_________________________________________________________________
2187 //________________________________________________
2188 //Associated particle cut
2189 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2190 fPartnerCuts->SetRequireITSRefit(kTRUE);
2191 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2192 fPartnerCuts->SetEtaRange(-0.9,0.9);
2193 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2194 fPartnerCuts->SetMinNClustersTPC(80);
2195 fPartnerCuts->SetPtRange(0.3,1e10);
2196 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2197 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2198 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2199 //_________________________________________________
2201 ///#################################################################
2202 //Non-HFE reconstruction
2203 fNonHFE = new AliSelectNonHFE();
2204 fNonHFE->SetAODanalysis(fIsAOD);
2205 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2206 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2207 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2208 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2209 fNonHFE->SetAlgorithm("DCA"); //KF
2210 fNonHFE->SetPIDresponse(fPidResponse);
2211 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2212 //fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2215 fNonHFE->SetHistAngleBack(fOpAngleBack);
2216 fNonHFE->SetHistAngle(fOpAngle);
2217 fNonHFE->SetHistDCABack(fDCABack);
2218 fNonHFE->SetHistDCA(fDCA);
2219 fNonHFE->SetHistMassBack(fInvMassBack);
2220 fNonHFE->SetHistMass(fInvMass);
2223 fNonHFE->SetHistAngleBack(fOpAngleBack2);
2224 fNonHFE->SetHistAngle(fOpAngle2);
2225 fNonHFE->SetHistDCABack(fDCABack2);
2226 fNonHFE->SetHistDCA(fDCA2);
2227 fNonHFE->SetHistMassBack(fInvMassBack2);
2228 fNonHFE->SetHistMass(fInvMass2);
2231 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2235 //Electron Information
2236 Double_t fPhiE = -999;
2237 Double_t fEtaE = -999;
2238 Double_t fPtE = -999;
2239 fPhiE = track->Phi();
2240 fEtaE = track->Eta();
2243 ///_________________________________________________________________
2249 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2252 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2253 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2257 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2258 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2264 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2267 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2268 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2272 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2273 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2278 ///_________________________________________________________________
2282 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2283 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2287 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2288 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2297 //______________________________________________________________________
2298 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
2301 ///_________________________________________________________________
2305 if(track->GetLabel() < 0)
2307 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2313 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2315 if(fMCparticle->GetMother()<0) return;
2317 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2319 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2322 fPtBackgroundBeforeReco->Fill(track->Pt());
2327 fMCtrack = fMCstack->Particle(track->GetLabel());
2329 if(fMCtrack->GetFirstMother()<0) return;
2331 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2333 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2336 fPtBackgroundBeforeReco->Fill(track->Pt());
2340 ///_________________________________________________________________
2342 //________________________________________________
2343 //Associated particle cut
2344 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2345 fPartnerCuts->SetRequireITSRefit(kTRUE);
2346 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2347 fPartnerCuts->SetEtaRange(-0.9,0.9);
2348 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2349 fPartnerCuts->SetMinNClustersTPC(80);
2350 fPartnerCuts->SetPtRange(0.3,1e10);
2351 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2352 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2353 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2354 //_________________________________________________
2356 ///#################################################################
2357 //Non-HFE reconstruction
2358 fNonHFE = new AliSelectNonHFE();
2359 fNonHFE->SetAODanalysis(fIsAOD);
2360 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2361 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2362 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2363 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2364 fNonHFE->SetAlgorithm("DCA"); //KF
2365 fNonHFE->SetPIDresponse(fPidResponse);
2366 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2367 //fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2370 fNonHFE->SetHistAngleBack(fOpAngleBack);
2371 fNonHFE->SetHistAngle(fOpAngle);
2372 fNonHFE->SetHistDCABack(fDCABack);
2373 fNonHFE->SetHistDCA(fDCA);
2374 fNonHFE->SetHistMassBack(fInvMassBack);
2375 fNonHFE->SetHistMass(fInvMass);
2377 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2379 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
2380 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
2381 Bool_t fUlsIsPartner = kFALSE;
2382 Bool_t fLsIsPartner = kFALSE;
2383 ///#################################################################
2386 //Electron Information
2387 Double_t fPhiE = -999;
2388 Double_t fEtaE = -999;
2389 Double_t fPhiH = -999;
2390 Double_t fEtaH = -999;
2391 Double_t fDphi = -999;
2392 Double_t fDeta = -999;
2393 Double_t fPtE = -999;
2394 Double_t fPtH = -999;
2396 Double_t pi = TMath::Pi();
2398 fPhiE = track->Phi();
2399 fEtaE = track->Eta();
2403 ///_________________________________________________________________
2409 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2411 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2412 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2417 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2419 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2420 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2424 ///_________________________________________________________________
2427 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2428 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2434 //__________________________________________________________________
2435 //Event Mixing Analysis - Hadron Loop
2437 if(fEventMixingFlag)
2439 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2441 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2443 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
2445 fPoolNevents->Fill(fPool->GetCurrentNEvents());
2447 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
2449 TObjArray* bgTracks = fPool->GetEvent(jMix);
2451 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
2453 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
2454 if (NULL == MixedTrack) continue;
2456 fPhiH = MixedTrack->Phi();
2457 fEtaH = MixedTrack->Eta();
2458 fPtH = MixedTrack->Pt();
2460 if(fPtH>fPtE || fPtH<1) continue;
2462 fDphi = fPhiE - fPhiH;
2464 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2465 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2467 fDeta = fEtaE - fEtaH;
2469 Double_t fPtBin[6] = {2,4,6,8,10,15};
2471 for(Int_t i = 0; i < 5; i++)
2473 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2475 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
2477 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
2478 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
2480 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2481 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2485 // TODO your code: do event mixing with current event and bgTracks
2486 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
2491 //__________________________________________________________________
2493 //__________________________________________________________________
2494 //Same Event Analysis - Hadron Loop
2495 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2497 if(trackIndex==iTracks) continue;
2499 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2502 printf("ERROR: Could not receive track %d\n", iTracks);
2506 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2510 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2511 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2512 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2513 if(atrack2->GetTPCNcls() < 80) continue;
2517 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2518 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2521 fPhiH = track2->Phi();
2522 fEtaH = track2->Eta();
2523 fPtH = track2->Pt();
2525 if(fPtH>fPtE || fPtH<1) continue;
2527 fDphi = fPhiE - fPhiH;
2529 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2530 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2532 fDeta = fEtaE - fEtaH;
2534 Double_t fPtBin[6] = {2,4,6,8,10,15};
2536 //______________________________________________________________
2537 //Check if this track is a Non-HFE partner
2538 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
2540 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
2542 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
2544 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
2546 //______________________________________________________________
2548 for(Int_t i = 0; i < 5; i++)
2550 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2552 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
2554 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
2555 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
2556 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
2557 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
2559 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2560 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2561 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2562 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2568 //____________________________________________________________________________________________________________
2569 //Create a TObjArray with selected hadrons, for the mixed event analysis
2570 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
2572 fTracksClone = new TObjArray;
2573 fTracksClone->SetOwner(kTRUE);
2575 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2577 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2580 printf("ERROR: Could not receive track %d\n", iTracks);
2584 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2588 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2589 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2590 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2591 if(atrack2->GetTPCNcls() < 80) continue;
2595 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2596 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2599 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
2601 return fTracksClone;
2603 //____________________________________________________________________________________________________________
2605 //______________________________________________________________________
2606 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
2608 //________________________________________________
2609 //Associated particle cut
2610 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2611 fPartnerCuts->SetRequireITSRefit(kTRUE);
2612 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2613 fPartnerCuts->SetEtaRange(-0.9,0.9);
2614 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2615 fPartnerCuts->SetMinNClustersTPC(80);
2616 fPartnerCuts->SetPtRange(0.3,1e10);
2617 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2618 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2619 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2620 //_________________________________________________
2622 //Electron Information
2623 Double_t fPhiE = -999;
2624 Double_t fEtaE = -999;
2625 Double_t fPhiH = -999;
2626 Double_t fEtaH = -999;
2627 Double_t fDphi = -999;
2628 Double_t fDeta = -999;
2629 Double_t fPtE = -999;
2630 Double_t fPtH = -999;
2632 Double_t pi = TMath::Pi();
2634 fPhiE = track->Phi();
2635 fEtaE = track->Eta();
2638 //__________________________________________________________________
2639 //Same Event Analysis - Hadron Loop
2640 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2642 if(trackIndex==iTracks) continue;
2644 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2647 printf("ERROR: Could not receive track %d\n", iTracks);
2651 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2655 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2656 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2657 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2658 if(atrack2->GetTPCNcls() < 80) continue;
2662 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2663 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2666 fPhiH = track2->Phi();
2667 fEtaH = track2->Eta();
2668 fPtH = track2->Pt();
2670 if(fPtH>fPtE || fPtH<1) continue;
2672 fDphi = fPhiE - fPhiH;
2674 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2675 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2677 fDeta = fEtaE - fEtaH;
2679 Double_t fPtBin[6] = {2,4,6,8,10,15};
2681 for(Int_t i = 0; i < 5; i++)
2683 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2685 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
2690 //____________________________________________________________________________________________________________
2692 //______________________________________________________________________
2693 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
2700 fIsFromPi0 = kFALSE;
2701 fIsFromEta = kFALSE;
2702 fIsFromGamma = kFALSE;
2704 if(mcIndex < 0 || !fIsMC)
2710 Int_t mpdg = -99999;
2711 Int_t gmpdg = -99999;
2712 Int_t ggmpdg = -99999;
2713 Int_t gggmpdg = -99999;
2717 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
2719 pdg = TMath::Abs(fMCparticle->GetPdgCode());
2729 fIsFromPi0 = kFALSE;
2730 fIsFromEta = kFALSE;
2731 fIsFromGamma = kFALSE;
2735 if(fMCparticle->GetMother()<0)
2742 fIsFromPi0 = kFALSE;
2743 fIsFromEta = kFALSE;
2744 fIsFromGamma = kFALSE;
2748 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2749 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
2751 if(fMCparticleMother->GetMother()<0)
2759 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
2760 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
2761 if(fMCparticleGMother->GetMother()<0)
2768 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
2769 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
2770 if(fMCparticleGGMother->GetMother()<0)
2776 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
2777 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
2784 fMCtrack = fMCstack->Particle(mcIndex);
2786 pdg = TMath::Abs(fMCtrack->GetPdgCode());
2795 fIsFromPi0 = kFALSE;
2796 fIsFromEta = kFALSE;
2797 fIsFromGamma = kFALSE;
2801 if(fMCtrack->GetFirstMother()<0)
2808 fIsFromPi0 = kFALSE;
2809 fIsFromEta = kFALSE;
2810 fIsFromGamma = kFALSE;
2814 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2815 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
2817 if(fMCtrackMother->GetFirstMother()<0)
2825 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
2826 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
2828 if(fMCtrackGMother->GetFirstMother()<0)
2835 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
2836 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
2838 if(fMCtrackGGMother->GetFirstMother()<0)
2844 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
2845 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
2851 //Tag Electron Source
2852 if(mpdg==111 || mpdg==221 || mpdg==22)
2860 fIsFromPi0 = kFALSE;
2861 fIsFromEta = kFALSE;
2862 fIsFromGamma = kFALSE;
2864 if(mpdg==111) fIsFromPi0 = kFALSE;
2865 if(mpdg==221)fIsFromEta = kFALSE;
2866 if(mpdg==22) fIsFromGamma = kFALSE;
2875 fIsFromPi0 = kFALSE;
2876 fIsFromEta = kFALSE;
2877 fIsFromGamma = kFALSE;
2884 if(mpdg>400 && mpdg<500)
2886 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
2901 else if(mpdg>500 && mpdg<600)