ATLAS Offline Software
Public Types | Public Member Functions | Private Types | Private Attributes | List of all members
ExpressionParsing::MultipleProxyLoader Class Reference

#include <MultipleProxyLoader.h>

Inheritance diagram for ExpressionParsing::MultipleProxyLoader:
Collaboration diagram for ExpressionParsing::MultipleProxyLoader:

Public Types

enum  VariableType {
  VT_UNK, VT_INT, VT_DOUBLE, VT_VECINT,
  VT_VECDOUBLE, VT_VECEMPTY
}
 

Public Member Functions

 MultipleProxyLoader ()
 
virtual ~MultipleProxyLoader ()
 
IProxyLoaderpush_back (std::unique_ptr< IProxyLoader > proxyLoader)
 
virtual void reset ()
 
virtual IProxyLoader::VariableType variableTypeFromString (const std::string &varname) const
 
virtual int loadIntVariableFromString (const std::string &varname) const
 
virtual double loadDoubleVariableFromString (const std::string &varname) const
 
virtual std::vector< int > loadVecIntVariableFromString (const std::string &varname) const
 
virtual std::vector< double > loadVecDoubleVariableFromString (const std::string &varname) const
 

Private Types

using proxyCache_t = CxxUtils::ConcurrentStrMap< IProxyLoader *, CxxUtils::SimpleUpdater >
 

Private Attributes

std::vector< std::unique_ptr< IProxyLoader > > m_proxyLoaders
 
proxyCache_t m_varnameToProxyLoader ATLAS_THREAD_SAFE
 

Detailed Description

Definition at line 24 of file MultipleProxyLoader.h.

Member Typedef Documentation

◆ proxyCache_t

Definition at line 43 of file MultipleProxyLoader.h.

Member Enumeration Documentation

◆ VariableType

Enumerator
VT_UNK 
VT_INT 
VT_DOUBLE 
VT_VECINT 
VT_VECDOUBLE 
VT_VECEMPTY 

Definition at line 21 of file IProxyLoader.h.

Constructor & Destructor Documentation

◆ MultipleProxyLoader()

ExpressionParsing::MultipleProxyLoader::MultipleProxyLoader ( )

Definition at line 20 of file MultipleProxyLoader.cxx.

20  :
21  m_varnameToProxyLoader(proxyCache_t::Updater_t())
22  {
23  }

◆ ~MultipleProxyLoader()

ExpressionParsing::MultipleProxyLoader::~MultipleProxyLoader ( )
virtual

Definition at line 25 of file MultipleProxyLoader.cxx.

26  {
27  }

Member Function Documentation

◆ loadDoubleVariableFromString()

