Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 10:59:06

0001 // -*- C++ -*-
0002 //
0003 // Package:    DummyReadDQMStore
0004 // Class:      DummyReadDQMStore
0005 //
0006 /**\class DummyReadDQMStore DummyReadDQMStore.cc DQMServices/DummyReadDQMStore/src/DummyReadDQMStore.cc
0007 
0008  Description: [one line class summary]
0009 
0010  Implementation:
0011      [Notes on implementation]
0012 */
0013 //
0014 // Original Author:  Christopher Jones
0015 //         Created:  Fri Apr 29 18:05:50 CDT 2011
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 }  // namespace
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   // ----------member data ---------------------------
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   //The following says we do not know what parameters are allowed so do no validation
0174   // Please change this to state exactly what you do use, even if it is no parameters
0175   edm::ParameterSetDescription desc;
0176   desc.setUnknown();
0177   descriptions.addDefault(desc);
0178 }
0179 
0180 DEFINE_FWK_MODULE(DummyReadDQMStore);