7#include "GaudiKernel/System.h"
11#include "GaudiKernel/MsgStream.h"
21 const IInterface* parent )
30 "List of classes which need to be serialized together with the Navigation.");
33 "List of classes which need to be serialized together with the Navigation (Only in DataScouting collection).");
36 "List of classes (Type[#Key]) to ignore on deserialization of the Navigation.");
39 "List of classes which need to be put in SG independently if they appear in event.");
43 declareProperty(
"ReadonlyHolders",
m_readonly =
false,
"read only flag for holders (cannot create new feature containers");
69 std::vector<CSPair> ignore;
71 if ( !ignore.empty() ) {
74 for (
const auto& c : ignore) {
75 ATH_MSG_DEBUG(
"Ignoring CLID " << c.first << (c.second.empty() ?
"" :
" with label "+c.second) <<
76 " during deserialization");
82 const CLID cl = p.first;
85 ATH_MSG_WARNING(
"Initialization of a converter for CLID=" << cl <<
" failed");
92 if (
msgLvl(MSG::VERBOSE) ) {
95 ATH_MSG_ERROR(
"static type information not intialized. Holder is null pointer");
102 for (
const std::string& dll :
m_dlls ) {
103 System::ImageHandle handle = 0;
104 if ( System::loadDynamicLib( dll, &handle) != 1 )
112 return StatusCode::SUCCESS;
117 std::vector<CSPair>& decoded ) {
120 for (
const std::string& cname : property ) {
125 if (
auto hashPos = cname.find(
'#'); hashPos!= std::string::npos ) {
126 type = cname.substr(0, hashPos);
127 key = cname.substr(hashPos+1 );
135 return StatusCode::FAILURE;
143 size_t dotpos = key.find(
'.');
144 if( dotpos == std::string::npos ) {
149 const char* dummyName =
"__dummyThatShouldNotMatch";
151 static const SG::AuxElement::Accessor<int> dummyVar (dummyName);
152 static const std::set<std::string> dummySet { dummyName };
153 sel.selectAux (dummySet);
156 std::string aux_attr = key.substr(dotpos+1);
157 key.erase (dotpos, std::string::npos);
158 std::vector<std::string> tokens;
159 for (
auto&& token : std::views::split(std::string_view{aux_attr},
'.')) tokens.emplace_back(token.begin(), token.end());
160 sel.selectAux (std::set<std::string> (tokens.begin(), tokens.end()));
163 decoded.emplace_back (clid, key, std::move (
sel));
165 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
#define ATH_MSG_INFO(x,...)
Base class for elements of a container that can have aux data.
uint32_t CLID
The Class ID type.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
ServiceHandle< StoreGateSvc > & evtStore()
The NavigationCore class, adds on top of the TrigNavStructure the EDM read-only handling.
NavigationCore(const AthAlgTool &logger)
constructor with parent AlgTool for printing
ITrigHolderFactory * m_holderfactory
std::vector< std::string > m_classesFromPayloadIgnoreProperty
list of classes::keys to ignore on deserialization
std::vector< CSPair > m_classesToPayload_DSonly
classess are put to payload according to that priority list (CLID + key)
IConversionSvc * m_serializerSvc
unsigned m_objectsIndexOffset
small integer used to generate sub type index
std::vector< std::string > m_classesToPayloadProperty_DSonly
list of classes::keys to be put to DS payload
std::vector< std::string > m_classesToPayloadProperty
list of classes::keys to be put to BS payload
StoreGateSvc * m_storeGate
std::vector< std::string > m_classesToPreregisterProperty
as above but for preregistration
std::vector< CSPair > m_classesToPayload
classess are put to payload according to that priority list (CLID + key)
std::vector< CSPair > m_classesToPreregister
classes mentioned here will be put to SG irrespectively of thier presence in event
bool msgLvl(const MSG::Level lvl) const
std::string m_objectsKeyPrefix
property setting prefix which is to be given to all trigger EDM objects
The Navigation class, organizes TriggerElements into the tree structure.
ServiceHandle< IClassIDSvc > m_clidSvc
StatusCode classKey2CLIDKey(const std::vector< std::string > &property, std::vector< CSPair > &decoded)
FullHolderFactory m_fullholderfactory
virtual StatusCode initialize() override
Gaudi::Property< std::vector< std::string > > m_dlls
ServiceHandle< IConversionSvc > m_serializerServiceHandle
static const CLIDtoHolderMap & holders()
Class helping in dealing with dynamic branch selection.
It used to be useful piece of code for replacing actual SG with other store of similar functionality ...
MsgStream & operator<<(MsgStream &m, const Navigation &nav)