CMS 3D CMS Logo

AlcaBeamMonitorClient.cc
Go to the documentation of this file.
1 /*
2  * \file AlcaBeamMonitorClient.cc
3  * \author Lorenzo Uplegger/FNAL
4  *
5  */
6 
8 #include <numeric>
16 //#include <iostream>
17 
18 using namespace std;
19 using namespace edm;
20 // using namespace reco;
21 
22 //----------------------------------------------------------------------------------------------------------------------
24  : parameters_(ps),
25  monitorName_(parameters_.getUntrackedParameter<string>("MonitorName", "YourSubsystemName")),
26  numberOfValuesToSave_(0) {
27  usesResource("DQMStore");
29 
30  if (!monitorName_.empty())
31  monitorName_ = monitorName_ + "/";
32 
33  varNamesV_.push_back("x");
34  varNamesV_.push_back("y");
35  varNamesV_.push_back("z");
36  varNamesV_.push_back("sigmaX");
37  varNamesV_.push_back("sigmaY");
38  varNamesV_.push_back("sigmaZ");
39 
40  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased BeamSpotFit"));
41  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex"));
42  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased DataBase"));
43  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased Scalers"));
44  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex-DataBase fit"));
45  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex-Scalers fit"));
46  histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased Scalers-DataBase fit"));
47  histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased PrimaryVertex-DataBase"));
48  histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased PrimaryVertex-Scalers"));
49 
50  for (vector<string>::iterator itV = varNamesV_.begin(); itV != varNamesV_.end(); itV++) {
51  for (multimap<string, string>::iterator itM = histoByCategoryNames_.begin(); itM != histoByCategoryNames_.end();
52  itM++) {
53  histosMap_[*itV][itM->first][itM->second] = nullptr;
54  positionsMap_[*itV][itM->first][itM->second] = 3 * numberOfValuesToSave_; // value, error, ok
56  }
57  }
58 }
59 
61 
62 //----------------------------------------------------------------------------------------------------------------------
64 
65 //----------------------------------------------------------------------------------------------------------------------
67 
68 //----------------------------------------------------------------------------------------------------------------------
69 
70 //----------------------------------------------------------------------------------------------------------------------
71 void AlcaBeamMonitorClient::analyze(const Event& iEvent, const EventSetup& iSetup) {}
72 
73 //----------------------------------------------------------------------------------------------------------------------
75  MonitorElement* tmp = nullptr;
76  tmp = dbe_->get(monitorName_ + "Service/hHistoLumiValues");
77  if (!tmp) {
78  return;
79  }
80  valuesMap_[iLumi.id().luminosityBlock()] = vector<double>();
81  for (int i = 0; i < 3 * numberOfValuesToSave_; i++) {
82  valuesMap_[iLumi.id().luminosityBlock()].push_back(tmp->getTProfile()->GetBinContent(i + 1));
83  }
84 }
85 
86 //----------------------------------------------------------------------------------------------------------------------
88  // use this in case any LS is missing.
89  if (valuesMap_.empty()) {
90  LogInfo("AlcaBeamMonitorClient") << "The histogram "
91  << monitorName_ +
92  "Service/hHistoLumiValues which contains all the values has not "
93  "been found in any lumi!";
94  return;
95  }
96  int lastLumi = (--valuesMap_.end())->first;
97  int firstLumi = valuesMap_.begin()->first;
98 
99  // create and cd into new folder
100  dbe_->setCurrentFolder(monitorName_ + "Validation");
101 
102  LogInfo("AlcaBeamMonitorClient") << "End of run " << iRun.id().run() << "(" << firstLumi << "-" << lastLumi << ")";
103 
104  string name;
105  string title;
106  // x,y,z,sigmaX,sigmaY,sigmaZ
107  for (HistosContainer::iterator itM = histosMap_.begin(); itM != histosMap_.end(); itM++) {
108  for (map<string, map<string, MonitorElement*> >::iterator itMM = itM->second.begin(); itMM != itM->second.end();
109  itMM++) {
110  if (itMM->first != "run") {
111  for (map<string, MonitorElement*>::iterator itMMM = itMM->second.begin(); itMMM != itMM->second.end();
112  itMMM++) {
113  name = string("h") + itM->first + itMMM->first;
114  title = itM->first + "_{0} " + itMMM->first;
115  if (itMM->first == "lumi") {
116  dbe_->setCurrentFolder(monitorName_ + "Debug");
117  itMMM->second = dbe_->book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
118  itMMM->second->setEfficiencyFlag();
119  } else if (itMM->first == "validation" && itMMM->first == "Lumibased Scalers-DataBase fit") {
120  dbe_->setCurrentFolder(monitorName_ + "Validation");
121  itMMM->second = dbe_->book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
122  itMMM->second->setEfficiencyFlag();
123  } else if (itMM->first == "validation" && itMMM->first != "Lumibased Scalers-DataBase fit" &&
124  (itM->first == "x" || itM->first == "y" || itM->first == "z")) {
125  dbe_->setCurrentFolder(monitorName_ + "Validation");
126  itMMM->second = dbe_->book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
127  itMMM->second->setEfficiencyFlag();
128  } else if (itMM->first == "validation" &&
129  (itM->first == "sigmaX" || itM->first == "sigmaY" || itM->first == "sigmaZ")) {
130  dbe_->setCurrentFolder(monitorName_ + "Validation");
131  itMMM->second = nullptr;
132  } else {
133  LogInfo("AlcaBeamMonitorClient") << "Unrecognized category " << itMM->first;
134  // assert(0);
135  }
136  if (itMMM->second != nullptr) {
137  if (itMMM->first.find('-') != string::npos) {
138  itMMM->second->setAxisTitle(string("#Delta ") + itM->first + "_{0} (cm)", 2);
139  } else {
140  itMMM->second->setAxisTitle(itM->first + "_{0} (cm)", 2);
141  }
142  itMMM->second->setAxisTitle("Lumisection", 1);
143  }
144  }
145  }
146  }
147  }
148 
149  unsigned int bin = 0;
150  for (HistosContainer::iterator itH = histosMap_.begin(); itH != histosMap_.end(); itH++) {
151  for (map<string, map<string, MonitorElement*> >::iterator itHH = itH->second.begin(); itHH != itH->second.end();
152  itHH++) {
153  for (map<string, MonitorElement*>::iterator itHHH = itHH->second.begin(); itHHH != itHH->second.end(); itHHH++) {
154  for (map<LuminosityBlockNumber_t, vector<double> >::iterator itVal = valuesMap_.begin();
155  itVal != valuesMap_.end();
156  itVal++) {
157  if (itHHH->second != nullptr) {
158  // cout << positionsMap_[itH->first][itHH->first][itHHH->first]
159  //<< endl;
160  if (itVal->second[positionsMap_[itH->first][itHH->first][itHHH->first] + 2] == 1) {
161  bin = itHHH->second->getTH1()->FindBin(itVal->first);
162  itHHH->second->setBinContent(bin, itVal->second[positionsMap_[itH->first][itHH->first][itHHH->first]]);
163  itHHH->second->setBinError(bin, itVal->second[positionsMap_[itH->first][itHH->first][itHHH->first] + 1]);
164  }
165  }
166  }
167  }
168  }
169  }
170 
171 
172  const double bigNumber = 1000000.;
173  for (HistosContainer::iterator itH = histosMap_.begin(); itH != histosMap_.end(); itH++) {
174  for (map<string, map<string, MonitorElement*> >::iterator itHH = itH->second.begin(); itHH != itH->second.end();
175  itHH++) {
176  double min = bigNumber;
177  double max = -bigNumber;
178  double minDelta = bigNumber;
179  double maxDelta = -bigNumber;
180  // double minDeltaProf = bigNumber;
181  // double maxDeltaProf = -bigNumber;
182  if (itHH->first != "run") {
183  for (map<string, MonitorElement*>::iterator itHHH = itHH->second.begin(); itHHH != itHH->second.end();
184  itHHH++) {
185  if (itHHH->second != nullptr) {
186  for (int bin = 1; bin <= itHHH->second->getTH1()->GetNbinsX(); bin++) {
187  if (itHHH->second->getTH1()->GetBinError(bin) != 0 || itHHH->second->getTH1()->GetBinContent(bin) != 0) {
188  if (itHHH->first == "Lumibased BeamSpotFit" || itHHH->first == "Lumibased PrimaryVertex" ||
189  itHHH->first == "Lumibased DataBase" || itHHH->first == "Lumibased Scalers") {
190  if (min > itHHH->second->getTH1()->GetBinContent(bin)) {
191  min = itHHH->second->getTH1()->GetBinContent(bin);
192  }
193  if (max < itHHH->second->getTH1()->GetBinContent(bin)) {
194  max = itHHH->second->getTH1()->GetBinContent(bin);
195  }
196  } else if (itHHH->first == "Lumibased PrimaryVertex-DataBase fit" ||
197  itHHH->first == "Lumibased PrimaryVertex-Scalers fit" ||
198  itHHH->first == "Lumibased Scalers-DataBase fit" ||
199  itHHH->first == "Lumibased PrimaryVertex-DataBase" ||
200  itHHH->first == "Lumibased PrimaryVertex-Scalers") {
201  if (minDelta > itHHH->second->getTH1()->GetBinContent(bin)) {
202  minDelta = itHHH->second->getTH1()->GetBinContent(bin);
203  }
204  if (maxDelta < itHHH->second->getTH1()->GetBinContent(bin)) {
205  maxDelta = itHHH->second->getTH1()->GetBinContent(bin);
206  }
207  } else {
208  LogInfo("AlcaBeamMonitorClient") << "The histosMap_ have a histogram named " << itHHH->first
209  << " that I can't recognize in this loop!";
210  // assert(0);
211  }
212  }
213  }
214  }
215  }
216  for (map<string, MonitorElement*>::iterator itHHH = itHH->second.begin(); itHHH != itHH->second.end();
217  itHHH++) {
218  if (itHHH->second != nullptr) {
219  if (itHHH->first == "Lumibased BeamSpotFit" || itHHH->first == "Lumibased PrimaryVertex" ||
220  itHHH->first == "Lumibased DataBase" || itHHH->first == "Lumibased Scalers") {
221  if ((max == -bigNumber && min == bigNumber) || max - min == 0) {
222  itHHH->second->getTH1()->SetMinimum(itHHH->second->getTH1()->GetMinimum() - 0.01);
223  itHHH->second->getTH1()->SetMaximum(itHHH->second->getTH1()->GetMaximum() + 0.01);
224  } else {
225  itHHH->second->getTH1()->SetMinimum(min - 0.1 * (max - min));
226  itHHH->second->getTH1()->SetMaximum(max + 0.1 * (max - min));
227  }
228  } else if (itHHH->first == "Lumibased PrimaryVertex-DataBase fit" ||
229  itHHH->first == "Lumibased PrimaryVertex-Scalers fit" ||
230  itHHH->first == "Lumibased Scalers-DataBase fit" ||
231  itHHH->first == "Lumibased PrimaryVertex-DataBase" ||
232  itHHH->first == "Lumibased PrimaryVertex-Scalers") {
233  if ((maxDelta == -bigNumber && minDelta == bigNumber) || maxDelta - minDelta == 0) {
234  itHHH->second->getTH1()->SetMinimum(itHHH->second->getTH1()->GetMinimum() - 0.01);
235  itHHH->second->getTH1()->SetMaximum(itHHH->second->getTH1()->GetMaximum() + 0.01);
236  } else {
237  itHHH->second->getTH1()->SetMinimum(minDelta - 2 * (maxDelta - minDelta));
238  itHHH->second->getTH1()->SetMaximum(maxDelta + 2 * (maxDelta - minDelta));
239  }
240  } else {
241  LogInfo("AlcaBeamMonitorClient") << "The histosMap_ have a histogram named " << itHHH->first
242  << " that I can't recognize in this loop!";
243  }
244  }
245  }
246  }
247  }
248  }
249 
250 }
251 
LuminosityBlockNumber_t luminosityBlock() const
void beginJob(void) override
void setCurrentFolder(std::string const &fullpath) override
Definition: DQMStore.h:647
PositionContainer positionsMap_
void beginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) override
std::multimap< std::string, std::string > histoByCategoryNames_
unsigned int LuminosityBlockNumber_t
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
U second(std::pair< T, U > const &p)
int iEvent
Definition: GenABIO.cc:224
void endRun(const edm::Run &iRun, const edm::EventSetup &iSetup) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
RunID const & id() const
Definition: RunBase.h:39
Log< level::Info, false > LogInfo
LuminosityBlockID id() const
std::map< edm::LuminosityBlockNumber_t, std::vector< double > > valuesMap_
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:712
AlcaBeamMonitorClient(const edm::ParameterSet &)
std::vector< std::string > varNamesV_
HLT enums.
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
tmp
align.sh
Definition: createJobs.py:716
void endLuminosityBlock(const edm::LuminosityBlock &iLumi, const edm::EventSetup &iSetup) override
RunNumber_t run() const
Definition: RunID.h:26
Definition: Run.h:45