ATLAS Offline Software
Loading...
Searching...
No Matches
ZeeTaPMonTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6//
7// 2014-05-21 Author: Remi Lafaye (Annecy)
8// 2015-05-20 Author: Bertrand LAFORGE (LPNHE Paris)
9//
10// NAME: ZeeTaPMonTool.cxx
11// PACKAGE: offline/Reconstruction/egamma/egammaPerformance
12// PURPOSE: Simple tag and probe method to check electron
13// ID and ISO performance
14//
16
17
18#include "ZeeTaPMonTool.h"
19#include "GaudiKernel/MsgStream.h"
20#include "GaudiKernel/StatusCode.h"
24#include "xAODEgamma/Electron.h"
27#include "TH1F.h"
28
29#include "GaudiKernel/SystemOfUnits.h"
30using Gaudi::Units::GeV;
31
32ZeeTaPMonTool::ZeeTaPMonTool(const std::string & type, const std::string & name, const IInterface* parent)
33 : egammaMonToolBase(type,name,parent),
34 m_hNZcandidates(nullptr),
35 m_electronGroup(nullptr),
36 m_electronTrkGroup(nullptr),
37 m_electronIdGroup(nullptr),
38 m_electronIsoGroup(nullptr),
39 m_electronLBGroup(nullptr),
40 m_electronEffGroup(nullptr),
41 m_hMass(nullptr),
42 m_hIDEt(nullptr),
43 m_hIDEta(nullptr),
44 m_hIDPhi(nullptr),
45 m_effhIDEt(nullptr),
46 m_effhIDEta(nullptr),
47 m_effhIDPhi(nullptr),
48 m_hISOEt(nullptr),
49 m_hISOEta(nullptr),
50 m_hISOPhi(nullptr),
51 m_effhISOEt(nullptr),
52 m_effhISOEta(nullptr),
53 m_effhISOPhi(nullptr),
54 m_hN(nullptr),
55 m_hEt(nullptr),
56 m_hEta(nullptr),
57 m_hPhi(nullptr),
58 m_hEtaPhi(nullptr),
59 m_hLB_N(nullptr)
60{
61 // Name of the electron collection
62 declareProperty("massPeak", m_MassPeak = ParticleConstants::ZMassInMeV, "Resonance peak position" );
63 declareProperty("electronEtCut",m_ElectronEtCut = 15*GeV, "Et cut for electrons");
64 declareProperty("massLowerCut", m_MassLowerCut = 70*GeV,"Lower mass cut");
65 declareProperty("massUpperCut", m_MassUpperCut = 110*GeV,"Upper mass cut");
66 declareProperty("PhiBinning", m_PhiBinning = 64,"Number of bins for phi");
67
70 m_nZCandidates = 0;
71}
72
74{
76 ATH_CHECK( m_ElectronContainer.initialize() );
77 return StatusCode::SUCCESS;
78}
79
81{
82 ATH_MSG_DEBUG("ZeeTaPMonTool::bookHistograms()");
83 int start;
84 int end;
85 start = 0;
86 end = ENDCAP;
87
88 // Create groups
89 m_electronGroup = new MonGroup(this,"egamma/tagandprobe"+m_GroupExtension, run); // to be re-booked every new run
90 // Create sub groups
91 m_electronTrkGroup = new MonGroup(this,"egamma/tagandprobe"+m_GroupExtension+"/Track", run); // to be re-booked every new run
92 m_electronIdGroup = new MonGroup(this,"egamma/tagandprobe"+m_GroupExtension+"/ID", run); // to be re-booked every new run
93 m_electronEffGroup = new MonGroup(this,"egamma/tagandprobe"+m_GroupExtension+"/EfficienciesIDISO", run, ManagedMonitorToolBase::ATTRIB_MANAGED , "", "effAsPerCent"); // to be re-booked every new run
94 m_electronIsoGroup = new MonGroup(this,"egamma/tagandprobe"+m_GroupExtension+"/Isolation", run); // to be re-booked every new run
95 m_electronLBGroup = new MonGroup(this,"egamma/tagandprobe"+m_GroupExtension+"/LBMon", run); // to be re-booked every new run
96
97 // Number of Z candidates vs eta of leading electron
98 bookTH1F(m_hNZcandidates,*m_electronGroup,"electronTagAndProbeNcandidates", "Number of "+m_GroupExtension+" candidates vs eta of leading electron",64,-3.2,3.2);
99
100 // Mass plots
101 bookTH1F(m_hMass, *m_electronGroup,"electronTagAndProbeGlobalMass", "ee invariant mass",100,m_MassLowerCut,m_MassUpperCut);
102 bookTH1FperRegion(m_hvMass, *m_electronGroup,"electronTagAndProbeMass", "ee invariant mass",100,m_MassLowerCut,m_MassUpperCut,start,end);
103
104 // EFFICIENCIES IN MAIN PANEL
105 bookTH1F(m_hIDEt, *m_electronEffGroup,"EfficiencyTagAndProbeElectronIDvsEtOld", "LHTight electron ID efficiency vs Et [MeV]",100, -1000.0, 250000.0);
106 bookTH1F(m_hIDEta, *m_electronEffGroup,"EfficiencyTagAndProbeElectronIDvsEtaOld", "LHTight electron ID efficiency vs #eta", 64, -3.2, 3.2);
107 bookTH1F(m_hIDPhi, *m_electronEffGroup,"EfficiencyTagAndProbeElectronIDvsPhiOld", "LHTight electron ID efficiency vs #phi", m_PhiBinning, -3.2, 3.2);
108 bookTH1F(m_hISOEt, *m_electronEffGroup,"EfficiencyTagAndProbeElectronISOvsEtOld", "LHTight electron ISO efficiency vs Et [MeV]",100, -1000.0, 250000.0);
109 bookTH1F(m_hISOEta,*m_electronEffGroup,"EfficiencyTagAndProbeElectronISOvsEtaOld", "LHTight electron ISO efficiency vs #eta", 64, -3.2, 3.2);
110 bookTH1F(m_hISOPhi,*m_electronEffGroup,"EfficiencyTagAndProbeElectronISOvsPhiOld", "LHTight electron ISO efficiency vs #phi", m_PhiBinning, -3.2, 3.2);
111
112 bookTProfile(m_effhIDEt, *m_electronGroup,"EfficiencyTagAndProbeElectronIDvsEt", "LHTight electron ID efficiency vs Et [MeV]",100, -1000.0, 250000.0, 0.,1.1);
113 bookTProfile(m_effhIDEta, *m_electronGroup,"EfficiencyTagAndProbeElectronIDvsEta", "LHTight electron ID efficiency vs #eta", 64, -3.2, 3.2, 0.,1.1);
114 bookTProfile(m_effhIDPhi, *m_electronGroup,"EfficiencyTagAndProbeElectronIDvsPhi", "LHTight electron ID efficiency vs #phi", m_PhiBinning, -3.2, 3.2, 0.,1.1);
115 bookTProfile(m_effhISOEt, *m_electronGroup,"EfficiencyTagAndProbeElectronISOvsEt", "LHTight electron ISO efficiency vs Et [MeV]",100, -1000.0, 250000.0, 0.,1.1);
116 bookTProfile(m_effhISOEta,*m_electronGroup,"EfficiencyTagAndProbeElectronISOvsEta", "LHTight electron ISO efficiency vs #eta", 64, -3.2, 3.2, 0., 1.1);
117 bookTProfile(m_effhISOPhi,*m_electronGroup,"EfficiencyTagAndProbeElectronISOvsPhi", "LHTight electron ISO efficiency vs #phi", m_PhiBinning, -3.2, 3.2, 0., 1.1);
118
119 // COMPLEMENTARY HISTOGRAMS FOR EXPERT PANEL
120 bookTH1F(m_hN, *m_electronGroup,"electronTagAndProbeN", "Number of Probe electrons",40, 0.0, 40.0);
121 bookTH1F(m_hEt, *m_electronGroup,"electronTagAndProbeEt", "Probe electron Et [MeV]",100, -1000.0, 250000.0);
122 bookTH2F(m_hEtaPhi, *m_electronGroup,"electronTagAndProbeEtaPhi", "Probe electron #eta,#phi map", 64, -3.2, 3.2, m_PhiBinning, -3.2, 3.2);
123 bookTH1F(m_hEta, *m_electronGroup,"electronTagAndProbeEta", "Probe electron #eta", 64, -3.2, 3.2);
124 bookTH1F(m_hPhi, *m_electronGroup,"electronTagAndProbePhi", "Probe electron #phi", m_PhiBinning, -3.2, 3.2);
125
126 // TRACK PANEL
127 bookTH1FperRegion(m_hvDeltaEta1 , *m_electronTrkGroup,"electronTagAndProbeDeltaEta1", "PROBE electron track match #Delta #eta (1st sampling) ;#Delta #eta;Nevents", 50,-0.05,0.05,start,end);
128 bookTH1FperRegion(m_hvDeltaPhi2 , *m_electronTrkGroup,"electronTagAndProbeDeltaPhi2", "PROBE electron track match #Delta #phi (2st sampling) ;#Delta #phi;Nevents", 50,-0.15,0.1,start,end);
129 bookTH1FperRegion(m_hvNOfBLayerHits , *m_electronTrkGroup,"electronTagAndProbeNOfBLayerHits", "PROBE electron number of track B-Layer Hits ;N B layer hits;Nevents", 6,-0.5,5.5,start,end);
130 bookTH1FperRegion(m_hvNOfSiHits , *m_electronTrkGroup,"electronTagAndProbeNOfSiHits", "PROBE electron number of track precision Hits ;N Si hits;Nevents", 26,-0.5,25.5,start,end);
131 bookTH1FperRegion(m_hvNOfTRTHits , *m_electronTrkGroup,"electronTagAndProbeNOfTRTHits", "PROBE electron number of TRT Hits ;N TRT hits;Nevents", 51,-0.5,50.5,start,end);
132
133 // ID PANEL
134 bookTH1FperRegion(m_hvEhad1 , *m_electronIdGroup,"electronTagAndProbeEhad1", "PROBE electron energy leakage in 1st sampling of hadronic cal. ;E had1; Nevents", 50, -1000., 10000.,start,end);
135 bookTH1FperRegion(m_hvEoverP , *m_electronIdGroup,"electronTagAndProbeEoverP", "PROBE electron match track E over P ;E/p;Nevents", 50,0,5,start,end);
136 bookTH1FperRegion(m_hvCoreEM , *m_electronIdGroup,"electronTagAndProbeCoreEM", "PROBE electron core energy in EM calorimeter ;E [MeV]; Nevents",50, -5000., 250000.,start,end);
137 bookTH1FperRegion(m_hvF1 , *m_electronIdGroup,"electronTagAndProbeF1", "PROBE electron fractional energy in 1st sampling;F1; Nevents", 50, -0.2,1.0,start,end);
138 bookTH1FperRegion(m_hvF2 , *m_electronIdGroup,"electronTagAndProbeF2", "PROBE electron fractional energy in 2nd sampling;F2; Nevents", 50, -0.2,1.0,start,end);
139 bookTH1FperRegion(m_hvF3 , *m_electronIdGroup,"electronTagAndProbeF3", "PROBE electron fractional energy in 3rd sampling;F3; Nevents", 50, -0.2,1.0,start,end);
140 bookTH1FperRegion(m_hvRe233e237 , *m_electronIdGroup,"electronTagAndProbeRe233e237", "PROBE electron uncor. energy fraction in 3x3/3x7 cells in em sampling 2 ;R 3x3/3x7; Nevents", 50, 0., 2.,start,end);
141 bookTH1FperRegion(m_hvRe237e277 , *m_electronIdGroup,"electronTagAndProbeRe237e277", "PROBE electron uncor. energy fraction in 3x7/7x7 cells in em sampling 2 ;R 3x7/7x7; Nevents", 50, 0., 2.,start,end);
142
143 // ISO PANEL
144 bookTH1FperRegion(m_hvCaloIso , *m_electronIsoGroup,"electronTagAndProbeCaloIso", "PROBE electron calorimeter isolation;E_{iso} [MeV];Nevents", 50,-10000.,40000.0,start,end);
145 bookTH1FperRegion(m_hvTrackIso , *m_electronIsoGroup,"electronTagAndProbeTrackIso", "PROBE electron track isolation;E_{trk iso} [MeV];Nevents", 50,-10000.,40000.0,start,end);
146
147 // LUMI BLOCK MONITORING PANEL
148
149 std::string hname = std::string("LBEvoNZcandidates");
150 std::string hlongname = std::string("Number of Z candidates vs LB");
151 bookTH1F(m_hLB_N, *m_electronLBGroup, hname, hlongname, 2000, -0.5, 1999.5);
152
153 return StatusCode::SUCCESS;
154}
155
157{
158 ATH_MSG_DEBUG("ZeeTaPMonTool::fillHistograms()");
159
160 if (!hasGoodTrigger("Zee T&P electron")) return StatusCode::SUCCESS;
161
162 const EventContext& ctx = Gaudi::Hive::currentContext();
163
164 //check whether Lar signaled event bad
165 if(hasBadLar(ctx)) {
166 ATH_MSG_DEBUG("ZeeTaPMonTool::hasBadLar()");
167 return StatusCode::RECOVERABLE;
168 }
169
170 //--------------------
171 //figure out current LB
172 //--------------------
173 unsigned int previousLB = m_currentLB;
175
176 //deal with the change of LB
177 if (m_currentLB>previousLB) {
178 // update the by LB variables
180 // Reset counters
182 }
183
184 // Get electron container
186 ATH_CHECK(electron_container.isValid());
187
188 xAOD::ElectronContainer::const_iterator e_iter = electron_container->begin();
189 xAOD::ElectronContainer::const_iterator e_end = electron_container->end();
190 ATH_MSG_DEBUG("Number of electrons: " << electron_container->size());
191
192 int ngood_el = 0;
193 float lead_et=-999;
194 float subl_et=-999;
195 const xAOD::Electron *lead_el = nullptr;
196 const xAOD::Electron *subl_el = nullptr;
197
198 for (; e_iter!=e_end; ++e_iter) {
199
200 if(!(*e_iter)) continue;
201 // Formally unnecessary because all electrons in the container have these authors by construction
202 if (!((*e_iter)->author(xAOD::EgammaParameters::AuthorElectron)|| (*e_iter)->author(xAOD::EgammaParameters::AuthorAmbiguous))) continue;
203
204 // Ask these electrons to be LHLoose
205 bool isGood=false;
206
207 bool passed = (*e_iter)->passSelection(isGood,"LHLoose");
208 if( passed || !isGood ) ATH_MSG_DEBUG("not a good LHLoose electron candidate found in TDS");
209
210 // LHMedium
211 // sc = (*e_iter)->passSelection(isGood,"LHMedium");
212 // if(sc.isFailure() || !isGood ) ATH_MSG_DEBUG("not a good LHMedium electron candidate found in TDS");
213
214 // LHTight
215 // sc = (*e_iter)->passSelection(isGood,"LHTight");
216 // if(sc.isFailure() || !isGood ) ATH_MSG_DEBUG("not a good electron candidate found in TDS");
217
218 if(isGood) {
219 ++ngood_el;
220 // Look for two electrons
221 float et = (*e_iter)->pt();
222 if(et>lead_et) {
223 subl_et = lead_et;
224 subl_el = lead_el;
225 lead_et = et;
226 lead_el = *e_iter;
227 } else if(et>subl_et) {
228 subl_et = et;
229 subl_el = *e_iter;
230 }
231 }
232 }
233
234
235 // Fill number of electrons histograms
236 if (m_hN) m_hN->Fill(ngood_el);
237
238 // request at least two electrons
239
240 if (ngood_el<2) return StatusCode::SUCCESS;
241
242 // Et cuts
243 if(lead_et<m_ElectronEtCut || lead_et<0) return StatusCode::SUCCESS;
244 if(subl_et<m_ElectronEtCut || subl_et<0) return StatusCode::SUCCESS;
245
246 // Mass window
247 float mass = (lead_el->p4()+subl_el->p4()).M();
248 ATH_MSG_DEBUG("Zee mass & cuts: (" << mass << ", " << m_MassLowerCut << ", " << m_MassUpperCut << ")");
249 if(mass<m_MassLowerCut || mass>m_MassUpperCut) return StatusCode::SUCCESS;
250
251 // Basic kinematics
252 float lead_eta = lead_el->eta();
253 float lead_phi = lead_el->phi();
254 float subl_eta = subl_el->eta();
255 float subl_phi = subl_el->phi();
256 ATH_MSG_DEBUG("Leading electron (eta,phi,et,q): (" << lead_eta << ", " << lead_phi << ", " << lead_et << ", " << lead_el->charge() << ")");
257 ATH_MSG_DEBUG("Subleading electron (eta,phi,et,q): (" << subl_eta << ", " << subl_phi << ", " << subl_et << ", " << subl_el->charge() << ")");
258
259 // Eta cuts
260 if(fabs(lead_eta)>2.47 || fabs(subl_eta)>2.47) return StatusCode::SUCCESS;
261
262 // Check charges
263 if (lead_el->charge()*subl_el->charge()>=0) return StatusCode::SUCCESS;
264
265 bool lead_isLHTight = false;
266 if ( !lead_el->passSelection(lead_isLHTight,"LHTight") ) return StatusCode::FAILURE;
267
268 bool subl_isLHTight = false;
269 if ( !subl_el->passSelection(subl_isLHTight,"LHTight") ) return StatusCode::FAILURE;
270
271 bool EventZcandidateUsed = false;
272
273 // If leading electron is LHTight use subleading as probe
274 if(lead_isLHTight) {
275 m_hNZcandidates->Fill(lead_eta);
276 EventZcandidateUsed = true;
277 // Isolation Energy
278 float topoetcone40;
279 bool subl_isIsolated = false;
280 if ( !subl_el->isolationValue(topoetcone40,xAOD::Iso::topoetcone40) ) return StatusCode::FAILURE;
281 if ( topoetcone40 < 4.5*GeV ) subl_isIsolated = true;
282 fillElectronProbe(subl_el, subl_isLHTight, subl_isIsolated, mass);
283 }
284
285 // If subleading electron is LHTight use leading as probe
286 if(subl_isLHTight) {
287 if (!EventZcandidateUsed) m_hNZcandidates->Fill(subl_eta);
288 // Isolation Energy
289 float topoetcone40;
290 bool lead_isIsolated = false;
291 if ( !lead_el->isolationValue(topoetcone40,xAOD::Iso::topoetcone40) ) return StatusCode::FAILURE;
292 if ( topoetcone40 < 4.5*GeV ) lead_isIsolated = true;
293 fillElectronProbe(lead_el, lead_isLHTight, lead_isIsolated, mass);
294 }
295
296 // Fill number of Z found in the LB
297 if (m_hLB_N) m_hLB_N->Fill(m_currentLB);
298
299 return StatusCode::SUCCESS;
300}
301
302void ZeeTaPMonTool::fillElectronProbe(const xAOD::Electron *el, bool isTight, bool isIso, double mass)
303{
304
305 float et = el->pt();
306 float eta = el->eta();
307 float phi = el->phi();
308
309 int ir = GetRegion(eta);
310 if (m_hEt) m_hEt->Fill(et);
311 if (m_hEtaPhi) m_hEtaPhi->Fill(eta,phi);
312 if (m_hEta) {
313 m_hEta->Fill(eta);
314 }
315 else {
316 ATH_MSG_DEBUG("ERRORBL eta histo not filled !!!!");
317 }
318
319 if (m_hPhi) m_hPhi->Fill(phi);
321 if (m_hMass) m_hMass->Fill(mass);
322
323 if (isTight) {
324 if (m_hIDEt) m_hIDEt->Fill(et);
325 if (m_hIDEta) m_hIDEta->Fill(eta);
326 if (m_hIDPhi) m_hIDPhi->Fill(phi);
327 if (m_effhIDEt) m_effhIDEt->Fill(et,1.);
328 if (m_effhIDEta) m_effhIDEta->Fill(eta,1.);
329 if (m_effhIDPhi) m_effhIDPhi->Fill(phi,1.);
330 } else {
331 if (m_effhIDEt) m_effhIDEt->Fill(et,0.);
332 if (m_effhIDEta) m_effhIDEta->Fill(eta,0.);
333 if (m_effhIDPhi) m_effhIDPhi->Fill(phi,0.);
334 }
335
336 if (isTight && isIso) {
337 if (m_hISOEt) m_hISOEt->Fill(et);
338 if (m_hISOEta) m_hISOEta->Fill(eta);
339 if (m_hISOPhi) m_hISOPhi->Fill(phi);
340 if (m_effhISOEt) m_effhISOEt->Fill(et,1.);
341 if (m_effhISOEta) m_effhISOEta->Fill(eta,1.);
342 if (m_effhISOPhi) m_effhISOPhi->Fill(phi,1.);
343 } else {
344 if (m_effhISOEt) m_effhISOEt->Fill(et,0.);
345 if (m_effhISOEta) m_effhISOEta->Fill(eta,0.);
346 if (m_effhISOPhi) m_effhISOPhi->Fill(phi,0.);
347 }
348
349 // Cluster track match details
350 float deltaEta1 = -999.0;
351 if( el->trackCaloMatchValue(deltaEta1, xAOD::EgammaParameters::deltaEta1) ) {
353 }
354 float deltaPhi2 = -999.0;
355 if( el->trackCaloMatchValue(deltaPhi2, xAOD::EgammaParameters::deltaPhi2) ) {
357 }
358
359 // Shower shape variable details
360 float ehad1 = 0.0;
361 float ecore = 0.0;
362 float f1 = 0.0;
363 float f3 = 0.0;
364 float e233 = 0.0;
365 float e237 = 0.0;
366 float e277 = 0.0;
367 if( el->showerShapeValue(ehad1, xAOD::EgammaParameters::ehad1) ) {
369 }
370 if( el->showerShapeValue(ecore, xAOD::EgammaParameters::ecore) ) {
372 }
373 if( el->showerShapeValue(f1, xAOD::EgammaParameters::f1) ) {
375 }
376 if( el->showerShapeValue(f3, xAOD::EgammaParameters::f3) ) {
378 }
379 if( el->showerShapeValue(e237, xAOD::EgammaParameters::e237) ) {
380 float Re233e237 = 0.0;
381 if( e237!=0 && el->showerShapeValue(e233, xAOD::EgammaParameters::e233) ) {
382 Re233e237 = e233 / e237;
383 }
385 float Re237e277 = 0.0;
386 if( e237!=0 && el->showerShapeValue(e277, xAOD::EgammaParameters::e277) ) {
387 if(e277!=0) Re237e277 = e237 / e277;
388 }
390 }
391
392 // Isolation Energy
393 float topoetcone40;
394 if( el->isolationValue(topoetcone40,xAOD::Iso::topoetcone40)) {
395 fillTH1FperRegion(m_hvCaloIso,ir,topoetcone40);
396 }
397 float ptcone20;
398 if( el->isolationValue(ptcone20,xAOD::Iso::ptcone20)) {
400 }
401
402 // Associated track details
403 const xAOD::TrackParticle *t = el->trackParticle();
404 double trackp = 0;
405 unsigned char numberOfInnermostPixelLayerHits=-1;
406 unsigned char numberOfPixelHits=-1;
407 unsigned char numberOfSCTHits=-1;
408 unsigned char numberOfTRTHits=-1;
409 if(t) {
410 trackp = t->pt()*cosh(t->eta());
411 // retrieve track summary information
412 if( t->summaryValue(numberOfInnermostPixelLayerHits,xAOD::numberOfInnermostPixelLayerHits) ) {
413 fillTH1FperRegion(m_hvNOfBLayerHits,ir,numberOfInnermostPixelLayerHits);
414 }
415 if( t->summaryValue(numberOfPixelHits,xAOD::numberOfPixelHits) && t->summaryValue(numberOfSCTHits,xAOD::numberOfSCTHits) ) {
416 fillTH1FperRegion(m_hvNOfSiHits,ir,numberOfPixelHits+numberOfSCTHits);
417 }
418 if( t->summaryValue(numberOfTRTHits,xAOD::numberOfTRTHits) ) {
419 fillTH1FperRegion(m_hvNOfTRTHits,ir,numberOfTRTHits);
420 }
421 } else ATH_MSG_DEBUG( "Error attempting to retrieve associated track");
422
423 // Associated cluster details
424 const xAOD::CaloCluster *aCluster = el->caloCluster();
425 if (aCluster) {
426 float ep = 0;
427 if(trackp !=0) ep = aCluster->e()/trackp;
429 double ec = aCluster->et()*cosh(aCluster->eta());
430 float f2 = 0.0;
431 if(ec!=0) f2 = aCluster->energyBE(2)/ec;
433 } else ATH_MSG_WARNING( "Can't get CaloCluster" );
434}
435
437{
438 ATH_MSG_DEBUG("ZeeTaPMonTool::procHistograms()");
439 //normalize efficiencies
446
447 return StatusCode::SUCCESS;
448}
449
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
bool passed(DecisionID id, const DecisionIDContainer &)
checks if required decision ID is in the set of IDs in the container
A number of constexpr particle constants to avoid hardcoding them directly in various places.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
A container of information describing a monitoring object.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
std::vector< TH1 * > m_hvDeltaPhi2
TH1 * m_hNZcandidates
MonGroup * m_electronEffGroup
std::vector< TH1 * > m_hvTrackIso
virtual StatusCode initialize() override
virtual StatusCode bookHistograms() override
An inheriting class should either override this function or bookHists().
std::vector< TH1 * > m_hvRe237e277
std::vector< TH1 * > m_hvMass
std::vector< TH1 * > m_hvCoreEM
std::vector< TH1 * > m_hvF1
TProfile * m_effhISOPhi
std::vector< int > m_nZCandidatesPerLumiBlock
unsigned int m_lumiBlockNumber
TProfile * m_effhIDPhi
std::vector< TH1 * > m_hvDeltaEta1
TProfile * m_effhIDEta
std::vector< TH1 * > m_hvF2
MonGroup * m_electronGroup
virtual StatusCode fillHistograms() override
An inheriting class should either override this function or fillHists().
TProfile * m_effhIDEt
ZeeTaPMonTool(const std::string &type, const std::string &name, const IInterface *parent)
unsigned int m_nZCandidates
std::vector< TH1 * > m_hvRe233e237
std::vector< TH1 * > m_hvNOfTRTHits
MonGroup * m_electronIdGroup
MonGroup * m_electronTrkGroup
unsigned int m_nZCandidatesInCurrentLB
float m_ElectronEtCut
std::vector< TH1 * > m_hvNOfSiHits
std::vector< TH1 * > m_hvNOfBLayerHits
MonGroup * m_electronIsoGroup
std::vector< TH1 * > m_hvEoverP
void fillElectronProbe(const xAOD::Electron *el, bool isTight, bool isIso, double mass)
TProfile * m_effhISOEt
TProfile * m_effhISOEta
MonGroup * m_electronLBGroup
SG::ReadHandleKey< xAOD::ElectronContainer > m_ElectronContainer
std::vector< TH1 * > m_hvEhad1
std::vector< TH1 * > m_hvF3
virtual StatusCode procHistograms() override
An inheriting class should either override this function or finalHists().
std::vector< TH1 * > m_hvCaloIso
virtual StatusCode initialize() override
std::string m_GroupExtension
void bookTH1FperRegion(std::vector< TH1 * > &vhist, MonGroup &mygroup, const std::string &hname, const std::string &htitle, int nbins, float low, float high, unsigned int min_region, unsigned int max_region)
void bookTProfile(TProfile *&h, MonGroup &mygroup, const std::string &hname, const std::string &htitle, int nbins, float xlow, float xhigh, float ylow, float yhigh)
unsigned int getCurrentLB(const EventContext &ctx)
bool hasBadLar(const EventContext &ctx)
bool hasGoodTrigger(const std::string &comment)
void bookTH2F(TH2 *&h, MonGroup &mygroup, const std::string &hname, const std::string &htitle, int nbinsx, float xlow, float xhigh, int nbinsy, float ylow, float yhigh)
egammaMonToolBase(const std::string &type, const std::string &name, const IInterface *parent)
static void fillTH1FperRegion(std::vector< TH1 * > &vhist, unsigned int ir, float x)
static int GetRegion(float eta)
void bookTH1F(TH1 *&h, MonGroup &mygroup, const std::string &hname, const std::string &htitle, int nbins, float low, float high)
void fillEfficiencies(TH1 *h, TH1 *href)
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double e() const
The total energy of the particle.
float energyBE(const unsigned layer) const
Get the energy in one layer of the EM Calo.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition Egamma_v1.cxx:71
bool passSelection(bool &value, const std::string &menu) const
Check if the egamma object pass a selection menu (using the name) If the menu decision is stored in t...
bool isolationValue(float &value, const Iso::IsolationType information) const
old Accessor for Isolation values.
Definition Egamma_v1.h:251
virtual FourMom_t p4() const override final
The full 4-momentum of the particle as a TLoretzVector.
Definition Egamma_v1.cxx:94
virtual double phi() const override final
The azimuthal angle ( ) of the particle.
Definition Egamma_v1.cxx:76
float charge() const
Obtain the charge of the object.
int ir
counter of the current depth
Definition fastadd.cxx:49
constexpr double ZMassInMeV
the mass of the Z0 boson (in MeV)
Definition run.py:1
@ deltaPhi2
difference between the cluster phi (second sampling) and the phi of the track extrapolated to the sec...
@ deltaEta1
difference between the cluster eta (first sampling) and the eta of the track extrapolated to the firs...
const uint16_t AuthorElectron
Object Reconstructed by standard cluster-based algorithm.
Definition EgammaDefs.h:24
const uint16_t AuthorAmbiguous
Object Reconstructed by standard cluster-based algorithm.
Definition EgammaDefs.h:32
@ e277
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 7x7
Definition EgammaEnums.h:81
@ e237
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 3x7
Definition EgammaEnums.h:78
@ f3
fraction of energy reconstructed in 3rd sampling
Definition EgammaEnums.h:55
@ ecore
core energy in em calo E(core) = E0(3x3) + E1(15x2) + E2(5x5) + E3(3x5)
@ f1
E1/E = fraction of energy reconstructed in the first sampling, where E1 is energy in all strips belon...
Definition EgammaEnums.h:53
@ ehad1
E leakage into 1st sampling of had calo (CaloSampling::HEC0 + CaloSampling::TileBar0 + CaloSampling::...
Definition EgammaEnums.h:49
@ e233
uncalibrated energy (sum of cells) of the middle sampling in a rectangle of size 3x3 (in cell units e...
Definition EgammaEnums.h:69
@ ptcone20
Track isolation.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Electron_v1 Electron
Definition of the current "egamma version".
Extra patterns decribing particle interation process.