File indexing completed on 2024-04-06 11:57:59
0001 #include "FWCore/ServiceRegistry/interface/Service.h"
0002 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
0003
0004 #include <FWCore/MessageLogger/interface/MessageLogger.h>
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006
0007 #include "FWCore/Framework/interface/EventSetup.h"
0008
0009 #include "EcalTPGDBCopy.h"
0010
0011 #include <vector>
0012
0013 EcalTPGDBCopy::EcalTPGDBCopy(const edm::ParameterSet& iConfig)
0014 : m_timetype(iConfig.getParameter<std::string>("timetype")), m_cacheIDs(), m_records() {
0015 auto cc = consumesCollector();
0016 std::string container;
0017 std::string tag;
0018 std::string record;
0019 typedef std::vector<edm::ParameterSet> Parameters;
0020 Parameters toCopy = iConfig.getParameter<Parameters>("toCopy");
0021 for (Parameters::iterator i = toCopy.begin(); i != toCopy.end(); ++i) {
0022 container = i->getParameter<std::string>("container");
0023 record = i->getParameter<std::string>("record");
0024 m_cacheIDs.insert(std::make_pair(container, 0));
0025 m_records.insert(std::make_pair(container, record));
0026 setConsumes(cc, container);
0027 }
0028 }
0029
0030 EcalTPGDBCopy::~EcalTPGDBCopy() {}
0031
0032 void EcalTPGDBCopy::analyze(const edm::Event& evt, const edm::EventSetup& evtSetup) {
0033 std::string container;
0034 std::string record;
0035 typedef std::map<std::string, std::string>::const_iterator recordIter;
0036 for (recordIter i = m_records.begin(); i != m_records.end(); ++i) {
0037 container = (*i).first;
0038 record = (*i).second;
0039 if (shouldCopy(evtSetup, container)) {
0040 copyToDB(evtSetup, container);
0041 }
0042 }
0043 }
0044
0045 void EcalTPGDBCopy::setConsumes(edm::ConsumesCollector& cc, const std::string& container) {
0046 if (container == "EcalTPGPedestals") {
0047 pedestalsToken_ = cc.esConsumes();
0048 } else if (container == "EcalTPGLinearizationConst") {
0049 linearizationConstToken_ = cc.esConsumes();
0050 } else if (container == "EcalTPGSlidingWindow") {
0051 slidingWindowToken_ = cc.esConsumes();
0052 } else if (container == "EcalTPGFineGrainEBIdMap") {
0053 fineGrainEBIdMapToken_ = cc.esConsumes();
0054 } else if (container == "EcalTPGFineGrainStripEE") {
0055 fineGrainStripEEToken_ = cc.esConsumes();
0056 } else if (container == "EcalTPGFineGrainTowerEE") {
0057 fineGrainTowerEEToken_ = cc.esConsumes();
0058 } else if (container == "EcalTPGLutIdMap") {
0059 lutIdMapToken_ = cc.esConsumes();
0060 } else if (container == "EcalTPGWeightIdMap") {
0061 weightIdMapToken_ = cc.esConsumes();
0062 } else if (container == "EcalTPGWeightGroup") {
0063 weightGroupToken_ = cc.esConsumes();
0064 } else if (container == "EcalTPGOddWeightIdMap") {
0065 oddWeightIdMapToken_ = cc.esConsumes();
0066 } else if (container == "EcalTPGOddWeightGroup") {
0067 oddWeightGroupToken_ = cc.esConsumes();
0068 } else if (container == "EcalTPGTPMode") {
0069 tpModeToken_ = cc.esConsumes();
0070 } else if (container == "EcalTPGLutGroup") {
0071 lutGroupToken_ = cc.esConsumes();
0072 } else if (container == "EcalTPGFineGrainEBGroup") {
0073 fineGrainEBGroupToken_ = cc.esConsumes();
0074 } else if (container == "EcalTPGPhysicsConst") {
0075 physicsConstToken_ = cc.esConsumes();
0076 } else if (container == "EcalTPGCrystalStatus") {
0077 crystalStatusToken_ = cc.esConsumes();
0078 } else if (container == "EcalTPGTowerStatus") {
0079 towerStatusToken_ = cc.esConsumes();
0080 } else if (container == "EcalTPGSpike") {
0081 spikeToken_ = cc.esConsumes();
0082 } else if (container == "EcalTPGStripStatus") {
0083 stripStatusToken_ = cc.esConsumes();
0084 } else {
0085 throw cms::Exception("Unknown container");
0086 }
0087 }
0088
0089 bool EcalTPGDBCopy::shouldCopy(const edm::EventSetup& evtSetup, const std::string& container) {
0090 unsigned long long cacheID = 0;
0091
0092 if (container == "EcalTPGPedestals") {
0093 cacheID = evtSetup.get<EcalTPGPedestalsRcd>().cacheIdentifier();
0094 } else if (container == "EcalTPGLinearizationConst") {
0095 cacheID = evtSetup.get<EcalTPGLinearizationConstRcd>().cacheIdentifier();
0096 } else if (container == "EcalTPGSlidingWindow") {
0097 cacheID = evtSetup.get<EcalTPGSlidingWindowRcd>().cacheIdentifier();
0098 } else if (container == "EcalTPGFineGrainEBIdMap") {
0099 cacheID = evtSetup.get<EcalTPGFineGrainEBIdMapRcd>().cacheIdentifier();
0100 } else if (container == "EcalTPGFineGrainStripEE") {
0101 cacheID = evtSetup.get<EcalTPGFineGrainStripEERcd>().cacheIdentifier();
0102 } else if (container == "EcalTPGFineGrainTowerEE") {
0103 cacheID = evtSetup.get<EcalTPGFineGrainTowerEERcd>().cacheIdentifier();
0104 } else if (container == "EcalTPGLutIdMap") {
0105 cacheID = evtSetup.get<EcalTPGLutIdMapRcd>().cacheIdentifier();
0106 } else if (container == "EcalTPGWeightIdMap") {
0107 cacheID = evtSetup.get<EcalTPGWeightIdMapRcd>().cacheIdentifier();
0108 } else if (container == "EcalTPGWeightGroup") {
0109 cacheID = evtSetup.get<EcalTPGWeightGroupRcd>().cacheIdentifier();
0110 } else if (container == "EcalTPGOddWeightIdMap") {
0111 cacheID = evtSetup.get<EcalTPGOddWeightIdMapRcd>().cacheIdentifier();
0112 } else if (container == "EcalTPGOddWeightGroup") {
0113 cacheID = evtSetup.get<EcalTPGOddWeightGroupRcd>().cacheIdentifier();
0114 } else if (container == "EcalTPGTPMode") {
0115 cacheID = evtSetup.get<EcalTPGTPModeRcd>().cacheIdentifier();
0116 } else if (container == "EcalTPGLutGroup") {
0117 cacheID = evtSetup.get<EcalTPGLutGroupRcd>().cacheIdentifier();
0118 } else if (container == "EcalTPGFineGrainEBGroup") {
0119 cacheID = evtSetup.get<EcalTPGFineGrainEBGroupRcd>().cacheIdentifier();
0120 } else if (container == "EcalTPGPhysicsConst") {
0121 cacheID = evtSetup.get<EcalTPGPhysicsConstRcd>().cacheIdentifier();
0122 } else if (container == "EcalTPGCrystalStatus") {
0123 cacheID = evtSetup.get<EcalTPGCrystalStatusRcd>().cacheIdentifier();
0124 } else if (container == "EcalTPGTowerStatus") {
0125 cacheID = evtSetup.get<EcalTPGTowerStatusRcd>().cacheIdentifier();
0126 } else if (container == "EcalTPGSpike") {
0127 cacheID = evtSetup.get<EcalTPGSpikeRcd>().cacheIdentifier();
0128 } else if (container == "EcalTPGStripStatus") {
0129 cacheID = evtSetup.get<EcalTPGStripStatusRcd>().cacheIdentifier();
0130 } else {
0131 throw cms::Exception("Unknown container");
0132 }
0133
0134 if (m_cacheIDs[container] == cacheID) {
0135 return false;
0136 } else {
0137 m_cacheIDs[container] = cacheID;
0138 return true;
0139 }
0140 }
0141
0142 void EcalTPGDBCopy::copyToDB(const edm::EventSetup& evtSetup, const std::string& container) {
0143 edm::Service<cond::service::PoolDBOutputService> dbOutput;
0144 if (!dbOutput.isAvailable()) {
0145 throw cms::Exception("PoolDBOutputService is not available");
0146 }
0147
0148 std::string recordName = m_records[container];
0149
0150 if (container == "EcalTPGPedestals") {
0151 const auto& obj = evtSetup.getData(pedestalsToken_);
0152 dbOutput->createOneIOV<const EcalTPGPedestals>(obj, dbOutput->beginOfTime(), recordName);
0153
0154 } else if (container == "EcalTPGLinearizationConst") {
0155 const auto& obj = evtSetup.getData(linearizationConstToken_);
0156 dbOutput->createOneIOV<const EcalTPGLinearizationConst>(obj, dbOutput->beginOfTime(), recordName);
0157
0158 } else if (container == "EcalTPGSlidingWindow") {
0159 const auto& obj = evtSetup.getData(slidingWindowToken_);
0160 dbOutput->createOneIOV<const EcalTPGSlidingWindow>(obj, dbOutput->beginOfTime(), recordName);
0161
0162 } else if (container == "EcalTPGFineGrainEBIdMap") {
0163 const auto& obj = evtSetup.getData(fineGrainEBIdMapToken_);
0164 dbOutput->createOneIOV<const EcalTPGFineGrainEBIdMap>(obj, dbOutput->beginOfTime(), recordName);
0165
0166 } else if (container == "EcalTPGFineGrainStripEE") {
0167 const auto& obj = evtSetup.getData(fineGrainStripEEToken_);
0168 dbOutput->createOneIOV<const EcalTPGFineGrainStripEE>(obj, dbOutput->beginOfTime(), recordName);
0169
0170 } else if (container == "EcalTPGFineGrainTowerEE") {
0171 const auto& obj = evtSetup.getData(fineGrainTowerEEToken_);
0172 dbOutput->createOneIOV<const EcalTPGFineGrainTowerEE>(obj, dbOutput->beginOfTime(), recordName);
0173
0174 } else if (container == "EcalTPGLutIdMap") {
0175 const auto& obj = evtSetup.getData(lutIdMapToken_);
0176 dbOutput->createOneIOV<const EcalTPGLutIdMap>(obj, dbOutput->beginOfTime(), recordName);
0177
0178 } else if (container == "EcalTPGWeightIdMap") {
0179 const auto& obj = evtSetup.getData(weightIdMapToken_);
0180 dbOutput->createOneIOV<const EcalTPGWeightIdMap>(obj, dbOutput->beginOfTime(), recordName);
0181
0182 } else if (container == "EcalTPGWeightGroup") {
0183 const auto& obj = evtSetup.getData(weightGroupToken_);
0184 dbOutput->createOneIOV<const EcalTPGWeightGroup>(obj, dbOutput->beginOfTime(), recordName);
0185
0186 } else if (container == "EcalTPGOddWeightIdMap") {
0187 const auto& obj = evtSetup.getData(oddWeightIdMapToken_);
0188 dbOutput->createOneIOV<const EcalTPGOddWeightIdMap>(obj, dbOutput->beginOfTime(), recordName);
0189
0190 } else if (container == "EcalTPGOddWeightGroup") {
0191 const auto& obj = evtSetup.getData(oddWeightGroupToken_);
0192 dbOutput->createOneIOV<const EcalTPGOddWeightGroup>(obj, dbOutput->beginOfTime(), recordName);
0193
0194 } else if (container == "EcalTPGTPMode") {
0195 const auto& obj = evtSetup.getData(tpModeToken_);
0196 dbOutput->createOneIOV<const EcalTPGTPMode>(obj, dbOutput->beginOfTime(), recordName);
0197
0198 } else if (container == "EcalTPGLutGroup") {
0199 const auto& obj = evtSetup.getData(lutGroupToken_);
0200 dbOutput->createOneIOV<const EcalTPGLutGroup>(obj, dbOutput->beginOfTime(), recordName);
0201
0202 } else if (container == "EcalTPGFineGrainEBGroup") {
0203 const auto& obj = evtSetup.getData(fineGrainEBGroupToken_);
0204 dbOutput->createOneIOV<const EcalTPGFineGrainEBGroup>(obj, dbOutput->beginOfTime(), recordName);
0205
0206 } else if (container == "EcalTPGPhysicsConst") {
0207 const auto& obj = evtSetup.getData(physicsConstToken_);
0208 dbOutput->createOneIOV<const EcalTPGPhysicsConst>(obj, dbOutput->beginOfTime(), recordName);
0209
0210 } else if (container == "EcalTPGCrystalStatus") {
0211 const auto& obj = evtSetup.getData(crystalStatusToken_);
0212 dbOutput->createOneIOV<const EcalTPGCrystalStatus>(obj, dbOutput->beginOfTime(), recordName);
0213
0214 } else if (container == "EcalTPGTowerStatus") {
0215 const auto& obj = evtSetup.getData(towerStatusToken_);
0216 dbOutput->createOneIOV<const EcalTPGTowerStatus>(obj, dbOutput->beginOfTime(), recordName);
0217
0218 } else if (container == "EcalTPGSpike") {
0219 const auto& obj = evtSetup.getData(spikeToken_);
0220 dbOutput->createOneIOV<const EcalTPGSpike>(obj, dbOutput->beginOfTime(), recordName);
0221
0222 } else if (container == "EcalTPGStripStatus") {
0223 const auto& obj = evtSetup.getData(stripStatusToken_);
0224 dbOutput->createOneIOV<const EcalTPGStripStatus>(obj, dbOutput->beginOfTime(), recordName);
0225
0226 } else {
0227 throw cms::Exception("Unknown container");
0228 }
0229
0230 edm::LogInfo("EcalTPGDBCopy") << "EcalTPGDBCopy wrote " << recordName;
0231 }