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 Types | Private Member Functions | Private Attributes
edm::eventsetup::EventSetupProvider Class Reference

#include <EventSetupProvider.h>

Public Types

typedef std::pair< DataType,
DataLabel
DataKeyInfo
 
typedef std::string DataLabel
 
typedef std::string DataType
 
typedef std::map
< ComponentDescription,
RecordToDataMap
PreferredProviderInfo
 
typedef std::string RecordName
 
typedef std::multimap
< RecordName, DataKeyInfo
RecordToDataMap
 

Public Member Functions

void add (boost::shared_ptr< DataProxyProvider >)
 
void add (boost::shared_ptr< EventSetupRecordIntervalFinder >)
 
void addRecordToEventSetup (EventSetupRecord &iRecord)
 
EventSetup const & eventSetup () const
 
EventSetup const & eventSetupForInstance (IOVSyncValue const &)
 
 EventSetupProvider (PreferredProviderInfo const *iInfo=0)
 
void finishConfiguration ()
 
void forceCacheClear ()
 Used when testing that all code properly updates on IOV changes of all Records. More...
 
std::set< ComponentDescriptionproxyProviderDescriptions () const
 
void resetRecordPlusDependentRecords (EventSetupRecordKey const &)
 Used when we need to force a Record to reset all its proxies. More...
 
virtual ~EventSetupProvider ()
 

Protected Member Functions

template<typename T >
void insert (std::auto_ptr< T > iRecordProvider)
 

Private Types

typedef std::map
< EventSetupRecordKey,
boost::shared_ptr
< EventSetupRecordProvider > > 
Providers
 

Private Member Functions

 EventSetupProvider (EventSetupProvider const &)
 
void insert (EventSetupRecordKey const &, std::auto_ptr< EventSetupRecordProvider >)
 
EventSetupProvider const & operator= (EventSetupProvider const &)
 

Private Attributes

std::auto_ptr< std::vector
< boost::shared_ptr
< DataProxyProvider > > > 
dataProviders_
 
EventSetup eventSetup_
 
std::auto_ptr< std::vector
< boost::shared_ptr
< EventSetupRecordIntervalFinder > > > 
finders_
 
bool mustFinishConfiguration_
 
std::auto_ptr
< PreferredProviderInfo
preferredProviderInfo_
 
Providers providers_
 

Detailed Description

Definition at line 45 of file EventSetupProvider.h.

Member Typedef Documentation

Definition at line 51 of file EventSetupProvider.h.

Definition at line 50 of file EventSetupProvider.h.

Definition at line 49 of file EventSetupProvider.h.

Definition at line 53 of file EventSetupProvider.h.

Definition at line 101 of file EventSetupProvider.h.

Definition at line 48 of file EventSetupProvider.h.

Definition at line 52 of file EventSetupProvider.h.

Constructor & Destructor Documentation

EventSetupProvider::EventSetupProvider ( PreferredProviderInfo const *  iInfo = 0)

Definition at line 42 of file EventSetupProvider.cc.

42  :
43 eventSetup_(),
44 providers_(),
46 preferredProviderInfo_((0!=iInfo) ? (new PreferredProviderInfo(*iInfo)): 0),
47 finders_(new std::vector<boost::shared_ptr<EventSetupRecordIntervalFinder> >() ),
48 dataProviders_(new std::vector<boost::shared_ptr<DataProxyProvider> >() )
49 {
50 }
std::auto_ptr< PreferredProviderInfo > preferredProviderInfo_
std::auto_ptr< std::vector< boost::shared_ptr< EventSetupRecordIntervalFinder > > > finders_
std::auto_ptr< std::vector< boost::shared_ptr< DataProxyProvider > > > dataProviders_
std::map< ComponentDescription, RecordToDataMap > PreferredProviderInfo
EventSetupProvider::~EventSetupProvider ( )
virtual

Definition at line 57 of file EventSetupProvider.cc.

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

Member Function Documentation

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

Definition at line 85 of file EventSetupProvider.cc.

References dataProviders_, and mustFinishConfiguration_.

Referenced by edm::eventsetup::looper::addFinderTo(), edm::eventsetup::addProviderTo(), edm::eventsetup::looper::addProviderTo(), edm::eventsetup::ModuleMakerTraits::addTo(), and edm::eventsetup::SourceMakerTraits::addTo().

