ATLAS Offline Software
Loading...
Searching...
No Matches
xAOD::detail Namespace Reference

Functions

template<class T>
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainerImpl (const T &cont, DataLink< SG::IConstAuxStore > &link)
 Impl function for shallow copy container.
template<class VARTYPE, class AUXBASE>
VARTYPE initAuxVar2 (AUXBASE *auxcont, std::true_type)
template<class VARTYPE, class AUXBASE>
VARTYPE initAuxVar2 (AUXBASE *, std::false_type)
template<class VARTYPE, class AUXBASE>
VARTYPE initAuxVar1 (AUXBASE *auxcont)
template<const char * NAME, class AUXBASE, class VARTYPE>
VARTYPE initAuxVar (AUXBASE *auxcont, VARTYPE &var, SG::AuxVarFlags flags=SG::AuxVarFlags::None)
template<class ELT, const char * NAME, class AUXBASE, class LINKS, class LINKED>
LINKED initLinkedVar (AUXBASE *auxcont, LINKS &links, LINKED &linked)

Function Documentation

◆ initAuxVar()

template<const char * NAME, class AUXBASE, class VARTYPE>
VARTYPE xAOD::detail::initAuxVar ( AUXBASE * auxcont,
VARTYPE & var,
SG::AuxVarFlags flags = SG::AuxVarFlags::None )

Definition at line 82 of file AuxVariable.h.

85{
86 static const SG::auxid_t auxid = auxcont->getAuxID( NAME, var, flags );
87 auxcont->regAuxVar (auxid, NAME, var);
88 return initAuxVar1<VARTYPE>( auxcont );
89}
size_t auxid_t
Identifier for a particular aux data item.
Definition AuxTypes.h:27
VARTYPE initAuxVar1(AUXBASE *auxcont)
Definition AuxVariable.h:75

◆ initAuxVar1()

template<class VARTYPE, class AUXBASE>
VARTYPE xAOD::detail::initAuxVar1 ( AUXBASE * auxcont)

Definition at line 75 of file AuxVariable.h.

76{
77 return initAuxVar2<VARTYPE> ( auxcont, std::is_constructible<VARTYPE, std::pmr::memory_resource*>() );
78}
VARTYPE initAuxVar2(AUXBASE *auxcont, std::true_type)
Definition AuxVariable.h:59

◆ initAuxVar2() [1/2]

template<class VARTYPE, class AUXBASE>
VARTYPE xAOD::detail::initAuxVar2 ( AUXBASE * ,
std::false_type  )

Definition at line 67 of file AuxVariable.h.

69{
70 return VARTYPE();
71}

◆ initAuxVar2() [2/2]

template<class VARTYPE, class AUXBASE>
VARTYPE xAOD::detail::initAuxVar2 ( AUXBASE * auxcont,
std::true_type  )

Definition at line 59 of file AuxVariable.h.

61{
62 return VARTYPE (auxcont->memResource());
63}

◆ initLinkedVar()

template<class ELT, const char * NAME, class AUXBASE, class LINKS, class LINKED>
LINKED xAOD::detail::initLinkedVar ( AUXBASE * auxcont,
LINKS & links,
LINKED & linked )

Definition at line 97 of file AuxVariable.h.

100{
101 // Use the @c ConstAccessor specialization to get the variable
102 // declared properly.
103 static const SG::ConstAccessor<ELT> acc( NAME );
104 auxcont->regAuxVar( acc.linkedAuxid(), SG::AuxTypeRegistry::linkedName (NAME), linked );
105 auxcont->regAuxVar( acc.auxid(), NAME, links );
106 return xAOD::detail::initAuxVar1<LINKED>( auxcont );
107}
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.
static const SG::AuxElement::Accessor< ElementLink< IParticleContainer > > acc("originalObjectLink")
Object used for setting/getting the dynamic decoration in question.

◆ shallowCopyContainerImpl()

template<class T>
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > xAOD::detail::shallowCopyContainerImpl ( const T & cont,
DataLink< SG::IConstAuxStore > & link )

Impl function for shallow copy container.

Parameters
contThe container to make a shallow copy of
ctxThe currentEventContext
Returns
A pair of unique_ptr to the created objects.

Definition at line 54 of file ShallowCopy.h.

55 {
56
57 if (!link.cptr()) {
58 // This can happen when we read the input file in standalone
59 // mode in branch access mode. That's unfortunately not
60 // compatible with using a shallow copy auxiliary store.
61 std::cout << "xAOD::shallowCopyContainer ERROR Couldn't set up "
62 << "DataLink to the original container's auxiliary store"
63 << std::endl;
64 std::cout << "xAOD::shallowCopyContainer ERROR Are you using the "
65 << "xAOD::TEvent::kBranchAccess access mode?" << std::endl;
66 return {};
67 }
68
69 // Create the new DV container:
70 auto newCont = std::make_unique<T>();
71
72 // Add the required number of elements to it:
73 newCont->reserve(cont.size());
74 for (size_t i = 0; i < cont.size(); ++i) {
75 newCont->push_back(prepareElementForShallowCopy(cont[i]));
76 }
77
78 // Create a new shallow auxiliary container:
79 auto aux = std::make_unique<ShallowAuxContainer>(link);
80
81 // Connect it to the interface container:
82 newCont->setStore(aux.get());
83
84 // Return the new objects:
85 return std::make_pair(std::move(newCont), std::move(aux));
86 }
std::unique_ptr< CaloCluster > prepareElementForShallowCopy(const CaloCluster *orgCluster)