45 const EventContext& ctx = Gaudi::Hive::currentContext();
46 std::pair< IProxyLoader::VariableType, const IAccessor &>
51 std::pair<IAccessor::VariableType, const IAccessor & >
54 auto itr = m_varnameToProxyLoader.find(varname);
55 if (itr != m_varnameToProxyLoader.end()) {
56 return {itr->second->variableType(varname),*itr->second};
61 std::pair<IAccessor::VariableType, const IAccessor &>
62 result = proxyLoader->getAccessorFromString(ctx, varname);
67 m_varnameToProxyLoader.emplace(varname, &
result.second);
70 }
catch (
const std::runtime_error &) {
74 std::stringstream
msg;
75 msg <<
"MultipleProxyLoader: unable to find valid proxy loader for " << varname <<
"."
76 <<
" If it is an xAOD element or container which is read from the input file"
77 <<
" this problem may occur if it is not accessed anywhere in the job via read handles."
78 <<
" The problem can be mitigated by providing the missing information in the property "
79 <<
" ExtraDataForDynamicConsumers of the sequence which has the property "
80 <<
" ProcessDynamicDataDependencies set to True."
81 <<
" The property takes a list of strings of the form \'type/container-name\' e.g."
82 <<
" \'xAOD::TrackParticleContainer/InDetTrackParticles\'.";
83 throw std::runtime_error(
msg.str());
88 return m_varnameToProxyLoader.at(varname)->loadInt(ctx,varname);
93 return m_varnameToProxyLoader.at(varname)->loadDouble(ctx,varname);
98 return m_varnameToProxyLoader.at(varname)->loadVecInt(ctx,varname);
103 return m_varnameToProxyLoader.at(varname)->loadVec(ctx,varname);
virtual double loadDouble(const EventContext &ctx, const std::string &varname) const override
IProxyLoader * push_back(std::unique_ptr< IProxyLoader > proxyLoader)
virtual std::pair< IAccessor::VariableType, const IAccessor & > getAccessorFromString(const EventContext &ctx, const std::string &varname) const override
virtual ~MultipleProxyLoader()
std::vector< std::unique_ptr< IProxyLoader > > m_proxyLoaders
virtual std::vector< double > loadVec(const EventContext &ctx, const std::string &varname) const override
virtual IAccessor::VariableType variableType(const std::string &var_name) const override
virtual void reset() override
virtual std::vector< int > loadVecInt(const EventContext &ctx, const std::string &varname) const override
virtual int loadInt(const EventContext &ctx, const std::string &varname) const override
CxxUtils::ConcurrentStrMap< const IAccessor *, CxxUtils::SimpleUpdater > proxyCache_t
Namespace holding all the expression evaluation code.