ATLAS Offline Software
Loading...
Searching...
No Matches
Trig::CacheGlobalMemory Class Reference

#include <CacheGlobalMemory.h>

Inheritance diagram for Trig::CacheGlobalMemory:

Classes

class  AnyTypeDeleter

Public Member Functions

 CacheGlobalMemory ()=default
 ~CacheGlobalMemory ()=default
const Trig::ChainGroupcreateChainGroup (const std::vector< std::string > &patterns, const std::string &alias="", TrigDefs::Group props=TrigDefs::Group::Default) const
 creates new chain group
void update (const TrigConf::HLTChainList *confChains, const TrigConf::CTPConfig *ctp)
 Updates configuration of the chain groups (i.e.
const LVL1CTP::Lvl1Itemitem (const std::string &name) const
 CTP item from given name.
const LVL1CTP::Lvl1Itemitem (const TrigConf::TriggerItem &i) const
 CTP item from given config item.
const TrigConf::TriggerItemconfig_item (const std::string &name) const
 CTP config item from given name.
float item_prescale (int ctpid) const
 Prescale for CPT item.
const HLT::Chainchain (const std::string &name) const
 HLT chain object from given name (0 pointer returned if no match)
const HLT::Chainchain (const TrigConf::HLTChain &chIt) const
 HLT chain object from given config chain.
const TrigConf::HLTChainconfig_chain (const std::string &name) const
 HLT config chain from given name.
const HLT::TrigNavStructurenavigation () const
void navigation (HLT::TrigNavStructure *nav)
 sets navigation object pointer
const Trig::ChainGroupgetChainGroup (const std::vector< std::string > &triggerNames, TrigDefs::Group props) const
size_t nChainGroups () const
const std::map< std::string, std::vector< std::string > > & getStreams () const
bool assert_decision () const
 checks if new event arrived with the decision Need to use before any call to CacheGlobalMemory.
void reset_decision ()
 invalidate previously unpacked decision Needs to be called at the start of a new event.
void setStore (asg::EventStoreType *store)
 Set the event store to be used by the object.
const asg::EventStoreTypestore () const
 Get the event store that the object is using.
void setDecisionKeyPtr (SG::ReadHandleKey< xAOD::TrigDecision > *k)
void setRun2NavigationKeyPtr (SG::ReadHandleKey< xAOD::TrigNavigation > *k)
void setRun3NavigationKeyPtr (SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > *k)
const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & getRun3NavigationKey () const
const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > * getRun3NavigationKeyPtr () const
void setOldDecisionKeyPtr (SG::ReadHandleKey< TrigDec::TrigDecision > *k)
void setOldEventInfoKeyPtr (SG::ReadHandleKey< EventInfo > *k)
const SG::ReadHandleKey< xAOD::TrigDecision > * xAODTrigDecisionKey () const
template<class T>
void deleteAtTheEndOfEvent (T t) const
MsgStream & msg () const
MsgStream & msg (const MSG::Level lvl) const
bool msgLvl (const MSG::Level lvl) const

Private Types

typedef unsigned CTPID
typedef unsigned CHAIN_COUNTER
typedef std::unordered_map< std::string, const TrigConf::HLTChain * > ChainHashMap_t

Private Member Functions

StatusCode unpackDecision (const EventContext &ctx)
 unpacks whole trigger decision for the event
StatusCode unpackNavigation ()
 unpacks HLT navigation structure (object access)
void updateChainGroup (Trig::ChainGroup &chainGroup, TrigDefs::Group props=TrigDefs::Group::Default)
 unpacks everything that belongs to a ChainGroup

Private Attributes

const asg::EventStoreTypem_store {nullptr}
 Pointer to the event store in use.
std::unique_ptr< IDecisionUnpacker > m_unpacker ATLAS_THREAD_SAFE
 Trigger decision unpacker helper.
bool m_decisionUnpacked {false}
 Was decision unpacked for this event?
bool m_navigationUnpacked {false}
 Was navigation unpacked for this event?
HLT::TrigNavStructurem_navigation {nullptr}
 Navigation owned by CGM.
std::map< std::vector< std::string >, Trig::ChainGroup > m_chainGroups ATLAS_THREAD_SAFE
 primary storage for chain groups
std::map< std::vector< std::string >, Trig::ChainGroup * > m_chainGroupsRef ATLAS_THREAD_SAFE
 this map keeps the chain group more than once i.e.
std::unordered_map< std::string, const LVL1CTP::Lvl1Item * > m_itemsByName
 items keyed by configuration name (chainging every event)
std::unordered_map< std::string, const HLT::Chain * > m_l2chainsByName
 L2 chains keyed by chain name (chainging every event)
std::unordered_map< std::string, const HLT::Chain * > m_efchainsByName
 L2 chains keyed by chain name (chainging every event)
std::map< CTPID, LVL1CTP::Lvl1Itemm_itemsCache
 cache of all CTP items possible (given configuration)
std::map< CHAIN_COUNTER, HLT::Chainm_l2chainsCache
 cache of all L2 chains possible (given configuration)
std::map< CHAIN_COUNTER, HLT::Chainm_efchainsCache
 cache of all EF chains possible (given configuration)
std::map< std::string, std::vector< std::string > > m_groups
 mapping from group to list of chains
std::map< std::string, std::vector< std::string > > m_streams
 mapping from stream to list of chains
const TrigConf::ItemContainerm_confItems {nullptr}
 items configuration
const TrigConf::HLTChainListm_confChains {nullptr}
 all chains configuration
SG::ReadHandleKey< xAOD::TrigDecision > * m_decisionKeyPtr {nullptr}
 Parent TDT's read handle key.
SG::ReadHandleKey< TrigDec::TrigDecision > * m_oldDecisionKeyPtr {nullptr}
 Parent TDT's read handle key.
SG::ReadHandleKey< EventInfo > * m_oldEventInfoKeyPtr {nullptr}
 Parent TDT's read handle key.
SG::ReadHandleKey< xAOD::TrigNavigation > * m_run2NavigationKeyPtr {nullptr}
 Parent TDT's read handle key.
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > * m_run3NavigationKeyPtr {nullptr}
 Parent TDT's read handle key.
ChainHashMap_t m_mConfChains
 map of conf chains
char m_bgCode {0}
 the encoded bunchgroup information
AnyTypeDeleter m_deleteAtEndOfEvent ATLAS_THREAD_SAFE
std::recursive_mutex m_cgmMutex
 R3 MT protection only against –threads > 1.

Friends

class DecisionAccess

Detailed Description

Definition at line 67 of file CacheGlobalMemory.h.

Member Typedef Documentation

◆ CHAIN_COUNTER

typedef unsigned Trig::CacheGlobalMemory::CHAIN_COUNTER
private

Definition at line 204 of file CacheGlobalMemory.h.

◆ ChainHashMap_t

typedef std::unordered_map<std::string, const TrigConf::HLTChain*> Trig::CacheGlobalMemory::ChainHashMap_t
private

Definition at line 225 of file CacheGlobalMemory.h.

◆ CTPID

typedef unsigned Trig::CacheGlobalMemory::CTPID
private

Definition at line 203 of file CacheGlobalMemory.h.

Constructor & Destructor Documentation

◆ CacheGlobalMemory()

Trig::CacheGlobalMemory::CacheGlobalMemory ( )
default

◆ ~CacheGlobalMemory()

Trig::CacheGlobalMemory::~CacheGlobalMemory ( )
default

Member Function Documentation

◆ assert_decision()

bool Trig::CacheGlobalMemory::assert_decision ( ) const

checks if new event arrived with the decision Need to use before any call to CacheGlobalMemory.

It is marked const since it is frequently called from const methods and is internally locked.

Returns
true if all went fine about decision, false otherwise

Definition at line 266 of file CacheGlobalMemory.cxx.

266 {
267 std::lock_guard<std::recursive_mutex> lock(m_cgmMutex);
268 ATH_MSG_VERBOSE("asserting decision with unpacker " << m_unpacker.get());
269
270 // here we unpack the decision. Note: the navigation will be unpacked only on demand (see navigation())
271 bool contains_xAOD_decision = false;
272
273#ifndef XAOD_ANALYSIS // Full Athena
274 bool is_l1result_configured = false;
275 bool contains_decision = false;
276 bool contains_old_event_info = false;
277#endif
278
279 const EventContext& context = Gaudi::Hive::currentContext();
280 if(!m_unpacker){
281 ATH_MSG_INFO("decision not set on first (?) assert. deciding how to unpack");
282
283 //Lukas 26-06-2015: we're hard coding the configuration for now
284 //but we have setters and getters for m_trigDecisionKey (as CGM datamemer)
285 //so we could in the future use the ones set by the python configuration
286 //we're hardcoding in order not to require python configuration changes
287
288 if (!m_decisionKeyPtr->empty()) {
289 SG::ReadHandle<xAOD::TrigDecision> decisionReadHandle = SG::makeHandle(*m_decisionKeyPtr, context);
290 contains_xAOD_decision = decisionReadHandle.isValid();
291 }
292
293#ifndef XAOD_ANALYSIS // Full Athena
294
295 if (!m_oldDecisionKeyPtr->empty()) {
296 SG::ReadHandle<TrigDec::TrigDecision> oldDecisionReadHandle = SG::makeHandle(*m_oldDecisionKeyPtr, context);
297 contains_decision = oldDecisionReadHandle.isValid();
298 if (contains_decision) {
299 is_l1result_configured = oldDecisionReadHandle->getL1Result().isConfigured();
300 }
301 }
302
303 if (!m_oldEventInfoKeyPtr->empty()) {
304 SG::ReadHandle<EventInfo> oldEventInfoHandle = SG::makeHandle(*m_oldEventInfoKeyPtr, context);
305 contains_old_event_info = oldEventInfoHandle.isValid();
306 }
307
308 // January 2020: Note, switched the order here. DecisionUnpackerStandalone is given preference
309 // over DecisionUnpackerAthena
310 if ( contains_xAOD_decision ){
311 ATH_MSG_INFO("SG contains xAOD decision, use DecisionUnpackerStandalone");
312 m_unpacker = std::make_unique<DecisionUnpackerStandalone>
315 }
316 else if( is_l1result_configured ){
317 ATH_MSG_INFO("SG contains AOD decision, use DecisionUnpackerAthena");
318 m_unpacker = std::make_unique<DecisionUnpackerAthena>(CxxUtils::as_const_ptr(m_oldDecisionKeyPtr));
319 }
320 else if (contains_old_event_info) {
321 ATH_MSG_INFO("SG contains NO(!) L1Result in the AOD TrigDecision, assuming also no HLTResult. Read from EventInfo");
322 m_unpacker = std::make_unique<DecisionUnpackerEventInfo>(CxxUtils::as_const_ptr(m_oldEventInfoKeyPtr));
323 }
324#else
325 if ( contains_xAOD_decision ){
326 ATH_MSG_INFO("SG contains xAOD decision, use DecisionUnpackerStandalone");
327 m_unpacker = std::make_unique<DecisionUnpackerStandalone>(m_decisionKeyPtr, m_run2NavigationKeyPtr);
328 }
329#endif
330
331 }//if(!m_unpacker)
332
333 // cppcheck-suppress duplicateCondition
334 if(!m_unpacker){
335 std::stringstream extra;
336#ifndef XAOD_ANALYSIS // Full Athena
337 extra << ". Looked for old TrigDec::TrigDecision? "
338 << (m_oldDecisionKeyPtr->empty() ? "NO" : "YES")
339 << ", has TrigDec::TrigDecision? "
340 << (contains_decision ? "YES" : "NO")
341 << ", TrigDec::TrigDecision has L1? "
342 << (is_l1result_configured ? "YES" : "NO")
343 << ". Looked for old EventInfo? "
344 << (m_oldEventInfoKeyPtr->empty() ? "NO" : "YES")
345 << ", has old EventInto? "
346 << (contains_old_event_info ? "YES" : "NO");
347#endif
348 ATH_MSG_ERROR("No source of Trigger Decision in file. "
349 << "(Looked for xAOD::TrigDecision? "
350 << (m_decisionKeyPtr->empty() ? "NO" : "YES")
351 << ", has xAOD::TrigDecision? "
352 << (contains_xAOD_decision ? "YES" : "NO")
353 << extra.str()
354 << ". Check UseRun1DecisionFormat and UseOldEventInfoDecisionFormat flags if reading pre-xAOD or BS input).");
355 throw std::runtime_error("Trig::CacheGlobalMemory::assert_decision(): No source of Trigger Decision in file.");
356 }
357
358 if( !m_decisionUnpacked ) {
359 // this method is locked
360 auto nc_this ATLAS_THREAD_SAFE = const_cast<Trig::CacheGlobalMemory*>(this);
361 if( nc_this->unpackDecision(context).isFailure() ) {
362 ATH_MSG_WARNING( "TrigDecion object incorrect (for chains)" );
363 }
364 else{
365 ATH_MSG_VERBOSE("unpacked decision");
366 }
367 }
368
369 return true;
370}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
virtual bool isValid() override final
Can the handle be successfully dereferenced?
std::recursive_mutex m_cgmMutex
R3 MT protection only against –threads > 1.
SG::ReadHandleKey< TrigDec::TrigDecision > * m_oldDecisionKeyPtr
Parent TDT's read handle key.
bool m_decisionUnpacked
Was decision unpacked for this event?
SG::ReadHandleKey< xAOD::TrigDecision > * m_decisionKeyPtr
Parent TDT's read handle key.
SG::ReadHandleKey< xAOD::TrigNavigation > * m_run2NavigationKeyPtr
Parent TDT's read handle key.
std::unique_ptr< IDecisionUnpacker > m_unpacker ATLAS_THREAD_SAFE
Trigger decision unpacker helper.
SG::ReadHandleKey< EventInfo > * m_oldEventInfoKeyPtr
Parent TDT's read handle key.
const T * as_const_ptr(const T *p)
Helper for getting a const version of a pointer.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())

