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