CMS 3D CMS Logo

L1TGT.cc
Go to the documentation of this file.
1 
14 
17 
19  : gtSource_L1GT_(consumes<L1GlobalTriggerReadoutRecord>(ps.getParameter<edm::InputTag>("gtSource"))),
20  gtSource_L1MuGMT_(consumes<L1MuGMTReadoutCollection>(ps.getParameter<edm::InputTag>("gtSource"))),
21  gtEvmSource_(consumes<L1GlobalTriggerEvmReadoutRecord>(ps.getParameter<edm::InputTag>("gtEvmSource"))),
22  m_runInEventLoop(ps.getUntrackedParameter<bool>("runInEventLoop", false)),
23  m_runInEndLumi(ps.getUntrackedParameter<bool>("runInEndLumi", false)),
24  verbose_(ps.getUntrackedParameter<bool>("verbose", false)),
25  m_nrEvJob(0),
26  m_nrEvRun(0),
27  preGps_(0ULL),
28  preOrb_(0ULL) {
29  m_histFolder = ps.getUntrackedParameter<std::string>("HistFolder", "L1T/L1TGT");
30  l1gtTrigmenuToken_ = esConsumes<edm::Transition::BeginRun>();
31 }
32 
34  // empty
35 }
36 
37 void L1TGT::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const& evSetup) {
39 
40  // book histograms
41  const int TotalNrBinsLs = 1000;
42  const double totalNrBinsLs = static_cast<double>(TotalNrBinsLs);
43 
45 
46  algo_bits = ibooker.book1D("algo_bits", "GT algorithm trigger bits", 128, -0.5, 127.5);
47  algo_bits->setAxisTitle("Algorithm trigger bits", 1);
48 
50  ibooker.book2D("algo_bits_corr", "GT algorithm trigger bit correlation", 128, -0.5, 127.5, 128, -0.5, 127.5);
51  algo_bits_corr->setAxisTitle("Algorithm trigger bits", 1);
52  algo_bits_corr->setAxisTitle("Algorithm trigger bits", 2);
53 
54  tt_bits = ibooker.book1D("tt_bits", "GT technical trigger bits", 64, -0.5, 63.5);
55  tt_bits->setAxisTitle("Technical trigger bits", 1);
56 
57  tt_bits_corr = ibooker.book2D("tt_bits_corr", "GT technical trigger bit correlation", 64, -0.5, 63.5, 64, -0.5, 63.5);
58  tt_bits_corr->setAxisTitle("Technical trigger bits", 1);
59  tt_bits_corr->setAxisTitle("Technical trigger bits", 2);
60 
61  algo_tt_bits_corr = ibooker.book2D(
62  "algo_tt_bits_corr", "GT algorithm - technical trigger bit correlation", 128, -0.5, 127.5, 64, -0.5, 63.5);
63  algo_tt_bits_corr->setAxisTitle("Algorithm trigger bits", 1);
64  algo_tt_bits_corr->setAxisTitle("Technical trigger bits", 2);
65 
66  algo_bits_lumi = ibooker.book2D(
67  "algo_bits_lumi", "GT algorithm trigger bit rate per LS", TotalNrBinsLs, 0., totalNrBinsLs, 128, -0.5, 127.5);
68  algo_bits_lumi->setAxisTitle("Luminosity segment", 1);
69  algo_bits_lumi->setAxisTitle("Algorithm trigger bits", 2);
70 
71  tt_bits_lumi = ibooker.book2D(
72  "tt_bits_lumi", "GT technical trigger bit rate per LS", TotalNrBinsLs, 0., totalNrBinsLs, 64, -0.5, 63.5);
73  tt_bits_lumi->setAxisTitle("Luminosity segment", 1);
74  tt_bits_lumi->setAxisTitle("Technical trigger bits", 2);
75 
76  event_type = ibooker.book1D("event_type", "GT event type", 10, -0.5, 9.5);
77  event_type->setAxisTitle("Event type", 1);
78  event_type->setBinLabel(2, "Physics", 1);
79  event_type->setBinLabel(3, "Calibration", 1);
80  event_type->setBinLabel(4, "Random", 1);
81  event_type->setBinLabel(6, "Traced", 1);
82  event_type->setBinLabel(7, "Test", 1);
83  event_type->setBinLabel(8, "Error", 1);
84 
85  event_number = ibooker.book1D("event_number", "GT event number (from last resync)", 100, 0., 50000.);
86  event_number->setAxisTitle("Event number", 1);
87 
88  event_lumi = ibooker.bookProfile(
89  "event_lumi", "GT event number (from last resync) vs LS", TotalNrBinsLs, 0., totalNrBinsLs, 100, -0.1, 1.e15, "s");
90  event_lumi->setAxisTitle("Luminosity segment", 1);
91  event_lumi->setAxisTitle("Event number", 2);
92 
93  trigger_number = ibooker.book1D("trigger_number", "GT trigger number (from start run)", 100, 0., 50000.);
94  trigger_number->setAxisTitle("Trigger number", 1);
95 
96  trigger_lumi = ibooker.bookProfile("trigger_lumi",
97  "GT trigger number (from start run) vs LS",
98  TotalNrBinsLs,
99  0.,
100  totalNrBinsLs,
101  100,
102  -0.1,
103  1.e15,
104  "s");
105  trigger_lumi->setAxisTitle("Luminosity segment", 1);
106  trigger_lumi->setAxisTitle("Trigger number", 2);
107 
109  "evnum_trignum_lumi", "GT event/trigger number ratio vs LS", TotalNrBinsLs, 0., totalNrBinsLs, 100, -0.1, 2., "s");
110  evnum_trignum_lumi->setAxisTitle("Luminosity segment", 1);
111  evnum_trignum_lumi->setAxisTitle("Event/trigger number ratio", 2);
112 
113  orbit_lumi = ibooker.bookProfile(
114  "orbit_lumi", "GT orbit number vs LS", TotalNrBinsLs, 0., totalNrBinsLs, 100, -0.1, 1.e15, "s");
115  orbit_lumi->setAxisTitle("Luminosity segment", 1);
116  orbit_lumi->setAxisTitle("Orbit number", 2);
117 
118  setupversion_lumi = ibooker.bookProfile(
119  "setupversion_lumi", "GT setup version vs LS", TotalNrBinsLs, 0., totalNrBinsLs, 100, -0.1, 1.e10, "i");
120  setupversion_lumi->setAxisTitle("Luminosity segment", 1);
121  setupversion_lumi->setAxisTitle("Setup version", 2);
122 
123  gtfe_bx = ibooker.book1D("gtfe_bx", "GTFE Bx number", 3600, 0., 3600.);
124  gtfe_bx->setAxisTitle("GTFE BX number", 1);
125 
126  dbx_module =
127  ibooker.bookProfile("dbx_module", "delta Bx of GT modules wrt GTFE", 20, 0., 20., 100, -4000., 4000., "i");
128  dbx_module->setAxisTitle("GT crate module", 1);
129  dbx_module->setAxisTitle("Module Bx - GTFE Bx", 2);
130  dbx_module->setBinLabel(1, "GTFEevm", 1);
131  dbx_module->setBinLabel(2, "TCS", 1);
132  dbx_module->setBinLabel(3, "FDL", 1);
133  dbx_module->setBinLabel(4, "FDLloc", 1);
134  dbx_module->setBinLabel(5, "PSB9", 1);
135  dbx_module->setBinLabel(6, "PSB9loc", 1);
136  dbx_module->setBinLabel(7, "PSB13", 1);
137  dbx_module->setBinLabel(8, "PSB13loc", 1);
138  dbx_module->setBinLabel(9, "PSB14", 1);
139  dbx_module->setBinLabel(10, "PSB14loc", 1);
140  dbx_module->setBinLabel(11, "PSB15", 1);
141  dbx_module->setBinLabel(12, "PSB15loc", 1);
142  dbx_module->setBinLabel(13, "PSB19", 1);
143  dbx_module->setBinLabel(14, "PSB19loc", 1);
144  dbx_module->setBinLabel(15, "PSB20", 1);
145  dbx_module->setBinLabel(16, "PSB20loc", 1);
146  dbx_module->setBinLabel(17, "PSB21", 1);
147  dbx_module->setBinLabel(18, "PSB21loc", 1);
148  dbx_module->setBinLabel(19, "GMT", 1);
149 
151  ibooker.book2D("BST_MasterStatus", "BST master status over LS", TotalNrBinsLs, 0., totalNrBinsLs, 6, -1., 5.);
152  BST_MasterStatus->setAxisTitle("Luminosity segment", 1);
153  BST_MasterStatus->setAxisTitle("BST master status", 2);
154  BST_MasterStatus->setBinLabel(2, "Master Beam 1", 2);
155  BST_MasterStatus->setBinLabel(3, "Master Beam 2", 2);
156 
158  ibooker.book2D("BST_turnCountNumber", "BST turn count over LS", TotalNrBinsLs, 0., totalNrBinsLs, 250, 0., 4.3e9);
159  BST_turnCountNumber->setAxisTitle("Luminosity segment", 1);
160  BST_turnCountNumber->setAxisTitle("BST turn count number", 2);
161 
162  BST_lhcFillNumber = ibooker.book1D("BST_lhcFillNumber", "BST LHC fill number % 1000", 1000, 0., 1000.);
163  BST_lhcFillNumber->setAxisTitle("BST LHC fill number modulo 1000");
164 
165  BST_beamMode = ibooker.book2D("BST_beamMode", "BST beam mode over LS", TotalNrBinsLs, 0., totalNrBinsLs, 25, 1., 26.);
166  BST_beamMode->setAxisTitle("Luminosity segment", 1);
167  BST_beamMode->setAxisTitle("Mode", 2);
168  BST_beamMode->setBinLabel(1, "No mode", 2);
169  BST_beamMode->setBinLabel(2, "Setup", 2);
170  BST_beamMode->setBinLabel(3, "Inj pilot", 2);
171  BST_beamMode->setBinLabel(4, "Inj intr", 2);
172  BST_beamMode->setBinLabel(5, "Inj nomn", 2);
173  BST_beamMode->setBinLabel(6, "Pre ramp", 2);
174  BST_beamMode->setBinLabel(7, "Ramp", 2);
175  BST_beamMode->setBinLabel(8, "Flat top", 2);
176  BST_beamMode->setBinLabel(9, "Squeeze", 2);
177  BST_beamMode->setBinLabel(10, "Adjust", 2);
178  BST_beamMode->setBinLabel(11, "Stable", 2);
179  BST_beamMode->setBinLabel(12, "Unstable", 2);
180  BST_beamMode->setBinLabel(13, "Beam dump", 2);
181  BST_beamMode->setBinLabel(14, "Ramp down", 2);
182  BST_beamMode->setBinLabel(15, "Recovery", 2);
183  BST_beamMode->setBinLabel(16, "Inj dump", 2);
184  BST_beamMode->setBinLabel(17, "Circ dump", 2);
185  BST_beamMode->setBinLabel(18, "Abort", 2);
186  BST_beamMode->setBinLabel(19, "Cycling", 2);
187  BST_beamMode->setBinLabel(20, "Warn beam dump", 2);
188  BST_beamMode->setBinLabel(21, "No beam", 2);
189 
191  ibooker.book2D("BST_beamMomentum", "BST beam momentum", TotalNrBinsLs, 0., totalNrBinsLs, 100, 0., 7200.);
192  BST_beamMomentum->setAxisTitle("Luminosity segment", 1);
193  BST_beamMomentum->setAxisTitle("Beam momentum", 2);
194 
195  gpsfreq = ibooker.book1D("gpsfreq", "Clock frequency measured by GPS", 1000, 39.95, 40.2);
196  gpsfreq->setAxisTitle("CMS clock frequency (MHz)");
197 
198  gpsfreqwide = ibooker.book1D("gpsfreqwide", "Clock frequency measured by GPS", 1000, -2., 200.);
199  gpsfreqwide->setAxisTitle("CMS clock frequency (MHz)");
200 
201  gpsfreqlum = ibooker.book2D(
202  "gpsfreqlum", "Clock frequency measured by GPS", TotalNrBinsLs, 0., totalNrBinsLs, 100, 39.95, 40.2);
203  gpsfreqlum->setAxisTitle("Luminosity segment", 1);
204  gpsfreqlum->setAxisTitle("CMS clock frequency (MHz)", 2);
205 
207  ibooker.book2D("BST_intensityBeam1", "Intensity beam 1", TotalNrBinsLs, 0., totalNrBinsLs, 1000, 0., 5000.);
208  BST_intensityBeam1->setAxisTitle("Luminosity segment", 1);
209  BST_intensityBeam1->setAxisTitle("Beam intensity", 2);
210 
212  ibooker.book2D("BST_intensityBeam2", "Intensity beam 2", TotalNrBinsLs, 0., totalNrBinsLs, 1000, 0., 5000.);
213  BST_intensityBeam2->setAxisTitle("Luminosity segment", 1);
214  BST_intensityBeam2->setAxisTitle("Beam intensity", 2);
215 
216  // prescale factor index monitoring
217 
219  "L1PrescaleFactorSet", "Index of L1 prescale factor set", TotalNrBinsLs, 0., totalNrBinsLs, 25, 0., 25.);
220  m_monL1PrescaleFactorSet->setAxisTitle("Luminosity segment", 1);
221  m_monL1PrescaleFactorSet->setAxisTitle("L1 PF set index", 2);
223  ibooker.book1D("L1PfIndicesPerLs", "Number of prescale factor indices used per LS", 10, 0., 10.);
224  m_monL1PfIndicesPerLs->setAxisTitle("Number of PF indices used per LS", 1);
225  m_monL1PfIndicesPerLs->setAxisTitle("Entries", 2);
226 
227  // TCS vs FDL common quantity monitoring
228 
229  ibooker.setCurrentFolder(m_histFolder + "/TCSvsEvmFDL");
230 
231  // orbit number
232  m_monOrbitNrDiffTcsFdlEvm = ibooker.book1D("OrbitNrDiffTcsFdlEvm",
233  "Orbit number difference (TCS - EVM_FDL)",
234  2 * MaxOrbitNrDiffTcsFdlEvm + 1,
235  static_cast<float>(-(MaxOrbitNrDiffTcsFdlEvm + 1)),
236  static_cast<float>(MaxOrbitNrDiffTcsFdlEvm + 1));
237  m_monOrbitNrDiffTcsFdlEvm->setAxisTitle("Orbit number difference", 1);
238  m_monOrbitNrDiffTcsFdlEvm->setAxisTitle("Entries/run", 2);
239  m_monLsNrDiffTcsFdlEvm = ibooker.book1D("LsNrDiffTcsFdlEvm",
240  "LS number difference (TCS - EVM_FDL)",
241  2 * MaxLsNrDiffTcsFdlEvm + 1,
242  static_cast<float>(-(MaxLsNrDiffTcsFdlEvm + 1)),
243  static_cast<float>(MaxLsNrDiffTcsFdlEvm + 1));
244  m_monLsNrDiffTcsFdlEvm->setAxisTitle("LS number difference", 1);
245  m_monLsNrDiffTcsFdlEvm->setAxisTitle("Entries/run", 2);
246 
247  // LS number
248  m_monOrbitNrDiffTcsFdlEvmLs = ibooker.book2D("OrbitNrDiffTcsFdlEvmLs",
249  "Orbit number difference (TCS - EVM_FDL)",
250  TotalNrBinsLs,
251  0.,
252  totalNrBinsLs,
253  2 * MaxOrbitNrDiffTcsFdlEvm + 1,
254  static_cast<float>(-(MaxOrbitNrDiffTcsFdlEvm + 1)),
255  static_cast<float>(MaxOrbitNrDiffTcsFdlEvm + 1));
256  m_monOrbitNrDiffTcsFdlEvmLs->setAxisTitle("Luminosity segment", 1);
257  m_monOrbitNrDiffTcsFdlEvmLs->setAxisTitle("Orbit number difference (TCS - EVM_FDL)", 2);
258 
259  m_monLsNrDiffTcsFdlEvmLs = ibooker.book2D("LsNrDiffTcsFdlEvmLs",
260  "LS number difference (TCS - EVM_FDL)",
261  TotalNrBinsLs,
262  0.,
263  totalNrBinsLs,
264  2 * MaxLsNrDiffTcsFdlEvm + 1,
265  static_cast<float>(-(MaxLsNrDiffTcsFdlEvm + 1)),
266  static_cast<float>(MaxLsNrDiffTcsFdlEvm + 1));
267  m_monLsNrDiffTcsFdlEvmLs->setAxisTitle("Luminosity segment", 1);
268  m_monLsNrDiffTcsFdlEvmLs->setAxisTitle("LS number difference (TCS - EVM_FDL)", 2);
269 
271  // clear bookkeeping for prescale factor change
272  m_pairLsNumberPfIndex.clear();
273 
274  ibooker.setCurrentFolder(m_histFolder + "/PlotTrigsBx");
275 
276  //--------book AlgoBits/TechBits vs Bx Histogram-----------
277 
278  //edm::ESHandle<L1GtTriggerMenu> menuRcd;
279  //evSetup.get<L1GtTriggerMenuRcd>().get(menuRcd);
280  //menuRcd.product();
281  const L1GtTriggerMenu* menu = &evSetup.getData(l1gtTrigmenuToken_);
282 
283  h_L1AlgoBX1 = ibooker.book2D("h_L1AlgoBX1", "L1 Algo Trigger BX (algo bit 0 to 31)", 32, -0.5, 31.5, 5, -2.5, 2.5);
284  h_L1AlgoBX2 = ibooker.book2D("h_L1AlgoBX2", "L1 Algo Trigger BX (algo bit 32 to 63)", 32, 31.5, 63.5, 5, -2.5, 2.5);
285  h_L1AlgoBX3 = ibooker.book2D("h_L1AlgoBX3", "L1 Algo Trigger BX (algo bit 64 to 95)", 32, 63.5, 95.5, 5, -2.5, 2.5);
286  h_L1AlgoBX4 = ibooker.book2D("h_L1AlgoBX4", "L1 Algo Trigger BX (algo bit 96 to 127)", 32, 95.5, 127.5, 5, -2.5, 2.5);
287  h_L1TechBX = ibooker.book2D("h_L1TechBX", "L1 Tech Trigger BX", 64, -0.5, 63.5, 5, -2.5, 2.5);
288 
289  for (CItAlgo algo = menu->gtAlgorithmMap().begin(); algo != menu->gtAlgorithmMap().end(); ++algo) {
290  int itrig = (algo->second).algoBitNumber();
291  //algoBitToName[itrig] = TString( (algo->second).algoName() );
292  //const char* trigName = (algo->second).algoName().c_str();
293  if (itrig < 32) {
294  //h_L1AlgoBX1->setBinLabel(itrig+1,trigName);
295  h_L1AlgoBX1->setBinLabel(itrig + 1, std::to_string(itrig));
296  h_L1AlgoBX1->setAxisTitle("Algorithm trigger bits", 1);
297  h_L1AlgoBX1->setAxisTitle("BX (0=L1A)", 2);
298  } else if (itrig < 64) {
299  //h_L1AlgoBX2->setBinLabel(itrig+1-32,trigName);
300  h_L1AlgoBX2->setBinLabel(itrig + 1 - 32, std::to_string(itrig));
301  h_L1AlgoBX2->setAxisTitle("Algorithm trigger bits", 1);
302  h_L1AlgoBX2->setAxisTitle("BX (0=L1A)", 2);
303  } else if (itrig < 96) {
304  //h_L1AlgoBX3->setBinLabel(itrig+1-64,trigName);
305  h_L1AlgoBX3->setBinLabel(itrig + 1 - 64, std::to_string(itrig));
306  h_L1AlgoBX3->setAxisTitle("Algorithm trigger bits", 1);
307  h_L1AlgoBX3->setAxisTitle("BX (0=L1A)", 2);
308  } else if (itrig < 128) {
309  //h_L1AlgoBX4->setBinLabel(itrig+1-96,trigName);
310  h_L1AlgoBX4->setBinLabel(itrig + 1 - 96, std::to_string(itrig));
311  h_L1AlgoBX4->setAxisTitle("Algorithm trigger bits", 1);
312  h_L1AlgoBX4->setAxisTitle("BX (0=L1A)", 2);
313  }
314  }
315 
316  // technical trigger bits
317  for (CItAlgo techTrig = menu->gtTechnicalTriggerMap().begin(); techTrig != menu->gtTechnicalTriggerMap().end();
318  ++techTrig) {
319  int itrig = (techTrig->second).algoBitNumber();
320  //techBitToName[itrig] = TString( (techTrig->second).algoName() );
321  //const char* trigName = (techTrig->second).algoName().c_str();
322  h_L1TechBX->setBinLabel(itrig + 1, std::to_string(itrig));
323  h_L1TechBX->setAxisTitle("Technical trigger bits", 1);
324  h_L1TechBX->setAxisTitle("BX (0=L1A)", 2);
325  }
326 }
327 
328 void L1TGT::dqmBeginRun(edm::Run const& iRrun, edm::EventSetup const& evSetup) { m_nrEvRun = 0; }
329 
330 //
331 void L1TGT::analyze(const edm::Event& iEvent, const edm::EventSetup& evSetup) {
332  m_nrEvJob++;
333 
334  if (verbose_) {
335  edm::LogInfo("L1TGT") << "L1TGT: analyze...." << std::endl;
336  }
337 
338  // initialize Bx, orbit number, luminosity segment number to invalid value
339  int tcsBx = -1;
340  int gtfeEvmBx = -1;
341 
342  long long int orbitTcs = -1;
343  int orbitEvmFdl = -1;
344 
345  int lsTcs = -1;
346  int lsEvmFdl = -1;
347 
348  // get once only the LS block number, to be used in many histograms
349  const int lsNumber = iEvent.luminosityBlock();
350 
351  // open EVM readout record if available
353  iEvent.getByToken(gtEvmSource_, gtEvmReadoutRecord);
354 
355  if (!gtEvmReadoutRecord.isValid()) {
356  edm::LogInfo("L1TGT") << "can't find L1GlobalTriggerEvmReadoutRecord";
357  } else {
358  // get all info from the EVM record if available and fill the histograms
359 
360  const L1GtfeWord& gtfeEvmWord = gtEvmReadoutRecord->gtfeWord();
361  const L1GtfeExtWord& gtfeEvmExtWord = gtEvmReadoutRecord->gtfeWord();
362 
363  gtfeEvmBx = gtfeEvmWord.bxNr();
364  int gtfeEvmActiveBoards = gtfeEvmWord.activeBoards();
365 
366  if (isActive(gtfeEvmActiveBoards, TCS)) {
367  // if TCS present in the record
368 
369  const L1TcsWord& tcsWord = gtEvmReadoutRecord->tcsWord();
370 
371  tcsBx = tcsWord.bxNr();
372  orbitTcs = tcsWord.orbitNr();
373  lsTcs = tcsWord.luminositySegmentNr();
374 
375  event_type->Fill(tcsWord.triggerType());
376  orbit_lumi->Fill(lsNumber, orbitTcs);
377 
378  trigger_number->Fill(tcsWord.partTrigNr());
379  event_number->Fill(tcsWord.eventNr());
380 
381  trigger_lumi->Fill(lsNumber, tcsWord.partTrigNr());
382  event_lumi->Fill(lsNumber, tcsWord.eventNr());
383  evnum_trignum_lumi->Fill(lsNumber,
384  static_cast<double>(tcsWord.eventNr()) / static_cast<double>(tcsWord.partTrigNr()));
385 
386  uint16_t master = gtfeEvmExtWord.bstMasterStatus();
387  uint32_t turnCount = gtfeEvmExtWord.turnCountNumber();
388  uint32_t lhcFill = gtfeEvmExtWord.lhcFillNumber();
389  uint16_t beam = gtfeEvmExtWord.beamMode();
390  uint16_t momentum = gtfeEvmExtWord.beamMomentum();
391  uint32_t intensity1 = gtfeEvmExtWord.totalIntensityBeam1();
392  uint32_t intensity2 = gtfeEvmExtWord.totalIntensityBeam2();
393 
394  BST_MasterStatus->Fill(lsNumber, static_cast<double>(master));
395  BST_turnCountNumber->Fill(lsNumber, static_cast<double>(turnCount));
396  BST_lhcFillNumber->Fill(static_cast<double>(lhcFill % 1000));
397  BST_beamMode->Fill(lsNumber, static_cast<double>(beam));
398 
399  BST_beamMomentum->Fill(lsNumber, static_cast<double>(momentum));
400  BST_intensityBeam1->Fill(lsNumber, static_cast<double>(intensity1));
401  BST_intensityBeam2->Fill(lsNumber, static_cast<double>(intensity2));
402 
403  if (verbose_) {
404  edm::LogInfo("L1TGT") << " check mode = " << beam << " momentum " << momentum << " int2 " << intensity2
405  << std::endl;
406  }
407 
408  uint64_t gpsr = gtfeEvmExtWord.gpsTime();
409  uint64_t gpshi = (gpsr >> 32) & 0xffffffff;
410  uint64_t gpslo = gpsr & 0xffffffff;
411  uint64_t gps = gpshi * 1000000 + gpslo;
412  // edm::LogInfo("L1TGT") << " gpsr = " << std::hex << gpsr << " hi=" << gpshi << " lo=" << gpslo << " gps=" << gps << std::endl;
413 
414  Long64_t delorb = orbitTcs - preOrb_;
415  Long64_t delgps = gps - preGps_;
416  Double_t freq = -1.;
417 
418  if (delgps > 0) {
419  freq = ((Double_t)(delorb)) * 3564. / ((Double_t)(delgps));
420  }
421 
422  if (delorb > 0) {
423  gpsfreq->Fill(freq);
424  gpsfreqwide->Fill(freq);
425  gpsfreqlum->Fill(lsNumber, freq);
426  if (verbose_) {
427  if (freq > 200.) {
428  edm::LogInfo("L1TGT") << " preOrb_ = " << preOrb_ << " orbitTcs=" << orbitTcs << " delorb=" << delorb
429  << std::hex << " preGps_=" << preGps_ << " gps=" << gps << std::dec
430  << " delgps=" << delgps << " freq=" << freq << std::endl;
431  }
432  }
433  }
434 
435  preGps_ = gps;
436  preOrb_ = orbitTcs;
437  }
438 
439  // get info from FDL if active
440  if (isActive(gtfeEvmActiveBoards, FDL)) {
441  const L1GtFdlWord& fdlWord = gtEvmReadoutRecord->gtFdlWord();
442 
443  orbitEvmFdl = fdlWord.orbitNr();
444  lsEvmFdl = fdlWord.lumiSegmentNr();
445  }
446 
447  if ((orbitTcs >= 0) && (orbitEvmFdl >= 0)) {
448  int diffOrbit = static_cast<float>(orbitTcs - orbitEvmFdl);
449  edm::LogInfo("L1TGT") << "\n orbitTcs = " << orbitTcs << " orbitEvmFdl = " << orbitEvmFdl
450  << " diffOrbit = " << diffOrbit << " orbitEvent = " << iEvent.orbitNumber() << std::endl;
451 
452  if (diffOrbit >= MaxOrbitNrDiffTcsFdlEvm) {
454 
455  } else if (diffOrbit <= -MaxOrbitNrDiffTcsFdlEvm) {
457 
458  } else {
459  m_monOrbitNrDiffTcsFdlEvm->Fill(diffOrbit);
460  m_monOrbitNrDiffTcsFdlEvmLs->Fill(lsNumber, diffOrbit);
461  }
462 
463  } else {
464  if (orbitTcs >= 0) {
465  // EVM_FDL error
467  } else if (orbitEvmFdl >= 0) {
468  // TCS error
470 
471  } else {
472  // TCS and EVM_FDL error
475  }
476  }
477 
478  if ((lsTcs >= 0) && (lsEvmFdl >= 0)) {
479  int diffLs = static_cast<float>(lsTcs - lsEvmFdl);
480  edm::LogInfo("L1TGT") << "\n lsTcs = " << lsTcs << " lsEvmFdl = " << lsEvmFdl << " diffLs = " << diffLs
481  << " lsEvent = " << lsNumber << std::endl;
482 
483  if (diffLs >= MaxLsNrDiffTcsFdlEvm) {
485 
486  } else if (diffLs <= -MaxLsNrDiffTcsFdlEvm) {
488 
489  } else {
490  m_monLsNrDiffTcsFdlEvm->Fill(diffLs);
491  m_monLsNrDiffTcsFdlEvmLs->Fill(lsNumber, diffLs);
492  }
493 
494  } else {
495  if (lsTcs >= 0) {
496  // EVM_FDL error
498  } else if (lsEvmFdl >= 0) {
499  // TCS error
501 
502  } else {
503  // TCS and EVM_FDL error
506  }
507  }
508  }
509 
510  // open GT DAQ readout record - exit if failed
512  iEvent.getByToken(gtSource_L1GT_, gtReadoutRecord);
513 
514  //edm::ESHandle<L1GtTriggerMenu> menuRcd;
515  //evSetup.get<L1GtTriggerMenuRcd>().get(menuRcd);
516 
517  //const L1GtTriggerMenu* menu = menuRcd.product();
518 
519  if (!gtReadoutRecord.isValid()) {
520  edm::LogInfo("L1TGT") << "can't find L1GlobalTriggerReadoutRecord";
521  return;
522  }
523 
524  if (gtReadoutRecord.isValid()) {
525  unsigned int NmaxL1AlgoBit = gtReadoutRecord->decisionWord().size();
526  unsigned int NmaxL1TechBit = gtReadoutRecord->technicalTriggerWord().size();
527 
528  const DecisionWord dWord = gtReadoutRecord->decisionWord();
529  const TechnicalTriggerWord technicalTriggerWordBeforeMask = gtReadoutRecord->technicalTriggerWord();
530 
531  const std::vector<L1GtFdlWord>& m_gtFdlWord(gtReadoutRecord->gtFdlVector());
532  int numberBxInEvent = m_gtFdlWord.size();
533  int minBxInEvent = (numberBxInEvent + 1) / 2 - numberBxInEvent;
534 
535  for (unsigned int iBit = 0; iBit < NmaxL1AlgoBit; ++iBit) {
536  bool accept = dWord[iBit];
537 
540  if (trig_iter == l1TriggerDecision.end()) {
541  l1TriggerDecision.insert(valType(algoBitToName[iBit], accept));
542  } else {
543  trig_iter->second = accept;
544  }
545 
546  int ibx = 0;
547  for (std::vector<L1GtFdlWord>::const_iterator itBx = m_gtFdlWord.begin(); itBx != m_gtFdlWord.end(); ++itBx) {
548  const DecisionWord dWordBX = (*itBx).gtDecisionWord();
549  bool accept = dWordBX[iBit];
550  if (accept) {
551  if (iBit < 32)
552  h_L1AlgoBX1->Fill(iBit, minBxInEvent + ibx);
553  else if (iBit < 64)
554  h_L1AlgoBX2->Fill(iBit, minBxInEvent + ibx);
555  else if (iBit < 96)
556  h_L1AlgoBX3->Fill(iBit, minBxInEvent + ibx);
557  else if (iBit < 128)
558  h_L1AlgoBX4->Fill(iBit, minBxInEvent + ibx);
559  }
560  ibx++;
561  }
562  }
563 
564  for (unsigned int iBit = 0; iBit < NmaxL1TechBit; ++iBit) {
565  bool accept = technicalTriggerWordBeforeMask[iBit];
566 
569  if (trig_iter == l1TechTriggerDecision.end())
570  l1TechTriggerDecision.insert(valType(techBitToName[iBit], accept));
571  else
572  trig_iter->second = accept;
573 
574  int ibx = 0;
575  for (std::vector<L1GtFdlWord>::const_iterator itBx = m_gtFdlWord.begin(); itBx != m_gtFdlWord.end(); ++itBx) {
576  const DecisionWord dWordBX = (*itBx).gtTechnicalTriggerWord();
577  bool accept = dWordBX[iBit];
578  if (accept)
579  h_L1TechBX->Fill(iBit, minBxInEvent + ibx);
580  ibx++;
581  }
582  }
583  }
584 
585  // initialize bx's to invalid value
586  int gtfeBx = -1;
587  int fdlBx[2] = {-1, -1};
588  int psbBx[2][7] = {{-1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1}};
589  int gmtBx = -1;
590 
591  // get info from GTFE DAQ record
592  const L1GtfeWord& gtfeWord = gtReadoutRecord->gtfeWord();
593  gtfeBx = gtfeWord.bxNr();
594  gtfe_bx->Fill(gtfeBx);
595  setupversion_lumi->Fill(lsNumber, gtfeWord.setupVersion());
596  int gtfeActiveBoards = gtfeWord.activeBoards();
597 
598  // look for GMT readout collection from the same source if GMT active
599  if (isActive(gtfeActiveBoards, GMT)) {
600  edm::Handle<L1MuGMTReadoutCollection> gmtReadoutCollection;
601  iEvent.getByToken(gtSource_L1MuGMT_, gmtReadoutCollection);
602 
603  if (gmtReadoutCollection.isValid()) {
604  gmtBx = gmtReadoutCollection->getRecord().getBxNr();
605  }
606  }
607 
608  // get info from FDL if active (including decision word)
609  if (isActive(gtfeActiveBoards, FDL)) {
610  const L1GtFdlWord& fdlWord = gtReadoutRecord->gtFdlWord();
611  fdlBx[0] = fdlWord.bxNr();
612  fdlBx[1] = fdlWord.localBxNr();
613 
615  const DecisionWord& gtDecisionWord = gtReadoutRecord->decisionWord();
616  const TechnicalTriggerWord& gtTTWord = gtReadoutRecord->technicalTriggerWord();
617 
618  int dbitNumber = 0;
619  DecisionWord::const_iterator GTdbitItr;
620  algo_bits->Fill(-1.); // fill underflow to normalize
621  for (GTdbitItr = gtDecisionWord.begin(); GTdbitItr != gtDecisionWord.end(); GTdbitItr++) {
622  if (*GTdbitItr) {
623  algo_bits->Fill(dbitNumber);
624  algo_bits_lumi->Fill(lsNumber, dbitNumber);
625  int dbitNumber1 = 0;
626  DecisionWord::const_iterator GTdbitItr1;
627  for (GTdbitItr1 = gtDecisionWord.begin(); GTdbitItr1 != gtDecisionWord.end(); GTdbitItr1++) {
628  if (*GTdbitItr1)
629  algo_bits_corr->Fill(dbitNumber, dbitNumber1);
630  dbitNumber1++;
631  }
632  int tbitNumber1 = 0;
633  TechnicalTriggerWord::const_iterator GTtbitItr1;
634  for (GTtbitItr1 = gtTTWord.begin(); GTtbitItr1 != gtTTWord.end(); GTtbitItr1++) {
635  if (*GTtbitItr1)
636  algo_tt_bits_corr->Fill(dbitNumber, tbitNumber1);
637  tbitNumber1++;
638  }
639  }
640  dbitNumber++;
641  }
642 
643  int tbitNumber = 0;
644  TechnicalTriggerWord::const_iterator GTtbitItr;
645  tt_bits->Fill(-1.); // fill underflow to normalize
646  for (GTtbitItr = gtTTWord.begin(); GTtbitItr != gtTTWord.end(); GTtbitItr++) {
647  if (*GTtbitItr) {
648  tt_bits->Fill(tbitNumber);
649  tt_bits_lumi->Fill(lsNumber, tbitNumber);
650  int tbitNumber1 = 0;
651  TechnicalTriggerWord::const_iterator GTtbitItr1;
652  for (GTtbitItr1 = gtTTWord.begin(); GTtbitItr1 != gtTTWord.end(); GTtbitItr1++) {
653  if (*GTtbitItr1)
654  tt_bits_corr->Fill(tbitNumber, tbitNumber1);
655  tbitNumber1++;
656  }
657  }
658  tbitNumber++;
659  }
660 
661  // fill the index of actual prescale factor set
662  // the index for technical triggers and algorithm trigger is the same (constraint in L1 GT TS)
663  // so we read only pfIndexAlgoTrig (uint16_t)
664 
665  const int pfIndexAlgoTrig = fdlWord.gtPrescaleFactorIndexAlgo();
666  m_monL1PrescaleFactorSet->Fill(lsNumber, static_cast<float>(pfIndexAlgoTrig));
667 
668  //
669 
670  // check that the combination (lsNumber, pfIndex) is not already included
671  // to avoid fake entries due to different event order
672 
673  std::pair<int, int> pairLsPfi = std::make_pair(lsNumber, pfIndexAlgoTrig);
674 
675  CItVecPair cIt = find(m_pairLsNumberPfIndex.begin(), m_pairLsNumberPfIndex.end(), pairLsPfi);
676 
677  if (cIt == m_pairLsNumberPfIndex.end()) {
678  m_pairLsNumberPfIndex.push_back(pairLsPfi);
679  }
680  }
681 
682  // get info from active PSB's
683  int ibit = PSB9; // first psb
684  // for now hardcode psb id's - TODO - get them from Vasile's board maps...
685  int psbID[7] = {0xbb09, 0xbb0d, 0xbb0e, 0xbb0f, 0xbb13, 0xbb14, 0xbb15};
686  for (int i = 0; i < 7; i++) {
687  if (isActive(gtfeActiveBoards, ibit)) {
688  L1GtPsbWord psbWord = gtReadoutRecord->gtPsbWord(psbID[i]);
689  psbBx[0][i] = psbWord.bxNr();
690  psbBx[1][i] = psbWord.localBxNr();
691  }
692  ibit++;
693  }
694 
695  //fill the dbx histo
696  if (gtfeEvmBx > -1)
697  dbx_module->Fill(0., gtfeEvmBx - gtfeBx);
698  if (tcsBx > -1)
699  dbx_module->Fill(1., tcsBx - gtfeBx);
700  for (int i = 0; i < 2; i++) {
701  if (fdlBx[i] > -1)
702  dbx_module->Fill(2. + i, fdlBx[i] - gtfeBx);
703  }
704  for (int j = 0; j < 7; j++) {
705  for (int i = 0; i < 2; i++) {
706  if (psbBx[i][j] > -1)
707  dbx_module->Fill(4. + i + 2 * j, psbBx[i][j] - gtfeBx);
708  }
709  }
710  if (gmtBx > -1)
711  dbx_module->Fill(18., gmtBx - gtfeBx);
712 }
713 
714 // end section
716  if (m_runInEndLumi) {
718  }
719 }
720 
722 bool L1TGT::isActive(int word, int bit) {
723  if (word & (1 << bit))
724  return true;
725  return false;
726 }
727 
729  if (verbose_) {
730  edm::LogInfo("L1TGT") << "\n Prescale factor indices used in a LS " << std::endl;
731 
732  for (CItVecPair cIt = m_pairLsNumberPfIndex.begin(); cIt != m_pairLsNumberPfIndex.end(); ++cIt) {
733  edm::LogVerbatim("L1TGT") << " lsNumber = " << (*cIt).first << " pfIndex = " << (*cIt).second << std::endl;
734  }
735  edm::LogVerbatim("L1TGT") << std::endl;
736  }
737 
738  // reset the histogram...
740 
741  // sort the vector (for pairs: sort after first argument, then after the second argument)
743 
744  int previousLsNumber = -1;
745  int previousPfsIndex = -1;
746 
747  // count the number of pairs (lsNumber, pfIndex) per Ls
748  // there are no duplicate entries, and pairs are sorted after both members
749  // ... and fill again the histogram
750  int pfsIndicesPerLs = 1;
751  for (CItVecPair cIt = m_pairLsNumberPfIndex.begin(); cIt != m_pairLsNumberPfIndex.end(); ++cIt) {
752  if ((*cIt).first == previousLsNumber) {
753  if ((*cIt).second != previousPfsIndex) {
754  previousPfsIndex = (*cIt).second;
755  pfsIndicesPerLs++;
756  }
757 
758  } else {
759  // fill the histogram with the number of PF indices for the previous Ls
760  if (previousLsNumber != -1) {
761  m_monL1PfIndicesPerLs->Fill(pfsIndicesPerLs);
762  }
763 
764  // new Ls
765  previousLsNumber = (*cIt).first;
766  previousPfsIndex = (*cIt).second;
767  pfsIndicesPerLs = 1;
768  }
769  }
770 }
771 
772 // static class members
773 // maximum difference in orbit number
774 const int L1TGT::MaxOrbitNrDiffTcsFdlEvm = 24;
775 
776 // maximum difference in luminosity segment number
777 const int L1TGT::MaxLsNrDiffTcsFdlEvm = 24;
MonitorElement * m_monL1PrescaleFactorSet
Definition: L1TGT.h:140
const cms_uint32_t orbitNr() const
get/set orbit number
Definition: L1GtFdlWord.h:235
void bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm::EventSetup const &) override
Definition: L1TGT.cc:37
Log< level::Info, true > LogVerbatim
MonitorElement * h_L1AlgoBX1
Definition: L1TGT.h:158
MonitorElement * gpsfreqwide
Definition: L1TGT.h:137
int m_nrEvRun
Definition: L1TGT.h:169
const cms_uint16_t gtPrescaleFactorIndexAlgo() const
Definition: L1GtFdlWord.h:195
const cms_uint16_t beamMode() const
void endLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
Definition: L1TGT.cc:715
std::map< std::string, bool > l1TriggerDecision
Definition: L1TGT.h:179
const cms_uint64_t orbitNr() const
get/set orbit number since start of run
Definition: L1TcsWord.h:185
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
MonitorElement * m_monLsNrDiffTcsFdlEvmLs
Definition: L1TGT.h:156
const L1GtFdlWord gtFdlWord(int bxInEvent) const
get / set FDL word (record) in the GT readout record
std::vector< std::pair< int, int > >::const_iterator CItVecPair
Definition: L1TGT.h:183
const cms_uint32_t setupVersion() const
get/set setup version
Definition: L1GtfeWord.h:104
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: L1TGT.cc:331
const L1GtfeExtWord gtfeWord() const
get / set GTFE word (record) in the GT readout record
std::string to_string(const V &value)
Definition: OMSAccess.h:71
const cms_uint16_t luminositySegmentNr() const
get/set luminosity segment number
Definition: L1TcsWord.h:121
const DecisionWord & decisionWord(int bxInEventValue) const
const L1GtfeWord gtfeWord() const
get / set GTFE word (record) in the GT readout record
MonitorElement * BST_intensityBeam1
Definition: L1TGT.h:134
static const int MaxOrbitNrDiffTcsFdlEvm
Definition: L1TGT.h:152
MonitorElement * algo_bits_corr
Definition: L1TGT.h:110
MonitorElement * tt_bits
Definition: L1TGT.h:111
bool verbose_
verbosity switch
Definition: L1TGT.h:106
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:31
const L1GtFdlWord gtFdlWord(int bxInEventValue) const
get / set FDL word (record) in the GT readout record
const cms_uint16_t localBxNr() const
get/set local bunch cross number of the actual bx
Definition: L1GtFdlWord.h:259
MonitorElement * gtfe_bx
Definition: L1TGT.h:126
MonitorElement * BST_beamMode
Definition: L1TGT.h:132
MonitorElement * BST_MasterStatus
Definition: L1TGT.h:129
AlgorithmMap::const_iterator CItAlgo
iterators through map containing the algorithms
const cms_uint16_t bxNr() const
get/set bunch cross number as counted in the TCS chip
Definition: L1TcsWord.h:73
const cms_uint16_t bxNr() const
get/set bunch cross number of the actual bx
Definition: L1GtPsbWord.h:84
T getUntrackedParameter(std::string const &, T const &) const
void Fill(long long x)
virtual void Reset()
Remove all data from the ME, keept the empty histogram with all its settings.
MonitorElement * BST_intensityBeam2
Definition: L1TGT.h:135
~L1TGT() override
Definition: L1TGT.cc:33
uint64_t word
MonitorElement * h_L1TechBX
Definition: L1TGT.h:162
const cms_uint16_t bstMasterStatus() const
int iEvent
Definition: GenABIO.cc:224
MonitorElement * event_number
Definition: L1TGT.h:118
const std::vector< L1GtFdlWord > gtFdlVector() const
get the vector of L1GtFdlWord
const cms_uint32_t eventNr() const
get/set event number since last L1 reset generated in TCS chip
Definition: L1TcsWord.h:173
const cms_uint32_t turnCountNumber() const
MonitorElement * h_L1AlgoBX3
Definition: L1TGT.h:160
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
const cms_uint32_t lhcFillNumber() const
std::vector< bool > DecisionWord
typedefs
uint64_t preGps_
Definition: L1TGT.h:174
static const int MaxLsNrDiffTcsFdlEvm
Definition: L1TGT.h:153
edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecord > gtEvmSource_
input tag for L1 GT EVM readout record
Definition: L1TGT.h:98
MonitorElement * orbit_lumi
Definition: L1TGT.h:123
MonitorElement * h_L1AlgoBX4
Definition: L1TGT.h:161
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
int getBxNr() const
get counters
const TechnicalTriggerWord & technicalTriggerWord(int bxInEventValue) const
bool getData(T &iHolder) const
Definition: EventSetup.h:122
std::string m_histFolder
histogram folder for L1 GT plots
Definition: L1TGT.h:172
MonitorElement * algo_bits_lumi
Definition: L1TGT.h:114
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)
MonitorElement * m_monLsNrDiffTcsFdlEvm
Definition: L1TGT.h:144
MonitorElement * gpsfreq
Definition: L1TGT.h:136
std::string algoBitToName[128]
Definition: L1TGT.h:177
const cms_uint16_t lumiSegmentNr() const
get/set luminosity segment number of the actual bx
Definition: L1GtFdlWord.h:247
MonitorElement * algo_bits
Definition: L1TGT.h:109
Log< level::Info, false > LogInfo
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
Definition: L1TGT.cc:328
MonitorElement * event_type
Definition: L1TGT.h:116
MonitorElement * m_monOrbitNrDiffTcsFdlEvmLs
Definition: L1TGT.h:155
MonitorElement * dbx_module
Definition: L1TGT.h:127
bool m_runInEndLumi
Definition: L1TGT.h:103
const cms_uint64_t gpsTime() const
LHC-BOB-ES-0001 (EDMS 638899)
unsigned long long uint64_t
Definition: Time.h:13
const cms_uint16_t bxNr() const
get/set bunch cross number as counted in the GTFE board
Definition: L1GtfeWord.h:93
const L1GtPsbWord gtPsbWord(cms_uint16_t boardIdValue, int bxInEventValue) const
get / set PSB word (record) in the GT readout record
MonitorElement * tt_bits_corr
Definition: L1TGT.h:112
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
bool isActive(int word, int bit)
book all histograms for the module
Definition: L1TGT.cc:722
const cms_uint16_t beamMomentum() const
const cms_uint16_t bxNr() const
get/set BxNr - bunch cross number of the actual bx
Definition: L1GtFdlWord.h:88
uint64_t preOrb_
Definition: L1TGT.h:175
MonitorElement * gpsfreqlum
Definition: L1TGT.h:138
int m_nrEvJob
number of events processed
Definition: L1TGT.h:168
const cms_uint32_t partTrigNr() const
get/set total number of L1A sent since start of the run to this DAQ partition
Definition: L1TcsWord.h:161
bool isValid() const
Definition: HandleBase.h:70
const L1TcsWord tcsWord() const
get / set TCS word (record) in the GT readout record
const cms_uint16_t localBxNr() const
get/set local bunch cross number of the actual bx
Definition: L1GtPsbWord.h:134
edm::EDGetTokenT< L1GlobalTriggerReadoutRecord > gtSource_L1GT_
input parameters
Definition: L1TGT.h:94
MonitorElement * h_L1AlgoBX2
Definition: L1TGT.h:159
void countPfsIndicesPerLs()
Definition: L1TGT.cc:728
HLT enums.
MonitorElement * m_monL1PfIndicesPerLs
Definition: L1TGT.h:141
std::map< std::string, bool >::iterator trig_iter
Definition: L1TGT.h:180
MonitorElement * trigger_number
Definition: L1TGT.h:120
std::vector< std::pair< int, int > > m_pairLsNumberPfIndex
Definition: L1TGT.h:182
L1MuGMTReadoutRecord const & getRecord(int bx=0) const
const cms_uint32_t totalIntensityBeam2() const
MonitorElement * BST_beamMomentum
Definition: L1TGT.h:133
MonitorElement * BST_lhcFillNumber
Definition: L1TGT.h:131
MonitorElement * setupversion_lumi
Definition: L1TGT.h:124
const cms_uint16_t activeBoards() const
get/set boards contributing to EVM respectively DAQ record
Definition: L1GtfeWord.h:119
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
MonitorElement * BST_turnCountNumber
Definition: L1TGT.h:130
std::map< std::string, bool > l1TechTriggerDecision
Definition: L1TGT.h:179
MonitorElement * event_lumi
Definition: L1TGT.h:119
MonitorElement * tt_bits_lumi
Definition: L1TGT.h:115
MonitorElement * trigger_lumi
Definition: L1TGT.h:121
MonitorElement * evnum_trignum_lumi
Definition: L1TGT.h:122
const cms_uint32_t totalIntensityBeam1() const
const cms_uint16_t triggerType() const
get/set trigger type, identical with event type in CMS header
Definition: L1TcsWord.h:97
MonitorElement * algo_tt_bits_corr
Definition: L1TGT.h:113
std::string techBitToName[64]
Definition: L1TGT.h:178
edm::ESGetToken< L1GtTriggerMenu, L1GtTriggerMenuRcd > l1gtTrigmenuToken_
Definition: L1TGT.h:99
Definition: Run.h:45
MonitorElement * m_monOrbitNrDiffTcsFdlEvm
Definition: L1TGT.h:143
L1TGT(const edm::ParameterSet &ps)
Definition: L1TGT.cc:18
edm::EDGetTokenT< L1MuGMTReadoutCollection > gtSource_L1MuGMT_
Definition: L1TGT.h:95
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)