◆ chain() [1/2]

const HLT::Chain * Trig::CacheGlobalMemory::chain ( const std::string & name) const

HLT chain object from given name (0 pointer returned if no match)

Definition at line 201 of file CacheGlobalMemory.cxx.

201 {
202 std::lock_guard<std::recursive_mutex> lock(m_cgmMutex);
203 auto i = m_efchainsByName.find(name);
204 if (i != m_efchainsByName.end()) {
205 return i->second;
206 }
207 i = m_l2chainsByName.find(name);
208 if ( i != m_l2chainsByName.end() ) {
209 return i->second;
210 }
211 return nullptr;
212}
std::unordered_map< std::string, const HLT::Chain * > m_efchainsByName
L2 chains keyed by chain name (chainging every event)
std::unordered_map< std::string, const HLT::Chain * > m_l2chainsByName
L2 chains keyed by chain name (chainging every event)

◆ chain() [2/2]

const HLT::Chain * Trig::CacheGlobalMemory::chain ( const TrigConf::HLTChain & chIt) const

HLT chain object from given config chain.

Definition at line 214 of file CacheGlobalMemory.cxx.

214 {
215 return chain(ch.chain_name());
216}
const HLT::Chain * chain(const std::string &name) const
HLT chain object from given name (0 pointer returned if no match)

