5#ifndef XAODCORE_TOOLS_AUXVARIABLE_H
6#define XAODCORE_TOOLS_AUXVARIABLE_H
23#define AUX_VARIABLE( VAR, ... ) \
25 static const auxid_t auxid = \
26 getAuxID( #VAR, VAR CXXUTILS_PP_FIRST( __VA_ARGS__ ) ); \
27 regAuxVar( auxid, #VAR, VAR ); \
58template <
class VARTYPE,
class AUXBASE>
62 return VARTYPE (auxcont->memResource());
66template <
class VARTYPE,
class AUXBASE>
74template <
class VARTYPE,
class AUXBASE>
77 return initAuxVar2<VARTYPE> ( auxcont, std::is_constructible<VARTYPE, std::pmr::memory_resource*>() );
81template <const
char* NAME,
class AUXBASE,
class VARTYPE>
86 static const SG::auxid_t auxid = auxcont->getAuxID( NAME, var, flags );
87 auxcont->regAuxVar (auxid, NAME, var);
96template <
class ELT, const
char* NAME,
class AUXBASE,
class LINKS,
class LINKED>
105 auxcont->regAuxVar(
acc.auxid(), NAME, links );
113#define AUXVAR_DECL( TYPE, NAME, ... ) \
114 static constexpr const char NAME ## __name[] = #NAME; \
115 AuxVariable_t< TYPE AUXVAR_DECL_ALLOC_( TYPE, __VA_ARGS__ ) > NAME \
116 { xAOD::detail::initAuxVar< NAME ## __name >( this, NAME CXXUTILS_PP_SECOND( __VA_ARGS__ ) ) }
117#define AUXVAR_DECL_ALLOC_( TYPE, ... ) \
118 __VA_OPT__( CXXUTILS_PP_FIRST( __VA_ARGS__ )< TYPE > )
121#define AUXVAR_PACKEDCONTAINER_DECL( TYPE, NAME ) \
122 static constexpr const char NAME ## __name[] = #NAME; \
123 SG::PackedContainer< TYPE > NAME { xAOD::detail::initAuxVar< NAME ## __name >( this, NAME ) }
Handle mappings between names and auxid_t.
Helper class to provide constant type-safe access to aux data.
static std::string linkedName(const std::string &name)
Given a variable name, return the name of the corresponding linked variable.
Helper class to provide constant type-safe access to aux data.
AuxVarFlags
Additional flags to qualify an auxiliary variable.
@ None
No special flags set.
size_t auxid_t
Identifier for a particular aux data item.
LINKED initLinkedVar(AUXBASE *auxcont, LINKS &links, LINKED &linked)
VARTYPE initAuxVar2(AUXBASE *auxcont, std::true_type)
VARTYPE initAuxVar(AUXBASE *auxcont, VARTYPE &var, SG::AuxVarFlags flags=SG::AuxVarFlags::None)
VARTYPE initAuxVar1(AUXBASE *auxcont)
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
static const SG::AuxElement::Accessor< ElementLink< IParticleContainer > > acc("originalObjectLink")
Object used for setting/getting the dynamic decoration in question.