File indexing completed on 2023-03-17 10:59:06
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include <memory>
0020
0021 #include "FWCore/Framework/interface/Frameworkfwd.h"
0022 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0023
0024 #include "FWCore/Framework/interface/Event.h"
0025 #include "FWCore/Framework/interface/MakerMacros.h"
0026
0027 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0028
0029 #include "DQMServices/Core/interface/DQMStore.h"
0030 #include "FWCore/ServiceRegistry/interface/Service.h"
0031
0032 namespace {
0033 typedef dqm::legacy::MonitorElement MonitorElement;
0034 typedef dqm::legacy::DQMStore DQMStore;
0035
0036 class ReaderBase {
0037 public:
0038 virtual ~ReaderBase() = default;
0039 virtual void read(int run, int lumi) = 0;
0040 };
0041
0042 class TH1Reader : public ReaderBase {
0043 public:
0044 TH1Reader(const edm::ParameterSet& iPSet, DQMStore& iStore, bool iSetLumiFlag)
0045 : m_store(&iStore),
0046 m_element(nullptr),
0047 m_runs(iPSet.getUntrackedParameter<std::vector<int> >("runs")),
0048 m_lumis(iPSet.getUntrackedParameter<std::vector<int> >("lumis")),
0049 m_means(iPSet.getUntrackedParameter<std::vector<double> >("means")),
0050 m_entries(iPSet.getUntrackedParameter<std::vector<double> >("entries")) {
0051 assert(m_means.size() == m_entries.size());
0052 std::string extension;
0053 if (iSetLumiFlag) {
0054 extension = "_lumi";
0055 }
0056 m_name = iPSet.getUntrackedParameter<std::string>("name") + extension;
0057 }
0058
0059 void read(int run, int lumi) override {
0060 double expected_mean = -1, expected_entries = -1;
0061 for (unsigned int i = 0; i < m_runs.size(); i++) {
0062 if (m_runs[i] == run && m_lumis[i] == lumi) {
0063 expected_mean = m_means[i];
0064 expected_entries = m_entries[i];
0065 }
0066 }
0067 assert(expected_entries != -1 || !"Unexpected run/lumi!");
0068
0069 m_element = m_store->get(m_name);
0070 if (nullptr == m_element) {
0071 throw cms::Exception("MissingElement") << "The element: " << m_name << " was not found";
0072 }
0073 TH1* hist = m_element->getTH1();
0074
0075 if (hist->GetEntries() != expected_entries) {
0076 throw cms::Exception("WrongEntries")
0077 << "The element: " << m_name << " for run " << run << " lumi " << lumi << " was expected to have "
0078 << expected_entries << " entries but instead has " << hist->GetEntries();
0079 }
0080
0081 if (hist->GetMean() != expected_mean) {
0082 throw cms::Exception("WrongEntries")
0083 << "The element: " << m_name << " for run " << run << " lumi " << lumi << " was expected to have "
0084 << expected_mean << " mean but instead has " << hist->GetMean();
0085 }
0086 }
0087
0088 private:
0089 std::string m_name;
0090 DQMStore* m_store;
0091 MonitorElement* m_element;
0092 std::vector<int> m_runs;
0093 std::vector<int> m_lumis;
0094 std::vector<double> m_means;
0095 std::vector<double> m_entries;
0096 };
0097
0098 }
0099
0100 class DummyReadDQMStore : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::WatchLuminosityBlocks> {
0101 public:
0102 explicit DummyReadDQMStore(const edm::ParameterSet&);
0103
0104 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0105
0106 private:
0107 void analyze(const edm::Event&, const edm::EventSetup&) override;
0108
0109 void beginRun(edm::Run const&, edm::EventSetup const&) override;
0110 void endRun(edm::Run const&, edm::EventSetup const&) override;
0111 void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override;
0112 void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override;
0113
0114
0115 std::vector<std::shared_ptr<ReaderBase> > m_runReaders;
0116 std::vector<std::shared_ptr<ReaderBase> > m_lumiReaders;
0117 };
0118
0119 DummyReadDQMStore::DummyReadDQMStore(const edm::ParameterSet& iConfig) {
0120 edm::Service<DQMStore> dstore;
0121
0122 typedef std::vector<edm::ParameterSet> PSets;
0123 const PSets& runElements = iConfig.getUntrackedParameter<std::vector<edm::ParameterSet> >("runElements");
0124 m_runReaders.reserve(runElements.size());
0125 for (PSets::const_iterator it = runElements.begin(), itEnd = runElements.end(); it != itEnd; ++it) {
0126 switch (it->getUntrackedParameter<unsigned int>("type", 1)) {
0127 case 1:
0128 m_runReaders.push_back(std::shared_ptr<ReaderBase>(new TH1Reader(*it, *dstore, false)));
0129 break;
0130 case 2:
0131 m_runReaders.push_back(std::shared_ptr<ReaderBase>(new TH1Reader(*it, *dstore, false)));
0132 break;
0133 }
0134 }
0135
0136 const PSets& lumiElements = iConfig.getUntrackedParameter<std::vector<edm::ParameterSet> >("lumiElements");
0137 m_lumiReaders.reserve(lumiElements.size());
0138 for (PSets::const_iterator it = lumiElements.begin(), itEnd = lumiElements.end(); it != itEnd; ++it) {
0139 switch (it->getUntrackedParameter<unsigned int>("type", 1)) {
0140 case 1:
0141 m_lumiReaders.push_back(std::shared_ptr<ReaderBase>(new TH1Reader(*it, *dstore, true)));
0142 break;
0143 case 2:
0144 m_lumiReaders.push_back(std::shared_ptr<ReaderBase>(new TH1Reader(*it, *dstore, true)));
0145 break;
0146 }
0147 }
0148 }
0149
0150 void DummyReadDQMStore::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) {}
0151
0152 void DummyReadDQMStore::beginRun(edm::Run const&, edm::EventSetup const&) {}
0153
0154 void DummyReadDQMStore::endRun(edm::Run const& run, edm::EventSetup const&) {
0155 for (std::vector<std::shared_ptr<ReaderBase> >::iterator it = m_runReaders.begin(), itEnd = m_runReaders.end();
0156 it != itEnd;
0157 ++it) {
0158 (*it)->read(run.run(), 0);
0159 }
0160 }
0161
0162 void DummyReadDQMStore::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {}
0163
0164 void DummyReadDQMStore::endLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const&) {
0165 for (std::vector<std::shared_ptr<ReaderBase> >::iterator it = m_lumiReaders.begin(), itEnd = m_lumiReaders.end();
0166 it != itEnd;
0167 ++it) {
0168 (*it)->read(lumi.run(), lumi.luminosityBlock());
0169 }
0170 }
0171
0172 void DummyReadDQMStore::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0173
0174
0175 edm::ParameterSetDescription desc;
0176 desc.setUnknown();
0177 descriptions.addDefault(desc);
0178 }
0179
0180 DEFINE_FWK_MODULE(DummyReadDQMStore);