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)
 
void fillReferencedDataKeys (std::map< DataKey, ComponentDescription const * > &referencedDataKeys)
 
boost::shared_ptr
< EventSetupRecordIntervalFinder
finder () const
 
void getReferencedESProducers (std::map< EventSetupRecordKey, std::vector< ComponentDescription const * > > &referencedESProducers)
 
EventSetupRecordKey const & key () const
 
boost::shared_ptr
< DataProxyProvider
proxyProvider (ComponentDescription const &) const
 returns the first matching DataProxyProvider or a 'null' if not found More...
 
boost::shared_ptr
< DataProxyProvider
proxyProvider (ParameterSetIDHolder const &) const
 returns the first matching 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 resetProxyProvider (ParameterSetIDHolder const &, boost::shared_ptr< DataProxyProvider > const &)
 
void resetRecordToProxyPointers (DataToPreferredProviderMap const &iMap)
 
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 45 of file EventSetupRecordProvider.h.

Member Typedef Documentation

Definition at line 48 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 assert(), key_, providers_, and edm::search_all().

Referenced by counter.Counter::register().

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_
assert(m_qm.get())
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 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 138 of file EventSetupRecordProvider.cc.

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

Referenced by resetRecordToProxyPointers(), and usePreferred().

139  {
140  typedef DataProxyProvider::KeyedProxies ProxyList ;
142 
143  EventSetupRecord& rec = record();
144  const ProxyList& keyedProxies(iProvider->keyedProxies(this->key())) ;
145  ProxyList::const_iterator finishedProxyList(keyedProxies.end()) ;
146  for (ProxyList::const_iterator keyedProxy(keyedProxies.begin()) ;
147  keyedProxy != finishedProxyList ;
148  ++keyedProxy) {
149  PreferredMap::const_iterator itFound = iMap.find(keyedProxy->first);
150  if(iMap.end() != itFound) {
151  if( itFound->second.type_ != keyedProxy->second->providerDescription()->type_ ||
152  itFound->second.label_ != keyedProxy->second->providerDescription()->label_ ) {
153  //this is not the preferred provider
154  continue;
155  }
156  }
157  rec.add((*keyedProxy).first , (*keyedProxy).second.get()) ;
158  }
159 }
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 162 of file EventSetupRecordProvider.cc.

References edm::eventsetup::EventSetupProvider::addRecordToEventSetup(), record(), edm::eventsetup::EventSetupRecord::set(), and validityInterval().

Referenced by addRecordToIfValid().

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

Definition at line 183 of file EventSetupRecordProvider.cc.

References addRecordTo(), and setValidityIntervalFor().

185 {
186  if(setValidityIntervalFor(iTime)) {
187  addRecordTo(iEventSetupProvider);
188  }
189 }
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 267 of file EventSetupRecordProvider.cc.

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

Referenced by resetTransients().

268 {
269  return record().transientReset();
270 }
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 274 of file EventSetupRecordProvider.cc.

275 {
276  return std::set<EventSetupRecordKey>();
277 }
void EventSetupRecordProvider::fillReferencedDataKeys ( std::map< DataKey, ComponentDescription const * > &  referencedDataKeys)

Definition at line 249 of file EventSetupRecordProvider.cc.

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

249  {
250  record().fillReferencedDataKeys(referencedDataKeys);
251 }
void fillReferencedDataKeys(std::map< DataKey, ComponentDescription const * > &referencedDataKeys)
virtual EventSetupRecord & record()=0
boost::shared_ptr<EventSetupRecordIntervalFinder> edm::eventsetup::EventSetupRecordProvider::finder ( ) const
inline

Definition at line 100 of file EventSetupRecordProvider.h.

References finder_.

100 { return finder_; }
boost::shared_ptr< EventSetupRecordIntervalFinder > finder_
void EventSetupRecordProvider::getReferencedESProducers ( std::map< EventSetupRecordKey, std::vector< ComponentDescription const * > > &  referencedESProducers)

