ATLAS Offline Software
Loading...
Searching...
No Matches
MultipleProxyLoader.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6// MultipleProxyLoader.cxx, (c) ATLAS Detector software
8// Author: Thomas Gillam (thomas.gillam@cern.ch)
9// ExpressionParsing library
11
12
14
15#include <stdexcept>
16#include <iostream>
17#include <sstream>
18
19namespace ExpressionParsing {
21 m_varnameToProxyLoader(proxyCache_t::Updater_t())
22 {
23 }
24
28
29
30 IProxyLoader* MultipleProxyLoader::push_back(std::unique_ptr<IProxyLoader> proxyLoader)
31 {
32 m_proxyLoaders.push_back(std::move(proxyLoader));
33 return m_proxyLoaders.back().get();
34 }
35
37 {
38 for (const auto &proxyLoader : m_proxyLoaders) {
39 proxyLoader->reset();
40 }
41 }
42
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 }
72
73 int MultipleProxyLoader::loadIntVariableFromString(const std::string &varname) const
74 {
75 return m_varnameToProxyLoader.at(varname)->loadIntVariableFromString(varname);
76 }
77
78 double MultipleProxyLoader::loadDoubleVariableFromString(const std::string &varname) const
79 {
80 return m_varnameToProxyLoader.at(varname)->loadDoubleVariableFromString(varname);
81 }
82
83 std::vector<int> MultipleProxyLoader::loadVecIntVariableFromString(const std::string &varname) const
84 {
85 return m_varnameToProxyLoader.at(varname)->loadVecIntVariableFromString(varname);
86 }
87
88 std::vector<double> MultipleProxyLoader::loadVecDoubleVariableFromString(const std::string &varname) const
89 {
90 return m_varnameToProxyLoader.at(varname)->loadVecDoubleVariableFromString(varname);
91 }
92}
virtual int loadIntVariableFromString(const std::string &varname) const
IProxyLoader * push_back(std::unique_ptr< IProxyLoader > proxyLoader)
virtual IProxyLoader::VariableType variableTypeFromString(const std::string &varname) const
std::vector< std::unique_ptr< IProxyLoader > > m_proxyLoaders
virtual std::vector< int > loadVecIntVariableFromString(const std::string &varname) const
virtual double loadDoubleVariableFromString(const std::string &varname) const
virtual std::vector< double > loadVecDoubleVariableFromString(const std::string &varname) const
CxxUtils::ConcurrentStrMap< IProxyLoader *, CxxUtils::SimpleUpdater > proxyCache_t
Namespace holding all the expression evaluation code.
MsgStream & msg
Definition testRead.cxx:32