AliPhysics  775474e (775474e)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskEmcalTriggerEmulation.cxx
Go to the documentation of this file.
1  /**************************************************************************
2  * Copyright(c) 1998-2016, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
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  **************************************************************************/
15 #include <sstream>
16 
17 #include <TArrayD.h>
18 #include <THashList.h>
19 #include <THistManager.h>
20 #include <TMath.h>
21 
22 #include "AliAODMCParticle.h"
23 #include "AliClusterContainer.h"
24 #include "AliMCParticleContainer.h"
25 #include "AliTrackContainer.h"
26 #include "AliVCluster.h"
27 #include "AliVEvent.h"
28 #include "AliVParticle.h"
29 #include "AliVTrack.h"
30 #include "AliVVertex.h"
31 
37 
41 
42 namespace EMCalTriggerPtAnalysis {
43 
44 AliAnalysisTaskEmcalTriggerEmulation::AliAnalysisTaskEmcalTriggerEmulation() :
46  fkWeightHandler(nullptr),
47  fkTriggerEmulation(nullptr),
48  fHistManager(nullptr),
49  fNameMCParticles(),
50  fNameClusters(),
51  fNameTracks(),
52  fIsMC(false),
53  fEtaRange(-0.8, 0.8),
54  fPhiRange(0, 2*TMath::Pi())
55 {
56  /*
57  * See header file for details
58  */
59 }
60 
62  AliAnalysisTaskEmcal(name, true),
63  fkWeightHandler(nullptr),
64  fkTriggerEmulation(nullptr),
65  fHistManager(nullptr),
66  fNameMCParticles(),
67  fNameClusters(),
68  fNameTracks(),
69  fIsMC(false),
70  fEtaRange(-0.8, 0.8),
71  fPhiRange(0, 2*TMath::Pi())
72 {
73  /*
74  * See header file for details
75  */
76 }
77 
79  /*
80  * See header file for details
81  */
84  if(fHistManager) delete fHistManager;
85 }
86 
88  /*
89  * See header file for details
90  */
92 
95  binfact.Create(&binhandler);
96 
97  std::stringstream kinestring;
98  kinestring << "eta " << fEtaRange << ", phi " << fPhiRange;
99 
100  fHistManager = new THistManager("histos");
101  fHistManager->CreateTH1("hEvents", "Event counter", 1, 0.5, 1.5);
102  fHistManager->CreateTH1("hVertexZ", "z-component of the primary vertex", 100, -40, 40);
103  fHistManager->CreateTH1("hParticles", Form("Particles (%s)", kinestring.str().c_str()), *binhandler.GetBinning("pt"));
104  fHistManager->CreateTH1("hClusters", "Clusters", *binhandler.GetBinning("pt"));
105  fHistManager->CreateTH1("hTracks", Form("Tracks (%s)", kinestring.str().c_str()), *binhandler.GetBinning("pt"));
106 
107  for(auto histo : *fHistManager) fOutput->Add(histo);
108 }
109 
111  /*
112  * See header file for details
113  */
114  double weight = 1;
115  if(fIsMC){
117  const AliAODMCParticle *mcpart(nullptr);
118  // Loop MC particles
119  for(auto mcen : GetMCParticleContainer(fNameMCParticles.Data())->accepted()){
120  mcpart =static_cast<const AliAODMCParticle *>(mcen);
121  if(!mcpart->IsPhysicalPrimary()) continue;
122  if(mcpart->Charge() == 0) continue;
123  if(!fEtaRange.IsInRange(mcpart->Eta())) continue;
124  if(!fPhiRange.IsInRange(mcpart->Phi())) continue;
125  fHistManager->FillTH1("hParticles", TMath::Abs(mcpart->Pt()), weight);
126  }
127  if(fkTriggerEmulation){
129  }
130  }
131 
132  fHistManager->FillTH1("hEvents", 1, weight);
133  fHistManager->FillTH1("hVertexZ", InputEvent()->GetPrimaryVertex()->GetZ(), weight);
134 
135  // Loop clusters
136  const AliVCluster *clust(nullptr);
137  for(auto clusten : GetClusterContainer(fNameClusters.Data())->accepted()){
138  clust = static_cast<const AliVCluster *>(clusten);
139  fHistManager->FillTH1("hClusters", TMath::Abs(clust->E()), weight);
140  }
141 
142  // Loop tracks
143  // Assume: Track quality cuts done by the track container
144  const AliVTrack *track(nullptr);
145  const AliAODMCParticle *assocMC(nullptr), *tmp(nullptr);
146  for(auto tracken : GetTrackContainer(fNameTracks.Data())->accepted()){
147  track = static_cast<const AliVTrack *>(tracken);
148  double pt = TMath::Abs(track->Pt());
149  if(fIsMC){
150  for(auto mcen : GetMCParticleContainer(fNameMCParticles.Data())->accepted()){
151  tmp = static_cast<const AliAODMCParticle *>(mcen);
152  if(TMath::Abs(tmp->GetLabel()) == TMath::Abs(track->GetLabel())){
153  assocMC = tmp;
154  break;
155  }
156  }
157  if(!assocMC) continue;
158  if(!assocMC->IsPhysicalPrimary()) continue;
159  pt = TMath::Abs(assocMC->Pt());
160  }
161  if(!fEtaRange.IsInRange(track->Eta())) continue;
162  if(!fPhiRange.IsInRange(track->Phi())) continue;
163  fHistManager->FillTH1("hTracks", pt, weight);
164  }
165 
166  return true;
167 }
168 
169 } /* namespace EMCalTriggerPtAnalysis */
Base task in the EMCAL framework.
Emulate EMCAL trigger offline in simulation, and monitor reference distribution.
const AliEMCalTriggerWeightHandler * fkWeightHandler
Handler containing bin weights for -hard productions.
Global binning handler used by several analysis components.
AliCutValueRange< double > fEtaRange
Acceptance range for particles and tracks in -direction.
AliGenPythiaEventHeader * fPythiaHeader
!event Pythia header
TH1 * CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
AliClusterContainer * GetClusterContainer(Int_t i=0) const
void FillTH1(const char *hname, double x, double weight=1., Option_t *opt="")
Global binning definition for the high- charged particle analysis.
bool SelectEvent(const AliEmcalContainer *const cont) const
double GetEventWeight(const AliMCEvent *const event) const
AliEmcalList * fOutput
!output list
AliMCParticleContainer * GetMCParticleContainer(Int_t i=0) const
const AliEmcalTriggerEmulation * fkTriggerEmulation
Offline emulation of the EMCAL trigger.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
AliTrackContainer * GetTrackContainer(Int_t i=0) const
Container class for histograms.
Definition: THistManager.h:43
AliCutValueRange< double > fPhiRange
Acceptance range for particles and tracks in -direction.