ATLAS Offline Software
Loading...
Searching...
No Matches
IRoIThresholdsTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef HLTSEEDING_IROITHRESHOLDSTOOL_H
5#define HLTSEEDING_IROITHRESHOLDSTOOL_H
6
13#include "GaudiKernel/IAlgTool.h"
14
15class IRoIThresholdsTool : virtual public IAlgTool {
16public:
18 virtual StatusCode decorateThresholds(const EventContext& eventContext) const = 0;
19};
20
21template<typename T_RoI, typename T_RoIContainer, const char* N_RoIContainer, const char* N_ThresholdType>
22class RoIThresholdsTool : public extends<AthAlgTool, IRoIThresholdsTool> {
23public:
24 using ThrVec = std::vector<std::shared_ptr<TrigConf::L1Threshold>>;
25 using ThrVecRef = std::reference_wrapper<const ThrVec>;
26 using ExtraInfoRef = std::reference_wrapper<const TrigConf::L1ThrExtraInfoBase>;
27
28 RoIThresholdsTool(const std::string& type, const std::string& name, const IInterface* parent)
29 : base_class(type, name, parent) {}
30
31 virtual StatusCode initialize() override {
32 ATH_CHECK(m_l1MenuKey.initialize());
34 return StatusCode::SUCCESS;
35 }
36
37 virtual std::optional<ThrVecRef> getMenuThresholds(const TrigConf::L1Menu& l1Menu) const {
38 // Retrieve the thresholds vector from L1 menu configuration
39 std::optional<ThrVecRef> menuThresholds;
40 try {
41 menuThresholds = ThrVecRef(l1Menu.thresholds(N_ThresholdType));
42 }
43 catch (const std::exception& ex) {
44 ATH_MSG_ERROR("Failed to retrieve " << N_ThresholdType << " thresholds from L1 menu. Exception:" << ex.what());
45 return {};
46 }
47 return menuThresholds;
48 }
49
50 virtual std::optional<ExtraInfoRef> getMenuThresholdExtraInfo(const TrigConf::L1Menu& l1Menu) const {
51 // Retrieve the thresholds vector from L1 menu configuration
52 std::optional<ExtraInfoRef> menuExtraInfo;
53 try {
54 menuExtraInfo = ExtraInfoRef(l1Menu.thrExtraInfo().thrExtraInfo(N_ThresholdType));
55 }
56 catch (const std::exception& ex) {
57 ATH_MSG_ERROR("Failed to retrieve " << N_ThresholdType << " threshold extra info from L1 menu. Exception:" << ex.what());
58 return {};
59 }
60 return menuExtraInfo;
61 }
62
63 virtual StatusCode decorateThresholds(const EventContext& eventContext) const override {
64 // Retrieve the L1 menu configuration
66 ATH_CHECK(l1Menu.isValid());
67 std::optional<ThrVecRef> menuThresholds = getMenuThresholds(*l1Menu);
68 ATH_CHECK(menuThresholds.has_value());
69 std::optional<ExtraInfoRef> menuExtraInfo = getMenuThresholdExtraInfo(*l1Menu);
70 ATH_CHECK(menuExtraInfo.has_value());
71
72 // Decorate the RoI objects with threshold patterns
74 for (const T_RoI* roi: *thresholdPatterns) {
75 try {
76 thresholdPatterns(*roi) = getPattern(eventContext, *roi, menuThresholds.value().get(), menuExtraInfo.value().get());
77 }
78 catch (const std::exception& ex) {
79 ATH_MSG_ERROR("getPattern() for " << N_RoIContainer << " failed with exception: " << ex.what());
80 return StatusCode::FAILURE;
81 }
82 }
83
84 return StatusCode::SUCCESS;
85 }
86
88 virtual uint64_t getPattern(const EventContext& ctx,
89 const T_RoI& roi,
90 const ThrVec& menuThresholds,
91 const TrigConf::L1ThrExtraInfoBase& menuExtraInfo) const = 0;
92
93protected:
95 this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu",
96 "Name of the L1Menu object to read configuration from"};
97
99 this, "ThresholdPatternsDecorKey", std::string(N_RoIContainer)+".thresholdPatterns",
100 "Decoration for the threshold patterns"};
101};
102
103#endif // HLTSEEDING_IROITHRESHOLDSTOOL_H
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
Property holding a SG store/key/clid from which a ReadHandle is made.
Handle class for reading from StoreGate.
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Handle class for adding a decoration to an object.
DeclareInterfaceID(IRoIThresholdsTool, 1, 0)
virtual StatusCode decorateThresholds(const EventContext &eventContext) const =0
RoIThresholdsTool(const std::string &type, const std::string &name, const IInterface *parent)
std::reference_wrapper< const ThrVec > ThrVecRef
virtual std::optional< ThrVecRef > getMenuThresholds(const TrigConf::L1Menu &l1Menu) const
std::vector< std::shared_ptr< TrigConf::L1Threshold > > ThrVec
virtual StatusCode decorateThresholds(const EventContext &eventContext) const override
virtual StatusCode initialize() override
virtual std::optional< ExtraInfoRef > getMenuThresholdExtraInfo(const TrigConf::L1Menu &l1Menu) const
std::reference_wrapper< const TrigConf::L1ThrExtraInfoBase > ExtraInfoRef
virtual uint64_t getPattern(const EventContext &ctx, const T_RoI &roi, const ThrVec &menuThresholds, const TrigConf::L1ThrExtraInfoBase &menuExtraInfo) const =0
To be implemented by each template instance.
Property holding a SG store/key/clid from which a ReadHandle is made.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Handle class for adding a decoration to an object.
L1 menu configuration.
Definition L1Menu.h:28
const L1ThrExtraInfo & thrExtraInfo() const
Access to extra info for threshold types.
Definition L1Menu.cxx:307
std::vector< std::shared_ptr< TrigConf::L1Threshold > > thresholds() const
Access to list of all L1Thresholds.
Definition L1Menu.cxx:267
L1 extra information for certain threshold types.
const L1ThrExtraInfoBase & thrExtraInfo(const std::string &thrTypeName) const
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())