Skip to content

Commit

Permalink
Some new analyzers for testing.
Browse files Browse the repository at this point in the history
  • Loading branch information
schneiml committed Dec 12, 2019
1 parent 960fd61 commit 4261dd3
Showing 1 changed file with 297 additions and 0 deletions.
297 changes: 297 additions & 0 deletions DQMServices/Demo/plugins/TestDQMEDAnalyzer.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,297 @@
#include <string>

#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

template<typename BOOKERLIKE, typename ME>
class BookerFiller {
public:
BookerFiller(std::string folder, int howmany) {
this->howmany = howmany;
this->folder = folder;
}

BookerFiller() {};

void bookall(BOOKERLIKE& ibooker) {
ibooker.setCurrentFolder(folder);
for (int i = 0; i < howmany; i++) {
auto num = std::to_string(i);
// this doe *not* test most of the booking API, just one ME of each kind.
mes_1D.push_back(ibooker.bookFloat("float" + num));
mes_1D.push_back(ibooker.bookInt("int" + num));
mes_1D.push_back(ibooker.book1D("th1f" + num, "1D Float Histogram " + num, 101, -0.5, 100.5));
mes_1D.push_back(ibooker.book1S("th1s" + num, "1D Short Histogram " + num, 101, -0.5, 100.5));
mes_1D.push_back(ibooker.book1DD("th1d" + num, "1D Double Histogram " + num, 101, -0.5, 100.5));

mes_2D.push_back(ibooker.book2D("th2f" + num, "2D Float Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
mes_2D.push_back(ibooker.book2S("th2s" + num, "2D Short Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
mes_2D.push_back(ibooker.book2DD("th2d" + num, "2D Double Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));
mes_2D.push_back(ibooker.bookProfile("tprofile" + num, "1D Profile Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5));

mes_3D.push_back(ibooker.book3D("th3f" + num, "3D Float Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5, 3, -0.5, 2.5));
mes_3D.push_back(ibooker.bookProfile2D("thprofile2d" + num, "2D Profile Histogram " + num, 101, -0.5, 100.5, 11, -0.5, 10.5, 3, -0.5, 2.5));
}
}

void fillall(double x, double y, double z) const {
for (auto me : mes_1D) {
me->Fill(x);
}
for (auto me : mes_2D) {
me->Fill(x, y);
}
for (auto me : mes_3D) {
me->Fill(x, y, z);
}

}

std::vector<ME*> mes_1D;
std::vector<ME*> mes_2D;
std::vector<ME*> mes_3D;
std::string folder;
int howmany;
};

#include "DQMServices/Core/interface/DQMEDAnalyzer.h"
class TestDQMEDAnalyzer : public DQMEDAnalyzer {
public:
explicit TestDQMEDAnalyzer(const edm::ParameterSet& iConfig)
: mymes_(iConfig.getParameter<std::string>("folder"), iConfig.getParameter<int>("howmany"))
, myvalue_(iConfig.getParameter<double>("value")) {
}

~TestDQMEDAnalyzer() override {};

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("folder", "TEST")->setComment("Where to put all the histograms");
desc.add<int>("howmany", 1)->setComment("How many copies of each ME to put");
desc.add<double>("value", 1)->setComment("Which value to use on the third axis (first two are lumi and run)");
descriptions.add("test", desc);
}

private:
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) override {
mymes_.bookall(ibooker);
}

void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override {
mymes_.fillall(iEvent.luminosityBlock(), iEvent.run(), myvalue_);
}


BookerFiller<DQMStore::IBooker, MonitorElement> mymes_;
double myvalue_;
};
DEFINE_FWK_MODULE(TestDQMEDAnalyzer);

#include "DQMServices/Core/interface/DQMOneEDAnalyzer.h"
class TestDQMOneEDAnalyzer : public DQMOneEDAnalyzer<> {
public:
explicit TestDQMOneEDAnalyzer(const edm::ParameterSet& iConfig)
: mymes_(iConfig.getParameter<std::string>("folder"), iConfig.getParameter<int>("howmany"))
, myvalue_(iConfig.getParameter<double>("value")) {
}

~TestDQMOneEDAnalyzer() override {};

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("folder", "TEST")->setComment("Where to put all the histograms");
desc.add<int>("howmany", 1)->setComment("How many copies of each ME to put");
desc.add<double>("value", 1)->setComment("Which value to use on the third axis (first two are lumi and run)");
descriptions.add("testone", desc);
}

private:
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) override {
mymes_.bookall(ibooker);
}

void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override {
mymes_.fillall(iEvent.luminosityBlock(), iEvent.run(), myvalue_);
}


BookerFiller<DQMStore::IBooker, MonitorElement> mymes_;
double myvalue_;
};
DEFINE_FWK_MODULE(TestDQMOneEDAnalyzer);

class TestDQMOneFillRunEDAnalyzer : public DQMOneEDAnalyzer<> {
public:
explicit TestDQMOneFillRunEDAnalyzer(const edm::ParameterSet& iConfig)
: mymes_(iConfig.getParameter<std::string>("folder"), iConfig.getParameter<int>("howmany"))
, myvalue_(iConfig.getParameter<double>("value")) {
}

~TestDQMOneFillRunEDAnalyzer() override {};

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("folder", "TEST")->setComment("Where to put all the histograms");
desc.add<int>("howmany", 1)->setComment("How many copies of each ME to put");
desc.add<double>("value", 1)->setComment("Which value to use on the third axis (first two are lumi and run)");
descriptions.add("testonefillrun", desc);
}

private:
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) override {
mymes_.bookall(ibooker);
}

void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override {
}
void dqmBeginRun(edm::Run const& run, edm::EventSetup const&) {
mymes_.fillall(0, run.run(), myvalue_);
}

BookerFiller<DQMStore::IBooker, MonitorElement> mymes_;
double myvalue_;
};
DEFINE_FWK_MODULE(TestDQMOneFillRunEDAnalyzer);

class TestDQMOneLumiEDAnalyzer : public DQMOneLumiEDAnalyzer<> {
public:
explicit TestDQMOneLumiEDAnalyzer(const edm::ParameterSet& iConfig)
: mymes_(iConfig.getParameter<std::string>("folder"), iConfig.getParameter<int>("howmany"))
, myvalue_(iConfig.getParameter<double>("value")) {
}

~TestDQMOneLumiEDAnalyzer() override {};

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("folder", "TEST")->setComment("Where to put all the histograms");
desc.add<int>("howmany", 1)->setComment("How many copies of each ME to put");
desc.add<double>("value", 1)->setComment("Which value to use on the third axis (first two are lumi and run)");
descriptions.add("testonelumi", desc);
}

private:
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) override {
mymes_.bookall(ibooker);
}

void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override {
mymes_.fillall(iEvent.luminosityBlock(), iEvent.run(), myvalue_);
}


BookerFiller<DQMStore::IBooker, MonitorElement> mymes_;
double myvalue_;
};
DEFINE_FWK_MODULE(TestDQMOneLumiEDAnalyzer);

class TestDQMOneLumiFillLumiEDAnalyzer : public DQMOneLumiEDAnalyzer<> {
public:
explicit TestDQMOneLumiFillLumiEDAnalyzer(const edm::ParameterSet& iConfig)
: mymes_(iConfig.getParameter<std::string>("folder"), iConfig.getParameter<int>("howmany"))
, myvalue_(iConfig.getParameter<double>("value")) {
}

~TestDQMOneLumiFillLumiEDAnalyzer() override {};

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("folder", "TEST")->setComment("Where to put all the histograms");
desc.add<int>("howmany", 1)->setComment("How many copies of each ME to put");
desc.add<double>("value", 1)->setComment("Which value to use on the third axis (first two are lumi and run)");
descriptions.add("testonelumifilllumi", desc);
}

private:
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) override {
mymes_.bookall(ibooker);
}

void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override {
}
void dqmBeginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const&) {
mymes_.fillall(lumi.luminosityBlock(), lumi.run(), myvalue_);
}



