CMS 3D CMS Logo

DTLocalTriggerBaseTask.cc
Go to the documentation of this file.
1 /*
2  * \file DTLocalTriggerBaseTask.cc
3  *
4  * \author C. Battilana - CIEMAT
5  *
6 */
7 
9 
10 // Framework
12 
13 // DT DQM
15 
16 // DT trigger
18 
19 // Geometry
24 
25 //Root
26 #include "TH1.h"
27 #include "TAxis.h"
28 
29 #include <sstream>
30 #include <iostream>
31 #include <fstream>
32 
33 using namespace edm;
34 using namespace std;
35 
37 public:
38  DTTPGCompareUnit() { m_qual = -1; }
40 
41  void setTM(int qual, int bx) {
42  m_qual = qual;
43  m_BX = bx;
44  }
45 
46  int qualTM() const { return m_qual; }
47 
48 private:
49  int m_qual;
50  int m_BX;
51 };
52 
54  : m_nEvents(0), m_nLumis(0), m_trigGeomUtils(nullptr), muonGeomToken_(esConsumes<edm::Transition::BeginRun>()) {
55  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask") << "[DTLocalTriggerBaseTask]: Constructor" << endl;
56 
57  m_tpMode = ps.getUntrackedParameter<bool>("testPulseMode");
58  m_detailedAnalysis = ps.getUntrackedParameter<bool>("detailedAnalysis");
59 
60  m_targetBXTM = ps.getUntrackedParameter<int>("targetBXTM");
61  m_bestAccRange = ps.getUntrackedParameter<int>("bestTrigAccRange");
62 
63  m_processTM = ps.getUntrackedParameter<bool>("processTM");
64  m_processAB7 = ps.getUntrackedParameter<bool>("processAB7");
65 
66  m_tm_phiIn_Token = consumes<L1MuDTChambPhContainer>(ps.getUntrackedParameter<InputTag>("inputTagTMphIn"));
67  m_tm_phiOut_Token = consumes<L1MuDTChambPhContainer>(ps.getUntrackedParameter<InputTag>("inputTagTMphOut"));
68  m_tm_theta_Token = consumes<L1MuDTChambThContainer>(ps.getUntrackedParameter<InputTag>("inputTagTMth"));
69  m_ab7_phi_Token = consumes<L1Phase2MuDTPhContainer>(ps.getUntrackedParameter<InputTag>("inputTagAB7"));
70 
71  if (m_processTM)
72  m_types.push_back("TM");
73 
74  if (m_processAB7)
75  m_types.push_back("AB7");
76 
77  if (m_tpMode) {
78  topFolder("TM") = "DT/11-LocalTriggerTP-TM/";
79  topFolder("AB7") = "DT/12-LocalTriggerTP-SliceTest/";
80  } else {
81  topFolder("TM") = "DT/03-LocalTrigger-TM/";
82  topFolder("AB7") = "DT/04-LocalTrigger-SliceTest/";
83  }
84 
85  m_params = ps;
86 }
87 
89  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
90  << "[DTLocalTriggerBaseTask]: analyzed " << m_nEvents << " events" << endl;
91  if (m_trigGeomUtils)
92  delete m_trigGeomUtils;
93 }
94 
96  edm::Run const& iRun,
97  edm::EventSetup const& context) {
98  ibooker.setCurrentFolder("DT/EventInfo/Counters");
99  m_nEventMonitor = ibooker.bookFloat("nProcessedEventsTrigger");
100  for (int wh = -2; wh < 3; ++wh) {
101  for (int stat = 1; stat < 5; ++stat) {
102  for (int sect = 1; sect < 13; ++sect) {
103  bookHistos(ibooker, DTChamberId(wh, stat, sect));
104  }
105  }
106  }
107 }
108 
110  m_nEventsInLS = 0;
111  m_nLumis++;
112  int resetCycle = m_params.getUntrackedParameter<int>("ResetCycle");
113 
114  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
115  << "[DTLocalTriggerBaseTask]: Begin of LS transition" << endl;
116 
117  if (m_nLumis % resetCycle == 0)
118  for (auto& histosInChamb : m_chamberHistos)
119  for (auto& histo : histosInChamb.second)
120  histo.second->Reset();
121 }
122 
124  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask") << "[DTLocalTriggerBaseTask]: End of LS transition" << endl;
125 
126  for (auto& trendHisto : m_trendHistos)
127  trendHisto.second->updateTimeSlot(lumiSeg.luminosityBlock(), m_nEventsInLS);
128 }
129 
131  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask") << "[DTLocalTriggerBaseTask]: BeginRun" << endl;
132 
133  geom = &context.getData(muonGeomToken_);
135 }
136 
138  m_nEvents++;
139  m_nEventsInLS++;
141 
142  m_compMapIn.clear();
143  m_compMapOut.clear();
144 
145  Handle<L1MuDTChambPhContainer> phiInTrigsTM;
146  Handle<L1MuDTChambPhContainer> phiOutTrigsTM;
147  Handle<L1MuDTChambThContainer> thetaTrigsTM;
149 
150  if (m_processTM) {
151  e.getByToken(m_tm_phiIn_Token, phiInTrigsTM);
152  e.getByToken(m_tm_phiOut_Token, phiOutTrigsTM);
153  e.getByToken(m_tm_theta_Token, thetaTrigsTM);
154 
155  if (phiInTrigsTM.isValid() && phiOutTrigsTM.isValid() && thetaTrigsTM.isValid()) {
156  runTMAnalysis(phiInTrigsTM->getContainer(), phiOutTrigsTM->getContainer(), thetaTrigsTM->getContainer());
157  } else {
158  LogVerbatim("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
159  << "[DTLocalTriggerBaseTask]: one or more TM tokens not valid!" << endl;
160  return;
161  }
162  }
163 
164  if (m_processAB7) {
165  e.getByToken(m_ab7_phi_Token, phiTrigsAB7);
166 
167  if (phiTrigsAB7.isValid()) {
168  runAB7Analysis(phiTrigsAB7->getContainer());
169  } else {
170  LogVerbatim("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
171  << "[DTLocalTriggerBaseTask]: AB7 token not valid!" << endl;
172  }
173  }
174 }
175 
177  uint32_t rawId = dtCh.rawId();
178 
179  stringstream wheel;
180  wheel << dtCh.wheel();
181  stringstream station;
182  station << dtCh.station();
183  stringstream sector;
184  sector << dtCh.sector();
185 
186  map<string, int> minBX;
187  map<string, int> maxBX;
188 
189  minBX["TM"] = m_params.getUntrackedParameter<int>("minBXTM");
190  maxBX["TM"] = m_params.getUntrackedParameter<int>("maxBXTM");
191  minBX["AB7"] = m_params.getUntrackedParameter<int>("minBXAB7");
192  maxBX["AB7"] = m_params.getUntrackedParameter<int>("maxBXAB7");
193 
194  string chTag = "_W" + wheel.str() + "_Sec" + sector.str() + "_St" + station.str();
195  string labelInOut = "";
196 
197  for (const auto& type : m_types) {
198  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
199  << "[DTLocalTriggerBaseTask]: booking histos for " << topFolder(type) << "Wheel" << wheel.str() << "/Sector"
200  << sector.str() << "/Station" << station.str() << endl;
201 
202  if (type == "AB7" && (dtCh.wheel() != 2 || dtCh.sector() != 12))
203  continue;
204 
205  vector<string> plotLabels;
206  vector<string> folderLabels;
207 
208  if (type == "TM") {
209  plotLabels.push_back("_In");
210  plotLabels.push_back("_Out");
211  folderLabels.push_back("/LocalTriggerPhiIn");
212  folderLabels.push_back("/LocalTriggerPhiOut");
213  }
214  if (type == "AB7") {
215  plotLabels.push_back("");
216  folderLabels.push_back("/LocalTriggerPhi");
217  }
218 
219  for (size_t iLabel = 0; iLabel < plotLabels.size(); ++iLabel) {
220  // Book Phi View Related Plots
221 
222  auto plotLabel = plotLabels.at(iLabel);
223  ibooker.setCurrentFolder(topFolder(type) + "Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" +
224  station.str() + folderLabels.at(iLabel));
225 
226  int nQualities = type == "AB7" ? 11 : 7;
227 
228  string histoTag = type + "_BXvsQual" + plotLabel;
229  m_chamberHistos[rawId][histoTag] = ibooker.book2D(histoTag + chTag,
230  "BX vs trigger quality",
231  nQualities,
232  -0.5,
233  nQualities - 0.5,
234  (int)(maxBX[type] - minBX[type] + 1),
235  minBX[type] - .5,
236  maxBX[type] + .5);
237  if (type == "AB7")
238  setQLabelsPh2((m_chamberHistos[rawId])[histoTag], 1);
239  else
240  setQLabels((m_chamberHistos[rawId])[histoTag], 1);
241 
242  if (!m_tpMode && !(type == "AB7")) {
243  histoTag = type + "_BestQual" + plotLabel;
244  m_chamberHistos[rawId][histoTag] =
245  ibooker.book1D(histoTag + chTag, "Trigger quality of best primitives", 7, -0.5, 6.5);
246  setQLabels(m_chamberHistos[rawId][histoTag], 1);
247 
248  histoTag = type + "_Flag1stvsQual" + plotLabel;
249  m_chamberHistos[dtCh.rawId()][histoTag] =
250  ibooker.book2D(histoTag + chTag, "1st/2nd trig flag vs quality", 7, -0.5, 6.5, 2, -0.5, 1.5);
251  setQLabels(m_chamberHistos[rawId][histoTag], 1);
252 
253  histoTag = type + "_FlagUpDownvsQual" + plotLabel;
254  m_chamberHistos[dtCh.rawId()][histoTag] =
255  ibooker.book2D(histoTag + chTag, "Up/Down trig flag vs quality", 7, -0.5, 6.5, 2, -0.5, 1.5);
256  setQLabels(m_chamberHistos[rawId][histoTag], 1);
257  }
258 
259  if (type == "TM") {
260  float minPh, maxPh;
261  int nBinsPh;
262  m_trigGeomUtils->phiRange(dtCh, minPh, maxPh, nBinsPh);
263 
264  histoTag = type + "_QualvsPhirad" + plotLabel;
265  m_chamberHistos[rawId][histoTag] =
266  ibooker.book2D(histoTag + chTag, "Trigger quality vs local position", nBinsPh, minPh, maxPh, 7, -0.5, 6.5);
267  setQLabels(m_chamberHistos[rawId][histoTag], 2);
268 
269  if (plotLabel == "_Out" && !m_tpMode) {
270  histoTag = type + "_RPCBitvsQual" + plotLabel;
271  m_chamberHistos[rawId][histoTag] =
272  ibooker.book2D(histoTag + chTag, "RPC bit vs DT trigger quality", 9, -1.5, 7.5, 3, -0.5, 2.5);
273  //setQLabels((m_chamberHistos[dtCh.rawId()])[histoTag], 2);
274  }
275 
276  if (m_detailedAnalysis && !m_tpMode) {
277  histoTag = type + "_QualvsPhibend" + plotLabel;
278  m_chamberHistos[rawId][histoTag] =
279  ibooker.book2D(histoTag + chTag, "Trigger quality vs local direction", 200, -40., 40., 7, -0.5, 6.5);
280  setQLabels((m_chamberHistos[dtCh.rawId()])[histoTag], 2);
281  }
282  }
283  }
284 
285  // Book Theta View Related Plots
286  ibooker.setCurrentFolder(topFolder(type) + "Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" +
287  station.str() + "/LocalTriggerTheta");
288 
289  string histoTag = "";
290  if (type == "TM" && dtCh.station() != 4) {
291  histoTag = type + "_PositionvsBX";
292  m_chamberHistos[rawId][histoTag] = ibooker.book2D(histoTag + chTag,
293  "Theta trigger position vs BX",
294  (int)(maxBX[type] - minBX[type] + 1),
295  minBX[type] - .5,
296  maxBX[type] + .5,
297  7,
298  -0.5,
299  6.5);
300  histoTag = type + "_PositionvsQual";
301  m_chamberHistos[rawId][histoTag] =
302  ibooker.book2D(histoTag + chTag, "Theta trigger position vs quality", 3, 0.5, 3.5, 7, -0.5, 6.5);
304  histoTag = type + "_ThetaBXvsQual";
305  m_chamberHistos[rawId][histoTag] = ibooker.book2D(histoTag + chTag,
306  "BX vs trigger quality",
307  3,
308  0.5,
309  3.5,
310  (int)(maxBX[type] - minBX[type] + 1),
311  minBX[type] - .5,
312  maxBX[type] + .5);
314  }
315  }
316 }
317 
318 void DTLocalTriggerBaseTask::runTMAnalysis(std::vector<L1MuDTChambPhDigi> const* phInTrigs,
319  std::vector<L1MuDTChambPhDigi> const* phOutTrigs,
320  std::vector<L1MuDTChambThDigi> const* thTrigs) {
321  vector<L1MuDTChambPhDigi>::const_iterator iph = phInTrigs->begin();
322  vector<L1MuDTChambPhDigi>::const_iterator iphe = phInTrigs->end();
323 
324  for (; iph != iphe; ++iph) {
325  int wh = iph->whNum();
326  int sec = iph->scNum() + 1; // B(O)MTF->DT Convention
327  int st = iph->stNum();
328  int qual = iph->code();
329  int is1st = iph->Ts2Tag() ? 1 : 0;
330  int bx = iph->bxNum() - is1st;
331  int updown = iph->UpDownTag();
332 
333  if (qual < 0 || qual > 6)
334  continue; // Check that quality is in a valid range
335 
336  DTChamberId dtChId(wh, st, sec);
337  uint32_t rawId = dtChId.rawId();
338 
339  float pos = m_trigGeomUtils->trigPos(&(*iph));
340  float dir = m_trigGeomUtils->trigDir(&(*iph));
341 
342  if (abs(bx - m_targetBXTM) <= m_bestAccRange && m_compMapIn[rawId].qualTM() <= qual)
343  m_compMapIn[rawId].setTM(qual, bx);
344 
345  map<string, MonitorElement*>& innerME = m_chamberHistos[rawId];
346  if (m_tpMode) {
347  innerME["TM_BXvsQual_In"]->Fill(qual, bx); // SM BX vs Qual Phi view (1st tracks)
348  innerME["TM_QualvsPhirad_In"]->Fill(pos, qual); // SM Qual vs radial angle Phi view
349  } else {
350  innerME["TM_BXvsQual_In"]->Fill(qual, bx); // SM BX vs Qual Phi view (1st tracks)
351  innerME["TM_Flag1stvsQual_In"]->Fill(qual, is1st); // SM Qual 1st/2nd track flag Phi view
352  innerME["TM_FlagUpDownvsQual_In"]->Fill(qual, updown); // SM Qual Up/Down track flag Phi view
353  if (!is1st)
354  innerME["TM_QualvsPhirad_In"]->Fill(pos, qual); // SM Qual vs radial angle Phi view ONLY for 1st tracks
355  if (m_detailedAnalysis) {
356  innerME["TM_QualvsPhibend_In"]->Fill(dir, qual); // SM Qual vs bending Phi view
357  }
358  }
359  }
360 
361  iph = phOutTrigs->begin();
362  iphe = phOutTrigs->end();
363 
364  for (; iph != iphe; ++iph) {
365  int wh = iph->whNum();
366  int sec = iph->scNum() + 1; // B(O)MTF->DT Convention
367  int st = iph->stNum();
368  int qual = iph->code();
369  int is1st = iph->Ts2Tag() ? 1 : 0;
370  int rpcBit = iph->RpcBit();
371  int bx = iph->bxNum() - is1st;
372  int updown = iph->UpDownTag();
373  if (qual < 0 || qual > 6)
374  continue; // Check that quality is in a valid range
375 
376  DTChamberId dtChId(wh, st, sec);
377  uint32_t rawId = dtChId.rawId();
378 
379  float pos = m_trigGeomUtils->trigPos(&(*iph));
380  float dir = m_trigGeomUtils->trigDir(&(*iph));
381 
382  if (abs(bx - m_targetBXTM) <= m_bestAccRange && m_compMapOut[rawId].qualTM() <= qual)
383  m_compMapOut[rawId].setTM(qual, bx);
384 
385  map<string, MonitorElement*>& innerME = m_chamberHistos[rawId];
386  if (m_tpMode) {
387  innerME["TM_BXvsQual_Out"]->Fill(qual, bx); // SM BX vs Qual Phi view (1st tracks)
388  innerME["TM_QualvsPhirad_Out"]->Fill(pos, qual); // SM Qual vs radial angle Phi view
389  } else {
390  innerME["TM_BXvsQual_Out"]->Fill(qual, bx); // SM BX vs Qual Phi view (1st tracks)
391  innerME["TM_RPCBitvsQual_Out"]->Fill(qual, rpcBit); // SM RPC bitvs Qual Phi view
392  innerME["TM_Flag1stvsQual_Out"]->Fill(qual, is1st); // SM Qual 1st/2nd track flag Phi view
393  innerME["TM_FlagUpDownvsQual_Out"]->Fill(qual, updown); // SM Qual Up/Down track flag Phi view
394 
395  if (!is1st)
396  innerME["TM_QualvsPhirad_Out"]->Fill(pos, qual); // SM Qual vs radial angle Phi view ONLY for 1st tracks
397  if (m_detailedAnalysis) {
398  innerME["TM_QualvsPhibend_Out"]->Fill(dir, qual); // SM Qual vs bending Phi view
399  }
400  }
401  }
402 
403  vector<L1MuDTChambThDigi>::const_iterator ith = thTrigs->begin();
404  vector<L1MuDTChambThDigi>::const_iterator ithe = thTrigs->end();
405 
406  for (; ith != ithe; ++ith) {
407  int wh = ith->whNum();
408  int sec = ith->scNum() + 1; // B(O)MTF -> DT Convention
409  int st = ith->stNum();
410  int bx = ith->bxNum();
411 
412  int thcode[7];
413 
414  for (int pos = 0; pos < 7; pos++) {
415  thcode[pos] = ith->code(pos);
416  if (ith->position(pos) == 0 && ith->quality(pos) == 1)
417  thcode[pos] = 3;
418  }
419 
420  DTChamberId dtChId(wh, st, sec);
421  uint32_t rawId = dtChId.rawId();
422 
423  map<string, MonitorElement*>& innerME = m_chamberHistos[rawId];
424 
425  for (int pos = 0; pos < 7; pos++)
426  if (thcode[pos] > 0) { //Fired
427  innerME["TM_PositionvsBX"]->Fill(bx, pos); // SM BX vs Position Theta view
428  innerME["TM_PositionvsQual"]->Fill(thcode[pos], pos); //code = pos + qual; so 0, 1, 2 for 0, L, H resp.
429  innerME["TM_ThetaBXvsQual"]->Fill(thcode[pos], bx); //code = pos + qual; so 0, 1, 2 for 0, L, H resp.
430  }
431  }
432  // Fill Quality plots with best TM triggers (phi view In)
433  if (!m_tpMode) {
434  for (auto& comp : m_compMapIn) {
435  int bestQual = comp.second.qualTM();
436  if (bestQual > -1)
437  m_chamberHistos[comp.first]["TM_BestQual_In"]->Fill(bestQual); // SM Best Qual Trigger Phi view
438  }
439  }
440 
441  // Fill Quality plots with best TM triggers (phi view Out)
442  if (!m_tpMode) {
443  for (auto& comp : m_compMapOut) {
444  int bestQual = comp.second.qualTM();
445  if (bestQual > -1)
446  m_chamberHistos[comp.first]["TM_BestQual_Out"]->Fill(bestQual); // SM Best Qual Trigger Phi view
447  }
448  }
449 }
450 
451 void DTLocalTriggerBaseTask::runAB7Analysis(std::vector<L1Phase2MuDTPhDigi> const* phTrigs) {
452  vector<L1Phase2MuDTPhDigi>::const_iterator iph = phTrigs->begin();
453  vector<L1Phase2MuDTPhDigi>::const_iterator iphe = phTrigs->end();
454  for (; iph != iphe; ++iph) {
455  int wh = iph->whNum();
456  int sec = iph->scNum() + 1; // B(O)MTF->DT Convention
457  int st = iph->stNum();
458  int qual = iph->quality();
459  int bx = iph->bxNum();
460 
461  DTChamberId dtChId(wh, st, sec);
462  uint32_t rawId = dtChId.rawId();
463 
464  map<string, MonitorElement*>& innerME = m_chamberHistos[rawId];
465  innerME["AB7_BXvsQual"]->Fill(qual, bx);
466  }
467 }
468 
470  TH1* histo = me->getTH1();
471  if (!histo)
472  return;
473 
474  TAxis* axis = nullptr;
475  if (iaxis == 1) {
476  axis = histo->GetXaxis();
477  } else if (iaxis == 2) {
478  axis = histo->GetYaxis();
479  }
480  if (!axis)
481  return;
482 
483  string labels[7] = {"LI", "LO", "HI", "HO", "LL", "HL", "HH"};
484  int istart = axis->GetXmin() < -1 ? 2 : 1;
485  for (int i = 0; i < 7; i++) {
486  axis->SetBinLabel(i + istart, labels[i].c_str());
487  }
488 }
489 
491  TH1* histo = me->getTH1();
492  if (!histo)
493  return;
494 
495  TAxis* axis = nullptr;
496  if (iaxis == 1) {
497  axis = histo->GetXaxis();
498  } else if (iaxis == 2) {
499  axis = histo->GetYaxis();
500  }
501  if (!axis)
502  return;
503 
504  string labels[3] = {"L", "H", "err"};
505  int istart = axis->GetXmin() < -1 ? 2 : 1;
506  for (int i = 0; i < 3; i++) {
507  axis->SetBinLabel(i + istart, labels[i].c_str());
508  }
509 }
510 
512  TH1* histo = me->getTH1();
513  if (!histo)
514  return;
515 
516  TAxis* axis = nullptr;
517  if (iaxis == 1) {
518  axis = histo->GetXaxis();
519  } else if (iaxis == 2) {
520  axis = histo->GetYaxis();
521  }
522  if (!axis)
523  return;
524 
525  string labels[11] = {"", "L only", "L multiple", "H only", "H multiple", "3+2", "LL", "4+2", "HL", "HH", ""};
526  int istart = axis->GetXmin() < -1 ? 2 : 1;
527  for (int i = 0; i < 11; i++) {
528  axis->SetBinLabel(i + istart, labels[i].c_str());
529  }
530 }
531 
532 // Local Variables:
533 // show-trailing-whitespace: t
534 // truncate-lines: t
535 // End:
Log< level::Info, true > LogVerbatim
int station() const
Return the station number.
Definition: DTChamberId.h:42
edm::EDGetTokenT< L1MuDTChambPhContainer > m_tm_phiOut_Token
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
MonitorElement * bookFloat(TString const &name, FUNC onbooking=NOOP())
Definition: DQMStore.h:80
void runAB7Analysis(std::vector< L1Phase2MuDTPhDigi > const *phTrigs)
Run analysis on Phase2 readout for SliceTest.
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
Beginrun.
void bookHistos(DQMStore::IBooker &, const DTChamberId &chamb)
Book the histograms.
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
float trigDir(const L1MuDTChambPhDigi *trig)
Return local direction (trigger RF) for a given trigger primitive.
DTTrigGeomUtils * m_trigGeomUtils
void setTM(int qual, int bx)
#define LogTrace(id)
The_Container const * getContainer() const
T getUntrackedParameter(std::string const &, T const &) const
void Fill(long long x)
std::vector< std::string > m_types
std::map< uint32_t, DTTPGCompareUnit > m_compMapIn
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context) override
Perform trend plot operations.
~DTLocalTriggerBaseTask() override
Destructor.
void analyze(const edm::Event &e, const edm::EventSetup &c) override
Analyze.
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Transition
Definition: Transition.h:12
std::map< uint32_t, std::map< std::string, MonitorElement * > > m_chamberHistos
void runTMAnalysis(std::vector< L1MuDTChambPhDigi > const *phInTrigs, std::vector< L1MuDTChambPhDigi > const *phOutTrigs, std::vector< L1MuDTChambThDigi > const *thTrigs)
Run analysis on TM data.
void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context) override
To reset the MEs.
void phiRange(const DTChamberId &id, float &min, float &max, int &nbins, float step=15)
Compute phi range in local chamber coordinates.
std::string & topFolder(std::string const &type)
Get the Top folder (different between Physics and TP and TM)
void setQLabelsTheta(MonitorElement *me, short int iaxis)
Phi_Container const * getContainer() const
edm::EDGetTokenT< L1MuDTChambThContainer > m_tm_theta_Token
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
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
Segment_Container const * getContainer() const
edm::EDGetTokenT< L1Phase2MuDTPhContainer > m_ab7_phi_Token
std::map< uint32_t, DTTimeEvolutionHisto * > m_trendHistos
bool isValid() const
Definition: HandleBase.h:70
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
edm::EDGetTokenT< L1MuDTChambPhContainer > m_tm_phiIn_Token
HLT enums.
int sector() const
Definition: DTChamberId.h:49
void setQLabelsPh2(MonitorElement *me, short int iaxis)
void setQLabels(MonitorElement *me, short int iaxis)
Set Quality labels.
std::map< uint32_t, DTTPGCompareUnit > m_compMapOut
std::tuple< std::string, std::string, std::string > plotLabels
edm::ESGetToken< DTGeometry, MuonGeometryRecord > muonGeomToken_
float trigPos(const L1MuDTChambPhDigi *trig)
Return local position (trigger RF) for a given trigger primitive.
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
DTLocalTriggerBaseTask(const edm::ParameterSet &ps)
Constructor.
LuminosityBlockNumber_t luminosityBlock() const
Definition: Run.h:45