◆ config_chain()

const TrigConf::HLTChain * Trig::CacheGlobalMemory::config_chain ( const std::string & name) const

HLT config chain from given name.

Definition at line 218 of file CacheGlobalMemory.cxx.

218 {
219 ChainHashMap_t::const_iterator f = m_mConfChains.find(name);
220 if ( f == m_mConfChains.end() ){
221 return nullptr;
222 }
223 return f->second;
224}
ChainHashMap_t m_mConfChains
map of conf chains

◆ config_item()

const TrigConf::TriggerItem * Trig::CacheGlobalMemory::config_item ( const std::string & name) const

CTP config item from given name.

Definition at line 234 of file CacheGlobalMemory.cxx.

234 {
235 TrigConf::ItemContainer::const_iterator f = find_if(m_confItems->begin(), m_confItems->end(), itemByName(name));
236 if ( f == m_confItems->end() )
237 return nullptr;
238 return *f;
239}
const TrigConf::ItemContainer * m_confItems
items configuration

◆ createChainGroup()

const Trig::ChainGroup * Trig::CacheGlobalMemory::createChainGroup ( const std::vector< std::string > & patterns,
const std::string & alias = "",
TrigDefs::Group props = TrigDefs::Group::Default ) const

creates new chain group

Parameters
patternslist of patterns i.e. regexes, if chain groups already exists it is just given back The chain group is considered to exist if the patterns are the same. Patterns are stored and made unique i.e. "EF_mu4", "EF_mu6" is the same as "EF_mu6", "EF_mu4". It is not the same though as "EF_mu.*" even if in particular case that would mean the same 2 chains.
aliasis the short human readable name for the triggers which are in the group i.e. myMuons
propsare additional properties for the chain group creation (e.g. disable regex parsing)

