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
25 
26 //Root
27 #include "TH1.h"
28 #include "TAxis.h"
29 
30 #include <sstream>
31 #include <iostream>
32 #include <fstream>
33 
34 using namespace edm;
35 using namespace std;
36 
38 public:
39  DTTPGCompareUnit() { theQual = -1; }
41 
42  void setTM(int qual, int bx) {
43  theQual = qual;
44  theBX = bx;
45  }
46 
47  int qualTM() const { return theQual; }
48 
49 private:
50  int theQual;
51  int theBX;
52 };
53 
55  : nEvents(0), nLumis(0), theTrigGeomUtils(nullptr) {
56  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask") << "[DTLocalTriggerBaseTask]: Constructor" << endl;
57 
58  tpMode = ps.getUntrackedParameter<bool>("testPulseMode");
59  detailedAnalysis = ps.getUntrackedParameter<bool>("detailedAnalysis");
60 
61  targetBXTM = ps.getUntrackedParameter<int>("targetBXTM");
62  bestAccRange = ps.getUntrackedParameter<int>("bestTrigAccRange");
63 
64  processTM = ps.getUntrackedParameter<bool>("processTM");
65 
66  tm_phiIn_Token_ = consumes<L1MuDTChambPhContainer>(ps.getUntrackedParameter<InputTag>("inputTagTMphIn"));
67  tm_phiOut_Token_ = consumes<L1MuDTChambPhContainer>(ps.getUntrackedParameter<InputTag>("inputTagTMphOut"));
68  tm_theta_Token_ = consumes<L1MuDTChambThContainer>(ps.getUntrackedParameter<InputTag>("inputTagTMth"));
69 
70  if (processTM)
71  theTypes.push_back("TM");
72 
73  if (tpMode) {
74  topFolder("TM") = "DT/11-LocalTriggerTP-TM/";
75  } else {
76  topFolder("TM") = "DT/03-LocalTrigger-TM/";
77  }
78 
79  theParams = ps;
80 }
81 
83  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
84  << "[DTLocalTriggerBaseTask]: analyzed " << nEvents << " events" << endl;
85  if (theTrigGeomUtils) {
86  delete theTrigGeomUtils;
87  }
88 }
89 
91  edm::Run const& iRun,
92  edm::EventSetup const& context) {
93  ibooker.setCurrentFolder("DT/EventInfo/Counters");
94  nEventMonitor = ibooker.bookFloat("nProcessedEventsTrigger");
95  for (int wh = -2; wh < 3; ++wh) {
96  for (int stat = 1; stat < 5; ++stat) {
97  for (int sect = 1; sect < 13; ++sect) {
98  bookHistos(ibooker, DTChamberId(wh, stat, sect));
99  }
100  }
101  }
102 }
103 
105  nEventsInLS = 0;
106  nLumis++;
107  int resetCycle = theParams.getUntrackedParameter<int>("ResetCycle");
108 
109  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
110  << "[DTLocalTriggerBaseTask]: Begin of LS transition" << endl;
111 
112  if (nLumis % resetCycle == 0) {
113  map<uint32_t, map<string, MonitorElement*> >::const_iterator chambIt = chamberHistos.begin();
114  map<uint32_t, map<string, MonitorElement*> >::const_iterator chambEnd = chamberHistos.end();
115  for (; chambIt != chambEnd; ++chambIt) {
116  map<string, MonitorElement*>::const_iterator histoIt = chambIt->second.begin();
117  map<string, MonitorElement*>::const_iterator histoEnd = chambIt->second.end();
118  for (; histoIt != histoEnd; ++histoIt) {
119  histoIt->second->Reset();
120  }
121  }
122  }
123 }
124 
126  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask") << "[DTLocalTriggerBaseTask]: End of LS transition" << endl;
127 
128  map<uint32_t, DTTimeEvolutionHisto*>::const_iterator chambIt = trendHistos.begin();
129  map<uint32_t, DTTimeEvolutionHisto*>::const_iterator chambEnd = trendHistos.end();
130  for (; chambIt != chambEnd; ++chambIt) {
131  cout << "updating time slot in DTLocalTriggerBaseTask" << endl;
132  chambIt->second->updateTimeSlot(lumiSeg.luminosityBlock(), nEventsInLS);
133  cout << "updated time slot in DTLocalTriggerBaseTask" << endl;
134  }
135 }
136 
138  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask") << "[DTLocalTriggerBaseTask]: BeginRun" << endl;
139 
140  ESHandle<DTGeometry> theGeom;
141  context.get<MuonGeometryRecord>().get(theGeom);
142  theTrigGeomUtils = new DTTrigGeomUtils(theGeom);
143 }
144 
146  nEvents++;
147  nEventsInLS++;
149 
150  theCompMapIn.clear();
151  theCompMapOut.clear();
152 
153  Handle<L1MuDTChambPhContainer> phiInTrigsTM;
154  Handle<L1MuDTChambPhContainer> phiOutTrigsTM;
155  Handle<L1MuDTChambThContainer> thetaTrigsTM;
156 
157  if (processTM) {
159 
160  e.getByToken(tm_phiIn_Token_, phiInTrigsTM);
161  e.getByToken(tm_phiOut_Token_, phiOutTrigsTM);
162  e.getByToken(tm_theta_Token_, thetaTrigsTM);
163 
164  if (phiInTrigsTM.isValid() && phiOutTrigsTM.isValid() && thetaTrigsTM.isValid()) {
165  runTMAnalysis(phiInTrigsTM->getContainer(), phiOutTrigsTM->getContainer(), thetaTrigsTM->getContainer());
166  } else {
167  LogVerbatim("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
168  << "[DTLocalTriggerBaseTask]: one or more TM handles for Input Tag " << inputTagTM << " not found!" << endl;
169  return;
170  }
171  }
172 }
173 
175  uint32_t rawId = dtCh.rawId();
176 
177  stringstream wheel;
178  wheel << dtCh.wheel();
179  stringstream station;
180  station << dtCh.station();
181  stringstream sector;
182  sector << dtCh.sector();
183 
184  map<string, int> minBX;
185  map<string, int> maxBX;
186 
187  minBX["TM"] = theParams.getUntrackedParameter<int>("minBXTM");
188  maxBX["TM"] = theParams.getUntrackedParameter<int>("maxBXTM");
189 
190  string chTag = "_W" + wheel.str() + "_Sec" + sector.str() + "_St" + station.str();
191  string labelInOut = "";
192 
193  vector<string>::const_iterator typeIt = theTypes.begin();
194  vector<string>::const_iterator typeEnd = theTypes.end();
195 
196  for (; typeIt != typeEnd; ++typeIt) {
197  LogTrace("DTDQM|DTMonitorModule|DTLocalTriggerBaseTask")
198  << "[DTLocalTriggerBaseTask]: booking histos for " << topFolder((*typeIt)) << "Wheel" << wheel.str()
199  << "/Sector" << sector.str() << "/Station" << station.str() << endl;
200 
201  for (int InOut = 0; InOut < 2; InOut++) {
202  // Book Phi View Related Plots
203 
204  if (InOut == 0) {
205  ibooker.setCurrentFolder(topFolder(*typeIt) + "Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" +
206  station.str() + "/LocalTriggerPhiIn");
207  labelInOut = "_In";
208  } else if (InOut == 1) {
209  ibooker.setCurrentFolder(topFolder(*typeIt) + "Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" +
210  station.str() + "/LocalTriggerPhiOut");
211  labelInOut = "_Out";
212  }
213 
214  string histoTag = (*typeIt) + "_BXvsQual" + labelInOut;
215  chamberHistos[rawId][histoTag] = ibooker.book2D(histoTag + chTag,
216  "BX vs trigger quality",
217  7,
218  -0.5,
219  6.5,
220  (int)(maxBX[(*typeIt)] - minBX[*typeIt] + 1),
221  minBX[*typeIt] - .5,
222  maxBX[*typeIt] + .5);
223  setQLabels((chamberHistos[rawId])[histoTag], 1);
224 
225  if (!tpMode) {
226  histoTag = (*typeIt) + "_BestQual" + labelInOut;
227  chamberHistos[rawId][histoTag] =
228  ibooker.book1D(histoTag + chTag, "Trigger quality of best primitives", 7, -0.5, 6.5);
229  setQLabels(chamberHistos[rawId][histoTag], 1);
230 
231  histoTag = (*typeIt) + "_Flag1stvsQual" + labelInOut;
232  chamberHistos[dtCh.rawId()][histoTag] =
233  ibooker.book2D(histoTag + chTag, "1st/2nd trig flag vs quality", 7, -0.5, 6.5, 2, -0.5, 1.5);
234  setQLabels(chamberHistos[rawId][histoTag], 1);
235 
236  histoTag = (*typeIt) + "_FlagUpDownvsQual" + labelInOut;
237  chamberHistos[dtCh.rawId()][histoTag] =
238  ibooker.book2D(histoTag + chTag, "Up/Down trig flag vs quality", 7, -0.5, 6.5, 2, -0.5, 1.5);
239  setQLabels(chamberHistos[rawId][histoTag], 1);
240  }
241 
242  if (*typeIt == "TM") {
243  float minPh, maxPh;
244  int nBinsPh;
245  theTrigGeomUtils->phiRange(dtCh, minPh, maxPh, nBinsPh);
246 
247  histoTag = (*typeIt) + "_QualvsPhirad" + labelInOut;
248  chamberHistos[rawId][histoTag] =
249  ibooker.book2D(histoTag + chTag, "Trigger quality vs local position", nBinsPh, minPh, maxPh, 7, -0.5, 6.5);
250  setQLabels(chamberHistos[rawId][histoTag], 2);
251 
252  if (detailedAnalysis && !tpMode) {
253  histoTag = (*typeIt) + "_QualvsPhibend" + labelInOut;
254  chamberHistos[rawId][histoTag] =
255  ibooker.book2D(histoTag + chTag, "Trigger quality vs local direction", 200, -40., 40., 7, -0.5, 6.5);
256  setQLabels((chamberHistos[dtCh.rawId()])[histoTag], 2);
257  }
258  }
259  } //InOut loop
260 
261  // Book Theta View Related Plots
262  ibooker.setCurrentFolder(topFolder(*typeIt) + "Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" +
263  station.str() + "/LocalTriggerTheta");
264 
265  string histoTag = "";
266  if ((*typeIt) == "TM" && dtCh.station() != 4) {
267  histoTag = (*typeIt) + "_PositionvsBX";
268  chamberHistos[rawId][histoTag] = ibooker.book2D(histoTag + chTag,
269  "Theta trigger position vs BX",
270  (int)(maxBX[(*typeIt)] - minBX[*typeIt] + 1),
271  minBX[*typeIt] - .5,
272  maxBX[*typeIt] + .5,
273  7,
274  -0.5,
275  6.5);
276  histoTag = (*typeIt) + "_PositionvsQual";
277  chamberHistos[rawId][histoTag] =
278  ibooker.book2D(histoTag + chTag, "Theta trigger position vs quality", 2, 0.5, 2.5, 7, -0.5, 6.5);
279  setQLabelsTheta(chamberHistos[rawId][histoTag], 1);
280  histoTag = (*typeIt) + "_ThetaBXvsQual";
281  chamberHistos[rawId][histoTag] = ibooker.book2D(histoTag + chTag,
282  "BX vs trigger quality",
283  2,
284  0.5,
285  2.5,
286  (int)(maxBX[(*typeIt)] - minBX[*typeIt] + 1),
287  minBX[*typeIt] - .5,
288  maxBX[*typeIt] + .5);
289  setQLabelsTheta(chamberHistos[rawId][histoTag], 1);
290  // histoTag = (*typeIt) + "_ThetaBestQual";
291  // chamberHistos[rawId][histoTag] = ibooker.book1D(histoTag+chTag,
292  // "Trigger quality of best primitives (theta)",2,0.5,2.5); // 0 = not fired, 1 = L, 2 = H
293  // setQLabelsTheta(chamberHistos[rawId][histoTag],1);
294  } else {
295  if (dtCh.station() != 4) {
296  histoTag = (*typeIt) + "_ThetaBXvsQual";
297  chamberHistos[rawId][histoTag] = ibooker.book2D(histoTag + chTag,
298  "BX vs trigger quality",
299  7,
300  -0.5,
301  6.5,
302  (int)(maxBX[(*typeIt)] - minBX[*typeIt] + 1),
303  minBX[*typeIt] - .5,
304  maxBX[*typeIt] + .5);
305  setQLabels((chamberHistos[dtCh.rawId()])[histoTag], 1);
306 
307  histoTag = (*typeIt) + "_ThetaBestQual";
308  chamberHistos[rawId][histoTag] =
309  ibooker.book1D(histoTag + chTag, "Trigger quality of best primitives (theta)", 7, -0.5, 6.5);
310  setQLabels((chamberHistos[dtCh.rawId()])[histoTag], 1);
311  }
312  }
313  }
314 }
315 
316 void DTLocalTriggerBaseTask::runTMAnalysis(std::vector<L1MuDTChambPhDigi> const* phInTrigs,
317  std::vector<L1MuDTChambPhDigi> const* phOutTrigs,
318  std::vector<L1MuDTChambThDigi> const* thTrigs) {
319  vector<L1MuDTChambPhDigi>::const_iterator iph = phInTrigs->begin();
320  vector<L1MuDTChambPhDigi>::const_iterator iphe = phInTrigs->end();
321 
322  for (; iph != iphe; ++iph) {
323  int wh = iph->whNum();
324  int sec = iph->scNum() + 1; // DTTF->DT Convention
325  int st = iph->stNum();
326  int qual = iph->code();
327  int is1st = iph->Ts2Tag() ? 1 : 0;
328  int bx = iph->bxNum() - is1st;
329  int updown = iph->UpDownTag();
330 
331  if (qual < 0 || qual > 6)
332  continue; // Check that quality is in a valid range
333 
334  DTChamberId dtChId(wh, st, sec);
335  uint32_t rawId = dtChId.rawId();
336 
337  float pos = theTrigGeomUtils->trigPos(&(*iph));
338  float dir = theTrigGeomUtils->trigDir(&(*iph));
339 
340  if (abs(bx - targetBXTM) <= bestAccRange && theCompMapIn[rawId].qualTM() <= qual)
341  theCompMapIn[rawId].setTM(qual, bx);
342 
343  map<string, MonitorElement*>& innerME = chamberHistos[rawId];
344  if (tpMode) {
345  innerME["TM_BXvsQual_In"]->Fill(qual, bx); // SM BX vs Qual Phi view (1st tracks)
346  innerME["TM_QualvsPhirad_In"]->Fill(pos, qual); // SM Qual vs radial angle Phi view
347  } else {
348  innerME["TM_BXvsQual_In"]->Fill(qual, bx); // SM BX vs Qual Phi view (1st tracks)
349  innerME["TM_Flag1stvsQual_In"]->Fill(qual, is1st); // SM Qual 1st/2nd track flag Phi view
350  innerME["TM_FlagUpDownvsQual_In"]->Fill(qual, updown); // SM Qual Up/Down track flag Phi view
351  if (!is1st)
352  innerME["TM_QualvsPhirad_In"]->Fill(pos, qual); // SM Qual vs radial angle Phi view ONLY for 1st tracks
353  if (detailedAnalysis) {
354  innerME["TM_QualvsPhibend_In"]->Fill(dir, qual); // SM Qual vs bending Phi view
355  }
356  }
357  }
358 
359  iph = phOutTrigs->begin();
360  iphe = phOutTrigs->end();
361 
362  for (; iph != iphe; ++iph) {
363  int wh = iph->whNum();
364  int sec = iph->scNum() + 1; // DTTF->DT Convention
365  int st = iph->stNum();
366  int qual = iph->code();
367  int is1st = iph->Ts2Tag() ? 1 : 0;
368  int bx = iph->bxNum() - is1st;
369  int updown = iph->UpDownTag();
370  if (qual < 0 || qual > 6)
371  continue; // Check that quality is in a valid range
372 
373  DTChamberId dtChId(wh, st, sec);
374  uint32_t rawId = dtChId.rawId();
375 
376  float pos = theTrigGeomUtils->trigPos(&(*iph));
377  float dir = theTrigGeomUtils->trigDir(&(*iph));
378 
379  if (abs(bx - targetBXTM) <= bestAccRange && theCompMapOut[rawId].qualTM() <= qual)
380  theCompMapOut[rawId].setTM(qual, bx);
381 
382  map<string, MonitorElement*>& innerME = chamberHistos[rawId];
383  if (tpMode) {
384  innerME["TM_BXvsQual_Out"]->Fill(qual, bx); // SM BX vs Qual Phi view (1st tracks)
385  innerME["TM_QualvsPhirad_Out"]->Fill(pos, qual); // SM Qual vs radial angle Phi view
386  } else {
387  innerME["TM_BXvsQual_Out"]->Fill(qual, bx); // SM BX vs Qual Phi view (1st tracks)
388  innerME["TM_Flag1stvsQual_Out"]->Fill(qual, is1st); // SM Qual 1st/2nd track flag Phi view
389  innerME["TM_FlagUpDownvsQual_Out"]->Fill(qual, updown); // SM Qual Up/Down track flag Phi view
390 
391  if (!is1st)
392  innerME["TM_QualvsPhirad_Out"]->Fill(pos, qual); // SM Qual vs radial angle Phi view ONLY for 1st tracks
393  if (detailedAnalysis) {
394  innerME["TM_QualvsPhibend_Out"]->Fill(dir, qual); // SM Qual vs bending Phi view
395  }
396  }
397  }
398 
399  vector<L1MuDTChambThDigi>::const_iterator ith = thTrigs->begin();
400  vector<L1MuDTChambThDigi>::const_iterator ithe = thTrigs->end();
401 
402  for (; ith != ithe; ++ith) {
403  int wh = ith->whNum();
404  int sec = ith->scNum() + 1; // DTTF -> DT Convention
405  int st = ith->stNum();
406  int bx = ith->bxNum();
407 
408  int thcode[7];
409 
410  for (int pos = 0; pos < 7; pos++)
411  thcode[pos] = ith->code(pos);
412 
413  DTChamberId dtChId(wh, st, sec);
414  uint32_t rawId = dtChId.rawId();
415 
416  map<string, MonitorElement*>& innerME = chamberHistos[rawId];
417 
418  for (int pos = 0; pos < 7; pos++)
419  if (thcode[pos] > 0) { //Fired
420  innerME["TM_PositionvsBX"]->Fill(bx, pos); // SM BX vs Position Theta view
421  innerME["TM_PositionvsQual"]->Fill(thcode[pos], pos); //code = pos + qual; so 0, 1, 2 for 0, L, H resp.
422  innerME["TM_ThetaBXvsQual"]->Fill(thcode[pos], bx); //code = pos + qual; so 0, 1, 2 for 0, L, H resp.
423  }
424  }
425  // Fill Quality plots with best TM triggers (phi view In)
426  if (!tpMode) {
427  map<uint32_t, DTTPGCompareUnit>::const_iterator compIt = theCompMapIn.begin();
428  map<uint32_t, DTTPGCompareUnit>::const_iterator compEnd = theCompMapIn.end();
429  for (; compIt != compEnd; ++compIt) {
430  int bestQual = compIt->second.qualTM();
431  if (bestQual > -1)
432  chamberHistos[compIt->first]["TM_BestQual_In"]->Fill(bestQual); // SM Best Qual Trigger Phi view
433  }
434  }
435 
436  // Fill Quality plots with best TM triggers (phi view Out)
437  if (!tpMode) {
438  map<uint32_t, DTTPGCompareUnit>::const_iterator compIt = theCompMapOut.begin();
439  map<uint32_t, DTTPGCompareUnit>::const_iterator compEnd = theCompMapOut.end();
440  for (; compIt != compEnd; ++compIt) {
441  int bestQual = compIt->second.qualTM();
442  if (bestQual > -1)
443  chamberHistos[compIt->first]["TM_BestQual_Out"]->Fill(bestQual); // SM Best Qual Trigger Phi view
444  }
445  }
446 }
447 
449  TH1* histo = me->getTH1();
450  if (!histo)
451  return;
452 
453  TAxis* axis = nullptr;
454  if (iaxis == 1) {
455  axis = histo->GetXaxis();
456  } else if (iaxis == 2) {
457  axis = histo->GetYaxis();
458  }
459  if (!axis)
460  return;
461 
462  string labels[7] = {"LI", "LO", "HI", "HO", "LL", "HL", "HH"};
463  int istart = axis->GetXmin() < -1 ? 2 : 1;
464  for (int i = 0; i < 7; i++) {
465  axis->SetBinLabel(i + istart, labels[i].c_str());
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[2] = {"L", "H"};
484  int istart = axis->GetXmin() < -1 ? 2 : 1;
485  for (int i = 0; i < 2; i++) {
486  axis->SetBinLabel(i + istart, labels[i].c_str());
487  }
488 }
489 // Local Variables:
490 // show-trailing-whitespace: t
491 // truncate-lines: t
492 // End:
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
The_Container const * getContainer() const
T getUntrackedParameter(std::string const &, T const &) const
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
Beginrun.
std::map< uint32_t, DTTimeEvolutionHisto * > trendHistos
void bookHistos(DQMStore::IBooker &, const DTChamberId &chamb)
Book the histograms.
MonitorElement * bookFloat(TString const &name)
Definition: DQMStore.cc:233
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
float trigDir(const L1MuDTChambPhDigi *trig)
Return local direction (trigger RF) for a given trigger primitive.
#define nullptr
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
void setTM(int qual, int bx)
std::vector< std::string > theTypes
std::map< uint32_t, std::map< std::string, MonitorElement * > > chamberHistos
LuminosityBlockNumber_t luminosityBlock() const
void Fill(long long x)
DTTrigGeomUtils * theTrigGeomUtils
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.
edm::EDGetTokenT< L1MuDTChambThContainer > tm_theta_Token_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void runTMAnalysis(std::vector< L1MuDTChambPhDigi > const *phInTrigs, std::vector< L1MuDTChambPhDigi > const *phOutTrigs, std::vector< L1MuDTChambThDigi > const *thTrigs)
Run analysis on TM data.
bool isValid() const
Definition: HandleBase.h:70
void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context) override
To reset the MEs.
#define LogTrace(id)
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)
std::map< uint32_t, DTTPGCompareUnit > theCompMapIn
Phi_Container const * getContainer() const
HLT enums.
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Definition: DQMStore.cc:266
int sector() const
Definition: DTChamberId.h:49
void setQLabels(MonitorElement *me, short int iaxis)
Set Quality labels.
edm::EDGetTokenT< L1MuDTChambPhContainer > tm_phiIn_Token_
T get() const
Definition: EventSetup.h:73
float trigPos(const L1MuDTChambPhDigi *trig)
Return local position (trigger RF) for a given trigger primitive.
int station() const
Return the station number.
Definition: DTChamberId.h:42
UInt_t nEvents
Definition: hcalCalib.cc:41
edm::EDGetTokenT< L1MuDTChambPhContainer > tm_phiOut_Token_
DTLocalTriggerBaseTask(const edm::ParameterSet &ps)
Constructor.
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
std::map< uint32_t, DTTPGCompareUnit > theCompMapOut
Definition: Run.h:45