ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
CommonTools
ExpressionEvaluation
src
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
#ifndef _ExpressionEvaluation_Utils_h_
5
#define _ExpressionEvaluation_Utils_h_
6
7
#include <stdexcept>
8
#include "GaudiKernel/DataHandle.h"
9
#include "
AthContainers/AuxVectorBase.h
"
10
#include "
AthContainers/AuxElement.h
"
11
#include "
CxxUtils/checker_macros.h
"
12
13
namespace
ExpressionParsing
{
16
template
<
class
T_Key>
17
void
initializeHandle
(T_Key *key, std::vector<Gaudi::DataHandle *> &new_input_handles) {
18
if
(key) {
19
if
(key->initialize().isFailure()) {
20
std::stringstream
msg
;
21
msg
<<
"Failed to initialize read handle "
<< key->key();
22
throw
std::runtime_error(
msg
.str());
23
}
24
key->init();
25
new_input_handles.push_back( key);
26
}
27
}
28
29
30
// helper functions to provide a uniform interface for AuxElement and AuxVectorBase
31
template
<
class
T_Aux>
32
bool
isAvailable
(
const
T_Aux &cont,
SG::auxid_t
auxid);
33
34
template
<>
35
bool
isAvailable<SG::AuxVectorBase>
(
const
SG::AuxVectorBase
&cont,
SG::auxid_t
auxid) {
36
return
cont.
isAvailable
(auxid);
37
}
38
39
template
<>
40
bool
isAvailable<SG::AuxElement>
(
const
SG::AuxElement
&cont,
SG::auxid_t
auxid) {
41
return
cont.container() && cont.container()->isAvailable(auxid);
42
}
43
44
// helper functions to provide a uniform interface for AuxElement and AuxVectorBase
45
template
<
class
T>
46
class
SizeHelper
{
47
public
:
48
static
std::size_t
getSize
(
const
T &cont) {
49
(void) cont;
50
return
1;
51
}
52
};
53
54
template
<
typename
T>
55
class
SizeHelper
<
std
::
vector
<T> > {
56
public
:
57
static
std::size_t
getSize
(
const
std::vector<T> &cont) {
return
cont.size(); }
58
};
59
60
template
<>
61
class
SizeHelper
<
SG
::AuxVectorBase > {
62
public
:
63
static
std::size_t
getSize
(
const
SG::AuxVectorBase
&cont) {
return
cont.
size_v
(); }
64
};
65
66
template
<>
67
class
SizeHelper
<
SG
::AuxElement > {
68
public
:
69
static
std::size_t
getSize
(
const
SG::AuxElement
&cont) {
return
cont.container() ? cont.container()->size_v() : 0; }
70
};
71
72
template
<
class
T>
73
std::size_t
getContainerSize
(
const
T &cont) {
74
return
SizeHelper<T>::getSize
(cont);
75
}
76
77
template
<
class
T>
78
const
SG::AuxVectorData
*
getVectorData
(
const
T &cont) {
79
return
&cont;
80
}
81
82
template
<>
83
const
SG::AuxVectorData
*
getVectorData<SG::AuxElement>
(
const
SG::AuxElement
&cont) {
84
return
cont.container();
85
}
86
87
template
<
class
T_Derived>
88
class
Singleton
{
89
public
:
90
static
T_Derived &
instance
() {
91
if
(!s_instance) {
92
s_instance.set(std::make_unique<T_Derived>());
93
}
94
return
*s_instance;
95
}
96
private
:
97
static
CxxUtils::CachedUniquePtrT<T_Derived>
s_instance
ATLAS_THREAD_SAFE
;
98
};
99
template
<
class
T_Derived>
100
CxxUtils::CachedUniquePtrT<T_Derived>
Singleton<T_Derived>::s_instance
ATLAS_THREAD_SAFE
;
101
102
}
103
#endif
AuxElement.h
Base class for elements of a container that can have aux data.
AuxVectorBase.h
Manage index tracking and synchronization of auxiliary data.
checker_macros.h
Define macros for attributes used to control the static checker.
CxxUtils::CachedUniquePtrT
Cached pointer with atomic update.
Definition
CachedUniquePtr.h:54
ExpressionParsing::Singleton
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:88
ExpressionParsing::Singleton::ATLAS_THREAD_SAFE
static CxxUtils::CachedUniquePtrT< T_Derived > s_instance ATLAS_THREAD_SAFE
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:97
ExpressionParsing::Singleton::instance
static T_Derived & instance()
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:90
ExpressionParsing::SizeHelper< SG::AuxElement >::getSize
static std::size_t getSize(const SG::AuxElement &cont)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:69
ExpressionParsing::SizeHelper< SG::AuxVectorBase >::getSize
static std::size_t getSize(const SG::AuxVectorBase &cont)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:63
ExpressionParsing::SizeHelper< std::vector< T > >::getSize
static std::size_t getSize(const std::vector< T > &cont)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:57
ExpressionParsing::SizeHelper
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:46
ExpressionParsing::SizeHelper::getSize
static std::size_t getSize(const T &cont)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:48
SG::AuxVectorBase
Manage index tracking and synchronization of auxiliary data.
Definition
AuxVectorBase.h:98
SG::AuxVectorBase::isAvailable
bool isAvailable(const std::string &name, const std::string &clsname="") const
Test to see if a variable exists in the store.
SG::AuxVectorData
Manage lookup of vectors of auxiliary data.
Definition
AuxVectorData.h:164
SG::AuxVectorData::size_v
virtual size_t size_v() const =0
Return the size of the container.
vector
Definition
MultiHisto.h:13
ExpressionParsing
Namespace holding all the expression evaluation code.
Definition
ExpressionParser.h:26
ExpressionParsing::isAvailable
bool isAvailable(const T_Aux &cont, SG::auxid_t auxid)
ExpressionParsing::getVectorData
const SG::AuxVectorData * getVectorData(const T &cont)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:78
ExpressionParsing::getVectorData< SG::AuxElement >
const SG::AuxVectorData * getVectorData< SG::AuxElement >(const SG::AuxElement &cont)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:83
ExpressionParsing::isAvailable< SG::AuxVectorBase >
bool isAvailable< SG::AuxVectorBase >(const SG::AuxVectorBase &cont, SG::auxid_t auxid)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:35
ExpressionParsing::ATLAS_THREAD_SAFE
CxxUtils::CachedUniquePtrT< T_Derived > Singleton< T_Derived >::s_instance ATLAS_THREAD_SAFE
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:100
ExpressionParsing::initializeHandle
void initializeHandle(T_Key *key, std::vector< Gaudi::DataHandle * > &new_input_handles)
Auxiliary function to initialize newly create data handles.
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:17
ExpressionParsing::isAvailable< SG::AuxElement >
bool isAvailable< SG::AuxElement >(const SG::AuxElement &cont, SG::auxid_t auxid)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:40
ExpressionParsing::getContainerSize
std::size_t getContainerSize(const T &cont)
Definition
PhysicsAnalysis/CommonTools/ExpressionEvaluation/src/Utils.h:73
SG
Forward declaration.
Definition
CaloCellPacker_400_500.h:32
SG::AuxElement
AuxElement(SG::AuxVectorData *container, size_t index)
Base class for elements of a container that can have aux data.
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition
AuxTypes.h:27
std
STL namespace.
msg
MsgStream & msg
Definition
testRead.cxx:32
Generated on
for ATLAS Offline Software by
1.17.0