Definition at line 54 of file CacheGlobalMemory.cxx.

56 {
57 // mutex in case this is called directly
58 std::lock_guard<std::recursive_mutex> lock(m_cgmMutex);
59 auto nc_this ATLAS_THREAD_SAFE = const_cast<Trig::CacheGlobalMemory*>(this);
60
61 // create a proper key
62 std::vector< std::string > key=Trig::keyWrap(triggerNames);
63
64 auto [itr, inserted] = m_chainGroups.try_emplace (key, /*ChainGroup*/ key, *nc_this);
65 if (inserted) {
66 nc_this->updateChainGroup(itr->second, props);
67 m_chainGroupsRef[key] = &(itr->second);
68 }
69 // this overwrites the pointer in the map each time in case the alias needs defining
70 if (!alias.empty()) {
71 std::vector< std::string > key_alias=Trig::keyWrap(Trig::convertStringToVector(alias));
72 auto [alias_itr, alias_inserted] = m_chainGroupsRef.try_emplace (key_alias, &m_chainGroups.at(key));
73 if (!alias_inserted && alias_itr->second!=m_chainGroupsRef[key]) {
74 throw std::runtime_error("TrigDecisionTool: The alias "+alias+
75 " already exists and cannot be overwritten.");
76 }
77 }
78
79 return m_chainGroupsRef[key];
80}
std::vector< std::string > convertStringToVector(const std::string &triggerNames)
makes a split of list of chains into the vector of chains
std::vector< std::string > keyWrap(const std::vector< std::string > &triggerNames)
normalizes the list of triggers (patterns) by sorting and uniquing them

◆ deleteAtTheEndOfEvent()

template<class T>
void Trig::CacheGlobalMemory::deleteAtTheEndOfEvent ( T t) const
inline

Definition at line 156 of file CacheGlobalMemory.h.

156{ m_deleteAtEndOfEvent.insert(t); }

◆ getChainGroup()

const Trig::ChainGroup * Trig::CacheGlobalMemory::getChainGroup ( const std::vector< std::string > & triggerNames,
TrigDefs::Group props ) const

Definition at line 83 of file CacheGlobalMemory.cxx.

85{
86 std::lock_guard<std::recursive_mutex> lock(m_cgmMutex);
87 auto searchRes = m_chainGroupsRef.find(triggerNames);
88
89 if ( searchRes != m_chainGroupsRef.end()) {
90 return searchRes->second;
91 }
92 return createChainGroup(triggerNames, /*alias*/{}, props);
93}
const Trig::ChainGroup * createChainGroup(const std::vector< std::string > &patterns, const std::string &alias="", TrigDefs::Group props=TrigDefs::Group::Default) const
creates new chain group

◆ getRun3NavigationKey()

const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > & Trig::CacheGlobalMemory::getRun3NavigationKey ( ) const
inline

Definition at line 144 of file CacheGlobalMemory.h.

144{ return *m_run3NavigationKeyPtr; }
SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > * m_run3NavigationKeyPtr
Parent TDT's read handle key.

◆ getRun3NavigationKeyPtr()

const SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > * Trig::CacheGlobalMemory::getRun3NavigationKeyPtr ( ) const
inline

Definition at line 145 of file CacheGlobalMemory.h.

145{ return m_run3NavigationKeyPtr; }

◆ getStreams()

const std::map< std::string, std::vector< std::string > > & Trig::CacheGlobalMemory::getStreams ( ) const
inline

Definition at line 119 of file CacheGlobalMemory.h.

