File indexing completed on 2024-04-06 12:01:31
0001 #include "FWCore/Framework/interface/MakerMacros.h"
0002 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0003 #include "FWCore/ServiceRegistry/interface/Service.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
0006 #include "CondCore/CondDB/interface/Exception.h"
0007 #include "CondFormats/Calibration/interface/Pedestals.h"
0008
0009 #include <string>
0010 #include <cstdlib>
0011 #include <iostream>
0012
0013 namespace edm {
0014 class ParameterSet;
0015 class Event;
0016 class EventSetup;
0017 }
0018
0019
0020 class Pedestals;
0021 class IOVPayloadEndOfJob : public edm::one::EDAnalyzer<> {
0022 public:
0023 explicit IOVPayloadEndOfJob(const edm::ParameterSet& iConfig);
0024 virtual ~IOVPayloadEndOfJob();
0025 virtual void analyze(const edm::Event& evt, const edm::EventSetup& evtSetup);
0026 virtual void endJob();
0027
0028 private:
0029 std::string m_record;
0030 };
0031
0032 IOVPayloadEndOfJob::IOVPayloadEndOfJob(const edm::ParameterSet& iConfig)
0033 : m_record(iConfig.getParameter<std::string>("record")) {
0034 std::cout << "IOVPayloadEndOfJob::IOVPayloadEndOfJob" << std::endl;
0035 }
0036 IOVPayloadEndOfJob::~IOVPayloadEndOfJob() { std::cout << "IOVPayloadEndOfJob::~IOVPayloadEndOfJob" << std::endl; }
0037 void IOVPayloadEndOfJob::analyze(const edm::Event& evt, const edm::EventSetup& evtSetup) {
0038
0039 }
0040 void IOVPayloadEndOfJob::endJob() {
0041 std::cout << "IOVPayloadEndOfJob::endJob " << std::endl;
0042 edm::Service<cond::service::PoolDBOutputService> mydbservice;
0043 if (!mydbservice.isAvailable()) {
0044 std::cout << "Service is unavailable" << std::endl;
0045 return;
0046 }
0047 try {
0048 std::string tag = mydbservice->tag(m_record);
0049 Pedestals myped;
0050 if (mydbservice->isNewTagRequest(m_record)) {
0051 for (int ichannel = 1; ichannel <= 5; ++ichannel) {
0052 Pedestals::Item item;
0053 item.m_mean = 1.11 * ichannel;
0054 item.m_variance = 1.12 * ichannel;
0055 myped.m_pedestals.push_back(item);
0056 }
0057
0058 cond::Time_t firstSinceTime = mydbservice->beginOfTime();
0059 std::cout << "firstSinceTime is begin of time " << firstSinceTime << std::endl;
0060 mydbservice->createOneIOV(myped, firstSinceTime, m_record);
0061 } else {
0062
0063 cond::Time_t current = mydbservice->currentTime();
0064 std::cout << "current time" << current << std::endl;
0065 if (current >= 5) {
0066 std::cout << "appending payload" << std::endl;
0067 for (int ichannel = 1; ichannel <= 5; ++ichannel) {
0068 Pedestals::Item item;
0069 item.m_mean = 0.15 * ichannel;
0070 item.m_variance = 0.32 * ichannel;
0071 myped.m_pedestals.push_back(item);
0072 }
0073 cond::Time_t thisPayload_valid_since = current;
0074 std::cout << "appending since time " << thisPayload_valid_since << std::endl;
0075 mydbservice->appendOneIOV(myped, thisPayload_valid_since, m_record);
0076 std::cout << "done" << std::endl;
0077 }
0078 }
0079 } catch (const cond::Exception& er) {
0080 throw cms::Exception("DataBaseUnitTestFailure", "failed IOVPayloadEndOfJob", er);
0081
0082 } catch (const cms::Exception& er) {
0083 throw cms::Exception("DataBaseUnitTestFailure", "failed IOVPayloadEndOfJob", er);
0084 }
0085 }
0086 DEFINE_FWK_MODULE(IOVPayloadEndOfJob);