7#include "GaudiKernel/System.h"
11#include "GaudiKernel/MsgStream.h"
22 const IInterface* parent )
31 "List of classes which need to be serialized together with the Navigation.");
34 "List of classes which need to be serialized together with the Navigation (Only in DataScouting collection).");
37 "List of classes (Type[#Key]) to ignore on deserialization of the Navigation. "
38 "Type can be an actual type name or CLID (useful for deleted classes).");
41 "List of classes which need to be put in SG independently if they appear in event.");
45 declareProperty(
"ReadonlyHolders",
m_readonly =
false,
"read only flag for holders (cannot create new feature containers");
71 std::vector<CSPair> ignore;
73 if ( !ignore.empty() ) {
76 for (
const auto& c : ignore) {
77 ATH_MSG_DEBUG(
"Ignoring CLID " << c.first << (c.second.empty() ?
"" :
" with label "+c.second) <<
78 " during deserialization");
84 const CLID cl = p.first;
87 ATH_MSG_WARNING(
"Initialization of a converter for CLID=" << cl <<
" failed");
94 if (
msgLvl(MSG::VERBOSE) ) {
97 ATH_MSG_ERROR(
"static type information not intialized. Holder is null pointer");
104 for (
const std::string& dll :
m_dlls ) {
105 System::ImageHandle handle = 0;
106 if ( System::loadDynamicLib( dll, &handle) != 1 )
114 return StatusCode::SUCCESS;
119 std::vector<CSPair>& decoded ) {
122 for (
const std::string& cname : property ) {
127 if (
auto hashPos = cname.find(
'#'); hashPos!= std::string::npos ) {
128 type = cname.substr(0, hashPos);
129 key = cname.substr(hashPos+1 );
136 auto result = std::from_chars(
type.data(),
type.data() +
type.size(), clid);
139 if (result.ec != std::errc()) {
142 return StatusCode::FAILURE;
151 size_t dotpos = key.find(
'.');
152 if( dotpos == std::string::npos ) {
157 const char* dummyName =
"__dummyThatShouldNotMatch";
160 static const std::set<std::string> dummySet { dummyName };
161 sel.selectAux (dummySet);
164 std::string aux_attr = key.substr(dotpos+1);
165 key.erase (dotpos, std::string::npos);
166 std::vector<std::string> tokens;
167 for (
auto&& token : std::views::split(std::string_view{aux_attr},
'.')) tokens.emplace_back(token.begin(), token.end());
168 sel.selectAux (std::set<std::string> (tokens.begin(), tokens.end()));
171 decoded.emplace_back (clid, key, std::move (
sel));
173 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()
Helper class to provide type-safe access to aux data.
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)