119{return m_streams;};
std::map< std::string, std::vector< std::string > > m_streams
mapping from stream to list of chains

◆ item() [1/2]

const LVL1CTP::Lvl1Item * Trig::CacheGlobalMemory::item ( const std::string & name) const

CTP item from given name.

Definition at line 260 of file CacheGlobalMemory.cxx.

260 {
261 if ( m_itemsByName.find(name) != m_itemsByName.end())
262 return m_itemsByName.find(name)->second;
263 return nullptr;
264}
std::unordered_map< std::string, const LVL1CTP::Lvl1Item * > m_itemsByName
items keyed by configuration name (chainging every event)

◆ item() [2/2]

const LVL1CTP::Lvl1Item * Trig::CacheGlobalMemory::item ( const TrigConf::TriggerItem & i) const

CTP item from given config item.

Definition at line 252 of file CacheGlobalMemory.cxx.

252 {
253 return item(i.name());
254 // unsigned cntr = i.ctpId();
255 // if ( m_items.find(cntr) != m_items.end())
256 // return m_items.find(cntr)->second;
257 // return 0;
258}
const LVL1CTP::Lvl1Item * item(const std::string &name) const
CTP item from given name.

◆ item_prescale()

float Trig::CacheGlobalMemory::item_prescale ( int ctpid) const

Prescale for CPT item.

Definition at line 241 of file CacheGlobalMemory.cxx.

241 {
242 // Cannot be locked (CacheGlobalMemory::update > createChainGroup > ChainGroup::update > calculatePrescale > L1Prescale > CacheGlobalMemory::item_prescale)
243 // find items in cache
244 if ( m_itemsCache.count(ctpid) == 0 ) {
245 ATH_MSG_ERROR( "item of CTP: " << ctpid
246 << " is not present in the configuration" );
247 return 0;
248 }
249 return m_itemsCache.find(ctpid)->second.prescaleFactor();
250}
std::map< CTPID, LVL1CTP::Lvl1Item > m_itemsCache
cache of all CTP items possible (given configuration)

◆ msg() [1/2]

MsgStream & Trig::Logger::msg ( ) const
inlineinherited

Definition at line 29 of file Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/Logger.h.

29 {
30 if (s_logger) return s_logger->msg();
31 else throw std::runtime_error("TrigDecisionTool Logger not initialized.");
32 }

◆ msg() [2/2]

MsgStream & Trig::Logger::msg ( const MSG::Level lvl) const
inlineinherited

◆ msgLvl()

bool Trig::Logger::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 34 of file Trigger/TrigAnalysis/TrigDecisionTool/TrigDecisionTool/Logger.h.

34{ return s_logger && s_logger->msgLvl(lvl); }

◆ navigation() [1/2]

const HLT::TrigNavStructure * Trig::CacheGlobalMemory::navigation ( ) const
inline

< gives back pointer to navigation object (unpacking if necessary)

Definition at line 104 of file CacheGlobalMemory.h.

104 {
106 // CGM is slot-specific and unpackNavigation is locked
107 auto cgm ATLAS_THREAD_SAFE = const_cast<CacheGlobalMemory*>(this);
108 if(cgm->unpackNavigation().isFailure()){
109 ATH_MSG_WARNING("unpack Navigation failed");
110 }
111 }
112 return m_navigation;
113 }
bool m_navigationUnpacked
Was navigation unpacked for this event?
HLT::TrigNavStructure * m_navigation
Navigation owned by CGM.

◆ navigation() [2/2]

void Trig::CacheGlobalMemory::navigation ( HLT::TrigNavStructure * nav)
inline

sets navigation object pointer

Definition at line 114 of file CacheGlobalMemory.h.

◆ nChainGroups()

size_t Trig::CacheGlobalMemory::nChainGroups ( ) const

Definition at line 97 of file CacheGlobalMemory.cxx.

98{
99 std::lock_guard<std::recursive_mutex> lock(m_cgmMutex);
100 return m_chainGroupsRef.size();
101}

◆ reset_decision()

void Trig::CacheGlobalMemory::reset_decision ( )

invalidate previously unpacked decision Needs to be called at the start of a new event.

Definition at line 372 of file CacheGlobalMemory.cxx.

372 {
373 m_decisionUnpacked = false;
374 m_navigationUnpacked = false;
375}

◆ setDecisionKeyPtr()

void Trig::CacheGlobalMemory::setDecisionKeyPtr ( SG::ReadHandleKey< xAOD::TrigDecision > * k)
inline

Definition at line 141 of file CacheGlobalMemory.h.

141{ m_decisionKeyPtr = k; }

◆ setOldDecisionKeyPtr()

void Trig::CacheGlobalMemory::setOldDecisionKeyPtr ( SG::ReadHandleKey< TrigDec::TrigDecision > * k)
inline

Definition at line 148 of file CacheGlobalMemory.h.

◆ setOldEventInfoKeyPtr()

void Trig::CacheGlobalMemory::setOldEventInfoKeyPtr ( SG::ReadHandleKey< EventInfo > * k)
inline

Definition at line 149 of file CacheGlobalMemory.h.

◆ setRun2NavigationKeyPtr()

