CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
edm::eventsetup::EventSetupRecordProvider Class Referenceabstract

#include <EventSetupRecordProvider.h>

Inheritance diagram for edm::eventsetup::EventSetupRecordProvider:
edm::eventsetup::EventSetupRecordProviderTemplate< T >

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. More...
 
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) More...
 
 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 More...
 
std::set< ComponentDescriptionproxyProviderDescriptions () const
 return information on which DataProxyProviders are supplying information More...
 
void resetProxies ()
 This will clear the cache's of all the Proxies so that next time they are called they will run. More...
 
void setDependentProviders (std::vector< boost::shared_ptr< EventSetupRecordProvider > >const &)
 If the provided Record depends on other Records, here are the dependent Providers. More...
 
void setValidityInterval (ValidityInterval const &)
 
bool setValidityIntervalFor (IOVSyncValue const &)
 sets interval to this time and returns true if have a valid interval for time More...
 
void usePreferred (DataToPreferredProviderMap const &)
 
ValidityInterval const & validityInterval () const
 
virtual ~EventSetupRecordProvider ()
 

Protected Member Functions

void addProxiesToRecord (boost::shared_ptr< DataProxyProvider >, DataToPreferredProviderMap const &)
 
void cacheReset ()
 
virtual EventSetupRecordrecord ()=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_
 

Detailed Description

Definition at line 44 of file EventSetupRecordProvider.h.

Member Typedef Documentation

Definition at line 47 of file EventSetupRecordProvider.h.

Constructor & Destructor Documentation

EventSetupRecordProvider::EventSetupRecordProvider ( EventSetupRecordKey const &  iKey)

Definition at line 45 of file EventSetupRecordProvider.cc.

