324 {
325
327
328 [[maybe_unused]] static const bool sanityCheckDone = [&] {
329 if (l1Decisions->at(
INPUT-1)->name() ==
"l1seeded" &&
330 l1Decisions->at(
AFTER_PS-1)->name() ==
"unprescaled") {
331 return true;
332 }
333 throw GaudiException(
m_l1DecisionsKey.key() +
" does not contain the expected entries",
334 name(), StatusCode::FAILURE);
335 }();
336
337 auto fillL1 = [&](
int index) -> StatusCode {
340 ATH_MSG_DEBUG(
"L1 " << index-1 <<
" N positive decisions " <<
ids.size() );
345 m_passHistogram->Fill(1, static_cast<double>(index));
347 }
348 return StatusCode::SUCCESS;
349 };
350
351
354
355
357 std::vector<TrigCompositeUtils::DecisionID> stepSum;
358 std::set<std::string> stepSequences;
360 ctool->getDecisions( stepSum, stepSequences, context );
361 ATH_MSG_DEBUG(
" Step " << step <<
" decisions (for decisions): " << stepSum.size() );
366 stepSum.clear();
367 stepSequences.clear();
368 }
369
372 stepSum.clear();
373 ctool->getDecisions( stepSum, context );
374 ATH_MSG_DEBUG(
" Step " << step <<
" decisions (for features): " << stepSum.size() );
377 }
378
379
384 if (!decisionObject) {
385 ATH_MSG_WARNING(
"Unable to locate trigger navigation terminus node. Cannot tell which chains passed the event.");
386 } else {
388 }
389
390
393 if (!expressDecisionObject) {
394 ATH_MSG_WARNING(
"Unable to locate trigger navigation express terminus node. Cannot tell which chains passed the express stream in this event.");
395 } else {
397 }
398
399
405
406
408
413
414
415 if (!finalIDs.empty()) {
416 m_passHistogram->Fill(1, static_cast<double>(countOutputRow));
418 }
419 if (!expressFinalIDs.empty()) {
420 m_passHistogram->Fill(1, static_cast<double>(countExpressRow));
422 }
423
424 return StatusCode::SUCCESS;
425}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_WARNING(x,...)
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode fillPassEvents(const TrigCompositeUtils::DecisionIDContainer &, int) const
StatusCode fillRate(const TrigCompositeUtils::DecisionIDContainer &, int) const
std::map< std::string, TrigCompositeUtils::DecisionIDContainer > m_streamToChainMap
Stream name to chain objects map, excluding express.
StatusCode fillDecisionCount(const std::vector< TrigCompositeUtils::DecisionID > &, int) const
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_l1DecisionsKey
std::map< std::string, TrigCompositeUtils::DecisionIDContainer > m_expressChainMap
Stream name to chain objects map, including only express.
std::map< std::string, TrigCompositeUtils::DecisionIDContainer > m_groupToChainMap
Group name to chain objects map.
StatusCode fillSequences(const std::set< std::string > &) const
RateHistogram m_rateHistogram
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > m_finalDecisionKey
StatusCode fillStreamsAndGroups(const std::map< std::string, TrigCompositeUtils::DecisionIDContainer > &, const TrigCompositeUtils::DecisionIDContainer &, int) const
ToolHandleArray< DecisionCollectorTool > m_decisionCollectorTools
ToolHandleArray< DecisionCollectorTool > m_featureCollectorTools
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
xAOD::TrigComposite Decision
const Decision * getExpressTerminusNode(const DecisionContainer &container)
Returns the express-accept navigation node from a collection or nullptr if missing.
std::set< DecisionID > DecisionIDContainer
const Decision * getTerminusNode(SG::ReadHandle< DecisionContainer > &container)
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.