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())
124 ,fHasCentralitySelection(kFALSE)
126 ,fCentralityHistPass(0)
160 ,fNcells_electrons(0)
167 ,fTPCnsigma_eta_electrons(0)
168 ,fTPCnsigma_eta_hadrons(0)
171 ,fnsigma_p_EoverPcut(0)
172 ,fEoverP_pt_pions2(0)
174 ,fEoverP_pt_hadrons(0)
180 ,fCEtaPhi_ULS_Weight(0)
181 ,fCEtaPhi_LS_Weight(0)
182 ,fCEtaPhi_ULS_NoP_Weight(0)
183 ,fCEtaPhi_LS_NoP_Weight(0)
210 ,fAngleCutFlag(kFALSE)
211 ,fChi2CutFlag(kFALSE)
213 ,fPtBackgroundBeforeReco(0)
214 ,fPtBackgroundAfterReco(0)
216 ,fPtMCparticleReco(0)
217 ,fPtMCparticleAllHfe1(0)
218 ,fPtMCparticleRecoHfe1(0)
219 ,fPtMCparticleAllHfe2(0)
220 ,fPtMCparticleRecoHfe2(0)
221 ,fPtMCelectronAfterAll(0)
224 ,fPtMC_EMCal_Selected(0)
226 ,fPtMC_TPC_Selected(0)
228 ,fPtMCWithoutLabel(0)
229 ,fPtIsPhysicaPrimary(0)
232 ,fPID(new AliHFEpid("hfePid"))
235 ,fRejectKinkMother(kFALSE)
240 ,fMCtrackGGGMother(0)
244 ,fMCparticleMother(0)
245 ,fMCparticleGMother(0)
246 ,fMCparticleGGMother(0)
247 ,fMCparticleGGGMother(0)
257 ,fCEtaPhi_ULS_Weight_EM(0)
258 ,fCEtaPhi_LS_Weight_EM(0)
261 ,fCEtaPhi_Inc_DiHadron(0)
265 // Define input and output slots here
266 // Input slot #0 works with a TChain
267 DefineInput(0, TChain::Class());
268 // Output slot #0 id reserved by the base class for AOD
269 // Output slot #1 writes into a TH1 container
270 // DefineOutput(1, TH1I::Class());
271 DefineOutput(1, TList::Class());
272 // DefineOutput(3, TTree::Class());
275 //________________________________________________________________________
276 AliAnalysisTaskEMCalHFEpA::AliAnalysisTaskEMCalHFEpA()
277 : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskEMCalHFEpA")
290 ,fIsFromGamma(kFALSE)
294 ,fPartnerCuts(new AliESDtrackCuts())
297 ,fNonHFE(new AliSelectNonHFE())
303 ,fHasCentralitySelection(kFALSE)
305 ,fCentralityHistPass(0)
339 ,fNcells_electrons(0)
346 ,fTPCnsigma_eta_electrons(0)
347 ,fTPCnsigma_eta_hadrons(0)
350 ,fnsigma_p_EoverPcut(0)
351 ,fEoverP_pt_pions2(0)
353 ,fEoverP_pt_hadrons(0)
359 ,fCEtaPhi_ULS_Weight(0)
360 ,fCEtaPhi_LS_Weight(0)
361 ,fCEtaPhi_ULS_NoP_Weight(0)
362 ,fCEtaPhi_LS_NoP_Weight(0)
388 ,fAngleCutFlag(kFALSE)
389 ,fChi2CutFlag(kFALSE)
391 ,fPtBackgroundBeforeReco(0)
392 ,fPtBackgroundAfterReco(0)
394 ,fPtMCparticleReco(0)
395 ,fPtMCparticleAllHfe1(0)
396 ,fPtMCparticleRecoHfe1(0)
397 ,fPtMCparticleAllHfe2(0)
398 ,fPtMCparticleRecoHfe2(0)
399 ,fPtMCelectronAfterAll(0)
402 ,fPtMC_EMCal_Selected(0)
404 ,fPtMC_TPC_Selected(0)
406 ,fPtMCWithoutLabel(0)
407 ,fPtIsPhysicaPrimary(0)
410 ,fPID(new AliHFEpid("hfePid"))
413 ,fRejectKinkMother(kFALSE)
418 ,fMCtrackGGGMother(0)
422 ,fMCparticleMother(0)
423 ,fMCparticleGMother(0)
424 ,fMCparticleGGMother(0)
425 ,fMCparticleGGGMother(0)
435 ,fCEtaPhi_ULS_Weight_EM(0)
436 ,fCEtaPhi_LS_Weight_EM(0)
439 ,fCEtaPhi_Inc_DiHadron(0)
443 // Define input and output slots here
444 // Input slot #0 works with a TChain
445 DefineInput(0, TChain::Class());
446 // Output slot #0 id reserved by the base class for AOD
447 // Output slot #1 writes into a TH1 container
448 // DefineOutput(1, TH1I::Class());
449 DefineOutput(1, TList::Class());
450 //DefineOutput(3, TTree::Class());
453 //______________________________________________________________________
454 AliAnalysisTaskEMCalHFEpA::~AliAnalysisTaskEMCalHFEpA()
463 //______________________________________________________________________
464 //Create Output Objects
465 //Here we can define the histograms and others output files
467 void AliAnalysisTaskEMCalHFEpA::UserCreateOutputObjects()
469 //______________________________________________________________________
471 if(!fPID->GetNumberOfPIDdetectors())
473 fPID->AddDetector("TPC", 0);
476 fPID->SortDetectors();
478 fPIDqa = new AliHFEpidQAmanager();
479 fPIDqa->Initialize(fPID);
480 //______________________________________________________________________
482 //______________________________________________________________________
483 //Initialize correction Framework and Cuts
484 fCFM = new AliCFManager;
485 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
486 fCFM->SetNStepParticle(kNcutSteps);
487 for(Int_t istep = 0; istep < kNcutSteps; istep++) fCFM->SetParticleCutsList(istep, NULL);
491 AliWarning("Cuts not available. Default cuts will be used");
492 fCuts = new AliHFEcuts;
493 fCuts->CreateStandardCuts();
496 fCuts->Initialize(fCFM);
497 //______________________________________________________________________
499 ///______________________________________________________________________
502 fOutputList = new TList();
503 fOutputList->SetOwner();
506 fOutputList->Add(fPIDqa->MakeList("PIDQA"));
508 //Store the number of events
510 fNevent = new TH1F("fNevent","Number of Events",5,-0.5,4.5);
511 //And then, add to the output list
512 fOutputList->Add(fNevent);
514 fpid = new TH1F("fpid","PID flag",5,0,5);
515 fOutputList->Add(fpid);
518 fPtElec_Inc = new TH1F("fPtElec_Inc","Inclusive Electrons; p_{t} (GeV/c); Count",200,0,20);
519 fPtElec_ULS = new TH1F("fPtElec_ULS","Inclusive Electrons; p_{t} (GeV/c); Count",200,0,20);
520 fPtElec_LS = new TH1F("fPtElec_LS","Inclusive Electrons; p_{t} (GeV/c); Count",200,0,20);
521 fPtTrigger_Inc = new TH1F("fPtTrigger_Inc","pT dist for Hadron Contamination; p_{t} (GeV/c); Count",200,0,20);
522 fTPCnsigma_pt_2D = new TH2F("fTPCnsigma_pt_2D",";pt (GeV/c);TPC Electron N#sigma",1000,0.3,30,1000,-15,10);
524 fCharge_n = new TH1F("fCharge_n","Inclusive Electrons (Negative Charge); p_{t} (GeV/c); Count",200,0,30);
525 fCharge_p = new TH1F("fCharge_p","Inclusive Positrons (Positive Charge); p_{t} (GeV/c); Count",200,0,30);
529 fOutputList->Add(fPtElec_Inc);
530 fOutputList->Add(fPtElec_ULS);
531 fOutputList->Add(fPtElec_LS);
532 fOutputList->Add(fPtTrigger_Inc);
533 fOutputList->Add(fTPCnsigma_pt_2D);
535 fOutputList->Add(fCharge_n);
536 fOutputList->Add(fCharge_p);
541 //Step 1: Before Track cuts
545 fEoverP_pt = new TH2F *[3];
546 fTPC_p = new TH2F *[3];
547 fTPCnsigma_p = new TH2F *[3];
549 fECluster= new TH1F *[3];
550 fEtaPhi= new TH2F *[3];
551 fVtxZ= new TH1F *[3];
552 fNTracks= new TH1F *[3];
553 fNClusters= new TH1F *[3];
554 fTPCNcls_EoverP= new TH2F *[3];
556 for(Int_t i = 0; i < 3; i++)
558 fEoverP_pt[i] = new TH2F(Form("fEoverP_pt%d",i),";p_{t} (GeV/c);E / p ",1000,0,30,500,0,2);
559 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);
560 fTPCnsigma_p[i] = new TH2F(Form("fTPCnsigma_p%d",i),";p (GeV/c);TPC Electron N#sigma",1000,0.3,15,1000,-15,10);
563 fECluster[i]= new TH1F(Form("fECluster%d",i), ";ECluster",2000, 0,100);
564 fEtaPhi[i]= new TH2F(Form("fEtaPhi%d",i),"#eta x #phi Clusters;#phi;#eta",200,0.,5,50,-1.,1.);
565 fVtxZ[i]= new TH1F(Form("fVtxZ%d",i),"VtxZ",1000, -50,50);
566 fNTracks[i]= new TH1F(Form("fNTracks%d",i),"NTracks",1000, 0,1000);
567 fNClusters[i]= new TH1F(Form("fNClusters%d",i),"fNClusters0",200, 0,100);
568 fTPCNcls_EoverP[i]= new TH2F(Form("fTPCNcls_EoverP%d",i),"TPCNcls_EoverP",1000,0,200,200,0,2);
571 fOutputList->Add(fEoverP_pt[i]);
572 fOutputList->Add(fTPC_p[i]);
573 fOutputList->Add(fTPCnsigma_p[i]);
576 fOutputList->Add(fECluster[i]);
577 fOutputList->Add(fEtaPhi[i]);
578 fOutputList->Add(fVtxZ[i]);
579 fOutputList->Add(fNTracks[i]);
580 fOutputList->Add(fNClusters[i]);
581 fOutputList->Add(fTPCNcls_EoverP[i]);
585 Int_t fPtBin[6] = {2,4,6,8,10,15};
587 fEoverP_tpc = new TH2F *[5];
588 fTPC_pt = new TH1F *[5];
589 fTPCnsigma_pt = new TH1F *[5];
594 fR_EoverP=new TH2F *[5];
595 fNcells=new TH1F *[5];
596 fNcells_EoverP=new TH2F *[5];
597 fM02_EoverP= new TH2F *[5];
598 fM20_EoverP= new TH2F *[5];
599 fEoverP_ptbins=new TH1F *[5];
600 fECluster_ptbins=new TH1F *[5];
601 fEoverP_wSSCut=new TH1F *[5];
602 fNcells_electrons=new TH1F *[5];
603 fNcells_hadrons=new TH1F *[5];
604 fTPCnsigma_eta_electrons=new TH2F *[5];
605 fTPCnsigma_eta_hadrons=new TH2F *[5];
609 fCEtaPhi_Inc = new TH2F *[5];
610 fCEtaPhi_Inc_DiHadron = new TH2F *[5];
612 fCEtaPhi_ULS = new TH2F *[5];
613 fCEtaPhi_LS = new TH2F *[5];
614 fCEtaPhi_ULS_NoP = new TH2F *[5];
615 fCEtaPhi_LS_NoP = new TH2F *[5];
617 fCEtaPhi_ULS_Weight = new TH2F *[5];
618 fCEtaPhi_LS_Weight = new TH2F *[5];
619 fCEtaPhi_ULS_NoP_Weight = new TH2F *[5];
620 fCEtaPhi_LS_NoP_Weight = new TH2F *[5];
622 fCEtaPhi_Inc_EM = new TH2F *[5];
624 fCEtaPhi_ULS_EM = new TH2F *[5];
625 fCEtaPhi_LS_EM = new TH2F *[5];
627 fCEtaPhi_ULS_Weight_EM = new TH2F *[5];
628 fCEtaPhi_LS_Weight_EM = new TH2F *[5];
630 fInvMass = new TH1F("fInvMass","",200,0,0.3);
631 fInvMassBack = new TH1F("fInvMassBack","",200,0,0.3);
632 fDCA = new TH1F("fDCA","",200,0,1);
633 fDCABack = new TH1F("fDCABack","",200,0,1);
634 fOpAngle = new TH1F("fOpAngle","",200,0,0.5);
635 fOpAngleBack = new TH1F("fOpAngleBack","",200,0,0.5);
637 fOutputList->Add(fInvMass);
638 fOutputList->Add(fInvMassBack);
639 fOutputList->Add(fDCA);
640 fOutputList->Add(fDCABack);
641 fOutputList->Add(fOpAngle);
642 fOutputList->Add(fOpAngleBack);
645 for(Int_t i = 0; i < 5; i++)
647 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);
648 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);
649 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);
651 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);
652 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);
653 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);
654 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);
655 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);
656 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);
657 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);
658 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);
659 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);
660 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);
661 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);
662 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);
663 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);
664 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);
665 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);
667 fOutputList->Add(fEoverP_tpc[i]);
668 fOutputList->Add(fTPC_pt[i]);
669 fOutputList->Add(fTPCnsigma_pt[i]);
671 fOutputList->Add(fEta[i]);
672 fOutputList->Add(fPhi[i]);
673 fOutputList->Add(fR[i]);
674 fOutputList->Add(fR_EoverP[i]);
675 fOutputList->Add(fNcells[i]);
676 fOutputList->Add(fNcells_electrons[i]);
677 fOutputList->Add(fNcells_hadrons[i]);
678 fOutputList->Add(fNcells_EoverP[i]);
679 fOutputList->Add(fECluster_ptbins[i]);
680 fOutputList->Add(fEoverP_ptbins[i]);
681 fOutputList->Add(fEoverP_wSSCut[i]);
682 fOutputList->Add(fM02_EoverP[i]);
683 fOutputList->Add(fM20_EoverP[i]);
684 fOutputList->Add(fTPCnsigma_eta_electrons[i]);
685 fOutputList->Add(fTPCnsigma_eta_hadrons[i]);
690 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);
691 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);
693 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);
694 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);
695 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);
696 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);
698 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);
699 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);
700 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);
701 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);
703 fOutputList->Add(fCEtaPhi_Inc[i]);
704 fOutputList->Add(fCEtaPhi_Inc_DiHadron[i]);
706 fOutputList->Add(fCEtaPhi_ULS[i]);
707 fOutputList->Add(fCEtaPhi_LS[i]);
708 fOutputList->Add(fCEtaPhi_ULS_NoP[i]);
709 fOutputList->Add(fCEtaPhi_LS_NoP[i]);
711 fOutputList->Add(fCEtaPhi_ULS_Weight[i]);
712 fOutputList->Add(fCEtaPhi_LS_Weight[i]);
713 fOutputList->Add(fCEtaPhi_ULS_NoP_Weight[i]);
714 fOutputList->Add(fCEtaPhi_LS_NoP_Weight[i]);
718 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);
720 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);
721 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);
723 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);
724 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);
726 fOutputList->Add(fCEtaPhi_Inc_EM[i]);
728 fOutputList->Add(fCEtaPhi_ULS_EM[i]);
729 fOutputList->Add(fCEtaPhi_LS_EM[i]);
731 fOutputList->Add(fCEtaPhi_ULS_Weight_EM[i]);
732 fOutputList->Add(fCEtaPhi_LS_Weight_EM[i]);
738 fTPCnsigma_eta = new TH2F("fTPCnsigma_eta",";Pseudorapidity #eta; TPC signal - <TPC signal>_{elec} (#sigma)",200,-0.9,0.9,200,-15,15);
739 fTPCnsigma_phi = new TH2F("fTPCnsigma_phi",";Azimuthal Angle #phi; TPC signal - <TPC signal>_{elec} (#sigma)",200,0,2*TMath::Pi(),200,-15,15);
742 fNcells_pt=new TH2F("fNcells_pt","fNcells_pt",1000, 0,20,100,0,30);
743 fEoverP_pt_pions= new TH2F("fEoverP_pt_pions","fEoverP_pt_pions",1000,0,30,500,0,2);
745 ftpc_p_EoverPcut= new TH2F("ftpc_p_EoverPcut","ftpc_p_EoverPcut",1000,0,30,200,20,200);
746 fnsigma_p_EoverPcut= new TH2F("fnsigma_p_EoverPcut","fnsigma_p_EoverPcut",1000,0,30,500,-15,15);
748 fEoverP_pt_pions2= new TH2F("fEoverP_pt_pions2","fEoverP_pt_pions2",1000,0,30,500,0,2);
749 fEoverP_pt_hadrons= new TH2F("fEoverP_pt_hadrons","fEoverP_pt_hadrons",1000,0,30,500,0,2);
752 fOutputList->Add(fTPCnsigma_eta);
753 fOutputList->Add(fTPCnsigma_phi);
755 fOutputList->Add(fNcells_pt);
756 fOutputList->Add(fEoverP_pt_pions);
758 fOutputList->Add(ftpc_p_EoverPcut);
759 fOutputList->Add(fnsigma_p_EoverPcut);
761 fOutputList->Add(fEoverP_pt_pions2);
762 fOutputList->Add(fEoverP_pt_hadrons);
764 //__________________________________________________________________
768 fPtBackgroundBeforeReco = new TH1F("fPtBackgroundBeforeReco",";p_{t} (GeV/c);Count",30,0,15);
769 fPtBackgroundAfterReco = new TH1F("fPtBackgroundAfterReco",";p_{t} (GeV/c);Count",30,0,15);
770 fPtMCparticleAll = new TH1F("fPtMCparticleAll",";p_{t} (GeV/c);Count",200,0,40);
771 fPtMCparticleReco = new TH1F("fPtMCparticleReco",";p_{t} (GeV/c);Count",200,0,40);
772 fPtMCparticleAllHfe1 = new TH1F("fPtMCparticleAllHfe1",";p_{t} (GeV/c);Count",200,0,40);
773 fPtMCparticleRecoHfe1 = new TH1F("fPtMCparticleRecoHfe1",";p_{t} (GeV/c);Count",200,0,40);
774 fPtMCparticleAllHfe2 = new TH1F("fPtMCparticleAllHfe2",";p_{t} (GeV/c);Count",200,0,40);
775 fPtMCparticleRecoHfe2 = new TH1F("fPtMCparticleRecoHfe2",";p_{t} (GeV/c);Count",200,0,40);
776 fPtMCelectronAfterAll = new TH1F("fPtMCelectronAfterAll",";p_{t} (GeV/c);Count",200,0,40);
777 fPtMCpi0 = new TH1F("fPtMCpi0",";p_{t} (GeV/c);Count",200,0,40);
778 fPtMC_EMCal_All= new TH1F("fPtMC_EMCal_All",";p_{t} (GeV/c);Count",200,0,40);
779 fPtMC_EMCal_Selected= new TH1F("fPtMC_EMCal_Selected",";p_{t} (GeV/c);Count",200,0,40);
780 fPtMC_TPC_All= new TH1F("fPtMC_TPC_All",";p_{t} (GeV/c);Count",200,0,40);
781 fPtMC_TPC_Selected = new TH1F("fPtMC_TPC_Selected",";p_{t} (GeV/c);Count",200,0,40);
782 fPtMCWithLabel = new TH1F("fPtMCWithLabel",";p_{t} (GeV/c);Count",200,0,40);
783 fPtMCWithoutLabel = new TH1F("fPtMCWithoutLabel",";p_{t} (GeV/c);Count",200,0,40);
784 fPtIsPhysicaPrimary = new TH1F("fPtIsPhysicaPrimary",";p_{t} (GeV/c);Count",200,0,40);
786 fOutputList->Add(fPtBackgroundBeforeReco);
787 fOutputList->Add(fPtBackgroundAfterReco);
788 fOutputList->Add(fPtMCparticleAll);
789 fOutputList->Add(fPtMCparticleReco);
790 fOutputList->Add(fPtMCparticleAllHfe1);
791 fOutputList->Add(fPtMCparticleRecoHfe1);
792 fOutputList->Add(fPtMCparticleAllHfe2);
793 fOutputList->Add(fPtMCparticleRecoHfe2);
794 fOutputList->Add(fPtMCelectronAfterAll);
795 fOutputList->Add(fPtMCpi0);
796 fOutputList->Add(fPtMC_EMCal_All);
797 fOutputList->Add(fPtMC_EMCal_Selected);
798 fOutputList->Add(fPtMC_TPC_All);
799 fOutputList->Add(fPtMC_TPC_Selected);
800 fOutputList->Add(fPtMCWithLabel);
801 fOutputList->Add(fPtMCWithoutLabel);
802 fOutputList->Add(fPtIsPhysicaPrimary);
805 fCentralityHist = new TH1F("fCentralityHist",";Centrality (%); Count",1000000,0,100);
806 fCentralityHistPass = new TH1F("fCentralityHistPass",";Centrality (%); Count",1000000,0,100);
807 fOutputList->Add(fCentralityHist);
808 fOutputList->Add(fCentralityHistPass);
810 //______________________________________________________________________
811 //Mixed event analysis
814 fPoolNevents = new TH1F("fPoolNevents","Event Mixing Statistics; Number of events; Count",1000,0,1000);
815 fOutputList->Add(fPoolNevents);
817 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.
818 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
820 Int_t nCentralityBins = 15;
821 Double_t centralityBins[] = { 0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.1 };
824 Double_t vertexBins[] = {-10, -7, -5, -3, -1, 1, 3, 5, 7, 10};
826 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, (Double_t*) centralityBins, nZvtxBins, (Double_t*) vertexBins);
828 //______________________________________________________________________
830 PostData(1, fOutputList);
832 ///______________________________________________________________________
835 //______________________________________________________________________
837 //Called for each event
838 void AliAnalysisTaskEMCalHFEpA::UserExec(Option_t *)
841 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
842 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
846 printf("ERROR: fESD & fAOD not available\n");
850 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
854 printf("ERROR: fVEvent not available\n");
861 AliError("HFE cuts not available");
865 if(!fPID->IsInitialized())
867 // Initialize PID with the given run number
868 AliWarning("PID not initialised, get from Run no");
872 fPID->InitializePID(fAOD->GetRunNumber());
876 fPID->InitializePID(fESD->GetRunNumber());
881 fPidResponse = fInputHandler->GetPIDResponse();
887 AliDebug(1, "Using default PID Response");
888 fPidResponse = AliHFEtools::GetDefaultPID(kFALSE, fInputEvent->IsA() == AliAODEvent::Class());
891 fPID->SetPIDResponse(fPidResponse);
893 fCFM->SetRecEventInfo(fVevent);
895 Double_t *fListOfmotherkink = 0;
896 Int_t fNumberOfVertices = 0;
897 Int_t fNumberOfMotherkink = 0;
899 //______________________________________________________________________
903 const AliAODVertex* trkVtx = fAOD->GetPrimaryVertex();
904 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
905 TString vtxTtl = trkVtx->GetTitle();
906 if(!vtxTtl.Contains("VertexerTracks")) return;
907 Float_t zvtx = trkVtx->GetZ();
909 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
910 if(spdVtx->GetNContributors()<=0) return;
911 TString vtxTyp = spdVtx->GetTitle();
913 spdVtx->GetCovarianceMatrix(cov);
914 Double_t zRes = TMath::Sqrt(cov[5]);
915 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
916 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
917 if(TMath::Abs(zvtx) > 10) return;
919 //Look for kink mother for AOD
921 fNumberOfVertices = 0;
922 fNumberOfMotherkink = 0;
926 fNumberOfVertices = fAOD->GetNumberOfVertices();
928 fListOfmotherkink = new Double_t[fNumberOfVertices];
930 for(Int_t ivertex=0; ivertex < fNumberOfVertices; ivertex++)
932 AliAODVertex *aodvertex = fAOD->GetVertex(ivertex);
933 if(!aodvertex) continue;
934 if(aodvertex->GetType()==AliAODVertex::kKink)
936 AliAODTrack *mother1 = (AliAODTrack *) aodvertex->GetParent();
937 if(!mother1) continue;
938 Int_t idmother = mother1->GetID();
939 fListOfmotherkink[fNumberOfMotherkink] = idmother;
940 fNumberOfMotherkink++;
951 const AliESDVertex* trkVtx = fESD->GetPrimaryVertex();
952 if(!trkVtx || trkVtx->GetNContributors()<=0) return;
953 TString vtxTtl = trkVtx->GetTitle();
954 if(!vtxTtl.Contains("VertexerTracks")) return;
955 Float_t zvtx = trkVtx->GetZ();
957 const AliESDVertex* spdVtx = fESD->GetPrimaryVertexSPD();
958 if(spdVtx->GetNContributors()<=0) return;
959 TString vtxTyp = spdVtx->GetTitle();
961 spdVtx->GetCovarianceMatrix(cov);
962 Double_t zRes = TMath::Sqrt(cov[5]);
963 if(vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
964 if(TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
965 if(TMath::Abs(zvtx) > 10) return;
968 //______________________________________________________________________
970 //Only events with at least 2 tracks are accepted
971 Int_t fNOtrks = fVevent->GetNumberOfTracks();
972 if(fNOtrks<2) return;
974 //______________________________________________________________________
975 //Centrality Selection
976 if(fHasCentralitySelection)
978 Float_t centrality = -1;
982 fCentrality = fAOD->GetHeader()->GetCentralityP();
986 fCentrality = fESD->GetCentrality();
989 if(fEstimator==1) centrality = fCentrality->GetCentralityPercentile("ZDC");
990 else centrality = fCentrality->GetCentralityPercentile("V0A");
992 //cout << "Centrality = " << centrality << " %" << endl;
994 fCentralityHist->Fill(centrality);
996 if(centrality<fCentralityMin || centrality>fCentralityMax) return;
998 fCentralityHistPass->Fill(centrality);
1000 //______________________________________________________________________
1002 //______________________________________________________________________
1008 fMCarray = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1012 AliError("Array of MC particles not found");
1016 fMCheader = dynamic_cast<AliAODMCHeader*>(fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
1020 AliError("Could not find MC Header in AOD");
1024 for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
1026 fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
1028 Int_t pdg = fMCparticle->GetPdgCode();
1029 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1031 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1033 if(fMCparticle->IsPhysicalPrimary())
1035 fPtMCparticleAll->Fill(fMCparticle->Pt());
1037 Bool_t MotherFound = FindMother(iMC);
1040 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCparticle->Pt()); //denominator for total efficiency
1041 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCparticle->Pt());
1046 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCparticle->Pt());
1051 fEventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1052 if (!fEventHandler) {
1053 Printf("ERROR: Could not retrieve MC event handler");
1057 fMCevent = fEventHandler->MCEvent();
1059 Printf("ERROR: Could not retrieve MC event");
1063 fMCstack = fMCevent->Stack();
1065 for(Int_t iMC = 0; iMC < fMCstack->GetNtrack(); iMC++)
1068 fMCtrack = fMCstack->Particle(iMC);
1069 Int_t pdg = fMCtrack->GetPdgCode();
1070 if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
1072 if(!fMCstack->IsPhysicalPrimary(iMC)) continue;
1075 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1077 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1079 fPtMCparticleAll->Fill(fMCtrack->Pt());
1081 Bool_t MotherFound = FindMother(iMC);
1084 if(fIsHFE1) fPtMCparticleAllHfe1->Fill(fMCtrack->Pt());//denominator for total efficiency
1085 if(fIsHFE2) fPtMCparticleAllHfe2->Fill(fMCtrack->Pt());
1093 //______________________________________________________________________
1094 //EMCal Trigger Selection (Threshould selection)
1095 TString firedTrigger;
1096 TString TriggerEG1("EG1");
1097 TString TriggerEG2("EG2");
1099 if(fAOD) firedTrigger = fAOD->GetFiredTriggerClasses();
1100 else if(fESD) firedTrigger = fESD->GetFiredTriggerClasses();
1103 if(firedTrigger.Contains(TriggerEG1)) fNevent->Fill(1);
1104 if(firedTrigger.Contains(TriggerEG2)) fNevent->Fill(2);
1107 if(firedTrigger.Contains(TriggerEG1))
1117 if(firedTrigger.Contains(TriggerEG2))
1126 //______________________________________________________________________
1129 if(!fIsAOD) ClsNo = fESD->GetNumberOfCaloClusters();
1130 else ClsNo = fAOD->GetNumberOfCaloClusters();
1132 //______________________________________________________________________
1134 ///______________________________________________________________________
1136 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
1138 AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
1141 printf("ERROR: Could not receive track %d\n", iTracks);
1145 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
1146 AliESDtrack *etrack = dynamic_cast<AliESDtrack*>(Vtrack);
1147 AliAODTrack *atrack = dynamic_cast<AliAODTrack*>(Vtrack);
1149 Double_t fTPCnSigma = -999;
1150 Double_t fTPCnSigma_pion = -999;
1151 Double_t fTPCnSigma_proton = -999;
1152 Double_t fTPCnSigma_kaon = -999;
1153 Double_t fTPCsignal = -999;
1154 Double_t fPt = -999;
1157 ///_____________________________________________________________________________
1158 ///Fill QA plots without track selection
1160 fP = TMath::Sqrt((track->Pt())*(track->Pt()) + (track->Pz())*(track->Pz()));
1162 fTPCsignal = track->GetTPCsignal();
1163 fTPCnSigma = fPidResponse->NumberOfSigmasTPC(track, AliPID::kElectron);
1164 fTPCnSigma_pion = fPidResponse->NumberOfSigmasTPC(track, AliPID::kPion);
1165 fTPCnSigma_proton = fPidResponse->NumberOfSigmasTPC(track, AliPID::kProton);
1166 fTPCnSigma_kaon = fPidResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
1168 fTPC_p[0]->Fill(fPt,fTPCsignal);
1169 fTPCnsigma_p[0]->Fill(fP,fTPCnSigma);
1172 Float_t TPCNcls = track->GetTPCNcls();
1173 Float_t pos[3]={0,0,0};
1175 Double_t fEMCflag = kFALSE;
1176 if(track->GetEMCALcluster()>0)
1178 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1179 if(fClus->IsEMCAL())
1181 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1184 fEoverP_pt[0]->Fill(fPt,(fClus->E() / fP));
1187 Float_t Energy = fClus->E();
1188 Float_t EoverP = Energy/track->P();
1189 //Float_t M02 = fClus->GetM02();
1190 //Float_t M20 = fClus->GetM20();
1192 /////////////// for Eta Phi distribution
1193 fClus->GetPosition(pos);
1194 TVector3 vpos(pos[0],pos[1],pos[2]);
1195 Double_t cphi = vpos.Phi();
1196 Double_t ceta = vpos.Eta();
1197 fEtaPhi[0]->Fill(cphi,ceta);
1199 fECluster[0]->Fill(Energy);
1200 fTPCNcls_EoverP[0]->Fill(TPCNcls, EoverP);
1205 //______________________________________________________________
1208 fVtxZ[0]->Fill(fZvtx);
1209 fNTracks[0]->Fill(fNOtrks);
1210 fNClusters[0]->Fill(ClsNo);
1212 //______________________________________________________________
1214 ///Fill QA plots without track selection
1215 ///_____________________________________________________________________________
1216 //______________________________________________________________________________________
1217 //Track Selection Cuts
1219 //AOD (Test Filter Bit)
1222 // standard cuts with very loose DCA - BIT(4)
1225 GetStandardITSTPCTrackCuts2011(kFALSE)
1226 SetMaxChi2PerClusterTPC(4);
1227 SetAcceptKinkDaughters(kFALSE);
1228 SetRequireTPCRefit(kTRUE);
1229 SetRequireITSRefit(kTRUE);
1230 SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
1231 SetMaxDCAToVertexZ(2);
1232 SetMaxDCAToVertex2D(kFALSE);
1233 SetRequireSigmaToVertex(kFALSE);
1234 SetMaxChi2PerClusterITS(36);
1235 SetMaxDCAToVertexXY(2.4)
1236 SetMaxDCAToVertexZ(3.2)
1237 SetDCaToVertex2D(kTRUE)
1240 if(!atrack->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)) continue;
1243 //RecKine: ITSTPC cuts
1244 if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
1246 if(fRejectKinkMother)
1250 Bool_t kinkmotherpass = kTRUE;
1251 for(Int_t kinkmother = 0; kinkmother < fNumberOfMotherkink; kinkmother++)
1253 if(track->GetID() == fListOfmotherkink[kinkmother])
1255 kinkmotherpass = kFALSE;
1259 if(!kinkmotherpass) continue;
1263 if(etrack->GetKinkIndex(0) != 0) continue;
1270 if(!ProcessCutStep(AliHFEcuts::kStepRecPrim, track)) continue;
1273 //HFEcuts: ITS layers cuts
1274 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsITS, track)) continue;
1276 //HFE cuts: TPC PID cleanup
1277 if(!ProcessCutStep(AliHFEcuts::kStepHFEcutsTPC, track)) continue;
1278 //______________________________________________________________________________________
1280 ///_____________________________________________________________
1281 ///QA plots after track selection
1284 if(track->GetLabel()>=0) fPtMCWithLabel->Fill(fPt);
1285 else fPtMCWithoutLabel->Fill(fPt);
1288 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1290 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1292 if(fMCparticle->IsPhysicalPrimary()) fPtIsPhysicaPrimary->Fill(fPt);
1294 Int_t pdg = fMCparticle->GetPdgCode();
1295 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
1297 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1299 if(fMCparticle->IsPhysicalPrimary())
1301 fPtMCparticleReco->Fill(fMCparticle->Pt());
1303 Bool_t MotherFound = FindMother(track->GetLabel());
1306 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCparticle->Pt());
1307 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCparticle->Pt());
1313 else if(fIsMC && track->GetLabel()>=0)
1315 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1317 fPtIsPhysicaPrimary->Fill(fPt);
1318 fMCtrack = fMCstack->Particle(track->GetLabel());
1320 Int_t pdg = fMCtrack->GetPdgCode();
1321 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax)
1323 if( TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13 )
1325 fPtMCparticleReco->Fill(fMCtrack->Pt());
1327 Bool_t MotherFound = FindMother(track->GetLabel());
1330 if(fIsHFE1) fPtMCparticleRecoHfe1->Fill(fMCtrack->Pt());
1331 if(fIsHFE2) fPtMCparticleRecoHfe2->Fill(fMCtrack->Pt());
1338 fTPC_p[1]->Fill(fPt,fTPCsignal);
1339 fTPCnsigma_p[1]->Fill(fP,fTPCnSigma);
1340 Double_t fPtBin[6] = {2,4,6,8,10,15};
1342 TPCNcls = track->GetTPCNcls();
1343 Float_t pos2[3]={0,0,0};
1345 if(track->GetEMCALcluster()>0)
1347 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1348 if(fClus->IsEMCAL())
1350 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1352 fEoverP_pt[1]->Fill(fPt,(fClus->E() / fP));
1354 Float_t Energy = fClus->E();
1355 Float_t EoverP = Energy/track->P();
1356 //Float_t M02 = fClus->GetM02();
1357 //Float_t M20 = fClus->GetM20();
1358 Float_t ncells = fClus->GetNCells();
1360 /////////////// for Eta Phi distribution
1361 fClus->GetPosition(pos2);
1362 TVector3 vpos(pos2[0],pos2[1],pos2[2]);
1363 Double_t cphi = vpos.Phi();
1364 Double_t ceta = vpos.Eta();
1365 fEtaPhi[1]->Fill(cphi,ceta);
1367 fECluster[1]->Fill(Energy);
1368 fTPCNcls_EoverP[1]->Fill(TPCNcls, EoverP);
1371 //for EMCal triggger performance
1373 ftpc_p_EoverPcut->Fill(track->P(), fTPCsignal);
1374 fnsigma_p_EoverPcut->Fill(track->P(), fTPCnSigma);
1379 //for hadron contamination calculations
1383 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1385 if(TMath::Abs(fTPCnSigma_pion)<3 || TMath::Abs(fTPCnSigma_proton)<3 || TMath::Abs(fTPCnSigma_kaon)<3 ){
1387 if(fTPCnSigma<-3.5){
1388 fEoverP_pt_hadrons->Fill(fPt,EoverP);
1392 if(fTPCnSigma < -3.5){
1393 fEoverP_pt_pions->Fill(fPt, EoverP);
1397 if(fTPCnSigma < -3.5 && fTPCnSigma > -10){
1398 fEoverP_pt_pions2->Fill(fPt, EoverP);
1403 for(Int_t i = 0; i < 5; i++)
1405 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1408 if(fTPCnSigma < -5 && fTPCnSigma > -10){
1409 fNcells_hadrons[i]->Fill(ncells);
1411 //hadrons selection using E/p
1412 if((fClus->E() / fP) >= 0.2 && (fClus->E() / fP) <= 0.7){
1413 fTPCnsigma_eta_hadrons[i]->Fill(fTPCnSigma, ceta);
1415 //electrons selection using E/p
1416 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1417 fTPCnsigma_eta_electrons[i]->Fill(fTPCnSigma, ceta);
1422 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1424 fTPCnsigma_eta->Fill(track->Eta(),fTPCnSigma);
1425 fTPCnsigma_phi->Fill(track->Phi(),fTPCnSigma);
1429 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1431 fPtTrigger_Inc->Fill(fPt);
1432 DiHadronCorrelation(track, iTracks);
1441 //______________________________________________________________
1444 fVtxZ[1]->Fill(fZvtx);
1445 fNTracks[1]->Fill(fNOtrks);
1446 fNClusters[1]->Fill(ClsNo);
1447 //______________________________________________________________
1449 ///______________________________________________________________________
1450 ///Histograms for PID Studies
1451 //Double_t fPtBin[6] = {2,4,6,8,10,15};
1453 for(Int_t i = 0; i < 5; i++)
1455 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1457 if(fEMCflag) fEoverP_tpc[i]->Fill(fTPCnSigma,(fClus->E() / fP));
1460 fTPC_pt[i]->Fill(fTPCsignal);
1461 fTPCnsigma_pt[i]->Fill(fTPCnSigma);
1466 ///QA plots after track selection
1467 ///_____________________________________________________________
1469 //_______________________________________________________
1470 //Correlation Analysis - DiHadron
1473 if(fTPCnSigma < 3.5 && fCorrelationFlag)
1475 fPtTrigger_Inc->Fill(fPt);
1476 DiHadronCorrelation(track, iTracks);
1479 //_______________________________________________________
1482 //!//////////////////////////////////////////////////////////////////
1483 ///TPC - efficiency calculation //
1485 /// changing start here
1486 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1488 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1489 Int_t pdg = fMCparticle->GetPdgCode();
1492 if(fMCparticle->IsPhysicalPrimary()){
1495 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1497 Bool_t MotherFound = FindMother(track->GetLabel());
1499 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1500 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1501 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCparticle->Pt());
1508 else if(fIsMC && track->GetLabel()>=0)//ESD
1511 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1512 fMCtrack = fMCstack->Particle(track->GetLabel());
1514 Int_t pdg = fMCtrack->GetPdgCode();
1515 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1517 if(fMCtrack->GetFirstMother()>0){
1518 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1519 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1520 if(fIsHFE1) fPtMC_TPC_All->Fill(fMCtrack->Pt());
1528 ///________________________________________________________________________
1530 ///Here the PID cuts defined in the file "ConfigEMCalHFEpA.C" is applied
1531 Int_t pidpassed = 1;
1532 AliHFEpidObject hfetrack;
1534 if(fIsAOD) hfetrack.SetAnalysisType(AliHFEpidObject::kAODanalysis);
1535 else hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
1537 hfetrack.SetRecTrack(track);
1539 if(fIsPP) hfetrack.SetPP(); //proton-proton analysis
1540 else hfetrack.SetPbPb(); //Heavy-ion analysis
1542 if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
1543 fpid->Fill(pidpassed);
1545 if(pidpassed==0) continue;
1546 ///________________________________________________________________________
1549 //!//////////////////////////////////////////////////////////////////
1550 ///TPC efficiency calculations
1552 /// changing start here
1553 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1555 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1556 Int_t pdg = fMCparticle->GetPdgCode();
1559 if(fMCparticle->IsPhysicalPrimary()){
1562 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1564 Bool_t MotherFound = FindMother(track->GetLabel());
1566 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1567 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1568 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCparticle->Pt());
1575 else if(fIsMC && track->GetLabel()>=0)//ESD
1578 if(fMCstack->IsPhysicalPrimary(track->GetLabel())){
1579 fMCtrack = fMCstack->Particle(track->GetLabel());
1581 Int_t pdg = fMCtrack->GetPdgCode();
1582 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax ){
1584 if(fMCtrack->GetFirstMother()>0){
1585 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1586 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1587 if(fIsHFE1) fPtMC_TPC_Selected->Fill(fMCtrack->Pt());
1594 //Eta Cut for TPC only
1595 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1596 fTPCnsigma_pt_2D->Fill(fPt,fTPCnSigma);
1599 fTPCnsigma_p[2]->Fill(fP,fTPCnSigma);
1600 fTPC_p[2]->Fill(fP,fTPCsignal);
1601 TPCNcls = track->GetTPCNcls();
1602 Float_t pos3[3]={0,0,0};
1604 if(track->GetEMCALcluster()>0)
1606 fClus = fVevent->GetCaloCluster(track->GetEMCALcluster());
1607 if(fClus->IsEMCAL())
1611 /////////////// Residuals
1612 Double_t Dx = fClus->GetTrackDx();
1613 Double_t Dz = fClus->GetTrackDz();
1614 Double_t R=TMath::Sqrt(Dx*Dx+Dz*Dz);
1615 for(Int_t i = 0; i < 5; i++)
1617 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1626 if(TMath::Abs(fClus->GetTrackDx())<=fdPhiCut && TMath::Abs(fClus->GetTrackDz())<=fdEtaCut)
1630 if(track->Eta()>=fEtaCutMin && track->Eta()<=fEtaCutMax ){
1631 fEoverP_pt[2]->Fill(fPt,(fClus->E() / fP));
1634 Float_t Energy = fClus->E();
1635 Float_t EoverP = Energy/track->P();
1636 Float_t M02 = fClus->GetM02();
1637 Float_t M20 = fClus->GetM20();
1638 Float_t ncells = fClus->GetNCells();
1641 /////////////// for Eta Phi distribution
1642 fClus->GetPosition(pos3);
1643 TVector3 vpos(pos3[0],pos3[1],pos3[2]);
1644 Double_t cphi = vpos.Phi();
1645 Double_t ceta = vpos.Eta();
1646 fEtaPhi[2]->Fill(cphi,ceta);
1650 fTPCNcls_EoverP[2]->Fill(TPCNcls, EoverP);
1652 for(Int_t i = 0; i < 5; i++)
1654 if(fPt>=fPtBin[i] && fPt<fPtBin[i+1])
1657 fR_EoverP[i]->Fill(R, EoverP);
1658 fNcells[i]->Fill(ncells);
1659 fNcells_EoverP[i]->Fill(EoverP, ncells);
1660 fM02_EoverP[i]->Fill(M02,EoverP);
1661 fM20_EoverP[i]->Fill(M20,EoverP);
1662 fECluster_ptbins[i]->Fill(Energy);
1663 fEoverP_ptbins[i]->Fill(EoverP);
1665 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax) {
1666 fNcells_electrons[i]->Fill(ncells);
1669 if(M02<0.5 && M20<0.3) {
1670 fEoverP_wSSCut[i]->Fill(EoverP);
1675 fNcells_pt->Fill(fPt, ncells);
1678 ////////////////////////////////////////////////////////////////////
1679 ///EMCal - Efficiency calculations
1681 /// changing start here
1682 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1684 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1685 Int_t pdg = fMCparticle->GetPdgCode();
1688 if(fMCparticle->IsPhysicalPrimary()){
1691 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1693 Bool_t MotherFound = FindMother(track->GetLabel());
1695 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1696 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1697 fPtMC_EMCal_All->Fill(fMCparticle->Pt());
1704 else if(fIsMC && track->GetLabel()>=0)//ESD
1707 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1710 fMCtrack = fMCstack->Particle(track->GetLabel());
1712 Int_t pdg = fMCtrack->GetPdgCode();
1713 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
1715 if(fMCtrack->GetFirstMother()>0){
1716 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1717 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1719 fPtMC_EMCal_All->Fill(fMCtrack->Pt());
1727 if((fClus->E() / fP) >= fEoverPCutMin && (fClus->E() / fP) <= fEoverPCutMax)
1730 fECluster[2]->Fill(Energy);
1731 //_______________________________________________________
1732 //Correlation Analysis
1735 fPtElec_Inc->Fill(fPt);
1737 if(fCorrelationFlag)
1739 ElectronHadronCorrelation(track, iTracks, Vtrack);
1742 //_______________________________________________________
1744 ////////////////////////////////////////////////////////////////////
1745 ///EMCal - efficiency calculations
1747 if(track->Charge()<0) fCharge_n->Fill(fPt);
1748 if(track->Charge()>0) fCharge_p->Fill(fPt);
1751 /// changing start here
1752 if(fIsMC && fIsAOD && track->GetLabel()>=0)
1754 if(track->Charge()<0) fCharge_n->Fill(fPt);
1755 if(track->Charge()>0) fCharge_p->Fill(fPt);
1757 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1758 Int_t pdg = fMCparticle->GetPdgCode();
1761 if(fMCparticle->IsPhysicalPrimary()){
1764 if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
1766 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCparticle->Pt()); //numerator for the total efficiency
1769 Bool_t MotherFound = FindMother(track->GetLabel());
1771 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1772 if( TMath::Abs(pdg) == 11 && fMCparticleMother->GetPdgCode()!=22 ){
1773 fPtMC_EMCal_Selected->Fill(fMCparticle->Pt());
1780 else if(fIsMC && track->GetLabel()>=0)//ESD
1782 if(track->Charge()<0) fCharge_n->Fill(fPt);
1783 if(track->Charge()>0) fCharge_p->Fill(fPt);
1785 if(fMCstack->IsPhysicalPrimary(track->GetLabel()))
1787 Bool_t MotherFound = FindMother(track->GetLabel());
1788 fMCtrack = fMCstack->Particle(track->GetLabel());
1791 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
1792 if(fIsHFE1) fPtMCelectronAfterAll->Fill(fMCtrack->Pt()); //numerator for the total efficiency
1798 Int_t pdg = fMCtrack->GetPdgCode();
1799 if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax && fMCtrack->Phi()>=(TMath::Pi()*80/180) && fMCtrack->Phi()<=TMath::Pi())
1801 if(fMCtrack->GetFirstMother()>0){
1802 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1803 if( TMath::Abs(pdg) == 11 && fMCtrackMother->GetPdgCode()!=22 ){
1805 fPtMC_EMCal_Selected->Fill(fMCtrack->Pt());
1811 ///////////////////////////////////////////////////////////////////
1819 //______________________________________________________________
1822 fVtxZ[2]->Fill(fZvtx);
1823 fNTracks[2]->Fill(fNOtrks);
1824 fNClusters[2]->Fill(ClsNo);
1826 //______________________________________________________________
1828 //_______________________________________________________
1829 //Correlation Analysis
1832 fPtElec_Inc->Fill(fPt);
1834 if(fCorrelationFlag)
1836 ElectronHadronCorrelation(track, iTracks, Vtrack);
1839 //_______________________________________________________
1841 ///________________________________________________________________________
1844 //__________________________________________________________________
1845 //Event Mixing Analysis
1847 if(fEventMixingFlag)
1849 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
1851 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality->GetCentralityPercentile("V0A"), fZvtx));
1853 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!
1858 //__________________________________________________________________
1860 delete fListOfmotherkink;
1861 PostData(1, fOutputList);
1864 //______________________________________________________________________
1865 void AliAnalysisTaskEMCalHFEpA::Terminate(Option_t *)
1867 //Draw result to the screen
1868 //Called once at the end of the query
1870 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
1874 printf("ERROR: Output list not available\n");
1879 //______________________________________________________________________
1880 Bool_t AliAnalysisTaskEMCalHFEpA::ProcessCutStep(Int_t cutStep, AliVParticle *track)
1882 //Check single track cuts for a given cut step
1883 //Note this function is called inside the UserExec function
1884 const Int_t kMCOffset = AliHFEcuts::kNcutStepsMCTrack;
1885 if(!fCFM->CheckParticleCuts(cutStep + kMCOffset, track)) return kFALSE;
1889 //______________________________________________________________________
1890 void AliAnalysisTaskEMCalHFEpA::ElectronHadronCorrelation(AliVTrack *track, Int_t trackIndex, AliVParticle *vtrack)
1892 ///_________________________________________________________________
1896 if(track->GetLabel() < 0)
1898 AliWarning(Form("The track %d does not have a valid MC label",trackIndex));
1904 fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
1906 if(fMCparticle->GetMother()<0) return;
1908 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
1910 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
1913 fPtBackgroundBeforeReco->Fill(track->Pt());
1918 fMCtrack = fMCstack->Particle(track->GetLabel());
1920 if(fMCtrack->GetFirstMother()<0) return;
1922 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
1924 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
1927 fPtBackgroundBeforeReco->Fill(track->Pt());
1931 ///_________________________________________________________________
1933 //________________________________________________
1934 //Associated particle cut
1935 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
1936 fPartnerCuts->SetRequireITSRefit(kTRUE);
1937 fPartnerCuts->SetRequireTPCRefit(kTRUE);
1938 fPartnerCuts->SetEtaRange(-0.9,0.9);
1939 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
1940 fPartnerCuts->SetMinNClustersTPC(80);
1941 fPartnerCuts->SetPtRange(0.3,1e10);
1942 fPartnerCuts->SetDCAToVertex2D(kTRUE);
1943 fPartnerCuts->SetMaxDCAToVertexXY(2.4);
1944 fPartnerCuts->SetMaxDCAToVertexZ(3.2);
1945 //_________________________________________________
1947 ///#################################################################
1948 //Non-HFE reconstruction
1949 fNonHFE = new AliSelectNonHFE();
1950 fNonHFE->SetAODanalysis(fIsAOD);
1951 if(fMassCutFlag) fNonHFE->SetInvariantMassCut(fMassCut);
1952 if(fAngleCutFlag) fNonHFE->SetOpeningAngleCut(fAngleCut);
1953 if(fChi2CutFlag) fNonHFE->SetChi2OverNDFCut(fChi2Cut);
1954 if(fDCAcutFlag) fNonHFE->SetDCACut(fDCAcut);
1955 fNonHFE->SetAlgorithm("DCA"); //KF
1956 fNonHFE->SetPIDresponse(fPidResponse);
1957 fNonHFE->SetTrackCuts(-3.5,3.5,fPartnerCuts);
1959 fNonHFE->SetHistAngleBack(fOpAngleBack);
1960 fNonHFE->SetHistAngle(fOpAngle);
1961 fNonHFE->SetHistDCABack(fDCABack);
1962 fNonHFE->SetHistDCA(fDCA);
1963 fNonHFE->SetHistMassBack(fInvMassBack);
1964 fNonHFE->SetHistMass(fInvMass);
1966 fNonHFE->FindNonHFE(trackIndex,vtrack,fVevent);
1968 Int_t *fUlsPartner = fNonHFE->GetPartnersULS();
1969 Int_t *fLsPartner = fNonHFE->GetPartnersLS();
1970 Bool_t fUlsIsPartner = kFALSE;
1971 Bool_t fLsIsPartner = kFALSE;
1972 ///#################################################################
1974 //Electron Information
1975 Double_t fPhiE = -999;
1976 Double_t fEtaE = -999;
1977 Double_t fPhiH = -999;
1978 Double_t fEtaH = -999;
1979 Double_t fDphi = -999;
1980 Double_t fDeta = -999;
1981 Double_t fPtE = -999;
1982 Double_t fPtH = -999;
1984 Double_t pi = TMath::Pi();
1986 fPhiE = track->Phi();
1987 fEtaE = track->Eta();
1990 ///_________________________________________________________________
1996 if(TMath::Abs(fMCparticle->GetPdgCode())==11 && (TMath::Abs(fMCparticleMother->GetPdgCode())==22 || TMath::Abs(fMCparticleMother->GetPdgCode())==111 || TMath::Abs(fMCparticleMother->GetPdgCode())==221))
1998 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
1999 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2004 if(TMath::Abs(fMCtrack->GetPdgCode())==11 && (TMath::Abs(fMCtrackMother->GetPdgCode())==22 || TMath::Abs(fMCtrackMother->GetPdgCode())==111 || TMath::Abs(fMCtrackMother->GetPdgCode())==221))
2006 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2007 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2011 ///_________________________________________________________________
2014 if(fNonHFE->IsULS()) fPtElec_ULS->Fill(fPtE,fNonHFE->GetNULS());
2015 if(fNonHFE->IsLS()) fPtElec_LS->Fill(fPtE,fNonHFE->GetNLS());
2018 //__________________________________________________________________
2019 //Event Mixing Analysis - Hadron Loop
2021 if(fEventMixingFlag)
2023 fPool = fPoolMgr->GetEventPool(fCentrality->GetCentralityPercentile("V0A"), fZvtx); // Get the buffer associated with the current centrality and z-vtx
2025 if(!fPool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f",fCentrality->GetCentralityPercentile("V0A"), fZvtx));
2027 if(fPool->GetCurrentNEvents() >= 5) // start mixing when 5 events are in the buffer
2029 fPoolNevents->Fill(fPool->GetCurrentNEvents());
2031 for (Int_t jMix = 0; jMix < fPool->GetCurrentNEvents(); jMix++) // mix with each event in the buffer
2033 TObjArray* bgTracks = fPool->GetEvent(jMix);
2035 for (Int_t kMix = 0; kMix < bgTracks->GetEntriesFast(); kMix++) // mix with each track in the event
2037 const AliEHCParticle* MixedTrack(dynamic_cast<AliEHCParticle*>(bgTracks->At(kMix)));
2038 if (NULL == MixedTrack) continue;
2040 fPhiH = MixedTrack->Phi();
2041 fEtaH = MixedTrack->Eta();
2042 fPtH = MixedTrack->Pt();
2044 if(fPtH>fPtE || fPtH<1) continue;
2046 fDphi = fPhiE - fPhiH;
2048 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2049 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2051 fDeta = fEtaE - fEtaH;
2053 Double_t fPtBin[6] = {2,4,6,8,10,15};
2055 for(Int_t i = 0; i < 5; i++)
2057 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2059 fCEtaPhi_Inc_EM[i]->Fill(fDphi,fDeta);
2061 if(fNonHFE->IsULS()) fCEtaPhi_ULS_EM[i]->Fill(fDphi,fDeta);
2062 if(fNonHFE->IsLS()) fCEtaPhi_LS_EM[i]->Fill(fDphi,fDeta);
2064 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2065 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight_EM[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2069 // TODO your code: do event mixing with current event and bgTracks
2070 // note that usually the content filled now is weighted by 1 / pool->GetCurrentNEvents()
2075 //__________________________________________________________________
2077 //__________________________________________________________________
2078 //Same Event Analysis - Hadron Loop
2079 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2081 if(trackIndex==iTracks) continue;
2083 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2086 printf("ERROR: Could not receive track %d\n", iTracks);
2090 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2094 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2095 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2096 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2097 if(atrack2->GetTPCNcls() < 80) continue;
2101 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2102 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2105 fPhiH = track2->Phi();
2106 fEtaH = track2->Eta();
2107 fPtH = track2->Pt();
2109 if(fPtH>fPtE || fPtH<1) continue;
2111 fDphi = fPhiE - fPhiH;
2113 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2114 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2116 fDeta = fEtaE - fEtaH;
2118 Double_t fPtBin[6] = {2,4,6,8,10,15};
2120 //______________________________________________________________
2121 //Check if this track is a Non-HFE partner
2122 for(Int_t i = 0; i < fNonHFE->GetNULS(); i++)
2124 if(fUlsPartner[i]==iTracks) fUlsIsPartner=kTRUE;
2126 for(Int_t i = 0; i < fNonHFE->GetNLS(); i++)
2128 if(fLsPartner[i]==iTracks) fLsIsPartner=kTRUE;
2130 //______________________________________________________________
2132 for(Int_t i = 0; i < 5; i++)
2134 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2136 fCEtaPhi_Inc[i]->Fill(fDphi,fDeta);
2138 if(fNonHFE->IsULS()) fCEtaPhi_ULS[i]->Fill(fDphi,fDeta);
2139 if(fNonHFE->IsLS()) fCEtaPhi_LS[i]->Fill(fDphi,fDeta);
2140 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP[i]->Fill(fDphi,fDeta);
2141 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP[i]->Fill(fDphi,fDeta);
2143 if(fNonHFE->IsULS()) fCEtaPhi_ULS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2144 if(fNonHFE->IsLS()) fCEtaPhi_LS_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2145 if(fNonHFE->IsULS() && !fUlsIsPartner) fCEtaPhi_ULS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNULS());
2146 if(fNonHFE->IsLS() && !fLsIsPartner) fCEtaPhi_LS_NoP_Weight[i]->Fill(fDphi,fDeta,fNonHFE->GetNLS());
2152 //____________________________________________________________________________________________________________
2153 //Create a TObjArray with selected hadrons, for the mixed event analysis
2154 TObjArray* AliAnalysisTaskEMCalHFEpA::SelectedHadrons()
2156 fTracksClone = new TObjArray;
2157 fTracksClone->SetOwner(kTRUE);
2159 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2161 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2164 printf("ERROR: Could not receive track %d\n", iTracks);
2168 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2172 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2173 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2174 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2175 if(atrack2->GetTPCNcls() < 80) continue;
2179 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2180 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2183 fTracksClone->Add(new AliEHCParticle(track2->Eta(), track2->Phi(), track2->Pt()));
2185 return fTracksClone;
2187 //____________________________________________________________________________________________________________
2189 //______________________________________________________________________
2190 void AliAnalysisTaskEMCalHFEpA::DiHadronCorrelation(AliVTrack *track, Int_t trackIndex)
2192 //________________________________________________
2193 //Associated particle cut
2194 fPartnerCuts->SetAcceptKinkDaughters(kFALSE);
2195 fPartnerCuts->SetRequireITSRefit(kTRUE);
2196 fPartnerCuts->SetRequireTPCRefit(kTRUE);
2197 fPartnerCuts->SetEtaRange(-0.9,0.9);
2198 fPartnerCuts->SetMaxChi2PerClusterTPC(4.0);
2199 fPartnerCuts->SetMinNClustersTPC(80);
2200 fPartnerCuts->SetPtRange(0.3,1e10);
2201 fPartnerCuts->SetDCAToVertex2D(kTRUE);
2202 fPartnerCuts->SetMaxDCAToVertexXY(2.4);
2203 fPartnerCuts->SetMaxDCAToVertexZ(3.2);
2204 //_________________________________________________
2206 //Electron Information
2207 Double_t fPhiE = -999;
2208 Double_t fEtaE = -999;
2209 Double_t fPhiH = -999;
2210 Double_t fEtaH = -999;
2211 Double_t fDphi = -999;
2212 Double_t fDeta = -999;
2213 Double_t fPtE = -999;
2214 Double_t fPtH = -999;
2216 Double_t pi = TMath::Pi();
2218 fPhiE = track->Phi();
2219 fEtaE = track->Eta();
2222 //__________________________________________________________________
2223 //Same Event Analysis - Hadron Loop
2224 for(Int_t iTracks = 0; iTracks < fVevent->GetNumberOfTracks(); iTracks++)
2226 if(trackIndex==iTracks) continue;
2228 AliVParticle* Vtrack2 = fVevent->GetTrack(iTracks);
2231 printf("ERROR: Could not receive track %d\n", iTracks);
2235 AliVTrack *track2 = dynamic_cast<AliVTrack*>(Vtrack2);
2239 AliAODTrack *atrack2 = dynamic_cast<AliAODTrack*>(Vtrack2);
2240 if(!atrack2->TestFilterMask(AliAODTrack::kTrkTPCOnly)) continue;
2241 if((!(atrack2->GetStatus()&AliESDtrack::kITSrefit)|| (!(atrack2->GetStatus()&AliESDtrack::kTPCrefit)))) continue;
2242 if(atrack2->GetTPCNcls() < 80) continue;
2246 AliESDtrack *etrack2 = dynamic_cast<AliESDtrack*>(Vtrack2);
2247 if(!fPartnerCuts->AcceptTrack(etrack2)) continue;
2250 fPhiH = track2->Phi();
2251 fEtaH = track2->Eta();
2252 fPtH = track2->Pt();
2254 if(fPtH>fPtE || fPtH<1) continue;
2256 fDphi = fPhiE - fPhiH;
2258 if (fDphi > 3*pi/2) fDphi = fDphi - 2*pi;
2259 if (fDphi < -pi/2) fDphi = fDphi + 2*pi;
2261 fDeta = fEtaE - fEtaH;
2263 Double_t fPtBin[6] = {2,4,6,8,10,15};
2265 for(Int_t i = 0; i < 5; i++)
2267 if(fPtE>=fPtBin[i] && fPtE<fPtBin[i+1])
2269 fCEtaPhi_Inc_DiHadron[i]->Fill(fDphi,fDeta);
2274 //____________________________________________________________________________________________________________
2276 //______________________________________________________________________
2277 Bool_t AliAnalysisTaskEMCalHFEpA::FindMother(Int_t mcIndex)
2284 fIsFromPi0 = kFALSE;
2285 fIsFromEta = kFALSE;
2286 fIsFromGamma = kFALSE;
2288 if(mcIndex < 0 || !fIsMC)
2294 Int_t mpdg = -99999;
2295 Int_t gmpdg = -99999;
2296 Int_t ggmpdg = -99999;
2297 Int_t gggmpdg = -99999;
2301 fMCparticle = (AliAODMCParticle*) fMCarray->At(mcIndex);
2303 pdg = TMath::Abs(fMCparticle->GetPdgCode());
2313 fIsFromPi0 = kFALSE;
2314 fIsFromEta = kFALSE;
2315 fIsFromGamma = kFALSE;
2319 if(fMCparticle->GetMother()<0)
2326 fIsFromPi0 = kFALSE;
2327 fIsFromEta = kFALSE;
2328 fIsFromGamma = kFALSE;
2332 fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
2333 mpdg = TMath::Abs(fMCparticleMother->GetPdgCode());
2335 if(fMCparticleMother->GetMother()<0)
2343 fMCparticleGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleMother->GetMother());
2344 gmpdg = TMath::Abs(fMCparticleGMother->GetPdgCode());
2345 if(fMCparticleGMother->GetMother()<0)
2352 fMCparticleGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGMother->GetMother());
2353 ggmpdg = TMath::Abs(fMCparticleGGMother->GetPdgCode());
2354 if(fMCparticleGGMother->GetMother()<0)
2360 fMCparticleGGGMother = (AliAODMCParticle*) fMCarray->At(fMCparticleGGMother->GetMother());
2361 gggmpdg = TMath::Abs(fMCparticleGGGMother->GetPdgCode());
2368 fMCtrack = fMCstack->Particle(mcIndex);
2370 pdg = TMath::Abs(fMCtrack->GetPdgCode());
2379 fIsFromPi0 = kFALSE;
2380 fIsFromEta = kFALSE;
2381 fIsFromGamma = kFALSE;
2385 if(fMCtrack->GetFirstMother()<0)
2392 fIsFromPi0 = kFALSE;
2393 fIsFromEta = kFALSE;
2394 fIsFromGamma = kFALSE;
2398 fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
2399 mpdg = TMath::Abs(fMCtrackMother->GetPdgCode());
2401 if(fMCtrackMother->GetFirstMother()<0)
2409 fMCtrackGMother = fMCstack->Particle(fMCtrackMother->GetFirstMother());
2410 gmpdg = TMath::Abs(fMCtrackGMother->GetPdgCode());
2412 if(fMCtrackGMother->GetFirstMother()<0)
2419 fMCtrackGGMother = fMCstack->Particle(fMCtrackGMother->GetFirstMother());
2420 ggmpdg = TMath::Abs(fMCtrackGGMother->GetPdgCode());
2422 if(fMCtrackGGMother->GetFirstMother()<0)
2428 fMCtrackGGGMother = fMCstack->Particle(fMCtrackGGMother->GetFirstMother());
2429 gggmpdg = TMath::Abs(fMCtrackGGGMother->GetPdgCode());
2435 //Tag Electron Source
2436 if(mpdg==111 || mpdg==221 || mpdg==22)
2444 fIsFromPi0 = kFALSE;
2445 fIsFromEta = kFALSE;
2446 fIsFromGamma = kFALSE;
2448 if(mpdg==111) fIsFromPi0 = kFALSE;
2449 if(mpdg==221)fIsFromEta = kFALSE;
2450 if(mpdg==22) fIsFromGamma = kFALSE;
2459 fIsFromPi0 = kFALSE;
2460 fIsFromEta = kFALSE;
2461 fIsFromGamma = kFALSE;
2468 if(mpdg>400 && mpdg<500)
2470 if((gmpdg>500 && gmpdg<600) || (ggmpdg>500 && ggmpdg<600) || (gggmpdg>500 && gggmpdg<600))
2485 else if(mpdg>500 && mpdg<600)