45  : key_(iKey),
47  multipleFinders_(new std::vector<boost::shared_ptr<EventSetupRecordIntervalFinder> >()),
49 {
50 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
std::auto_ptr< std::vector< boost::shared_ptr< EventSetupRecordIntervalFinder > > > multipleFinders_
boost::shared_ptr< EventSetupRecordIntervalFinder > finder_
EventSetupRecordProvider::~EventSetupRecordProvider ( )
virtual

Definition at line 57 of file EventSetupRecordProvider.cc.

58 {
59 }
edm::eventsetup::EventSetupRecordProvider::EventSetupRecordProvider ( EventSetupRecordProvider const &  )
private

Member Function Documentation

void EventSetupRecordProvider::add ( boost::shared_ptr< DataProxyProvider iProvider)

Definition at line 77 of file EventSetupRecordProvider.cc.

References key_, providers_, and edm::search_all().

78 {
79  assert(iProvider->isUsingRecord(key_));
80  assert(!search_all(providers_, iProvider));
81  providers_.push_back(iProvider);
82 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
bool search_all(ForwardSequence const &s, Datum const &d)
Definition: Algorithms.h:46
void EventSetupRecordProvider::addFinder ( boost::shared_ptr< EventSetupRecordIntervalFinder iFinder)

For now, only use one finder.

Definition at line 85 of file EventSetupRecordProvider.cc.

References edm::hlt::Exception, finder_, key_, multipleFinders_, and edm::eventsetup::EventSetupRecordKey::name().

86 {
87  boost::shared_ptr<EventSetupRecordIntervalFinder> oldFinder = finder_;
88  finder_ = iFinder;
89  if (0 != multipleFinders_.get()) {
90  multipleFinders_->push_back(iFinder);
91  } else {
92  //dependent records set there finders after the multipleFinders_ has been released
93  // but they also have never had a finder set
94  if(0 != oldFinder.get()) {
95  cms::Exception("EventSetupMultipleSources")<<"An additional source has been added to the Record "
96  <<key_.name()<<"'\n"
97  <<"after all the other sources have been dealt with. This is a logic error, please send email to the framework group.";
98  }
99  }
100 }
std::auto_ptr< std::vector< boost::shared_ptr< EventSetupRecordIntervalFinder > > > multipleFinders_
boost::shared_ptr< EventSetupRecordIntervalFinder > finder_
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().

137  {
138  typedef DataProxyProvider::KeyedProxies ProxyList ;
140 
141  EventSetupRecord& rec = record();
142  const ProxyList& keyedProxies(iProvider->keyedProxies(this->key())) ;
143  ProxyList::const_iterator finishedProxyList(keyedProxies.end()) ;
144  for (ProxyList::const_iterator keyedProxy(keyedProxies.begin()) ;
145  keyedProxy != finishedProxyList ;
146  ++keyedProxy) {
147  PreferredMap::const_iterator itFound = iMap.find(keyedProxy->first);
148  if(iMap.end() != itFound) {
149  if( itFound->second.type_ != keyedProxy->second->providerDescription()->type_ ||
150  itFound->second.label_ != keyedProxy->second->providerDescription()->label_ ) {
151  //this is not the preferred provider
152  continue;
153  }
154  }
155  rec.add((*keyedProxy).first , (*keyedProxy).second.get()) ;
156  }
157 }
std::map< DataKey, ComponentDescription > DataToPreferredProviderMap
std::vector< std::pair< DataKey, boost::shared_ptr< DataProxy > > > KeyedProxies
virtual EventSetupRecord & record()=0
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().

160  {
161  EventSetupRecord& rec = record();
162  rec.set(this->validityInterval());
163  iEventSetupProvider.addRecordToEventSetup(rec);
164 }
ValidityInterval const & validityInterval() const
virtual EventSetupRecord & record()=0
void EventSetupRecordProvider::addRecordToIfValid ( EventSetupProvider iEventSetupProvider,
IOVSyncValue const &  iTime 
)

Definition at line 179 of file EventSetupRecordProvider.cc.

References addRecordTo(), and setValidityIntervalFor().

181 {
182  if(setValidityIntervalFor(iTime)) {
183  addRecordTo(iEventSetupProvider);
184  }
185 }
bool setValidityIntervalFor(IOVSyncValue const &)
sets interval to this time and returns true if have a valid interval for time
void EventSetupRecordProvider::cacheReset ( )
protected
bool EventSetupRecordProvider::checkResetTransients ( )
private

Definition at line 245 of file EventSetupRecordProvider.cc.

References record(), and edm::eventsetup::EventSetupRecord::transientReset().

Referenced by resetTransients().

246 {
247  return record().transientReset();
248 }
virtual EventSetupRecord & record()=0
bool transientReset()
returns &#39;true&#39; if a transient request has occurred since the last call to 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.

253 {
254  return std::set<EventSetupRecordKey>();
255 }
boost::shared_ptr<EventSetupRecordIntervalFinder> edm::eventsetup::EventSetupRecordProvider::finder ( ) const
inline

Definition at line 92 of file EventSetupRecordProvider.h.

References finder_.

92 { return finder_; }
boost::shared_ptr< EventSetupRecordIntervalFinder > finder_
EventSetupRecordKey const& edm::eventsetup::EventSetupRecordProvider::key ( ) const
inline

Definition at line 57 of file EventSetupRecordProvider.h.

References key_.

Referenced by setDependentProviders().

57 { 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_.

268  {
269  std::vector<boost::shared_ptr<DataProxyProvider> >::const_iterator itFound =
270  std::find_if(providers_.begin(),providers_.end(),
271  boost::bind(std::equal_to<ComponentDescription>(),
272  iDesc,
273  boost::bind(&DataProxyProvider::description,_1)));
274  if(itFound == providers_.end()){
275  return boost::shared_ptr<DataProxyProvider>();
276  }
277  return *itFound;
278 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
const ComponentDescription & description() const
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(), providers_, and create_public_pileup_plots::transform.

Referenced by edm::eventsetup::EventSetupProvider::proxyProviderDescriptions().

259 {
260  std::set<ComponentDescription> descriptions;
261  std::transform(providers_.begin(), providers_.end(),
262  std::inserter(descriptions,descriptions.end()),
263  boost::bind(&DataProxyProvider::description,_1));
264  return descriptions;
265 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
const ComponentDescription & description() const
virtual EventSetupRecord& edm::eventsetup::EventSetupRecordProvider::record ( )
protectedpure virtual
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().

228 {
229  cacheReset();
231  //some proxies only clear if they were accessed transiently,
232  // since resetProxies resets that flag, calling resetTransients
233  // will force a clear
235 
236 }
void resetProxiesIfTransient(const EventSetupRecordKey &iRecordType)
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void resetProxies(const EventSetupRecordKey &iRecordType)
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().

171 {
172  if(checkResetTransients()) {
174  }
175 }
void resetProxiesIfTransient(const EventSetupRecordKey &iRecordType)
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
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().

109 {
110  boost::shared_ptr< DependentRecordIntervalFinder > newFinder(
112 
113  boost::shared_ptr<EventSetupRecordIntervalFinder> old = swapFinder(newFinder);
114  for_all(iProviders, boost::bind(std::mem_fun(&DependentRecordIntervalFinder::addProviderWeAreDependentOn), &(*newFinder), _1));
115  //if a finder was already set, add it as a depedency. This is done to ensure that the IOVs properly change even if the
116  // old finder does not update each time a dependent record does change
117  if(old.get() != 0) {
118  newFinder->setAlternateFinder(old);
119  }
120 }
boost::shared_ptr< EventSetupRecordIntervalFinder > swapFinder(boost::shared_ptr< EventSetupRecordIntervalFinder > iNew)
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void addProviderWeAreDependentOn(boost::shared_ptr< EventSetupRecordProvider >)
EventSetupRecordKey const & key() const
void EventSetupRecordProvider::setValidityInterval ( ValidityInterval const &  iInterval)

Definition at line 102 of file EventSetupRecordProvider.cc.

References validityInterval_.

103 {
104  validityInterval_ = iInterval;
105 }
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().

189 {
190  //we want to wait until after the first event of a new run before
191  // we reset any transients just in case some modules get their data at beginRun or beginLumi
192  // and others wait till the first event
194  resetTransients();
195  }
196  lastSyncWasBeginOfRun_=iTime.eventID().event() == 0;
197 
198  if(validityInterval_.validFor(iTime)) {
199  return true;
200  }
201  bool returnValue = false;
202  //need to see if we get a new interval
203  if(0 != finder_.get()) {
205 
206  validityInterval_ = finder_->findIntervalFor(key_, iTime);
207  //are we in a valid range?
208  if(validityInterval_.first() != IOVSyncValue::invalidIOVSyncValue()) {
209  returnValue = true;
210  //did we actually change?
211  if(oldFirst != validityInterval_.first()) {
212  //tell all Providers to update
213  for(std::vector<boost::shared_ptr<DataProxyProvider> >::iterator itProvider = providers_.begin(),
214  itProviderEnd = providers_.end();
215  itProvider != itProviderEnd;
216  ++itProvider) {
217  (*itProvider)->newInterval(key_, validityInterval_);
218  }
219  cacheReset();
220  }
221  }
222  }
223  return returnValue;
224 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
bool validFor(const IOVSyncValue &) const
boost::shared_ptr< EventSetupRecordIntervalFinder > finder_
const IOVSyncValue & first() const
static const IOVSyncValue & invalidIOVSyncValue()
Definition: IOVSyncValue.cc:92
boost::shared_ptr<EventSetupRecordIntervalFinder> edm::eventsetup::EventSetupRecordProvider::swapFinder ( boost::shared_ptr< EventSetupRecordIntervalFinder iNew)
inlineprotected

Definition at line 101 of file EventSetupRecordProvider.h.

References finder_, and std::swap().

Referenced by setDependentProviders().

101  {
102  std::swap(iNew, finder_);
103  return iNew;
104  }
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
boost::shared_ptr< EventSetupRecordIntervalFinder > finder_
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_.

123 {
125  if (1 < multipleFinders_->size()) {
126 
127  boost::shared_ptr<IntersectingIOVRecordIntervalFinder> intFinder(new IntersectingIOVRecordIntervalFinder(key_));
128  intFinder->swapFinders(*multipleFinders_);
129  finder_ = intFinder;
130  }
131  //now we get rid of the temporary
132  multipleFinders_.reset(0);
133 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
void addProxiesToRecord(boost::shared_ptr< DataProxyProvider >, DataToPreferredProviderMap const &)
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
std::auto_ptr< std::vector< boost::shared_ptr< EventSetupRecordIntervalFinder > > > multipleFinders_
boost::shared_ptr< EventSetupRecordIntervalFinder > finder_
ValidityInterval const& edm::eventsetup::EventSetupRecordProvider::validityInterval ( ) const
inline

Definition at line 54 of file EventSetupRecordProvider.h.

References validityInterval_.

Referenced by addRecordTo().

54  {
55  return validityInterval_;
56  }

Member Data Documentation

boost::shared_ptr<EventSetupRecordIntervalFinder> edm::eventsetup::EventSetupRecordProvider::finder_
private
EventSetupRecordKey const edm::eventsetup::EventSetupRecordProvider::key_
private
bool edm::eventsetup::EventSetupRecordProvider::lastSyncWasBeginOfRun_
private

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
ValidityInterval edm::eventsetup::EventSetupRecordProvider::validityInterval_
private