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: January 28, 2014. //
24 // Elienos Pereira de Oliveira Filho (epereira@cern.ch) //
25 // Cristiane Jahnke (cristiane.jahnke@cern.ch) //
27 ////////////////////////////////////////////////////////////////////////
35 #include "AliAnalysisTask.h"
36 #include "AliAnalysisManager.h"
37 #include "AliESDEvent.h"
38 #include "AliAODEvent.h"
39 #include "AliVEvent.h"
40 #include "AliESDInputHandler.h"
41 #include "AliESDtrackCuts.h"
42 #include "AliESDCaloCluster.h"
43 #include "AliESDCaloCells.h"
44 #include "AliEMCALTrack.h"
45 #include "AliExternalTrackParam.h"
46 #include "AliPhysicsSelection.h"
47 #include "TGeoGlobalMagField.h"
51 #include "AliCentrality.h"
52 #include "AliAODMCParticle.h"
53 #include "AliAODMCHeader.h"
55 #include "AliPIDResponse.h"
56 #include "AliHFEcontainer.h"
57 #include "AliHFEcuts.h"
58 #include "AliHFEpid.h"
59 #include "AliHFEpidBase.h"
60 #include "AliHFEpidQAmanager.h"
61 #include "AliHFEtools.h"
62 #include "AliCFContainer.h"
63 #include "AliCFManager.h"
64 #include "AliSelectNonHFE.h"
65 #include "AliHFEpidTPC.h"
66 #include "AliAnalysisTaskEMCalHFEpA.h"
68 #include "THnSparse.h"
69 #include "TLorentzVector.h"
72 #include "AliESDHandler.h"
73 #include "AliMCEventHandler.h"
74 #include "AliMCEvent.h"
76 #include "TParticle.h"
78 #include "AliAnalysisTaskSE.h"
79 #include "TRefArray.h"
82 #include "TGeoManager.h"
85 #include "AliKFParticle.h"
86 #include "AliKFVertex.h"
87 #include "AliVParticle.h"
88 #include "AliVTrack.h"
89 #include "AliEventPoolManager.h"
90 #include "TObjArray.h"
91 //______________________________________________________________________
93 //______________________________________________________________________
94 ClassImp(AliAnalysisTaskEMCalHFEpA)
96 //______________________________________________________________________
97 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA(const char *name)
98 : AliAnalysisTaskSE(name)
102 ,fUseShowerShapeCut(kFALSE)
103 ,fFillBackground(kFALSE)
104 ,fAssocWithSPD(kFALSE)
115 ,fIsFromGamma(kFALSE)
119 ,fPartnerCuts(new AliESDtrackCuts())
122 ,fNonHFE(new AliSelectNonHFE())
127 ,fHasCentralitySelection(kFALSE)
129 ,fCentralityHistPass(0)
151 ,fPtElec_ULS_weight(0)
152 ,fPtElec_LS_weight(0)
153 ,fPtElec_ULS2_weight(0)
154 ,fPtElec_LS2_weight(0)
169 ,fShowerShapeM02_EoverP(0)
170 ,fShowerShapeM20_EoverP(0)
194 ,fNcells_electrons(0)
201 ,fTPCnsigma_eta_electrons(0)
202 ,fTPCnsigma_eta_hadrons(0)
205 ,fnsigma_p_EoverPcut(0)
206 ,fEoverP_pt_pions2(0)
208 ,fEoverP_pt_hadrons(0)
214 ,fCEtaPhi_ULS_Weight(0)
215 ,fCEtaPhi_LS_Weight(0)
216 ,fCEtaPhi_ULS_NoP_Weight(0)
217 ,fCEtaPhi_LS_NoP_Weight(0)
253 ,fAngleCutFlag(kFALSE)
254 ,fChi2CutFlag(kFALSE)
257 ,fAssHadronPtMin(0.5)
258 ,fAssHadronPtMax(2.0)
260 ,fPtBackgroundBeforeReco(0)
261 ,fPtBackgroundBeforeReco2(0)
262 ,fPtBackgroundBeforeReco_weight(0)
263 ,fPtBackgroundBeforeReco2_weight(0)
266 ,fPtBackgroundAfterReco(0)
272 ,fPtMCparticleAll_nonPrimary(0)
273 ,fPtMCparticleAlle_nonPrimary(0)
274 ,fPtMCparticleAlle_Primary(0)
275 ,fPtMCparticleReco(0)
276 ,fPtMCparticleReco_nonPrimary(0)
277 ,fPtMCparticleAllHfe1(0)
278 ,fPtMCparticleRecoHfe1(0)
279 ,fPtMCparticleAllHfe2(0)
280 ,fPtMCparticleRecoHfe2(0)
281 ,fPtMCelectronAfterAll(0)
282 ,fPtMCelectronAfterAll_nonPrimary(0)
283 ,fPtMCelectronAfterAll_Primary(0)
287 ,fPtMC_EMCal_Selected(0)
289 ,fPtMC_TPC_Selected(0)
291 ,fPtMCWithoutLabel(0)
292 ,fPtIsPhysicaPrimary(0)
295 ,fPID(new AliHFEpid("hfePid"))
298 ,fRejectKinkMother(kFALSE)
303 ,fMCtrackGGGMother(0)
307 ,fMCparticleMother(0)
308 ,fMCparticleGMother(0)
309 ,fMCparticleGGMother(0)
310 ,fMCparticleGGGMother(0)
320 ,fCEtaPhi_ULS_Weight_EM(0)
321 ,fCEtaPhi_LS_Weight_EM(0)
324 ,fCEtaPhi_Inc_DiHadron(0)
328 // Define input and output slots here
329 // Input slot #0 works with a TChain
330 DefineInput(0, TChain::Class());
331 // Output slot #0 id reserved by the base class for AOD
332 // Output slot #1 writes into a TH1 container
333 // DefineOutput(1, TH1I::Class());
334 DefineOutput(1, TList::Class());
335 // DefineOutput(3, TTree::Class());
338 //________________________________________________________________________
339 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
340 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
344 ,fUseShowerShapeCut(kFALSE)
345 ,fFillBackground(kFALSE)
346 ,fAssocWithSPD(kFALSE)
356 ,fIsFromGamma(kFALSE)
360 ,fPartnerCuts(new AliESDtrackCuts())
363 ,fNonHFE(new AliSelectNonHFE())
368 ,fHasCentralitySelection(kFALSE)
370 ,fCentralityHistPass(0)
393 ,fPtElec_ULS_weight(0)
394 ,fPtElec_LS_weight(0)
395 ,fPtElec_ULS2_weight(0)
396 ,fPtElec_LS2_weight(0)
410 ,fShowerShapeM02_EoverP(0)
411 ,fShowerShapeM20_EoverP(0)
435 ,fNcells_electrons(0)
442 ,fTPCnsigma_eta_electrons(0)
443 ,fTPCnsigma_eta_hadrons(0)
446 ,fnsigma_p_EoverPcut(0)
447 ,fEoverP_pt_pions2(0)
449 ,fEoverP_pt_hadrons(0)
455 ,fCEtaPhi_ULS_Weight(0)
456 ,fCEtaPhi_LS_Weight(0)
457 ,fCEtaPhi_ULS_NoP_Weight(0)
458 ,fCEtaPhi_LS_NoP_Weight(0)
493 ,fAngleCutFlag(kFALSE)
494 ,fChi2CutFlag(kFALSE)
497 ,fAssHadronPtMin(0.5)
498 ,fAssHadronPtMax(2.0)
500 ,fPtBackgroundBeforeReco(0)
501 ,fPtBackgroundBeforeReco2(0)
502 ,fPtBackgroundBeforeReco_weight(0)
503 ,fPtBackgroundBeforeReco2_weight(0)
506 ,fPtBackgroundAfterReco(0)
513 ,fPtMCparticleAll_nonPrimary(0)
514 ,fPtMCparticleAlle_nonPrimary(0)
515 ,fPtMCparticleAlle_Primary(0)
516 ,fPtMCparticleReco(0)
517 ,fPtMCparticleReco_nonPrimary(0)
519 ,fPtMCparticleAllHfe1(0)
520 ,fPtMCparticleRecoHfe1(0)
521 ,fPtMCparticleAllHfe2(0)
522 ,fPtMCparticleRecoHfe2(0)
523 ,fPtMCelectronAfterAll(0)
524 ,fPtMCelectronAfterAll_nonPrimary(0)
525 ,fPtMCelectronAfterAll_Primary(0)
530 ,fPtMC_EMCal_Selected(0)
532 ,fPtMC_TPC_Selected(0)
534 ,fPtMCWithoutLabel(0)
535 ,fPtIsPhysicaPrimary(0)
538 ,fPID(new AliHFEpid("hfePid"))
541 ,fRejectKinkMother(kFALSE)
546 ,fMCtrackGGGMother(0)
550 ,fMCparticleMother(0)
551 ,fMCparticleGMother(0)
552 ,fMCparticleGGMother(0)
553 ,fMCparticleGGGMother(0)
563 ,fCEtaPhi_ULS_Weight_EM(0)
564 ,fCEtaPhi_LS_Weight_EM(0)
567 ,fCEtaPhi_Inc_DiHadron(0)
571 // Define input and output slots here
572 // Input slot #0 works with a TChain
573 DefineInput(0, TChain::Class());
574 // Output slot #0 id reserved by the base class for AOD
575 // Output slot #1 writes into a TH1 container
576 // DefineOutput(1, TH1I::Class());
577 DefineOutput(1, TList::Class());
578 //DefineOutput(3, TTree::Class());
581 //______________________________________________________________________
582 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
591 //______________________________________________________________________
592 //Create Output Objects
593 //Here we can define the histograms and others output files
595 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
597 //______________________________________________________________________
599 if(!fPID->GetNumberOfPIDdetectors())
601 fPID->AddDetector("TPC", 0);
604 fPID->SortDetectors();
606 fPIDqa = new AliHFEpidQAmanager();
607 fPIDqa->Initialize(fPID);
608 //______________________________________________________________________
610 //______________________________________________________________________
611 //Initialize correction Framework and Cuts
612 fCFM = new AliCFManager;
613 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
614 fCFM->SetNStepParticle(kNcutSteps);
615 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
619 AliWarning("Cuts not available. Default cuts will be used");
620 fCuts = new AliHFEcuts;
621 fCuts->CreateStandardCuts();
624 fCuts->Initialize(fCFM);
625 //______________________________________________________________________
627 ///______________________________________________________________________
630 fOutputList = new TList();
631 fOutputList->SetOwner();
634 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
636 //Store the number of events
638 fNevent = new TH1F("fNevent","Number of Events",10,-0.5,10);
639 //And then, add to the output list
640 fOutputList->Add(fNevent);
642 fpid = new TH1F("fpid","PID flag",5,0,5);
643 fOutputList->Add(fpid);
646 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
648 fPtElec_ULS = new TH1F("fPtElec_ULS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
649 fPtElec_LS = new TH1F("fPtElec_LS","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
651 fPtElec_ULS_weight = new TH1F("fPtElec_ULS_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
652 fPtElec_LS_weight = new TH1F("fPtElec_LS_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
654 fTOF01 = new TH2F("fTOF01","",200,-20,20,200,-20,20);
655 fTOF02 = new TH2F("fTOF02","",200,-20,20,200,-20,20);
656 fTOF03 = new TH2F("fTOF03","",200,-20,20,200,-20,20);
659 fPtElec_ULS2 = new TH1F("fPtElec_ULS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
660 fPtElec_LS2 = new TH1F("fPtElec_LS2","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
662 fPtElec_ULS2_weight = new TH1F("fPtElec_ULS2_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
663 fPtElec_LS2_weight = new TH1F("fPtElec_LS2_weight","Inclusive Electrons; p_{T} (GeV/c); Count",300,0,30);
667 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",300,0,30);
668 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
669 fShowerShapeCut = new TH2F("fShowerShapeCut","Shower Shape;M02;M20",500,0,1.8,500,0,1.8);
670 fEtaPhi_num=new TH2F("fEtaPhi_num","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
671 fEtaPhi_den=new TH2F("fEtaPhi_den","#eta x #phi track;#phi;#eta",200,0.,5,50,-1.,1.);
674 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
675 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
680 fTime = new TH2D("fTime","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
681 fTime2 = new TH2D("fTime2","Cells Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
684 ftimingEle = new TH2D("ftimingEle","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
685 ftimingEle2 = new TH2D("ftimingEle2","Cluster Time; p_{T} (GeV/c); Time (s)",300,0,30,1000,1e-8,1e-5);
687 fShowerShape_ha = new TH2F("fShowerShape_ha","Shower Shape hadrons;M02;M20",500,0,1.8,500,0,1.8);
688 fShowerShape_ele = new TH2F("fShowerShape_ele","Shower Shape electrons;M02;M20",500,0,1.8,500,0,1.8);
690 fShowerShapeM02_EoverP = new TH2F("fShowerShapeM02_EoverP","Shower Shape;M02;E/p",500,0,1.8,500,0,1.8);
691 fShowerShapeM20_EoverP = new TH2F("fShowerShapeM20_EoverP","Shower Shape;M20;E/p",500,0,1.8,500,0,1.8);
695 fOutputList->Add(fTOF01);
696 fOutputList->Add(fTOF02);
697 fOutputList->Add(fTOF03);
699 fOutputList->Add(fEtaPhi_num);
700 fOutputList->Add(fEtaPhi_den);
702 fOutputList->Add(fPtElec_Inc);
703 fOutputList->Add(fPtElec_ULS);
704 fOutputList->Add(fPtElec_LS);
705 fOutputList->Add(fPtElec_ULS_weight);
706 fOutputList->Add(fPtElec_LS_weight);
709 fOutputList->Add(fPtElec_ULS2);
710 fOutputList->Add(fPtElec_LS2);
711 fOutputList->Add(fPtElec_ULS2_weight);
712 fOutputList->Add(fPtElec_LS2_weight);
716 fOutputList->Add(fPtTrigger_Inc);
717 fOutputList->Add(fTPCnsigma_pt_2D);
718 fOutputList->Add(fShowerShapeCut);
720 fOutputList->Add(fCharge_n);
721 fOutputList->Add(fCharge_p);
726 fOutputList->Add(fTime);
727 fOutputList->Add(fTime2);
731 fOutputList->Add(ftimingEle);
732 fOutputList->Add(ftimingEle2);
734 fOutputList->Add(fShowerShape_ha);
735 fOutputList->Add(fShowerShape_ele);
737 fOutputList->Add(fShowerShapeM02_EoverP);
738 fOutputList->Add(fShowerShapeM20_EoverP);
747 //Step 1: Before Track cuts
751 fEoverP_pt = new TH2F *[3];
752 fTPC_p = new TH2F *[3];
753 fTPCnsigma_p = new TH2F *[3];
755 fECluster= new TH1F *[3];
756 fEtaPhi= new TH2F *[3];
757 fVtxZ= new TH1F *[3];
758 fEtad= new TH1F *[3];
759 fNTracks= new TH1F *[3];
760 fNClusters= new TH1F *[3];
761 fTPCNcls_EoverP= new TH2F *[3];
762 fTPCNcls_pid=new TH2F *[4];
764 for(Int_t i = 0; i < 3; i++)
766 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
767 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);
768 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
771 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
772 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
773 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
774 fEtad[i]= new TH1F(Form("fEtad%d",i),"Eta distribution",200, -1.2,1.2);
775 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,5000);
776 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
777 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
781 fOutputList->Add(fEoverP_pt[i]);
782 fOutputList->Add(fTPC_p[i]);
783 fOutputList->Add(fTPCnsigma_p[i]);
786 fOutputList->Add(fECluster[i]);
787 fOutputList->Add(fEtaPhi[i]);
788 fOutputList->Add(fVtxZ[i]);
789 fOutputList->Add(fEtad[i]);
790 fOutputList->Add(fNTracks[i]);
791 fOutputList->Add(fNClusters[i]);
792 fOutputList->Add(fTPCNcls_EoverP[i]);
795 for(Int_t i = 0; i < 4; i++)
797 fTPCNcls_pid[i]= new TH2F(Form("fTPCNcls_pid%d",i),"fTPCNcls_pid;NCls;NCls for PID",200,0,200,200,0,200);
798 fOutputList->Add(fTPCNcls_pid[i]);
802 Int_t fPtBin[7] = {1,2,4,6,8,10,15};
804 fEoverP_tpc = new TH2F *[6];
805 fTPC_pt = new TH1F *[6];
806 fTPCnsigma_pt = new TH1F *[6];
811 fR_EoverP=new TH2F *[6];
812 fNcells=new TH1F *[6];
813 fNcells_EoverP=new TH2F *[6];
814 fM02_EoverP= new TH2F *[6];
815 fM20_EoverP= new TH2F *[6];
816 fEoverP_ptbins=new TH1F *[6];
817 fECluster_ptbins=new TH1F *[6];
818 fEoverP_wSSCut=new TH1F *[6];
819 fNcells_electrons=new TH1F *[6];
820 fNcells_hadrons=new TH1F *[6];
821 fTPCnsigma_eta_electrons=new TH2F *[6];
822 fTPCnsigma_eta_hadrons=new TH2F *[6];
826 fCEtaPhi_Inc = new TH2F *[6];
827 fCEtaPhi_Inc_DiHadron = new TH2F *[6];
829 fCEtaPhi_ULS = new TH2F *[6];
830 fCEtaPhi_LS = new TH2F *[6];
831 fCEtaPhi_ULS_NoP = new TH2F *[6];
832 fCEtaPhi_LS_NoP = new TH2F *[6];
834 fCEtaPhi_ULS_Weight = new TH2F *[6];
835 fCEtaPhi_LS_Weight = new TH2F *[6];
836 fCEtaPhi_ULS_NoP_Weight = new TH2F *[6];
837 fCEtaPhi_LS_NoP_Weight = new TH2F *[6];
839 fCEtaPhi_Inc_EM = new TH2F *[6];
841 fCEtaPhi_ULS_EM = new TH2F *[6];
842 fCEtaPhi_LS_EM = new TH2F *[6];
844 fCEtaPhi_ULS_Weight_EM = new TH2F *[6];
845 fCEtaPhi_LS_Weight_EM = new TH2F *[6];
847 fInvMass = new TH1F("fInvMass","",200,0,0.3);
848 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
849 fDCA = new TH1F("fDCA","",200,0,1);
850 fDCABack = new TH1F("fDCABack","",200,0,1);
851 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
852 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
854 fOutputList->Add(fInvMass);
855 fOutputList->Add(fInvMassBack);
856 fOutputList->Add(fDCA);
857 fOutputList->Add(fDCABack);
858 fOutputList->Add(fOpAngle);
859 fOutputList->Add(fOpAngleBack);
864 fInvMass = new TH1F("fInvMass","",200,0,0.3);
865 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
866 fDCA = new TH1F("fDCA","",200,0,1);
867 fDCABack = new TH1F("fDCABack","",200,0,1);
868 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
869 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
871 fOutputList->Add(fInvMass);
872 fOutputList->Add(fInvMassBack);
873 fOutputList->Add(fDCA);
874 fOutputList->Add(fDCABack);
875 fOutputList->Add(fOpAngle);
876 fOutputList->Add(fOpAngleBack);
878 //histos for TPC-only
879 fInvMass2 = new TH1F("fInvMass2","",200,0,0.3);
880 fInvMassBack2 = new TH1F("fInvMassBack2","",200,0,0.3);
881 fDCA2 = new TH1F("fDCA2","",200,0,1);
882 fDCABack2 = new TH1F("fDCABack2","",200,0,1);
883 fOpAngle2 = new TH1F("fOpAngle2","",200,0,0.5);
884 fOpAngleBack2 = new TH1F("fOpAngleBack2","",200,0,0.5);
886 fOutputList->Add(fInvMass2);
887 fOutputList->Add(fInvMassBack2);
888 fOutputList->Add(fDCA2);
889 fOutputList->Add(fDCABack2);
890 fOutputList->Add(fOpAngle2);
891 fOutputList->Add(fOpAngleBack2);
895 for(Int_t i = 0; i < 6; i++)
897 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);
898 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);
899 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);
901 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);
902 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);
903 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);
904 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);
905 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);
906 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);
907 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);
908 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);
909 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);
910 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);
911 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);
912 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);
913 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);
914 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);
915 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);
917 fOutputList->Add(fEoverP_tpc[i]);
918 fOutputList->Add(fTPC_pt[i]);
919 fOutputList->Add(fTPCnsigma_pt[i]);
921 fOutputList->Add(fEta[i]);
922 fOutputList->Add(fPhi[i]);
923 fOutputList->Add(fR[i]);
924 fOutputList->Add(fR_EoverP[i]);
925 fOutputList->Add(fNcells[i]);
926 fOutputList->Add(fNcells_electrons[i]);
927 fOutputList->Add(fNcells_hadrons[i]);
928 fOutputList->Add(fNcells_EoverP[i]);
929 fOutputList->Add(fECluster_ptbins[i]);
930 fOutputList->Add(fEoverP_ptbins[i]);
931 fOutputList->Add(fEoverP_wSSCut[i]);
932 fOutputList->Add(fM02_EoverP[i]);
933 fOutputList->Add(fM20_EoverP[i]);
934 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
935 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
940 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);
941 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);
943 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);
944 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);
945 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);
946 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);
948 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);
949 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);
950 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);
951 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);
953 fOutputList->Add(fCEtaPhi_Inc[i]);
954 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
956 fOutputList->Add(fCEtaPhi_ULS[i]);
957 fOutputList->Add(fCEtaPhi_LS[i]);
958 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
959 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
961 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
962 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
963 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
964 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
968 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);
970 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);
971 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);
973 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);
974 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);
976 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
978 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
979 fOutputList->Add(fCEtaPhi_LS_EM[i]);
981 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
982 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
988 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
989 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
993 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
994 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
996 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
997 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
999 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
1000 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
1003 fOutputList->Add(fTPCnsigma_eta);
1004 fOutputList->Add(fTPCnsigma_phi);
1006 fOutputList->Add(fNcells_pt);
1007 fOutputList->Add(fEoverP_pt_pions);
1009 fOutputList->Add(ftpc_p_EoverPcut);
1010 fOutputList->Add(fnsigma_p_EoverPcut);
1012 fOutputList->Add(fEoverP_pt_pions2);
1013 fOutputList->Add(fEoverP_pt_hadrons);
1018 //__________________________________________________________________
1019 //Efficiency studies
1022 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{T} (GeV/c);Count",300,0,30);
1023 fPtBackgroundBeforeReco_weight = new TH1F("fPtBackgroundBeforeReco_weight",";p_{T} (GeV/c);Count",300,0,30);
1024 if(fFillBackground)fPtBackgroundBeforeReco2 = new TH1F("fPtBackgroundBeforeReco2",";p_{T} (GeV/c);Count",300,0,30);
1025 if(fFillBackground)fPtBackgroundBeforeReco2_weight = new TH1F("fPtBackgroundBeforeReco2_weight",";p_{T} (GeV/c);Count",300,0,30);
1026 fpT_m_electron= new TH2F("fpT_m_electron","fpT_m_electron",300,0,30,300,0,30);
1027 fpT_gm_electron= new TH2F("fpT_gm_electron","fpT_gm_electron",300,0,30,300,0,30);
1029 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{T} (GeV/c);Count",300,0,30);
1030 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{T} (GeV/c);Count",200,0,40);
1031 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{T} (GeV/c);Count",200,0,40);
1033 fPtMCparticleAll_nonPrimary = new TH1F("fPtMCparticleAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1034 fPtMCparticleAlle_nonPrimary = new TH1F("fPtMCparticleAlle_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1035 fPtMCparticleAlle_Primary = new TH1F("fPtMCparticleAlle_Primary",";p_{T} (GeV/c);Count",200,0,40);
1037 fPtMCparticleReco_nonPrimary = new TH1F("fPtMCparticleReco_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1039 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
1040 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
1041 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
1042 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
1044 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{T} (GeV/c);Count",200,0,40);
1045 fPtMCelectronAfterAll_nonPrimary = new TH1F("fPtMCelectronAfterAll_nonPrimary",";p_{T} (GeV/c);Count",200,0,40);
1046 fPtMCelectronAfterAll_Primary = new TH1F("fPtMCelectronAfterAll_Primary",";p_{T} (GeV/c);Count",200,0,40);
1050 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,30);
1051 fPtMCeta = new TH1F("fPtMCeta",";p_{T} (GeV/c);Count",200,0,30);
1052 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
1053 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
1054 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{t} (GeV/c);Count",200,0,40);
1055 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{t} (GeV/c);Count",200,0,40);
1056 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
1057 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
1058 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
1060 fOutputList->Add(fPtBackgroundBeforeReco);
1061 fOutputList->Add(fPtBackgroundBeforeReco_weight);
1063 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2);
1064 if(fFillBackground) fOutputList->Add(fPtBackgroundBeforeReco2_weight);
1066 fOutputList->Add(fpT_m_electron);
1067 fOutputList->Add(fpT_gm_electron);
1069 fOutputList->Add(fPtBackgroundAfterReco);
1070 fOutputList->Add(fPtMCparticleAll);
1071 fOutputList->Add(fPtMCparticleReco);
1073 fOutputList->Add(fPtMCparticleAll_nonPrimary);
1074 fOutputList->Add(fPtMCparticleAlle_nonPrimary);
1076 fOutputList->Add(fPtMCparticleAlle_Primary);
1077 fOutputList->Add(fPtMCparticleReco_nonPrimary);
1079 fOutputList->Add(fPtMCparticleAllHfe1);
1080 fOutputList->Add(fPtMCparticleRecoHfe1);
1081 fOutputList->Add(fPtMCparticleAllHfe2);
1082 fOutputList->Add(fPtMCparticleRecoHfe2);
1083 fOutputList->Add(fPtMCelectronAfterAll);
1085 fOutputList->Add(fPtMCelectronAfterAll_nonPrimary);
1086 fOutputList->Add(fPtMCelectronAfterAll_Primary);
1090 fOutputList->Add(fPtMCpi0);
1091 fOutputList->Add(fPtMCeta);
1092 fOutputList->Add(fPtMC_EMCal_All);
1093 fOutputList->Add(fPtMC_EMCal_Selected);
1094 fOutputList->Add(fPtMC_TPC_All);
1095 fOutputList->Add(fPtMC_TPC_Selected);
1096 fOutputList->Add(fPtMCWithLabel);
1097 fOutputList->Add(fPtMCWithoutLabel);
1098 fOutputList->Add(fPtIsPhysicaPrimary);
1101 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
1102 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
1103 fOutputList->Add(fCentralityHist);
1104 fOutputList->Add(fCentralityHistPass);
1106 //______________________________________________________________________
1107 //Mixed event analysis
1108 if(fEventMixingFlag)
1110 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
1111 fOutputList->Add(fPoolNevents);
1113 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.
1114 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
1116 Int_t nCentralityBins = 15;
1117 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
1119 Int_t nZvtxBins = 9;
1120 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
1122 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
1124 //______________________________________________________________________
1126 PostData(1, fOutputList);
1128 ///______________________________________________________________________
1131 //______________________________________________________________________
1133 //Called for each event
1134 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
1137 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1138 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
1142 printf("ERROR: fESD & fAOD not available\n");
1146 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
1150 printf("ERROR: fVEvent not available\n");
1157 AliError("HFE cuts not available");
1161 if(!fPID->IsInitialized())
1163 // Initialize PID with the given run number
1164 AliWarning("PID not initialised, get from Run no");
1168 fPID->InitializePID(fAOD->GetRunNumber());
1172 fPID->InitializePID(fESD->GetRunNumber());
1177 fPidResponse = fInputHandler->GetPIDResponse();
1180 //Check PID response
1183 AliDebug(1, "Using default PID Response");
1184 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
1187 fPID->SetPIDResponse(fPidResponse);
1189 fCFM->SetRecEventInfo(fVevent);
1191 Double_t *fListOfmotherkink = 0;
1192 Int_t fNumberOfVertices = 0;
1193 Int_t fNumberOfMotherkink = 0;
1195 //______________________________________________________________________
1199 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
1200 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1201 TString vtxTtl = trkVtx->GetTitle();
1202 if(!vtxTtl.Contains("VertexerTracks")) return;
1203 Float_t zvtx = trkVtx->GetZ();
1205 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
1206 if(spdVtx->GetNContributors()<=0) return;
1207 TString vtxTyp = spdVtx->GetTitle();
1208 Double_t cov[6]={0};
1209 spdVtx->GetCovarianceMatrix(cov);
1210 Double_t zRes = TMath::Sqrt(cov[5]);
1211 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1212 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1213 if(TMath::Abs(zvtx) > 10) return;
1215 //Look for kink mother for AOD
1217 fNumberOfVertices = 0;
1218 fNumberOfMotherkink = 0;
1222 fNumberOfVertices = fAOD->GetNumberOfVertices();
1224 fListOfmotherkink = new Double_t[fNumberOfVertices];
1226 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
1228 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
1229 if(!aodvertex) continue;
1230 if(aodvertex->GetType()==AliAODVertex::kKink)
1232 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
1233 if(!mother1) continue;
1234 Int_t idmother = mother1->GetID();
1235 fListOfmotherkink[fNumberOfMotherkink] = idmother;
1236 fNumberOfMotherkink++;
1247 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
1248 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
1249 TString vtxTtl = trkVtx->GetTitle();
1250 if(!vtxTtl.Contains("VertexerTracks")) return;
1251 Float_t zvtx = trkVtx->GetZ();
1253 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
1254 if(spdVtx->GetNContributors()<=0) return;
1255 TString vtxTyp = spdVtx->GetTitle();
1256 Double_t cov[6]={0};
1257 spdVtx->GetCovarianceMatrix(cov);
1258 Double_t zRes = TMath::Sqrt(cov[5]);
1259 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
1260 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
1261 if(TMath::Abs(zvtx) > 10) return;
1264 //______________________________________________________________________
1266 //Only events with at least 2 tracks are accepted
1267 Int_t fNOtrks = fVevent->GetNumberOfTracks();
1269 //if(fIsAOD) Int_t fNOtrks = fAOD->GetNumberOfTracks();
1270 //if(!fIsAOD) Int_t fNOtrks = fESD->GetNumberOfTracks();
1271 if(fNOtrks<2) return;
1273 //______________________________________________________________________
1274 //Centrality Selection
1275 if(fHasCentralitySelection)
1277 Float_t centrality = -1;
1281 fCentrality = fAOD->GetHeader()->GetCentralityP();
1285 fCentrality = fESD->GetCentrality();
1288 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
1289 else centrality = fCentrality->GetCentralityPercentile("V0A");
1291 //cout << "Centrality = " << centrality << " %" << endl;
1293 fCentralityHist->Fill(centrality);
1295 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
1297 fCentralityHistPass->Fill(centrality);
1299 //______________________________________________________________________
1301 //______________________________________________________________________
1307 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1311 AliError("Array of MC particles not found");
1315 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1319 AliError("Could not find MC Header in AOD");
1323 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1325 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1326 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1328 Int_t pdg = fMCparticle->GetPdgCode();
1331 double proX = fMCparticle->Xv();
1332 double proY = fMCparticle->Yv();
1333 double proR = sqrt(pow(proX,2)+pow(proY,2));
1336 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1338 //to correct background
1339 if (TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0){
1340 Int_t mpdg = fMCparticleMother->GetPdgCode();
1342 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1345 fPtMCparticleAlle_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons, and not primary
1351 if (TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCparticleAlle_Primary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all electrons primary
1353 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1356 fPtMCparticleAll_nonPrimary->Fill(fMCparticle->Pt()); //denominator for total efficiency for all particles, and not primary
1357 if(fMCparticle->IsPhysicalPrimary())
1359 fPtMCparticleAll->Fill(fMCparticle->Pt());
1361 Bool_t MotherFound = FindMother(iMC);
1362 //Bool_t MotherFound = FindMother(track->GetLabel());
1366 fPtMCparticleAllHfe1->Fill(fMCparticle->Pt());
1367 fEtaPhi_den->Fill(fMCparticle->Phi(),fMCparticle->Eta());
1369 } //denominator for total efficiency and tracking
1370 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1376 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1377 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCparticle->Pt());
1382 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1383 if (!fEventHandler) {
1384 Printf("ERROR: Could not retrieve MC event handler");
1388 fMCevent = fEventHandler->MCEvent();
1390 Printf("ERROR: Could not retrieve MC event");
1394 fMCstack = fMCevent->Stack();
1396 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1399 fMCtrack = fMCstack->Particle(iMC);
1400 if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1401 TParticle *particle=fMCstack->Particle(iMC);
1403 Int_t pdg = fMCtrack->GetPdgCode();
1406 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
1407 if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCtrack->Pt());
1410 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1413 //to correct background
1414 if (TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0){
1415 Int_t mpdg = fMCtrackMother->GetPdgCode();
1416 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
1417 Double_t proR=particle->R();
1419 fPtMCparticleAlle_nonPrimary->Fill(fMCtrack->Pt()); //denominator for total efficiency for all electrons, and not primary
1424 if(TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(iMC)){
1426 fPtMCparticleAlle_Primary->Fill(fMCtrack->Pt());
1429 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1431 fPtMCparticleAll_nonPrimary->Fill(fMCtrack->Pt());//denominator for total efficiency for all particle, non Primary track
1433 if(fMCstack->IsPhysicalPrimary(iMC))
1435 fPtMCparticleAll->Fill(fMCtrack->Pt());
1437 Bool_t MotherFound = FindMother(iMC);
1438 //Bool_t MotherFound = FindMother(track->GetLabel());
1442 fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency and tracking
1443 fEtaPhi_den->Fill(fMCtrack->Phi(),fMCtrack->Eta());
1445 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
1447 }//Is Physical primary
1454 //______________________________________________________________________
1455 //EMCal Trigger Selection (Threshold selection)
1456 TString firedTrigger;
1457 TString TriggerEG1("CEMC7EG1"); //takes trigger with name with EG1, ex: CEMC7EG1-B-NOPF-CENTNOTRD
1458 TString TriggerEG2("CEMC7EG2");
1460 TString TriggerEJE("EJE");
1462 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1463 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1466 if(firedTrigger.Contains(TriggerEG1)) fNevent->Fill(1);
1467 if(firedTrigger.Contains(TriggerEG2)) fNevent->Fill(2);
1469 // Jan 06, 2014: I changed the counters: Only fill with 3 or 4 if we want the trigger threshold selected.
1471 if(firedTrigger.Contains(TriggerEG1))
1473 if(fEMCEG1) fNevent->Fill(3);
1481 if(firedTrigger.Contains(TriggerEG2))
1483 if(fEMCEG2) fNevent->Fill(4);
1490 //______________________________________________________________________
1491 //Testing if there is an overlap EGA and EJE
1493 if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2) ) && !firedTrigger.Contains(TriggerEJE))
1498 if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && !firedTrigger.Contains(TriggerEJE))
1503 if(!(firedTrigger.Contains(TriggerEG1) && firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
1508 if((firedTrigger.Contains(TriggerEG1) || firedTrigger.Contains(TriggerEG2)) && firedTrigger.Contains(TriggerEJE))
1517 //__________________________________________________________________
1520 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
1521 else ClsNo = fAOD->GetNumberOfCaloClusters();
1523 //______________________________________________________________________
1525 ///_____________________________________________________________________
1527 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1529 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1532 printf("ERROR: Could not receive track %d\n", iTracks);
1536 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1537 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
1538 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1540 Double_t fTPCnSigma = -999;
1541 Double_t fTOFnSigma = -999;
1542 Double_t fTPCnSigma_pion = -999;
1543 Double_t fTPCnSigma_proton = -999;
1544 Double_t fTPCnSigma_kaon = -999;
1545 Double_t fTPCsignal = -999;
1546 Double_t fPt = -999;
1550 //Etacut test on the begging
1551 fEtad[0]->Fill(track->Eta());
1552 //if(track->Eta()<fEtaCutMin || track->Eta()>fEtaCutMax) continue;
1553 fEtad[1]->Fill(track->Eta());
1554 ///_____________________________________________________________________________
1555 ///Fill QA plots without track selection
1557 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
1559 fTPCsignal = track->GetTPCsignal();
1560 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
1561 fTOFnSigma = fPidResponse->NumberOfSigmasTOF(track, AliPID::kElectron);
1562 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
1563 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
1564 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
1566 fTPC_p[0]->Fill(fPt,fTPCsignal);
1567 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
1570 Float_t TPCNcls = track->GetTPCNcls();
1572 Float_t TPCNcls_pid = track->GetTPCsignalN();
1576 Float_t pos[3]={0,0,0};
1578 Double_t fEMCflag = kFALSE;
1579 if(track->GetEMCALcluster()>0)
1581 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1582 if(fClus->IsEMCAL())
1584 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1587 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
1590 Float_t Energy = fClus->E();
1591 Float_t EoverP = Energy/track->P();
1592 //Float_t M02 = fClus->GetM02();
1593 //Float_t M20 = fClus->GetM20();
1595 /////////////// for Eta Phi distribution
1596 fClus->GetPosition(pos);
1597 TVector3 vpos(pos[0],pos[1],pos[2]);
1598 Double_t cphi = vpos.Phi();
1599 Double_t ceta = vpos.Eta();
1600 fEtaPhi[0]->Fill(cphi,ceta);
1602 fECluster[0]->Fill(Energy);
1603 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
1608 //______________________________________________________________
1611 fVtxZ[0]->Fill(fZvtx);
1612 fNTracks[0]->Fill(fNOtrks);
1613 fNClusters[0]->Fill(ClsNo);
1614 fTPCNcls_pid[0]->Fill(TPCNcls, TPCNcls_pid);
1615 //______________________________________________________________
1617 ///Fill QA plots without track selection
1618 ///_____________________________________________________________________________
1619 //______________________________________________________________________________________
1620 //Track Selection Cuts
1622 //AOD (Test Filter Bit)
1625 // standard cuts with very loose DCA - BIT(4)
1628 GetStandardITSTPCTrackCuts2011(kFALSE)
1629 SetMaxChi2PerClusterTPC(4);
1630 SetAcceptKinkDaughters(kFALSE);
1631 SetRequireTPCRefit(kTRUE);
1632 SetRequireITSRefit(kTRUE);
1633 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1634 SetMaxDCAToVertexZ(2);
1635 SetMaxDCAToVertex2D(kFALSE);
1636 SetRequireSigmaToVertex(kFALSE);
1637 SetMaxChi2PerClusterITS(36);
1638 SetMaxDCAToVertexXY(2.4)
1639 SetMaxDCAToVertexZ(3.2)
1640 SetDCaToVertex2D(kTRUE)
1643 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
1646 //RecKine: ITSTPC cuts
1647 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
1649 if(fRejectKinkMother)
1653 Bool_t kinkmotherpass = kTRUE;
1654 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
1656 if(track->GetID() == fListOfmotherkink[kinkmother])
1658 kinkmotherpass = kFALSE;
1662 if(!kinkmotherpass) continue;
1666 if(etrack->GetKinkIndex(0) != 0) continue;
1673 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
1676 //HFEcuts: ITS layers cuts
1677 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
1679 //HFE cuts: TPC PID cleanup
1680 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
1681 //______________________________________________________________________________________
1683 ///_____________________________________________________________
1684 ///QA plots after track selection
1687 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
1688 else fPtMCWithoutLabel->Fill(fPt);
1691 if(fIsMC && track->GetLabel()>=0)
1694 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1697 if(fMCparticle->IsPhysicalPrimary()) fPtIsPhysicaPrimary->Fill(fPt);
1699 Int_t pdg = fMCparticle->GetPdgCode();
1700 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1704 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1706 fPtMCparticleReco_nonPrimary->Fill(fMCparticle->Pt()); //not Primary track
1708 if(fMCparticle->IsPhysicalPrimary())
1710 fPtMCparticleReco->Fill(fMCparticle->Pt());
1712 Bool_t MotherFound = FindMother(track->GetLabel());
1715 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());//numerator tracking
1716 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
1727 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1730 fMCtrack = fMCstack->Particle(track->GetLabel());
1731 Int_t pdg = fMCtrack->GetPdgCode();
1733 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1735 fPtMCparticleReco_nonPrimary->Fill(fMCtrack->Pt());//not Primary track
1739 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1741 fPtIsPhysicaPrimary->Fill(fPt);
1744 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1746 fPtMCparticleReco->Fill(fMCtrack->Pt());
1748 Bool_t MotherFound = FindMother(track->GetLabel());
1751 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());//numerator tracking
1752 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
1760 fTPC_p[1]->Fill(fPt,fTPCsignal);
1761 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
1762 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
1764 TPCNcls = track->GetTPCNcls();
1765 Float_t pos2[3]={0,0,0};
1767 if(track->GetEMCALcluster()>0)
1769 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1770 if(fClus->IsEMCAL())
1772 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1774 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
1776 Float_t Energy = fClus->E();
1777 Float_t EoverP = Energy/track->P();
1778 Float_t M02 = fClus->GetM02();
1779 Float_t M20 = fClus->GetM20();
1780 Float_t ncells = fClus->GetNCells();
1782 /////////////// for Eta Phi distribution
1783 fClus->GetPosition(pos2);
1784 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
1785 Double_t cphi = vpos.Phi();
1786 Double_t ceta = vpos.Eta();
1787 fEtaPhi[1]->Fill(cphi,ceta);
1789 fECluster[1]->Fill(Energy);
1790 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
1793 //for EMCal trigger performance
1795 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
1796 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
1801 //for hadron contamination calculations
1805 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1807 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
1809 if(fTPCnSigma<-3.5){
1810 fEoverP_pt_hadrons->Fill(fPt,EoverP);
1811 if(fUseEMCal) fShowerShape_ha->Fill(M02,M20);
1815 if(fTPCnSigma < -3.5){
1816 fEoverP_pt_pions->Fill(fPt, EoverP);
1820 if(fTPCnSigma < -3.5 && fTPCnSigma > -10){
1821 fEoverP_pt_pions2->Fill(fPt, EoverP);
1831 for(Int_t i = 0; i < 6; i++)
1833 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1836 if(fTPCnSigma < -5 && fTPCnSigma > -10){
1837 fNcells_hadrons[i]->Fill(ncells);
1839 //hadrons selection using E/p
1840 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
1841 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
1843 //electrons selection using E/p
1844 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1845 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
1850 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1852 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
1853 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
1857 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1859 fPtTrigger_Inc->Fill(fPt);
1860 DiHadronCorrelation(track, iTracks);
1869 //______________________________________________________________
1872 fVtxZ[1]->Fill(fZvtx);
1873 fNTracks[1]->Fill(fNOtrks);
1874 fNClusters[1]->Fill(ClsNo);
1875 fTPCNcls_pid[1]->Fill(TPCNcls, TPCNcls_pid);
1877 //______________________________________________________________
1879 ///______________________________________________________________________
1880 ///Histograms for PID Studies
1881 //Double_t fPtBin[6] = {2,4,6,8,10,15};
1883 for(Int_t i = 0; i < 6; i++)
1885 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1887 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
1890 fTPC_pt[i]->Fill(fTPCsignal);
1891 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
1896 ///QA plots after track selection
1897 ///_____________________________________________________________
1899 //_______________________________________________________
1900 //Correlation Analysis - DiHadron
1903 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1905 fPtTrigger_Inc->Fill(fPt);
1906 DiHadronCorrelation(track, iTracks);
1909 //_______________________________________________________
1912 ///////////////////////////////////////////////////////////////////
1913 ///TPC - efficiency calculation //
1915 /// changing start here
1916 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1918 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1919 Int_t pdg = fMCparticle->GetPdgCode();
1922 if(fMCparticle->IsPhysicalPrimary()){
1925 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1927 Bool_t MotherFound = FindMother(track->GetLabel());
1929 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1930 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1931 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
1938 else if(fIsMC && track->GetLabel()>=0)//ESD
1941 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1942 fMCtrack = fMCstack->Particle(track->GetLabel());
1944 Int_t pdg = fMCtrack->GetPdgCode();
1945 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1947 if(fMCtrack->GetFirstMother()>0){
1948 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1949 Bool_t MotherFound = FindMother(track->GetLabel());
1951 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1952 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
1961 if(fPt>1 && fPt<2) fTOF01->Fill(fTOFnSigma,fTPCnSigma);
1962 if(fPt>2 && fPt<4) fTOF02->Fill(fTOFnSigma,fTPCnSigma);
1963 if(fPt>4 && fPt<6) fTOF03->Fill(fTOFnSigma,fTPCnSigma);
1965 ///________________________________________________________________________
1967 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
1968 Int_t pidpassed = 1;
1969 AliHFEpidObject hfetrack;
1970 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
1971 hfetrack.SetRecTrack(track);
1972 hfetrack.SetPP(); //proton-proton analysis
1973 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
1974 fpid->Fill(pidpassed);
1976 if(pidpassed==0) continue;
1977 ///________________________________________________________________________
1980 ////////////////////////////////////////////////////////////////////
1981 ///TPC efficiency calculations
1984 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1986 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1987 Int_t pdg = fMCparticle->GetPdgCode();
1990 if(fMCparticle->IsPhysicalPrimary()){
1993 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1995 Bool_t MotherFound = FindMother(track->GetLabel());
1997 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1998 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1999 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
2006 else if(fIsMC && track->GetLabel()>=0)//ESD
2009 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
2010 fMCtrack = fMCstack->Particle(track->GetLabel());
2012 Int_t pdg = fMCtrack->GetPdgCode();
2013 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
2015 if(fMCtrack->GetFirstMother()>0){
2016 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2017 Bool_t MotherFound = FindMother(track->GetLabel());
2019 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2020 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
2028 //Eta Cut for TPC only
2029 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2030 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
2033 //Background for TPC only
2034 if(fFillBackground){
2036 //efficiency without SS cut for TPC only
2037 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
2038 Background(track, iTracks, Vtrack, kTRUE); //IsTPConly=kTRUE
2039 } //Eta cut to be consistent with other efficiency
2043 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
2044 fTPC_p[2]->Fill(fP,fTPCsignal);
2045 TPCNcls = track->GetTPCNcls();
2046 Float_t pos3[3]={0,0,0};
2048 if(track->GetEMCALcluster()>0)
2050 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
2051 if(fClus->IsEMCAL())
2054 //________________________________________________________________________
2057 //Cluster timing distribution -- for ESD
2058 if(fUseEMCal && !fIsAOD){
2060 AliESDCaloCells &cells_esd=*(fESD->GetEMCALCells());
2061 TRefArray* caloClusters_esd = new TRefArray();
2062 fESD->GetEMCALClusters(caloClusters_esd);
2063 Int_t nclus_esd = caloClusters_esd->GetEntries();
2066 for (Int_t icl = 0; icl < nclus_esd; icl++) {
2068 AliESDCaloCluster* clus_esd = (AliESDCaloCluster*)caloClusters_esd->At(icl);
2070 if(clus_esd->IsEMCAL()){
2071 Float_t ncells_esd = fClus->GetNCells();
2072 UShort_t * index_esd = clus_esd->GetCellsAbsId() ;
2073 UShort_t * index2_esd = fClus->GetCellsAbsId() ;
2076 for(Int_t i = 0; i < ncells_esd ; i++){
2078 Int_t absId_esd = index_esd[i];
2079 fTime->Fill(fPt,cells_esd.GetCellTime(absId_esd));
2081 Int_t absId2_esd = index2_esd[i];
2082 fTime2->Fill(fPt,cells_esd.GetCellTime(absId2_esd));
2090 //Cluster timing distribution -- for AOD
2091 if(fUseEMCal && fIsAOD){
2093 AliAODCaloCells &cells_aod=*(fAOD->GetEMCALCells());
2095 TRefArray* caloClusters_aod = new TRefArray();
2096 fAOD->GetEMCALClusters(caloClusters_aod);
2098 Int_t nclus_aod = caloClusters_aod->GetEntries();
2100 for (Int_t icl = 0; icl < nclus_aod; icl++) {
2102 AliAODCaloCluster* clus_aod = (AliAODCaloCluster*)caloClusters_aod->At(icl);
2105 if(clus_aod->IsEMCAL()){
2106 Float_t ncells_aod = fClus->GetNCells();
2107 UShort_t * index_aod = clus_aod->GetCellsAbsId() ;
2108 UShort_t * index2_aod = fClus->GetCellsAbsId() ;
2111 for(Int_t i = 0; i < ncells_aod ; i++){
2113 Int_t absId_aod = index_aod[i];
2114 fTime->Fill(fPt,cells_aod.GetCellTime(absId_aod));
2116 Int_t absId2_aod = index2_aod[i];
2117 fTime2->Fill(fPt,cells_aod.GetCellTime(absId2_aod));
2128 double emctof = fClus->GetTOF();
2129 ftimingEle->Fill(fPt,emctof);
2131 //________________________________________________________________________
2137 Double_t Dx = fClus->GetTrackDx();
2138 Double_t Dz = fClus->GetTrackDz();
2139 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
2141 for(Int_t i = 0; i < 6; i++)
2143 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2152 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
2154 Float_t Energy = fClus->E();
2155 Float_t EoverP = Energy/track->P();
2156 Float_t M02 = fClus->GetM02();
2157 Float_t M20 = fClus->GetM20();
2158 Float_t ncells = fClus->GetNCells();
2159 //----------------------------------------------------------------------------------------
2161 // EtaCut electrons histogram
2163 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
2165 if(fUseShowerShapeCut){
2166 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
2167 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2168 fShowerShapeCut->Fill(M02,M20);
2173 if(!fUseShowerShapeCut){
2174 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
2175 fShowerShapeCut->Fill(M02,M20);
2178 if(fUseEMCal) fShowerShape_ele->Fill(M02,M20);
2180 //for shower shape cut studies - now with TPC PID Cut
2182 fShowerShapeM02_EoverP->Fill(M02,EoverP);
2183 fShowerShapeM20_EoverP->Fill(M20,EoverP);
2188 //----------------------------------------------------------------------------------------
2192 // for Eta Phi distribution
2193 fClus->GetPosition(pos3);
2194 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
2195 Double_t cphi = vpos.Phi();
2196 Double_t ceta = vpos.Eta();
2197 fEtaPhi[2]->Fill(cphi,ceta);
2201 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
2203 for(Int_t i = 0; i < 6; i++)
2205 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
2208 fR_EoverP[i]->Fill(R, EoverP);
2209 fNcells[i]->Fill(ncells);
2210 fNcells_EoverP[i]->Fill(EoverP, ncells);
2211 fM02_EoverP[i]->Fill(M02,EoverP);
2212 fM20_EoverP[i]->Fill(M20,EoverP);
2213 fECluster_ptbins[i]->Fill(Energy);
2214 fEoverP_ptbins[i]->Fill(EoverP);
2216 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
2217 fNcells_electrons[i]->Fill(ncells);
2220 if(M02<0.5 && M20<0.3) {
2221 fEoverP_wSSCut[i]->Fill(EoverP);
2226 fNcells_pt->Fill(fPt, ncells);
2229 ////////////////////////////////////////////////////////////////////
2230 ///EMCal - Efficiency calculations
2233 if(fIsMC && fIsAOD && track->GetLabel()>=0)
2235 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2236 Int_t pdg = fMCparticle->GetPdgCode();
2239 if(fMCparticle->IsPhysicalPrimary()){
2241 //Phi cut && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi()
2242 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2244 Bool_t MotherFound = FindMother(track->GetLabel());
2246 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2247 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2248 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCparticle->Pt());
2255 else if(fIsMC && track->GetLabel()>=0)//ESD
2258 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2261 fMCtrack = fMCstack->Particle(track->GetLabel());
2263 Int_t pdg = fMCtrack->GetPdgCode();
2264 //Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
2265 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax )
2267 Bool_t MotherFound = FindMother(track->GetLabel());
2268 //MotherFound included
2270 if(fMCtrack->GetFirstMother()>0){
2271 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2272 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2273 if(fIsHFE1)fPtMC_EMCal_All->Fill(fMCtrack->Pt());
2281 //_______________________________________________________
2283 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
2286 fECluster[2]->Fill(Energy);
2287 fTPCNcls_pid[3]->Fill(TPCNcls, TPCNcls_pid);
2291 fPtElec_Inc->Fill(fPt);
2292 //Eta cut for background
2293 if(fFillBackground){
2294 fEtad[2]->Fill(track->Eta());
2296 //background for triggered data: trigger electron must have same cuts on shower shape 06/Jan/2014
2297 if(fUseShowerShapeCut){
2298 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
2299 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
2300 Background(track, iTracks, Vtrack, kFALSE);
2305 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax){
2306 Background(track, iTracks, Vtrack, kFALSE);
2312 double emctof2 = fClus->GetTOF();
2313 ftimingEle2->Fill(fPt,emctof2);
2314 //Correlation Analysis
2315 if(fCorrelationFlag)
2317 ElectronHadronCorrelation(track, iTracks, Vtrack);
2320 //_______________________________________________________
2322 ////////////////////////////////////////////////////////////////////
2323 ///EMCal - efficiency calculations
2325 if(track->Charge()<0) fCharge_n->Fill(fPt);
2326 if(track->Charge()>0) fCharge_p->Fill(fPt);
2330 if(fIsMC && fIsAOD && track->GetLabel()>=0)//AOD
2332 if(track->Charge()<0) fCharge_n->Fill(fPt);
2333 if(track->Charge()>0) fCharge_p->Fill(fPt);
2335 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2336 if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2337 Int_t pdg = fMCparticle->GetPdgCode();
2339 double proX = fMCparticle->Xv();
2340 double proY = fMCparticle->Yv();
2341 double proR = sqrt(pow(proX,2)+pow(proY,2));
2344 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Phi()>=(TMath::Pi()*80/180) && fMCparticle->Phi()<=TMath::Pi() ){
2346 if( TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0 ){
2347 Int_t mpdg = fMCparticleMother->GetPdgCode();
2348 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
2349 if(proR<7)fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
2352 if( TMath::Abs(pdg) == 11 && fMCparticle->IsPhysicalPrimary()) fPtMCelectronAfterAll_Primary->Fill(fMCparticle->Pt());
2357 if(fMCparticle->IsPhysicalPrimary()){
2360 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
2362 Bool_t MotherFound = FindMother(track->GetLabel());
2365 if(!fUseShowerShapeCut){
2367 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
2368 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
2369 }//numerator for the total efficiency AOD
2371 //November 11 for efficiency of triggered data
2372 if(fUseShowerShapeCut){
2373 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
2375 fPtMCelectronAfterAll->Fill(fMCparticle->Pt());
2376 fEtaPhi_num->Fill(fMCparticle->Phi(),fMCparticle->Eta());
2377 }//numerator for the total efficiency AOD
2383 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2384 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
2385 if(fIsHFE1)fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
2392 else if(fIsMC && track->GetLabel()>=0)//ESD
2394 if(track->Charge()<0) fCharge_n->Fill(fPt);
2395 if(track->Charge()>0) fCharge_p->Fill(fPt);
2397 fMCtrack = fMCstack->Particle(track->GetLabel());
2398 if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2399 TParticle *particle=fMCstack->Particle(track->GetLabel());
2401 Int_t pdg = fMCtrack->GetPdgCode();
2404 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2405 if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 ){
2406 Int_t mpdg = fMCtrackMother->GetPdgCode();
2407 if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
2408 Double_t proR=particle->R();
2410 fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
2414 if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel())) fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
2417 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
2419 Bool_t MotherFound = FindMother(track->GetLabel());
2423 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
2426 if(!fUseShowerShapeCut){
2428 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
2429 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
2432 //November 11 for efficiency of triggered data
2433 if(fUseShowerShapeCut){
2434 if(M02 >= fM02CutMin && M02<=fM02CutMax && M20>=fM20CutMin && M20<=fM20CutMax){
2436 fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency ESD
2437 fEtaPhi_num->Fill(fMCtrack->Phi(),fMCtrack->Eta());
2449 // Phi cut && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi()
2450 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
2452 //included MotherFound
2456 if(fMCtrack->GetFirstMother()>0){
2457 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2458 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
2460 if(fIsHFE1)fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());
2467 ///////////////////////////////////////////////////////////////////
2475 //______________________________________________________________
2478 fVtxZ[2]->Fill(fZvtx);
2479 fNTracks[2]->Fill(fNOtrks);
2480 fNClusters[2]->Fill(ClsNo);
2481 fTPCNcls_pid[2]->Fill(TPCNcls, TPCNcls_pid);
2483 //______________________________________________________________
2485 //_______________________________________________________
2486 //Correlation Analysis
2489 fPtElec_Inc->Fill(fPt);
2491 if(fCorrelationFlag)
2493 ElectronHadronCorrelation(track, iTracks, Vtrack);
2496 //_______________________________________________________
2498 ///________________________________________________________________________
2501 //__________________________________________________________________
2502 //Event Mixing Analysis
2504 if(fEventMixingFlag)
2506 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2508 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2510 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!
2515 //__________________________________________________________________
2517 delete fListOfmotherkink;
2518 PostData(1, fOutputList);
2521 //______________________________________________________________________
2522 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
2524 //Draw result to the screen
2525 //Called once at the end of the query
2527 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
2531 printf("ERROR: Output list not available\n");
2536 //______________________________________________________________________
2537 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
2539 //Check single track cuts for a given cut step
2540 //Note this function is called inside the UserExec function
2541 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
2542 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
2547 //______________________________________________________________________
2550 void AliAnalysisTaskEMCalHFEpA::Background(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack, Bool_t IsTPConly)
2552 ///_________________________________________________________________
2556 if(track->GetLabel() < 0)
2558 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2564 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2566 if(fMCparticle->GetMother()<0) return;
2568 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2569 if(fMCparticleMother->GetMother()>0)fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
2571 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2574 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2575 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2578 //October 08th weighted histos
2579 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221 ){
2581 Double_t mPt=fMCparticleMother->Pt();
2586 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
2588 if(mPt<=4.5) mweight=x*x*0.089-0.277*x+1.46;
2589 if(mPt>4.5) mweight=TMath::Erf((x-0.425)/13.05)*5.94;
2594 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2596 if(mPt<=4.5) mweight=x*x*0.071-0.295*x+1.36;
2597 if(mPt>4.5) mweight=TMath::Erf((x-0.341)/13.31)*4.32;
2601 //Histo pT mother versus pT electron
2602 fpT_m_electron->Fill(mPt, track->Pt());
2604 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./mweight);
2605 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./mweight);
2607 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
2609 Double_t gmPt=fMCparticleGMother->Pt();
2610 Double_t gmweight=1;
2614 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
2616 if(gmPt<=4.5) gmweight=x*x*0.089-0.277*x+1.46;
2617 if(gmPt>4.5) gmweight=TMath::Erf((x-0.425)/13.05)*5.94;
2622 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
2624 if(gmPt<=4.5) gmweight=x*x*0.071-0.295*x+1.36;
2625 if(gmPt>4.5) gmweight=TMath::Erf((x-0.341)/13.31)*4.32;
2628 //Histo pT gmother versus pT electron
2629 fpT_gm_electron->Fill(gmPt, track->Pt());
2631 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt(), 1./gmweight);
2632 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt(), 1./gmweight);
2635 if(!IsTPConly)fPtBackgroundBeforeReco_weight->Fill(track->Pt());
2636 if(IsTPConly)fPtBackgroundBeforeReco2_weight->Fill(track->Pt());
2643 fMCtrack = fMCstack->Particle(track->GetLabel());
2645 if(fMCtrack->GetFirstMother()<0) return;
2647 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2649 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2652 if(!IsTPConly)fPtBackgroundBeforeReco->Fill(track->Pt());
2653 if(IsTPConly)fPtBackgroundBeforeReco2->Fill(track->Pt());
2658 ///_________________________________________________________________
2660 //________________________________________________
2661 //Associated particle cut
2662 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2663 fPartnerCuts->SetRequireITSRefit(kTRUE);
2664 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2665 fPartnerCuts->SetEtaRange(-0.9,0.9);
2666 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2667 fPartnerCuts->SetMinNClustersTPC(80);
2668 fPartnerCuts->SetPtRange(0.3,1e10);
2669 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2670 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2671 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2672 //_________________________________________________
2674 ///#################################################################
2675 //Non-HFE reconstruction
2676 fNonHFE = new AliSelectNonHFE();
2677 fNonHFE->SetAODanalysis(fIsAOD);
2678 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2679 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2680 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2681 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2682 fNonHFE->SetAlgorithm("DCA"); //KF
2683 fNonHFE->SetPIDresponse(fPidResponse);
2684 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2685 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2688 fNonHFE->SetHistAngleBack(fOpAngleBack);
2689 fNonHFE->SetHistAngle(fOpAngle);
2690 fNonHFE->SetHistDCABack(fDCABack);
2691 fNonHFE->SetHistDCA(fDCA);
2692 fNonHFE->SetHistMassBack(fInvMassBack);
2693 fNonHFE->SetHistMass(fInvMass);
2696 fNonHFE->SetHistAngleBack(fOpAngleBack2);
2697 fNonHFE->SetHistAngle(fOpAngle2);
2698 fNonHFE->SetHistDCABack(fDCABack2);
2699 fNonHFE->SetHistDCA(fDCA2);
2700 fNonHFE->SetHistMassBack(fInvMassBack2);
2701 fNonHFE->SetHistMass(fInvMass2);
2704 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
2708 //Electron Information
2709 Double_t fPhiE = -999;
2710 Double_t fEtaE = -999;
2711 Double_t fPtE = -999;
2712 fPhiE = track->Phi();
2713 fEtaE = track->Eta();
2716 ///_________________________________________________________________
2722 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2728 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2729 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2733 //new 26 September //weighted histograms
2734 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2735 Double_t mPt=fMCparticleMother->Pt();
2736 Double_t mweight1=1;
2737 Double_t mweight2=1;
2738 //Double_t weight=1;
2741 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
2743 if(mPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2744 if(mPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2747 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2749 if(mPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2750 if(mPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2756 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
2757 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
2760 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, mweight1);
2761 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, mweight2);
2763 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
2764 Double_t gmPt=fMCparticleGMother->Pt();
2765 Double_t gmweight1=1;
2766 Double_t gmweight2=1;
2767 //Double_t weight=1;
2771 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
2773 if(gmPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2774 if(gmPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2778 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
2780 if(gmPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2781 if(gmPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2787 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
2788 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
2791 if(fNonHFE->IsULS())fPtElec_ULS_weight->Fill(fPtE, gmweight1);
2792 if(fNonHFE->IsLS())fPtElec_LS_weight->Fill(fPtE, gmweight2);
2795 if(fNonHFE->IsULS()) fPtElec_ULS_weight->Fill(fPtE,fNonHFE->GetNULS());
2796 if(fNonHFE->IsLS()) fPtElec_LS_weight->Fill(fPtE,fNonHFE->GetNLS());
2803 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2804 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2809 //new 08 October //weighted histograms
2810 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2811 Double_t mPt=fMCparticleMother->Pt();
2813 Double_t mweight1=1;
2814 Double_t mweight2=1;
2815 //Double_t weight=1;
2818 if(TMath::Abs(fMCparticleMother->GetPdgCode())==111){
2820 if(mPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2821 if(mPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2825 if(TMath::Abs(fMCparticleMother->GetPdgCode())==221){
2827 if(mPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2828 if(mPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2835 if(fNonHFE->IsULS()) mweight1=(fNonHFE->GetNULS())/weight;
2836 if(fNonHFE->IsLS()) mweight2=(fNonHFE->GetNLS())/weight;
2839 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, mweight1);
2840 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, mweight2);
2842 else if(fMCparticleMother->GetMother()>0 && (TMath::Abs(fMCparticleGMother->GetPdgCode())==111 || TMath::Abs(fMCparticleGMother->GetPdgCode())==221 )){
2843 Double_t gmPt=fMCparticleGMother->Pt();
2844 Double_t gmweight1=1;
2845 Double_t gmweight2=1;
2846 //Double_t weight=1;
2850 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==111){
2852 if(gmPt<=4.5) weight=x*x*0.089-0.277*x+1.46;
2853 if(gmPt>4.5) weight=TMath::Erf((x-0.425)/13.05)*5.94;
2857 if(TMath::Abs(fMCparticleGMother->GetPdgCode())==221){
2859 if(gmPt<=4.5) weight=x*x*0.071-0.295*x+1.36;
2860 if(gmPt>4.5) weight=TMath::Erf((x-0.341)/13.31)*4.32;
2865 if(fNonHFE->IsULS()) gmweight1=(fNonHFE->GetNULS())/weight;
2866 if(fNonHFE->IsLS()) gmweight2=(fNonHFE->GetNLS())/weight;
2869 if(fNonHFE->IsULS())fPtElec_ULS2_weight->Fill(fPtE, gmweight1);
2870 if(fNonHFE->IsLS())fPtElec_LS2_weight->Fill(fPtE, gmweight2);
2873 if(fNonHFE->IsULS()) fPtElec_ULS2_weight->Fill(fPtE,fNonHFE->GetNULS());
2874 if(fNonHFE->IsLS()) fPtElec_LS2_weight->Fill(fPtE,fNonHFE->GetNLS());
2884 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2887 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2888 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2892 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2893 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2898 ///_________________________________________________________________
2903 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2904 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2908 if(fNonHFE->IsULS()) fPtElec_ULS2->Fill(fPtE,fNonHFE->GetNULS());
2909 if(fNonHFE->IsLS()) fPtElec_LS2->Fill(fPtE,fNonHFE->GetNLS());
2918 //______________________________________________________________________
2919 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
2922 ///_________________________________________________________________
2926 if(track->GetLabel() < 0)
2928 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
2934 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
2936 if(fMCparticle->GetMother()<0) return;
2938 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2940 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
2943 fPtBackgroundBeforeReco->Fill(track->Pt());
2948 fMCtrack = fMCstack->Particle(track->GetLabel());
2950 if(fMCtrack->GetFirstMother()<0) return;
2952 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2954 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2957 fPtBackgroundBeforeReco->Fill(track->Pt());
2961 ///_________________________________________________________________
2963 //________________________________________________
2964 //Associated particle cut
2965 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2966 fPartnerCuts->SetRequireITSRefit(kTRUE);
2967 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2968 fPartnerCuts->SetEtaRange(-0.9,0.9);
2969 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2970 fPartnerCuts->SetMinNClustersTPC(80);
2971 fPartnerCuts->SetPtRange(0.3,1e10);
2972 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
2973 //fPartnerCuts->SetMaxDCAToVertexXY(1);
2974 //fPartnerCuts->SetMaxDCAToVertexZ(3);
2975 //_________________________________________________
2977 ///#################################################################
2978 //Non-HFE reconstruction
2979 fNonHFE = new AliSelectNonHFE();
2980 fNonHFE->SetAODanalysis(fIsAOD);
2981 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
2982 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
2983 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
2984 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
2985 fNonHFE->SetAlgorithm("DCA"); //KF
2986 fNonHFE->SetPIDresponse(fPidResponse);
2987 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
2988 fNonHFE->SetAdditionalCuts(fPtMinAsso,fTpcNclsAsso);
2991 fNonHFE->SetHistAngleBack(fOpAngleBack);
2992 fNonHFE->SetHistAngle(fOpAngle);
2993 fNonHFE->SetHistDCABack(fDCABack);
2994 fNonHFE->SetHistDCA(fDCA);
2995 fNonHFE->SetHistMassBack(fInvMassBack);
2996 fNonHFE->SetHistMass(fInvMass);
2998 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
3000 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
3001 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
3002 Bool_t fUlsIsPartner = kFALSE;
3003 Bool_t fLsIsPartner = kFALSE;
3004 ///#################################################################
3007 //Electron Information
3008 Double_t fPhiE = -999;
3009 Double_t fEtaE = -999;
3010 Double_t fPhiH = -999;
3011 Double_t fEtaH = -999;
3012 Double_t fDphi = -999;
3013 Double_t fDeta = -999;
3014 Double_t fPtE = -999;
3015 Double_t fPtH = -999;
3017 Double_t pi = TMath::Pi();
3019 fPhiE = track->Phi();
3020 fEtaE = track->Eta();
3024 ///_________________________________________________________________
3030 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
3032 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3033 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3038 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
3040 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3041 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3045 ///_________________________________________________________________
3048 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
3049 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
3055 //__________________________________________________________________
3056 //Event Mixing Analysis - Hadron Loop
3058 if(fEventMixingFlag)
3060 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
3062 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
3064 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
3066 fPoolNevents->Fill(fPool->GetCurrentNEvents());
3068 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
3070 TObjArray* bgTracks = fPool->GetEvent(jMix);
3072 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
3074 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
3075 if (NULL == MixedTrack) continue;
3077 fPhiH = MixedTrack->Phi();
3078 fEtaH = MixedTrack->Eta();
3079 fPtH = MixedTrack->Pt();
3081 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
3083 fDphi = fPhiE - fPhiH;
3085 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
3086 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
3088 fDeta = fEtaE - fEtaH;
3090 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
3092 for(Int_t i = 0; i < 6; i++)
3094 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
3096 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
3098 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
3099 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
3101 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
3102 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
3106 // TODO your code: do event mixing with current event and bgTracks
3107 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
3112 //__________________________________________________________________
3114 //__________________________________________________________________
3115 //Same Event Analysis - Hadron Loop
3116 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3118 if(trackIndex==iTracks) continue;
3120 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3123 printf("ERROR: Could not receive track %d\n", iTracks);
3127 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3129 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
3133 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
3134 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
3135 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
3136 if(atrack2->GetTPCNcls() < 80) continue;
3137 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
3141 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
3142 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
3145 fPhiH = track2->Phi();
3146 fEtaH = track2->Eta();
3147 fPtH = track2->Pt();
3149 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
3151 fDphi = fPhiE - fPhiH;
3153 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
3154 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
3156 fDeta = fEtaE - fEtaH;
3158 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
3160 //______________________________________________________________
3161 //Check if this track is a Non-HFE partner
3162 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
3164 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
3166 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
3168 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
3170 //______________________________________________________________
3172 for(Int_t i = 0; i < 6; i++)
3174 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
3176 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
3178 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
3179 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
3180 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
3181 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
3183 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
3184 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
3185 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
3186 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
3192 //____________________________________________________________________________________________________________
3193 //Create a TObjArray with selected hadrons, for the mixed event analysis
3194 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
3196 fTracksClone = new TObjArray;
3197 fTracksClone->SetOwner(kTRUE);
3199 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3201 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3204 printf("ERROR: Could not receive track %d\n", iTracks);
3208 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3210 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
3214 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
3215 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
3216 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
3217 if(atrack2->GetTPCNcls() < 80) continue;
3218 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
3222 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
3223 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
3226 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
3228 return fTracksClone;
3230 //____________________________________________________________________________________________________________
3232 //______________________________________________________________________
3233 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
3235 //________________________________________________
3236 //Associated particle cut
3237 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
3238 fPartnerCuts->SetRequireITSRefit(kTRUE);
3239 fPartnerCuts->SetRequireTPCRefit(kTRUE);
3240 fPartnerCuts->SetEtaRange(-0.9,0.9);
3241 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
3242 fPartnerCuts->SetMinNClustersTPC(80);
3243 fPartnerCuts->SetPtRange(0.3,1e10);
3244 //fPartnerCuts->SetRequireSigmaToVertex(kTRUE);
3245 //fPartnerCuts->SetMaxDCAToVertexXY(1);
3246 //fPartnerCuts->SetMaxDCAToVertexZ(3);
3247 //_________________________________________________
3249 //Electron Information
3250 Double_t fPhiE = -999;
3251 Double_t fEtaE = -999;
3252 Double_t fPhiH = -999;
3253 Double_t fEtaH = -999;
3254 Double_t fDphi = -999;
3255 Double_t fDeta = -999;
3256 Double_t fPtE = -999;
3257 Double_t fPtH = -999;
3259 Double_t pi = TMath::Pi();
3261 fPhiE = track->Phi();
3262 fEtaE = track->Eta();
3265 //__________________________________________________________________
3266 //Same Event Analysis - Hadron Loop
3267 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
3269 if(trackIndex==iTracks) continue;
3271 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
3274 printf("ERROR: Could not receive track %d\n", iTracks);
3278 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
3279 if(track2->Eta()<fEtaCutMin || track2->Eta()>fEtaCutMax ) continue;
3283 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
3284 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
3285 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
3286 if(atrack2->GetTPCNcls() < 80) continue;
3287 if(fAssocWithSPD && ((!(atrack2->HasPointOnITSLayer(0))) && (!(atrack2->HasPointOnITSLayer(1))))) continue;
3291 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
3292 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
3295 fPhiH = track2->Phi();
3296 fEtaH = track2->Eta();
3297 fPtH = track2->Pt();
3299 if(fPtH<fAssHadronPtMin || fPtH>fAssHadronPtMax) continue;
3301 fDphi = fPhiE - fPhiH;
3303 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
3304 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
3306 fDeta = fEtaE - fEtaH;
3308 Double_t fPtBin[7] = {1,2,4,6,8,10,15};
3310 for(Int_t i = 0; i < 6; i++)
3312 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
3314 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
3319 //____________________________________________________________________________________________________________
3321 //______________________________________________________________________
3322 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
3329 fIsFromPi0 = kFALSE;
3330 fIsFromEta = kFALSE;
3331 fIsFromGamma = kFALSE;
3333 if(mcIndex < 0 || !fIsMC)
3339 Int_t mpdg = -99999;
3340 Int_t gmpdg = -99999;
3341 Int_t ggmpdg = -99999;
3342 Int_t gggmpdg = -99999;
3346 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
3348 pdg = TMath::Abs(fMCparticle->GetPdgCode());
3358 fIsFromPi0 = kFALSE;
3359 fIsFromEta = kFALSE;
3360 fIsFromGamma = kFALSE;
3364 if(fMCparticle->GetMother()<0)
3371 fIsFromPi0 = kFALSE;
3372 fIsFromEta = kFALSE;
3373 fIsFromGamma = kFALSE;
3377 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
3378 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
3380 if(fMCparticleMother->GetMother()<0)
3388 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
3389 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
3390 if(fMCparticleGMother->GetMother()<0)
3397 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
3398 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
3399 if(fMCparticleGGMother->GetMother()<0)
3405 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
3406 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
3413 fMCtrack = fMCstack->Particle(mcIndex);
3415 pdg = TMath::Abs(fMCtrack->GetPdgCode());
3424 fIsFromPi0 = kFALSE;
3425 fIsFromEta = kFALSE;
3426 fIsFromGamma = kFALSE;
3430 if(fMCtrack->GetFirstMother()<0)
3437 fIsFromPi0 = kFALSE;
3438 fIsFromEta = kFALSE;
3439 fIsFromGamma = kFALSE;
3443 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
3444 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
3446 if(fMCtrackMother->GetFirstMother()<0)
3454 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
3455 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
3457 if(fMCtrackGMother->GetFirstMother()<0)
3464 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
3465 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
3467 if(fMCtrackGGMother->GetFirstMother()<0)
3473 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
3474 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
3480 //Tag Electron Source
3481 if(mpdg==111 || mpdg==221 || mpdg==22)
3489 fIsFromPi0 = kFALSE;
3490 fIsFromEta = kFALSE;
3491 fIsFromGamma = kFALSE;
3493 if(mpdg==111) fIsFromPi0 = kFALSE;
3494 if(mpdg==221)fIsFromEta = kFALSE;
3495 if(mpdg==22) fIsFromGamma = kFALSE;
3504 fIsFromPi0 = kFALSE;
3505 fIsFromEta = kFALSE;
3506 fIsFromGamma = kFALSE;
3513 if(mpdg>400 && mpdg<500)
3515 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
3530 else if(mpdg>500 && mpdg<600)