CMS 3D CMS Logo

L1TEMTFEventInfoClient.cc
Go to the documentation of this file.
1 
13 // this class header
15 
16 // constructor
18  : m_verbose(parSet.getUntrackedParameter<bool>("verbose", false)),
19  m_monitorDir(parSet.getUntrackedParameter<std::string>("monitorDir", "")),
20  m_histDir(parSet.getUntrackedParameter<std::string>("histDir", "")),
21  m_runInEventLoop(parSet.getUntrackedParameter<bool>("runInEventLoop", false)),
22  m_runInEndLumi(parSet.getUntrackedParameter<bool>("runInEndLumi", false)),
23  m_runInEndRun(parSet.getUntrackedParameter<bool>("runInEndRun", false)),
24  m_runInEndJob(parSet.getUntrackedParameter<bool>("runInEndJob", false)),
25  m_trackObjects(parSet.getParameter<std::vector<edm::ParameterSet> >("TrackObjects")),
26  m_hitObjects(parSet.getParameter<std::vector<edm::ParameterSet> >("HitObjects")),
27  m_disableTrackObjects(parSet.getParameter<std::vector<std::string> >("DisableTrackObjects")),
28  m_disableHitObjects(parSet.getParameter<std::vector<std::string> >("DisableHitObjects")),
29  m_noisyStrip(parSet.getParameter<std::vector<edm::ParameterSet> >("NoisyStrip")),
30  m_deadStrip(parSet.getParameter<std::vector<edm::ParameterSet> >("DeadStrip")),
31  m_disableNoisyStrip(parSet.getParameter<std::vector<std::string> >("DisableNoisyStrip")),
32  m_disableDeadStrip(parSet.getParameter<std::vector<std::string> >("DisableDeadStrip")),
33  m_nrTrackObjects(0),
34  m_nrHitObjects(0),
35  m_nrNoisyStrip(0),
36  m_nrDeadStrip(0),
37  m_totalNrQtSummaryEnabled(0) {
38  initialize();
39 }
40 
41 // destructor
43  //empty
44 }
45 
47  if (m_verbose)
48  std::cout << "\nMonitor directory = " << m_monitorDir << std::endl;
49 
50  // L1 systems
51 
53 
55  // m_trackLabelExt.reserve(m_nrTrackObjects); // Not needed? - AWB 05.12.16
57 
58  // on average five quality test per system - just a best guess
59  m_trackQualityTestName.reserve(5 * m_nrTrackObjects); // Not needed? - AWB 05.12.16
60  m_trackQualityTestHist.reserve(5 * m_nrTrackObjects); // Not needed? - AWB 05.12.16
61  m_trackQtSummaryEnabled.reserve(5 * m_nrTrackObjects); // Not needed? - AWB 05.12.16
62 
63  int indexSys = 0;
64 
65  int totalNrQualityTests = 0;
66 
67  for (const auto& itTrack : m_trackObjects) {
68  m_trackLabel.push_back(itTrack.getParameter<std::string>("SystemLabel"));
69 
70  // m_trackLabelExt.push_back(itTrack.getParameter<std::string>( // Not needed? - AWB 05.12.16
71  // "HwValLabel"));
72 
73  m_trackDisable.push_back(itTrack.getParameter<unsigned int>("SystemDisable"));
74  // check the additional disable flag from m_disableTrackObjects
75  for (const auto& itSys : m_disableTrackObjects) {
76  if (itSys == m_trackLabel[indexSys]) {
77  m_trackDisable[indexSys] = 1;
78  }
79  }
80 
81  std::vector<edm::ParameterSet> qTests = itTrack.getParameter<std::vector<edm::ParameterSet> >("QualityTests");
82  size_t qtPerSystem = qTests.size();
83 
84  std::vector<std::string> qtNames;
85  qtNames.reserve(qtPerSystem);
86 
87  std::vector<std::string> qtFullPathHists;
88  qtFullPathHists.reserve(qtPerSystem);
89 
90  std::vector<unsigned int> qtSumEnabled;
91  qtSumEnabled.reserve(qtPerSystem);
92 
93  if (m_verbose)
94  std::cout << "\nLooping over track quality tests" << std::endl;
95  for (const auto& itQT : qTests) {
96  totalNrQualityTests++;
97 
98  qtNames.push_back(itQT.getParameter<std::string>("QualityTestName"));
99 
100  // qtFullPathHists.push_back( m_histDir + "/" + itQT.getParameter<std::string> ("QualityTestHist"));
101  qtFullPathHists.push_back(itQT.getParameter<std::string>("QualityTestHist"));
102  if (m_verbose)
103  std::cout << qtFullPathHists.back() << std::endl;
104 
105  unsigned int qtEnabled = itQT.getParameter<unsigned int>("QualityTestSummaryEnabled");
106 
107  qtSumEnabled.push_back(qtEnabled);
108 
109  if (qtEnabled) {
111  }
112  }
113 
114  m_trackQualityTestName.push_back(qtNames);
115  m_trackQualityTestHist.push_back(qtFullPathHists);
116  m_trackQtSummaryEnabled.push_back(qtSumEnabled);
117 
118  indexSys++;
119  }
120 
121  // L1 objects
122 
123  //
124  m_nrHitObjects = m_hitObjects.size();
125 
126  m_hitLabel.reserve(m_nrHitObjects);
127  m_hitDisable.reserve(m_nrHitObjects);
128 
129  // on average five quality test per object - just a best guess
133 
134  int indexObj = 0;
135 
136  for (const auto& itObject : m_hitObjects) {
137  m_hitLabel.push_back(itObject.getParameter<std::string>("HitLabel"));
138 
139  m_hitDisable.push_back(itObject.getParameter<unsigned int>("HitDisable"));
140  // check the additional disable flag from m_disableHitObjects
141  for (const auto& itObj : m_disableHitObjects) {
142  if (itObj == m_hitLabel[indexObj]) {
143  m_hitDisable[indexObj] = 1;
144  }
145  }
146 
147  std::vector<edm::ParameterSet> qTests = itObject.getParameter<std::vector<edm::ParameterSet> >("QualityTests");
148  size_t qtPerObject = qTests.size();
149 
150  std::vector<std::string> qtNames;
151  qtNames.reserve(qtPerObject);
152 
153  std::vector<std::string> qtFullPathHists;
154  qtFullPathHists.reserve(qtPerObject);
155 
156  std::vector<unsigned int> qtSumEnabled;
157  qtSumEnabled.reserve(qtPerObject);
158 
159  if (m_verbose)
160  std::cout << "\nLooping over hit quality tests" << std::endl;
161  for (const auto& itQT : qTests) {
162  totalNrQualityTests++;
163 
164  qtNames.push_back(itQT.getParameter<std::string>("QualityTestName"));
165 
166  // qtFullPathHists.push_back( m_histDir + "/" + itQT.getParameter<std::string> ("QualityTestHist") );
167  qtFullPathHists.push_back(itQT.getParameter<std::string>("QualityTestHist"));
168  if (m_verbose)
169  std::cout << qtFullPathHists.back() << std::endl;
170 
171  unsigned int qtEnabled = itQT.getParameter<unsigned int>("QualityTestSummaryEnabled");
172 
173  qtSumEnabled.push_back(qtEnabled);
174 
175  if (qtEnabled) {
177  }
178  }
179 
180  m_hitQualityTestName.push_back(qtNames);
181  m_hitQualityTestHist.push_back(qtFullPathHists);
182  m_hitQtSummaryEnabled.push_back(qtSumEnabled);
183 
184  indexObj++;
185  }
186 
187  // L1 Strip Noisy=========================================================================================
188 
189  m_nrNoisyStrip = m_noisyStrip.size();
190 
191  m_noisyLabel.reserve(m_nrNoisyStrip);
193 
194  // on average 20 quality tests per system
195  m_noisyQualityTestName.reserve(20 * m_nrNoisyStrip); // Not needed? - AWB 05.12.16
196  m_noisyQualityTestHist.reserve(20 * m_nrNoisyStrip); // Not needed? - AWB 05.12.16
197  m_noisyQtSummaryEnabled.reserve(20 * m_nrNoisyStrip); // Not needed? - AWB 05.12.16
198 
199  int indexNois = 0;
200 
201  for (const auto& itNoisy : m_noisyStrip) {
202  m_noisyLabel.push_back(itNoisy.getParameter<std::string>("NoisyLabel"));
203 
204  m_noisyDisable.push_back(itNoisy.getParameter<unsigned int>("NoisyDisable"));
205  // check the additional disable flag from m_disableNoisyObjects
206  for (const auto& itNois : m_disableNoisyStrip) {
207  if (itNois == m_noisyLabel[indexNois]) {
208  m_noisyDisable[indexNois] = 1;
209  }
210  }
211 
212  std::vector<edm::ParameterSet> qTests = itNoisy.getParameter<std::vector<edm::ParameterSet> >("QualityTests");
213  size_t qtPerNoisy = qTests.size();
214 
215  std::vector<std::string> qtNames;
216  qtNames.reserve(qtPerNoisy);
217 
218  std::vector<std::string> qtFullPathHists;
219  qtFullPathHists.reserve(qtPerNoisy);
220 
221  std::vector<unsigned int> qtSumEnabled;
222  qtSumEnabled.reserve(qtPerNoisy);
223 
224  if (m_verbose)
225  std::cout << "\nLooping over noisy quality tests" << std::endl;
226  for (const auto& itQT : qTests) {
227  totalNrQualityTests++;
228 
229  qtNames.push_back(itQT.getParameter<std::string>("QualityTestName"));
230 
231  qtFullPathHists.push_back(itQT.getParameter<std::string>("QualityTestHist"));
232  if (m_verbose)
233  std::cout << qtFullPathHists.back() << std::endl;
234 
235  unsigned int qtEnabled = itQT.getParameter<unsigned int>("QualityTestSummaryEnabled");
236 
237  qtSumEnabled.push_back(qtEnabled);
238 
239  if (qtEnabled) {
241  }
242  }
243 
244  m_noisyQualityTestName.push_back(qtNames);
245  m_noisyQualityTestHist.push_back(qtFullPathHists);
246  m_noisyQtSummaryEnabled.push_back(qtSumEnabled);
247 
248  indexNois++;
249  }
250 
251  // L1 Strip Dead=========================================================================================
252 
253  m_nrDeadStrip = m_deadStrip.size();
254 
255  m_deadLabel.reserve(m_nrDeadStrip);
256  m_deadDisable.reserve(m_nrDeadStrip);
257 
258  // on average 20 quality tests per system
259  m_deadQualityTestName.reserve(20 * m_nrDeadStrip); // Not needed? - AWB 05.12.16
260  m_deadQualityTestHist.reserve(20 * m_nrDeadStrip); // Not needed? - AWB 05.12.16
261  m_deadQtSummaryEnabled.reserve(20 * m_nrDeadStrip); // Not needed? - AWB 05.12.16
262 
263  int indexDed = 0;
264 
265  for (const auto& itDead : m_deadStrip) {
266  m_deadLabel.push_back(itDead.getParameter<std::string>("DeadLabel"));
267 
268  m_deadDisable.push_back(itDead.getParameter<unsigned int>("DeadDisable"));
269  // check the additional disable flag from m_disableDeadObjects
270  for (const auto& itDed : m_disableDeadStrip) {
271  if (itDed == m_deadLabel[indexDed]) {
272  m_deadDisable[indexDed] = 1;
273  }
274  }
275 
276  std::vector<edm::ParameterSet> qTests = itDead.getParameter<std::vector<edm::ParameterSet> >("QualityTests");
277  size_t qtPerDead = qTests.size();
278 
279  std::vector<std::string> qtNames;
280  qtNames.reserve(qtPerDead);
281 
282  std::vector<std::string> qtFullPathHists;
283  qtFullPathHists.reserve(qtPerDead);
284 
285  std::vector<unsigned int> qtSumEnabled;
286  qtSumEnabled.reserve(qtPerDead);
287 
288  if (m_verbose)
289  std::cout << "\nLooping over dead quality tests" << std::endl;
290  for (const auto& itQT : qTests) {
291  totalNrQualityTests++;
292 
293  qtNames.push_back(itQT.getParameter<std::string>("QualityTestName"));
294 
295  qtFullPathHists.push_back(itQT.getParameter<std::string>("QualityTestHist"));
296  if (m_verbose)
297  std::cout << qtFullPathHists.back() << std::endl;
298 
299  unsigned int qtEnabled = itQT.getParameter<unsigned int>("QualityTestSummaryEnabled");
300 
301  qtSumEnabled.push_back(qtEnabled);
302 
303  if (qtEnabled) {
305  }
306  }
307 
308  m_deadQualityTestName.push_back(qtNames);
309  m_deadQualityTestHist.push_back(qtFullPathHists);
310  m_deadQtSummaryEnabled.push_back(qtSumEnabled);
311 
312  indexDed++;
313  }
314 
316  m_meReportSummaryContent.reserve(totalNrQualityTests);
317 }
318 
320  DQMStore::IGetter& igetter,
321  const edm::LuminosityBlock& lumiSeg,
322  const edm::EventSetup& evSetup) {
323  if (m_verbose)
324  std::cout << "\nInside void L1TEMTFEventInfoClient::dqmEndLuminosityBlock" << std::endl;
325  if (m_runInEndLumi) {
326  book(ibooker, igetter);
327  readQtResults(ibooker, igetter);
328 
329  if (m_verbose) {
330  std::cout << "\n L1TEMTFEventInfoClient::endLuminosityBlock\n" << std::endl;
331  dumpContentMonitorElements(ibooker, igetter);
332  }
333  }
334 }
335 
337  if (m_verbose)
338  std::cout << "\nInside void L1TEMTFEventInfoClient::dqmEndJob" << std::endl;
339  book(ibooker, igetter);
340 
341  readQtResults(ibooker, igetter);
342 
343  if (m_verbose) {
344  std::cout << "\n L1TEMTFEventInfoClient::endRun\n" << std::endl;
345  dumpContentMonitorElements(ibooker, igetter);
346  }
347 }
348 
350  if (m_verbose)
351  std::cout << "\nSummary report " << std::endl;
352 
353  // summary content
354 
356 
357  if (m_verbose)
358  std::cout << "\nSummary content per system and object as filled in histogram\n " << m_meReportSummaryMap->getName()
359  << std::endl;
360 
361  if (!me) {
362  if (m_verbose)
363  std::cout << "\nNo histogram " << m_meReportSummaryMap->getName()
364  << "\nNo summary content per system and object as filled in histogram.\n " << std::endl;
365  return;
366  }
367 
368  TH2F* hist = me->getTH2F();
369 
370  const int nBinsX = hist->GetNbinsX();
371  const int nBinsY = hist->GetNbinsY();
372  if (m_verbose)
373  std::cout << nBinsX << " " << nBinsY;
374 
375  std::vector<std::vector<int> > meReportSummaryMap(nBinsX, std::vector<int>(nBinsY));
376 
377  // for (int iBinX = 0; iBinX < nBinsX; iBinX++) {
378  // for (int iBinY = 0; iBinY < nBinsY; iBinY++) {
379  // meReportSummaryMap[iBinX][iBinY]
380  // = static_cast<int>(me->GetBinContent(iBinX + 1, iBinY + 1));
381  // }
382  // }
383 
384  if (m_verbose)
385  std::cout << "\nL1 systems: " << m_nrTrackObjects << " systems included\n"
386  << "\n Summary content size: " << (m_summaryContent.size()) << std::endl;
387 
388  for (unsigned int iTrackObj = 0; iTrackObj < m_nrTrackObjects; ++iTrackObj) {
389  if (m_verbose)
390  std::cout << std::setw(10) << m_trackLabel[iTrackObj]
391  << std::setw(10)
392  // << m_trackLabelExt[iTrackObj] << " \t" << m_trackDisable[iTrackObj]
393  << m_trackDisable[iTrackObj] << " \t" << std::setw(25) << " m_summaryContent[" << std::setw(2)
394  << iTrackObj << "] = " << meReportSummaryMap[0][iTrackObj] << std::endl;
395  }
396 
397  if (m_verbose)
398  std::cout << "\n L1 trigger objects: " << m_nrHitObjects << " objects included\n" << std::endl;
399 
400  for (unsigned int iMon = m_nrTrackObjects; iMon < m_nrTrackObjects + m_nrHitObjects; ++iMon) {
401  if (m_verbose)
402  std::cout << std::setw(20) << m_hitLabel[iMon - m_nrTrackObjects] << " \t"
403  << m_hitDisable[iMon - m_nrTrackObjects] << " \t" << std::setw(25) << " m_summaryContent["
404  << std::setw(2) << iMon << "] = \t" << m_summaryContent[iMon] << std::endl;
405  }
406 
407  if (m_verbose)
408  std::cout << std::endl;
409 
410  // quality tests
411 
412  if (m_verbose)
413  std::cout << "\nQuality test results as filled in "
414  << "\n " << m_monitorDir << "/EventInfo/reportSummaryContents\n"
415  << "\n Total number of quality tests: " << (m_meReportSummaryContent.size()) << "\n"
416  << std::endl;
417 
418  for (const auto itME : m_meReportSummaryContent) {
419  if (m_verbose)
420  std::cout << std::setw(50) << itME->getName() << " \t" << std::setw(25) << itME->getFloatValue() << std::endl;
421  }
422 
423  if (m_verbose)
424  std::cout << std::endl;
425 }
426 
428  if (m_verbose)
429  std::cout << "\nInside void L1TEMTFEventInfoClient::book" << std::endl;
430  std::string dirEventInfo = m_monitorDir + "/EventInfo";
431  if (m_verbose)
432  std::cout << dirEventInfo << std::endl;
433 
434  ibooker.setCurrentFolder(dirEventInfo);
435  if (m_verbose)
436  std::cout << "Ran ibooker.setCurrentFolder(dirEventInfo;" << std::endl;
437 
438  // ...and book it again
439  m_meReportSummary = ibooker.bookFloat("reportSummary");
440  if (m_verbose)
441  std::cout << "Ran m_meReportSummary = ibooker.bookFloat" << std::endl;
442 
443  // initialize reportSummary to 1
444 
445  if (m_meReportSummary) {
446  if (m_verbose)
447  std::cout << "Initializing reportSummary to 1" << std::endl;
449  if (m_verbose)
450  std::cout << "Ran m_meReportSummary->Fill(1);" << std::endl;
451  }
452 
453  // define float histograms for reportSummaryContents (one histogram per quality test),
454  // initialize them to zero
455  // initialize also m_summaryContent to dqm::qstatus::DISABLED
456 
457  ibooker.setCurrentFolder(dirEventInfo + "/reportSummaryContents");
458  if (m_verbose)
459  std::cout << "Ran ibooker.setCurrentFolder(dirEventInfo" << std::endl;
460  // general counters:
461  // iAllQTest: all quality tests for all systems and objects
462  // iAllMon: all monitored systems and objects
463  int iAllQTest = 0;
464  int iAllMon = 0;
465 
466  if (m_verbose)
467  std::cout << "m_nrTrackObjects = " << m_nrTrackObjects << std::endl;
468  for (unsigned int iMon = 0; iMon < m_nrTrackObjects; ++iMon) {
469  if (m_verbose)
470  std::cout << " * iMon = " << iMon << std::endl;
471 
473  if (m_verbose)
474  std::cout << "Ran m_summaryContent.push_back(dqm::qstatus::DISABLED);" << std::endl;
475 
476  const std::vector<std::string>& trackObjQtName = m_trackQualityTestName[iMon];
477  if (m_verbose)
478  std::cout << "Ran const std::vector<std::string>& trackObjQtName = m_trackQualityTestName[iMon];" << std::endl;
479 
480  for (const auto& itQtName : trackObjQtName) {
481  if (m_verbose)
482  std::cout << " - m_monitorDir = " << m_monitorDir << ", m_trackLabel[iMon] = " << m_trackLabel[iMon]
483  << ", (itQtName) = " << (itQtName) << std::endl;
484 
485  // Avoid error in ibooker.bookFloat(hStr))
486  std::string m_mon_mod = m_monitorDir;
487  std::replace(m_mon_mod.begin(), m_mon_mod.end(), '/', '_');
488 
489  const std::string hStr = m_mon_mod + "_L1Sys_" + m_trackLabel[iMon] + "_" + (itQtName);
490  if (m_verbose)
491  std::cout << " - " << hStr << std::endl;
492 
493  m_meReportSummaryContent.push_back(ibooker.bookFloat(hStr));
494  if (m_verbose)
495  std::cout << " - Ran m_meReportSummaryContent.push_back(ibooker.bookFloat(hStr));" << std::endl;
496  m_meReportSummaryContent[iAllQTest]->Fill(0.);
497  if (m_verbose)
498  std::cout << " - Ran m_meReportSummaryContent[iAllQTest]->Fill(0.);" << std::endl;
499 
500  iAllQTest++;
501  }
502 
503  iAllMon++;
504  }
505 
506  for (unsigned int iMon = 0; iMon < m_nrHitObjects; ++iMon) {
507  if (m_verbose)
508  std::cout << " * iMon = " << iMon << std::endl;
509 
511 
512  const std::vector<std::string>& objQtName = m_hitQualityTestName[iMon];
513 
514  for (const auto& itQtName : objQtName) {
515  // Avoid error in ibooker.bookFloat(hStr))
516  std::string m_mon_mod = m_monitorDir;
517  std::replace(m_mon_mod.begin(), m_mon_mod.end(), '/', '_');
518 
519  const std::string hStr = m_mon_mod + "_L1Obj_" + m_hitLabel[iMon] + "_" + (itQtName);
520  if (m_verbose)
521  std::cout << " - " << hStr << std::endl;
522 
523  m_meReportSummaryContent.push_back(ibooker.bookFloat(hStr));
524  if (m_verbose)
525  std::cout << " - Ran m_meReportSummaryContent.push_back(ibooker.bookFloat(hStr));" << std::endl;
526  m_meReportSummaryContent[iAllQTest]->Fill(0.);
527  if (m_verbose)
528  std::cout << " - Ran m_meReportSummaryContent[iAllQTest]->Fill(0.);" << std::endl;
529 
530  iAllQTest++;
531  }
532 
533  iAllMon++;
534  }
535 
536  // for Noisy Strips ====================================================================
537  for (unsigned int iMon = 0; iMon < m_nrNoisyStrip; ++iMon) {
539 
540  const std::vector<std::string>& objQtName = m_noisyQualityTestName[iMon];
541 
542  for (const auto& itQtName : objQtName) {
543  // Avoid error in ibooker.bookFloat(hStr))
544  std::string m_mon_mod = m_monitorDir;
545  std::replace(m_mon_mod.begin(), m_mon_mod.end(), '/', '_');
546 
547  const std::string hStr = m_mon_mod + "_L1Obj_" + m_noisyLabel[iMon] + "_" + (itQtName);
548  if (m_verbose)
549  std::cout << " - " << hStr << std::endl;
550 
551  m_meReportSummaryContent.push_back(ibooker.bookFloat(hStr));
552  m_meReportSummaryContent[iAllQTest]->Fill(0.);
553 
554  iAllQTest++;
555  }
556  iAllMon++;
557  }
558  // for Dead Strips ====================================================================
559  for (unsigned int iMon = 0; iMon < m_nrDeadStrip; ++iMon) {
561 
562  const std::vector<std::string>& objQtName = m_deadQualityTestName[iMon];
563 
564  for (const auto& itQtName : objQtName) {
565  // Avoid error in ibooker.bookFloat(hStr))
566  std::string m_mon_mod = m_monitorDir;
567  std::replace(m_mon_mod.begin(), m_mon_mod.end(), '/', '_');
568 
569  const std::string hStr = m_mon_mod + "_L1Obj_" + m_deadLabel[iMon] + "_" + (itQtName);
570  if (m_verbose)
571  std::cout << " - " << hStr << std::endl;
572 
573  m_meReportSummaryContent.push_back(ibooker.bookFloat(hStr));
574  m_meReportSummaryContent[iAllQTest]->Fill(0.);
575 
576  iAllQTest++;
577  }
578  iAllMon++;
579  }
580 
581  if (m_verbose)
582  std::cout << "Setting current folder to " << dirEventInfo << std::endl;
583  ibooker.setCurrentFolder(dirEventInfo);
584  if (m_verbose)
585  std::cout << "Ran ibooker.setCurrentFolder(dirEventInfo);" << std::endl;
586 
587  // define a histogram with two bins on X and maximum of m_nrTrackObjects, m_nrHitObjects on Y
589  int nBinsYStrip = std::max(m_nrNoisyStrip, m_nrDeadStrip);
590 
592  ibooker.book2D("reportSummaryMap_EMTF", "reportSummaryMap_EMTF", 2, 1, 3, nBinsY, 1, nBinsY + 1);
594  "reportSummaryMap_chamberStrip", "reportSummaryMap_chamberStrip", 2, 1, 3, nBinsYStrip, 1, nBinsYStrip + 1);
595 
596  if (m_monitorDir == "L1TEMU") {
597  m_meReportSummaryMap->setTitle("L1TEMU: L1 Emulator vs Data Report Summary Map");
598 
599  } else if (m_monitorDir == "L1T") {
600  m_meReportSummaryMap->setTitle("L1T: L1 Trigger Data Report Summary Map");
601  } else if (m_monitorDir == "L1T2016") {
602  m_meReportSummaryMap->setTitle("L1T2016: L1 Trigger Data Report Summary Map");
603  } else {
604  // do nothing
605  }
606 
609 
610  m_meReportSummaryMap->setBinLabel(1, "Noisy Check", 1);
611  m_meReportSummaryMap->setBinLabel(2, "Dead Check", 1);
612 
613  m_meReportSummaryMap_chamberStrip->setBinLabel(1, "Noisy Check", 1);
614  m_meReportSummaryMap_chamberStrip->setBinLabel(2, "Dead Check", 1);
615 
616  // for (int iBin = 0; iBin < nBinsY; ++iBin) {
617  // m_meReportSummaryMap->setBinLabel(iBin + 1, " ", 2); }
618 
619  m_meReportSummaryMap->setBinLabel(1, "Hit BX", 2);
620  m_meReportSummaryMap->setBinLabel(2, "Track BX", 2);
621  //m_meReportSummaryMap->setBinLabel(3, "Track Phi", 2);
622 
623  const std::vector<std::string> suffix_name = {"-4/2", "-4/1", "-3/2", "-3/1", "-2/2", "-2/1", "-1/3",
624  "-1/2", "-1/1b", "-1/1a", "+1/1a", "+1/1b", "+1/2", "+1/3",
625  "+2/1", "+2/2", "+3/1", "+3/2", "+4/1", "+4/2"};
626  for (int iBin = 0; iBin < nBinsYStrip; ++iBin) {
627  m_meReportSummaryMap_chamberStrip->setBinLabel(iBin + 1, "ChamberStrip " + suffix_name[iBin], 2);
628  }
629 }
630 
632  // initialize summary content, summary sum and ReportSummaryContent float histograms
633  // for all L1 systems and L1 objects
634 
635  if (m_verbose)
636  std::cout << "\nInside L1TEMTFEventInfoClient::readQtResults" << std::endl; // Extra printout - AWB 03.12.16
637 
638  for (std::vector<int>::iterator it = m_summaryContent.begin(); it != m_summaryContent.end(); ++it) {
639  (*it) = dqm::qstatus::DISABLED;
640  }
641 
642  m_summarySum = 0.;
643 
644  for (const auto& itME : m_meReportSummaryContent) {
645  itME->Fill(0.);
646  }
647 
648  // general counters:
649  // iAllQTest: all quality tests for all systems and objects
650  // iAllMon: all monitored systems and objects
651  int iAllQTest = 0;
652  int iAllMon = 0;
653 
654  // quality tests for all L1 systems
655 
656  for (unsigned int iTrackObj = 0; iTrackObj < m_nrTrackObjects; ++iTrackObj) {
657  // get the reports for each quality test
658 
659  const std::vector<std::string>& trackObjQtName = m_trackQualityTestName[iTrackObj];
660  const std::vector<std::string>& trackObjQtHist = m_trackQualityTestHist[iTrackObj];
661  const std::vector<unsigned int>& trackObjQtSummaryEnabled = m_trackQtSummaryEnabled[iTrackObj];
662 
663  // pro system counter for quality tests
664  int iTrackObjQTest = 0;
665 
666  for (const auto& itQtName : trackObjQtName) {
667  // get results, status and message
668 
669  if (m_verbose)
670  std::cout << " itQtName = " << (itQtName) << std::endl; // Extra printout - AWB 03.12.16
671 
672  MonitorElement* qHist = igetter.get(trackObjQtHist[iTrackObjQTest]);
673 
674  if (qHist) {
675  const std::vector<QReport*> qtVec = qHist->getQReports();
676 
677  // if (m_verbose) {
678  if (true) { // Force printout - AWB 03.12.16
679 
680  if (m_verbose)
681  std::cout << " - Number of quality tests"
682  // if (m_verbose) std::cout << "\nNumber of quality tests"
683  << " for histogram " << trackObjQtHist[iTrackObjQTest] << ": " << qtVec.size() << "\n"
684  << std::endl;
685  }
686 
687  const QReport* sysQReport = qHist->getQReport(itQtName);
688  if (sysQReport) {
689  const float trackObjQtResult = sysQReport->getQTresult();
690  const int trackObjQtStatus = sysQReport->getStatus();
691  const std::string& trackObjQtMessage = sysQReport->getMessage();
692 
693  if (m_verbose) {
694  std::cout << "\n"
695  << (itQtName) << " quality test:"
696  << "\n result: " << trackObjQtResult << "\n status: " << trackObjQtStatus
697  << "\n message: " << trackObjQtMessage << "\n"
698  << "\nFilling m_meReportSummaryContent[" << iAllQTest << "] with value " << trackObjQtResult
699  << "\n"
700  << std::endl;
701  }
702 
703  m_meReportSummaryContent[iAllQTest]->Fill(trackObjQtResult);
704 
705  // for the summary map, keep the highest status value ("ERROR") of all tests
706  // which are considered for the summary plot
707  if (trackObjQtSummaryEnabled[iTrackObjQTest]) {
708  if (trackObjQtStatus > m_summaryContent[iAllMon]) {
709  m_summaryContent[iAllMon] = trackObjQtStatus;
710  }
711 
712  m_summarySum += trackObjQtResult;
713  }
714 
715  } else {
716  // for the summary map, if the test was not found but it is assumed to be
717  // considered for the summary plot, set it to dqm::qstatus::INVALID
718 
719  int trackObjQtStatus = dqm::qstatus::INVALID;
720 
721  if (trackObjQtSummaryEnabled[iTrackObjQTest]) {
722  if (trackObjQtStatus > m_summaryContent[iAllMon]) {
723  m_summaryContent[iAllMon] = trackObjQtStatus;
724  }
725  }
726 
727  m_meReportSummaryContent[iAllQTest]->Fill(0.);
728 
729  if (m_verbose)
730  std::cout << "\n" << (itQtName) << " quality test not found\n" << std::endl;
731  }
732 
733  } else {
734  // for the summary map, if the histogram was not found but it is assumed
735  // to have a test be considered for the summary plot, set it to dqm::qstatus::INVALID
736 
737  int trackObjQtStatus = dqm::qstatus::INVALID;
738 
739  if (trackObjQtSummaryEnabled[iTrackObjQTest]) {
740  if (trackObjQtStatus > m_summaryContent[iAllMon]) {
741  m_summaryContent[iAllMon] = trackObjQtStatus;
742  }
743  }
744 
745  m_meReportSummaryContent[iAllQTest]->Fill(0.);
746 
747  if (m_verbose)
748  std::cout << "\nHistogram " << trackObjQtHist[iTrackObjQTest] << " not found\n" << std::endl;
749  }
750 
751  // increase counters for quality tests
752  iTrackObjQTest++;
753  iAllQTest++;
754  }
755 
756  iAllMon++;
757  }
758 
759  // quality tests for all L1 objects
760 
761  for (unsigned int iHitObj = 0; iHitObj < m_nrHitObjects; ++iHitObj) {
762  // get the reports for each quality test
763 
764  const std::vector<std::string>& hitObjQtName = m_hitQualityTestName[iHitObj];
765  const std::vector<std::string>& hitObjQtHist = m_hitQualityTestHist[iHitObj];
766  const std::vector<unsigned int>& hitObjQtSummaryEnabled = m_hitQtSummaryEnabled[iHitObj];
767 
768  // pro object counter for quality tests
769  int iHitObjQTest = 0;
770 
771  for (const auto& itQtName : hitObjQtName) {
772  // get results, status and message
773 
774  MonitorElement* qHist = igetter.get(hitObjQtHist[iHitObjQTest]);
775 
776  if (qHist) {
777  const std::vector<QReport*> qtVec = qHist->getQReports();
778 
779  if (m_verbose)
780  std::cout << "\nNumber of quality tests "
781  << " for histogram " << hitObjQtHist[iHitObjQTest] << ": " << qtVec.size() << "\n"
782  << std::endl;
783 
784  const QReport* objQReport = qHist->getQReport(itQtName);
785  if (objQReport) {
786  const float hitObjQtResult = objQReport->getQTresult();
787  const int hitObjQtStatus = objQReport->getStatus();
788  const std::string& hitObjQtMessage = objQReport->getMessage();
789 
790  if (m_verbose) {
791  std::cout << "\n"
792  << (itQtName) << " quality test:"
793  << "\n result: " << hitObjQtResult << "\n status: " << hitObjQtStatus
794  << "\n message: " << hitObjQtMessage << "\n"
795  << "\nFilling m_meReportSummaryContent[" << iAllQTest << "] with value " << hitObjQtResult << "\n"
796  << std::endl;
797  }
798 
799  m_meReportSummaryContent[iAllQTest]->Fill(hitObjQtResult);
800 
801  // for the summary map, keep the highest status value ("ERROR") of all tests
802  // which are considered for the summary plot
803  if (hitObjQtSummaryEnabled[iHitObjQTest]) {
804  if (hitObjQtStatus > m_summaryContent[iAllMon]) {
805  m_summaryContent[iAllMon] = hitObjQtStatus;
806  }
807 
808  m_summarySum += hitObjQtResult;
809  }
810 
811  } else {
812  // for the summary map, if the test was not found but it is assumed to be
813  // considered for the summary plot, set it to dqm::qstatus::INVALID
814 
815  int hitObjQtStatus = dqm::qstatus::INVALID;
816 
817  if (hitObjQtSummaryEnabled[iHitObjQTest]) {
818  if (hitObjQtStatus > m_summaryContent[iAllMon]) {
819  m_summaryContent[iAllMon] = hitObjQtStatus;
820  }
821  }
822 
823  m_meReportSummaryContent[iAllQTest]->Fill(0.);
824 
825  if (m_verbose)
826  std::cout << "\n" << (itQtName) << " quality test not found\n" << std::endl;
827  }
828 
829  } else {
830  // for the summary map, if the histogram was not found but it is assumed
831  // to have a test be considered for the summary plot, set it to dqm::qstatus::INVALID
832 
833  int hitObjQtStatus = dqm::qstatus::INVALID;
834 
835  if (hitObjQtSummaryEnabled[iHitObjQTest]) {
836  if (hitObjQtStatus > m_summaryContent[iAllMon]) {
837  m_summaryContent[iAllMon] = hitObjQtStatus;
838  }
839  }
840 
841  m_meReportSummaryContent[iAllQTest]->Fill(0.);
842 
843  if (m_verbose)
844  std::cout << "\nHistogram " << hitObjQtHist[iHitObjQTest] << " not found\n" << std::endl;
845  }
846  // increase counters for quality tests
847  iHitObjQTest++;
848  iAllQTest++;
849  }
850  iAllMon++;
851  }
852 
853  // quality tests for all L1 Noisy Strip =================================================================
854 
855  for (unsigned int iNoisyStrp = 0; iNoisyStrp < m_nrNoisyStrip; ++iNoisyStrp) {
856  // get the reports for each quality test
857  const std::vector<std::string>& noisyStrpQtName = m_noisyQualityTestName[iNoisyStrp];
858  const std::vector<std::string>& noisyStrpQtHist = m_noisyQualityTestHist[iNoisyStrp];
859  const std::vector<unsigned int>& noisyStrpQtSummaryEnabled = m_noisyQtSummaryEnabled[iNoisyStrp];
860 
861  // pro object counter for quality tests
862  int iNoisyStrpQTest = 0;
863 
864  for (const auto& itQtName : noisyStrpQtName) {
865  // get results, status and message
866  MonitorElement* qHist = igetter.get(noisyStrpQtHist[iNoisyStrpQTest]);
867 
868  if (qHist) {
869  const std::vector<QReport*> qtVec = qHist->getQReports();
870 
871  if (m_verbose)
872  std::cout << "\nNumber of quality tests "
873  << " for histogram " << noisyStrpQtHist[iNoisyStrpQTest] << ": " << qtVec.size() << "\n"
874  << std::endl;
875 
876  const QReport* objQReport = qHist->getQReport(itQtName);
877  if (objQReport) {
878  const float noisyStrpQtResult = objQReport->getQTresult();
879  const int noisyStrpQtStatus = objQReport->getStatus();
880  const std::string& noisyStrpQtMessage = objQReport->getMessage();
881 
882  if (m_verbose) {
883  std::cout << "\n"
884  << (itQtName) << " quality test:"
885  << "\n result: " << noisyStrpQtResult << "\n status: " << noisyStrpQtStatus
886  << "\n message: " << noisyStrpQtMessage << "\n"
887  << "\nFilling m_meReportSummaryContent[" << iAllQTest << "] with value " << noisyStrpQtResult
888  << "\n"
889  << std::endl;
890  }
891 
892  m_meReportSummaryContent[iAllQTest]->Fill(noisyStrpQtResult);
893 
894  // for the summary map, keep the highest status value ("ERROR") of all tests
895  // which are considered for the summary plot
896  if (noisyStrpQtSummaryEnabled[iNoisyStrpQTest]) {
897  if (noisyStrpQtStatus > m_summaryContent[iAllMon]) {
898  m_summaryContent[iAllMon] = noisyStrpQtStatus;
899  }
900  m_summarySum += noisyStrpQtResult;
901  }
902 
903  } else {
904  // for the summary map, if the test was not found but it is assumed to be
905  // considered for the summary plot, set it to dqm::qstatus::INVALID
906 
907  int noisyStrpQtStatus = dqm::qstatus::INVALID;
908 
909  if (noisyStrpQtSummaryEnabled[iNoisyStrpQTest]) {
910  if (noisyStrpQtStatus > m_summaryContent[iAllMon]) {
911  m_summaryContent[iAllMon] = noisyStrpQtStatus;
912  }
913  }
914 
915  m_meReportSummaryContent[iAllQTest]->Fill(0.);
916 
917  if (m_verbose)
918  std::cout << "\n" << (itQtName) << " quality test not found\n" << std::endl;
919  }
920 
921  } else {
922  // for the summary map, if the histogram was not found but it is assumed
923  // to have a test be considered for the summary plot, set it to dqm::qstatus::INVALID
924 
925  int noisyStrpQtStatus = dqm::qstatus::INVALID;
926 
927  if (noisyStrpQtSummaryEnabled[iNoisyStrpQTest]) {
928  if (noisyStrpQtStatus > m_summaryContent[iAllMon]) {
929  m_summaryContent[iAllMon] = noisyStrpQtStatus;
930  }
931  }
932 
933  m_meReportSummaryContent[iAllQTest]->Fill(0.);
934 
935  if (m_verbose)
936  std::cout << "\nHistogram " << noisyStrpQtHist[iNoisyStrpQTest] << " not found\n" << std::endl;
937  }
938  // increase counters for quality tests
939  iNoisyStrpQTest++;
940  iAllQTest++;
941  }
942  iAllMon++;
943  }
944  // quality tests for all L1 Dead Strip =================================================================
945 
946  for (unsigned int iDeadStrp = 0; iDeadStrp < m_nrDeadStrip; ++iDeadStrp) {
947  // get the reports for each quality test
948  const std::vector<std::string>& deadStrpQtName = m_deadQualityTestName[iDeadStrp];
949  const std::vector<std::string>& deadStrpQtHist = m_deadQualityTestHist[iDeadStrp];
950  const std::vector<unsigned int>& deadStrpQtSummaryEnabled = m_deadQtSummaryEnabled[iDeadStrp];
951 
952  // pro object counter for quality tests
953  int iDeadStrpQTest = 0;
954 
955  for (const auto& itQtName : deadStrpQtName) {
956  // get results, status and message
957 
958  MonitorElement* qHist = igetter.get(deadStrpQtHist[iDeadStrpQTest]);
959 
960  if (qHist) {
961  const std::vector<QReport*> qtVec = qHist->getQReports();
962 
963  if (m_verbose)
964  std::cout << "\nNumber of quality tests "
965  << " for histogram " << deadStrpQtHist[iDeadStrpQTest] << ": " << qtVec.size() << "\n"
966  << std::endl;
967 
968  const QReport* objQReport = qHist->getQReport(itQtName);
969  if (objQReport) {
970  const float deadStrpQtResult = objQReport->getQTresult();
971  const int deadStrpQtStatus = objQReport->getStatus();
972  const std::string& deadStrpQtMessage = objQReport->getMessage();
973 
974  if (m_verbose) {
975  std::cout << "\n"
976  << (itQtName) << " quality test:"
977  << "\n result: " << deadStrpQtResult << "\n status: " << deadStrpQtStatus
978  << "\n message: " << deadStrpQtMessage << "\n"
979  << "\nFilling m_meReportSummaryContent[" << iAllQTest << "] with value " << deadStrpQtResult
980  << "\n"
981  << std::endl;
982  }
983 
984  m_meReportSummaryContent[iAllQTest]->Fill(deadStrpQtResult);
985 
986  // for the summary map, keep the highest status value ("ERROR") of all tests
987  // which are considered for the summary plot
988  if (deadStrpQtSummaryEnabled[iDeadStrpQTest]) {
989  if (deadStrpQtStatus > m_summaryContent[iAllMon]) {
990  m_summaryContent[iAllMon] = deadStrpQtStatus;
991  }
992  m_summarySum += deadStrpQtResult;
993  }
994 
995  } else {
996  // for the summary map, if the test was not found but it is assumed to be
997  // considered for the summary plot, set it to dqm::qstatus::INVALID
998 
999  int deadStrpQtStatus = dqm::qstatus::INVALID;
1000 
1001  if (deadStrpQtSummaryEnabled[iDeadStrpQTest]) {
1002  if (deadStrpQtStatus > m_summaryContent[iAllMon]) {
1003  m_summaryContent[iAllMon] = deadStrpQtStatus;
1004  }
1005  }
1006 
1007  m_meReportSummaryContent[iAllQTest]->Fill(0.);
1008 
1009  if (m_verbose)
1010  std::cout << "\n" << (itQtName) << " quality test not found\n" << std::endl;
1011  }
1012 
1013  } else {
1014  // for the summary map, if the histogram was not found but it is assumed
1015  // to have a test be considered for the summary plot, set it to dqm::qstatus::INVALID
1016 
1017  int deadStrpQtStatus = dqm::qstatus::INVALID;
1018 
1019  if (deadStrpQtSummaryEnabled[iDeadStrpQTest]) {
1020  if (deadStrpQtStatus > m_summaryContent[iAllMon]) {
1021  m_summaryContent[iAllMon] = deadStrpQtStatus;
1022  }
1023  }
1024 
1025  m_meReportSummaryContent[iAllQTest]->Fill(0.);
1026 
1027  if (m_verbose)
1028  std::cout << "\nHistogram " << deadStrpQtHist[iDeadStrpQTest] << " not found\n" << std::endl;
1029  }
1030 
1031  // increase counters for quality tests
1032  iDeadStrpQTest++;
1033  iAllQTest++;
1034  }
1035  iAllMon++;
1036  }
1037 
1038  // reportSummary value
1040  if (m_meReportSummary) {
1042  }
1043 
1044  // fill the ReportSummaryMap for L1 systems (bin 1 on X)
1045  for (unsigned int iTrackObj = 0; iTrackObj < m_nrTrackObjects; ++iTrackObj) {
1046  double summCont = static_cast<double>(m_summaryContent[iTrackObj]);
1047  m_meReportSummaryMap->setBinContent(1, iTrackObj + 1, summCont);
1048  }
1049  // fill the ReportSummaryMap for L1 objects (bin 2 on X)
1050  for (unsigned int iMon = m_nrTrackObjects; iMon < m_nrTrackObjects + m_nrHitObjects; ++iMon) {
1051  double summCont = static_cast<double>(m_summaryContent[iMon]);
1052  m_meReportSummaryMap->setBinContent(2, iMon - m_nrTrackObjects + 1, summCont);
1053  }
1054 
1055  // fill the ReportSummaryMap_chamberStrip for L1 Noisy Strip (bin 1 on X)
1056  for (unsigned int iNoisyStrp = m_nrTrackObjects + m_nrHitObjects;
1058  ++iNoisyStrp) {
1059  double summCont = static_cast<double>(m_summaryContent[iNoisyStrp]);
1061  }
1062  // fill the ReportSummaryMap_chamberStrip for L1 objects (bin 2 on X)
1063  for (unsigned int iDeadStrp = m_nrTrackObjects + m_nrHitObjects + m_nrNoisyStrip;
1065  ++iDeadStrp) {
1066  double summCont = static_cast<double>(m_summaryContent[iDeadStrp]);
1068  2, iDeadStrp - m_nrTrackObjects - m_nrHitObjects - m_nrNoisyStrip + 1, summCont);
1069  }
1070 }
void readQtResults(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter)
read quality test results
std::vector< std::vector< std::string > > m_trackQualityTestName
virtual void setTitle(const std::string &title)
set (ie. change) histogram/profile title
std::vector< std::string > m_disableDeadStrip
MonitorElement * bookFloat(TString const &name, FUNC onbooking=NOOP())
Definition: DQMStore.h:80
std::vector< edm::ParameterSet > m_deadStrip
void book(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter)
book histograms
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
std::vector< std::string > m_disableTrackObjects
bool m_verbose
input parameters
float getQTresult() const
get test result i.e. prob value
std::vector< MonitorElementData::QReport * > getQReports() const
get map of QReports
void dqmEndLuminosityBlock(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter, const edm::LuminosityBlock &, const edm::EventSetup &) override
std::vector< std::string > m_noisyLabel
size_t m_nrHitObjects
number of L1 trigger objects
std::vector< std::vector< std::string > > m_deadQualityTestHist
std::vector< std::vector< unsigned int > > m_deadQtSummaryEnabled
std::vector< int > m_deadDisable
def replace(string, replacements)
std::vector< std::string > m_deadLabel
void dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter) override
end job
std::vector< std::vector< std::string > > m_hitQualityTestName
void initialize()
private methods
void Fill(long long x)
std::vector< edm::ParameterSet > m_hitObjects
MonitorElement * m_meReportSummary
a summary report
std::vector< std::vector< std::string > > m_noisyQualityTestName
static const int INVALID
std::vector< std::vector< unsigned int > > m_trackQtSummaryEnabled
const MonitorElementData::QReport * getQReport(const std::string &qtname) const
get QReport corresponding to <qtname> (null pointer if QReport does not exist)
std::vector< std::vector< std::string > > m_trackQualityTestHist
std::vector< std::vector< std::string > > m_hitQualityTestHist
std::vector< MonitorElement * > m_meReportSummaryContent
monitor elements to report content for all quality tests
static const int DISABLED
size_t m_nrDeadStrip
number of L1 trigger dead strips
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
std::vector< std::vector< unsigned int > > m_hitQtSummaryEnabled
~L1TEMTFEventInfoClient() override
Destructor.
void dumpContentMonitorElements(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter)
dump the content of the monitoring elements defined in this module
std::vector< std::string > m_disableHitObjects
MonitorElement * m_meReportSummaryMap_chamberStrip
std::vector< std::string > m_trackLabel
const std::string & getMessage() const
get message attached to test
std::vector< int > m_trackDisable
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
std::vector< std::vector< std::string > > m_noisyQualityTestHist
MonitorElement * m_meReportSummaryMap
report summary map
std::vector< std::vector< std::string > > m_deadQualityTestName
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:212
std::vector< std::string > m_hitLabel
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:712
L1TEMTFEventInfoClient(const edm::ParameterSet &)
Constructor.
std::vector< edm::ParameterSet > m_trackObjects
const std::string & getName() const
get name of ME
HLT enums.
Float_t m_reportSummary
summary report
std::vector< std::string > m_disableNoisyStrip
std::vector< int > m_noisyDisable
std::vector< int > m_summaryContent
int getStatus() const
get test status
std::vector< std::vector< unsigned int > > m_noisyQtSummaryEnabled
size_t m_nrTrackObjects
number of L1 trigger systems
std::vector< int > m_hitDisable
size_t m_nrNoisyStrip
number of L1 trigger noisy strips
std::vector< edm::ParameterSet > m_noisyStrip
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)