CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/CondCore/ESSources/plugins/CondDBESSource.h

Go to the documentation of this file.
00001 #ifndef CondCore_ESSources_CondDBESSource_h
00002 #define CondCore_ESSources_CondDBESSource_h
00003 //
00004 // Package:    CondCore/ESSources
00005 // Class:      CondDBESSource
00006 //
00007 /*
00008  Description: EventSetup source module for serving data from offline database
00009 */
00010 //
00011 // Author:      Zhen Xie
00012 //
00013 // system include files
00014 #include <string>
00015 #include <map>
00016 #include <set>
00017 // user include files
00018 #include "CondCore/DBCommon/interface/DbConnection.h"
00019 
00020 #include "FWCore/Framework/interface/DataProxyProvider.h"
00021 #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
00022 #include "CondCore/DBCommon/interface/TagMetadata.h"
00023 #include "CondCore/DBCommon/interface/Time.h"
00024 #include "CondCore/TagCollection/interface/TagCollectionRetriever.h"
00025 
00026 namespace edm{
00027   class ParameterSet;
00028 }
00029 namespace cond{
00030   class DbSession;
00031   class BasePayloadProxy;
00032   class DataProxyWrapperBase;
00033 }
00034 
00035 class CondDBESSource : public edm::eventsetup::DataProxyProvider,
00036                        public edm::EventSetupRecordIntervalFinder{
00037  public:
00038   typedef boost::shared_ptr<cond::DataProxyWrapperBase > ProxyP;
00039   typedef std::multimap< std::string,  ProxyP> ProxyMap;
00040 
00041   typedef enum { NOREFRESH, REFRESH_ALWAYS, REFRESH_OPEN_IOVS, REFRESH_EACH_RUN, RECONNECT_EACH_RUN } RefreshPolicy;
00042   
00043 
00044   explicit CondDBESSource( const edm::ParameterSet& );
00045   ~CondDBESSource();
00046   
00047  protected:
00048   virtual void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
00049                               const edm::IOVSyncValue& , 
00050                               edm::ValidityInterval&) ;
00051 
00052   virtual void registerProxies(const edm::eventsetup::EventSetupRecordKey& iRecordKey, KeyedProxies& aProxyList) ;
00053 
00054   virtual void newInterval(const edm::eventsetup::EventSetupRecordKey& iRecordType, const edm::ValidityInterval& iInterval) ;
00055 
00056  private:
00057 
00058   // ----------member data ---------------------------
00059 
00060   cond::DbConnection m_connection;
00061 
00062   // Container of DataProxy, implemented as multi-map keyed by records
00063   ProxyMap m_proxies;
00064 
00065 
00066   typedef std::map< std::string, cond::TagMetadata > TagCollection;
00067   // the collections of tag, record/label used in this ESSource
00068   TagCollection m_tagCollection;
00069   std::map<std::string,std::pair<cond::DbSession,std::string> > m_sessionPool;
00070   std::map<std::string,unsigned int> m_lastRecordRuns;
00071   
00072   struct Stats {
00073     int nData;
00074     int nSet;
00075     int nRun;
00076     int nLumi;
00077     int nRefresh;
00078     int nActualRefresh;
00079     int nReconnect;
00080     int nActualReconnect;
00081   };
00082 
00083   Stats m_stats;
00084 
00085   unsigned int m_lastRun;
00086   unsigned int m_lastLumi;
00087   RefreshPolicy m_policy;
00088   
00089   bool m_doDump;
00090 
00091  private:
00092 
00093   void fillList(const std::string & pfn, std::vector<std::string> & pfnList, const unsigned int listSize, const std::string & type);
00094 
00095   void fillTagCollectionFromGT(const std::string & coraldb,
00096                                const std::string & prefix,
00097                                const std::string & postfix,
00098                                const std::string & roottag,
00099                                std::set< cond::TagMetadata > & tagcoll);
00100 
00101   void fillTagCollectionFromDB( const std::vector<std::string> & coraldbList,
00102                                 const std::vector<std::string> & prefix,
00103                                 const std::vector<std::string> & postfix,
00104                                 const std::vector<std::string> & roottagList,
00105                                 std::map<std::string,cond::TagMetadata>& replacement);
00106 };
00107 #endif