ATLAS Offline Software
AuxVariable.h
Go to the documentation of this file.
1 // Dear emacs, this is -*- c++ -*-
2 //
3 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
4 //
5 #ifndef XAODCORE_TOOLS_AUXVARIABLE_H
6 #define XAODCORE_TOOLS_AUXVARIABLE_H
7 
8 // EDM include(s).
10 #include "CxxUtils/pputils.h"
11 
22 #define AUX_VARIABLE( VAR, ... ) \
23  do { \
24  static const auxid_t auxid = \
25  getAuxID( #VAR, VAR CXXUTILS_PP_FIRST( __VA_ARGS__ ) ); \
26  regAuxVar( auxid, #VAR, VAR ); \
27  } while( false )
28 
29 
30 
54 namespace xAOD { namespace detail {
55 
56 
57 template <class VARTYPE, class AUXBASE>
58 VARTYPE initAuxVar2( AUXBASE* auxcont,
59  std::true_type)
60 {
61  return VARTYPE (auxcont->memResource());
62 }
63 
64 
65 template <class VARTYPE, class AUXBASE>
66 VARTYPE initAuxVar2( AUXBASE* /*auxcont*/,
67  std::false_type)
68 {
69  return VARTYPE();
70 }
71 
72 
73 template <class VARTYPE, class AUXBASE>
74 VARTYPE initAuxVar1( AUXBASE* auxcont)
75 {
76  return initAuxVar2<VARTYPE> ( auxcont, std::is_constructible<VARTYPE, std::pmr::memory_resource*>() );
77 }
78 
79 
80 template <const char* NAME, class AUXBASE, class VARTYPE>
81 VARTYPE initAuxVar( AUXBASE* auxcont,
82  VARTYPE& var,
84 {
85  static const SG::auxid_t auxid = auxcont->getAuxID( NAME, var, flags );
86  auxcont->regAuxVar (auxid, NAME, var);
87  return initAuxVar1<VARTYPE>( auxcont );
88 }
89 
90 
91 }} // namespace xAOD::detail
92 
93 
94 #define AUXVAR_DECL( TYPE, NAME, ... ) \
95  static constexpr const char NAME ## __name[] = #NAME; \
96  AuxVariable_t< TYPE AUXVAR_DECL_ALLOC_( TYPE, __VA_ARGS__ ) > NAME \
97  { xAOD::detail::initAuxVar< NAME ## __name >( this, NAME CXXUTILS_PP_SECOND( __VA_ARGS__ ) ) }
98 #define AUXVAR_DECL_ALLOC_( TYPE, ... ) \
99  __VA_OPT__( CXXUTILS_PP_FIRST( __VA_ARGS__ )< TYPE > )
100 
101 
102 #define AUXVAR_PACKEDCONTAINER_DECL( TYPE, NAME ) \
103  static constexpr const char NAME ## __name[] = #NAME; \
104  SG::PackedContainer< TYPE > NAME { xAOD::detail::initAuxVar< NAME ## __name >( this, NAME ) }
105 
106 
107 #endif // XAODCORE_TOOLS_AUXVARIABLE_H
xAOD::detail::initAuxVar1
VARTYPE initAuxVar1(AUXBASE *auxcont)
Definition: AuxVariable.h:74
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
xAOD::detail::initAuxVar2
VARTYPE initAuxVar2(AUXBASE *auxcont, std::true_type)
Definition: AuxVariable.h:58
pputils.h
Preprocessor utilities.
AthenaPoolTestRead.flags
flags
Definition: AthenaPoolTestRead.py:8
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
detail
Definition: extract_histogram_tag.cxx:14
xAOD::detail::initAuxVar
VARTYPE initAuxVar(AUXBASE *auxcont, VARTYPE &var, SG::AuxVarFlags flags=SG::AuxVarFlags::None)
Definition: AuxVariable.h:81
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
CaloCellPos2Ntuple.None
None
Definition: CaloCellPos2Ntuple.py:23
SG::AuxVarFlags
AuxVarFlags
Additional flags to qualify an auxiliary variable.
Definition: AuxTypes.h:58
AuxTypeRegistry.h
Handle mappings between names and auxid_t.