void Trig::CacheGlobalMemory::setRun2NavigationKeyPtr ( SG::ReadHandleKey< xAOD::TrigNavigation > * k)
inline

Definition at line 142 of file CacheGlobalMemory.h.

◆ setRun3NavigationKeyPtr()

void Trig::CacheGlobalMemory::setRun3NavigationKeyPtr ( SG::ReadHandleKey< TrigCompositeUtils::DecisionContainer > * k)
inline

Definition at line 143 of file CacheGlobalMemory.h.

◆ setStore()

void Trig::CacheGlobalMemory::setStore ( asg::EventStoreType * store)
inline

Set the event store to be used by the object.

Definition at line 137 of file CacheGlobalMemory.h.

137{ m_store = store; }
const asg::EventStoreType * m_store
Pointer to the event store in use.
const asg::EventStoreType * store() const
Get the event store that the object is using.

◆ store()

const asg::EventStoreType * Trig::CacheGlobalMemory::store ( ) const
inline

Get the event store that the object is using.

Definition at line 139 of file CacheGlobalMemory.h.

139{ return m_store; }

◆ unpackDecision()

StatusCode Trig::CacheGlobalMemory::unpackDecision ( const EventContext & ctx)
private

unpacks whole trigger decision for the event

Definition at line 377 of file CacheGlobalMemory.cxx.

377 {
378 // locked already through assert_decision
379
380 ATH_MSG_DEBUG("Unpacking TrigDecision");
381 m_decisionUnpacked = true;
382 m_deleteAtEndOfEvent.clear();
383
384 bool unpackHLT = ( m_confChains != nullptr );
385 ATH_CHECK( m_unpacker->unpackDecision( ctx, m_itemsByName, m_itemsCache,
388 m_bgCode, unpackHLT ) );
389 return StatusCode::SUCCESS;
390}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
char m_bgCode
the encoded bunchgroup information
std::map< CHAIN_COUNTER, HLT::Chain > m_efchainsCache
cache of all EF chains possible (given configuration)
const TrigConf::HLTChainList * m_confChains
all chains configuration
std::map< CHAIN_COUNTER, HLT::Chain > m_l2chainsCache
cache of all L2 chains possible (given configuration)

◆ unpackNavigation()

StatusCode Trig::CacheGlobalMemory::unpackNavigation ( )
private

unpacks HLT navigation structure (object access)

Definition at line 393 of file CacheGlobalMemory.cxx.

393 {
394 std::lock_guard<std::recursive_mutex> lock(m_cgmMutex);
395
397
398 // Navigation
399 // protect from unpacking in case HLT was not run
400 // (i.e. configuration chains are 0)
401 if( m_confChains == nullptr ) {
402 return StatusCode::SUCCESS;
403 }
404
405 // Failing to unpack the navigation is not a failure, as it may be missing
406 // from the xAOD file:
407 const EventContext& context = Gaudi::Hive::currentContext();
408 if( ! m_unpacker->unpackNavigation( context, m_navigation ).isSuccess() ) {
409 [[maybe_unused]] static std::atomic<bool> warningPrinted =
410 [&]() { ATH_MSG_WARNING( "TrigNavigation unpacking failed" );
411 return true; }();
412 }
413 // Return gracefully:
414 return StatusCode::SUCCESS;
415}

◆ update()

void Trig::CacheGlobalMemory::update ( const TrigConf::HLTChainList * confChains,
const TrigConf::CTPConfig * ctp )

Updates configuration of the chain groups (i.e.

regexes are reapplied to new set of chains)

Definition at line 109 of file CacheGlobalMemory.cxx.

