![]() |
![]() |
#include <EventSetupRecordProvider.h>
Public Types | |
typedef std::map< DataKey, ComponentDescription > | DataToPreferredProviderMap |
Public Member Functions | |
void | add (boost::shared_ptr< DataProxyProvider >) |
void | addFinder (boost::shared_ptr< EventSetupRecordIntervalFinder >) |
For now, only use one finder. | |
void | addRecordTo (EventSetupProvider &) |
void | addRecordToIfValid (EventSetupProvider &, IOVSyncValue const &) |
virtual std::set < EventSetupRecordKey > | dependentRecords () const |
Returns the list of Records the provided Record depends on (usually none) | |
EventSetupRecordProvider (EventSetupRecordKey const &iKey) | |
boost::shared_ptr < EventSetupRecordIntervalFinder > | finder () const |
EventSetupRecordKey const & | key () const |
boost::shared_ptr < DataProxyProvider > | proxyProvider (ComponentDescription const &) const |
returns the DataProxyProvider or a 'null' if not found | |
std::set< ComponentDescription > | proxyProviderDescriptions () const |
return information on which DataProxyProviders are supplying information | |
void | resetProxies () |
This will clear the cache's of all the Proxies so that next time they are called they will run. | |
void | setDependentProviders (std::vector< boost::shared_ptr< EventSetupRecordProvider > >const &) |
If the provided Record depends on other Records, here are the dependent Providers. | |
void | setValidityInterval (ValidityInterval const &) |
bool | setValidityIntervalFor (IOVSyncValue const &) |
sets interval to this time and returns true if have a valid interval for time | |
void | usePreferred (DataToPreferredProviderMap const &) |
ValidityInterval const & | validityInterval () const |
virtual | ~EventSetupRecordProvider () |
Protected Member Functions | |
void | addProxiesToRecord (boost::shared_ptr< DataProxyProvider >, DataToPreferredProviderMap const &) |
void | cacheReset () |
virtual EventSetupRecord & | record ()=0 |
boost::shared_ptr < EventSetupRecordIntervalFinder > | swapFinder (boost::shared_ptr< EventSetupRecordIntervalFinder > iNew) |
Private Member Functions | |
bool | checkResetTransients () |
EventSetupRecordProvider (EventSetupRecordProvider const &) | |
EventSetupRecordProvider const & | operator= (EventSetupRecordProvider const &) |
void | resetTransients () |
Private Attributes | |
boost::shared_ptr < EventSetupRecordIntervalFinder > | finder_ |
EventSetupRecordKey const | key_ |
bool | lastSyncWasBeginOfRun_ |
std::auto_ptr< std::vector < boost::shared_ptr < EventSetupRecordIntervalFinder > > > | multipleFinders_ |
std::vector< boost::shared_ptr < DataProxyProvider > > | providers_ |
ValidityInterval | validityInterval_ |
Definition at line 44 of file EventSetupRecordProvider.h.
typedef std::map<DataKey, ComponentDescription> edm::eventsetup::EventSetupRecordProvider::DataToPreferredProviderMap |
Definition at line 47 of file EventSetupRecordProvider.h.
EventSetupRecordProvider::EventSetupRecordProvider | ( | EventSetupRecordKey const & | iKey | ) |
Definition at line 45 of file EventSetupRecordProvider.cc.
: key_(iKey), validityInterval_(), finder_(), providers_(), multipleFinders_(new std::vector<boost::shared_ptr<EventSetupRecordIntervalFinder> >()), lastSyncWasBeginOfRun_(true) { }
EventSetupRecordProvider::~EventSetupRecordProvider | ( | ) | [virtual] |
Definition at line 57 of file EventSetupRecordProvider.cc.
{ }
edm::eventsetup::EventSetupRecordProvider::EventSetupRecordProvider | ( | EventSetupRecordProvider const & | ) | [private] |
void EventSetupRecordProvider::add | ( | boost::shared_ptr< DataProxyProvider > | iProvider | ) |
Definition at line 77 of file EventSetupRecordProvider.cc.
References key_, providers_, and edm::search_all().
{ assert(iProvider->isUsingRecord(key_)); assert(!search_all(providers_, iProvider)); providers_.push_back(iProvider); }
void EventSetupRecordProvider::addFinder | ( | boost::shared_ptr< EventSetupRecordIntervalFinder > | iFinder | ) |
For now, only use one finder.
Definition at line 85 of file EventSetupRecordProvider.cc.
References Exception, finder_, key_, multipleFinders_, and edm::eventsetup::EventSetupRecordKey::name().
{ boost::shared_ptr<EventSetupRecordIntervalFinder> oldFinder = finder_; finder_ = iFinder; if (0 != multipleFinders_.get()) { multipleFinders_->push_back(iFinder); } else { //dependent records set there finders after the multipleFinders_ has been released // but they also have never had a finder set if(0 != oldFinder.get()) { cms::Exception("EventSetupMultipleSources")<<"An additional source has been added to the Record " <<key_.name()<<"'\n" <<"after all the other sources have been dealt with. This is a logic error, please send email to the framework group."; } } }
void EventSetupRecordProvider::addProxiesToRecord | ( | boost::shared_ptr< DataProxyProvider > | iProvider, |
DataToPreferredProviderMap const & | iMap | ||
) | [protected] |
Definition at line 136 of file EventSetupRecordProvider.cc.
References edm::eventsetup::EventSetupRecord::add(), and record().
Referenced by usePreferred().
{ typedef DataProxyProvider::KeyedProxies ProxyList ; typedef EventSetupRecordProvider::DataToPreferredProviderMap PreferredMap; EventSetupRecord& rec = record(); const ProxyList& keyedProxies(iProvider->keyedProxies(this->key())) ; ProxyList::const_iterator finishedProxyList(keyedProxies.end()) ; for (ProxyList::const_iterator keyedProxy(keyedProxies.begin()) ; keyedProxy != finishedProxyList ; ++keyedProxy) { PreferredMap::const_iterator itFound = iMap.find(keyedProxy->first); if(iMap.end() != itFound) { if( itFound->second.type_ != keyedProxy->second->providerDescription()->type_ || itFound->second.label_ != keyedProxy->second->providerDescription()->label_ ) { //this is not the preferred provider continue; } } rec.add((*keyedProxy).first , (*keyedProxy).second.get()) ; } }
void EventSetupRecordProvider::addRecordTo | ( | EventSetupProvider & | iEventSetupProvider | ) |
Definition at line 160 of file EventSetupRecordProvider.cc.
References edm::eventsetup::EventSetupProvider::addRecordToEventSetup(), record(), edm::eventsetup::EventSetupRecord::set(), and validityInterval().
Referenced by addRecordToIfValid().
{ EventSetupRecord& rec = record(); rec.set(this->validityInterval()); iEventSetupProvider.addRecordToEventSetup(rec); }
void EventSetupRecordProvider::addRecordToIfValid | ( | EventSetupProvider & | iEventSetupProvider, |
IOVSyncValue const & | iTime | ||
) |
Definition at line 179 of file EventSetupRecordProvider.cc.
References addRecordTo(), and setValidityIntervalFor().
{ if(setValidityIntervalFor(iTime)) { addRecordTo(iEventSetupProvider); } }
void EventSetupRecordProvider::cacheReset | ( | ) | [protected] |
Definition at line 239 of file EventSetupRecordProvider.cc.
References edm::eventsetup::EventSetupRecord::cacheReset(), and record().
Referenced by resetProxies(), and setValidityIntervalFor().
{ record().cacheReset(); }
bool EventSetupRecordProvider::checkResetTransients | ( | ) | [private] |
Definition at line 245 of file EventSetupRecordProvider.cc.
References record(), and edm::eventsetup::EventSetupRecord::transientReset().
Referenced by resetTransients().
{ return record().transientReset(); }
std::set< EventSetupRecordKey > EventSetupRecordProvider::dependentRecords | ( | ) | const [virtual] |
Returns the list of Records the provided Record depends on (usually none)
Reimplemented in edm::eventsetup::EventSetupRecordProviderTemplate< T >.
Definition at line 252 of file EventSetupRecordProvider.cc.
{
return std::set<EventSetupRecordKey>();
}
boost::shared_ptr<EventSetupRecordIntervalFinder> edm::eventsetup::EventSetupRecordProvider::finder | ( | ) | const [inline] |
EventSetupRecordKey const& edm::eventsetup::EventSetupRecordProvider::key | ( | ) | const [inline] |
Definition at line 57 of file EventSetupRecordProvider.h.
References key_.
Referenced by setDependentProviders().
{ return key_; }
EventSetupRecordProvider const& edm::eventsetup::EventSetupRecordProvider::operator= | ( | EventSetupRecordProvider const & | ) | [private] |
boost::shared_ptr< DataProxyProvider > EventSetupRecordProvider::proxyProvider | ( | ComponentDescription const & | iDesc | ) | const |
returns the DataProxyProvider or a 'null' if not found
Definition at line 268 of file EventSetupRecordProvider.cc.
References edm::eventsetup::DataProxyProvider::description(), and providers_.
{ std::vector<boost::shared_ptr<DataProxyProvider> >::const_iterator itFound = std::find_if(providers_.begin(),providers_.end(), boost::bind(std::equal_to<ComponentDescription>(), iDesc, boost::bind(&DataProxyProvider::description,_1))); if(itFound == providers_.end()){ return boost::shared_ptr<DataProxyProvider>(); } return *itFound; }
std::set< ComponentDescription > EventSetupRecordProvider::proxyProviderDescriptions | ( | ) | const |
return information on which DataProxyProviders are supplying information
Definition at line 258 of file EventSetupRecordProvider.cc.
References edm::eventsetup::DataProxyProvider::description(), and providers_.
Referenced by edm::eventsetup::EventSetupProvider::proxyProviderDescriptions().
{ std::set<ComponentDescription> descriptions; std::transform(providers_.begin(), providers_.end(), std::inserter(descriptions,descriptions.end()), boost::bind(&DataProxyProvider::description,_1)); return descriptions; }
virtual EventSetupRecord& edm::eventsetup::EventSetupRecordProvider::record | ( | ) | [protected, pure virtual] |
Implemented in edm::eventsetup::EventSetupRecordProviderTemplate< T >.
Referenced by addProxiesToRecord(), addRecordTo(), cacheReset(), and checkResetTransients().
void EventSetupRecordProvider::resetProxies | ( | ) |
This will clear the cache's of all the Proxies so that next time they are called they will run.
Definition at line 227 of file EventSetupRecordProvider.cc.
References cacheReset(), edm::for_all(), key_, providers_, edm::eventsetup::DataProxyProvider::resetProxies(), and edm::eventsetup::DataProxyProvider::resetProxiesIfTransient().
Referenced by edm::eventsetup::EventSetupProvider::resetRecordPlusDependentRecords().
{ cacheReset(); for_all(providers_, boost::bind(&DataProxyProvider::resetProxies,_1,key_)); //some proxies only clear if they were accessed transiently, // since resetProxies resets that flag, calling resetTransients // will force a clear for_all(providers_, boost::bind(&DataProxyProvider::resetProxiesIfTransient,_1,key_)); }
void EventSetupRecordProvider::resetTransients | ( | ) | [private] |
Definition at line 170 of file EventSetupRecordProvider.cc.
References checkResetTransients(), edm::for_all(), key_, providers_, and edm::eventsetup::DataProxyProvider::resetProxiesIfTransient().
Referenced by setValidityIntervalFor().
{ if(checkResetTransients()) { for_all(providers_, boost::bind(&DataProxyProvider::resetProxiesIfTransient,_1,key_)); } }
void EventSetupRecordProvider::setDependentProviders | ( | std::vector< boost::shared_ptr< EventSetupRecordProvider > >const & | iProviders | ) |
If the provided Record depends on other Records, here are the dependent Providers.
Definition at line 108 of file EventSetupRecordProvider.cc.
References edm::eventsetup::DependentRecordIntervalFinder::addProviderWeAreDependentOn(), edm::for_all(), key(), and swapFinder().
{ boost::shared_ptr< DependentRecordIntervalFinder > newFinder( new DependentRecordIntervalFinder(key())); boost::shared_ptr<EventSetupRecordIntervalFinder> old = swapFinder(newFinder); for_all(iProviders, boost::bind(std::mem_fun(&DependentRecordIntervalFinder::addProviderWeAreDependentOn), &(*newFinder), _1)); //if a finder was already set, add it as a depedency. This is done to ensure that the IOVs properly change even if the // old finder does not update each time a dependent record does change if(old.get() != 0) { newFinder->setAlternateFinder(old); } }
void EventSetupRecordProvider::setValidityInterval | ( | ValidityInterval const & | iInterval | ) |
Definition at line 102 of file EventSetupRecordProvider.cc.
References validityInterval_.
{ validityInterval_ = iInterval; }
bool EventSetupRecordProvider::setValidityIntervalFor | ( | IOVSyncValue const & | iTime | ) |
sets interval to this time and returns true if have a valid interval for time
Definition at line 188 of file EventSetupRecordProvider.cc.
References cacheReset(), edm::EventID::event(), edm::IOVSyncValue::eventID(), finder_, edm::ValidityInterval::first(), edm::IOVSyncValue::invalidIOVSyncValue(), key_, lastSyncWasBeginOfRun_, providers_, resetTransients(), edm::ValidityInterval::validFor(), and validityInterval_.
Referenced by addRecordToIfValid().
{ //we want to wait until after the first event of a new run before // we reset any transients just in case some modules get their data at beginRun or beginLumi // and others wait till the first event if(!lastSyncWasBeginOfRun_) { resetTransients(); } lastSyncWasBeginOfRun_=iTime.eventID().event() == 0; if(validityInterval_.validFor(iTime)) { return true; } bool returnValue = false; //need to see if we get a new interval if(0 != finder_.get()) { IOVSyncValue oldFirst(validityInterval_.first()); validityInterval_ = finder_->findIntervalFor(key_, iTime); //are we in a valid range? if(validityInterval_.first() != IOVSyncValue::invalidIOVSyncValue()) { returnValue = true; //did we actually change? if(oldFirst != validityInterval_.first()) { //tell all Providers to update for(std::vector<boost::shared_ptr<DataProxyProvider> >::iterator itProvider = providers_.begin(), itProviderEnd = providers_.end(); itProvider != itProviderEnd; ++itProvider) { (*itProvider)->newInterval(key_, validityInterval_); } cacheReset(); } } } return returnValue; }
boost::shared_ptr<EventSetupRecordIntervalFinder> edm::eventsetup::EventSetupRecordProvider::swapFinder | ( | boost::shared_ptr< EventSetupRecordIntervalFinder > | iNew | ) | [inline, protected] |
Definition at line 101 of file EventSetupRecordProvider.h.
References finder_, and edm::eventsetup::swap().
Referenced by setDependentProviders().
void EventSetupRecordProvider::usePreferred | ( | DataToPreferredProviderMap const & | iMap | ) |
In the case of a conflict, sets what Provider to call. This must be called after all providers have been added. An empty map is acceptable.
Definition at line 122 of file EventSetupRecordProvider.cc.
References addProxiesToRecord(), finder_, edm::for_all(), key_, multipleFinders_, and providers_.
{ for_all(providers_, boost::bind(&EventSetupRecordProvider::addProxiesToRecord,this,_1,iMap)); if (1 < multipleFinders_->size()) { boost::shared_ptr<IntersectingIOVRecordIntervalFinder> intFinder(new IntersectingIOVRecordIntervalFinder(key_)); intFinder->swapFinders(*multipleFinders_); finder_ = intFinder; } //now we get rid of the temporary multipleFinders_.reset(0); }
ValidityInterval const& edm::eventsetup::EventSetupRecordProvider::validityInterval | ( | ) | const [inline] |
Definition at line 54 of file EventSetupRecordProvider.h.
References validityInterval_.
Referenced by addRecordTo().
{ return validityInterval_; }
boost::shared_ptr<EventSetupRecordIntervalFinder> edm::eventsetup::EventSetupRecordProvider::finder_ [private] |
Definition at line 116 of file EventSetupRecordProvider.h.
Referenced by addFinder(), finder(), setValidityIntervalFor(), swapFinder(), and usePreferred().
EventSetupRecordKey const edm::eventsetup::EventSetupRecordProvider::key_ [private] |
Definition at line 114 of file EventSetupRecordProvider.h.
Referenced by add(), addFinder(), key(), resetProxies(), resetTransients(), setValidityIntervalFor(), and usePreferred().
Definition at line 119 of file EventSetupRecordProvider.h.
Referenced by setValidityIntervalFor().
std::auto_ptr<std::vector<boost::shared_ptr<EventSetupRecordIntervalFinder> > > edm::eventsetup::EventSetupRecordProvider::multipleFinders_ [private] |
Definition at line 118 of file EventSetupRecordProvider.h.
Referenced by addFinder(), and usePreferred().
std::vector<boost::shared_ptr<DataProxyProvider> > edm::eventsetup::EventSetupRecordProvider::providers_ [private] |
Definition at line 117 of file EventSetupRecordProvider.h.
Referenced by add(), proxyProvider(), proxyProviderDescriptions(), resetProxies(), resetTransients(), setValidityIntervalFor(), and usePreferred().
Definition at line 115 of file EventSetupRecordProvider.h.
Referenced by setValidityInterval(), setValidityIntervalFor(), and validityInterval().