ATLAS Offline Software
Loading...
Searching...
No Matches
HLTCalo_TopoCaloClustersMonitor.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
10
11struct clus_kin {
12 double et;
13 double eta;
14 double phi;
16};
17
18HLTCalo_TopoCaloClustersMonitor::HLTCalo_TopoCaloClustersMonitor( const std::string& name, ISvcLocator* pSvcLocator )
19 : AthMonitorAlgorithm(name,pSvcLocator)
20{
21 declareProperty("HLTContainer", m_HLT_cont_key = "HLT_TopoCaloClustersFS");
22 declareProperty("OFFContainer", m_OFF_cont_key = "CaloCalTopoClusters");
23 declareProperty("MonGroupName", m_mongroup_name = "TrigCaloMonitor");
24 declareProperty("HLTChainsT0", m_hltChainsT0 = "All");
25 declareProperty("HLTTypes", m_HLT_types);
26 declareProperty("OFFTypes", m_OFF_types);
27 declareProperty("HLThighET", m_HLT_high_et = 5000.0);
28 declareProperty("HLTMinET", m_HLT_min_et = -1.0);
29 declareProperty("OFFMinET", m_OFF_min_et = -1.0);
30 declareProperty("MatchType", m_match_types = false);
31 declareProperty("DoLC", m_doLC = false);
32 declareProperty("MaxDeltaR", m_max_delta_r = 0.04);
33}
34
35
37
38
40 ATH_CHECK(m_HLT_cont_key.initialize());
41 ATH_CHECK(m_OFF_cont_key.initialize());
42 ATH_CHECK( m_bunchCrossingKey.initialize());
43 ATH_CHECK( m_eventInfoDecorKey.initialize() );
44
46}
47
48
49StatusCode HLTCalo_TopoCaloClustersMonitor::fillHistograms( const EventContext& ctx ) const {
50 using namespace Monitored;
51
52 // Protect against noise bursts
54 ATH_CHECK(thisEvent.isValid());
55
56 if ( thisEvent->isEventFlagBitSet(xAOD::EventInfo::LAr,LArEventBitInfo::NOISEBURSTVETO))
57 return StatusCode::SUCCESS;
58
59 // Protect against HLT truncated results
60 if (m_trigDecTool->ExperimentalAndExpertMethods().isHLTTruncated()){
61 ATH_MSG_WARNING("HLTResult truncated, skipping event");
62 return StatusCode::SUCCESS;
63 }
64
65 // Get HLT cluster collections
67 if (! hltCluster_readHandle.isValid() ) {
68 ATH_MSG_ERROR("evtStore() does not contain a cluster Collection with key " << m_HLT_cont_key);
69 return StatusCode::FAILURE;
70 }
71
72 // Get OFF cluster collections
74 if (! offCluster_readHandle.isValid() ) {
75 ATH_MSG_ERROR("evtStore() does not contain a cluster Collection with key " << m_OFF_cont_key);
76 return StatusCode::FAILURE;
77 }
78
79 // Bunch crossing
80 int bcid = ctx.eventID().bunch_crossing_id();
81 auto HLT_bc = Monitored::Scalar<int>("HLT_bc",-1);
82
84 if (!bcidHdl.isValid()) {
85 ATH_MSG_ERROR( "Unable to retrieve BunchCrossing conditions object" );
86 return StatusCode::FAILURE;
87 }
88 const BunchCrossingCondData* bcData=*bcidHdl;
89
92 // Cache expensive et, eta and phi //
93 // calculations for the clusters //
95
96 // prepare HLT clusters
97 std::vector<clus_kin> vec_hlt_clusters;
98 std::vector<const xAOD::CaloCluster*> accepted_hlt_clusters = ifStepPassed(m_hltChainsT0);
99
100 // For monitoring signature specific clusters
101 if (accepted_hlt_clusters.size()>0){
102 for (const auto* hlt_cluster : accepted_hlt_clusters) {
103 auto hlt_clus_et = hlt_cluster->et();
104 if (hlt_clus_et < m_HLT_min_et) continue;
105
106 bool HLT_type_match = false;
107
108 for (unsigned int n = 0; n < m_HLT_types.size(); ++n) {
109 if (hlt_cluster->clusterSize() == m_HLT_types[n]) { HLT_type_match = true; break; }
110 }
111
112 if (!m_HLT_types.empty() && !HLT_type_match) continue;
113 vec_hlt_clusters.push_back({hlt_clus_et*0.001, hlt_cluster->eta(), hlt_cluster->phi(), hlt_cluster});
114 }
115 }
116 else{
117 for (const auto hlt_cluster : *hltCluster_readHandle) {
118 auto hlt_clus_et = hlt_cluster->et();
119 if (hlt_clus_et < m_HLT_min_et) continue;
120
121 bool HLT_type_match = false;
122
123 for (unsigned int n = 0; n < m_HLT_types.size(); ++n) {
124 if (hlt_cluster->clusterSize() == m_HLT_types[n]) { HLT_type_match = true; break; }
125 }
126
127 if (!m_HLT_types.empty() && !HLT_type_match) continue;
128 vec_hlt_clusters.push_back({hlt_clus_et*0.001, hlt_cluster->eta(), hlt_cluster->phi(), hlt_cluster});
129 }
130 }
131
132 // prepare OFF clusters
133 float off_clus_eta = 0;
134 float off_clus_phi = 0;
135 float off_clus_et = 0;
136 std::vector<clus_kin> vec_off_clusters;
137 for (const auto off_cluster : *offCluster_readHandle) {
138 if (m_doLC){
139 off_clus_et = off_cluster->et();
140 off_clus_eta = off_cluster->eta();
141 off_clus_phi = off_cluster->phi();
142 }
143 else{
144 off_clus_et = off_cluster->rawE()/std::cosh(std::abs(off_cluster->rawEta()));
145 off_clus_eta = off_cluster->rawEta();
146 off_clus_phi = off_cluster->rawPhi();
147 }
148 if (off_clus_et < m_OFF_min_et) continue;
149
150 bool OFF_type_match = false;
151
152 for (unsigned int n = 0; n < m_OFF_types.size(); ++n) {
153 if (off_cluster->clusterSize() == m_OFF_types[n]) { OFF_type_match = true; break; }
154 }
155
156 if (!m_OFF_types.empty() && !OFF_type_match) continue;
157 vec_off_clusters.push_back({off_clus_et*0.001, off_clus_eta, off_clus_phi, off_cluster});
158 }
159
160
162 // HLT CLUSTERS //
164
165 unsigned int n_hlt_clusters = 0;
166 unsigned int n_hlt_barrel_high_et_clusters = 0;
167 unsigned int n_hlt_clusters_no_match = 0;
168 unsigned int n_hlt_clusters_with_match = 0;
169
170 // All HLT clusters
171 auto HLT_num = Monitored::Scalar<int>("HLT_num",0);
172 auto HLT_et = Monitored::Collection("HLT_et", vec_hlt_clusters, &clus_kin::et);
173 auto HLT_eta = Monitored::Collection("HLT_eta", vec_hlt_clusters, &clus_kin::eta);
174 auto HLT_phi = Monitored::Collection("HLT_phi", vec_hlt_clusters, &clus_kin::phi);
175 auto HLT_type = Monitored::Collection("HLT_type", vec_hlt_clusters, []( const clus_kin& clus) { return clus.parent->clusterSize(); } );
176 // nCells is a decorated variable not available for older input files
177 auto HLT_size = Monitored::Collection("HLT_size", vec_hlt_clusters, []( const clus_kin& clus) {
178 static const SG::ConstAccessor<int> nCellsAcc("nCells");
179 return nCellsAcc.withDefault(*clus.parent, 0);
180 });
181 auto HLT_time = Monitored::Collection("HLT_time", vec_hlt_clusters, []( const clus_kin& clus) { return clus.parent->time(); } );
182
183 // HLT cut masks
184 std::vector<char> vec_hlt_barrel_high_et, vec_hlt_no_off_match, vec_hlt_with_off_match;
185 auto HLT_barrel_high_et = Monitored::Collection("HLT_barrel_high_et", vec_hlt_barrel_high_et);
186 auto HLT_no_OFF_match = Monitored::Collection("HLT_no_OFF_match", vec_hlt_no_off_match);
187 auto HLT_with_OFF_match = Monitored::Collection("HLT_with_OFF_match", vec_hlt_with_off_match);
188
189 auto HLT_barrel_high_et_num = Monitored::Scalar<int>("HLT_barrel_high_et_num",0);
190 auto HLT_no_OFF_match_num = Monitored::Scalar<int>("HLT_no_OFF_match_num",0);
191 auto HLT_with_OFF_match_num = Monitored::Scalar<int>("HLT_with_OFF_match_num",0);
192
193 // HLT clusters vs. OFF clusters
194 std::vector<float> vec_hlt_vs_off_minimum_delta_r, vec_hlt_vs_off_delta_eta, vec_hlt_vs_off_delta_phi, vec_hlt_vs_off_delta_time, vec_hlt_vs_off_resolution, vec_off_match_et;
195
196 auto HLT_matched_fraction = Monitored::Scalar<float>("HLT_matched_fraction", 0.0);
197 auto HLT_vs_OFF_minimum_delta_r = Monitored::Collection("HLT_vs_OFF_minimum_delta_r", vec_hlt_vs_off_minimum_delta_r);
198 auto HLT_vs_OFF_delta_eta = Monitored::Collection("HLT_vs_OFF_delta_eta", vec_hlt_vs_off_delta_eta);
199 auto HLT_vs_OFF_delta_phi = Monitored::Collection("HLT_vs_OFF_delta_phi", vec_hlt_vs_off_delta_phi);
200 auto HLT_vs_OFF_delta_time = Monitored::Collection("HLT_vs_OFF_delta_time", vec_hlt_vs_off_delta_time);
201 auto HLT_vs_OFF_resolution = Monitored::Collection("HLT_vs_OFF_resolution", vec_hlt_vs_off_resolution);
202 auto OFF_match_et = Monitored::Collection("OFF_match_et", vec_off_match_et);
203
204 const clus_kin *off_match = nullptr; // For matching
205
206 // Loop over HLT clusters
207
208 for (const auto& hlt_cluster : vec_hlt_clusters) {
209
210 ++n_hlt_clusters;
211
212 // high-ET clusters
213 if (hlt_cluster.et > (m_HLT_high_et * 0.001) && std::abs(hlt_cluster.eta) < 2.5) {
214 ++n_hlt_barrel_high_et_clusters;
215 vec_hlt_barrel_high_et.push_back(1);
216 }
217 else vec_hlt_barrel_high_et.push_back(0);
218
219 // matching HLT clusters to OFF clusters
220
221 float min_delta_r = 999999.9;
222
223 for (const auto& off_cluster : vec_off_clusters) {
224 float delta_r = calculateDeltaR(m_max_delta_r, hlt_cluster.eta, hlt_cluster.phi, off_cluster.eta, off_cluster.phi);
225
226 if (delta_r < min_delta_r) {
227
228 min_delta_r = delta_r;
229 off_match = &off_cluster;
230 }
231
232 } // End loop over OFF clusters
233
234 vec_hlt_vs_off_minimum_delta_r.push_back(min_delta_r);
235
236 // No OFF match
237 if (min_delta_r >= m_max_delta_r) {
238
239 ++n_hlt_clusters_no_match;
240
241 vec_off_match_et.push_back(0.);
242
243 vec_hlt_vs_off_resolution.push_back(0.);
244 vec_hlt_vs_off_delta_eta.push_back(0.);
245 vec_hlt_vs_off_delta_phi.push_back(0.);
246 vec_hlt_vs_off_delta_time.push_back(0.);
247
248 vec_hlt_no_off_match.push_back(1);
249 vec_hlt_with_off_match.push_back(0);
250 }
251
252 // With OFF match
253 else {
254
255 ++n_hlt_clusters_with_match;
256
257 vec_off_match_et.push_back(off_match->et);
258
259 vec_hlt_vs_off_resolution.push_back(((off_match->et - hlt_cluster.et) / off_match->et) * 100);
260 vec_hlt_vs_off_delta_eta.push_back(off_match->eta - hlt_cluster.eta);
261 vec_hlt_vs_off_delta_phi.push_back(calculateDeltaPhi(off_match->phi, hlt_cluster.phi));
262 vec_hlt_vs_off_delta_time.push_back(off_match->parent->time() - hlt_cluster.parent->time());
263
264 vec_hlt_no_off_match.push_back(0);
265 vec_hlt_with_off_match.push_back(1);
266 }
267
268 } // End loop over HLT clusters
269
270 HLT_num = n_hlt_clusters;
271 HLT_barrel_high_et_num = n_hlt_barrel_high_et_clusters;
272 HLT_no_OFF_match_num = n_hlt_clusters_no_match;
273 HLT_with_OFF_match_num = n_hlt_clusters_with_match;
274 if (n_hlt_clusters>0) {
275 HLT_matched_fraction = static_cast<float>(n_hlt_clusters_with_match) / n_hlt_clusters;
276 }
277
279 // OFF CLUSTERS //
281
282 unsigned int n_off_clusters = 0;
283 unsigned int n_off_clusters_no_match = 0;
284 unsigned int n_off_clusters_with_match = 0;
285
286 // OFF cluster
287 std::vector<float> vec_off_et, vec_off_eta, vec_off_phi, vec_off_time;
288 std::vector<int> vec_off_type;
289
290 auto OFF_num = Monitored::Scalar<int>("OFF_num",0);
291 auto OFF_et = Monitored::Collection("OFF_et", vec_off_clusters, &clus_kin::et);
292 auto OFF_eta = Monitored::Collection("OFF_eta", vec_off_clusters, &clus_kin::eta);
293 auto OFF_phi = Monitored::Collection("OFF_phi", vec_off_clusters, &clus_kin::phi);
294 auto OFF_time = Monitored::Collection("OFF_time", vec_off_clusters, []( const clus_kin& clus) { return clus.parent->time(); } );
295 auto OFF_type = Monitored::Collection("OFF_type", vec_off_clusters, []( const clus_kin& clus) { return clus.parent->clusterSize(); } );
296
297 // cut masks
298 std::vector<char> vec_off_no_hlt_match, vec_off_with_hlt_match;
299 auto OFF_no_HLT_match = Monitored::Collection("OFF_no_HLT_match", vec_off_no_hlt_match);
300 auto OFF_with_HLT_match = Monitored::Collection("OFF_with_HLT_match", vec_off_with_hlt_match);
301
302 auto OFF_no_HLT_match_num = Monitored::Scalar<int>("OFF_no_HLT_match_num",0);
303 auto OFF_with_HLT_match_num = Monitored::Scalar<int>("OFF_with_HLT_match_num",0);
304
305 // OFF clusters vs. HLT clusters
306 std::vector<float> vec_off_vs_hlt_minimum_delta_r, vec_off_vs_hlt_delta_eta, vec_off_vs_hlt_delta_phi, vec_off_vs_hlt_delta_time, vec_off_vs_hlt_resolution, vec_hlt_match_et;
307
308 auto OFF_matched_fraction = Monitored::Scalar<float>("OFF_matched_fraction", 0.0);
309 auto OFF_vs_HLT_minimum_delta_r = Monitored::Collection("OFF_vs_HLT_minimum_delta_r", vec_off_vs_hlt_minimum_delta_r);
310 auto OFF_vs_HLT_delta_eta = Monitored::Collection("OFF_vs_HLT_delta_eta", vec_off_vs_hlt_delta_eta);
311 auto OFF_vs_HLT_delta_phi = Monitored::Collection("OFF_vs_HLT_delta_phi", vec_off_vs_hlt_delta_phi);
312 auto OFF_vs_HLT_delta_time = Monitored::Collection("OFF_vs_HLT_delta_time", vec_off_vs_hlt_delta_time);
313 auto OFF_vs_HLT_resolution = Monitored::Collection("OFF_vs_HLT_resolution", vec_off_vs_hlt_resolution);
314 auto HLT_match_et = Monitored::Collection("HLT_match_et", vec_hlt_match_et);
315
316 const clus_kin *hlt_match = nullptr; // For matching
317
318 // Loop over OFF clusters
319
320 for (const auto& off_cluster: vec_off_clusters) {
321
322 ++n_off_clusters;
323
324 // matching OFF clusters to HLT clusters
325
326 float min_delta_r = 999999.9;
327
328 for (const auto& hlt_cluster : vec_hlt_clusters) {
329
330 float delta_r = calculateDeltaR(m_max_delta_r, off_cluster.eta, off_cluster.phi, hlt_cluster.eta, hlt_cluster.phi);
331
332 if (delta_r < min_delta_r) {
333
334 min_delta_r = delta_r;
335 hlt_match = &hlt_cluster; // avoid HLT double counts?
336 }
337
338 } // End loop over HLT clusters
339
340 vec_off_vs_hlt_minimum_delta_r.push_back(min_delta_r);
341
342 // No HLT match
343 if (min_delta_r >= m_max_delta_r) {
344
345 ++n_off_clusters_no_match;
346
347 vec_hlt_match_et.push_back(0.);
348
349 vec_off_vs_hlt_resolution.push_back(0.);
350 vec_off_vs_hlt_delta_eta.push_back(0.);
351 vec_off_vs_hlt_delta_phi.push_back(0.);
352 vec_off_vs_hlt_delta_time.push_back(0.);
353
354 vec_off_no_hlt_match.push_back(1);
355 vec_off_with_hlt_match.push_back(0);
356 }
357 // With HLT match
358 else {
359
360 ++n_off_clusters_with_match;
361
362 vec_hlt_match_et.push_back(hlt_match->et);
363
364 vec_off_vs_hlt_resolution.push_back(((off_cluster.et - hlt_match->et) / off_cluster.et) * 100);
365 vec_off_vs_hlt_delta_eta.push_back(off_cluster.eta - hlt_match->eta);
366 vec_off_vs_hlt_delta_phi.push_back(calculateDeltaPhi(off_cluster.phi, hlt_match->phi));
367 vec_off_vs_hlt_delta_time.push_back(off_cluster.parent->time() - hlt_match->parent->time());
368
369 vec_off_no_hlt_match.push_back(0);
370 vec_off_with_hlt_match.push_back(1);
371 }
372
373 } // End loop over OFF clusters
374
375
376 OFF_num = n_off_clusters;
377 OFF_no_HLT_match_num = n_off_clusters_no_match;
378 OFF_with_HLT_match_num = n_off_clusters_with_match;
379 if (n_off_clusters>0) {
380 OFF_matched_fraction = static_cast<float>(n_off_clusters_with_match) / n_off_clusters;
381 }
382 const std::string chain = m_hltChainsT0;
383
384 if(m_hltChainsT0 != "All"){
385 if(accepted_hlt_clusters.size()>0){
386 ATH_MSG_DEBUG("Filling for : "<<m_hltChainsT0);
387
389 // HLT clusters
390 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
391
392 // HLT cutmasks
393 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
394
395 // OFF clusters
396 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
397
398 // OFF cutmasks
399 OFF_no_HLT_match, OFF_with_HLT_match,
400
401 // HLT matched to OFF
402 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
403 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
404
405 // OFF matched to HLT
406 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
407 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
408 );
409
410 }
411 else if(getTrigDecisionTool()->isPassed(m_hltChainsT0)){
412 ATH_MSG_DEBUG("Filling for : "<<m_hltChainsT0);
414 // HLT clusters
415 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
416
417 // HLT cutmasks
418 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
419
420 // OFF clusters
421 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
422
423 // OFF cutmasks
424 OFF_no_HLT_match, OFF_with_HLT_match,
425
426 // HLT matched to OFF
427 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
428 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
429
430 // OFF matched to HLT
431 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
432 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
433 );
434 }
435 }
436 else {
437 ATH_MSG_DEBUG("Filling for : "<<m_hltChainsT0);
439 // HLT clusters
440 HLT_num, HLT_et, HLT_eta, HLT_phi, HLT_time, HLT_type, HLT_size, HLT_barrel_high_et_num, HLT_bc,
441
442 // HLT cutmasks
443 HLT_barrel_high_et, HLT_no_OFF_match, HLT_with_OFF_match,
444
445 // OFF clusters
446 OFF_num, OFF_et, OFF_eta, OFF_phi, OFF_time, OFF_type,
447
448 // OFF cutmasks
449 OFF_no_HLT_match, OFF_with_HLT_match,
450
451 // HLT matched to OFF
452 HLT_matched_fraction, HLT_no_OFF_match_num, HLT_vs_OFF_minimum_delta_r, HLT_with_OFF_match_num,
453 OFF_match_et, HLT_vs_OFF_resolution, HLT_vs_OFF_delta_eta, HLT_vs_OFF_delta_phi, HLT_vs_OFF_delta_time,
454
455 // OFF matched to HLT
456 OFF_matched_fraction, OFF_no_HLT_match_num, OFF_vs_HLT_minimum_delta_r, OFF_with_HLT_match_num,
457 HLT_match_et, OFF_vs_HLT_resolution, OFF_vs_HLT_delta_eta, OFF_vs_HLT_delta_phi, OFF_vs_HLT_delta_time
458 );
459
460 }
461 return StatusCode::SUCCESS;
462}
463
464
465float HLTCalo_TopoCaloClustersMonitor::calculateDeltaR( float max_deltar, float eta_1, float phi_1, float eta_2, float phi_2 ) const {
466 // reject the match as early as possible to avoid the expensive delta r calculation
467 if (std::abs(eta_1-eta_2) > max_deltar) return 99.9;
468 double DeltaPhi = calculateDeltaPhi(phi_1, phi_2);
469 if (DeltaPhi > max_deltar) return 99.9;
470 return sqrt( ((eta_1-eta_2)*(eta_1-eta_2)) + (DeltaPhi*DeltaPhi) );
471}
472
473float HLTCalo_TopoCaloClustersMonitor::calculateDeltaPhi( float phi_1, float phi_2 ) const {
474 return std::abs( std::abs( std::abs( phi_1 - phi_2 ) - TMath::Pi() ) - TMath::Pi() );
475}
476
477std::vector<const xAOD::CaloCluster*> HLTCalo_TopoCaloClustersMonitor::ifStepPassed(const std::string& chain) const{
478 Trig::FeatureRequestDescriptor featureRequestDescriptor;
479 featureRequestDescriptor.setChainGroup(chain);
480 featureRequestDescriptor.setCondition(TrigDefs::includeFailedDecisions);
481 std::vector<TrigCompositeUtils::LinkInfo<xAOD::CaloClusterContainer>> fVec = getTrigDecisionTool()->features<xAOD::CaloClusterContainer>(featureRequestDescriptor);
482 std::vector<const xAOD::CaloCluster*> clustersToMonitorForChain;
485 clustersToMonitorForChain.push_back( *(f.link) );
486 }
487 }
488 ATH_MSG_DEBUG("clustersToMonitorForChain.size(): "<<clustersToMonitorForChain.size());
489 for(auto &p: clustersToMonitorForChain)
490 ATH_MSG_DEBUG("clustersToMonitorForChain->et(): "<<p->et());
491 return clustersToMonitorForChain;
492}
493
494
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Helper class to provide constant type-safe access to aux data.
Handle class for reading a decoration on an object.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
virtual StatusCode initialize() override
initialize
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
int distanceFromFront(const bcid_type bcid, const BunchDistanceType type=NanoSec) const
The distance of the specific bunch crossing from the front of the train.
@ BunchCrossings
Distance in units of 25 nanoseconds.
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_HLT_cont_key
SG::ReadCondHandleKey< BunchCrossingCondData > m_bunchCrossingKey
virtual float calculateDeltaPhi(float phi_1, float phi_2) const
HLTCalo_TopoCaloClustersMonitor(const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
virtual float calculateDeltaR(float max_deltar, float eta_1, float phi_1, float eta_2, float phi_2) const
std::vector< const xAOD::CaloCluster * > ifStepPassed(const std::string &chain) const
SG::ReadDecorHandleKey< xAOD::EventInfo > m_eventInfoDecorKey
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_OFF_cont_key
virtual StatusCode initialize() override
initialize
Declare a monitored scalar variable.
Helper class to provide constant type-safe access to aux data.
const_reference_type withDefault(const ELT &e, const T &deflt) const
Fetch the variable for one element, as a const reference, with a default.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
FeatureRequestDescriptor & setCondition(const unsigned int condition)
Set the Condition: TrigDefs::Physics - (default), only returns features from paths through the naviga...
FeatureRequestDescriptor & setChainGroup(const std::string &chainGroupName)
Set the desired Chain or Chain Group.
@ LAr
The LAr calorimeter.
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
Fills a vector of variables to a group by reference.
Generic monitoring tool for athena components.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
@ ACTIVE
The link was still active for one-or-more of the HLT Chains requested in the TDT.
Definition ActiveState.h:20
static const unsigned int includeFailedDecisions
Run3 synonym of alsoDeactivateTEs.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.
Helper to keep a Decision object, ElementLink and ActiveState (with respect to some requested ChainGr...
Definition LinkInfo.h:22