86 {
88  assert(&(*iProvider) != 0);
89  dataProviders_->push_back(iProvider);
90 }
std::auto_ptr< std::vector< boost::shared_ptr< DataProxyProvider > > > dataProviders_
void EventSetupProvider::add ( boost::shared_ptr< EventSetupRecordIntervalFinder iFinder)

Definition at line 94 of file EventSetupProvider.cc.

References finders_, and mustFinishConfiguration_.

95 {
97  assert(&(*iFinder) != 0);
98  finders_->push_back(iFinder);
99 }
std::auto_ptr< std::vector< boost::shared_ptr< EventSetupRecordIntervalFinder > > > finders_
void EventSetupProvider::addRecordToEventSetup ( EventSetupRecord iRecord)

Definition at line 403 of file EventSetupProvider.cc.

References edm::EventSetup::add(), eventSetup_, and edm::eventsetup::EventSetupRecord::setEventSetup().

Referenced by edm::eventsetup::EventSetupRecordProvider::addRecordTo().

403  {
404  iRecord.setEventSetup(&eventSetup_);
405  eventSetup_.add(iRecord);
406 }
void add(const eventsetup::EventSetupRecord &iRecord)
Definition: EventSetup.cc:81
void setEventSetup(EventSetup const *iEventSetup)
EventSetup const& edm::eventsetup::EventSetupProvider::eventSetup ( ) const
inline

Definition at line 65 of file EventSetupProvider.h.

References eventSetup_.

EventSetup const & EventSetupProvider::eventSetupForInstance ( IOVSyncValue const &  iValue)

Definition at line 412 of file EventSetupProvider.cc.

References edm::EventSetup::clear(), eventSetup_, finishConfiguration(), mustFinishConfiguration_, providers_, and edm::EventSetup::setIOVSyncValue().

413 {
415 
416  eventSetup_.clear();
418  const_cast<EventSetupProvider*>(this)->finishConfiguration();
419  }
420 
421  for(Providers::iterator itProvider = providers_.begin(), itProviderEnd = providers_.end();
422  itProvider != itProviderEnd;
423  ++itProvider) {
424  itProvider->second->addRecordToIfValid(*this, iValue);
425  }
426 
427  return eventSetup_;
428 
429 
430 }
void setIOVSyncValue(const IOVSyncValue &)
Definition: EventSetup.cc:62
void EventSetupProvider::finishConfiguration ( )

Definition at line 243 of file EventSetupProvider.cc.

References dataProviders_, edm::eventsetup::determinePreferred(), finders_, insert(), edm::eventsetup::EventSetupRecordProviderFactoryManager::instance(), mustFinishConfiguration_, preferredProviderInfo_, and providers_.

Referenced by eventSetupForInstance().