Definition at line 244 of file EventSetupRecordProvider.cc.

References edm::eventsetup::EventSetupRecord::getESProducers(), key_, and record().

244  {
245  record().getESProducers(referencedESProducers[key_]);
246 }
virtual EventSetupRecord & record()=0
void getESProducers(std::vector< ComponentDescription const * > &esproducers)
EventSetupRecordKey const& edm::eventsetup::EventSetupRecordProvider::key ( ) const
inline

Definition at line 58 of file EventSetupRecordProvider.h.

References key_.

Referenced by setDependentProviders().

58 { return key_; }
EventSetupRecordProvider const& edm::eventsetup::EventSetupRecordProvider::operator= ( EventSetupRecordProvider const &  )
private
boost::shared_ptr< DataProxyProvider > EventSetupRecordProvider::proxyProvider ( ComponentDescription const &  iDesc) const

returns the first matching DataProxyProvider or a 'null' if not found

Definition at line 291 of file EventSetupRecordProvider.cc.

References edm::eventsetup::DataProxyProvider::description(), and providers_.

291  {
292  using std::placeholders::_1;
293  std::vector<boost::shared_ptr<DataProxyProvider> >::const_iterator itFound =
294  std::find_if(providers_.begin(),providers_.end(),
295  std::bind(std::equal_to<ComponentDescription>(),
296  iDesc,
297  std::bind(&DataProxyProvider::description,_1)));
298  if(itFound == providers_.end()){
299  return boost::shared_ptr<DataProxyProvider>();
300  }
301  return *itFound;
302 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
const ComponentDescription & description() const
boost::shared_ptr< DataProxyProvider > EventSetupRecordProvider::proxyProvider ( ParameterSetIDHolder const &  psetID) const

returns the first matching DataProxyProvider or a 'null' if not found

Definition at line 305 of file EventSetupRecordProvider.cc.

References providers_, and edm::eventsetup::ParameterSetIDHolder::psetID().

305  {
306  for (auto const& dataProxyProvider : providers_) {
307  if (dataProxyProvider->description().pid_ == psetID.psetID()) {
308  return dataProxyProvider;
309  }
310  }
311  return boost::shared_ptr<DataProxyProvider>();
312 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
std::set< ComponentDescription > EventSetupRecordProvider::proxyProviderDescriptions ( ) const

return information on which DataProxyProviders are supplying information

Definition at line 280 of file EventSetupRecordProvider.cc.

References edm::eventsetup::DataProxyProvider::description(), providers_, and create_public_lumi_plots::transform.

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

281 {
282  using std::placeholders::_1;
283  std::set<ComponentDescription> descriptions;
284  std::transform(providers_.begin(), providers_.end(),
285  std::inserter(descriptions,descriptions.end()),
286  std::bind(&DataProxyProvider::description,_1));
287  return descriptions;
288 }
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 231 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().

232 {
233  using std::placeholders::_1;
234  cacheReset();
236  //some proxies only clear if they were accessed transiently,
237  // since resetProxies resets that flag, calling resetTransients
238  // will force a clear
240 
241 }
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::resetProxyProvider ( ParameterSetIDHolder const &  psetID,
boost::shared_ptr< DataProxyProvider > const &  sharedDataProxyProvider 
)

Definition at line 315 of file EventSetupRecordProvider.cc.

References providers_, and edm::eventsetup::ParameterSetIDHolder::psetID().

315  {
316  for (auto& dataProxyProvider : providers_) {
317  if (dataProxyProvider->description().pid_ == psetID.psetID()) {
318  dataProxyProvider = sharedDataProxyProvider;
319  }
320  }
321 }
std::vector< boost::shared_ptr< DataProxyProvider > > providers_
void EventSetupRecordProvider::resetRecordToProxyPointers ( DataToPreferredProviderMap const &  iMap)

Definition at line 254 of file EventSetupRecordProvider.cc.

References addProxiesToRecord(), edm::eventsetup::EventSetupRecord::clearProxies(), edm::for_all(), providers_, and record().

254  {
255  using std::placeholders::_1;
256  record().clearProxies();
258 }
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
virtual EventSetupRecord & record()=0
void EventSetupRecordProvider::resetTransients ( )
private

Definition at line 172 of file EventSetupRecordProvider.cc.

References checkResetTransients(), edm::for_all(), key_, providers_, and edm::eventsetup::DataProxyProvider::resetProxiesIfTransient().

Referenced by setValidityIntervalFor().

173 {
174 
175  using std::placeholders::_1;
176  if(checkResetTransients()) {
178  }
179 }
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  using std::placeholders::_1;
111  boost::shared_ptr< DependentRecordIntervalFinder > newFinder(
113 
114  boost::shared_ptr<EventSetupRecordIntervalFinder> old = swapFinder(newFinder);
115  for_all(iProviders, std::bind(std::mem_fun(&DependentRecordIntervalFinder::addProviderWeAreDependentOn), &(*newFinder), _1));
116  //if a finder was already set, add it as a depedency. This is done to ensure that the IOVs properly change even if the
117  // old finder does not update each time a dependent record does change
118  if(old.get() != 0) {
119  newFinder->setAlternateFinder(old);
120  }
121 }
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 192 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().

193 {
194  //we want to wait until after the first event of a new run before
195  // we reset any transients just in case some modules get their data at beginRun or beginLumi
196  // and others wait till the first event
198  resetTransients();
199  }
200  lastSyncWasBeginOfRun_=iTime.eventID().event() == 0;
201 
202  if(validityInterval_.validFor(iTime)) {
203  return true;
204  }
205  bool returnValue = false;
206  //need to see if we get a new interval
207  if(0 != finder_.get()) {
209 
210  validityInterval_ = finder_->findIntervalFor(key_, iTime);
211  //are we in a valid range?
212  if(validityInterval_.first() != IOVSyncValue::invalidIOVSyncValue()) {
213  returnValue = true;
214  //did we actually change?
215  if(oldFirst != validityInterval_.first()) {
216  //tell all Providers to update
217  for(std::vector<boost::shared_ptr<DataProxyProvider> >::iterator itProvider = providers_.begin(),
218  itProviderEnd = providers_.end();
219  itProvider != itProviderEnd;
220  ++itProvider) {
221  (*itProvider)->newInterval(key_, validityInterval_);
222  }
223  cacheReset();
224  }
225  }
226  }
227  return returnValue;
228 }
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 115 of file EventSetupRecordProvider.h.

References finder_, and std::swap().

Referenced by setDependentProviders().

115  {
116  std::swap(iNew, finder_);
117  return iNew;
118  }
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 123 of file EventSetupRecordProvider.cc.

References addProxiesToRecord(), finder_, edm::for_all(), key_, multipleFinders_, and providers_.

124 {
125  using std::placeholders::_1;
127  if (1 < multipleFinders_->size()) {
128 
129  boost::shared_ptr<IntersectingIOVRecordIntervalFinder> intFinder(new IntersectingIOVRecordIntervalFinder(key_));
130  intFinder->swapFinders(*multipleFinders_);
131  finder_ = intFinder;
132  }
133  //now we get rid of the temporary
134  multipleFinders_.reset(nullptr);
135 }
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 55 of file EventSetupRecordProvider.h.

References validityInterval_.

Referenced by addRecordTo().

55  {
56  return validityInterval_;
57  }

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 133 of file EventSetupRecordProvider.h.

Referenced by setValidityIntervalFor().

std::auto_ptr<std::vector<boost::shared_ptr<EventSetupRecordIntervalFinder> > > edm::eventsetup::EventSetupRecordProvider::multipleFinders_
private

Definition at line 132 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