CMS 3D CMS Logo

AlcaBeamMonitor.cc
Go to the documentation of this file.
1 /*
2  * \file AlcaBeamMonitor.cc
3  * \author Lorenzo Uplegger/FNAL
4  * modified by Simone Gennai INFN/Bicocca
5  */
6 
12 //#include "DataFormats/Scalers/interface/BeamSpotOnline.h"
22 #include <memory>
23 
24 #include <numeric>
25 
26 using namespace std;
27 using namespace edm;
28 using namespace reco;
29 
30 //----------------------------------------------------------------------------------------------------------------------
32  : monitorName_(ps.getUntrackedParameter<string>("MonitorName")),
33  primaryVertexLabel_(consumes<VertexCollection>(ps.getUntrackedParameter<InputTag>("PrimaryVertexLabel"))),
34  trackLabel_(consumes<reco::TrackCollection>(ps.getUntrackedParameter<InputTag>("TrackLabel"))),
35  scalerLabel_(consumes<BeamSpot>(ps.getUntrackedParameter<InputTag>("ScalerLabel"))),
36  beamSpotToken_(esConsumes<edm::Transition::BeginLuminosityBlock>()),
37  perLSsaving_(ps.getUntrackedParameter<bool>("perLSsaving", false)),
38  numberOfValuesToSave_(0) {
39  if (!monitorName_.empty())
40  monitorName_ = monitorName_ + "/";
41 
42  theBeamFitter_ = std::make_unique<BeamFitter>(ps, consumesCollector());
43  theBeamFitter_->resetTrkVector();
44  theBeamFitter_->resetLSRange();
45  theBeamFitter_->resetRefTime();
46  theBeamFitter_->resetPVFitter();
47 
48  thePVFitter_ = std::make_unique<PVFitter>(ps, consumesCollector());
49 
50  processedLumis_.clear();
51 
52  varNamesV_.push_back("x");
53  varNamesV_.push_back("y");
54  varNamesV_.push_back("z");
55  varNamesV_.push_back("sigmaX");
56  varNamesV_.push_back("sigmaY");
57  varNamesV_.push_back("sigmaZ");
58 
59  if (!perLSsaving_) {
60  histoByCategoryNames_.insert(pair<string, string>("run", "Coordinate"));
61  histoByCategoryNames_.insert(pair<string, string>("run", "PrimaryVertex fit-DataBase"));
62  histoByCategoryNames_.insert(pair<string, string>("run", "PrimaryVertex fit-BeamFit"));
63  histoByCategoryNames_.insert(pair<string, string>("run", "PrimaryVertex fit-Scalers"));
64  histoByCategoryNames_.insert(pair<string, string>("run", "PrimaryVertex-DataBase"));
65  histoByCategoryNames_.insert(pair<string, string>("run", "PrimaryVertex-BeamFit"));
66  histoByCategoryNames_.insert(pair<string, string>("run", "PrimaryVertex-Scalers"));
67 
68  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased BeamSpotFit"));
69  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex"));
70  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased DataBase"));
71  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased Scalers"));
72  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex-DataBase fit"));
73  histoByCategoryNames_.insert(pair<string, string>("lumi", "Lumibased PrimaryVertex-Scalers fit"));
74  histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased Scalers-DataBase fit"));
75  histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased PrimaryVertex-DataBase"));
76  histoByCategoryNames_.insert(pair<string, string>("validation", "Lumibased PrimaryVertex-Scalers"));
77  }
78 
79  for (vector<string>::iterator itV = varNamesV_.begin(); itV != varNamesV_.end(); itV++) {
80  for (multimap<string, string>::iterator itM = histoByCategoryNames_.begin(); itM != histoByCategoryNames_.end();
81  itM++) {
82  histosMap_[*itV][itM->first][itM->second] = nullptr;
83  }
84  }
85 }
86 
89 
90  ps.addUntracked<std::string>("MonitorName", "YourSubsystemName");
91  ps.addUntracked<edm::InputTag>("PrimaryVertexLabel");
92  ps.addUntracked<edm::InputTag>("TrackLabel");
93  ps.addUntracked<edm::InputTag>("ScalerLabel");
94  ps.addUntracked<bool>("perLSsaving");
95 
98 
99  iDesc.addDefault(ps);
100 }
101 
102 //----------------------------------------------------------------------------------------------------------------------
103 void AlcaBeamMonitor::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) {
104  string name;
105  string title;
106  int firstLumi = 1;
107  int lastLumi = 3000;
108  for (HistosContainer::iterator itM = histosMap_.begin(); itM != histosMap_.end(); itM++) {
109  ibooker.setCurrentFolder(monitorName_ + "Debug");
110  for (map<string, MonitorElement*>::iterator itMM = itM->second["run"].begin(); itMM != itM->second["run"].end();
111  itMM++) {
112  name = string("h") + itM->first + itMM->first;
113  title = itM->first + "_{0} " + itMM->first;
114  if (itM->first == "x" || itM->first == "y") {
115  if (itMM->first == "Coordinate") {
116  itMM->second = ibooker.book1D(name, title, 1001, -0.2525, 0.2525);
117  } else if (itMM->first == "PrimaryVertex fit-DataBase" || itMM->first == "PrimaryVertex fit-BeamFit" ||
118  itMM->first == "PrimaryVertex fit-Scalers" || itMM->first == "PrimaryVertex-DataBase" ||
119  itMM->first == "PrimaryVertex-BeamFit" || itMM->first == "PrimaryVertex-Scalers") {
120  itMM->second = ibooker.book1D(name, title, 1001, -0.02525, 0.02525);
121  } else {
122  //assert(0);
123  }
124  } else if (itM->first == "z") {
125  if (itMM->first == "Coordinate") {
126  itMM->second = ibooker.book1D(name, title, 101, -5.05, 5.05);
127  } else if (itMM->first == "PrimaryVertex fit-DataBase" || itMM->first == "PrimaryVertex fit-BeamFit" ||
128  itMM->first == "PrimaryVertex fit-Scalers") {
129  itMM->second = ibooker.book1D(name, title, 101, -0.505, 0.505);
130  } else if (itMM->first == "PrimaryVertex-DataBase" || itMM->first == "PrimaryVertex-BeamFit" ||
131  itMM->first == "PrimaryVertex-Scalers") {
132  itMM->second = ibooker.book1D(name, title, 1001, -5.005, 5.005);
133  } else {
134  //assert(0);
135  }
136  } else if (itM->first == "sigmaX" || itM->first == "sigmaY") {
137  if (itMM->first == "Coordinate") {
138  itMM->second = ibooker.book1D(name, title, 100, 0, 0.015);
139  } else if (itMM->first == "PrimaryVertex fit-DataBase" || itMM->first == "PrimaryVertex fit-BeamFit" ||
140  itMM->first == "PrimaryVertex fit-Scalers" || itMM->first == "PrimaryVertex-DataBase" ||
141  itMM->first == "PrimaryVertex-BeamFit" || itMM->first == "PrimaryVertex-Scalers") {
142  itMM->second = nullptr;
143  } else {
144  //assert(0);
145  }
146  } else if (itM->first == "sigmaZ") {
147  if (itMM->first == "Coordinate") {
148  itMM->second = ibooker.book1D(name, title, 110, 0, 11);
149  } else if (itMM->first == "PrimaryVertex fit-DataBase" || itMM->first == "PrimaryVertex fit-BeamFit" ||
150  itMM->first == "PrimaryVertex fit-Scalers" || itMM->first == "PrimaryVertex-DataBase" ||
151  itMM->first == "PrimaryVertex-BeamFit" || itMM->first == "PrimaryVertex-Scalers") {
152  itMM->second = ibooker.book1D(name, title, 101, -5.05, 5.05);
153  } else {
154  //assert(0);
155  }
156  } else {
157  //assert(0);
158  }
159  if (itMM->second != nullptr) {
160  if (itMM->first == "Coordinate") {
161  itMM->second->setAxisTitle(itM->first + "_{0} (cm)", 1);
162  } else if (itMM->first == "PrimaryVertex fit-DataBase" || itMM->first == "PrimaryVertex fit-BeamFit" ||
163  itMM->first == "PrimaryVertex fit-Scalers" || itMM->first == "PrimaryVertex-DataBase" ||
164  itMM->first == "PrimaryVertex-BeamFit" || itMM->first == "PrimaryVertex-Scalers") {
165  itMM->second->setAxisTitle(itMM->first + " " + itM->first + "_{0} (cm)", 1);
166  }
167  itMM->second->setAxisTitle("Entries", 2);
168  }
169  }
170 
171  //Making histos per Lumi
172  // x,y,z,sigmaX,sigmaY,sigmaZ
173  for (map<string, map<string, MonitorElement*> >::iterator itMM = itM->second.begin(); itMM != itM->second.end();
174  itMM++) {
175  if (itMM->first != "run") {
176  for (map<string, MonitorElement*>::iterator itMMM = itMM->second.begin(); itMMM != itMM->second.end();
177  itMMM++) {
178  name = string("h") + itM->first + itMMM->first;
179  title = itM->first + "_{0} " + itMMM->first;
180  if (itMM->first == "lumi") {
181  ibooker.setCurrentFolder(monitorName_ + "Debug");
182  itMMM->second = ibooker.book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
183  itMMM->second->setEfficiencyFlag();
184  } else if (itMM->first == "validation" && itMMM->first == "Lumibased Scalers-DataBase fit") {
185  ibooker.setCurrentFolder(monitorName_ + "Validation");
186  itMMM->second = ibooker.book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
187  itMMM->second->setEfficiencyFlag();
188  } else if (itMM->first == "validation" && itMMM->first != "Lumibased Scalers-DataBase fit" &&
189  (itM->first == "x" || itM->first == "y" || itM->first == "z")) {
190  ibooker.setCurrentFolder(monitorName_ + "Validation");
191  itMMM->second = ibooker.book1D(name, title, lastLumi - firstLumi + 1, firstLumi - 0.5, lastLumi + 0.5);
192  itMMM->second->setEfficiencyFlag();
193  } else if (itMM->first == "validation" &&
194  (itM->first == "sigmaX" || itM->first == "sigmaY" || itM->first == "sigmaZ")) {
195  ibooker.setCurrentFolder(monitorName_ + "Validation");
196  itMMM->second = nullptr;
197  } else {
198  LogInfo("AlcaBeamMonitorClient") << "Unrecognized category " << itMM->first;
199  // assert(0);
200  }
201  if (itMMM->second != nullptr) {
202  if (itMMM->first.find('-') != string::npos) {
203  itMMM->second->setAxisTitle(string("#Delta ") + itM->first + "_{0} (cm)", 2);
204  } else {
205  itMMM->second->setAxisTitle(itM->first + "_{0} (cm)", 2);
206  }
207  itMMM->second->setAxisTitle("Lumisection", 1);
208  }
209  }
210  }
211  }
212  }
213 
214  // create and cd into new folder
215  ibooker.setCurrentFolder(monitorName_ + "Validation");
216  //Book histograms
217  hD0Phi0_ = ibooker.bookProfile("hD0Phi0", "d_{0} vs. #phi_{0} (All Tracks)", 63, -3.15, 3.15, 100, -0.5, 0.5, "");
218  hD0Phi0_->setAxisTitle("#phi_{0} (rad)", 1);
219  hD0Phi0_->setAxisTitle("d_{0} (cm)", 2);
220 
221  ibooker.setCurrentFolder(monitorName_ + "Debug");
222  hDxyBS_ = ibooker.book1D("hDxyBS", "dxy_{0} w.r.t. Beam spot (All Tracks)", 100, -0.1, 0.1);
223  hDxyBS_->setAxisTitle("dxy_{0} w.r.t. Beam spot (cm)", 1);
224 }
225 
226 //----------------------------------------------------------------------------------------------------------------------
227 std::shared_ptr<alcabeammonitor::NoCache> AlcaBeamMonitor::globalBeginLuminosityBlock(const LuminosityBlock& iLumi,
228  const EventSetup& iSetup) const {
229  // Always create a beamspot group for each lumi weather we have results or not! Each Beamspot will be of unknown type!
230 
231  vertices_.clear();
232  beamSpotsMap_.clear();
233  processedLumis_.push_back(iLumi.id().luminosityBlock());
234  //Read BeamSpot from DB
235  ESHandle<BeamSpotObjects> bsDBHandle;
236  try {
237  bsDBHandle = iSetup.getHandle(beamSpotToken_);
238  } catch (cms::Exception& exception) {
239  LogError("AlcaBeamMonitor") << exception.what();
240  return nullptr;
241  }
242  if (bsDBHandle.isValid()) { // check the product
243  const BeamSpotObjects* spotDB = bsDBHandle.product();
244 
245  // translate from BeamSpotObjects to reco::BeamSpot
246  BeamSpot::Point apoint(spotDB->x(), spotDB->y(), spotDB->z());
247 
249  for (int i = 0; i < 7; ++i) {
250  for (int j = 0; j < 7; ++j) {
251  matrix(i, j) = spotDB->covariance(i, j);
252  }
253  }
254 
255  beamSpotsMap_["DB"] =
256  BeamSpot(apoint, spotDB->sigmaZ(), spotDB->dxdz(), spotDB->dydz(), spotDB->beamWidthX(), matrix);
257 
258  BeamSpot* aSpot = &(beamSpotsMap_["DB"]);
259 
260  aSpot->setBeamWidthY(spotDB->beamWidthY());
261  aSpot->setEmittanceX(spotDB->emittanceX());
262  aSpot->setEmittanceY(spotDB->emittanceY());
263  aSpot->setbetaStar(spotDB->betaStar());
264 
265  if (spotDB->beamType() == 2) {
266  aSpot->setType(reco::BeamSpot::Tracker);
267  } else {
268  aSpot->setType(reco::BeamSpot::Fake);
269  }
270  //LogInfo("AlcaBeamMonitor")
271  // << *aSpot << std::endl;
272  } else {
273  LogInfo("AlcaBeamMonitor") << "Database BeamSpot is not valid at lumi: " << iLumi.id().luminosityBlock();
274  }
275  return nullptr;
276 }
277 
278 //----------------------------------------------------------------------------------------------------------------------
279 void AlcaBeamMonitor::analyze(const Event& iEvent, const EventSetup& iSetup) {
280  //------ BeamFitter
281  theBeamFitter_->readEvent(iEvent);
282  //------ PVFitter
283  thePVFitter_->readEvent(iEvent);
284 
285  if (beamSpotsMap_.find("DB") != beamSpotsMap_.end()) {
286  //------ Tracks
288  iEvent.getByToken(trackLabel_, TrackCollection);
289  const reco::TrackCollection* tracks = TrackCollection.product();
290  for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
291  hD0Phi0_->Fill(track->phi(), -1 * track->dxy());
292  hDxyBS_->Fill(-1 * track->dxy(beamSpotsMap_["DB"].position()));
293  }
294  }
295 
296  //------ Primary Vertices
298  if (iEvent.getByToken(primaryVertexLabel_, PVCollection)) {
299  vertices_.push_back(*PVCollection.product());
300  }
301 
302  if (beamSpotsMap_.find("SC") == beamSpotsMap_.end()) {
303  //BeamSpot from file for this stream is = to the scalar BeamSpot
304  Handle<BeamSpot> recoBeamSpotHandle;
305  try {
306  iEvent.getByToken(scalerLabel_, recoBeamSpotHandle);
307  } catch (cms::Exception& exception) {
308  LogInfo("AlcaBeamMonitor") << exception.what();
309  return;
310  }
311  beamSpotsMap_["SC"] = *recoBeamSpotHandle;
312  if (beamSpotsMap_["SC"].BeamWidthX() != 0) {
313  beamSpotsMap_["SC"].setType(reco::BeamSpot::Tracker);
314  } else {
315  beamSpotsMap_["SC"].setType(reco::BeamSpot::Fake);
316  }
317  }
318 }
319 
320 //----------------------------------------------------------------------------------------------------------------------
322  if (theBeamFitter_->runPVandTrkFitter()) {
323  beamSpotsMap_["BF"] = theBeamFitter_->getBeamSpot();
324  }
325  theBeamFitter_->resetTrkVector();
326  theBeamFitter_->resetLSRange();
327  theBeamFitter_->resetRefTime();
328  theBeamFitter_->resetPVFitter();
329 
330  if (thePVFitter_->runFitter()) {
331  beamSpotsMap_["PV"] = thePVFitter_->getBeamSpot();
332  }
333  thePVFitter_->resetAll();
334 
335  // "PV,BF..." Value,Error
336  map<std::string, pair<double, double> > resultsMap;
337  vector<pair<double, double> > vertexResults;
338  MonitorElement* histo = nullptr;
339  for (vector<string>::iterator itV = varNamesV_.begin(); itV != varNamesV_.end(); itV++) {
340  resultsMap.clear();
341  for (BeamSpotContainer::iterator itBS = beamSpotsMap_.begin(); itBS != beamSpotsMap_.end(); itBS++) {
342  if (itBS->second.type() == BeamSpot::Tracker) {
343  if (*itV == "x") {
344  resultsMap[itBS->first] = pair<double, double>(itBS->second.x0(), itBS->second.x0Error());
345  } else if (*itV == "y") {
346  resultsMap[itBS->first] = pair<double, double>(itBS->second.y0(), itBS->second.y0Error());
347  } else if (*itV == "z") {
348  resultsMap[itBS->first] = pair<double, double>(itBS->second.z0(), itBS->second.z0Error());
349  } else if (*itV == "sigmaX") {
350  resultsMap[itBS->first] = pair<double, double>(itBS->second.BeamWidthX(), itBS->second.BeamWidthXError());
351  } else if (*itV == "sigmaY") {
352  resultsMap[itBS->first] = pair<double, double>(itBS->second.BeamWidthY(), itBS->second.BeamWidthYError());
353  } else if (*itV == "sigmaZ") {
354  resultsMap[itBS->first] = pair<double, double>(itBS->second.sigmaZ(), itBS->second.sigmaZ0Error());
355  } else {
356  LogInfo("AlcaBeamMonitor") << "The histosMap_ has been built with the name " << *itV
357  << " that I can't recognize!";
358  //assert(0);
359  }
360  }
361  }
362  vertexResults.clear();
363  for (vector<VertexCollection>::iterator itPV = vertices_.begin(); itPV != vertices_.end(); itPV++) {
364  if (!itPV->empty()) {
365  for (VertexCollection::const_iterator pv = itPV->begin(); pv != itPV->end(); pv++) {
366  if (pv->isFake() || pv->tracksSize() < 10)
367  continue;
368  if (*itV == "x") {
369  vertexResults.push_back(pair<double, double>(pv->x(), pv->xError()));
370  } else if (*itV == "y") {
371  vertexResults.push_back(pair<double, double>(pv->y(), pv->yError()));
372  } else if (*itV == "z") {
373  vertexResults.push_back(pair<double, double>(pv->z(), pv->zError()));
374  } else if (*itV != "sigmaX" && *itV != "sigmaY" && *itV != "sigmaZ") {
375  LogInfo("AlcaBeamMonitor") << "The histosMap_ has been built with the name " << *itV
376  << " that I can't recognize!";
377  //assert(0);
378  }
379  }
380  }
381  }
382 
383  for (multimap<string, string>::iterator itM = histoByCategoryNames_.begin(); itM != histoByCategoryNames_.end();
384  itM++) {
385  if ((histo = histosMap_[*itV][itM->first][itM->second]) == nullptr)
386  continue;
387  if (itM->second == "Coordinate") {
388  if (beamSpotsMap_.find("DB") != beamSpotsMap_.end()) {
389  histo->Fill(resultsMap["DB"].first);
390  }
391  } else if (itM->second == "PrimaryVertex fit-DataBase") {
392  if (resultsMap.find("PV") != resultsMap.end() && resultsMap.find("DB") != resultsMap.end()) {
393  histo->Fill(resultsMap["PV"].first - resultsMap["DB"].first);
394  }
395  } else if (itM->second == "PrimaryVertex fit-BeamFit") {
396  if (resultsMap.find("PV") != resultsMap.end() && resultsMap.find("BF") != resultsMap.end()) {
397  histo->Fill(resultsMap["PV"].first - resultsMap["BF"].first);
398  }
399  } else if (itM->second == "PrimaryVertex fit-Scalers") {
400  if (resultsMap.find("PV") != resultsMap.end() && resultsMap.find("SC") != resultsMap.end()) {
401  histo->Fill(resultsMap["PV"].first - resultsMap["SC"].first);
402  }
403  } else if (itM->second == "PrimaryVertex-DataBase") {
404  if (resultsMap.find("PV") != resultsMap.end() && resultsMap.find("DB") != resultsMap.end()) {
405  for (vector<pair<double, double> >::iterator itPV = vertexResults.begin(); itPV != vertexResults.end();
406  itPV++) {
407  histo->Fill(itPV->first - resultsMap["DB"].first);
408  }
409  }
410  } else if (itM->second == "PrimaryVertex-BeamFit") {
411  if (resultsMap.find("PV") != resultsMap.end() && resultsMap.find("BF") != resultsMap.end()) {
412  for (vector<pair<double, double> >::iterator itPV = vertexResults.begin(); itPV != vertexResults.end();
413  itPV++) {
414  histo->Fill(itPV->first - resultsMap["BF"].first);
415  }
416  }
417  } else if (itM->second == "PrimaryVertex-Scalers") {
418  if (resultsMap.find("PV") != resultsMap.end() && resultsMap.find("SC") != resultsMap.end()) {
419  for (vector<pair<double, double> >::iterator itPV = vertexResults.begin(); itPV != vertexResults.end();
420  itPV++) {
421  histo->Fill(itPV->first - resultsMap["SC"].first);
422  }
423  }
424  } else if (itM->second == "Lumibased BeamSpotFit") {
425  if (resultsMap.find("BF") != resultsMap.end()) {
426  histo->setBinContent(iLumi.id().luminosityBlock(), resultsMap["BF"].first);
427  histo->setBinError(iLumi.id().luminosityBlock(), resultsMap["BF"].second);
428  }
429  } else if (itM->second == "Lumibased PrimaryVertex") {
430  if (resultsMap.find("PV") != resultsMap.end()) {
431  histo->setBinContent(iLumi.id().luminosityBlock(), resultsMap["PV"].first);
432  histo->setBinError(iLumi.id().luminosityBlock(), resultsMap["PV"].second);
433  }
434  } else if (itM->second == "Lumibased DataBase") {
435  if (resultsMap.find("DB") != resultsMap.end()) {
436  histo->setBinContent(iLumi.id().luminosityBlock(), resultsMap["DB"].first);
437  histo->setBinError(iLumi.id().luminosityBlock(), resultsMap["DB"].second);
438  }
439  } else if (itM->second == "Lumibased Scalers") {
440  if (resultsMap.find("SC") != resultsMap.end()) {
441  histo->setBinContent(iLumi.id().luminosityBlock(), resultsMap["SC"].first);
442  histo->setBinError(iLumi.id().luminosityBlock(), resultsMap["SC"].second);
443  }
444  } else if (itM->second == "Lumibased PrimaryVertex-DataBase fit") {
445  if (resultsMap.find("PV") != resultsMap.end() && resultsMap.find("DB") != resultsMap.end()) {
446  histo->setBinContent(iLumi.id().luminosityBlock(), resultsMap["PV"].first - resultsMap["DB"].first);
447  histo->setBinError(iLumi.id().luminosityBlock(),
448  std::sqrt(std::pow(resultsMap["PV"].second, 2) + std::pow(resultsMap["DB"].second, 2)));
449  }
450  } else if (itM->second == "Lumibased PrimaryVertex-Scalers fit") {
451  if (resultsMap.find("PV") != resultsMap.end() && resultsMap.find("SC") != resultsMap.end()) {
452  histo->setBinContent(iLumi.id().luminosityBlock(), resultsMap["PV"].first - resultsMap["SC"].first);
453  histo->setBinError(iLumi.id().luminosityBlock(),
454  std::sqrt(std::pow(resultsMap["PV"].second, 2) + std::pow(resultsMap["SC"].second, 2)));
455  }
456  } else if (itM->second == "Lumibased Scalers-DataBase fit") {
457  if (resultsMap.find("SC") != resultsMap.end() && resultsMap.find("DB") != resultsMap.end()) {
458  histo->setBinContent(iLumi.id().luminosityBlock(), resultsMap["SC"].first - resultsMap["DB"].first);
459  histo->setBinError(iLumi.id().luminosityBlock(),
460  std::sqrt(std::pow(resultsMap["SC"].second, 2) + std::pow(resultsMap["DB"].second, 2)));
461  }
462  } else if (itM->second == "Lumibased PrimaryVertex-DataBase") {
463  if (resultsMap.find("DB") != resultsMap.end() && !vertexResults.empty()) {
464  for (vector<pair<double, double> >::iterator itPV = vertexResults.begin(); itPV != vertexResults.end();
465  itPV++) {
466  histo->setBinContent(iLumi.id().luminosityBlock(), (*itPV).first - resultsMap["DB"].first);
467  histo->setBinError(iLumi.id().luminosityBlock(),
468  std::sqrt(std::pow((*itPV).second, 2) + std::pow(resultsMap["DB"].second, 2)));
469  }
470  }
471  } else if (itM->second == "Lumibased PrimaryVertex-Scalers") {
472  if (resultsMap.find("SC") != resultsMap.end() && !vertexResults.empty()) {
473  for (vector<pair<double, double> >::iterator itPV = vertexResults.begin(); itPV != vertexResults.end();
474  itPV++) {
475  histo->setBinContent(iLumi.id().luminosityBlock(), (*itPV).first - resultsMap["SC"].first);
476  histo->setBinError(iLumi.id().luminosityBlock(),
477  std::sqrt(std::pow((*itPV).second, 2) + std::pow(resultsMap["SC"].second, 2)));
478  }
479  }
480  }
481  // else if(itM->second == "Lumibased Scalers-DataBase"){
482  // if(resultsMap.find("SC") != resultsMap.end() && resultsMap.find("DB") != resultsMap.end()){
483  // itHHH->second->Fill(bin,resultsMap["SC"].first-resultsMap["DB"].first);
484  // }
485  // }
486  else {
487  LogInfo("AlcaBeamMonitor") << "The histosMap_ have a histogram named " << itM->second
488  << " that I can't recognize in this loop!";
489  //assert(0);
490  }
491  }
492  }
493 }
494 
496  if (processedLumis_.empty()) {
497  return;
498  }
499 
500  const double bigNumber = 1000000.;
501  std::sort(processedLumis_.begin(), processedLumis_.end());
502  int firstLumi = *processedLumis_.begin();
503  int lastLumi = *(--processedLumis_.end());
504 
505  for (HistosContainer::iterator itH = histosMap_.begin(); itH != histosMap_.end(); itH++) {
506  for (map<string, map<string, MonitorElement*> >::iterator itHH = itH->second.begin(); itHH != itH->second.end();
507  itHH++) {
508  double min = bigNumber;
509  double max = -bigNumber;
510  double minDelta = bigNumber;
511  double maxDelta = -bigNumber;
512  // double minDeltaProf = bigNumber;
513  // double maxDeltaProf = -bigNumber;
514  if (itHH->first != "run") {
515  for (map<string, MonitorElement*>::iterator itHHH = itHH->second.begin(); itHHH != itHH->second.end();
516  itHHH++) {
517  if (itHHH->second != nullptr) {
518  for (int bin = 1; bin <= itHHH->second->getTH1()->GetNbinsX(); bin++) {
519  if (itHHH->second->getTH1()->GetBinError(bin) != 0 || itHHH->second->getTH1()->GetBinContent(bin) != 0) {
520  if (itHHH->first == "Lumibased BeamSpotFit" || itHHH->first == "Lumibased PrimaryVertex" ||
521  itHHH->first == "Lumibased DataBase" || itHHH->first == "Lumibased Scalers") {
522  if (min > itHHH->second->getTH1()->GetBinContent(bin)) {
523  min = itHHH->second->getTH1()->GetBinContent(bin);
524  }
525  if (max < itHHH->second->getTH1()->GetBinContent(bin)) {
526  max = itHHH->second->getTH1()->GetBinContent(bin);
527  }
528  } else if (itHHH->first == "Lumibased PrimaryVertex-DataBase fit" ||
529  itHHH->first == "Lumibased PrimaryVertex-Scalers fit" ||
530  itHHH->first == "Lumibased Scalers-DataBase fit" ||
531  itHHH->first == "Lumibased PrimaryVertex-DataBase" ||
532  itHHH->first == "Lumibased PrimaryVertex-Scalers") {
533  if (minDelta > itHHH->second->getTH1()->GetBinContent(bin)) {
534  minDelta = itHHH->second->getTH1()->GetBinContent(bin);
535  }
536  if (maxDelta < itHHH->second->getTH1()->GetBinContent(bin)) {
537  maxDelta = itHHH->second->getTH1()->GetBinContent(bin);
538  }
539  } else {
540  LogInfo("AlcaBeamMonitorClient") << "The histosMap_ have a histogram named " << itHHH->first
541  << " that I can't recognize in this loop!";
542  // assert(0);
543  }
544  }
545  }
546  }
547  }
548  for (map<string, MonitorElement*>::iterator itHHH = itHH->second.begin(); itHHH != itHH->second.end();
549  itHHH++) {
550  if (itHHH->second != nullptr) {
551  if (itHHH->first == "Lumibased BeamSpotFit" || itHHH->first == "Lumibased PrimaryVertex" ||
552  itHHH->first == "Lumibased DataBase" || itHHH->first == "Lumibased Scalers") {
553  if ((max == -bigNumber && min == bigNumber) || max - min == 0) {
554  itHHH->second->getTH1()->SetMinimum(itHHH->second->getTH1()->GetMinimum() - 0.01);
555  itHHH->second->getTH1()->SetMaximum(itHHH->second->getTH1()->GetMaximum() + 0.01);
556  } else {
557  itHHH->second->getTH1()->SetMinimum(min - 0.1 * (max - min));
558  itHHH->second->getTH1()->SetMaximum(max + 0.1 * (max - min));
559  }
560  } else if (itHHH->first == "Lumibased PrimaryVertex-DataBase fit" ||
561  itHHH->first == "Lumibased PrimaryVertex-Scalers fit" ||
562  itHHH->first == "Lumibased Scalers-DataBase fit" ||
563  itHHH->first == "Lumibased PrimaryVertex-DataBase" ||
564  itHHH->first == "Lumibased PrimaryVertex-Scalers") {
565  if ((maxDelta == -bigNumber && minDelta == bigNumber) || maxDelta - minDelta == 0) {
566  itHHH->second->getTH1()->SetMinimum(itHHH->second->getTH1()->GetMinimum() - 0.01);
567  itHHH->second->getTH1()->SetMaximum(itHHH->second->getTH1()->GetMaximum() + 0.01);
568  } else {
569  itHHH->second->getTH1()->SetMinimum(minDelta - 2 * (maxDelta - minDelta));
570  itHHH->second->getTH1()->SetMaximum(maxDelta + 2 * (maxDelta - minDelta));
571  }
572  } else {
573  LogInfo("AlcaBeamMonitorClient") << "The histosMap_ have a histogram named " << itHHH->first
574  << " that I can't recognize in this loop!";
575  }
576  itHHH->second->getTH1()->GetXaxis()->SetRangeUser(firstLumi - 0.5, lastLumi + 0.5);
577  }
578  }
579  }
580  }
581  }
582 }
double emittanceX() const
get emittance
MonitorElement * hD0Phi0_
math::Error< dimension >::type CovarianceMatrix
Definition: BeamSpot.h:29
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
LuminosityBlockNumber_t luminosityBlock() const
double z() const
get Z beam position
MonitorElement * hDxyBS_
double dydz() const
get dydz slope, crossing angle in YZ
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &)
double covariance(int i, int j) const
get i,j element of the full covariance matrix 7x7
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
std::multimap< std::string, std::string > histoByCategoryNames_
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:27
double beamWidthX() const
get average transverse beam width
Log< level::Error, false > LogError
int beamType() const
get beam type
void Fill(long long x)
U second(std::pair< T, U > const &p)
std::vector< std::string > varNamesV_
int iEvent
Definition: GenABIO.cc:224
T const * product() const
Definition: ESHandle.h:86
AlcaBeamMonitor(const edm::ParameterSet &)
void addDefault(ParameterSetDescription const &psetDescription)
void setBeamWidthY(double v)
Definition: BeamSpot.h:105
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:399
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
T sqrt(T t)
Definition: SSEVec.h:19
BeamSpotContainer beamSpotsMap_
std::vector< int > processedLumis_
Transition
Definition: Transition.h:12
double x() const
get X beam position
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
const edm::ESGetToken< BeamSpotObjects, BeamSpotObjectsRcd > beamSpotToken_
double beamWidthY() const
get average transverse beam width
bool isValid() const
Definition: ESHandle.h:44
Log< level::Info, false > LogInfo
double y() const
get Y beam position
static void fillDescription(edm::ParameterSetDescription &)
Definition: PVFitter.cc:97
std::unique_ptr< PVFitter > thePVFitter_
std::unique_ptr< BeamFitter > theBeamFitter_
auto const & tracks
cannot be loose
LuminosityBlockID id() const
HistosContainer histosMap_
double sigmaZ() const
get sigma Z, RMS bunch length
void globalEndLuminosityBlock(const edm::LuminosityBlock &iLumi, const edm::EventSetup &iSetup) override
double emittanceY() const
get emittance
std::string monitorName_
double betaStar() const
get beta star
fixed size matrix
HLT enums.
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
const edm::EDGetTokenT< reco::BeamSpot > scalerLabel_
static void fillDescription(edm::ParameterSetDescription &)
Definition: BeamFitter.cc:224
const edm::EDGetTokenT< reco::TrackCollection > trackLabel_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
const edm::EDGetTokenT< reco::VertexCollection > primaryVertexLabel_
double dxdz() const
get dxdz slope, crossing angle in XZ
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
Definition: Run.h:45
std::shared_ptr< alcabeammonitor::NoCache > globalBeginLuminosityBlock(const edm::LuminosityBlock &iLumi, const edm::EventSetup &iSetup) const override
void dqmEndRun(edm::Run const &, edm::EventSetup const &) override
std::vector< reco::VertexCollection > vertices_
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)