double ExpressionParsing::MultipleProxyLoader::loadDoubleVariableFromString ( const std::string &  varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 78 of file MultipleProxyLoader.cxx.

79  {
80  return m_varnameToProxyLoader.at(varname)->loadDoubleVariableFromString(varname);
81  }

◆ loadIntVariableFromString()

int ExpressionParsing::MultipleProxyLoader::loadIntVariableFromString ( const std::string &  varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 73 of file MultipleProxyLoader.cxx.

74  {
75  return m_varnameToProxyLoader.at(varname)->loadIntVariableFromString(varname);
76  }

◆ loadVecDoubleVariableFromString()

std::vector< double > ExpressionParsing::MultipleProxyLoader::loadVecDoubleVariableFromString ( const std::string &  varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 88 of file MultipleProxyLoader.cxx.

89  {
90  return m_varnameToProxyLoader.at(varname)->loadVecDoubleVariableFromString(varname);
91  }

◆ loadVecIntVariableFromString()

std::vector< int > ExpressionParsing::MultipleProxyLoader::loadVecIntVariableFromString ( const std::string &  varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 83 of file MultipleProxyLoader.cxx.

84  {
85  return m_varnameToProxyLoader.at(varname)->loadVecIntVariableFromString(varname);
86  }

◆ push_back()

IProxyLoader * ExpressionParsing::MultipleProxyLoader::push_back ( std::unique_ptr< IProxyLoader proxyLoader)

Definition at line 30 of file MultipleProxyLoader.cxx.

31  {
32  m_proxyLoaders.push_back(std::move(proxyLoader));
33  return m_proxyLoaders.back().get();
34  }

◆ reset()

void ExpressionParsing::MultipleProxyLoader::reset ( )
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 36 of file MultipleProxyLoader.cxx.

37  {
38  for (const auto &proxyLoader : m_proxyLoaders) {
39  proxyLoader->reset();
40  }
41  }

◆ variableTypeFromString()

IProxyLoader::VariableType ExpressionParsing::MultipleProxyLoader::variableTypeFromString ( const std::string &  varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 43 of file MultipleProxyLoader.cxx.

44  {
45  auto itr = m_varnameToProxyLoader.find(varname);
46  if (itr != m_varnameToProxyLoader.end()) {
47  return itr->second->variableTypeFromString(varname);
48  }
49 
51  for (const auto &proxyLoader : m_proxyLoaders) {
52  try {
53  result = proxyLoader->variableTypeFromString(varname);
54  if (result == VT_UNK) continue;
55  } catch (const std::runtime_error &) {
56  continue;
57  }
58  m_varnameToProxyLoader.emplace(varname, proxyLoader.get());
59  return result;
60  }
61  std::stringstream msg;
62  msg << "MultipleProxyLoader: unable to find valid proxy loader for " << varname << "."
63  << " If it is an xAOD element or container which is read from the input file"
64  << " this problem may occur if it is not accessed anywhere in the job via read handles."
65  << " The problem can be mitigated by providing the missing information in the property "
66  << " ExtraDataForDynamicConsumers of the sequence which has the property "
67  << " ProcessDynamicDataDependencies set to True."
68  << " The property takes a list of strings of the form \'type/container-name\' e.g."
69  << " \'xAOD::TrackParticleContainer/InDetTrackParticles\'.";
70  throw std::runtime_error(msg.str());
71  }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

proxyCache_t m_varnameToProxyLoader ExpressionParsing::MultipleProxyLoader::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 44 of file MultipleProxyLoader.h.

◆ m_proxyLoaders

std::vector<std::unique_ptr<IProxyLoader> > ExpressionParsing::MultipleProxyLoader::m_proxyLoaders
private

Definition at line 41 of file MultipleProxyLoader.h.


The documentation for this class was generated from the following files:
ExpressionParsing::IProxyLoader::VT_VECEMPTY
@ VT_VECEMPTY
Definition: IProxyLoader.h:21
get_generator_info.result
result
Definition: get_generator_info.py:21
ExpressionParsing::IProxyLoader::VT_VECDOUBLE
@ VT_VECDOUBLE
Definition: IProxyLoader.h:21
ExpressionParsing::IProxyLoader::VariableType
VariableType
Definition: IProxyLoader.h:21
ExpressionParsing::IProxyLoader::VT_DOUBLE
@ VT_DOUBLE
Definition: IProxyLoader.h:21
ExpressionParsing::IProxyLoader::VT_UNK
@ VT_UNK
Definition: IProxyLoader.h:21
ExpressionParsing::MultipleProxyLoader::m_proxyLoaders
std::vector< std::unique_ptr< IProxyLoader > > m_proxyLoaders
Definition: MultipleProxyLoader.h:41
ExpressionParsing::IProxyLoader::VT_VECINT
@ VT_VECINT
Definition: IProxyLoader.h:21
ExpressionParsing::IProxyLoader::VT_INT
@ VT_INT
Definition: IProxyLoader.h:21
LArG4AODNtuplePlotter.varname
def varname(hname)
Definition: LArG4AODNtuplePlotter.py:37
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7