00001 #ifndef CondTools_L1Trigger_DataWriter_h
00002 #define CondTools_L1Trigger_DataWriter_h
00003
00004
00005 #include "FWCore/Framework/interface/IOVSyncValue.h"
00006 #include "FWCore/Framework/interface/EventSetup.h"
00007 #include "FWCore/Framework/interface/DataKey.h"
00008
00009 #include "CondCore/DBCommon/interface/TypedRef.h"
00010 #include "CondCore/MetaDataService/interface/MetaData.h"
00011
00012 #include "DataFormats/Provenance/interface/RunID.h"
00013
00014
00015 #include "CondFormats/L1TObjects/interface/L1TriggerKey.h"
00016 #include "CondFormats/L1TObjects/interface/L1TriggerKeyList.h"
00017
00018 #include "CondTools/L1Trigger/interface/DataManager.h"
00019 #include "CondTools/L1Trigger/interface/WriterProxy.h"
00020
00021 #include <string>
00022 #include <map>
00023
00024 namespace l1t
00025 {
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 class DataWriter : public DataManager
00047 {
00048 public:
00049
00050
00051
00052
00053
00054
00055 explicit DataWriter (const std::string& connectString,
00056 const std::string& authenticationPath )
00057 : DataManager( connectString, authenticationPath ) {};
00058 virtual ~DataWriter () {};
00059
00060
00061
00062
00063
00064
00065 template<typename T>
00066 void writePayload (L1TriggerKey & key, T * payload, const std::string & recordName);
00067
00068 void writePayload (L1TriggerKey & key, const edm::EventSetup & setup,
00069 const std::string & record, const std::string & type);
00070
00071
00072
00073
00074 void writeKey (L1TriggerKey * key,
00075 const std::string & tag,
00076 const edm::RunNumber_t sinceRun);
00077
00078
00079
00080
00081
00082 std::string writePayload( const edm::EventSetup& setup,
00083 const std::string& recordType ) ;
00084
00085
00086 void writeKeyList( L1TriggerKeyList* keyList,
00087 const std::string& tag,
00088 edm::RunNumber_t sinceRun = 0 ) ;
00089
00090
00091 void updateIOV( const std::string& tag,
00092 const std::string& payloadToken,
00093 const edm::RunNumber_t sinceRun ) ;
00094
00095 protected:
00096
00097 void addMappings (const std::string tag, const std::string iovToken);
00098 std::string findTokenForTag (const std::string & tag);
00099
00100
00101 typedef std::map<std::string, std::string> TagToToken;
00102 TagToToken tagToToken;
00103 };
00104
00105
00106
00107 template<typename T>
00108 void DataWriter::writePayload (L1TriggerKey & key, T * payload, const std::string & recordName)
00109 {
00110
00111
00112
00113 cond::PoolTransaction& pool = connection->poolTransaction() ;
00114 pool.start (false);
00115
00116 cond::TypedRef<T> ref (pool, payload);
00117 ref.markWrite (recordName);
00118
00119 std::string typeName =
00120 edm::eventsetup::heterocontainer::HCTypeTagTemplate<T, edm::eventsetup::DataKey>::className ();
00121
00122 key.add (recordName, typeName, ref.token ());
00123
00124 pool.commit ();
00125
00126
00127 }
00128
00129 }
00130
00131 #endif