244 {
245  //we delayed adding finders to the system till here so that everything would be loaded first
246  for(std::vector<boost::shared_ptr<EventSetupRecordIntervalFinder> >::iterator itFinder=finders_->begin(),
247  itEnd = finders_->end();
248  itFinder != itEnd;
249  ++itFinder) {
250  typedef std::set<EventSetupRecordKey> Keys;
251  const Keys recordsUsing = (*itFinder)->findingForRecords();
252 
253  for(Keys::const_iterator itKey = recordsUsing.begin(), itKeyEnd = recordsUsing.end();
254  itKey != itKeyEnd;
255  ++itKey) {
256  Providers::iterator itFound = providers_.find(*itKey);
257  if(providers_.end() == itFound) {
258  //create a provider for this record
259  insert(*itKey, EventSetupRecordProviderFactoryManager::instance().makeRecordProvider(*itKey));
260  itFound = providers_.find(*itKey);
261  }
262  itFound->second->addFinder(*itFinder);
263  }
264  }
265  //we've transfered our ownership so this is no longer needed
266  finders_.reset();
267 
268  //Now handle providers since sources can also be finders and the sources can delay registering
269  // their Records and therefore could delay setting up their Proxies
270  typedef std::set<EventSetupRecordKey> Keys;
271  for(std::vector<boost::shared_ptr<DataProxyProvider> >::iterator itProvider=dataProviders_->begin(),
272  itEnd = dataProviders_->end();
273  itProvider != itEnd;
274  ++itProvider) {
275 
276  const Keys recordsUsing = (*itProvider)->usingRecords();
277 
278  for(Keys::const_iterator itKey = recordsUsing.begin(), itKeyEnd = recordsUsing.end();
279  itKey != itKeyEnd;
280  ++itKey) {
281  Providers::iterator itFound = providers_.find(*itKey);
282  if(providers_.end() == itFound) {
283  //create a provider for this record
284  insert(*itKey, EventSetupRecordProviderFactoryManager::instance().makeRecordProvider(*itKey));
285  itFound = providers_.find(*itKey);
286  }
287  itFound->second->add(*itProvider);
288  }
289  }
290  dataProviders_.reset();
291 
292  //used for the case where no preferred Providers have been specified for the Record
294 
296  //For each Provider, find all the Providers it depends on. If a dependent Provider
297  // can not be found pass in an empty list
298  //CHANGE: now allow for missing Providers
299  for(Providers::iterator itProvider = providers_.begin(), itProviderEnd = providers_.end();
300  itProvider != itProviderEnd;
301  ++itProvider) {
302  const EventSetupRecordProvider::DataToPreferredProviderMap* preferredInfo = &kEmptyMap;
303  RecordToPreferred::const_iterator itRecordFound = recordToPreferred.find(itProvider->first);
304  if(itRecordFound != recordToPreferred.end()) {
305  preferredInfo = &(itRecordFound->second);
306  }
307  //Give it our list of preferred
308  itProvider->second->usePreferred(*preferredInfo);
309 
310  std::set<EventSetupRecordKey> records = itProvider->second->dependentRecords();
311  if(records.size() != 0) {
312  std::string missingRecords;
313  std::vector<boost::shared_ptr<EventSetupRecordProvider> > depProviders;
314  depProviders.reserve(records.size());
315  bool foundAllProviders = true;
316  for(std::set<EventSetupRecordKey>::iterator itRecord = records.begin(),
317  itRecordEnd = records.end();
318  itRecord != itRecordEnd;
319  ++itRecord) {
320  Providers::iterator itFound = providers_.find(*itRecord);
321  if(itFound == providers_.end()) {
322  foundAllProviders = false;
323  if(missingRecords.size() == 0) {
324  missingRecords = itRecord->name();
325  } else {
326  missingRecords += ", ";
327  missingRecords += itRecord->name();
328  }
329  //break;
330  } else {
331  depProviders.push_back(itFound->second);
332  }
333  }
334 
335  if(!foundAllProviders) {
336  edm::LogInfo("EventSetupDependency")<<"The EventSetup record "<<itProvider->second->key().name()
337  <<" depends on at least one Record \n ("<<missingRecords<<") which is not present in the job."
338  "\n This may lead to an exception begin thrown during event processing.\n If no exception occurs during the job than it is usually safe to ignore this message.";
339 
340  //depProviders.clear();
341  //NOTE: should provide a warning
342  }
343 
344  itProvider->second->setDependentProviders(depProviders);
345  }
346  }
347  mustFinishConfiguration_ = false;
348 
349 }
std::map< DataKey, ComponentDescription > DataToPreferredProviderMap
std::auto_ptr< PreferredProviderInfo > preferredProviderInfo_
std::auto_ptr< std::vector< boost::shared_ptr< EventSetupRecordIntervalFinder > > > finders_
void insert(std::auto_ptr< T > iRecordProvider)
std::map< EventSetupRecordKey, EventSetupRecordProvider::DataToPreferredProviderMap > RecordToPreferred
std::auto_ptr< std::vector< boost::shared_ptr< DataProxyProvider > > > dataProviders_
static RecordToPreferred determinePreferred(const EventSetupProvider::PreferredProviderInfo *iInfo, const Providers &iProviders)
std::vector< size_type > Keys
void EventSetupProvider::forceCacheClear ( )

Used when testing that all code properly updates on IOV changes of all Records.

Definition at line 392 of file EventSetupProvider.cc.

References providers_.

393 {
394  for(Providers::iterator it=providers_.begin(), itEnd = providers_.end();
395  it != itEnd;
396  ++it) {
397  it->second->resetProxies();
398  }
399 }
template<typename T >
void edm::eventsetup::EventSetupProvider::insert ( std::auto_ptr< T iRecordProvider)
inlineprotected

Definition at line 84 of file EventSetupProvider.h.

References edm::eventsetup::heterocontainer::makeKey(), and groupFilesInBlocks::temp.

Referenced by finishConfiguration().

