ATLAS Offline Software
Loading...
Searching...
No Matches
Run2ToRun3TrigNavConverterV2.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef TRIGNAVTOOLS_RUN2TORUN3TRIGNAVCONVERTERV2_H
5#define TRIGNAVTOOLS_RUN2TORUN3TRIGNAVCONVERTERV2_H
6
7// Framework includes
14#include "GaudiKernel/IClassIDSvc.h"
27
28// STL includes
29#include <string>
30#include <set>
31#include <map>
32
33// class of temporary objects used to integrate informations needed in conversion process
35{
37 bool isChild(const ConvProxy* other ) const; // returns true if the other isn children (any depth) to this node
38 bool isParent(const ConvProxy* other ) const;
39 bool mergeAllowed(const ConvProxy *other) const;
40 void merge(ConvProxy *other); // this will change the also the "other" so it knows it has been merged
41 const HLT::TriggerElement *te = nullptr;
42 std::vector<HLT::te_id_type> teIDs; // post merging will contain IDs of all merged TEs
43
44 std::set<ConvProxy *> children;
45 std::set<ConvProxy *> parents;
46 std::set<HLT::Identifier> runChains;
47 std::set<HLT::Identifier> passChains;
48 static const uint64_t MissingFEA = 0;
49 uint64_t feaHash = MissingFEA;
50
51 std::vector<HLT::TriggerElement::FeatureAccessHelper> features;
52 std::vector<HLT::TriggerElement::FeatureAccessHelper> rois;
53 std::vector<HLT::TriggerElement::FeatureAccessHelper> tracks;
54
57 std::vector<TrigCompositeUtils::Decision *> hNode;
58 std::string description() const;
59};
60
61using ConvProxySet_t = std::set<ConvProxy *>;
62using TEIdToChainsMap_t = std::map<HLT::te_id_type, std::set<HLT::Identifier>>;
63
69{
70public:
71 Run2ToRun3TrigNavConverterV2(const std::string &name, ISvcLocator *pSvcLocator);
72 virtual ~Run2ToRun3TrigNavConverterV2() override;
73
74 virtual StatusCode initialize() override;
75 virtual StatusCode execute(const EventContext &context) const override;
76 virtual StatusCode finalize() override;
77
78private:
79 // configurable properties & services
80 SG::ReadHandleKey<xAOD::TrigNavigation> m_trigNavKey{this, "TrigNavReadKey", "TrigNavigation"};
81 PublicToolHandle<Trig::TrigDecisionTool> m_tdt{this, "TrigDecisionTool", "", "When enabled read navigation from TDT/off by default"};
82 ServiceHandle<TrigConf::IHLTConfigSvc> m_configSvc{this, "TrigConfigSvc", "TrigConf::xAODConfigSvc/xAODConfigSvc", "Trigger configuration service"};
83 ServiceHandle<IClassIDSvc> m_clidSvc{this, "ClassIDSvc", "ClassIDSvc", "Service to translate CLID to class name"};
84
85 Gaudi::Property<bool> m_doSelfValidation{this, "doSelfValidation", false, "Run consistency checks after stages of conversion (slows down the alg)"};
86 Gaudi::Property<bool> m_doCompression{this, "doCompression", false, "Collapse navigation elements to save ouput space"};
87 Gaudi::Property<bool> m_doLinkFeatures{this, "doLinkFeatures", true, "Add links to objects, setting it false makes sense when running tests"};
88 Gaudi::Property<bool> m_includeTauTrackFeatures{this, "addTauTracks", false, "Add Tau Track collection as feature element"};
89 Gaudi::Property<size_t> m_hNodesPerProxyThreshold{this, "hNodesPerProxyThreshhold", 15, "Limit number of H nodes per TE (if exceeded conversion results in an error)"};
90 Gaudi::Property<std::vector<std::string>> m_chainsToSave{this, "Chains", {}, "If not specified, all chains are handled"};
91 Gaudi::Property<std::vector<std::string>> m_collectionsToSave{this, "Collections", {}};
92 Gaudi::Property<std::vector<std::string>> m_roisToSave{this, "Rois", {}};
93
94 SG::WriteHandleKey<xAOD::TrigCompositeContainer> m_trigOutputNavKey{this, "OutputNavKey", "HLTNav_R2ToR3Summary"};
95
96 StatusCode extractTECtoChainMapping(TEIdToChainsMap_t &allTES, TEIdToChainsMap_t &finalTEs) const;
97 mutable std::mutex m_configUpdateMutex;
99
100 StatusCode mirrorTEsStructure(ConvProxySet_t &, const HLT::TrigNavStructure &run2Nav) const;
101
102 StatusCode associateChainsToProxies(ConvProxySet_t &, const TEIdToChainsMap_t &) const;
103
104 StatusCode cureUnassociatedProxies(ConvProxySet_t &) const;
105
106 StatusCode removeUnassociatedProxies(ConvProxySet_t &) const;
107
108 StatusCode doCompression(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const;
109
110 StatusCode collapseFeaturesProxies(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const;
111
112 StatusCode collapseFeaturelessProxies(ConvProxySet_t &) const;
113
114 StatusCode removeTopologicalProxies(ConvProxySet_t & ) const;
115
116 template <typename MAP>
117 StatusCode collapseProxies(ConvProxySet_t &, MAP &) const;
118
119 // StatusCode fillRelevantFeatures(ConvProxySet_t& convProxies) const;
120 StatusCode fillRelevantFeatures(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const;
121 StatusCode fillRelevantTracks(ConvProxySet_t &convProxies) const;
122 StatusCode fillRelevantRois(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const;
123
124 StatusCode createIMHNodes(ConvProxySet_t &, xAOD::TrigCompositeContainer &, const EventContext &) const;
125 StatusCode createL1Nodes(const ConvProxySet_t &convProxies, xAOD::TrigCompositeContainer &decisions, const EventContext &context) const;
126 StatusCode createSFNodes(const ConvProxySet_t &, xAOD::TrigCompositeContainer &, const TEIdToChainsMap_t &finalTEs, const EventContext &context) const;
127 StatusCode updateTerminusNode(xAOD::TrigCompositeContainer &, const EventContext &context) const;
128
129 StatusCode linkFeaNode(ConvProxySet_t &convProxies, xAOD::TrigCompositeContainer &, const HLT::TrigNavStructure &run2Nav, const EventContext &context) const;
130 StatusCode linkRoiNode(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const;
131 StatusCode linkTrkNode(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const;
132
133 // helpers
135 std::vector<HLT::TriggerElement::FeatureAccessHelper> filterFEAs(const std::vector<HLT::TriggerElement::FeatureAccessHelper> &feaVector, const HLT::TrigNavStructure &navigationDecoder) const;
136 // produces summary of attached objects (FEAs) in a form of a hash
137 uint64_t feaToHash(const std::vector<HLT::TriggerElement::FeatureAccessHelper> &feaVector, const HLT::TriggerElement *te_ptr, const HLT::TrigNavStructure &navigationDecoder) const;
138
140 bool feaToSave(const HLT::TriggerElement::FeatureAccessHelper &fea, const std::string& sgName) const;
141
142 bool roiToSave(const HLT::TrigNavStructure &run2Nav, const HLT::TriggerElement::FeatureAccessHelper &fea) const;
143
144 // debugging aid, prints selected proxies
145 void printProxies(const ConvProxySet_t& proxies,
146 std::function<bool(const ConvProxy*)> selector=[](const ConvProxy*){return true;},
147 const std::vector<std::function<void(const ConvProxy*)>>& printers={}) const;
148
149 // useful printers
150 std::function<void(const ConvProxy*)> m_chainIdsPrinter = [&](const ConvProxy* p){ for (auto id: p->passChains ) ATH_MSG_DEBUG("chain id " << id); };
151 std::function<void(const ConvProxy*)> m_teIDPrinter = [&](const ConvProxy* p){ ATH_MSG_DEBUG("TE id " << TrigConf::HLTUtils::hash2string(p->te->getId())); };
152
153 // return 0 if it is not tpological, else the step before topo merge
154 size_t is2LegTopoChain(const TrigConf::HLTChain* ptrChain ) const;
155
156
157 std::size_t getFeaSize(const ConvProxy &) const;
158
162 std::pair<std::size_t, std::size_t> getHighestPtObject(const ConvProxy&,
163 const HLT::TrigNavStructure&) const;
164
165 // self validators
166 // they return failure if something is not ok
167 StatusCode allProxiesHaveChain(const ConvProxySet_t &) const;
168
169 StatusCode allProxiesConnected(const ConvProxySet_t &) const;
170
171 StatusCode numberOfHNodesPerProxyNotExcessive(const ConvProxySet_t &) const;
172
173 StatusCode noUnconnectedHNodes(const xAOD::TrigCompositeContainer &) const;
174
175 std::tuple<uint32_t, CLID, std::string> getSgKey(const HLT::TrigNavStructure &navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper &helper) const;
176
177 std::map<CLID, std::set<std::string>> m_collectionsToSaveDecoded;
178
179 std::vector<std::string> m_setRoiName;
180
195
198 CLID getExpectedParticleCLID(const std::string& teName) const;
199
200 // special cases that need separate method
201 // this is to cover chains like this one: HLT_mu4_j15_boffperf_split_dr05_dz02
202 // it's description in the TrigConfigSvc looks like it is 1 leg chain while in fact it is a two leg chain with jet +mu
203 // a special configuration decoding is used to restore multiplicity of 2
204 StatusCode bjetMuChainConfigDecoder(TEIdToChainsMap_t &allTES, TEIdToChainsMap_t &finalTEs, const TrigConf::HLTChain* ptrChain) const;
205
206
207};
208
209#endif // TRIGNAVTOOLS_RUN2TORUN3TRIGNAVCONVERTERV2_H
#define ATH_MSG_DEBUG(x)
uint32_t CLID
The Class ID type.
std::map< HLT::te_id_type, std::set< HLT::Identifier > > TEIdToChainsMap_t
std::set< ConvProxy * > ConvProxySet_t
Property holding a SG store/key/clid from which a ReadHandle is made.
Property holding a SG store/key/clid from which a WriteHandle is made.
An algorithm that can be simultaneously executed in multiple threads.
the FeatureAccessHelper is a class used to keep track of features attached to this TE.
TriggerElement is the basic ingreedient of the interface between HLT algorithms and the navigation It...
StatusCode createIMHNodes(ConvProxySet_t &, xAOD::TrigCompositeContainer &, const EventContext &) const
StatusCode linkRoiNode(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const
Gaudi::Property< std::vector< std::string > > m_chainsToSave
std::function< void(const ConvProxy *)> m_teIDPrinter
PublicToolHandle< Trig::TrigDecisionTool > m_tdt
StatusCode extractTECtoChainMapping(TEIdToChainsMap_t &allTES, TEIdToChainsMap_t &finalTEs) const
Gaudi::Property< std::vector< std::string > > m_roisToSave
StatusCode collapseFeaturesProxies(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const
virtual StatusCode execute(const EventContext &context) const override
ServiceHandle< IClassIDSvc > m_clidSvc
StatusCode cureUnassociatedProxies(ConvProxySet_t &) const
StatusCode updateTerminusNode(xAOD::TrigCompositeContainer &, const EventContext &context) const
StatusCode mirrorTEsStructure(ConvProxySet_t &, const HLT::TrigNavStructure &run2Nav) const
StatusCode createSFNodes(const ConvProxySet_t &, xAOD::TrigCompositeContainer &, const TEIdToChainsMap_t &finalTEs, const EventContext &context) const
StatusCode removeTopologicalProxies(ConvProxySet_t &) const
Gaudi::Property< size_t > m_hNodesPerProxyThreshold
SG::ReadHandleKey< xAOD::TrigNavigation > m_trigNavKey
Run2ToRun3TrigNavConverterV2(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode removeUnassociatedProxies(ConvProxySet_t &) const
StatusCode linkFeaNode(ConvProxySet_t &convProxies, xAOD::TrigCompositeContainer &, const HLT::TrigNavStructure &run2Nav, const EventContext &context) const
StatusCode associateChainsToProxies(ConvProxySet_t &, const TEIdToChainsMap_t &) const
CLID getExpectedParticleCLID(const std::string &teName) const
Helper function to determine expected particle CLID based on TE name Returns 0 if no specific type is...
StatusCode bjetMuChainConfigDecoder(TEIdToChainsMap_t &allTES, TEIdToChainsMap_t &finalTEs, const TrigConf::HLTChain *ptrChain) const
std::pair< std::size_t, std::size_t > getHighestPtObject(const ConvProxy &, const HLT::TrigNavStructure &) const
Return pair of indices (feature index in proxy->features vector, object index) identifying the highes...
StatusCode noUnconnectedHNodes(const xAOD::TrigCompositeContainer &) const
bool feaToSave(const HLT::TriggerElement::FeatureAccessHelper &fea, const std::string &sgName) const
uint64_t feaToHash(const std::vector< HLT::TriggerElement::FeatureAccessHelper > &feaVector, const HLT::TriggerElement *te_ptr, const HLT::TrigNavStructure &navigationDecoder) const
returns true if this particular feature is to be saved (linked)
size_t is2LegTopoChain(const TrigConf::HLTChain *ptrChain) const
bool roiToSave(const HLT::TrigNavStructure &run2Nav, const HLT::TriggerElement::FeatureAccessHelper &fea) const
StatusCode doCompression(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const
StatusCode linkTrkNode(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const
StatusCode numberOfHNodesPerProxyNotExcessive(const ConvProxySet_t &) const
void printProxies(const ConvProxySet_t &proxies, std::function< bool(const ConvProxy *)> selector=[](const ConvProxy *){return true;}, const std::vector< std::function< void(const ConvProxy *)> > &printers={}) const
StatusCode fillRelevantTracks(ConvProxySet_t &convProxies) const
Gaudi::Property< bool > m_includeTauTrackFeatures
std::tuple< uint32_t, CLID, std::string > getSgKey(const HLT::TrigNavStructure &navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper &helper) const
StatusCode fillRelevantRois(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const
StatusCode allProxiesHaveChain(const ConvProxySet_t &) const
SG::WriteHandleKey< xAOD::TrigCompositeContainer > m_trigOutputNavKey
StatusCode createL1Nodes(const ConvProxySet_t &convProxies, xAOD::TrigCompositeContainer &decisions, const EventContext &context) const
Gaudi::Property< std::vector< std::string > > m_collectionsToSave
std::function< void(const ConvProxy *)> m_chainIdsPrinter
std::map< CLID, std::set< std::string > > m_collectionsToSaveDecoded
StatusCode fillRelevantFeatures(ConvProxySet_t &convProxies, const HLT::TrigNavStructure &run2Nav) const
std::size_t getFeaSize(const ConvProxy &) const
virtual StatusCode initialize() override
StatusCode collapseFeaturelessProxies(ConvProxySet_t &) const
ServiceHandle< TrigConf::IHLTConfigSvc > m_configSvc
StatusCode allProxiesConnected(const ConvProxySet_t &) const
StatusCode collapseProxies(ConvProxySet_t &, MAP &) const
std::vector< HLT::TriggerElement::FeatureAccessHelper > filterFEAs(const std::vector< HLT::TriggerElement::FeatureAccessHelper > &feaVector, const HLT::TrigNavStructure &navigationDecoder) const
< both method skip TrigPassBits
Property holding a SG store/key/clid from which a ReadHandle is made.
Property holding a SG store/key/clid from which a WriteHandle is made.
HLT chain configuration information.
static const std::string hash2string(HLTHash, const std::string &category="TE")
hash function translating identifiers into names (via internal dictionary)
Definition merge.py:1
TrigCompositeContainer_v1 TrigCompositeContainer
Declare the latest version of the container.
std::set< ConvProxy * > children
std::vector< TrigCompositeUtils::Decision * > hNode
std::vector< HLT::te_id_type > teIDs
TrigCompositeUtils::Decision * imNode
static const uint64_t MissingFEA
std::vector< HLT::TriggerElement::FeatureAccessHelper > tracks
bool mergeAllowed(const ConvProxy *other) const
std::set< HLT::Identifier > runChains
std::vector< HLT::TriggerElement::FeatureAccessHelper > features
std::set< HLT::Identifier > passChains
std::set< ConvProxy * > parents
const HLT::TriggerElement * te
bool isParent(const ConvProxy *other) const
bool isChild(const ConvProxy *other) const
std::vector< HLT::TriggerElement::FeatureAccessHelper > rois
ConvProxy(const HLT::TriggerElement *te)
std::string description() const
TrigCompositeUtils::Decision * l1Node