ATLAS Offline Software
TrigSignatureMoni.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TrigSignatureMoni.h"
6 
9 
10 #include <algorithm>
11 #include <regex>
12 #include <format>
13 
15 enum BINS {
16  INPUT = 1,
17  AFTER_PS = 2,
18  OUTPUT = 3,
19  EXPRESS = 4,
20  N_BINS = 4
21 };
22 
23 
25  ATH_CHECK(m_l1DecisionsKey.initialize());
26  ATH_CHECK(m_finalDecisionKey.initialize());
31  ATH_CHECK(m_histSvc.retrieve());
32 
33  ATH_CHECK(m_incidentSvc.retrieve());
35 
36  return StatusCode::SUCCESS;
37 }
38 
42  ATH_CHECK(hltMenuHandle.isValid());
43 
44  // Retrieve chain information from menus
45  m_groupToChainMap.clear();
46  m_streamToChainMap.clear();
47  m_expressChainMap.clear();
48 
49  std::unordered_map<std::string,std::string> mapStrNameToTypeName; // e.g. {Main -> physics_Main}
50  try {
51  for (const TrigConf::DataStructure& stream : hltMenuHandle->streams()) {
52  mapStrNameToTypeName.insert({stream.getAttribute("name"), stream.getAttribute("type")+"_"+stream.getAttribute("name")});
53  }
54  } catch (const std::exception& ex) {
55  ATH_MSG_ERROR("Exception reading stream tag configuration from the HLT menu: " << ex.what());
56  return StatusCode::FAILURE;
57  }
58 
59  for (const TrigConf::Chain& chain : *hltMenuHandle) {
60  for (const std::string& group : chain.groups()) {
61  // Save chains per RATE group
62  if (group.starts_with( "RATE")){
64  }
65  }
66 
67  // Save chain to stream map
68  for (const std::string& streamName : chain.streams()){
69  const auto it = mapStrNameToTypeName.find(streamName);
70  if (it==mapStrNameToTypeName.cend()) {
71  ATH_MSG_ERROR("Stream name " << streamName << " assigned to chain " << chain.name()
72  << " is missing from menu streams definition");
73  return StatusCode::FAILURE;
74  }
75  if (it->second == "express_express") {
76  m_expressChainMap[it->second].insert(HLT::Identifier(chain.name()));
77  } else {
78  m_streamToChainMap[it->second].insert(HLT::Identifier(chain.name()));
79  }
80  }
81  }
82 
83  // Prepare the histograms
84 
85  // Initialize SignatureAcceptance and DecisionCount histograms that will monitor
86  // chains, groups and sequences per each step
87  const int x {nBinsX(hltMenuHandle)};
88  const int y {nSteps() + N_BINS};
89  ATH_MSG_DEBUG( "Histogram " << x << " x " << y << " bins");
90  std::unique_ptr<TH2> hSA = std::make_unique<TH2I>("SignatureAcceptance", "Raw acceptance of signatures in;chain;step", x, 1, x + 1, y, 1, y + 1);
91  std::unique_ptr<TH2> hDC = std::make_unique<TH2I>("DecisionCount", "Positive decisions count per step;chain;step", x, 1, x + 1, y, 1, y + 1);
92 
93  ATH_CHECK(m_histSvc->regShared(m_bookingPath + "/" + name() + "/SignatureAcceptance", std::move(hSA), m_passHistogram));
94  ATH_CHECK(m_histSvc->regShared(m_bookingPath + "/" + name() + "/DecisionCount", std::move(hDC), m_countHistogram));
95 
96  ATH_CHECK(initHist(m_passHistogram, hltMenuHandle));
97  ATH_CHECK(initHist(m_countHistogram, hltMenuHandle));
98 
99  // Initialize Rate histogram to save the rates of positive decisions in given interval
100  // per chain/group/sequence per in, after ps, out steps
101  if ( x > 0 ){
102  const std::string outputRateName = std::format("Rate{:d}s", m_duration.value());
103  m_rateHistogram.init(outputRateName, "Rate of positive decisions;chain;step", x, N_BINS,
104  std::format("{}/{}/{}", m_bookingPath.value(), name(), outputRateName), m_histSvc).ignore();
105  ATH_CHECK(initHist(m_rateHistogram.getHistogram(), hltMenuHandle, false));
106  ATH_CHECK(initHist(m_rateHistogram.getBuffer(), hltMenuHandle, false));
107  }
108 
109  // Initialize SequencesExecutionRate histogram to save the rates of sequences execution
110  // Save sequences names to be monitored
111  std::set<std::string> sequencesSet;
112  for (auto& ctool: m_decisionCollectorTools){
113  ctool->getSequencesNames(sequencesSet);
114  }
115  const int xc = sequencesSet.size();
116  const int yc {1}; // Only rate, this histogram is really 1 D
117  if (xc > 0){
118  const std::string outputSequenceName = std::format("SequencesExecutionRate{:d}s", m_duration.value());
119  m_sequenceHistogram.init(outputSequenceName, "Rate of sequences execution;sequence;rate", xc, yc,
120  std::format("{}/{}/{}", m_bookingPath.value(), name(), outputSequenceName), m_histSvc).ignore();
121 
122  ATH_CHECK(initSeqHist(m_sequenceHistogram.getHistogram(), sequencesSet));
123  ATH_CHECK(initSeqHist(m_sequenceHistogram.getBuffer(), sequencesSet));
124  }
125 
126  return StatusCode::SUCCESS;
127 }
128 
132 
133  if (m_chainIDToBinMap.empty()) {
134  ATH_MSG_INFO( "No chains configured, no counts to print" );
135  return StatusCode::SUCCESS;
136  }
137 
139  ATH_CHECK(hltMenuHandle.isValid());
140 
141  // Retrieve information whether chain was active in Step
142  std::unordered_map<std::string, std::set<int>> chainToStepsId;
143  for (const TrigConf::Chain& chain : *hltMenuHandle){
144  int nstep {1}; // Start from step=1
145  for (const std::string& seqName : chain.sequencers()){
146  // Example sequencer name is "Step1_FastCalo_electron", we need only information about Step + number
147  std::smatch stepNameMatch;
148  std::regex_search(seqName.begin(), seqName.end(), stepNameMatch, std::regex("[Ss]tep[0-9]+"));
149 
150  std::string stepName = stepNameMatch[0];
151  stepName[0] = std::toupper(stepName[0]); // Fix "stepX" -> "StepX"
152  // Check that the step name is set with the same position in the execution (empty steps support)
153  if (std::format("Step{:d}", nstep) == stepName) {
154  chainToStepsId[chain.name()].insert(nstep);
155  } else {
156  ATH_MSG_DEBUG("Missing counts for step" << nstep << " in chain " << chain.name());
157  }
158  nstep++;
159  }
160  }
161 
162  auto collToString = [&](int xbin, const LockedHandle<TH2>& hist, int startOfset=0, int endOffset=0){
163  std::string v;
164  const int stepsSize = hist->GetYaxis()->GetNbins() - N_BINS;
165  for (int ybin = 1; ybin <= hist->GetYaxis()->GetNbins()-endOffset; ++ybin) {
166  if (ybin > startOfset) {
167  // Skip steps where chain wasn't active
168  // ybins are for all axis labes, steps are in bins from 3 to stepsSize + 2
169  const std::string chainName = m_passHistogram->GetXaxis()->GetBinLabel(xbin);
170 
171  if (ybin < 3 || ybin > stepsSize + 2 || chainToStepsId[chainName].contains(ybin - 2)) {
172  v += std::format("{:<11d}", static_cast<int>(hist->GetBinContent(xbin, ybin)));
173  } else {
174  v += std::format("{:<11s}", "-");
175  }
176  } else {
177  v += std::format("{:<11s}", " ");
178  }
179  }
180  return v;
181  };
182 
183  std::string v;
184  v += std::format("{:<11s}", "L1");
185  v += std::format("{:<11s}", "AfterPS");
186  for (int bin = 1; bin <= m_passHistogram->GetYaxis()->GetNbins()-N_BINS; ++bin) {
187  v += std::format("Step{:<7d}", bin);
188  }
189  v += std::format("{:<11s}", "Output");
190  v += std::format("{:<11s}", "Express");
191 
192  ATH_MSG_INFO("Chains passing step (1st row events & 2nd row decision counts):");
193  ATH_MSG_INFO(std::format("{:<30s}", "ChainName") << v);
194 
195  /*
196  comment for future dev:
197  for combined chains we find x2 the number of decisions, because we count both the HypoAlg and the combo Alg decisions
198  */
199 
200  for (int bin = 1; bin <= (*m_passHistogram)->GetXaxis()->GetNbins(); ++bin) {
201  const std::string chainName = m_passHistogram->GetXaxis()->GetBinLabel(bin);
202  const std::string chainID = std::to_string(HLT::Identifier(chainName));
203  if (chainName.starts_with( "HLT")) { // print only for chains
204  ATH_MSG_INFO( std::format("{:s} #{:s}", chainName, chainID) );
205  ATH_MSG_INFO( std::format("{:<30s}", std::format("-- #{} Events", chainID)) << collToString( bin, m_passHistogram) );
206  ATH_MSG_INFO( std::format("{:<30s}", std::format("-- #{} Features", chainID)) << collToString( bin, m_countHistogram , 2, 1 ) );
207  }
208  if (chainName.starts_with( "All")){
209  ATH_MSG_INFO( std::format("{:<30s}", chainName) << collToString( bin, m_passHistogram) );
210  }
211  }
212 
213  return StatusCode::SUCCESS;
214 }
215 
217  for (TrigCompositeUtils::DecisionID id : dc) {
218  auto id2bin = m_chainIDToBinMap.find( id );
219  if ( id2bin == m_chainIDToBinMap.end() ) {
220  if ( !HLT::Identifier(id).name().starts_with("leg") ) {
221  ATH_MSG_WARNING( "HLT chain " << HLT::Identifier(id) << " not configured to be monitored" );
222  }
223  } else {
224  histogram->Fill( id2bin->second, static_cast<double>(row) );
225  }
226  }
227  return StatusCode::SUCCESS;
228 }
229 
231  return fillHistogram(dc, row, m_rateHistogram.getBuffer());
232 }
233 
235  return fillHistogram(dc, row, m_passHistogram);
236 }
237 
238 StatusCode TrigSignatureMoni::fillDecisionCount(const std::vector<TrigCompositeUtils::DecisionID>& dc, int row) const {
239  for (TrigCompositeUtils::DecisionID id : dc) {
242  auto id2bin = m_chainIDToBinMap.find( chain );
243  if ( id2bin == m_chainIDToBinMap.end()) {
244  ATH_MSG_WARNING("HLT chain " << HLT::Identifier(chain) << " not configured to be monitored");
245  } else {
246  m_countHistogram->Fill(id2bin->second, static_cast<double>(row));
247  }
248  }
249 
250  return StatusCode::SUCCESS;
251 }
252 
253 StatusCode TrigSignatureMoni::fillSequences(const std::set<std::string>& sequences) const {
254  for (const std::string& seq : sequences) {
256  }
257 
258  return StatusCode::SUCCESS;
259 }
260 
261 StatusCode TrigSignatureMoni::fillStreamsAndGroups(const std::map<std::string, TrigCompositeUtils::DecisionIDContainer>& nameToChainsMap, const TrigCompositeUtils::DecisionIDContainer& dc, int row) const {
262 
263  // Adjust bin index for those histograms that monitor all steps
264  int rowWithSteps = row;
265  if (row==OUTPUT || row==EXPRESS) rowWithSteps += m_decisionCollectorTools.size();
266 
267  for (const auto& [name, decisions] : nameToChainsMap) {
268  for (TrigCompositeUtils::DecisionID id : dc) {
269  if (decisions.contains(id)) {
270  const double bin = m_nameToBinMap.at(name);
272  m_countHistogram->Fill(bin, rowWithSteps);
273  m_passHistogram->Fill(bin, rowWithSteps);
274  break;
275  }
276  }
277  }
278  return StatusCode::SUCCESS;
279 }
280 
281 void TrigSignatureMoni::handle( const Incident& incident ) {
282  // Create and start timer after fork
283  if (incident.type() == AthenaInterprocess::UpdateAfterFork::type()) {
285  ATH_MSG_WARNING("Timer is already running. UpdateAfterFork incident called more than once?");
286  return;
287  }
288 
289  // Prevent from publishing empty histograms
290  if (nBinsX() > 0) {
292  }
293 
294  if (!m_sequenceToBinMap.empty()) {
296  }
297 
298  ATH_MSG_DEBUG("Started rate timer");
299  }
300 }
301 
302 StatusCode TrigSignatureMoni::execute( const EventContext& context ) const {
303 
305 
306  [[maybe_unused]] static const bool sanityCheckDone = [&] {
307  if (l1Decisions->at(INPUT-1)->name() == "l1seeded" &&
308  l1Decisions->at(AFTER_PS-1)->name() == "unprescaled") {
309  return true;
310  }
311  throw GaudiException(m_l1DecisionsKey.key() + " does not contain the expected entries",
312  name(), StatusCode::FAILURE);
313  }();
314 
315  auto fillL1 = [&](int index) -> StatusCode {
317  TrigCompositeUtils::decisionIDs(l1Decisions->at(index-1), ids);
318  ATH_MSG_DEBUG( "L1 " << index-1 << " N positive decisions " << ids.size() );
322  if (!ids.empty()){
323  m_passHistogram->Fill(1, static_cast<double>(index));
324  m_rateHistogram.fill(1, static_cast<double>(index));
325  }
326  return StatusCode::SUCCESS;
327  };
328 
329  // Fill histograms with L1 decisions in and after prescale
330  ATH_CHECK(fillL1(INPUT));
331  ATH_CHECK(fillL1(AFTER_PS));
332 
333  // Fill HLT steps
334  int step = 0;
335  std::vector<TrigCompositeUtils::DecisionID> stepSum;
336  std::set<std::string> stepSequences;
337  for ( auto& ctool: m_decisionCollectorTools ) {
338  ctool->getDecisions( stepSum, stepSequences, context );
339  ATH_MSG_DEBUG( " Step " << step << " decisions (for decisions): " << stepSum.size() );
340  TrigCompositeUtils::DecisionIDContainer stepUniqueSum( stepSum.begin(), stepSum.end() );
341  ATH_CHECK( fillPassEvents( stepUniqueSum, 3+step ) );
342  ATH_CHECK( fillSequences( stepSequences ) );
343  ++step;
344  stepSum.clear();
345  stepSequences.clear();
346  }
347 
348  step = 0;
349  for ( auto& ctool: m_featureCollectorTools ) {
350  stepSum.clear();
351  ctool->getDecisions( stepSum, context );
352  ATH_MSG_DEBUG( " Step " << step << " decisions (for features): " << stepSum.size() );
353  ATH_CHECK( fillDecisionCount( stepSum, 3+step ) );
354  ++step;
355  }
356 
357  // Collect the final decisions
359  ATH_CHECK( finalDecisionsHandle.isValid() );
361  const TrigCompositeUtils::Decision* decisionObject = TrigCompositeUtils::getTerminusNode(*finalDecisionsHandle);
362  if (!decisionObject) {
363  ATH_MSG_WARNING("Unable to locate trigger navigation terminus node. Cannot tell which chains passed the event.");
364  } else {
365  TrigCompositeUtils::decisionIDs(decisionObject, finalIDs);
366  }
367 
368  // Collect the express stream decisions
370  const TrigCompositeUtils::Decision* expressDecisionObject = TrigCompositeUtils::getExpressTerminusNode(*finalDecisionsHandle);
371  if (!expressDecisionObject) {
372  ATH_MSG_WARNING("Unable to locate trigger navigation express terminus node. Cannot tell which chains passed the express stream in this event.");
373  } else {
374  TrigCompositeUtils::decisionIDs(expressDecisionObject, expressFinalIDs);
375  }
376 
377  // Fill the histograms with output counts/rate
378  const int countOutputRow {nSteps() + OUTPUT};
381  ATH_CHECK( fillPassEvents(finalIDs, countOutputRow));
382  ATH_CHECK( fillRate(finalIDs, OUTPUT));
383 
384  // Fill the histograms with express counts/rate
385  const int countExpressRow {nSteps() + EXPRESS};
386  // express stream rate is filled into OUTPUT bin on purpose
389  ATH_CHECK( fillPassEvents(expressFinalIDs, countExpressRow));
390  ATH_CHECK( fillRate(expressFinalIDs, EXPRESS));
391 
392  // Fill the "All" column in counts/rate histograms
393  if (!finalIDs.empty()) {
394  m_passHistogram->Fill(1, static_cast<double>(countOutputRow));
395  m_rateHistogram.fill(1, static_cast<double>(OUTPUT));
396  }
397  if (!expressFinalIDs.empty()) {
398  m_passHistogram->Fill(1, static_cast<double>(countExpressRow));
399  m_rateHistogram.fill(1, static_cast<double>(EXPRESS));
400  }
401 
402  return StatusCode::SUCCESS;
403 }
404 
406  return nChains(hltMenuHandle) + m_groupToChainMap.size() + m_streamToChainMap.size() + m_expressChainMap.size();
407 }
408 
410  return m_chainIDToBinMap.size() + m_groupToChainMap.size() + m_streamToChainMap.size() + m_expressChainMap.size() + 1;
411 }
412 
414  return hltMenuHandle->size() + 1; // Chains + "All"
415 }
416 
418  return m_decisionCollectorTools.size();
419 }
420 
422  TAxis* x = hist->GetXaxis();
423  x->SetBinLabel(1, "All");
424  int bin = 2; // 1 is for total count, (remember bin numbering in ROOT starts from 1)
425 
426  std::set<std::string> sortedChainsList;
427  for ( const TrigConf::Chain& chain: *hltMenuHandle ) {
428  sortedChainsList.insert( chain.name() );
429  }
430 
431  for ( const std::string& chainName: sortedChainsList ) {
432  x->SetBinLabel( bin, chainName.c_str() );
434  bin++;
435  }
436 
437 
438  for ( const auto& stream : m_streamToChainMap){
439  x->SetBinLabel( bin, ("str_"+stream.first).c_str());
440  m_nameToBinMap[ stream.first ] = bin;
441  bin++;
442  }
443 
444  for ( const auto& stream : m_expressChainMap){
445  x->SetBinLabel( bin, ("str_"+stream.first).c_str());
446  m_nameToBinMap[ stream.first ] = bin;
447  bin++;
448  }
449 
450  for ( const auto& group : m_groupToChainMap){
451  x->SetBinLabel( bin, ("grp_"+group.first.substr(group.first.find(':')+1)).c_str() );
452  m_nameToBinMap[ group.first ] = bin;
453  bin++;
454  }
455 
456 
457  TAxis* y = hist->GetYaxis();
458  y->SetBinLabel(INPUT, steps ? "L1" : "Input");
459  y->SetBinLabel(AFTER_PS, "AfterPS");
460  for ( size_t i = 0; steps && i < m_decisionCollectorTools.size(); ++i) {
461  y->SetBinLabel(3 + i, std::format("Step {:d}", i).c_str());
462  }
463  y->SetBinLabel(y->GetNbins()-1, "Output"); // Second to last bin
464  y->SetBinLabel(y->GetNbins(), "Express"); // Last bin
465 
466  return StatusCode::SUCCESS;
467 }
468 
469 StatusCode TrigSignatureMoni::initSeqHist(LockedHandle<TH2>& hist, std::set<std::string>& sequenceSet) {
470  TAxis* x = hist->GetXaxis();
471  int bin = 1;
472 
473  // Set bin labels
474  for (const std::string& seqName : sequenceSet) {
475  x->SetBinLabel(bin, seqName.c_str());
476  m_sequenceToBinMap[seqName] = bin;
477  ++bin;
478  }
479 
480  TAxis* y = hist->GetYaxis();
481  y->SetBinLabel(1, "Rate");
482 
483  return StatusCode::SUCCESS;
484 }
485 
486 
488  delete m_bufferHistogram.get();
489 }
490 
491 StatusCode TrigSignatureMoni::RateHistogram::init( const std::string& histoName, const std::string& histoTitle,
492  const int x, const int y, const std::string& registerPath, const ServiceHandle<ITHistSvc>& histSvc ){
493  std::unique_ptr<TH2> h = std::make_unique<TH2F>(histoName.c_str(), histoTitle.c_str(), x, 1, x + 1, y, 1, y + 1);
494  ATH_CHECK( histSvc->regShared( registerPath.c_str(), std::move(h), m_histogram));
495 
496  TH2I * hB = new TH2I( (histoName + "Buffer").c_str(), histoTitle.c_str(), x, 1, x + 1, y, 1, y + 1);
497  m_bufferHistogram.set(hB, &m_mutex);
498  m_bufferHistogram->SetDirectory(0);
499 
500  return StatusCode::SUCCESS;
501 }
502 
503 LockedHandle<TH2> & TrigSignatureMoni::RateHistogram::getHistogram ATLAS_NOT_CONST_THREAD_SAFE () const {
504  return m_histogram;
505 }
506 
507 LockedHandle<TH2> & TrigSignatureMoni::RateHistogram::getBuffer ATLAS_NOT_CONST_THREAD_SAFE () const {
508  return m_bufferHistogram;
509 }
510 
511 std::unique_ptr<Athena::AlgorithmTimer> & TrigSignatureMoni::RateHistogram::getTimer() {
512  return m_timer;
513 }
514 
515 void TrigSignatureMoni::RateHistogram::fill(const double x, const double y) const {
516  m_bufferHistogram->Fill(x, y);
517 }
518 
519 void TrigSignatureMoni::RateHistogram::startTimer(unsigned int duration, unsigned int intervals) {
521  m_timeDivider = std::make_unique<TimeDivider>(intervals, duration, TimeDivider::seconds);
522  m_timer = std::make_unique<Athena::AlgorithmTimer>(duration*50, std::bind(&RateHistogram::callback, this));
523 }
524 
526  if (m_timer) {
527  m_timer->stop();
528  time_t t = time(0);
529  unsigned int interval;
530  unsigned int duration = m_timeDivider->forcePassed(t, interval);
531  updatePublished(duration); // Divide by time that really passed not by interval duration
532  }
533 
534 }
535 
537  m_histogram->Reset("ICES");
538  m_histogram->Add(m_bufferHistogram.get(), 1./duration);
539  m_bufferHistogram->Reset("ICES");
540 }
541 
542 
544  // Ask time divider if we need to switch to new interval
545  time_t t = time(0);
546  unsigned int newinterval;
547  unsigned int oldinterval;
548 
549  if (m_timeDivider->isPassed(t, newinterval, oldinterval)) {
550  updatePublished(m_duration);
551  }
552 
553  // Schedule itself in another 1/20 of the integration period in milliseconds
554  if (m_timer) m_timer->start(m_duration*50);
555 }
test_athena_ntuple_filter.seq
seq
filter configuration ## -> we use the special sequence 'AthMasterSeq' which is run before any other a...
Definition: test_athena_ntuple_filter.py:18
TrigSignatureMoni::m_groupToChainMap
std::map< std::string, TrigCompositeUtils::DecisionIDContainer > m_groupToChainMap
Group name to chain objects map.
Definition: TrigSignatureMoni.h:120
TrigSignatureMoni::RateHistogram::getTimer
std::unique_ptr< Athena::AlgorithmTimer > & getTimer()
Definition: TrigSignatureMoni.cxx:511
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
vtune_athena.format
format
Definition: vtune_athena.py:14
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
HLT::Identifier::numeric
TrigCompositeUtils::DecisionID numeric() const
numeric ID
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:41
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
index
Definition: index.py:1
plotmaker.hist
hist
Definition: plotmaker.py:148
TrigSignatureMoni::m_streamToChainMap
std::map< std::string, TrigCompositeUtils::DecisionIDContainer > m_streamToChainMap
Stream name to chain objects map, excluding express.
Definition: TrigSignatureMoni.h:121
TrigSignatureMoni::m_HLTMenuKey
SG::ReadHandleKey< TrigConf::HLTMenu > m_HLTMenuKey
Definition: TrigSignatureMoni.h:94
skel.it
it
Definition: skel.GENtoEVGEN.py:407
bin
Definition: BinsDiffFromStripMedian.h:43
BINS
BINS
Default bin numbers.
Definition: TrigSignatureMoni.cxx:15
TrigSignatureMoni::m_L1MenuKey
SG::ReadHandleKey< TrigConf::L1Menu > m_L1MenuKey
Definition: TrigSignatureMoni.h:95
TrigSignatureMoni::start
virtual StatusCode start() override
Definition: TrigSignatureMoni.cxx:39
keylayer_zslicemap.row
row
Definition: keylayer_zslicemap.py:155
TrigSignatureMoni::fillStreamsAndGroups
StatusCode fillStreamsAndGroups(const std::map< std::string, TrigCompositeUtils::DecisionIDContainer > &, const TrigCompositeUtils::DecisionIDContainer &, int) const
Definition: TrigSignatureMoni.cxx:261
TrigSignatureMoni::fillRate
StatusCode fillRate(const TrigCompositeUtils::DecisionIDContainer &, int) const
Definition: TrigSignatureMoni.cxx:230
TrigSignatureMoni::m_histSvc
ServiceHandle< ITHistSvc > m_histSvc
Definition: TrigSignatureMoni.h:98
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
TrigSignatureMoni::initialize
virtual StatusCode initialize() override
Definition: TrigSignatureMoni.cxx:24
TrigSignatureMoni::initSeqHist
StatusCode initSeqHist(LockedHandle< TH2 > &, std::set< std::string > &)
Definition: TrigSignatureMoni.cxx:469
TrigSignatureMoni::fillSequences
StatusCode fillSequences(const std::set< std::string > &) const
Definition: TrigSignatureMoni.cxx:253
ATLAS_NOT_CONST_THREAD_SAFE
LockedHandle< TH2 > &TrigSignatureMoni::RateHistogram::getHistogram ATLAS_NOT_CONST_THREAD_SAFE() const
Definition: TrigSignatureMoni.cxx:503
x
#define x
TrigSignatureMoni::initHist
StatusCode initHist(LockedHandle< TH2 > &, SG::ReadHandle< TrigConf::HLTMenu > &, bool=true)
Definition: TrigSignatureMoni.cxx:421
AthenaPoolTestWrite.stream
string stream
Definition: AthenaPoolTestWrite.py:12
TrigSignatureMoni::m_expressChainMap
std::map< std::string, TrigCompositeUtils::DecisionIDContainer > m_expressChainMap
Stream name to chain objects map, including only express.
Definition: TrigSignatureMoni.h:122
PrepareReferenceFile.regex
regex
Definition: PrepareReferenceFile.py:43
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:274
TrigCompositeUtils::getTerminusNode
const Decision * getTerminusNode(SG::ReadHandle< DecisionContainer > &container)
Definition: TrigCompositeUtilsRoot.cxx:257
TrigSignatureMoni::nChains
int nChains(SG::ReadHandle< TrigConf::HLTMenu > &) const
Definition: TrigSignatureMoni.cxx:413
TrigSignatureMoni::RateHistogram::startTimer
void startTimer(unsigned int duration, unsigned int intervals)
Definition: TrigSignatureMoni.cxx:519
TrigSignatureMoni::m_chainIDToBinMap
std::unordered_map< unsigned int, int > m_chainIDToBinMap
Chain id to histogram bin map.
Definition: TrigSignatureMoni.h:115
beamspotman.steps
int steps
Definition: beamspotman.py:503
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigSignatureMoni::m_sequenceToBinMap
std::unordered_map< std::string, int > m_sequenceToBinMap
Sequence to bin map for sequence histogram.
Definition: TrigSignatureMoni.h:117
TrigSignatureMoni::fillHistogram
StatusCode fillHistogram(const TrigCompositeUtils::DecisionIDContainer &, int, LockedHandle< TH2 > &) const
Definition: TrigSignatureMoni.cxx:216
TrigConf::HLTMenu::streams
std::vector< DataStructure > streams() const
Accessor to the connected output streams.
Definition: HLTMenu.cxx:65
lumiFormat.i
int i
Definition: lumiFormat.py:85
AFTER_PS
@ AFTER_PS
Definition: TrigSignatureMoni.cxx:17
TrigCompositeUtils::getExpressTerminusNode
const Decision * getExpressTerminusNode(const DecisionContainer &container)
Returns the express-accept navigation node from a collection or nullptr if missing.
Definition: TrigCompositeUtilsRoot.cxx:265
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Incidents.h
getLatestRuns.interval
interval
Definition: getLatestRuns.py:24
contains
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition: hcg.cxx:111
calibdata.exception
exception
Definition: calibdata.py:495
TrigSignatureMoni::RateHistogram::~RateHistogram
~RateHistogram()
Definition: TrigSignatureMoni.cxx:487
MuonSegmentReaderConfig.histSvc
histSvc
Definition: MuonSegmentReaderConfig.py:96
TrigSignatureMoni::m_incidentSvc
ServiceHandle< IIncidentSvc > m_incidentSvc
Definition: TrigSignatureMoni.h:97
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TrigSignatureMoni::fillDecisionCount
StatusCode fillDecisionCount(const std::vector< TrigCompositeUtils::DecisionID > &, int) const
Definition: TrigSignatureMoni.cxx:238
TrigSignatureMoni::RateHistogram::init
StatusCode init(const std::string &histoName, const std::string &histoTitle, const int x, const int y, const std::string &registerPath, const ServiceHandle< ITHistSvc > &histSvc)
Definition: TrigSignatureMoni.cxx:491
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:52
TrigSignatureMoni::m_sequenceHistogram
RateHistogram m_sequenceHistogram
Definition: TrigSignatureMoni.h:112
TrigSignatureMoni::nSteps
int nSteps() const
Definition: TrigSignatureMoni.cxx:417
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:19
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
PixelAthHitMonAlgCfg.duration
duration
Definition: PixelAthHitMonAlgCfg.py:152
xAOD::decisions
decisions
Definition: TrigComposite_v1.cxx:101
TrigSignatureMoni::m_decisionCollectorTools
ToolHandleArray< DecisionCollectorTool > m_decisionCollectorTools
Definition: TrigSignatureMoni.h:105
TrigSignatureMoni::RateHistogram::callback
void callback()
Definition: TrigSignatureMoni.cxx:543
TrigConf::HLTMenu::size
std::size_t size() const
Accessor to the number of HLT chains.
Definition: HLTMenu.cxx:35
WriteHiveWithMetaData.streamName
string streamName
Definition: WriteHiveWithMetaData.py:22
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:239
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
EXPRESS
@ EXPRESS
Definition: TrigSignatureMoni.cxx:19
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:82
TrigSignatureMoni::m_featureCollectorTools
ToolHandleArray< DecisionCollectorTool > m_featureCollectorTools
Definition: TrigSignatureMoni.h:106
TrigConf::DataStructure
Base class for Trigger configuration data and wrapper around underlying representation.
Definition: DataStructure.h:37
TrigSignatureMoni::m_intervals
Gaudi::Property< unsigned int > m_intervals
Definition: TrigSignatureMoni.h:103
TrigSignatureMoni::nBinsX
int nBinsX() const
Definition: TrigSignatureMoni.cxx:409
TimeDivider::seconds
@ seconds
Definition: TimeDivider.h:22
AthenaInterprocess::UpdateAfterFork::type
static const std::string & type()
Incident type.
Definition: Incidents.h:49
TrigSignatureMoni::handle
virtual void handle(const Incident &incident) override
Definition: TrigSignatureMoni.cxx:281
python.PyAthena.v
v
Definition: PyAthena.py:154
TrigCompositeUtils::isLegId
bool isLegId(const HLT::Identifier &legIdentifier)
Recognise whether the chain ID is a leg ID.
Definition: TrigCompositeUtilsRoot.cxx:218
DeMoScan.index
string index
Definition: DeMoScan.py:362
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
y
#define y
h
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
N_BINS
@ N_BINS
Definition: TrigSignatureMoni.cxx:20
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigSignatureMoni::stop
virtual StatusCode stop() override
Definition: TrigSignatureMoni.cxx:129
TrigSignatureMoni::m_finalDecisionKey
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_finalDecisionKey
Definition: TrigSignatureMoni.h:93
python.TriggerAPI.TriggerAPISession.chainName
chainName
Definition: TriggerAPISession.py:426
HLTIdentifier.h
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:64
TrigSignatureMoni::m_nameToBinMap
std::unordered_map< std::string, int > m_nameToBinMap
Sequence/group/bunchgroup name to bin map.
Definition: TrigSignatureMoni.h:116
TrigSignatureMoni::RateHistogram::fill
void fill(const double x, const double y) const
Definition: TrigSignatureMoni.cxx:515
TrigSignatureMoni::execute
virtual StatusCode execute(const EventContext &context) const override
Definition: TrigSignatureMoni.cxx:302
LArCellBinning.step
step
Definition: LArCellBinning.py:158
TrigSignatureMoni::RateHistogram::updatePublished
void updatePublished(unsigned int duration) const
Definition: TrigSignatureMoni.cxx:536
TrigSignatureMoni::fillPassEvents
StatusCode fillPassEvents(const TrigCompositeUtils::DecisionIDContainer &, int) const
Definition: TrigSignatureMoni.cxx:234
TrigCompositeUtils::getIDFromLeg
HLT::Identifier getIDFromLeg(const HLT::Identifier &legIdentifier)
Generate the HLT::Identifier which corresponds to the chain name from the leg name.
Definition: TrigCompositeUtilsRoot.cxx:179
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
OUTPUT
@ OUTPUT
Definition: TrigSignatureMoni.cxx:18
TrigConf::Chain
HLT chain configuration.
Definition: TrigConfData/TrigConfData/HLTChain.h:18
TrigSignatureMoni::m_duration
Gaudi::Property< unsigned int > m_duration
Definition: TrigSignatureMoni.h:102
TrigSignatureMoni::RateHistogram::stopTimer
void stopTimer()
Definition: TrigSignatureMoni.cxx:525
TrigSignatureMoni::m_bookingPath
Gaudi::Property< std::string > m_bookingPath
Definition: TrigSignatureMoni.h:99
TrigSignatureMoni::m_l1DecisionsKey
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_l1DecisionsKey
Definition: TrigSignatureMoni.h:92
histogram
std::string histogram
Definition: chains.cxx:52
TrigSignatureMoni::m_rateHistogram
RateHistogram m_rateHistogram
Definition: TrigSignatureMoni.h:111
INPUT
@ INPUT
Definition: TrigSignatureMoni.cxx:16
ServiceHandle< ITHistSvc >
TrigSignatureMoni.h