84  {
85  std::auto_ptr<EventSetupRecordProvider> temp(iRecordProvider.release());
87  typename T::RecordType,
88  eventsetup::EventSetupRecordKey>(),
89  temp);
90  }
void insert(std::auto_ptr< T > iRecordProvider)
void EventSetupProvider::insert ( EventSetupRecordKey const &  iKey,
std::auto_ptr< EventSetupRecordProvider iProvider 
)
private

Definition at line 77 of file EventSetupProvider.cc.

References providers_, and groupFilesInBlocks::temp.

78 {
79  boost::shared_ptr<EventSetupRecordProvider> temp(iProvider.release());
80  providers_[iKey] = temp;
81  //temp->addRecordTo(*this);
82 }
EventSetupProvider const& edm::eventsetup::EventSetupProvider::operator= ( EventSetupProvider const &  )
private
std::set< ComponentDescription > EventSetupProvider::proxyProviderDescriptions ( ) const

Definition at line 443 of file EventSetupProvider.cc.

References dataProviders_, edm::for_all(), providers_, edm::eventsetup::EventSetupRecordProvider::proxyProviderDescriptions(), and edm::second().

444 {
445  using boost::bind;
446  typedef std::set<ComponentDescription> Set;
447  Set descriptions;
448 
450  bind(InsertAll(descriptions),
452  bind(&Providers::value_type::second,_1))));
453  if(dataProviders_.get()) {
454  for(std::vector<boost::shared_ptr<DataProxyProvider> >::const_iterator it = dataProviders_->begin(),
455  itEnd = dataProviders_->end();
456  it != itEnd;
457  ++it) {
458  descriptions.insert((*it)->description());
459  }
460 
461  }
462 
463  return descriptions;
464 }
std::auto_ptr< std::vector< boost::shared_ptr< DataProxyProvider > > > dataProviders_
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
U second(std::pair< T, U > const &p)
std::set< ComponentDescription > proxyProviderDescriptions() const
return information on which DataProxyProviders are supplying information
void EventSetupProvider::resetRecordPlusDependentRecords ( EventSetupRecordKey const &  iKey)

Used when we need to force a Record to reset all its proxies.

Definition at line 372 of file EventSetupProvider.cc.

References edm::eventsetup::findDependents(), edm::for_all(), providers_, and edm::eventsetup::EventSetupRecordProvider::resetProxies().

Referenced by edm::EDLooperBase::prepareForNextLoop().

373 {
374  Providers::iterator itFind = providers_.find(iKey);
375  if(itFind == providers_.end()) {
376  return;
377  }
378 
379 
380  std::vector<boost::shared_ptr<EventSetupRecordProvider> > dependents;
381  findDependents(iKey, providers_.begin(), providers_.end(), dependents);
382 
383  dependents.erase(std::unique(dependents.begin(),dependents.end()), dependents.end());
384 
385  itFind->second->resetProxies();
386  for_all(dependents,
388  _1));
389 }
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
static void findDependents(const EventSetupRecordKey &iKey, Itr itBegin, Itr itEnd, std::vector< boost::shared_ptr< EventSetupRecordProvider > > &oDependents)
void resetProxies()
This will clear the cache&#39;s of all the Proxies so that next time they are called they will run...

Member Data Documentation

std::auto_ptr<std::vector<boost::shared_ptr<DataProxyProvider> > > edm::eventsetup::EventSetupProvider::dataProviders_
private

Definition at line 107 of file EventSetupProvider.h.

Referenced by add(), finishConfiguration(), and proxyProviderDescriptions().

EventSetup edm::eventsetup::EventSetupProvider::eventSetup_
private

Definition at line 100 of file EventSetupProvider.h.

Referenced by addRecordToEventSetup(), eventSetup(), and eventSetupForInstance().

std::auto_ptr<std::vector<boost::shared_ptr<EventSetupRecordIntervalFinder> > > edm::eventsetup::EventSetupProvider::finders_
private

Definition at line 106 of file EventSetupProvider.h.

Referenced by add(), and finishConfiguration().

bool edm::eventsetup::EventSetupProvider::mustFinishConfiguration_
private

Definition at line 103 of file EventSetupProvider.h.

Referenced by add(), eventSetupForInstance(), and finishConfiguration().

std::auto_ptr<PreferredProviderInfo> edm::eventsetup::EventSetupProvider::preferredProviderInfo_
private

Definition at line 105 of file EventSetupProvider.h.

Referenced by finishConfiguration().

Providers edm::eventsetup::EventSetupProvider::providers_
private