110 {
111 std::lock_guard<std::recursive_mutex> lock(m_cgmMutex);
112 ATH_MSG_DEBUG( "Updating configuration" );
113 // store a global reference to the initial answer
114 m_confChains = confChains;
115 if ( !ctp ) {
116 ATH_MSG_WARNING( "No LVL1 config, something went wrong, TDT will "
117 "not attempt accessing HLT too" );
118 m_confItems = nullptr;
119 return;
120 }
121 m_confItems = &(ctp->menu().items());
122
123 // rebuild all the caches with decision information
124
125 //clear cache completely because underlying config objects might have changed
126 m_itemsCache.clear();
127
128 const std::vector<float>& prescales = ctp->prescaleSet().prescales_float();
129 for(auto item : ctp->menu().items() ) {
130 const auto ctpid = item->ctpId();
131 m_itemsCache.try_emplace(ctpid,
132 /*LVL1CTP::Lvl1Item*/ item->name(), 0,
133 0, 0, 0, prescales[ctpid]);
134 ATH_MSG_DEBUG( "new configuration for item" << item->name() );
135 }
136 ATH_MSG_DEBUG( "Updating configuration, done with L1" );
137
138 //clear cache completely because underlying config objects might have changed
139 m_l2chainsCache.clear();
140 m_efchainsCache.clear();
141 m_mConfChains.clear();
142
143 if ( ! confChains ) {
144 ATH_MSG_WARNING( "No chains in configuration, probably run w/o HLT" );
145 } else {
146
147 ATH_MSG_DEBUG("Updating Configuration chains. Number of conf chains: " << m_confChains->size());
148
149 // updating internal map of conf chains (this map is only used for fast lookup)
150 for(auto ch : *m_confChains) {
151 m_mConfChains[ch->chain_name()] = ch;
152 }
153
154 // updating internal cache of HLT::Chains
155 for(auto ch : *m_confChains) {
156 // std::cerr << "CacheGlobalMemory::update updating chain" << (*cChIt)->chain_name() << std::endl;
157 int cntr = ch->chain_counter();
158 if( ch->level()=="L2" ) {
159 m_l2chainsCache.emplace(cntr, /*HLT::Chain*/ch);
160 } else {//merged chains are stored in efchains
161 m_efchainsCache.emplace(cntr, /*HLT::Chain*/ch);
162 }
163 }
164 ATH_MSG_DEBUG( "Updating configuration, done with basic HLT based on "
165 << m_confChains->size() << " configuration chains" );
166
167
168 // code for the streams and pre-defined groups
169 // -- assume that the groups and streams have all changed!!!
170 m_groups.clear();
171 m_streams.clear();
172
173 for(auto ch : *m_confChains) {
174 if (( ch->level() == "EF" || ch->level() == "HLT") && !ch->streams().empty() ) {
175 ATH_MSG_DEBUG( "Stream: " << ch->chain_name() << " " << ch->streams().size() );
176 for(auto stream : ch->streams()) {
177 ATH_MSG(DEBUG) << " " << stream->stream();
178 m_streams[stream->stream()].push_back(ch->chain_name());
179 }
180 ATH_MSG(DEBUG) << endmsg;
181 }
182 if ( ( ch->level() == "EF" || ch->level() == "HLT") && !ch->groups().empty() ) {
183 ATH_MSG_DEBUG( "Groups: " << ch->chain_name() << " " << ch->groups().size() );
184 for(auto& group : ch->groups()) {
185 ATH_MSG(DEBUG) << " " << group;
186 m_groups[group].push_back(ch->chain_name());
187 }
188 ATH_MSG(DEBUG) << endmsg;
189 }
190 }
191 }
192
193 // update all defined chainGroups
194 for (auto& [key, group] : m_chainGroups) {
195 updateChainGroup(group);
196 }
197 ATH_MSG_DEBUG( "Updating configuration done" );
198}
#define endmsg
#define ATH_MSG(lvl)
void updateChainGroup(Trig::ChainGroup &chainGroup, TrigDefs::Group props=TrigDefs::Group::Default)
unpacks everything that belongs to a ChainGroup
std::map< std::string, std::vector< std::string > > m_groups
mapping from group to list of chains
ctp
Retrieve trigger EDM objects.
#define DEBUG
Definition page_access.h:11

◆ updateChainGroup()

void Trig::CacheGlobalMemory::updateChainGroup ( Trig::ChainGroup & chainGroup,
TrigDefs::Group props = TrigDefs::Group::Default )
private

unpacks everything that belongs to a ChainGroup

Definition at line 104 of file CacheGlobalMemory.cxx.

104 {
105 chainGroup.update(m_confChains, m_confItems, props);
106}
void update(const TrigConf::HLTChainList *confChains, const TrigConf::ItemContainer *confItems, TrigDefs::Group prop=TrigDefs::Group::Default)

◆ xAODTrigDecisionKey()

const SG::ReadHandleKey< xAOD::TrigDecision > * Trig::CacheGlobalMemory::xAODTrigDecisionKey ( ) const
inline

Definition at line 152 of file CacheGlobalMemory.h.

152{ return m_decisionKeyPtr; }

◆ DecisionAccess

friend class DecisionAccess
friend

Definition at line 162 of file CacheGlobalMemory.h.

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/4]

std::unique_ptr<IDecisionUnpacker> m_unpacker Trig::CacheGlobalMemory::ATLAS_THREAD_SAFE
mutableprivate

Trigger decision unpacker helper.

Definition at line 187 of file CacheGlobalMemory.h.

◆ ATLAS_THREAD_SAFE [2/4]

std::map< std::vector< std::string >, Trig::ChainGroup > m_chainGroups Trig::CacheGlobalMemory::ATLAS_THREAD_SAFE
mutableprivate

primary storage for chain groups

Definition at line 196 of file CacheGlobalMemory.h.

◆ ATLAS_THREAD_SAFE [3/4]

std::map< std::vector< std::string >, Trig::ChainGroup* > m_chainGroupsRef Trig::CacheGlobalMemory::ATLAS_THREAD_SAFE
mutableprivate

this map keeps the chain group more than once i.e.

when alias is given

Definition at line 197 of file CacheGlobalMemory.h.

◆ ATLAS_THREAD_SAFE [4/4]

AnyTypeDeleter m_deleteAtEndOfEvent Trig::CacheGlobalMemory::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 272 of file CacheGlobalMemory.h.

◆ m_bgCode

char Trig::CacheGlobalMemory::m_bgCode {0}
private

the encoded bunchgroup information

Definition at line 228 of file CacheGlobalMemory.h.

228{0};

◆ m_cgmMutex

std::recursive_mutex Trig::CacheGlobalMemory::m_cgmMutex
mutableprivate

R3 MT protection only against –threads > 1.

Needs refacotring...

Definition at line 274 of file CacheGlobalMemory.h.

