1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#include "DQM/TrackingMonitorClient/interface/DQMScaleToClient.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
//
// -------------------------------------- Constructor --------------------------------------------
//
DQMScaleToClient::DQMScaleToClient(const edm::ParameterSet& iConfig)
: inputmepset_(getHistoPSet(iConfig.getParameter<edm::ParameterSet>("inputme"))),
outputmepset_(getOutputHistoPSet(iConfig.getParameter<edm::ParameterSet>("outputme"))) {
edm::LogInfo("DQMScaleToClient") << "Constructor DQMScaleToClient::DQMScaleToClient " << std::endl;
scaled_ = nullptr;
}
MEPSet DQMScaleToClient::getHistoPSet(edm::ParameterSet pset) {
return MEPSet{
pset.getParameter<std::string>("name"),
pset.getParameter<std::string>("folder"),
};
}
OutputMEPSet DQMScaleToClient::getOutputHistoPSet(edm::ParameterSet pset) {
return OutputMEPSet{
pset.getParameter<std::string>("name"),
pset.getParameter<std::string>("folder"),
pset.getParameter<double>("factor"),
};
}
//
// -------------------------------------- beginJob --------------------------------------------
//
void DQMScaleToClient::beginJob() { edm::LogInfo("DQMScaleToClient") << "DQMScaleToClient::beginJob " << std::endl; }
//
// -------------------------------------- get and book in the endJob --------------------------------------------
//
void DQMScaleToClient::dqmEndJob(DQMStore::IBooker& ibooker_, DQMStore::IGetter& igetter_) {
std::string hname = "";
// create and cd into new folder
std::string currentFolder = outputmepset_.folder;
ibooker_.setCurrentFolder(currentFolder);
//get available histograms
hname = inputmepset_.folder + "/" + inputmepset_.name;
MonitorElement* inputme = igetter_.get(hname);
if (!inputme) {
edm::LogError("DQMScaleToClient") << "MEs not found! "
<< inputmepset_.folder + "/" + inputmepset_.name + " not found " << std::endl;
return;
}
//book new histogram
ibooker_.setCurrentFolder(currentFolder);
hname = outputmepset_.name;
scaled_ = ibooker_.book1D(hname, (TH1F*)inputme->getTH1()->Clone(hname.c_str()));
// handle mes
double integral = (scaled_->getTH1()->Integral() > 0. ? scaled_->getTH1()->Integral() : 1.);
scaled_->getTH1()->Scale(outputmepset_.factor / integral);
}
//
// -------------------------------------- get in the endLumi if needed --------------------------------------------
//
void DQMScaleToClient::dqmEndLuminosityBlock(DQMStore::IBooker& ibooker_,
DQMStore::IGetter& igetter_,
edm::LuminosityBlock const& iLumi,
edm::EventSetup const& iSetup) {
edm::LogInfo("DQMScaleToClient") << "DQMScaleToClient::endLumi " << std::endl;
}
void DQMScaleToClient::fillMePSetDescription(edm::ParameterSetDescription& pset) {
pset.add<std::string>("folder", "");
pset.add<std::string>("name", "");
}
void DQMScaleToClient::fillOutputMePSetDescription(edm::ParameterSetDescription& pset) {
pset.add<std::string>("folder", "");
pset.add<std::string>("name", "");
pset.add<double>("factor", 1.);
}
void DQMScaleToClient::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
edm::ParameterSetDescription outputmePSet;
fillOutputMePSetDescription(outputmePSet);
desc.add<edm::ParameterSetDescription>("outputme", outputmePSet);
edm::ParameterSetDescription inputmePSet;
fillMePSetDescription(inputmePSet);
desc.add<edm::ParameterSetDescription>("inputme", inputmePSet);
descriptions.add("dqmScaleToClient", desc);
}
// Define this as a plug-in
#include "FWCore/Framework/interface/MakerMacros.h"
DEFINE_FWK_MODULE(DQMScaleToClient);
|