37 namespace eventsetup {
52 lastSyncWasBeginOfRun_(
true) {}
75 assert(iProvider->isUsingRecord(key_));
78 providers_.emplace_back(iProvider);
84 if (
nullptr != multipleFinders_.get()) {
85 multipleFinders_->emplace_back(iFinder);
89 if (
nullptr != oldFinder.get()) {
91 <<
"An additional source has been added to the Record " << key_.name() <<
"'\n" 92 <<
"after all the other sources have been dealt with. This is a logic error, please send email to the " 98 validityInterval_ = iInterval;
102 const std::vector<std::shared_ptr<EventSetupRecordProvider>>& iProviders) {
103 using std::placeholders::_1;
104 std::shared_ptr<DependentRecordIntervalFinder> newFinder =
105 make_shared_noexcept_false<DependentRecordIntervalFinder>(
key());
107 std::shared_ptr<EventSetupRecordIntervalFinder> old = swapFinder(newFinder);
109 for (
auto const&
p : iProviders) {
110 newFinder->addProviderWeAreDependentOn(
p);
114 if (old.get() !=
nullptr) {
115 newFinder->setAlternateFinder(old);
119 using std::placeholders::_1;
121 if (1 < multipleFinders_->size()) {
122 std::shared_ptr<IntersectingIOVRecordIntervalFinder> intFinder =
123 make_shared_noexcept_false<IntersectingIOVRecordIntervalFinder>(key_);
124 intFinder->swapFinders(*multipleFinders_);
128 multipleFinders_.reset(
nullptr);
136 const ProxyList& keyedProxies(iProvider->keyedProxies(this->key()));
137 ProxyList::const_iterator finishedProxyList(keyedProxies.end());
138 for (ProxyList::const_iterator keyedProxy(keyedProxies.begin()); keyedProxy != finishedProxyList; ++keyedProxy) {
139 PreferredMap::const_iterator itFound = iMap.find(keyedProxy->first);
140 if (iMap.end() != itFound) {
141 if (itFound->second.type_ != keyedProxy->second->providerDescription()->type_ ||
142 itFound->second.label_ != keyedProxy->second->providerDescription()->label_) {
147 record_.add((*keyedProxy).first, (*keyedProxy).second.get());
152 record_.set(this->validityInterval());
160 using std::placeholders::_1;
161 if (checkResetTransients()) {
168 if (setValidityIntervalFor(iTime)) {
169 addRecordTo(iEventSetupProvider);
177 if (!lastSyncWasBeginOfRun_) {
182 if (validityInterval_.validFor(iTime)) {
185 bool returnValue =
false;
187 if (
nullptr != finder_.get()) {
190 validityInterval_ = finder_->findIntervalFor(key_, iTime);
195 if (oldFirst != validityInterval_.first()) {
197 for (
auto& provider : providers_) {
198 provider->newInterval(key_, validityInterval_);
208 using std::placeholders::_1;
219 record().getESProducers(referencedESProducers[key_]);
223 std::map<DataKey, ComponentDescription const*>& referencedDataKeys)
const {
224 std::vector<DataKey>
keys;
225 record().fillRegisteredDataKeys(keys);
226 std::vector<ComponentDescription const*>
components =
record().componentsForRegisteredDataKeys();
227 auto itComponents = components.begin();
228 for (
auto const&
k : keys) {
229 referencedDataKeys.emplace(
k, *itComponents);
235 using std::placeholders::_1;
247 using std::placeholders::_1;
248 std::set<ComponentDescription> descriptions;
251 std::inserter(descriptions, descriptions.end()),
257 using std::placeholders::_1;
258 auto itFound = std::find_if(
262 if (itFound == providers_.end()) {
263 return std::shared_ptr<DataProxyProvider>();
269 for (
auto& dataProxyProvider : providers_) {
270 if (dataProxyProvider->description().pid_ == psetID.
psetID()) {
274 return std::shared_ptr<DataProxyProvider>();
278 ParameterSetIDHolder const& psetID, std::shared_ptr<DataProxyProvider>
const& sharedDataProxyProvider) {
279 for (
auto& dataProxyProvider : providers_) {
280 if (dataProxyProvider->description().pid_ == psetID.
psetID()) {
281 dataProxyProvider = sharedDataProxyProvider;
287 std::vector<DataKey> ret;
288 record_.fillRegisteredDataKeys(ret);
293 return record_.componentsForRegisteredDataKeys();
std::map< DataKey, ComponentDescription > DataToPreferredProviderMap
EventNumber_t event() const
void resetProxiesIfTransient(const EventSetupRecordKey &iRecordType)
void resetProxyProvider(ParameterSetIDHolder const &, std::shared_ptr< DataProxyProvider > const &)
void add(std::shared_ptr< DataProxyProvider >)
const EventID & eventID() const
bool setValidityIntervalFor(IOVSyncValue const &)
sets interval to this time and returns true if have a valid interval for time
void fillReferencedDataKeys(std::map< DataKey, ComponentDescription const * > &referencedDataKeys) const
std::vector< std::pair< DataKey, edm::propagate_const< std::shared_ptr< DataProxy > > > > KeyedProxies
void addRecordToIfValid(EventSetupProvider &, IOVSyncValue const &)
std::vector< DataKey > registeredDataKeys() const
The available DataKeys in the Record. The order can be used to request the data by index...
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
bool checkResetTransients()
std::vector< ComponentDescription const * > componentsForRegisteredDataKeys() const
void setValidityInterval(ValidityInterval const &)
ParameterSetID const & psetID() const
void resetProxies(const EventSetupRecordKey &iRecordType)
const ComponentDescription & description() const
void setDependentProviders(std::vector< std::shared_ptr< EventSetupRecordProvider >> const &)
If the provided Record depends on other Records, here are the dependent Providers.
EventSetupRecordProvider(EventSetupRecordKey const &iKey)
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
void addFinder(std::shared_ptr< EventSetupRecordIntervalFinder >)
For now, only use one finder.
std::set< EventSetupRecordKey > dependencies(EventSetupRecordKey const &)
std::shared_ptr< DataProxyProvider > proxyProvider(ComponentDescription const &)
returns the first matching DataProxyProvider or a 'null' if not found
void addProxiesToRecordHelper(edm::propagate_const< std::shared_ptr< DataProxyProvider >> &dpp, DataToPreferredProviderMap const &mp)
bool search_all(ForwardSequence const &s, Datum const &d)
void addProxiesToRecord(std::shared_ptr< DataProxyProvider >, DataToPreferredProviderMap const &)
void getReferencedESProducers(std::map< EventSetupRecordKey, std::vector< ComponentDescription const * >> &referencedESProducers)
std::set< ComponentDescription > proxyProviderDescriptions() const
return information on which DataProxyProviders are supplying information
std::set< EventSetupRecordKey > dependentRecords() const
Returns the list of Records the provided Record depends on (usually none)
void addRecordTo(EventSetupProvider &)
void addRecordToEventSetup(EventSetupRecordImpl &iRecord)
void usePreferred(DataToPreferredProviderMap const &)
void resetProxies()
This will clear the cache's of all the Proxies so that next time they are called they will run...
void resetRecordToProxyPointers(DataToPreferredProviderMap const &iMap)
static const IOVSyncValue & invalidIOVSyncValue()