◆ m_confChains

const TrigConf::HLTChainList* Trig::CacheGlobalMemory::m_confChains {nullptr}
private

all chains configuration

Definition at line 213 of file CacheGlobalMemory.h.

213{nullptr};

◆ m_confItems

const TrigConf::ItemContainer* Trig::CacheGlobalMemory::m_confItems {nullptr}
private

items configuration

Definition at line 212 of file CacheGlobalMemory.h.

212{nullptr};

◆ m_decisionKeyPtr

SG::ReadHandleKey<xAOD::TrigDecision>* Trig::CacheGlobalMemory::m_decisionKeyPtr {nullptr}
private

Parent TDT's read handle key.

Definition at line 215 of file CacheGlobalMemory.h.

215{nullptr};

◆ m_decisionUnpacked

bool Trig::CacheGlobalMemory::m_decisionUnpacked {false}
private

Was decision unpacked for this event?

Definition at line 189 of file CacheGlobalMemory.h.

189{false};

◆ m_efchainsByName

std::unordered_map<std::string, const HLT::Chain*> Trig::CacheGlobalMemory::m_efchainsByName
private

L2 chains keyed by chain name (chainging every event)

Definition at line 201 of file CacheGlobalMemory.h.

◆ m_efchainsCache

std::map<CHAIN_COUNTER, HLT::Chain> Trig::CacheGlobalMemory::m_efchainsCache
private

cache of all EF chains possible (given configuration)

Definition at line 207 of file CacheGlobalMemory.h.

◆ m_groups

std::map<std::string, std::vector<std::string> > Trig::CacheGlobalMemory::m_groups
private

mapping from group to list of chains

Definition at line 209 of file CacheGlobalMemory.h.

◆ m_itemsByName

std::unordered_map<std::string, const LVL1CTP::Lvl1Item*> Trig::CacheGlobalMemory::m_itemsByName
private

items keyed by configuration name (chainging every event)

Definition at line 199 of file CacheGlobalMemory.h.

◆ m_itemsCache

std::map<CTPID, LVL1CTP::Lvl1Item> Trig::CacheGlobalMemory::m_itemsCache
private

cache of all CTP items possible (given configuration)

Definition at line 205 of file CacheGlobalMemory.h.

◆ m_l2chainsByName

std::unordered_map<std::string, const HLT::Chain*> Trig::CacheGlobalMemory::m_l2chainsByName
private

L2 chains keyed by chain name (chainging every event)

Definition at line 200 of file CacheGlobalMemory.h.

◆ m_l2chainsCache

std::map<CHAIN_COUNTER, HLT::Chain> Trig::CacheGlobalMemory::m_l2chainsCache
private

cache of all L2 chains possible (given configuration)

Definition at line 206 of file CacheGlobalMemory.h.

◆ m_mConfChains

ChainHashMap_t Trig::CacheGlobalMemory::m_mConfChains
private

map of conf chains

Definition at line 226 of file CacheGlobalMemory.h.

◆ m_navigation

HLT::TrigNavStructure* Trig::CacheGlobalMemory::m_navigation {nullptr}
private

Navigation owned by CGM.

Definition at line 193 of file CacheGlobalMemory.h.

193{nullptr};

◆ m_navigationUnpacked

bool Trig::CacheGlobalMemory::m_navigationUnpacked {false}
private

Was navigation unpacked for this event?

Definition at line 190 of file CacheGlobalMemory.h.

190{false};

◆ m_oldDecisionKeyPtr

SG::ReadHandleKey<TrigDec::TrigDecision>* Trig::CacheGlobalMemory::m_oldDecisionKeyPtr {nullptr}
private

Parent TDT's read handle key.

Definition at line 218 of file CacheGlobalMemory.h.

218{nullptr};

◆ m_oldEventInfoKeyPtr

SG::ReadHandleKey<EventInfo>* Trig::CacheGlobalMemory::m_oldEventInfoKeyPtr {nullptr}
private

Parent TDT's read handle key.

Definition at line 219 of file CacheGlobalMemory.h.

219{nullptr};

◆ m_run2NavigationKeyPtr

SG::ReadHandleKey<xAOD::TrigNavigation>* Trig::CacheGlobalMemory::m_run2NavigationKeyPtr {nullptr}
private

Parent TDT's read handle key.

Definition at line 222 of file CacheGlobalMemory.h.

222{nullptr};

◆ m_run3NavigationKeyPtr

SG::ReadHandleKey<TrigCompositeUtils::DecisionContainer>* Trig::CacheGlobalMemory::m_run3NavigationKeyPtr {nullptr}
private

Parent TDT's read handle key.

Definition at line 223 of file CacheGlobalMemory.h.

223{nullptr};

◆ m_store

const asg::EventStoreType* Trig::CacheGlobalMemory::m_store {nullptr}
private

Pointer to the event store in use.

Definition at line 184 of file CacheGlobalMemory.h.

184{nullptr};

◆ m_streams

std::map<std::string, std::vector<std::string> > Trig::CacheGlobalMemory::m_streams
private

mapping from stream to list of chains

Definition at line 210 of file CacheGlobalMemory.h.


The documentation for this class was generated from the following files: