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) //
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)
111 ,fIsFromGamma(kFALSE)
115 ,fPartnerCuts(new AliESDtrackCuts())
118 ,fNonHFE(new AliSelectNonHFE())
123 ,fHasCentralitySelection(kFALSE)
125 ,fCentralityHistPass(0)
159 ,fNcells_electrons(0)
166 ,fTPCnsigma_eta_electrons(0)
167 ,fTPCnsigma_eta_hadrons(0)
170 ,fnsigma_p_EoverPcut(0)
171 ,fEoverP_pt_pions2(0)
173 ,fEoverP_pt_hadrons(0)
179 ,fCEtaPhi_ULS_Weight(0)
180 ,fCEtaPhi_LS_Weight(0)
181 ,fCEtaPhi_ULS_NoP_Weight(0)
182 ,fCEtaPhi_LS_NoP_Weight(0)
209 ,fAngleCutFlag(kFALSE)
210 ,fChi2CutFlag(kFALSE)
212 ,fPtBackgroundBeforeReco(0)
213 ,fPtBackgroundAfterReco(0)
215 ,fPtMCparticleReco(0)
216 ,fPtMCparticleAllHfe1(0)
217 ,fPtMCparticleRecoHfe1(0)
218 ,fPtMCparticleAllHfe2(0)
219 ,fPtMCparticleRecoHfe2(0)
220 ,fPtMCelectronAfterAll(0)
223 ,fPtMC_EMCal_Selected(0)
225 ,fPtMC_TPC_Selected(0)
227 ,fPtMCWithoutLabel(0)
228 ,fPtIsPhysicaPrimary(0)
231 ,fPID(new AliHFEpid("hfePid"))
234 ,fRejectKinkMother(kFALSE)
239 ,fMCtrackGGGMother(0)
243 ,fMCparticleMother(0)
244 ,fMCparticleGMother(0)
245 ,fMCparticleGGMother(0)
246 ,fMCparticleGGGMother(0)
256 ,fCEtaPhi_ULS_Weight_EM(0)
257 ,fCEtaPhi_LS_Weight_EM(0)
260 ,fCEtaPhi_Inc_DiHadron(0)
264 // Define input and output slots here
265 // Input slot #0 works with a TChain
266 DefineInput(0, TChain::Class());
267 // Output slot #0 id reserved by the base class for AOD
268 // Output slot #1 writes into a TH1 container
269 // DefineOutput(1, TH1I::Class());
270 DefineOutput(1, TList::Class());
271 // DefineOutput(3, TTree::Class());
274 //________________________________________________________________________
275 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
276 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
289 ,fIsFromGamma(kFALSE)
293 ,fPartnerCuts(new AliESDtrackCuts())
296 ,fNonHFE(new AliSelectNonHFE())
301 ,fHasCentralitySelection(kFALSE)
303 ,fCentralityHistPass(0)
337 ,fNcells_electrons(0)
344 ,fTPCnsigma_eta_electrons(0)
345 ,fTPCnsigma_eta_hadrons(0)
348 ,fnsigma_p_EoverPcut(0)
349 ,fEoverP_pt_pions2(0)
351 ,fEoverP_pt_hadrons(0)
357 ,fCEtaPhi_ULS_Weight(0)
358 ,fCEtaPhi_LS_Weight(0)
359 ,fCEtaPhi_ULS_NoP_Weight(0)
360 ,fCEtaPhi_LS_NoP_Weight(0)
386 ,fAngleCutFlag(kFALSE)
387 ,fChi2CutFlag(kFALSE)
389 ,fPtBackgroundBeforeReco(0)
390 ,fPtBackgroundAfterReco(0)
392 ,fPtMCparticleReco(0)
393 ,fPtMCparticleAllHfe1(0)
394 ,fPtMCparticleRecoHfe1(0)
395 ,fPtMCparticleAllHfe2(0)
396 ,fPtMCparticleRecoHfe2(0)
397 ,fPtMCelectronAfterAll(0)
400 ,fPtMC_EMCal_Selected(0)
402 ,fPtMC_TPC_Selected(0)
404 ,fPtMCWithoutLabel(0)
405 ,fPtIsPhysicaPrimary(0)
408 ,fPID(new AliHFEpid("hfePid"))
411 ,fRejectKinkMother(kFALSE)
416 ,fMCtrackGGGMother(0)
420 ,fMCparticleMother(0)
421 ,fMCparticleGMother(0)
422 ,fMCparticleGGMother(0)
423 ,fMCparticleGGGMother(0)
433 ,fCEtaPhi_ULS_Weight_EM(0)
434 ,fCEtaPhi_LS_Weight_EM(0)
437 ,fCEtaPhi_Inc_DiHadron(0)
441 // Define input and output slots here
442 // Input slot #0 works with a TChain
443 DefineInput(0, TChain::Class());
444 // Output slot #0 id reserved by the base class for AOD
445 // Output slot #1 writes into a TH1 container
446 // DefineOutput(1, TH1I::Class());
447 DefineOutput(1, TList::Class());
448 //DefineOutput(3, TTree::Class());
451 //______________________________________________________________________
452 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
461 //______________________________________________________________________
462 //Create Output Objects
463 //Here we can define the histograms and others output files
465 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
467 //______________________________________________________________________
469 if(!fPID->GetNumberOfPIDdetectors())
471 fPID->AddDetector("TPC", 0);
474 fPID->SortDetectors();
476 fPIDqa = new AliHFEpidQAmanager();
477 fPIDqa->Initialize(fPID);
478 //______________________________________________________________________
480 //______________________________________________________________________
481 //Initialize correction Framework and Cuts
482 fCFM = new AliCFManager;
483 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
484 fCFM->SetNStepParticle(kNcutSteps);
485 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
489 AliWarning("Cuts not available. Default cuts will be used");
490 fCuts = new AliHFEcuts;
491 fCuts->CreateStandardCuts();
494 fCuts->Initialize(fCFM);
495 //______________________________________________________________________
497 ///______________________________________________________________________
500 fOutputList = new TList();
501 fOutputList->SetOwner();
504 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
506 //Store the number of events
508 fNevent = new TH1F("fNevent","Number of Events",5,-0.5,4.5);
509 //And then, add to the output list
510 fOutputList->Add(fNevent);
512 fpid = new TH1F("fpid","PID flag",5,0,5);
513 fOutputList->Add(fpid);
516 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{t} (GeV/c); Count",200,0,20);
517 fPtElec_ULS = new TH1F("fPtElec_ULS","Inclusive Electrons; p_{t} (GeV/c); Count",200,0,20);
518 fPtElec_LS = new TH1F("fPtElec_LS","Inclusive Electrons; p_{t} (GeV/c); Count",200,0,20);
519 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",200,0,20);
520 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
522 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
523 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
527 fOutputList->Add(fPtElec_Inc);
528 fOutputList->Add(fPtElec_ULS);
529 fOutputList->Add(fPtElec_LS);
530 fOutputList->Add(fPtTrigger_Inc);
531 fOutputList->Add(fTPCnsigma_pt_2D);
533 fOutputList->Add(fCharge_n);
534 fOutputList->Add(fCharge_p);
539 //Step 1: Before Track cuts
543 fEoverP_pt = new TH2F *[3];
544 fTPC_p = new TH2F *[3];
545 fTPCnsigma_p = new TH2F *[3];
547 fECluster= new TH1F *[3];
548 fEtaPhi= new TH2F *[3];
549 fVtxZ= new TH1F *[3];
550 fNTracks= new TH1F *[3];
551 fNClusters= new TH1F *[3];
552 fTPCNcls_EoverP= new TH2F *[3];
554 for(Int_t i = 0; i < 3; i++)
556 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
557 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);
558 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
561 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
562 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
563 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
564 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,1000);
565 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
566 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
569 fOutputList->Add(fEoverP_pt[i]);
570 fOutputList->Add(fTPC_p[i]);
571 fOutputList->Add(fTPCnsigma_p[i]);
574 fOutputList->Add(fECluster[i]);
575 fOutputList->Add(fEtaPhi[i]);
576 fOutputList->Add(fVtxZ[i]);
577 fOutputList->Add(fNTracks[i]);
578 fOutputList->Add(fNClusters[i]);
579 fOutputList->Add(fTPCNcls_EoverP[i]);
583 Int_t fPtBin[6] = {2,4,6,8,10,15};
585 fEoverP_tpc = new TH2F *[5];
586 fTPC_pt = new TH1F *[5];
587 fTPCnsigma_pt = new TH1F *[5];
592 fR_EoverP=new TH2F *[5];
593 fNcells=new TH1F *[5];
594 fNcells_EoverP=new TH2F *[5];
595 fM02_EoverP= new TH2F *[5];
596 fM20_EoverP= new TH2F *[5];
597 fEoverP_ptbins=new TH1F *[5];
598 fECluster_ptbins=new TH1F *[5];
599 fEoverP_wSSCut=new TH1F *[5];
600 fNcells_electrons=new TH1F *[5];
601 fNcells_hadrons=new TH1F *[5];
602 fTPCnsigma_eta_electrons=new TH2F *[5];
603 fTPCnsigma_eta_hadrons=new TH2F *[5];
607 fCEtaPhi_Inc = new TH2F *[5];
608 fCEtaPhi_Inc_DiHadron = new TH2F *[5];
610 fCEtaPhi_ULS = new TH2F *[5];
611 fCEtaPhi_LS = new TH2F *[5];
612 fCEtaPhi_ULS_NoP = new TH2F *[5];
613 fCEtaPhi_LS_NoP = new TH2F *[5];
615 fCEtaPhi_ULS_Weight = new TH2F *[5];
616 fCEtaPhi_LS_Weight = new TH2F *[5];
617 fCEtaPhi_ULS_NoP_Weight = new TH2F *[5];
618 fCEtaPhi_LS_NoP_Weight = new TH2F *[5];
620 fCEtaPhi_Inc_EM = new TH2F *[5];
622 fCEtaPhi_ULS_EM = new TH2F *[5];
623 fCEtaPhi_LS_EM = new TH2F *[5];
625 fCEtaPhi_ULS_Weight_EM = new TH2F *[5];
626 fCEtaPhi_LS_Weight_EM = new TH2F *[5];
628 fInvMass = new TH1F("fInvMass","",200,0,0.3);
629 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
630 fDCA = new TH1F("fDCA","",200,0,1);
631 fDCABack = new TH1F("fDCABack","",200,0,1);
632 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
633 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
635 fOutputList->Add(fInvMass);
636 fOutputList->Add(fInvMassBack);
637 fOutputList->Add(fDCA);
638 fOutputList->Add(fDCABack);
639 fOutputList->Add(fOpAngle);
640 fOutputList->Add(fOpAngleBack);
643 for(Int_t i = 0; i < 5; i++)
645 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);
646 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);
647 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);
649 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);
650 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);
651 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);
652 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);
653 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);
654 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);
655 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);
656 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);
657 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,1,100,0,2);
658 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,1,100,0,2);
659 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);
660 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);
661 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);
662 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);
663 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);
665 fOutputList->Add(fEoverP_tpc[i]);
666 fOutputList->Add(fTPC_pt[i]);
667 fOutputList->Add(fTPCnsigma_pt[i]);
669 fOutputList->Add(fEta[i]);
670 fOutputList->Add(fPhi[i]);
671 fOutputList->Add(fR[i]);
672 fOutputList->Add(fR_EoverP[i]);
673 fOutputList->Add(fNcells[i]);
674 fOutputList->Add(fNcells_electrons[i]);
675 fOutputList->Add(fNcells_hadrons[i]);
676 fOutputList->Add(fNcells_EoverP[i]);
677 fOutputList->Add(fECluster_ptbins[i]);
678 fOutputList->Add(fEoverP_ptbins[i]);
679 fOutputList->Add(fEoverP_wSSCut[i]);
680 fOutputList->Add(fM02_EoverP[i]);
681 fOutputList->Add(fM20_EoverP[i]);
682 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
683 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
688 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);
689 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);
691 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);
692 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);
693 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);
694 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);
696 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);
697 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);
698 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);
699 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);
701 fOutputList->Add(fCEtaPhi_Inc[i]);
702 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
704 fOutputList->Add(fCEtaPhi_ULS[i]);
705 fOutputList->Add(fCEtaPhi_LS[i]);
706 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
707 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
709 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
710 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
711 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
712 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
716 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);
718 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);
719 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);
721 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);
722 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);
724 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
726 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
727 fOutputList->Add(fCEtaPhi_LS_EM[i]);
729 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
730 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
736 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
737 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
740 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
741 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
743 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
744 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
746 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
747 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
750 fOutputList->Add(fTPCnsigma_eta);
751 fOutputList->Add(fTPCnsigma_phi);
753 fOutputList->Add(fNcells_pt);
754 fOutputList->Add(fEoverP_pt_pions);
756 fOutputList->Add(ftpc_p_EoverPcut);
757 fOutputList->Add(fnsigma_p_EoverPcut);
759 fOutputList->Add(fEoverP_pt_pions2);
760 fOutputList->Add(fEoverP_pt_hadrons);
762 //__________________________________________________________________
766 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{t} (GeV/c);Count",30,0,15);
767 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{t} (GeV/c);Count",30,0,15);
768 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{t} (GeV/c);Count",200,0,40);
769 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{t} (GeV/c);Count",200,0,40);
770 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
771 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
772 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
773 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
774 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{t} (GeV/c);Count",200,0,40);
775 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,40);
776 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
777 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
778 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{t} (GeV/c);Count",200,0,40);
779 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{t} (GeV/c);Count",200,0,40);
780 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
781 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
782 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
784 fOutputList->Add(fPtBackgroundBeforeReco);
785 fOutputList->Add(fPtBackgroundAfterReco);
786 fOutputList->Add(fPtMCparticleAll);
787 fOutputList->Add(fPtMCparticleReco);
788 fOutputList->Add(fPtMCparticleAllHfe1);
789 fOutputList->Add(fPtMCparticleRecoHfe1);
790 fOutputList->Add(fPtMCparticleAllHfe2);
791 fOutputList->Add(fPtMCparticleRecoHfe2);
792 fOutputList->Add(fPtMCelectronAfterAll);
793 fOutputList->Add(fPtMCpi0);
794 fOutputList->Add(fPtMC_EMCal_All);
795 fOutputList->Add(fPtMC_EMCal_Selected);
796 fOutputList->Add(fPtMC_TPC_All);
797 fOutputList->Add(fPtMC_TPC_Selected);
798 fOutputList->Add(fPtMCWithLabel);
799 fOutputList->Add(fPtMCWithoutLabel);
800 fOutputList->Add(fPtIsPhysicaPrimary);
803 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
804 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
805 fOutputList->Add(fCentralityHist);
806 fOutputList->Add(fCentralityHistPass);
808 //______________________________________________________________________
809 //Mixed event analysis
812 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
813 fOutputList->Add(fPoolNevents);
815 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.
816 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
818 Int_t nCentralityBins = 15;
819 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
822 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
824 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
826 //______________________________________________________________________
828 PostData(1, fOutputList);
830 ///______________________________________________________________________
833 //______________________________________________________________________
835 //Called for each event
836 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
839 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
840 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
844 printf("ERROR: fESD & fAOD not available\n");
848 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
852 printf("ERROR: fVEvent not available\n");
859 AliError("HFE cuts not available");
863 if(!fPID->IsInitialized())
865 // Initialize PID with the given run number
866 AliWarning("PID not initialised, get from Run no");
870 fPID->InitializePID(fAOD->GetRunNumber());
874 fPID->InitializePID(fESD->GetRunNumber());
879 fPidResponse = fInputHandler->GetPIDResponse();
885 AliDebug(1, "Using default PID Response");
886 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
889 fPID->SetPIDResponse(fPidResponse);
891 fCFM->SetRecEventInfo(fVevent);
893 Double_t *fListOfmotherkink = 0;
894 Int_t fNumberOfVertices = 0;
895 Int_t fNumberOfMotherkink = 0;
897 //______________________________________________________________________
901 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
902 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
903 TString vtxTtl = trkVtx->GetTitle();
904 if(!vtxTtl.Contains("VertexerTracks")) return;
905 Float_t zvtx = trkVtx->GetZ();
907 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
908 if(spdVtx->GetNContributors()<=0) return;
909 TString vtxTyp = spdVtx->GetTitle();
911 spdVtx->GetCovarianceMatrix(cov);
912 Double_t zRes = TMath::Sqrt(cov[5]);
913 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
914 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
915 if(TMath::Abs(zvtx) > 10) return;
917 //Look for kink mother for AOD
919 fNumberOfVertices = 0;
920 fNumberOfMotherkink = 0;
924 fNumberOfVertices = fAOD->GetNumberOfVertices();
926 fListOfmotherkink = new Double_t[fNumberOfVertices];
928 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
930 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
931 if(!aodvertex) continue;
932 if(aodvertex->GetType()==AliAODVertex::kKink)
934 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
935 if(!mother1) continue;
936 Int_t idmother = mother1->GetID();
937 fListOfmotherkink[fNumberOfMotherkink] = idmother;
938 fNumberOfMotherkink++;
949 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
950 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
951 TString vtxTtl = trkVtx->GetTitle();
952 if(!vtxTtl.Contains("VertexerTracks")) return;
953 Float_t zvtx = trkVtx->GetZ();
955 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
956 if(spdVtx->GetNContributors()<=0) return;
957 TString vtxTyp = spdVtx->GetTitle();
959 spdVtx->GetCovarianceMatrix(cov);
960 Double_t zRes = TMath::Sqrt(cov[5]);
961 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
962 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
963 if(TMath::Abs(zvtx) > 10) return;
966 //______________________________________________________________________
968 //Only events with at least 2 tracks are accepted
969 Int_t fNOtrks = fVevent->GetNumberOfTracks();
970 if(fNOtrks<2) return;
972 //______________________________________________________________________
973 //Centrality Selection
974 if(fHasCentralitySelection)
976 Float_t centrality = -1;
980 fCentrality = fAOD->GetHeader()->GetCentralityP();
984 fCentrality = fESD->GetCentrality();
987 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
988 else centrality = fCentrality->GetCentralityPercentile("V0A");
990 //cout << "Centrality = " << centrality << " %" << endl;
992 fCentralityHist->Fill(centrality);
994 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
996 fCentralityHistPass->Fill(centrality);
998 //______________________________________________________________________
1000 //______________________________________________________________________
1006 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1010 AliError("Array of MC particles not found");
1014 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1018 AliError("Could not find MC Header in AOD");
1022 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1024 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1026 Int_t pdg = fMCparticle->GetPdgCode();
1027 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1029 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1031 if(fMCparticle->IsPhysicalPrimary())
1033 fPtMCparticleAll->Fill(fMCparticle->Pt());
1035 Bool_t MotherFound = FindMother(iMC);
1038 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCparticle->Pt()); //denominator for total efficiency
1039 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1044 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1049 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1050 if (!fEventHandler) {
1051 Printf("ERROR: Could not retrieve MC event handler");
1055 fMCevent = fEventHandler->MCEvent();
1057 Printf("ERROR: Could not retrieve MC event");
1061 fMCstack = fMCevent->Stack();
1063 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1066 fMCtrack = fMCstack->Particle(iMC);
1067 Int_t pdg = fMCtrack->GetPdgCode();
1068 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
1070 if(!fMCstack->IsPhysicalPrimary(iMC)) continue;
1073 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1075 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1077 fPtMCparticleAll->Fill(fMCtrack->Pt());
1079 Bool_t MotherFound = FindMother(iMC);
1082 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency
1083 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
1091 //______________________________________________________________________
1092 //EMCal Trigger Selection (Threshould selection)
1093 TString firedTrigger;
1094 TString TriggerEG1("EG1");
1095 TString TriggerEG2("EG2");
1097 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1098 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1101 if(firedTrigger.Contains(TriggerEG1)) fNevent->Fill(1);
1102 if(firedTrigger.Contains(TriggerEG2)) fNevent->Fill(2);
1105 if(firedTrigger.Contains(TriggerEG1))
1115 if(firedTrigger.Contains(TriggerEG2))
1124 //______________________________________________________________________
1127 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
1128 else ClsNo = fAOD->GetNumberOfCaloClusters();
1130 //______________________________________________________________________
1132 ///______________________________________________________________________
1134 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1136 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1139 printf("ERROR: Could not receive track %d\n", iTracks);
1143 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1144 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
1145 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1147 Double_t fTPCnSigma = -999;
1148 Double_t fTPCnSigma_pion = -999;
1149 Double_t fTPCnSigma_proton = -999;
1150 Double_t fTPCnSigma_kaon = -999;
1151 Double_t fTPCsignal = -999;
1152 Double_t fPt = -999;
1155 ///_____________________________________________________________________________
1156 ///Fill QA plots without track selection
1158 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
1160 fTPCsignal = track->GetTPCsignal();
1161 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
1162 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
1163 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
1164 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
1166 fTPC_p[0]->Fill(fPt,fTPCsignal);
1167 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
1170 Float_t TPCNcls = track->GetTPCNcls();
1171 Float_t pos[3]={0,0,0};
1173 Double_t fEMCflag = kFALSE;
1174 if(track->GetEMCALcluster()>0)
1176 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1177 if(fClus->IsEMCAL())
1179 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1182 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
1185 Float_t Energy = fClus->E();
1186 Float_t EoverP = Energy/track->P();
1187 //Float_t M02 = fClus->GetM02();
1188 //Float_t M20 = fClus->GetM20();
1190 /////////////// for Eta Phi distribution
1191 fClus->GetPosition(pos);
1192 TVector3 vpos(pos[0],pos[1],pos[2]);
1193 Double_t cphi = vpos.Phi();
1194 Double_t ceta = vpos.Eta();
1195 fEtaPhi[0]->Fill(cphi,ceta);
1197 fECluster[0]->Fill(Energy);
1198 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
1203 //______________________________________________________________
1206 fVtxZ[0]->Fill(fZvtx);
1207 fNTracks[0]->Fill(fNOtrks);
1208 fNClusters[0]->Fill(ClsNo);
1210 //______________________________________________________________
1212 ///Fill QA plots without track selection
1213 ///_____________________________________________________________________________
1214 //______________________________________________________________________________________
1215 //Track Selection Cuts
1217 //AOD (Test Filter Bit)
1220 // standard cuts with very loose DCA - BIT(4)
1223 GetStandardITSTPCTrackCuts2011(kFALSE)
1224 SetMaxChi2PerClusterTPC(4);
1225 SetAcceptKinkDaughters(kFALSE);
1226 SetRequireTPCRefit(kTRUE);
1227 SetRequireITSRefit(kTRUE);
1228 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1229 SetMaxDCAToVertexZ(2);
1230 SetMaxDCAToVertex2D(kFALSE);
1231 SetRequireSigmaToVertex(kFALSE);
1232 SetMaxChi2PerClusterITS(36);
1233 SetMaxDCAToVertexXY(2.4)
1234 SetMaxDCAToVertexZ(3.2)
1235 SetDCaToVertex2D(kTRUE)
1238 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
1241 //RecKine: ITSTPC cuts
1242 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
1244 if(fRejectKinkMother)
1248 Bool_t kinkmotherpass = kTRUE;
1249 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
1251 if(track->GetID() == fListOfmotherkink[kinkmother])
1253 kinkmotherpass = kFALSE;
1257 if(!kinkmotherpass) continue;
1261 if(etrack->GetKinkIndex(0) != 0) continue;
1268 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
1271 //HFEcuts: ITS layers cuts
1272 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
1274 //HFE cuts: TPC PID cleanup
1275 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
1276 //______________________________________________________________________________________
1278 ///_____________________________________________________________
1279 ///QA plots after track selection
1282 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
1283 else fPtMCWithoutLabel->Fill(fPt);
1286 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1288 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1290 if(fMCparticle->IsPhysicalPrimary()) fPtIsPhysicaPrimary->Fill(fPt);
1292 Int_t pdg = fMCparticle->GetPdgCode();
1293 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1295 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1297 if(fMCparticle->IsPhysicalPrimary())
1299 fPtMCparticleReco->Fill(fMCparticle->Pt());
1301 Bool_t MotherFound = FindMother(track->GetLabel());
1304 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());
1305 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
1311 else if(fIsMC && track->GetLabel()>=0)
1313 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1315 fPtIsPhysicaPrimary->Fill(fPt);
1316 fMCtrack = fMCstack->Particle(track->GetLabel());
1318 Int_t pdg = fMCtrack->GetPdgCode();
1319 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1321 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1323 fPtMCparticleReco->Fill(fMCtrack->Pt());
1325 Bool_t MotherFound = FindMother(track->GetLabel());
1328 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());
1329 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
1336 fTPC_p[1]->Fill(fPt,fTPCsignal);
1337 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
1338 Double_t fPtBin[6] = {2,4,6,8,10,15};
1340 TPCNcls = track->GetTPCNcls();
1341 Float_t pos2[3]={0,0,0};
1343 if(track->GetEMCALcluster()>0)
1345 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1346 if(fClus->IsEMCAL())
1348 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1350 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
1352 Float_t Energy = fClus->E();
1353 Float_t EoverP = Energy/track->P();
1354 //Float_t M02 = fClus->GetM02();
1355 //Float_t M20 = fClus->GetM20();
1356 Float_t ncells = fClus->GetNCells();
1358 /////////////// for Eta Phi distribution
1359 fClus->GetPosition(pos2);
1360 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
1361 Double_t cphi = vpos.Phi();
1362 Double_t ceta = vpos.Eta();
1363 fEtaPhi[1]->Fill(cphi,ceta);
1365 fECluster[1]->Fill(Energy);
1366 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
1369 //for EMCal triggger performance
1371 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
1372 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
1377 //for hadron contamination calculations
1381 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1383 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
1385 if(fTPCnSigma<-3.5){
1386 fEoverP_pt_hadrons->Fill(fPt,EoverP);
1390 if(fTPCnSigma < -3.5){
1391 fEoverP_pt_pions->Fill(fPt, EoverP);
1395 if(fTPCnSigma < -3.5 && fTPCnSigma > -10){
1396 fEoverP_pt_pions2->Fill(fPt, EoverP);
1401 for(Int_t i = 0; i < 5; i++)
1403 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1406 if(fTPCnSigma < -5 && fTPCnSigma > -10){
1407 fNcells_hadrons[i]->Fill(ncells);
1409 //hadrons selection using E/p
1410 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
1411 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
1413 //electrons selection using E/p
1414 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1415 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
1420 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1422 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
1423 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
1427 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1429 fPtTrigger_Inc->Fill(fPt);
1430 DiHadronCorrelation(track, iTracks);
1439 //______________________________________________________________
1442 fVtxZ[1]->Fill(fZvtx);
1443 fNTracks[1]->Fill(fNOtrks);
1444 fNClusters[1]->Fill(ClsNo);
1445 //______________________________________________________________
1447 ///______________________________________________________________________
1448 ///Histograms for PID Studies
1449 //Double_t fPtBin[6] = {2,4,6,8,10,15};
1451 for(Int_t i = 0; i < 5; i++)
1453 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1455 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
1458 fTPC_pt[i]->Fill(fTPCsignal);
1459 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
1464 ///QA plots after track selection
1465 ///_____________________________________________________________
1467 //_______________________________________________________
1468 //Correlation Analysis - DiHadron
1471 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1473 fPtTrigger_Inc->Fill(fPt);
1474 DiHadronCorrelation(track, iTracks);
1477 //_______________________________________________________
1480 //!//////////////////////////////////////////////////////////////////
1481 ///TPC - efficiency calculation //
1483 /// changing start here
1484 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1486 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1487 Int_t pdg = fMCparticle->GetPdgCode();
1490 if(fMCparticle->IsPhysicalPrimary()){
1493 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1495 Bool_t MotherFound = FindMother(track->GetLabel());
1497 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1498 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1499 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
1506 else if(fIsMC && track->GetLabel()>=0)//ESD
1509 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1510 fMCtrack = fMCstack->Particle(track->GetLabel());
1512 Int_t pdg = fMCtrack->GetPdgCode();
1513 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1515 if(fMCtrack->GetFirstMother()>0){
1516 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1517 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1518 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
1526 ///________________________________________________________________________
1528 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
1529 Int_t pidpassed = 1;
1530 AliHFEpidObject hfetrack;
1531 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
1532 hfetrack.SetRecTrack(track);
1533 hfetrack.SetPP(); //proton-proton analysis
1534 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
1535 fpid->Fill(pidpassed);
1537 if(pidpassed==0) continue;
1538 ///________________________________________________________________________
1541 //!//////////////////////////////////////////////////////////////////
1542 ///TPC efficiency calculations
1544 /// changing start here
1545 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1547 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1548 Int_t pdg = fMCparticle->GetPdgCode();
1551 if(fMCparticle->IsPhysicalPrimary()){
1554 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1556 Bool_t MotherFound = FindMother(track->GetLabel());
1558 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1559 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1560 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
1567 else if(fIsMC && track->GetLabel()>=0)//ESD
1570 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1571 fMCtrack = fMCstack->Particle(track->GetLabel());
1573 Int_t pdg = fMCtrack->GetPdgCode();
1574 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1576 if(fMCtrack->GetFirstMother()>0){
1577 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1578 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1579 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
1586 //Eta Cut for TPC only
1587 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1588 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
1591 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
1592 fTPC_p[2]->Fill(fP,fTPCsignal);
1593 TPCNcls = track->GetTPCNcls();
1594 Float_t pos3[3]={0,0,0};
1596 if(track->GetEMCALcluster()>0)
1598 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1599 if(fClus->IsEMCAL())
1603 /////////////// Residuals
1604 Double_t Dx = fClus->GetTrackDx();
1605 Double_t Dz = fClus->GetTrackDz();
1606 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
1607 for(Int_t i = 0; i < 5; i++)
1609 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1618 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1622 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1623 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
1626 Float_t Energy = fClus->E();
1627 Float_t EoverP = Energy/track->P();
1628 Float_t M02 = fClus->GetM02();
1629 Float_t M20 = fClus->GetM20();
1630 Float_t ncells = fClus->GetNCells();
1633 /////////////// for Eta Phi distribution
1634 fClus->GetPosition(pos3);
1635 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
1636 Double_t cphi = vpos.Phi();
1637 Double_t ceta = vpos.Eta();
1638 fEtaPhi[2]->Fill(cphi,ceta);
1642 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
1644 for(Int_t i = 0; i < 5; i++)
1646 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1649 fR_EoverP[i]->Fill(R, EoverP);
1650 fNcells[i]->Fill(ncells);
1651 fNcells_EoverP[i]->Fill(EoverP, ncells);
1652 fM02_EoverP[i]->Fill(M02,EoverP);
1653 fM20_EoverP[i]->Fill(M20,EoverP);
1654 fECluster_ptbins[i]->Fill(Energy);
1655 fEoverP_ptbins[i]->Fill(EoverP);
1657 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1658 fNcells_electrons[i]->Fill(ncells);
1661 if(M02<0.5 && M20<0.3) {
1662 fEoverP_wSSCut[i]->Fill(EoverP);
1667 fNcells_pt->Fill(fPt, ncells);
1670 ////////////////////////////////////////////////////////////////////
1671 ///EMCal - Efficiency calculations
1673 /// changing start here
1674 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1676 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1677 Int_t pdg = fMCparticle->GetPdgCode();
1680 if(fMCparticle->IsPhysicalPrimary()){
1683 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1685 Bool_t MotherFound = FindMother(track->GetLabel());
1687 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1688 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1689 fPtMC_EMCal_All->Fill(fMCparticle->Pt());
1696 else if(fIsMC && track->GetLabel()>=0)//ESD
1699 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1702 fMCtrack = fMCstack->Particle(track->GetLabel());
1704 Int_t pdg = fMCtrack->GetPdgCode();
1705 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
1707 if(fMCtrack->GetFirstMother()>0){
1708 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1709 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1711 fPtMC_EMCal_All->Fill(fMCtrack->Pt());
1719 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1722 fECluster[2]->Fill(Energy);
1723 //_______________________________________________________
1724 //Correlation Analysis
1727 fPtElec_Inc->Fill(fPt);
1729 if(fCorrelationFlag)
1731 ElectronHadronCorrelation(track, iTracks, Vtrack);
1734 //_______________________________________________________
1736 ////////////////////////////////////////////////////////////////////
1737 ///EMCal - efficiency calculations
1739 if(track->Charge()<0) fCharge_n->Fill(fPt);
1740 if(track->Charge()>0) fCharge_p->Fill(fPt);
1743 /// changing start here
1744 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1746 if(track->Charge()<0) fCharge_n->Fill(fPt);
1747 if(track->Charge()>0) fCharge_p->Fill(fPt);
1749 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1750 Int_t pdg = fMCparticle->GetPdgCode();
1753 if(fMCparticle->IsPhysicalPrimary()){
1756 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1758 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCparticle->Pt()); //numerator for the total efficiency
1761 Bool_t MotherFound = FindMother(track->GetLabel());
1763 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1764 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1765 fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
1772 else if(fIsMC && track->GetLabel()>=0)//ESD
1774 if(track->Charge()<0) fCharge_n->Fill(fPt);
1775 if(track->Charge()>0) fCharge_p->Fill(fPt);
1777 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1779 Bool_t MotherFound = FindMother(track->GetLabel());
1780 fMCtrack = fMCstack->Particle(track->GetLabel());
1783 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
1784 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency
1790 Int_t pdg = fMCtrack->GetPdgCode();
1791 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
1793 if(fMCtrack->GetFirstMother()>0){
1794 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1795 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1797 fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());
1803 ///////////////////////////////////////////////////////////////////
1811 //______________________________________________________________
1814 fVtxZ[2]->Fill(fZvtx);
1815 fNTracks[2]->Fill(fNOtrks);
1816 fNClusters[2]->Fill(ClsNo);
1818 //______________________________________________________________
1820 //_______________________________________________________
1821 //Correlation Analysis
1824 fPtElec_Inc->Fill(fPt);
1826 if(fCorrelationFlag)
1828 ElectronHadronCorrelation(track, iTracks, Vtrack);
1831 //_______________________________________________________
1833 ///________________________________________________________________________
1836 //__________________________________________________________________
1837 //Event Mixing Analysis
1839 if(fEventMixingFlag)
1841 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
1843 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
1845 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!
1850 //__________________________________________________________________
1852 delete fListOfmotherkink;
1853 PostData(1, fOutputList);
1856 //______________________________________________________________________
1857 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
1859 //Draw result to the screen
1860 //Called once at the end of the query
1862 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
1866 printf("ERROR: Output list not available\n");
1871 //______________________________________________________________________
1872 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
1874 //Check single track cuts for a given cut step
1875 //Note this function is called inside the UserExec function
1876 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
1877 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
1881 //______________________________________________________________________
1882 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
1884 ///_________________________________________________________________
1888 if(track->GetLabel() < 0)
1890 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
1896 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1898 if(fMCparticle->GetMother()<0) return;
1900 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1902 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
1905 fPtBackgroundBeforeReco->Fill(track->Pt());
1910 fMCtrack = fMCstack->Particle(track->GetLabel());
1912 if(fMCtrack->GetFirstMother()<0) return;
1914 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1916 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
1919 fPtBackgroundBeforeReco->Fill(track->Pt());
1923 ///_________________________________________________________________
1925 //________________________________________________
1926 //Associated particle cut
1927 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
1928 fPartnerCuts->SetRequireITSRefit(kTRUE);
1929 fPartnerCuts->SetRequireTPCRefit(kTRUE);
1930 fPartnerCuts->SetEtaRange(-0.9,0.9);
1931 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
1932 fPartnerCuts->SetMinNClustersTPC(80);
1933 fPartnerCuts->SetPtRange(0.3,1e10);
1934 fPartnerCuts->SetDCAToVertex2D(kTRUE);
1935 fPartnerCuts->SetMaxDCAToVertexXY(2.4);
1936 fPartnerCuts->SetMaxDCAToVertexZ(3.2);
1937 //_________________________________________________
1939 ///#################################################################
1940 //Non-HFE reconstruction
1941 fNonHFE = new AliSelectNonHFE();
1942 fNonHFE->SetAODanalysis(fIsAOD);
1943 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
1944 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
1945 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
1946 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
1947 fNonHFE->SetAlgorithm("DCA"); //KF
1948 fNonHFE->SetPIDresponse(fPidResponse);
1949 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
1951 fNonHFE->SetHistAngleBack(fOpAngleBack);
1952 fNonHFE->SetHistAngle(fOpAngle);
1953 fNonHFE->SetHistDCABack(fDCABack);
1954 fNonHFE->SetHistDCA(fDCA);
1955 fNonHFE->SetHistMassBack(fInvMassBack);
1956 fNonHFE->SetHistMass(fInvMass);
1958 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
1960 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
1961 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
1962 Bool_t fUlsIsPartner = kFALSE;
1963 Bool_t fLsIsPartner = kFALSE;
1964 ///#################################################################
1966 //Electron Information
1967 Double_t fPhiE = -999;
1968 Double_t fEtaE = -999;
1969 Double_t fPhiH = -999;
1970 Double_t fEtaH = -999;
1971 Double_t fDphi = -999;
1972 Double_t fDeta = -999;
1973 Double_t fPtE = -999;
1974 Double_t fPtH = -999;
1976 Double_t pi = TMath::Pi();
1978 fPhiE = track->Phi();
1979 fEtaE = track->Eta();
1982 ///_________________________________________________________________
1988 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
1990 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
1991 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
1996 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
1998 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
1999 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2003 ///_________________________________________________________________
2006 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2007 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2010 //__________________________________________________________________
2011 //Event Mixing Analysis - Hadron Loop
2013 if(fEventMixingFlag)
2015 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2017 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2019 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
2021 fPoolNevents->Fill(fPool->GetCurrentNEvents());
2023 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
2025 TObjArray* bgTracks = fPool->GetEvent(jMix);
2027 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
2029 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
2030 if (NULL == MixedTrack) continue;
2032 fPhiH = MixedTrack->Phi();
2033 fEtaH = MixedTrack->Eta();
2034 fPtH = MixedTrack->Pt();
2036 if(fPtH>fPtE || fPtH<1) continue;
2038 fDphi = fPhiE - fPhiH;
2040 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2041 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2043 fDeta = fEtaE - fEtaH;
2045 Double_t fPtBin[6] = {2,4,6,8,10,15};
2047 for(Int_t i = 0; i < 5; i++)
2049 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2051 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
2053 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
2054 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
2056 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2057 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2061 // TODO your code: do event mixing with current event and bgTracks
2062 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
2067 //__________________________________________________________________
2069 //__________________________________________________________________
2070 //Same Event Analysis - Hadron Loop
2071 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2073 if(trackIndex==iTracks) continue;
2075 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2078 printf("ERROR: Could not receive track %d\n", iTracks);
2082 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2086 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2087 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2088 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2089 if(atrack2->GetTPCNcls() < 80) continue;
2093 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2094 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2097 fPhiH = track2->Phi();
2098 fEtaH = track2->Eta();
2099 fPtH = track2->Pt();
2101 if(fPtH>fPtE || fPtH<1) continue;
2103 fDphi = fPhiE - fPhiH;
2105 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2106 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2108 fDeta = fEtaE - fEtaH;
2110 Double_t fPtBin[6] = {2,4,6,8,10,15};
2112 //______________________________________________________________
2113 //Check if this track is a Non-HFE partner
2114 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
2116 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
2118 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
2120 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
2122 //______________________________________________________________
2124 for(Int_t i = 0; i < 5; i++)
2126 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2128 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
2130 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
2131 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
2132 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
2133 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
2135 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2136 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2137 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2138 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2144 //____________________________________________________________________________________________________________
2145 //Create a TObjArray with selected hadrons, for the mixed event analysis
2146 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
2148 fTracksClone = new TObjArray;
2149 fTracksClone->SetOwner(kTRUE);
2151 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2153 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2156 printf("ERROR: Could not receive track %d\n", iTracks);
2160 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2164 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2165 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2166 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2167 if(atrack2->GetTPCNcls() < 80) continue;
2171 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2172 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2175 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
2177 return fTracksClone;
2179 //____________________________________________________________________________________________________________
2181 //______________________________________________________________________
2182 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
2184 //________________________________________________
2185 //Associated particle cut
2186 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2187 fPartnerCuts->SetRequireITSRefit(kTRUE);
2188 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2189 fPartnerCuts->SetEtaRange(-0.9,0.9);
2190 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2191 fPartnerCuts->SetMinNClustersTPC(80);
2192 fPartnerCuts->SetPtRange(0.3,1e10);
2193 fPartnerCuts->SetDCAToVertex2D(kTRUE);
2194 fPartnerCuts->SetMaxDCAToVertexXY(2.4);
2195 fPartnerCuts->SetMaxDCAToVertexZ(3.2);
2196 //_________________________________________________
2198 //Electron Information
2199 Double_t fPhiE = -999;
2200 Double_t fEtaE = -999;
2201 Double_t fPhiH = -999;
2202 Double_t fEtaH = -999;
2203 Double_t fDphi = -999;
2204 Double_t fDeta = -999;
2205 Double_t fPtE = -999;
2206 Double_t fPtH = -999;
2208 Double_t pi = TMath::Pi();
2210 fPhiE = track->Phi();
2211 fEtaE = track->Eta();
2214 //__________________________________________________________________
2215 //Same Event Analysis - Hadron Loop
2216 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2218 if(trackIndex==iTracks) continue;
2220 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2223 printf("ERROR: Could not receive track %d\n", iTracks);
2227 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2231 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2232 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2233 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2234 if(atrack2->GetTPCNcls() < 80) continue;
2238 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2239 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2242 fPhiH = track2->Phi();
2243 fEtaH = track2->Eta();
2244 fPtH = track2->Pt();
2246 if(fPtH>fPtE || fPtH<1) continue;
2248 fDphi = fPhiE - fPhiH;
2250 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2251 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2253 fDeta = fEtaE - fEtaH;
2255 Double_t fPtBin[6] = {2,4,6,8,10,15};
2257 for(Int_t i = 0; i < 5; i++)
2259 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2261 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
2266 //____________________________________________________________________________________________________________
2268 //______________________________________________________________________
2269 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
2276 fIsFromPi0 = kFALSE;
2277 fIsFromEta = kFALSE;
2278 fIsFromGamma = kFALSE;
2280 if(mcIndex < 0 || !fIsMC)
2286 Int_t mpdg = -99999;
2287 Int_t gmpdg = -99999;
2288 Int_t ggmpdg = -99999;
2289 Int_t gggmpdg = -99999;
2293 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
2295 pdg = TMath::Abs(fMCparticle->GetPdgCode());
2305 fIsFromPi0 = kFALSE;
2306 fIsFromEta = kFALSE;
2307 fIsFromGamma = kFALSE;
2311 if(fMCparticle->GetMother()<0)
2318 fIsFromPi0 = kFALSE;
2319 fIsFromEta = kFALSE;
2320 fIsFromGamma = kFALSE;
2324 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2325 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
2327 if(fMCparticleMother->GetMother()<0)
2335 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
2336 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
2337 if(fMCparticleGMother->GetMother()<0)
2344 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
2345 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
2346 if(fMCparticleGGMother->GetMother()<0)
2352 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
2353 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
2360 fMCtrack = fMCstack->Particle(mcIndex);
2362 pdg = TMath::Abs(fMCtrack->GetPdgCode());
2371 fIsFromPi0 = kFALSE;
2372 fIsFromEta = kFALSE;
2373 fIsFromGamma = kFALSE;
2377 if(fMCtrack->GetFirstMother()<0)
2384 fIsFromPi0 = kFALSE;
2385 fIsFromEta = kFALSE;
2386 fIsFromGamma = kFALSE;
2390 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2391 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
2393 if(fMCtrackMother->GetFirstMother()<0)
2401 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
2402 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
2404 if(fMCtrackGMother->GetFirstMother()<0)
2411 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
2412 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
2414 if(fMCtrackGGMother->GetFirstMother()<0)
2420 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
2421 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
2427 //Tag Electron Source
2428 if(mpdg==111 || mpdg==221 || mpdg==22)
2436 fIsFromPi0 = kFALSE;
2437 fIsFromEta = kFALSE;
2438 fIsFromGamma = kFALSE;
2440 if(mpdg==111) fIsFromPi0 = kFALSE;
2441 if(mpdg==221)fIsFromEta = kFALSE;
2442 if(mpdg==22) fIsFromGamma = kFALSE;
2451 fIsFromPi0 = kFALSE;
2452 fIsFromEta = kFALSE;
2453 fIsFromGamma = kFALSE;
2460 if(mpdg>400 && mpdg<500)
2462 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
2477 else if(mpdg>500 && mpdg<600)