ATLAS Offline Software
Loading...
Searching...
No Matches
EgammaMonitoring.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "EgammaMonitoring.h"
6
7#include "GaudiKernel/SystemOfUnits.h"
8
9#include "TH1D.h"
10#include "TH2D.h"
11#include "TH3D.h"
12#include "TProfile.h"
13
15#include "xAODEgamma/Egamma.h"
17#include "xAODEgamma/Electron.h"
18#include "xAODEgamma/Photon.h"
22
23EgammaMonitoring::EgammaMonitoring(const std::string &name,
24 ISvcLocator *pSvcLocator)
25 : AthAlgorithm(name, pSvcLocator) {}
26
27// ******
28
30 ATH_MSG_INFO("******************** Running over " << m_sampleType
31 << " ******************");
32 ATH_CHECK( (rootHistSvc = service("THistSvc")).isValid() );
33
34 showerShapesAll = std::make_unique<egammaMonitoring::ShowerShapesHistograms>(
35 "showerShapesAll", "Shower Shapes ", "/MONITORING/showerShapesAll/",
37
39 std::make_unique<egammaMonitoring::ShowerShapesHistograms>(
40 "showerShapes10GeV", "Shower Shapes - 10 GeV",
41 "/MONITORING/showerShapes10GeV/", rootHistSvc);
42
43 isolationAll = std::make_unique<egammaMonitoring::IsolationHistograms>(
44 "isolationAll", "Isolation ", "/MONITORING/isolationAll/", rootHistSvc);
45
46 ATH_CHECK(showerShapesAll->initializePlots());
47 ATH_CHECK(showerShapes10GeV->initializePlots());
48 ATH_CHECK(isolationAll->initializePlots(m_sampleType == "electron"));
49
50 if ("dataZ" != m_sampleType) {
51 clusterAll = std::make_unique<egammaMonitoring::ClusterHistograms>(
52 "clustersAll", "Clusters", "/MONITORING/clusterAll/", rootHistSvc);
53
54 cluster10GeV = std::make_unique<egammaMonitoring::ClusterHistograms>(
55 "clusters10GeV", "Clusters - 10 GeV", "/MONITORING/cluster10GeV/",
57
58 clusterPromptAll = std::make_unique<egammaMonitoring::ClusterHistograms>(
59 "clustersPromptAll", "Clusters from Prompt",
60 "/MONITORING/clusterPromptAll/", rootHistSvc);
61
62 clusterPrompt10GeV = std::make_unique<egammaMonitoring::ClusterHistograms>(
63 "clustersPrompt10GeV", "Clusters from Prompt - 10 GeV",
64 "/MONITORING/clusterPrompt10GeV/", rootHistSvc);
65
66 ATH_CHECK(clusterAll->initializePlots());
67 ATH_CHECK(cluster10GeV->initializePlots());
68 ATH_CHECK(clusterPromptAll->initializePlots());
69 ATH_CHECK(clusterPrompt10GeV->initializePlots());
70 } else {
71 m_clusterReco = std::make_unique<egammaMonitoring::RecoClusterHistograms>(
72 "clustersReco", "Clusters from Z->ee candidates in data",
73 "/MONITORING/recoCluster/", rootHistSvc);
75 std::make_unique<egammaMonitoring::RecoElectronHistograms>(
76 "recoElectronAll", "Reco electrons from Z->ee candidates in data",
77 "/MONITORING/recoZElectron/", rootHistSvc);
78 m_diElectron = std::make_unique<egammaMonitoring::DiObjectHistograms>(
79 "diElectrons", "Z->ee candidates in data", "/MONITORING/diElectrons/",
81 ATH_CHECK(m_clusterReco->initializePlots());
82 recoElectronAll->isData();
83 ATH_CHECK(recoElectronAll->initializePlots());
84 ATH_CHECK(m_diElectron->initializePlots());
85 }
86
87 if ("electron" == m_sampleType) {
88
90 std::make_unique<egammaMonitoring::RecoElectronHistograms>(
91 "recoElectronAll", "Electrons Reco Electron",
92 "/MONITORING/recoElectronAll/", rootHistSvc);
93
95 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
96 "truthElectronAll", "All Truth Electrons",
97 "/MONITORING/truthElectronAll/", rootHistSvc);
98
100 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
101 "truthPromptElectronAll", "All Truth Prompt Electrons",
102 "/MONITORING/truthPromptElectronAll/", rootHistSvc);
103
105 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
106 "truthElectronRecoElectronAll", "Truth Electrons Reco Electron",
107 "/MONITORING/truthElectronRecoElectronAll/", rootHistSvc);
108
110 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
111 "truthPromptElectronWithTrack", "Truth Prompt Electrons With Track",
112 "/MONITORING/truthPromptElectronWithTrack/", rootHistSvc);
113
115 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
116 "truthPromptElectronWithGSFTrack",
117 "Truth Prompt Electrons With GSFTrack",
118 "/MONITORING/truthPromptElectronWithGSFTrack/", rootHistSvc);
119
121 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
122 "truthPromptElectronWithReco",
123 "Truth Prompt Electrons With GSFTrack or just with a fwd cluster",
124 "/MONITORING/truthPromptElectronWithReco/", rootHistSvc);
125
127 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
128 "truthPromptElectronWithRecoTrack",
129 "Truth Prompt Electrons With GSFTrack",
130 "/MONITORING/truthPromptElectronWithRecoTrack/", rootHistSvc);
131
133 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
134 "truthRecoElectronLooseLH", "LLH Electrons Reco Electron",
135 "/MONITORING/truthRecoElectronLooseLH/", rootHistSvc);
136
138 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
139 "truthRecoElectronMediumLH", "MLH Electrons Reco Electron",
140 "/MONITORING/truthRecoElectronMediumLH/", rootHistSvc);
141
143 std::make_unique<egammaMonitoring::TruthElectronHistograms>(
144 "truthRecoElectronTightLH", "TLH Electrons Reco Electron",
145 "/MONITORING/truthRecoElectronTightLH/", rootHistSvc);
146
147 if (!m_FwdElectronsKey.empty()) {
148 recoElectronAll->hasFwd();
149 truthElectronAll->hasFwd();
150 truthPromptElectronAll->hasFwd();
156 truthRecoElectronLoose->hasFwd();
157 truthRecoElectronMedium->hasFwd();
158 truthRecoElectronTight->hasFwd();
159 }
160
161 ATH_CHECK(recoElectronAll->initializePlots());
162 ATH_CHECK(truthRecoElectronLoose->initializePlots());
163 ATH_CHECK(truthRecoElectronMedium->initializePlots());
164 ATH_CHECK(truthRecoElectronTight->initializePlots());
165 ATH_CHECK(truthElectronAll->initializePlots(true));
166 ATH_CHECK(truthPromptElectronAll->initializePlots(true));
167 ATH_CHECK(truthElectronRecoElectronAll->initializePlots());
168 ATH_CHECK(truthPromptElectronWithTrack->initializePlots(true));
169 ATH_CHECK(truthPromptElectronWithGSFTrack->initializePlots(true));
170 ATH_CHECK(truthPromptElectronWithReco->initializePlots());
172 } // electron Hists
173
174 if ("gamma" == m_sampleType) {
175
176 // all reco photons
177 recoPhotonAll = std::make_unique<egammaMonitoring::RecoPhotonHistograms>(
178 "recoPhotonAll", "Reco Photon", "/MONITORING/recoPhotonAll/",
180 ATH_CHECK(recoPhotonAll->initializePlots());
181
182 clusterConvPhoton = std::make_unique<egammaMonitoring::ClusterHistograms>(
183 "clusterConvPhoton", "Clusters from Converted Photons",
184 "/MONITORING/clusterConvPhoton/", rootHistSvc);
185
186 clusterConvPhotonSi = std::make_unique<egammaMonitoring::ClusterHistograms>(
187 "clusterConvPhotonSi", "Clusters from Converted Photons - Si",
188 "/MONITORING/clusterConvPhotonSi/", rootHistSvc);
189
191 std::make_unique<egammaMonitoring::ClusterHistograms>(
192 "clusterConvPhotonSiSi", "Clusters from Converted Photons - SiSi",
193 "/MONITORING/clusterConvPhotonSiSi/", rootHistSvc);
194
195 clusterUnconvPhoton = std::make_unique<egammaMonitoring::ClusterHistograms>(
196 "clusterUnconvPhoton", "Clusters from Converted Photons",
197 "/MONITORING/clusterUnconvPhoton/", rootHistSvc);
198
199 // Cluster information
200 ATH_CHECK(clusterConvPhoton->initializePlots());
201 ATH_CHECK(clusterConvPhotonSi->initializePlots());
202 ATH_CHECK(clusterConvPhotonSiSi->initializePlots());
203 ATH_CHECK(clusterUnconvPhoton->initializePlots());
204
205 if (m_hasTRT) {
207 std::make_unique<egammaMonitoring::ClusterHistograms>(
208 "clusterConvPhotonTRT", "Clusters from Converted Photons - TRT",
209 "/MONITORING/clusterConvPhotonTRT/", rootHistSvc);
210
212 std::make_unique<egammaMonitoring::ClusterHistograms>(
213 "clusterConvPhotonTRTTRT",
214 "Clusters from Converted Photons - TRTTRT",
215 "/MONITORING/clusterConvPhotonTRTTRT/", rootHistSvc);
216
218 std::make_unique<egammaMonitoring::ClusterHistograms>(
219 "clusterConvPhotonSiTRT",
220 "Clusters from Converted Photons - SiTRT",
221 "/MONITORING/clusterConvPhotonSiTRT/", rootHistSvc);
222
224 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
225 "truthConvRecoConv1TRT", "truthConvRecoConv1TRT",
226 "/MONITORING/truthConvRecoConv1TRT/", rootHistSvc);
227
229 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
230 "truthConvRecoConv2TRT", "truthConvRecoConv2TRT",
231 "/MONITORING/truthConvRecoConv2TRT/", rootHistSvc);
232
234 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
235 "truthConvRecoConv2SiTRT", "truthConvRecoConv2SiTRT",
236 "/MONITORING/truthConvRecoConv2SiTRT/", rootHistSvc);
237
239 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
240 "truthUnconvRecoConv1TRT", "truthUnconvRecoConv1TRT",
241 "/MONITORING/truthUnconvRecoConv1TRT/", rootHistSvc);
242
244 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
245 "truthUnconvRecoConv2TRT", "truthUnconvRecoConv2TRT",
246 "/MONITORING/truthUnconvRecoConv2TRT/", rootHistSvc);
247
249 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
250 "truthUnconvRecoConv2SiTRT", "truthUnconvRecoConv2SiTRT",
251 "/MONITORING/truthUnconvRecoConv2SiTRT/", rootHistSvc);
252
253 ATH_CHECK(truthPhotonConvRecoConv1TRT->initializePlots());
254 ATH_CHECK(truthPhotonConvRecoConv2TRT->initializePlots());
255 ATH_CHECK(truthPhotonConvRecoConv2SiTRT->initializePlots());
256 ATH_CHECK(truthPhotonUnconvRecoConv1TRT->initializePlots());
257 ATH_CHECK(truthPhotonUnconvRecoConv2TRT->initializePlots());
258 ATH_CHECK(truthPhotonUnconvRecoConv2SiTRT->initializePlots());
259 ATH_CHECK(clusterConvPhotonTRT->initializePlots());
260 ATH_CHECK(clusterConvPhotonTRTTRT->initializePlots());
261 ATH_CHECK(clusterConvPhotonSiTRT->initializePlots());
262 }
263
264 // All truth
265 truthPhotonAll = std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
266 "truthPhotonAll", "truthPhotonAll", "/MONITORING/truthPhotonAll/",
268
270 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
271 "truthPhotonAllUnconv", "truthPhotonAllUnconv",
272 "/MONITORING/truthPhotonAllUnconv/", rootHistSvc);
273
275 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
276 "truthPhotonAllConv", "truthPhotonAllConv",
277 "/MONITORING/truthPhotonAllConv/", rootHistSvc);
278
280 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
281 "truthPhotonAllLateConv", "truthPhotonAllLateConv",
282 "/MONITORING/truthPhotonAllLateConv/", rootHistSvc);
283
284 // Reco and truth-matched
286 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
287 "truthPhotonRecoPhoton", "truthPhotonRecoPhoton",
288 "/MONITORING/truthPhotonRecoPhoton/", rootHistSvc);
289
291 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
292 "truthPhotonRecoPhotonOrElectron",
293 "truthPhotonRecoPhotonOrElectron",
294 "/MONITORING/truthPhotonRecoPhotonOrElectron/", rootHistSvc);
295
297 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
298 "truthConvPhoton", "truthConvPhoton",
299 "/MONITORING/truthConvPhoton/", rootHistSvc);
300
302 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
303 "truthConvRecoConv", "truthConvRecoConv",
304 "/MONITORING/truthConvRecoConv/", rootHistSvc);
305
307 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
308 "truthConvRecoConv1Si", "truthConvRecoConv1Si",
309 "/MONITORING/truthConvRecoConv1Si/", rootHistSvc);
310
312 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
313 "truthConvRecoConv2Si", "truthConvRecoConv2Si",
314 "/MONITORING/truthConvRecoConv2Si/", rootHistSvc);
315
317 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
318 "truthConvRecoUnconv", "truthConvRecoUnconv",
319 "/MONITORING/truthConvRecoUnconv/", rootHistSvc);
320
322 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
323 "truthUnconvPhoton", "truthUnconvPhoton",
324 "/MONITORING/truthUnconvPhoton/", rootHistSvc);
325
327 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
328 "truthUnconvRecoConv", "truthUnconvRecoConv",
329 "/MONITORING/truthUnconvRecoConv/", rootHistSvc);
330
332 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
333 "truthUnconvRecoConv1Si", "truthUnconvRecoConv1Si",
334 "/MONITORING/truthUnconvRecoConv1Si/", rootHistSvc);
335
337 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
338 "truthUnconvRecoConv2Si", "truthUnconvRecoConv2Si",
339 "/MONITORING/truthUnconvRecoConv2Si/", rootHistSvc);
340
342 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
343 "truthUnconvRecoUnconv", "truthUnconvRecoUnconv",
344 "/MONITORING/truthUnconvRecoUnconv/", rootHistSvc);
345
347 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
348 "recoPhotonUnconvLoose", "Loose Photons Reco Photon",
349 "/MONITORING/recoPhotonUnconvLoose/", rootHistSvc);
350
352 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
353 "recoPhotonUnconvTight", "Tight Photons Reco Photon",
354 "/MONITORING/recoPhotonUnconvTight/", rootHistSvc);
355
357 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
358 "recoPhotonConvLoose", "Loose Photons Reco Photon",
359 "/MONITORING/recoPhotonConvLoose/", rootHistSvc);
360
362 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
363 "recoPhotonConvTight", "Tight Photons Reco Photon",
364 "/MONITORING/recoPhotonConvTight/", rootHistSvc);
365
367 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
368 "recoPhotonUnconvIsoFixedCutTight",
369 "Isolation Fixed Cut Tight Photons Reco Photon",
370 "/MONITORING/recoPhotonUnconvIsoFixedCutTight/", rootHistSvc);
371
373 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
374 "recoPhotonUnconvIsoFixedCutTightCaloOnly",
375 "Isolation Fixed Cut Tight Calo Only Photons Reco Photon",
376 "/MONITORING/recoPhotonUnconvIsoFixedCutTightCaloOnly/",
378
380 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
381 "recoPhotonUnconvIsoFixedCutLoose",
382 "Isolation Fixed Cut Loose Photons Reco Photon",
383 "/MONITORING/recoPhotonUnconvIsoFixedCutLoose/", rootHistSvc);
384
386 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
387 "recoPhotonConvIsoFixedCutTight",
388 "Isolation Fixed Cut Tight Photons Reco Photon",
389 "/MONITORING/recoPhotonConvIsoFixedCutTight/", rootHistSvc);
390
392 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
393 "recoPhotonConvIsoFixedCutTightCaloOnly",
394 "Isolation Fixed Cut Tight Calo Only Photons Reco Photon",
395 "/MONITORING/recoPhotonConvIsoFixedCutTightCaloOnly/", rootHistSvc);
396
398 std::make_unique<egammaMonitoring::TruthPhotonHistograms>(
399 "recoPhotonConvIsoFixedCutLoose",
400 "Isolation Fixed Cut Loose Photons Reco Photon",
401 "/MONITORING/recoPhotonConvIsoFixedCutLoose/", rootHistSvc);
402
403 // for the track monitoring, consider
404 // 4 track types (TRTSA or not, highpt or not) and
405 // 4 truth matching types (all / e / not e / pion / no truth match)
406 static const std::string typeMatch[5] = {"", "MatchElectron", "NotElectron",
407 "MatchPion", "NotMatched"};
408 static const std::string typeTrk[2] = {"", "TRT"};
409 static const std::string ptTrk[2] = {"", "highpT"};
410 static const std::string ctypeMatch[5] = {
411 "", " match to electrons", " not matched to electrons",
412 " match to pions", " not matched"};
413 static const std::string ctypeTrk[2] = {"", " TRTSA"};
414 static const std::string cptTrk[2] = {"", " pT > 3 GeV"};
415
416 for (int im = 0; im < 5; im++) {
417 std::string mN = typeMatch[im];
418 for (int it = 0; it < (m_hasTRT ? 2 : 1); it++) {
419 std::string tN = typeTrk[it];
420 for (int ip = 0; ip < 2; ip++) {
421 std::string pN = ptTrk[ip];
422
423 std::string nN =
424 "InDetTracks" + typeTrk[it] + typeMatch[im] + ptTrk[ip];
425 std::string fN = "/MONITORING/" + nN + "/";
426 std::string cN =
427 "InDet Tracks" + ctypeTrk[it] + ctypeMatch[im] + cptTrk[ip];
428
429 ATH_MSG_INFO("Creating histograms for " << nN);
430 mapTrkHistograms[nN] =
431 std::make_unique<egammaMonitoring::TrackHistograms>(
432 nN.c_str(), cN.c_str(), fN.c_str(), rootHistSvc);
433 ATH_CHECK(mapTrkHistograms[nN]->initializePlots());
434 }
435 }
436 }
437
438 ATH_CHECK(truthPhotonAll->initializePlots());
439 ATH_CHECK(truthPhotonAllUnconv->initializePlots());
440 ATH_CHECK(truthPhotonAllConv->initializePlots());
441 ATH_CHECK(truthPhotonAllLateConv->initializePlots());
442 ATH_CHECK(truthPhotonRecoPhoton->initializePlots());
443 ATH_CHECK(truthPhotonRecoPhotonOrElectron->initializePlots());
444
445 ATH_CHECK(truthPhotonConvPhoton->initializePlots());
446 ATH_CHECK(truthPhotonConvRecoConv->initializePlots());
447 ATH_CHECK(truthPhotonConvRecoConv1Si->initializePlots());
448 ATH_CHECK(truthPhotonConvRecoConv2Si->initializePlots());
449 ATH_CHECK(truthPhotonConvRecoUnconv->initializePlots());
450
451 ATH_CHECK(truthPhotonUnconvPhoton->initializePlots());
452 ATH_CHECK(truthPhotonUnconvRecoConv->initializePlots());
453 ATH_CHECK(truthPhotonUnconvRecoConv1Si->initializePlots());
454 ATH_CHECK(truthPhotonUnconvRecoConv2Si->initializePlots());
455 ATH_CHECK(truthPhotonUnconvRecoUnconv->initializePlots());
456
457 ATH_CHECK(recoPhotonUnconvLoose->initializePlots());
458 ATH_CHECK(recoPhotonUnconvTight->initializePlots());
459 ATH_CHECK(recoPhotonConvLoose->initializePlots());
460 ATH_CHECK(recoPhotonConvTight->initializePlots());
464 ATH_CHECK(recoPhotonConvIsoFixedCutTight->initializePlots());
466 ATH_CHECK(recoPhotonConvIsoFixedCutLoose->initializePlots());
467
468 } // gamma Hists
469
470 if (m_sampleType != "gamma") {
471 ATH_CHECK(m_ElectronsKey.initialize());
472 ATH_CHECK(m_GSFTrackParticlesKey.initialize());
473 }
474
475 if ("electron" == m_sampleType) {
476 //*****************ID selectors (3 levels)********************
477 ATH_CHECK(m_Loose_Ele.retrieve());
478 ATH_CHECK(m_Medium_Ele.retrieve());
479 ATH_CHECK(m_Tight_Ele.retrieve());
480
481 ATH_CHECK(m_FwdElectronsKey.initialize(!m_FwdElectronsKey.empty()));
482
483 if (!m_FwdElectronsKey.empty()) {
484 m_dR1 = new TH1D("dR1", ";#Delta R;Events", 1000, 0, 0.1);
485 ATH_CHECK(rootHistSvc->regHist("/MONITORING/Check/dR1", m_dR1));
486 m_dR2 = new TH1D("dR2", ";#Delta R;Events", 1000, 0, 0.1);
487 ATH_CHECK(rootHistSvc->regHist("/MONITORING/Check/dR2", m_dR2));
488
489 ATH_CHECK(m_Loose_FwdEle.retrieve());
490 ATH_CHECK(m_Medium_FwdEle.retrieve());
491 ATH_CHECK(m_Tight_FwdEle.retrieve());
492 }
493 }
494
495 if ("gamma" == m_sampleType) {
496 //*****************ID selectors (2 levels)********************
497 ATH_CHECK(m_Loose_Photon.retrieve());
498 ATH_CHECK(m_Tight_Photon.retrieve());
499
500 //*****************Iso Requirements********************
501 ATH_CHECK(m_IsoFixedCutTight.retrieve());
503 ATH_CHECK(m_IsoFixedCutLoose.retrieve());
504
505 ATH_CHECK(m_PhotonsKey.initialize());
506 }
507
508 //***************** The handles used whatever the sample********************
509 ATH_CHECK(m_eventInfoKey.initialize());
511
512 if (m_sampleType != "dataZ") {
513 ATH_CHECK(m_egTruthParticlesKey.initialize());
514 ATH_CHECK(m_truthParticlesKey.initialize());
515
516 //*****************MC Truth Classifier Requirement********************
517 ATH_CHECK(m_mcTruthClassifier.retrieve());
518 }
519
520 return StatusCode::SUCCESS;
521}
522
523StatusCode EgammaMonitoring::execute(const EventContext& ctx) {
524
525 // Retrieve things from the event store
527 const float mu = eventInfo->averageInteractionsPerCrossing();
528
529 // Retrieve indet track particles
532
533 if ("dataZ" == m_sampleType) {
534 return this->ZeeSelection(mu, ctx);
535 }
536
537 // Retrieve egamma truth particles
540
541 // Retrieve truth particles
544
545 if ("electron" == m_sampleType) {
546
550
551 ATH_MSG_DEBUG("------------ Truth Egamma Container ---------------");
552 for (const auto *egtruth : *egTruthParticles) {
553
554 if (!egtruth)
555 continue;
556
557 const xAOD::Electron *electron =
559
560 if (!electron)
561 continue;
562
563 clusterPromptAll->fill(*electron, mu);
564 if (egtruth->pt() > 10 * Gaudi::Units::GeV) {
565 clusterPrompt10GeV->fill(*electron, mu);
566 }
567 }
568
569 ATH_MSG_DEBUG("------------ Truth Particles Container ---------------");
570 unsigned int promptElectronTruthIndex =
571 std::numeric_limits<unsigned int>::max();
572 for (const auto *truth : *truthParticles) {
573
574 if (!truth) continue;
575 if (std::abs(truth->pdgId()) != 11) continue;
576
577 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
580
581 if (msgLvl(MSG::DEBUG)) {
582
583 bool haspVtx = truth->hasProdVtx();
584 double rProd = -1;
585 if (haspVtx) {
586 const xAOD::TruthVertex *pvtx = truth->prodVtx();
587 rProd = pvtx->perp();
588 }
589 bool hasdVtx = truth->hasDecayVtx();
590 double rDec = -1;
591 if (hasdVtx) {
592 const xAOD::TruthVertex *dvtx = truth->decayVtx();
593 rDec = dvtx->perp();
594 }
595
596 ATH_MSG_DEBUG(" ******** Truth electron found: "
597 << truth << " TO " << TO << " TT " << TT
598 << " Rprod = " << rProd << " Rdec = " << rDec
599 << " eventNumber " << eventInfo->eventNumber());
600 }
601
602 // Check if it is the prompt electron
605 MC::isGenStable(truth)) {
606 truthPromptElectronAll->fill(truth);
607 promptElectronTruthIndex = truth->index();
608 }
609
610 // Check that it is not from geant4 (but electron from photon conversion
611 // are kept)
613 truthElectronAll->fill(truth);
614 }
615
616 ATH_MSG_DEBUG("------------ InDetTracks ---------------");
617
618 for (const auto *tp : *InDetTPs) {
619
620 if (!tp)
621 continue;
622
623 uint8_t nPi = 0;
624 uint8_t nSCT = 0;
625
626 tp->summaryValue(nPi, xAOD::numberOfPixelHits);
627 tp->summaryValue(nSCT, xAOD::numberOfSCTHits);
628
629 if ((nPi + nSCT) < 7) continue;
630
632
633 if (!truth || std::abs(truth->pdgId()) != 11) continue;
634
635 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
640 truth->index() == promptElectronTruthIndex) {
641
642 // we found the track from the prompt electron
643 // let's count it
644 truthPromptElectronWithTrack->fill(truth);
645 break;
646
647 } else {
648 const xAOD::TruthParticle *firstElTruth =
650 if (!firstElTruth)
651 continue;
652 // this is not a prompt electron, we need to check the parents
653 // but we need to make sure that we double count if already found the
654 // track foundPromptElectron will check that
655
656 if (firstElTruth->index() == promptElectronTruthIndex) {
657 truthPromptElectronWithTrack->fill(firstElTruth);
658 break;
659 }
660 }
661 }
662
663 ATH_MSG_DEBUG("------------ GSFTracks ---------------");
664 for (const auto *gsf : *GSFTracks) {
665
666 if (!gsf) continue;
667
669
670 if (!truth) continue;
671
672 uint8_t nPi = 0;
673 uint8_t nSCT = 0;
674
675 gsf->summaryValue(nPi, xAOD::numberOfPixelHits);
676 gsf->summaryValue(nSCT, xAOD::numberOfSCTHits);
677
678 if ((nPi + nSCT) < 7) continue;
679
680 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
685 truth->index() == promptElectronTruthIndex) {
686
687 // we found the track from the prompt electron
688 // let's count it
690 break;
691 } else {
692 const xAOD::TruthParticle *firstElTruth =
694 if (!firstElTruth)
695 continue;
696 ATH_MSG_DEBUG("********----- Getting Mother-----********");
697 ATH_MSG_DEBUG(" STATUS " << firstElTruth << " index "
698 << firstElTruth->index());
699 // this is not a prompt electron, we need to check the parents
700 // but we need to make sure that we double count if already found the
701 // track foundPromptElectron will check that
702 if (firstElTruth->index() == promptElectronTruthIndex) {
703 truthPromptElectronWithGSFTrack->fill(firstElTruth);
704 break;
705 }
706 }
707 }
708
709 ATH_MSG_DEBUG("------------ Reco central electrons ---------------");
710 bool foundPromptElectron = false;
711
712 for (const auto *elrec : *RecoEl) {
713
714 if (!elrec) continue;
715
716 bool toFill = false;
717
718 clusterAll->fill(*elrec, mu);
719 recoElectronAll->fill(*elrec);
720 showerShapesAll->fill(*elrec);
721 isolationAll->fill(*elrec);
722 if (elrec->pt() > 10 * Gaudi::Units::GeV) {
723 cluster10GeV->fill(*elrec, mu);
724 showerShapes10GeV->fill(*elrec);
725 }
726
727 const xAOD::TruthParticle *truth =
729 if (!truth)
730 continue;
731 truthElectronRecoElectronAll->fill(truth, elrec);
732 if (std::abs(truth->pdgId()) != 11 || foundPromptElectron)
733 continue;
734 const xAOD::TruthParticle *elTruth(nullptr);
735 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
740 truth->index() == promptElectronTruthIndex) {
741 toFill = true;
742 elTruth = truth;
743 } else {
745 if (!firstElTruth) continue;
746 // this is not a prompt electron, we need to check the parents
747 // but we need to make sure that we double count if already found the
748 // track foundPromptElectron will check that
749 if (firstElTruth->index() == promptElectronTruthIndex) {
750 toFill = true;
751 elTruth = firstElTruth;
752 }
753 }
754 if (toFill) {
755 foundPromptElectron = true;
756 truthPromptElectronWithReco->fill(elTruth, elrec);
757 truthPromptElectronWithRecoTrack->fill(elTruth, elrec); // yes the same. This is different for fwd
758 if (m_Loose_Ele->accept(elrec)) truthRecoElectronLoose->fill(elTruth, elrec);
759 if (m_Medium_Ele->accept(elrec)) truthRecoElectronMedium->fill(elTruth, elrec);
760 if (m_Tight_Ele->accept(elrec)) truthRecoElectronTight->fill(elTruth, elrec);
761 }
762 } // RecoEl Loop
763
764 if (!m_FwdElectronsKey.empty()) {
766 for (const auto *el : *RecoFwdEl) {
767 // This would be very weird ??
768 if (!el) continue;
769 clusterAll->fill(*el, mu);
770 recoElectronAll->fill(*el);
771 showerShapesAll->fill(*el);
772 if (el->pt() > 10 * Gaudi::Units::GeV) {
773 cluster10GeV->fill(*el, mu);
774 showerShapes10GeV->fill(*el);
775 }
776 bool toFill = false;
777
778 const xAOD::TruthParticle *truth =
780
781 if (!truth)
782 continue;
783 // truthElectronRecoFwdElectronAll->fill(truth, elrec); // to be done
784
785 // if the prompt electron is not too far from the reco candidate, which
786 // might be matched to a photon use this prompt as the matched particle
787 // instead
788 if (std::abs(truth->pdgId()) != 11 &&
789 promptElectronTruthIndex < truthParticles->size()) {
790 const xAOD::TruthParticle *vtruth = truthParticles->at(promptElectronTruthIndex);
791 double dR1 = vtruth->p4().DeltaR(el->caloCluster()->p4());
792 double dR2 = truth->p4().DeltaR(el->caloCluster()->p4());
793 m_dR1->Fill(dR1);
794 m_dR2->Fill(dR2);
795 if (dR1 < 0.05) // threshold to optimize
796 truth = vtruth;
797 }
798
799 if (std::abs(truth->pdgId()) != 11) continue;
800 const xAOD::TruthParticle *elTruth(nullptr);
801 auto res = m_mcTruthClassifier->particleTruthClassifier(truth);
804 truth->index() == promptElectronTruthIndex) {
805 toFill = true;
806 elTruth = truth;
807 } else {
808 const xAOD::TruthParticle *firstElTruth =
810 if (!firstElTruth) continue;
811 if (firstElTruth->index() == promptElectronTruthIndex) {
812 toFill = true;
813 elTruth = firstElTruth;
814 }
815 }
816 if (toFill) {
817 if (foundPromptElectron) {
818 ATH_MSG_DEBUG("A fwd electron also reconstructed as central "
819 "true eta = "
820 << elTruth->eta()
821 << " event = " << eventInfo->eventNumber());
822 m_CenFwdOverlap[0]++;
823 if (el->nTrackParticles() > 0)
824 m_CenFwdOverlap[1]++;
825 } else {
826 foundPromptElectron = true;
827 truthPromptElectronWithReco->fill(elTruth, el);
828 if (el->nTrackParticles() > 0)
829 truthPromptElectronWithRecoTrack->fill(elTruth, el);
830 if (m_Loose_FwdEle->accept(el))
831 truthRecoElectronLoose->fill(elTruth, el);
832 if (m_Medium_FwdEle->accept(el))
833 truthRecoElectronMedium->fill(elTruth, el);
834 if (m_Tight_FwdEle->accept(el))
835 truthRecoElectronTight->fill(elTruth, el);
836 }
837 }
838 } // loop on fwdEl
839 }
840
841 } // if electron
842
843 if ("gamma" == m_sampleType) {
844
845 ATH_MSG_DEBUG("------------ Photons ---------------");
847
848 for (const auto *phrec : *RecoPh) {
849
850 if (!phrec)
851 continue;
852
853 recoPhotonAll->fill(*phrec);
854 isolationAll->fill(*phrec);
855 showerShapesAll->fill(*phrec);
856 clusterAll->fill(*phrec, mu);
857 if (phrec->pt() > 10 * Gaudi::Units::GeV) {
858 cluster10GeV->fill(*phrec, mu);
859 showerShapes10GeV->fill(*phrec);
860 }
861
862 } // RecoPh Loop
863
864 for (const auto *egtruth : *egTruthParticles) {
865
866 if (!egtruth)
867 continue;
868
869 truthPhotonAll->fill(*egtruth, mu);
870
871 bool isTrueConv = xAOD::EgammaHelpers::isTrueConvertedPhoton(egtruth);
872 bool isTrueLateConv =
874 !isTrueConv;
875 const xAOD::Photon *photon = xAOD::EgammaHelpers::getRecoPhoton(egtruth);
876 const xAOD::Electron *electron =
878
879 if (isTrueConv)
880 truthPhotonAllConv->fill(*egtruth, mu);
881 if (isTrueLateConv)
882 truthPhotonAllLateConv->fill(*egtruth, mu);
883 if (!isTrueConv && !isTrueLateConv)
884 truthPhotonAllUnconv->fill(*egtruth, mu);
885
886 if (photon || electron)
887 truthPhotonRecoPhotonOrElectron->fill(*egtruth, mu);
888
889 if (!photon)
890 continue;
891
892 truthPhotonRecoPhoton->fill(*egtruth, mu);
893 clusterPromptAll->fill(*photon, mu);
894 if (egtruth->pt() > 10 * Gaudi::Units::GeV) {
895 clusterPrompt10GeV->fill(*photon, mu);
896 }
897
898 bool isRecoConv = xAOD::EgammaHelpers::isConvertedPhoton(photon);
901
902 if (isTrueConv) {
903
904 truthPhotonConvPhoton->fill(*egtruth, mu);
905
906 if (isRecoConv) {
907
908 truthPhotonConvRecoConv->fill(*egtruth, mu);
909
910 clusterConvPhoton->fill(*photon, mu);
911
912 if (convType == xAOD::EgammaParameters::singleSi) {
913 truthPhotonConvRecoConv1Si->fill(*egtruth, mu);
914 clusterConvPhotonSi->fill(*photon, mu);
915 } else if (convType == xAOD::EgammaParameters::singleTRT) {
916 truthPhotonConvRecoConv1TRT->fill(*egtruth, mu);
917 clusterConvPhotonTRT->fill(*photon, mu);
918 } else if (convType == xAOD::EgammaParameters::doubleSi) {
919 truthPhotonConvRecoConv2Si->fill(*egtruth, mu);
920 clusterConvPhotonSiSi->fill(*photon, mu);
921 } else if (convType == xAOD::EgammaParameters::doubleTRT) {
922 truthPhotonConvRecoConv2TRT->fill(*egtruth, mu);
923 clusterConvPhotonTRTTRT->fill(*photon, mu);
924 } else if (convType == xAOD::EgammaParameters::doubleSiTRT) {
925 truthPhotonConvRecoConv2SiTRT->fill(*egtruth, mu);
926 clusterConvPhotonSiTRT->fill(*photon, mu);
927 }
928
929 if (m_IsoFixedCutTight->accept(*photon))
930 recoPhotonConvIsoFixedCutTight->fill(*egtruth, mu);
931 if (m_IsoFixedCutTightCaloOnly->accept(*photon))
932 recoPhotonConvIsoFixedCutTightCaloOnly->fill(*egtruth, mu);
933 if (m_IsoFixedCutLoose->accept(*photon))
934 recoPhotonConvIsoFixedCutLoose->fill(*egtruth, mu);
935 if (m_Loose_Photon->accept(photon))
936 recoPhotonConvLoose->fill(*egtruth, mu);
937 if (m_Tight_Photon->accept(photon))
938 recoPhotonConvTight->fill(*egtruth, mu);
939 } // isRecoConv
940 else {
941 truthPhotonConvRecoUnconv->fill(*egtruth, mu);
942 clusterUnconvPhoton->fill(*photon, mu);
943 }
944
945 } // isTrueConv
946 // else if (!isTrueLateConv) {
947 else {
948
949 truthPhotonUnconvPhoton->fill(*egtruth, mu);
950
951 if (isRecoConv) {
952 truthPhotonUnconvRecoConv->fill(*egtruth, mu);
953
954 if (convType == xAOD::EgammaParameters::singleSi) {
955 truthPhotonUnconvRecoConv1Si->fill(*egtruth, mu);
956 clusterConvPhotonSi->fill(*photon, mu);
957 } else if (convType == xAOD::EgammaParameters::singleTRT) {
958 truthPhotonUnconvRecoConv1TRT->fill(*egtruth, mu);
959 clusterConvPhotonTRT->fill(*photon, mu);
960 } else if (convType == xAOD::EgammaParameters::doubleSi) {
961 truthPhotonUnconvRecoConv2Si->fill(*egtruth, mu);
962 clusterConvPhotonSiSi->fill(*photon, mu);
963 } else if (convType == xAOD::EgammaParameters::doubleTRT) {
964 truthPhotonUnconvRecoConv2TRT->fill(*egtruth, mu);
965 clusterConvPhotonTRTTRT->fill(*photon, mu);
966 } else if (convType == xAOD::EgammaParameters::doubleSiTRT) {
967 truthPhotonUnconvRecoConv2SiTRT->fill(*egtruth, mu);
968 clusterConvPhotonSiTRT->fill(*photon, mu);
969 }
970 } else
971 truthPhotonUnconvRecoUnconv->fill(*egtruth, mu);
973
974 if (m_IsoFixedCutTight->accept(*photon))
975 recoPhotonUnconvIsoFixedCutTight->fill(*egtruth, mu);
976 if (m_IsoFixedCutTightCaloOnly->accept(*photon))
978 if (m_IsoFixedCutLoose->accept(*photon))
979 recoPhotonUnconvIsoFixedCutLoose->fill(*egtruth, mu);
980 if (m_Loose_Photon->accept(photon))
981 recoPhotonUnconvLoose->fill(*egtruth, mu);
982 if (m_Tight_Photon->accept(photon))
983 recoPhotonUnconvTight->fill(*egtruth, mu);
984 } // !isTrueLateConv
985 } // egtruth Loop
986
987 // loop over InDetTrackParticles
988 for (const auto *tp : *InDetTPs) {
989
990 mapTrkHistograms["InDetTracks"]->fill(*tp, mu);
991 if (matchedToElectron(*tp))
992 mapTrkHistograms["InDetTracksMatchElectron"]->fill(*tp, mu);
993 else {
994 mapTrkHistograms["InDetTracksNotElectron"]->fill(*tp, mu);
995 if (matchedToPion(*tp))
996 mapTrkHistograms["InDetTracksMatchPion"]->fill(*tp, mu);
997 else if (notMatchedToTruth(*tp))
998 mapTrkHistograms["InDetTracksNotMatched"]->fill(*tp, mu);
999 }
1000 if (tp->pt() > 3000.) {
1001 mapTrkHistograms["InDetTrackshighpT"]->fill(*tp, mu);
1002 if (matchedToElectron(*tp)) {
1003 mapTrkHistograms["InDetTracksMatchElectronhighpT"]->fill(*tp, mu);
1004 } else {
1005 mapTrkHistograms["InDetTracksNotElectronhighpT"]->fill(*tp, mu);
1006 if (matchedToPion(*tp)) {
1007 mapTrkHistograms["InDetTracksMatchPionhighpT"]->fill(*tp, mu);
1008 } else if (notMatchedToTruth(*tp)) {
1009 mapTrkHistograms["InDetTracksNotMatchedhighpT"]->fill(*tp, mu);
1010 }
1011 }
1012 }
1013
1014 if (m_hasTRT &&
1015 xAOD::EgammaHelpers::numberOfSiHits(tp) == 0) { // TRTSA tracks
1016 mapTrkHistograms["InDetTracksTRT"]->fill(*tp, mu);
1017 if (matchedToElectron(*tp))
1018 mapTrkHistograms["InDetTracksTRTMatchElectron"]->fill(*tp, mu);
1019 else {
1020 mapTrkHistograms["InDetTracksTRTNotElectron"]->fill(*tp, mu);
1021 if (matchedToPion(*tp))
1022 mapTrkHistograms["InDetTracksTRTMatchPion"]->fill(*tp, mu);
1023 else if (notMatchedToTruth(*tp))
1024 mapTrkHistograms["InDetTracksTRTNotMatched"]->fill(*tp, mu);
1025 }
1026 if (tp->pt() > 3000.) {
1027 mapTrkHistograms["InDetTracksTRThighpT"]->fill(*tp, mu);
1028 if (matchedToElectron(*tp))
1029 mapTrkHistograms["InDetTracksTRTMatchElectronhighpT"]->fill(*tp,
1030 mu);
1031 else {
1032 mapTrkHistograms["InDetTracksTRTNotElectronhighpT"]->fill(*tp, mu);
1033 if (matchedToPion(*tp))
1034 mapTrkHistograms["InDetTracksTRTMatchPionhighpT"]->fill(*tp, mu);
1035 else if (notMatchedToTruth(*tp))
1036 mapTrkHistograms["InDetTracksTRTNotMatchedhighpT"]->fill(*tp, mu);
1037 }
1038 }
1039 }
1040
1041 } // loop over InDetTPs
1042
1043 } // if gamma
1044
1045 return StatusCode::SUCCESS;
1046}
1047
1048// ******
1049
1051
1052 if ("electron" == m_sampleType) {
1053
1054 ATH_MSG_INFO("Number of events with electron reconstructed "
1055 "as both Central and Forward "
1056 << m_CenFwdOverlap[0] << " and with a track for the Forward "
1057 << m_CenFwdOverlap[1]);
1058
1059 egammaMonitoring::EfficiencyPlot trackEfficiency(
1060 "trackingEfficiency", "/MONITORING/trackingEfficiency/", rootHistSvc);
1061 ATH_CHECK(trackEfficiency.divide(truthPromptElectronWithTrack.get(),
1062 truthPromptElectronAll.get()));
1064 "GSFEfficiency", "/MONITORING/GSFEfficiency/", rootHistSvc);
1067 egammaMonitoring::EfficiencyPlot matchingEfficiency(
1068 "matchingEfficiency", "/MONITORING/matchingEfficiency/", rootHistSvc);
1069 ATH_CHECK(matchingEfficiency.divide(truthPromptElectronWithRecoTrack.get(),
1071 egammaMonitoring::EfficiencyPlot reconstructionEfficiency(
1072 "reconstructionEfficiency", "/MONITORING/reconstructionEfficiency/",
1073 rootHistSvc);
1074 ATH_CHECK(reconstructionEfficiency.divide(truthPromptElectronWithReco.get(),
1075 truthPromptElectronAll.get()));
1076 egammaMonitoring::EfficiencyPlot recoElectronLooseEfficiency(
1077 "recoElectronLooseLHEfficiency",
1078 "/MONITORING/recoElectronLooseLHEfficiency/", rootHistSvc);
1079 ATH_CHECK(recoElectronLooseEfficiency.divide(truthRecoElectronLoose.get(),
1080 truthPromptElectronAll.get()));
1081 egammaMonitoring::EfficiencyPlot recoElectronMediumEfficiency(
1082 "recoElectronMediumLHEfficiency",
1083 "/MONITORING/recoElectronMediumLHEfficiency/", rootHistSvc);
1084 ATH_CHECK(recoElectronMediumEfficiency.divide(
1086 egammaMonitoring::EfficiencyPlot recoElectronTightEfficiency(
1087 "recoElectronTightLHEfficiency",
1088 "/MONITORING/recoElectronTightLHEfficiency/", rootHistSvc);
1089 ATH_CHECK(recoElectronTightEfficiency.divide(truthRecoElectronTight.get(),
1090 truthPromptElectronAll.get()));
1091
1092 }
1093
1094 else if ("gamma" == m_sampleType) {
1095
1096 egammaMonitoring::EfficiencyPlot truthPhotonRecoPhotonEfficiency(
1097 "truthPhotonRecoPhotonEfficiency",
1098 "/MONITORING/truthPhotonRecoPhotonEfficiency/", rootHistSvc);
1099 ATH_CHECK(truthPhotonRecoPhotonEfficiency.divide(
1101 egammaMonitoring::EfficiencyPlot truthPhotonRecoPhotonOrElectronEfficiency(
1102 "truthPhotonRecoPhotonOrElectronEfficiency",
1103 "/MONITORING/truthPhotonRecoPhotonOrElectronEfficiency/", rootHistSvc);
1104 ATH_CHECK(truthPhotonRecoPhotonOrElectronEfficiency.divide(
1106 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoEfficiency(
1107 "truthPhotonConvRecoEfficiency",
1108 "/MONITORING/truthPhotonConvRecoEfficiency/", rootHistSvc);
1109 ATH_CHECK(truthPhotonConvRecoEfficiency.divide(truthPhotonConvPhoton.get(),
1110 truthPhotonAllConv.get()));
1111 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoEfficiency(
1112 "truthPhotonUnconvRecoEfficiency",
1113 "/MONITORING/truthPhotonUnconvRecoEfficiency/", rootHistSvc);
1114 ATH_CHECK(truthPhotonUnconvRecoEfficiency.divide(
1116 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConvEfficiency(
1117 "truthPhotonConvRecoConvEfficiency",
1118 "/MONITORING/truthPhotonConvRecoConvEfficiency/", rootHistSvc);
1119 ATH_CHECK(truthPhotonConvRecoConvEfficiency.divide(
1121 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv1SiEfficiency(
1122 "truthPhotonConvRecoConv1SiEfficiency",
1123 "/MONITORING/truthPhotonConvRecoConv1SiEfficiency/", rootHistSvc);
1124 ATH_CHECK(truthPhotonConvRecoConv1SiEfficiency.divide(
1126 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv2SiEfficiency(
1127 "truthPhotonConvRecoConv2SiEfficiency",
1128 "/MONITORING/truthPhotonConvRecoConv2SiEfficiency/", rootHistSvc);
1129 ATH_CHECK(truthPhotonConvRecoConv2SiEfficiency.divide(
1131 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoUnconvEfficiency(
1132 "truthPhotonConvRecoUnconvEfficiency",
1133 "/MONITORING/truthPhotonConvRecoUnconvEfficiency/", rootHistSvc);
1134 ATH_CHECK(truthPhotonConvRecoUnconvEfficiency.divide(
1136 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConvEfficiency(
1137 "truthPhotonUnconvRecoConvEfficiency",
1138 "/MONITORING/truthPhotonUnconvRecoConvEfficiency/", rootHistSvc);
1139 ATH_CHECK(truthPhotonUnconvRecoConvEfficiency.divide(
1141 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConv1SiEfficiency(
1142 "truthPhotonUnconvRecoConv1SiEfficiency",
1143 "/MONITORING/truthPhotonUnconvRecoConv1SiEfficiency/", rootHistSvc);
1144 ATH_CHECK(truthPhotonUnconvRecoConv1SiEfficiency.divide(
1146 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConv2SiEfficiency(
1147 "truthPhotonUnconvRecoConv2SiEfficiency",
1148 "/MONITORING/truthPhotonUnconvRecoConv2SiEfficiency/", rootHistSvc);
1149 ATH_CHECK(truthPhotonUnconvRecoConv2SiEfficiency.divide(
1151 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoUnconvEfficiency(
1152 "truthPhotonUnconvRecoUnconvEfficiency",
1153 "/MONITORING/truthPhotonUnconvRecoUnconvEfficiency/", rootHistSvc);
1154 ATH_CHECK(truthPhotonUnconvRecoUnconvEfficiency.divide(
1156 egammaMonitoring::EfficiencyPlot truthPhotonRecoConvEfficiency(
1157 "truthPhotonRecoConvEfficiency",
1158 "/MONITORING/truthPhotonRecoConvEfficiency/", rootHistSvc);
1159 ATH_CHECK(truthPhotonRecoConvEfficiency.divide(
1161 egammaMonitoring::EfficiencyPlot truthPhotonRecoUnconvEfficiency(
1162 "truthPhotonRecoUnconvEfficiency",
1163 "/MONITORING/truthPhotonRecoUnconvEfficiency/", rootHistSvc);
1164 ATH_CHECK(truthPhotonRecoUnconvEfficiency.divide(
1166 egammaMonitoring::EfficiencyPlot recoPhotonUnconvIsoFixedCutTightEfficiency(
1167 "recoPhotonUnconvIsoFixedCutTightEfficiency",
1168 "/MONITORING/recoPhotonUnconvIsoFixedCutTightEfficiency/", rootHistSvc);
1169 ATH_CHECK(recoPhotonUnconvIsoFixedCutTightEfficiency.divide(
1173 recoPhotonUnconvIsoFixedCutTightCaloOnlyEfficiency(
1174 "recoPhotonUnconvIsoFixedCutTightCaloOnlyEfficiency",
1175 "/MONITORING/recoPhotonUnconvIsoFixedCutTightCaloOnlyEfficiency/",
1176 rootHistSvc);
1177 ATH_CHECK(recoPhotonUnconvIsoFixedCutTightCaloOnlyEfficiency.divide(
1180 egammaMonitoring::EfficiencyPlot recoPhotonUnconvIsoFixedCutLooseEfficiency(
1181 "recoPhotonUnconvIsoFixedCutLooseEfficiency",
1182 "/MONITORING/recoPhotonUnconvIsoFixedCutLooseEfficiency/", rootHistSvc);
1183 ATH_CHECK(recoPhotonUnconvIsoFixedCutLooseEfficiency.divide(
1186 egammaMonitoring::EfficiencyPlot recoPhotonConvIsoFixedCutTightEfficiency(
1187 "recoPhotonConvIsoFixedCutTightEfficiency",
1188 "/MONITORING/recoPhotonConvIsoFixedCutTightEfficiency/", rootHistSvc);
1189 ATH_CHECK(recoPhotonConvIsoFixedCutTightEfficiency.divide(
1192 recoPhotonConvIsoFixedCutTightCaloOnlyEfficiency(
1193 "recoPhotonConvIsoFixedCutTightCaloOnlyEfficiency",
1194 "/MONITORING/recoPhotonConvIsoFixedCutTightCaloOnlyEfficiency/",
1195 rootHistSvc);
1196 ATH_CHECK(recoPhotonConvIsoFixedCutTightCaloOnlyEfficiency.divide(
1199 egammaMonitoring::EfficiencyPlot recoPhotonConvIsoFixedCutLooseEfficiency(
1200 "recoPhotonConvIsoFixedCutLooseEfficiency",
1201 "/MONITORING/recoPhotonConvIsoFixedCutLooseEfficiency/", rootHistSvc);
1202 ATH_CHECK(recoPhotonConvIsoFixedCutLooseEfficiency.divide(
1204 egammaMonitoring::EfficiencyPlot recoPhotonConvLooseEfficiency(
1205 "recoPhotonConvLooseEfficiency",
1206 "/MONITORING/recoPhotonConvLooseEfficiency/", rootHistSvc);
1207 ATH_CHECK(recoPhotonConvLooseEfficiency.divide(
1209 egammaMonitoring::EfficiencyPlot recoPhotonConvTightEfficiency(
1210 "recoPhotonConvTightEfficiency",
1211 "/MONITORING/recoPhotonConvTightEfficiency/", rootHistSvc);
1212 ATH_CHECK(recoPhotonConvTightEfficiency.divide(
1214 egammaMonitoring::EfficiencyPlot recoPhotonUnconvLooseEfficiency(
1215 "recoPhotonUnconvLooseEfficiency",
1216 "/MONITORING/recoPhotonUnconvLooseEfficiency/", rootHistSvc);
1217 ATH_CHECK(recoPhotonUnconvLooseEfficiency.divide(
1219 egammaMonitoring::EfficiencyPlot recoPhotonUnconvTightEfficiency(
1220 "recoPhotonUnconvTightEfficiency",
1221 "/MONITORING/recoPhotonUnconvTightEfficiency/", rootHistSvc);
1222 ATH_CHECK(recoPhotonUnconvTightEfficiency.divide(
1224
1225 egammaMonitoring::WidthPlot truthPhotonRecoPhotonWidth(
1226 "truthPhotonRecoPhotonWidth", "/MONITORING/truthPhotonRecoPhotonWidth/",
1227 rootHistSvc);
1228 ATH_CHECK(truthPhotonRecoPhotonWidth.fill(truthPhotonRecoPhoton.get()));
1229 egammaMonitoring::WidthPlot truthPhotonConvPhotonWidth(
1230 "truthPhotonConvPhotonWidth", "/MONITORING/truthPhotonConvPhotonWidth/",
1231 rootHistSvc);
1232 ATH_CHECK(truthPhotonConvPhotonWidth.fill(truthPhotonConvPhoton.get()));
1233 egammaMonitoring::WidthPlot truthPhotonConvRecoConvWidth(
1234 "truthPhotonConvRecoConvWidth",
1235 "/MONITORING/truthPhotonConvRecoConvWidth/", rootHistSvc);
1236 ATH_CHECK(truthPhotonConvRecoConvWidth.fill(truthPhotonConvRecoConv.get()));
1237 egammaMonitoring::WidthPlot truthPhotonConvRecoConv1SiWidth(
1238 "truthPhotonConvRecoConv1SiWidth",
1239 "/MONITORING/truthPhotonConvRecoConv1SiWidth/", rootHistSvc);
1240 ATH_CHECK(
1241 truthPhotonConvRecoConv1SiWidth.fill(truthPhotonConvRecoConv1Si.get()));
1242 egammaMonitoring::WidthPlot truthPhotonConvRecoConv2SiWidth(
1243 "truthPhotonConvRecoConv2SiWidth",
1244 "/MONITORING/truthPhotonConvRecoConv2SiWidth/", rootHistSvc);
1245 ATH_CHECK(
1246 truthPhotonConvRecoConv2SiWidth.fill(truthPhotonConvRecoConv2Si.get()));
1247 if (m_hasTRT) {
1248 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv1TRTEfficiency(
1249 "truthPhotonConvRecoConv1TRTEfficiency",
1250 "/MONITORING/truthPhotonConvRecoConv1TRTEfficiency/", rootHistSvc);
1251 ATH_CHECK(truthPhotonConvRecoConv1TRTEfficiency.divide(
1253 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv2TRTEfficiency(
1254 "truthPhotonConvRecoConv2TRTEfficiency",
1255 "/MONITORING/truthPhotonConvRecoConv2TRTEfficiency/", rootHistSvc);
1256 ATH_CHECK(truthPhotonConvRecoConv2TRTEfficiency.divide(
1258 egammaMonitoring::EfficiencyPlot truthPhotonConvRecoConv2SiTRTEfficiency(
1259 "truthPhotonConvRecoConv2SiTRTEfficiency",
1260 "/MONITORING/truthPhotonConvRecoConv2SiTRTEfficiency/", rootHistSvc);
1261 ATH_CHECK(truthPhotonConvRecoConv2SiTRTEfficiency.divide(
1263 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConv1TRTEfficiency(
1264 "truthPhotonUnconvRecoConv1TRTEfficiency",
1265 "/MONITORING/truthPhotonUnconvRecoConv1TRTEfficiency/", rootHistSvc);
1266 ATH_CHECK(truthPhotonUnconvRecoConv1TRTEfficiency.divide(
1268 egammaMonitoring::EfficiencyPlot truthPhotonUnconvRecoConv2TRTEfficiency(
1269 "truthPhotonUnconvRecoConv2TRTEfficiency",
1270 "/MONITORING/truthPhotonUnconvRecoConv2TRTEfficiency/", rootHistSvc);
1271 ATH_CHECK(truthPhotonUnconvRecoConv2TRTEfficiency.divide(
1274 truthPhotonUnconvRecoConv2SiTRTEfficiency(
1275 "truthPhotonUnconvRecoConv2SiTRTEfficiency",
1276 "/MONITORING/truthPhotonUnconvRecoConv2SiTRTEfficiency/",
1277 rootHistSvc);
1278 ATH_CHECK(truthPhotonUnconvRecoConv2SiTRTEfficiency.divide(
1281 egammaMonitoring::WidthPlot truthPhotonConvRecoConv1TRTWidth(
1282 "truthPhotonConvRecoConv1TRTWidth",
1283 "/MONITORING/truthPhotonConvRecoConv1TRTWidth/", rootHistSvc);
1284 ATH_CHECK(truthPhotonConvRecoConv1TRTWidth.fill(
1286 egammaMonitoring::WidthPlot truthPhotonConvRecoConv2TRTWidth(
1287 "truthPhotonConvRecoConv2TRTWidth",
1288 "/MONITORING/truthPhotonConvRecoConv2TRTWidth/", rootHistSvc);
1289 ATH_CHECK(truthPhotonConvRecoConv2TRTWidth.fill(
1291 egammaMonitoring::WidthPlot truthPhotonConvRecoConv2SiTRTWidth(
1292 "truthPhotonConvRecoConv2SiTRTWidth",
1293 "/MONITORING/truthPhotonConvRecoConv2SiTRTWidth/", rootHistSvc);
1294 ATH_CHECK(truthPhotonConvRecoConv2SiTRTWidth.fill(
1296 }
1297 egammaMonitoring::WidthPlot truthPhotonConvRecoUnconvWidth(
1298 "truthPhotonConvRecoUnconvWidth",
1299 "/MONITORING/truthPhotonConvRecoUnconvWidth/", rootHistSvc);
1300 ATH_CHECK(
1301 truthPhotonConvRecoUnconvWidth.fill(truthPhotonConvRecoUnconv.get()));
1302 egammaMonitoring::WidthPlot truthPhotonUnconvPhotonWidth(
1303 "truthPhotonUnconvPhotonWidth",
1304 "/MONITORING/truthPhotonUnconvPhotonWidth/", rootHistSvc);
1305 ATH_CHECK(truthPhotonUnconvPhotonWidth.fill(truthPhotonUnconvPhoton.get()));
1306 egammaMonitoring::WidthPlot truthPhotonUnconvRecoConvWidth(
1307 "truthPhotonUnconvRecoConvWidth",
1308 "/MONITORING/truthPhotonUnconvRecoConvWidth/", rootHistSvc);
1309 ATH_CHECK(
1310 truthPhotonUnconvRecoConvWidth.fill(truthPhotonUnconvRecoConv.get()));
1311 egammaMonitoring::WidthPlot truthPhotonUnconvRecoUnconvWidth(
1312 "truthPhotonUnconvRecoUnconvWidth",
1313 "/MONITORING/truthPhotonUnconvRecoUnconvWidth/", rootHistSvc);
1314 ATH_CHECK(truthPhotonUnconvRecoUnconvWidth.fill(
1316 } else if ("dataZ" == m_sampleType) {
1318 }
1319
1320 return StatusCode::SUCCESS;
1321}
1322
1325 return truth && abs(truth->pdgId()) == 11;
1326}
1327
1330 return truth && abs(truth->pdgId()) == 211;
1331}
1332
1337
1338StatusCode EgammaMonitoring::ZeeSelection(float mu, const EventContext &ctx) {
1341 ctx);
1342
1343 const xAOD::Electron *e1 = nullptr, *e2 = nullptr;
1344 double pTL = -9e9, pTSL = -9e9;
1345 for (const auto *el : *RecoEl) {
1346 double pt = el->pt();
1347 if (pt < 15e3)
1348 continue;
1349 if (pt > pTL) {
1350 e2 = e1;
1351 pTSL = pTL;
1352 e1 = el;
1353 pTL = pt;
1354 } else if (pt > pTSL) {
1355 e2 = el;
1356 pTSL = pt;
1357 }
1358 }
1359
1360 if (!e2)
1361 return StatusCode::SUCCESS;
1362
1363 m_diElectron->fill(*e1, *e2, mu);
1364
1365 m_clusterReco->fill(*e1);
1366 m_clusterReco->fill(*e2);
1367 recoElectronAll->fill(*e1);
1368 recoElectronAll->fill(*e2);
1369
1370 showerShapesAll->fill(*e1);
1371 showerShapesAll->fill(*e2);
1372 if (e1->pt() > 10 * Gaudi::Units::GeV)
1373 showerShapes10GeV->fill(*e1);
1374 if (e2->pt() > 10 * Gaudi::Units::GeV)
1375 showerShapes10GeV->fill(*e2);
1376 isolationAll->fill(*e1);
1377 isolationAll->fill(*e2);
1378
1379 return StatusCode::SUCCESS;
1380}
1381
1383
1384 TH1D *hRef = (TH1D *)m_diElectron->histoMap["mass"];
1385 double xmi = 66, xma = 116, eps = 0.01;
1386 int ib1 = hRef->FindBin(xmi + eps);
1387 int ib2 = hRef->FindBin(xma - eps);
1388 TH1D *hmee = new TH1D("mee", ";m_{ee} [GeV];Events / 0.5 GeV", ib2 - ib1 + 1,
1389 xmi, xma);
1390 for (int ib = ib1; ib <= ib2; ib++) {
1391 double c = hRef->GetBinContent(ib);
1392 double ec = hRef->GetBinError(ib);
1393 hmee->SetBinContent(ib - ib1 + 1, c);
1394 hmee->SetBinError(ib - ib1 + 1, ec);
1395 }
1396 ATH_CHECK(rootHistSvc->regHist("/MONITORING/Data/mee", hmee));
1397
1398 TString vsX[3] = {"Et", "Etetale0p8", "Eta"};
1399 TString coo[3] = {"x", "x", "y"};
1400 for (int iL = 0; iL < 5; iL++) {
1401 TH3D *nRef;
1402 if (iL < 4)
1403 nRef = m_clusterReco->m_histo3DMap[Form("hNcellsvseteta_Lr%i", iL)];
1404 else
1405 nRef = recoElectronAll->histo3DMap["eteta_eop"];
1406 for (int iX = 0; iX < 3; iX++) {
1407 if (iL == 4 && iX == 2)
1408 continue;
1409 // nCells vs eta
1410 if (iX == 1) {
1411 int ieta08 = nRef->GetYaxis()->FindBin(0.79);
1412 nRef->GetYaxis()->SetRange(1, ieta08);
1413 } else if (iX == 2) {
1414 nRef->GetYaxis()->SetRange(1, 25);
1415 }
1416 TH2D *nRefvsX = (TH2D *)nRef->Project3D(Form("z%s", coo[iX].Data()));
1417 TString pN;
1418 if (iL < 4)
1419 pN = Form("pn%ivs%s", iL, vsX[iX].Data());
1420 else
1421 pN = Form("pEopvs%s", vsX[iX].Data());
1422 TProfile *pRefvsX = nRefvsX->ProfileX(pN.Data());
1423 pRefvsX->SetTitle(pN.Data());
1424 pRefvsX->GetXaxis()->SetTitle(iX < 2 ? "E_{T} [GeV]" : "|#eta|");
1425 pRefvsX->GetYaxis()->SetTitle(iL < 4 ? Form("nCells_Lr%i", iL) : "E/p");
1426 ATH_CHECK(rootHistSvc->regHist(
1427 Form("/MONITORING/Data/%s", pRefvsX->GetName()), pRefvsX));
1428 delete nRefvsX;
1429 }
1430 }
1431 return StatusCode::SUCCESS;
1432}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
@ Data
Definition BaseObject.h:11
ATLAS-specific HepMC functions.
std::pair< std::vector< unsigned int >, bool > res
size_t size() const
Number of registered mappings.
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
bool msgLvl(const MSG::Level lvl) const
SG::ReadHandleKey< xAOD::ElectronContainer > m_ElectronsKey
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv1Si
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv2SiTRT
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv
EgammaMonitoring(const std::string &name, ISvcLocator *pSvcLocator)
std::map< std::string, std::unique_ptr< egammaMonitoring::TrackHistograms > > mapTrkHistograms
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonRecoPhotonOrElectron
Gaudi::Property< bool > m_hasTRT
is it run 3 or run 4 and later ?
std::unique_ptr< egammaMonitoring::RecoElectronHistograms > recoElectronAll
ToolHandle< CP::IIsolationSelectionTool > m_IsoFixedCutTightCaloOnly
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvIsoFixedCutTightCaloOnly
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonAllConv
virtual StatusCode finalize()
std::unique_ptr< egammaMonitoring::IsolationHistograms > isolationAll
ToolHandle< IAsgPhotonIsEMSelector > m_Tight_Photon
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvPhoton
ToolHandle< IAsgElectronLikelihoodTool > m_Tight_Ele
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonTRTTRT
std::unique_ptr< egammaMonitoring::ShowerShapesHistograms > showerShapesAll
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_egTruthParticlesKey
static bool notMatchedToTruth(const xAOD::TrackParticle &tp)
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvLoose
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvTight
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticlesKey
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonSiTRT
ToolHandle< IAsgPhotonIsEMSelector > m_Loose_Photon
StatusCode ZeeSelection(float mu, const EventContext &ctx)
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvLoose
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv2SiTRT
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoUnconv
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_GSFTrackParticlesKey
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvIsoFixedCutTight
virtual StatusCode initialize()
SG::ReadHandleKey< xAOD::ElectronContainer > m_FwdElectronsKey
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonSiSi
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthRecoElectronLoose
static bool matchedToPion(const xAOD::TrackParticle &tp)
std::unique_ptr< egammaMonitoring::DiObjectHistograms > m_diElectron
ToolHandle< IAsgElectronLikelihoodTool > m_Medium_Ele
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronWithGSFTrack
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvIsoFixedCutTightCaloOnly
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvTight
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterPrompt10GeV
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv1TRT
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvPhoton
ToolHandle< IAsgElectronLikelihoodTool > m_Medium_FwdEle
static bool matchedToElectron(const xAOD::TrackParticle &tp)
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonUnconvIsoFixedCutLoose
std::unique_ptr< egammaMonitoring::RecoPhotonHistograms > recoPhotonAll
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronWithRecoTrack
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonTRT
std::unique_ptr< egammaMonitoring::ShowerShapesHistograms > showerShapes10GeV
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronWithTrack
SmartIF< ITHistSvc > rootHistSvc
Tools and services ///.
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterPromptAll
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterAll
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhoton
ToolHandle< IAsgElectronLikelihoodTool > m_Loose_Ele
Selector tools.
ToolHandle< IAsgElectronLikelihoodTool > m_Tight_FwdEle
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv2Si
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvIsoFixedCutLoose
ToolHandle< CP::IIsolationSelectionTool > m_IsoFixedCutTight
ToolHandle< CP::IIsolationSelectionTool > m_IsoFixedCutLoose
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthElectronAll
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonAll
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthElectronRecoElectronAll
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
ToolHandle< IMCTruthClassifier > m_mcTruthClassifier
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthRecoElectronMedium
SG::ReadHandleKey< xAOD::PhotonContainer > m_PhotonsKey
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonRecoPhoton
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonAllLateConv
virtual StatusCode execute(const EventContext &ctx)
Execute method.
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv1Si
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterUnconvPhoton
std::unique_ptr< egammaMonitoring::RecoClusterHistograms > m_clusterReco
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronAll
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv2Si
Gaudi::Property< std::string > m_sampleType
Sample name ///.
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_InDetTrackParticlesKey
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonAllUnconv
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv2TRT
std::unique_ptr< egammaMonitoring::IHistograms > recoPhotonConvIsoFixedCutTight
ToolHandle< IAsgElectronLikelihoodTool > m_Loose_FwdEle
std::unique_ptr< egammaMonitoring::ClusterHistograms > cluster10GeV
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthPromptElectronWithReco
std::unique_ptr< egammaMonitoring::TruthElectronHistograms > truthRecoElectronTight
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoUnconv
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonUnconvRecoConv1TRT
std::unique_ptr< egammaMonitoring::ClusterHistograms > clusterConvPhotonSi
std::unique_ptr< egammaMonitoring::IHistograms > truthPhotonConvRecoConv2TRT
StatusCode divide(IHistograms *pass, IHistograms *total)
StatusCode fill(IHistograms *input)
Definition WidthPlot.cxx:24
int pdgId() const
PDG ID code.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
float perp() const
Vertex transverse distance from the beam line.
bool isGenStable(const T &p)
Determine if the particle is stable at the generator (not det-sim) level,.
bool isConvertedPhoton(const xAOD::Egamma *eg, bool excludeTRT=false)
is the object a converted photon
xAOD::EgammaParameters::ConversionType conversionType(const xAOD::Photon *ph)
return the photon conversion type (see EgammaEnums)
bool isTrueConvertedPhoton(const xAOD::Photon *ph, float maxRadius=800.)
is the object matched to a true converted photon with R < maxRadius
const xAOD::TruthParticle * getBkgElectronMother(const xAOD::Electron *el, const bool allTheWayBack=true)
Helper wrapper function for calling the function above extracting the truth from a reco electron.
const xAOD::Photon * getRecoPhoton(const xAOD::TruthParticle *particle)
return the reco photon associated to the given TruthParticle (if any)
std::size_t numberOfSiHits(const xAOD::TrackParticle *tp)
return the number of Si hits in the track particle
const xAOD::Electron * getRecoElectron(const xAOD::TruthParticle *)
return the reco electron associated to the given TruthParticle (if any)
@ singleSi
one track only, with Si hits
@ doubleTRT
two tracks, none with Si hits (TRT only)
@ singleTRT
one track only, no Si hits (TRT only)
@ doubleSi
two tracks, both with Si hits
@ doubleSiTRT
two tracks, only one with Si hits
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle &p)
Return the truthParticle associated to the given IParticle (if any).
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition TruthVertex.h:15
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TruthParticle_v1 TruthParticle
Typedef to implementation.
Photon_v1 Photon
Definition of the current "egamma version".
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Electron_v1 Electron
Definition of the current "egamma version".