BookerFiller<DQMStore::IBooker, MonitorElement> mymes_;
double myvalue_;
};
DEFINE_FWK_MODULE(TestDQMOneLumiFillLumiEDAnalyzer);

#include "DQMServices/Core/interface/DQMGlobalEDAnalyzer.h"
typedef BookerFiller<dqm::reco::DQMStore::IBooker, dqm::reco::MonitorElement> TestHistograms;

class TestDQMGlobalEDAnalyzer : public DQMGlobalEDAnalyzer<TestHistograms> {
public:
explicit TestDQMGlobalEDAnalyzer(const edm::ParameterSet& iConfig)
: folder_(iConfig.getParameter<std::string>("folder"))
, howmany_(iConfig.getParameter<int>("howmany"))
, myvalue_(iConfig.getParameter<double>("value")) {
}
~TestDQMGlobalEDAnalyzer() override {};

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("folder", "TEST")->setComment("Where to put all the histograms");
desc.add<int>("howmany", 1)->setComment("How many copies of each ME to put");
desc.add<double>("value", 1)->setComment("Which value to use on the third axis (first two are lumi and run)");
descriptions.add("testglobal", desc);
}
private:
void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&, TestHistograms& h) const override {
h.folder = this->folder_;
h.howmany = this->howmany_;
h.bookall(ibooker);
}

void dqmAnalyze(edm::Event const& iEvent, edm::EventSetup const&, TestHistograms const& h) const override {
h.fillall(iEvent.luminosityBlock(), iEvent.run(), myvalue_);
}


private:
std::string folder_;
int howmany_;
double myvalue_;
};
DEFINE_FWK_MODULE(TestDQMGlobalEDAnalyzer);

#include "FWCore/Framework/interface/EDAnalyzer.h"
class TestLegacyEDAnalyzer : public edm::EDAnalyzer {
public:
typedef dqm::legacy::DQMStore DQMStore;
typedef dqm::legacy::MonitorElement MonitorElement;

explicit TestLegacyEDAnalyzer(const edm::ParameterSet& iConfig)
: mymes_(iConfig.getParameter<std::string>("folder"), iConfig.getParameter<int>("howmany"))
, myvalue_(iConfig.getParameter<double>("value")) {
}

~TestLegacyEDAnalyzer() override {};

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("folder", "TEST")->setComment("Where to put all the histograms");
desc.add<int>("howmany", 1)->setComment("How many copies of each ME to put");
desc.add<double>("value", 1)->setComment("Which value to use on the third axis (first two are lumi and run)");
descriptions.add("testlegacy", desc);
}

private:
void beginRun(edm::Run const&, edm::EventSetup const&) override {
edm::Service<DQMStore> store;
mymes_.bookall(*store);
}

void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override {
mymes_.fillall(iEvent.luminosityBlock(), iEvent.run(), myvalue_);
}


BookerFiller<DQMStore, MonitorElement> mymes_;
double myvalue_;
};
DEFINE_FWK_MODULE(TestLegacyEDAnalyzer);

0 comments on commit 4261dd3

Please sign in to comment.