308 {
309
311
312 [[maybe_unused]] static const bool sanityCheckDone = [&] {
313 if (l1Decisions->at(
INPUT-1)->name() ==
"l1seeded" &&
314 l1Decisions->at(
AFTER_PS-1)->name() ==
"unprescaled") {
315 return true;
316 }
317 throw GaudiException(
m_l1DecisionsKey.key() +
" does not contain the expected entries",
318 name(), StatusCode::FAILURE);
319 }();
320
321 auto fillL1 = [&](
int index) -> StatusCode {
324 ATH_MSG_DEBUG(
"L1 " << index-1 <<
" N positive decisions " <<
ids.size() );
329 m_passHistogram->Fill(1, static_cast<double>(index));
331 }
332 return StatusCode::SUCCESS;
333 };
334
335
338
339
341 std::vector<TrigCompositeUtils::DecisionID> stepSum;
342 std::set<std::string> stepSequences;
344 ctool->getDecisions( stepSum, stepSequences, context );
345 ATH_MSG_DEBUG(
" Step " << step <<
" decisions (for decisions): " << stepSum.size() );
350 stepSum.clear();
351 stepSequences.clear();
352 }
353
356 stepSum.clear();
357 ctool->getDecisions( stepSum, context );
358 ATH_MSG_DEBUG(
" Step " << step <<
" decisions (for features): " << stepSum.size() );
361 }
362
363
368 if (!decisionObject) {
369 ATH_MSG_WARNING(
"Unable to locate trigger navigation terminus node. Cannot tell which chains passed the event.");
370 } else {
372 }
373
374
377 if (!expressDecisionObject) {
378 ATH_MSG_WARNING(
"Unable to locate trigger navigation express terminus node. Cannot tell which chains passed the express stream in this event.");
379 } else {
381 }
382
383
389
390
392
397
398
399 if (!finalIDs.empty()) {
400 m_passHistogram->Fill(1, static_cast<double>(countOutputRow));
402 }
403 if (!expressFinalIDs.empty()) {
404 m_passHistogram->Fill(1, static_cast<double>(countExpressRow));
406 }
407
408 return StatusCode::SUCCESS;
409}
#define ATH_CHECK
Evaluate an expression and check for errors.
#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.