CMS 3D CMS Logo

CSCMotherboard.cc
Go to the documentation of this file.
3 #include <iostream>
4 
5 // Default values of configuration parameters.
6 const unsigned int CSCMotherboard::def_mpc_block_me1a = 1;
7 const unsigned int CSCMotherboard::def_alct_trig_enable = 0;
8 const unsigned int CSCMotherboard::def_clct_trig_enable = 0;
9 const unsigned int CSCMotherboard::def_match_trig_enable = 1;
10 const unsigned int CSCMotherboard::def_match_trig_window_size = 7;
11 const unsigned int CSCMotherboard::def_tmb_l1a_window_size = 7;
12 
14  unsigned station,
15  unsigned sector,
16  unsigned subsector,
17  unsigned chamber,
18  const edm::ParameterSet& conf)
19  : CSCBaseboard(endcap, station, sector, subsector, chamber, conf) {
20  // Normal constructor. -JM
21  // Pass ALCT, CLCT, and common parameters on to ALCT and CLCT processors.
22  static std::atomic<bool> config_dumped{false};
23 
24  mpc_block_me1a = tmbParams_.getParameter<unsigned int>("mpcBlockMe1a");
25  alct_trig_enable = tmbParams_.getParameter<unsigned int>("alctTrigEnable");
26  clct_trig_enable = tmbParams_.getParameter<unsigned int>("clctTrigEnable");
27  match_trig_enable = tmbParams_.getParameter<unsigned int>("matchTrigEnable");
28  match_trig_window_size = tmbParams_.getParameter<unsigned int>("matchTrigWindowSize");
29  tmb_l1a_window_size = // Common to CLCT and TMB
30  tmbParams_.getParameter<unsigned int>("tmbL1aWindowSize");
31 
32  // configuration handle for number of early time bins
33  early_tbins = tmbParams_.getParameter<int>("tmbEarlyTbins");
34 
35  // whether to not reuse ALCTs that were used by previous matching CLCTs
36  drop_used_alcts = tmbParams_.getParameter<bool>("tmbDropUsedAlcts");
37  drop_used_clcts = tmbParams_.getParameter<bool>("tmbDropUsedClcts");
38 
39  clct_to_alct = tmbParams_.getParameter<bool>("clctToAlct");
40 
41  use_run3_patterns_ = clctParams_.getParameter<bool>("useRun3Patterns");
42 
43  // special tmb bits
44  useHighMultiplicityBits_ = tmbParams_.getParameter<bool>("useHighMultiplicityBits");
46 
47  // whether to readout only the earliest two LCTs in readout window
48  readout_earliest_2 = tmbParams_.getParameter<bool>("tmbReadoutEarliest2");
49 
50  infoV = tmbParams_.getParameter<int>("verbosity");
51 
52  alctProc.reset(new CSCAnodeLCTProcessor(endcap, station, sector, subsector, chamber, conf));
53  clctProc.reset(new CSCCathodeLCTProcessor(endcap, station, sector, subsector, chamber, conf));
54 
55  // Check and print configuration parameters.
57  if (infoV > 0 && !config_dumped) {
59  config_dumped = true;
60  }
61 }
62 
64  // Constructor used only for testing. -JM
65  static std::atomic<bool> config_dumped{false};
66 
67  early_tbins = 4;
68 
69  alctProc.reset(new CSCAnodeLCTProcessor());
70  clctProc.reset(new CSCCathodeLCTProcessor());
77 
78  infoV = 2;
79 
80  // Check and print configuration parameters.
82  if (infoV > 0 && !config_dumped) {
84  config_dumped = true;
85  }
86 }
87 
89  // clear the processors
90  if (alctProc)
91  alctProc->clear();
92  if (clctProc)
93  clctProc->clear();
94 
95  // clear the ALCT and CLCT containers
96  alctV.clear();
97  clctV.clear();
98 
99  // clear the LCT containers
100  for (int bx = 0; bx < CSCConstants::MAX_LCT_TBINS; bx++) {
101  firstLCT[bx].clear();
102  secondLCT[bx].clear();
103  }
104 }
105 
106 // Set configuration parameters obtained via EventSetup mechanism.
108  static std::atomic<bool> config_dumped{false};
109 
110  // Config. parameters for the TMB itself.
117 
118  // Config. paramteres for ALCT and CLCT processors.
119  alctProc->setConfigParameters(conf);
120  clctProc->setConfigParameters(conf);
121 
122  // Check and print configuration parameters.
124  if (!config_dumped) {
126  config_dumped = true;
127  }
128 }
129 
131  // clear the ALCT/CLCT/LCT containers. Clear the processors
132  clear();
133 
134  // Check for existing processors
135  if (!(alctProc && clctProc)) {
136  edm::LogError("CSCMotherboard|SetupError") << "+++ run() called for non-existing ALCT/CLCT processor! +++ \n";
137  return;
138  }
139 
140  // set geometry
141  alctProc->setCSCGeometry(cscGeometry_);
142  clctProc->setCSCGeometry(cscGeometry_);
143 
144  alctV = alctProc->run(wiredc); // run anodeLCT
145  clctV = clctProc->run(compdc); // run cathodeLCT
146 
147  // if there are no ALCTs and no CLCTs, it does not make sense to run this TMB
148  if (alctV.empty() and clctV.empty())
149  return;
150 
151  // encode high multiplicity bits
152  unsigned alctBits = alctProc->getHighMultiplictyBits();
153  encodeHighMultiplicityBits(alctBits);
154 
155  // CLCT-centric matching
156  if (clct_to_alct) {
157  int used_alct_mask[20];
158  for (int a = 0; a < 20; ++a)
159  used_alct_mask[a] = 0;
160 
161  int bx_alct_matched = 0; // bx of last matched ALCT
162  for (int bx_clct = 0; bx_clct < CSCConstants::MAX_CLCT_TBINS; bx_clct++) {
163  // There should be at least one valid ALCT or CLCT for a
164  // correlated LCT to be formed. Decision on whether to reject
165  // non-complete LCTs (and if yes of which type) is made further
166  // upstream.
167  if (clctProc->getBestCLCT(bx_clct).isValid()) {
168  // Look for ALCTs within the match-time window. The window is
169  // centered at the CLCT bx; therefore, we make an assumption
170  // that anode and cathode hits are perfectly synchronized. This
171  // is always true for MC, but only an approximation when the
172  // data is analyzed (which works fairly good as long as wide
173  // windows are used). To get rid of this assumption, one would
174  // need to access "full BX" words, which are not readily
175  // available.
176  bool is_matched = false;
177  const int bx_alct_start = bx_clct - match_trig_window_size / 2 + alctClctOffset_;
178  const int bx_alct_stop = bx_clct + match_trig_window_size / 2 + alctClctOffset_;
179 
180  for (int bx_alct = bx_alct_start; bx_alct <= bx_alct_stop; bx_alct++) {
181  if (bx_alct < 0 || bx_alct >= CSCConstants::MAX_ALCT_TBINS)
182  continue;
183  // default: do not reuse ALCTs that were used with previous CLCTs
184  if (drop_used_alcts && used_alct_mask[bx_alct])
185  continue;
186  if (alctProc->getBestALCT(bx_alct).isValid()) {
187  if (infoV > 1)
188  LogTrace("CSCMotherboard") << "Successful CLCT-ALCT match: bx_clct = " << bx_clct << "; match window: ["
189  << bx_alct_start << "; " << bx_alct_stop << "]; bx_alct = " << bx_alct;
190  correlateLCTs(alctProc->getBestALCT(bx_alct),
191  alctProc->getSecondALCT(bx_alct),
192  clctProc->getBestCLCT(bx_clct),
193  clctProc->getSecondCLCT(bx_clct),
195  used_alct_mask[bx_alct] += 1;
196  is_matched = true;
197  bx_alct_matched = bx_alct;
198  break;
199  }
200  }
201  // No ALCT within the match time interval found: report CLCT-only LCT
202  // (use dummy ALCTs).
203  if (!is_matched and clct_trig_enable) {
204  if (infoV > 1)
205  LogTrace("CSCMotherboard") << "Unsuccessful CLCT-ALCT match (CLCT only): bx_clct = " << bx_clct
206  << " first ALCT " << clctProc->getBestCLCT(bx_clct) << "; match window: ["
207  << bx_alct_start << "; " << bx_alct_stop << "]";
208  correlateLCTs(alctProc->getBestALCT(bx_clct),
209  alctProc->getSecondALCT(bx_clct),
210  clctProc->getBestCLCT(bx_clct),
211  clctProc->getSecondCLCT(bx_clct),
213  }
214  }
215  // No valid CLCTs; attempt to make ALCT-only LCT. Use only ALCTs
216  // which have zeroth chance to be matched at later cathode times.
217  // (I am not entirely sure this perfectly matches the firmware logic.)
218  // Use dummy CLCTs.
219  else {
220  int bx_alct = bx_clct - match_trig_window_size / 2;
221  if (bx_alct >= 0 && bx_alct > bx_alct_matched) {
222  if (alctProc->getBestALCT(bx_alct).isValid() and alct_trig_enable) {
223  if (infoV > 1)
224  LogTrace("CSCMotherboard") << "Unsuccessful CLCT-ALCT match (ALCT only): bx_alct = " << bx_alct;
225  correlateLCTs(alctProc->getBestALCT(bx_alct),
226  alctProc->getSecondALCT(bx_alct),
227  clctProc->getBestCLCT(bx_clct),
228  clctProc->getSecondCLCT(bx_clct),
230  }
231  }
232  }
233  }
234  }
235  // ALCT-centric matching
236  else {
237  int used_clct_mask[20];
238  for (int a = 0; a < 20; ++a)
239  used_clct_mask[a] = 0;
240 
241  int bx_clct_matched = 0; // bx of last matched CLCT
242  for (int bx_alct = 0; bx_alct < CSCConstants::MAX_ALCT_TBINS; bx_alct++) {
243  // There should be at least one valid CLCT or ALCT for a
244  // correlated LCT to be formed. Decision on whether to reject
245  // non-complete LCTs (and if yes of which type) is made further
246  // upstream.
247  if (alctProc->getBestALCT(bx_alct).isValid()) {
248  // Look for CLCTs within the match-time window. The window is
249  // centered at the ALCT bx; therefore, we make an assumption
250  // that anode and cathode hits are perfectly synchronized. This
251  // is always true for MC, but only an approximation when the
252  // data is analyzed (which works fairly good as long as wide
253  // windows are used). To get rid of this assumption, one would
254  // need to access "full BX" words, which are not readily
255  // available.
256  bool is_matched = false;
257  const int bx_clct_start = bx_alct - match_trig_window_size / 2 - alctClctOffset_;
258  const int bx_clct_stop = bx_alct + match_trig_window_size / 2 - alctClctOffset_;
259 
260  for (int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++) {
261  if (bx_clct < 0 || bx_clct >= CSCConstants::MAX_CLCT_TBINS)
262  continue;
263  // default: do not reuse CLCTs that were used with previous ALCTs
264  if (drop_used_clcts && used_clct_mask[bx_clct])
265  continue;
266  if (clctProc->getBestCLCT(bx_clct).isValid()) {
267  if (infoV > 1)
268  LogTrace("CSCMotherboard") << "Successful ALCT-CLCT match: bx_alct = " << bx_alct << "; match window: ["
269  << bx_clct_start << "; " << bx_clct_stop << "]; bx_clct = " << bx_clct;
270  correlateLCTs(alctProc->getBestALCT(bx_alct),
271  alctProc->getSecondALCT(bx_alct),
272  clctProc->getBestCLCT(bx_clct),
273  clctProc->getSecondCLCT(bx_clct),
275  used_clct_mask[bx_clct] += 1;
276  is_matched = true;
277  bx_clct_matched = bx_clct;
278  break;
279  }
280  }
281  // No CLCT within the match time interval found: report ALCT-only LCT
282  // (use dummy CLCTs).
283  if (!is_matched) {
284  if (infoV > 1)
285  LogTrace("CSCMotherboard") << "Unsuccessful ALCT-CLCT match (ALCT only): bx_alct = " << bx_alct
286  << " first ALCT " << alctProc->getBestALCT(bx_alct) << "; match window: ["
287  << bx_clct_start << "; " << bx_clct_stop << "]";
288  if (alct_trig_enable)
289  correlateLCTs(alctProc->getBestALCT(bx_alct),
290  alctProc->getSecondALCT(bx_alct),
291  clctProc->getBestCLCT(bx_alct),
292  clctProc->getSecondCLCT(bx_alct),
294  }
295  }
296  // No valid ALCTs; attempt to make CLCT-only LCT. Use only CLCTs
297  // which have zeroth chance to be matched at later cathode times.
298  // (I am not entirely sure this perfectly matches the firmware logic.)
299  // Use dummy ALCTs.
300  else {
301  int bx_clct = bx_alct - match_trig_window_size / 2;
302  if (bx_clct >= 0 && bx_clct > bx_clct_matched) {
303  if (clctProc->getBestCLCT(bx_clct).isValid() and clct_trig_enable) {
304  if (infoV > 1)
305  LogTrace("CSCMotherboard") << "Unsuccessful ALCT-CLCT match (CLCT only): bx_clct = " << bx_clct;
306  correlateLCTs(alctProc->getBestALCT(bx_alct),
307  alctProc->getSecondALCT(bx_alct),
308  clctProc->getBestCLCT(bx_clct),
309  clctProc->getSecondCLCT(bx_clct),
311  }
312  }
313  }
314  }
315  }
316 
317  // Debug first and second LCTs
318  if (infoV > 0) {
319  for (int bx = 0; bx < CSCConstants::MAX_LCT_TBINS; bx++) {
320  if (firstLCT[bx].isValid())
321  LogDebug("CSCMotherboard") << firstLCT[bx];
322  if (secondLCT[bx].isValid())
323  LogDebug("CSCMotherboard") << secondLCT[bx];
324  }
325  }
326 }
327 
328 // Returns vector of read-out correlated LCTs, if any. Starts with
329 // the vector of all found LCTs and selects the ones in the read-out
330 // time window.
331 std::vector<CSCCorrelatedLCTDigi> CSCMotherboard::readoutLCTs() const {
332  std::vector<CSCCorrelatedLCTDigi> tmpV;
333 
334  // The start time of the L1A*LCT coincidence window should be related
335  // to the fifo_pretrig parameter, but I am not completely sure how.
336  // Just choose it such that the window is centered at bx=7. This may
337  // need further tweaking if the value of tmb_l1a_window_size changes.
338  //static int early_tbins = 4;
339 
340  // Empirical correction to match 2009 collision data (firmware change?)
341  int lct_bins = tmb_l1a_window_size;
342  int late_tbins = early_tbins + lct_bins;
343 
344  int ifois = 0;
345  if (ifois == 0) {
346  if (infoV >= 0 && early_tbins < 0) {
347  edm::LogWarning("CSCMotherboard|SuspiciousParameters")
348  << "+++ early_tbins = " << early_tbins << "; in-time LCTs are not getting read-out!!! +++"
349  << "\n";
350  }
351 
352  if (late_tbins > CSCConstants::MAX_LCT_TBINS - 1) {
353  if (infoV >= 0)
354  edm::LogWarning("CSCMotherboard|SuspiciousParameters")
355  << "+++ Allowed range of time bins, [0-" << late_tbins << "] exceeds max allowed, "
356  << CSCConstants::MAX_LCT_TBINS - 1 << " +++\n"
357  << "+++ Set late_tbins to max allowed +++\n";
358  late_tbins = CSCConstants::MAX_LCT_TBINS - 1;
359  }
360  ifois = 1;
361  }
362 
363  // Start from the vector of all found correlated LCTs and select
364  // those within the LCT*L1A coincidence window.
365  int bx_readout = -1;
366  const std::vector<CSCCorrelatedLCTDigi>& all_lcts = getLCTs();
367  for (auto plct = all_lcts.begin(); plct != all_lcts.end(); plct++) {
368  if (!plct->isValid())
369  continue;
370 
371  int bx = (*plct).getBX();
372  // Skip LCTs found too early relative to L1Accept.
373  if (bx <= early_tbins) {
374  if (infoV > 1)
375  LogDebug("CSCMotherboard") << " Do not report correlated LCT on key halfstrip " << plct->getStrip()
376  << " and key wire " << plct->getKeyWG() << ": found at bx " << bx
377  << ", whereas the earliest allowed bx is " << early_tbins + 1;
378  continue;
379  }
380 
381  // Skip LCTs found too late relative to L1Accept.
382  if (bx > late_tbins) {
383  if (infoV > 1)
384  LogDebug("CSCMotherboard") << " Do not report correlated LCT on key halfstrip " << plct->getStrip()
385  << " and key wire " << plct->getKeyWG() << ": found at bx " << bx
386  << ", whereas the latest allowed bx is " << late_tbins;
387  continue;
388  }
389 
390  // If (readout_earliest_2) take only LCTs in the earliest bx in the read-out window:
391  // in digi->raw step, LCTs have to be packed into the TMB header, and
392  // currently there is room just for two.
393  if (readout_earliest_2) {
394  if (bx_readout == -1 || bx == bx_readout) {
395  tmpV.push_back(*plct);
396  if (bx_readout == -1)
397  bx_readout = bx;
398  }
399  }
400  // if readout_earliest_2 == false, save all LCTs
401  else
402  tmpV.push_back(*plct);
403  }
404 
405  // do a final check on the LCTs in readout
406  for (const auto& lct : tmpV) {
407  checkValid(lct);
408  }
409 
410  return tmpV;
411 }
412 
413 // Returns vector of all found correlated LCTs, if any.
414 std::vector<CSCCorrelatedLCTDigi> CSCMotherboard::getLCTs() const {
415  std::vector<CSCCorrelatedLCTDigi> tmpV;
416 
417  // Do not report LCTs found in ME1/A if mpc_block_me1/a is set.
418  for (int bx = 0; bx < CSCConstants::MAX_LCT_TBINS; bx++) {
419  if (firstLCT[bx].isValid())
421  tmpV.push_back(firstLCT[bx]);
422  if (secondLCT[bx].isValid())
424  tmpV.push_back(secondLCT[bx]);
425  }
426  return tmpV;
427 }
428 
430  const CSCALCTDigi& bALCT, const CSCALCTDigi& sALCT, const CSCCLCTDigi& bCLCT, const CSCCLCTDigi& sCLCT, int type) {
431  CSCALCTDigi bestALCT = bALCT;
432  CSCALCTDigi secondALCT = sALCT;
433  CSCCLCTDigi bestCLCT = bCLCT;
434  CSCCLCTDigi secondCLCT = sCLCT;
435 
436  bool anodeBestValid = bestALCT.isValid();
437  bool anodeSecondValid = secondALCT.isValid();
438  bool cathodeBestValid = bestCLCT.isValid();
439  bool cathodeSecondValid = secondCLCT.isValid();
440 
441  if (anodeBestValid && !anodeSecondValid)
442  secondALCT = bestALCT;
443  if (!anodeBestValid && anodeSecondValid)
444  bestALCT = secondALCT;
445  if (cathodeBestValid && !cathodeSecondValid)
446  secondCLCT = bestCLCT;
447  if (!cathodeBestValid && cathodeSecondValid)
448  bestCLCT = secondCLCT;
449 
450  // ALCT-CLCT matching conditions are defined by "trig_enable" configuration
451  // parameters.
452  if ((alct_trig_enable && bestALCT.isValid()) || (clct_trig_enable && bestCLCT.isValid()) ||
453  (match_trig_enable && bestALCT.isValid() && bestCLCT.isValid())) {
454  const CSCCorrelatedLCTDigi& lct = constructLCTs(bestALCT, bestCLCT, type, 1);
455  int bx = lct.getBX();
456  if (bx >= 0 && bx < CSCConstants::MAX_LCT_TBINS) {
457  firstLCT[bx] = lct;
458  } else {
459  if (infoV > 0)
460  edm::LogWarning("CSCMotherboard|OutOfTimeLCT")
461  << "+++ Bx of first LCT candidate, " << bx << ", is not within the allowed range, [0-"
462  << CSCConstants::MAX_LCT_TBINS - 1 << "); skipping it... +++\n";
463  }
464  }
465 
466  if (((secondALCT != bestALCT) || (secondCLCT != bestCLCT)) &&
467  ((alct_trig_enable && secondALCT.isValid()) || (clct_trig_enable && secondCLCT.isValid()) ||
468  (match_trig_enable && secondALCT.isValid() && secondCLCT.isValid()))) {
469  const CSCCorrelatedLCTDigi& lct = constructLCTs(secondALCT, secondCLCT, type, 2);
470  int bx = lct.getBX();
471  if (bx >= 0 && bx < CSCConstants::MAX_LCT_TBINS) {
472  secondLCT[bx] = lct;
473  } else {
474  if (infoV > 0)
475  edm::LogWarning("CSCMotherboard|OutOfTimeLCT")
476  << "+++ Bx of second LCT candidate, " << bx << ", is not within the allowed range, [0-"
477  << CSCConstants::MAX_LCT_TBINS - 1 << "); skipping it... +++\n";
478  }
479  }
480 }
481 
482 // This method calculates all the TMB words and then passes them to the
483 // constructor of correlated LCTs.
485  const CSCCLCTDigi& cLCT,
486  int type,
487  int trknmb) const {
488  // CLCT pattern number
489  unsigned int pattern = encodePattern(cLCT.getPattern());
490 
491  // LCT quality number
492  unsigned int quality = findQuality(aLCT, cLCT);
493 
494  // Bunch crossing: get it from cathode LCT if anode LCT is not there.
495  int bx = aLCT.isValid() ? aLCT.getBX() : cLCT.getBX();
496 
497  // in Run-3 we plan to use the synchronization error bit
498  // to denote the presence of exotic signatures in the chamber
499  unsigned int syncErr = useHighMultiplicityBits_ ? highMultiplicityBits_ : 0;
500 
501  // construct correlated LCT
502  CSCCorrelatedLCTDigi thisLCT(trknmb,
503  1,
504  quality,
505  aLCT.getKeyWG(),
506  cLCT.getKeyStrip(),
507  pattern,
508  cLCT.getBend(),
509  bx,
510  0,
511  0,
512  syncErr,
514  thisLCT.setType(type);
515  // make sure to shift the ALCT BX from 8 to 3 and the CLCT BX from 8 to 7!
516  thisLCT.setALCT(getBXShiftedALCT(aLCT));
517  thisLCT.setCLCT(getBXShiftedCLCT(cLCT));
518  return thisLCT;
519 }
520 
521 // CLCT pattern number: encodes the pattern number itself
522 unsigned int CSCMotherboard::encodePattern(const int ptn) const {
523  const int kPatternBitWidth = 4;
524 
525  // In the TMB07 firmware, LCT pattern is just a 4-bit CLCT pattern.
526  unsigned int pattern = (abs(ptn) & ((1 << kPatternBitWidth) - 1));
527 
528  return pattern;
529 }
530 
531 // 4-bit LCT quality number.
532 unsigned int CSCMotherboard::findQuality(const CSCALCTDigi& aLCT, const CSCCLCTDigi& cLCT) const {
533  unsigned int quality = 0;
534 
535  // 2008 definition.
536  if (!(aLCT.isValid()) || !(cLCT.isValid())) {
537  if (aLCT.isValid() && !(cLCT.isValid()))
538  quality = 1; // no CLCT
539  else if (!(aLCT.isValid()) && cLCT.isValid())
540  quality = 2; // no ALCT
541  else
542  quality = 0; // both absent; should never happen.
543  } else {
544  int pattern = cLCT.getPattern();
545  if (pattern == 1)
546  quality = 3; // layer-trigger in CLCT
547  else {
548  // CLCT quality is the number of layers hit minus 3.
549  // CLCT quality is the number of layers hit.
550  bool a4 = (aLCT.getQuality() >= 1);
551  bool c4 = (cLCT.getQuality() >= 4);
552  // quality = 4; "reserved for low-quality muons in future"
553  if (!a4 && !c4)
554  quality = 5; // marginal anode and cathode
555  else if (a4 && !c4)
556  quality = 6; // HQ anode, but marginal cathode
557  else if (!a4 && c4)
558  quality = 7; // HQ cathode, but marginal anode
559  else if (a4 && c4) {
560  if (aLCT.getAccelerator())
561  quality = 8; // HQ muon, but accel ALCT
562  else {
563  // quality = 9; "reserved for HQ muons with future patterns
564  // quality = 10; "reserved for HQ muons with future patterns
565  if (pattern == 2 || pattern == 3)
566  quality = 11;
567  else if (pattern == 4 || pattern == 5)
568  quality = 12;
569  else if (pattern == 6 || pattern == 7)
570  quality = 13;
571  else if (pattern == 8 || pattern == 9)
572  quality = 14;
573  else if (pattern == 10)
574  quality = 15;
575  else {
576  if (infoV >= 0)
577  edm::LogWarning("CSCMotherboard|WrongValues")
578  << "+++ findQuality: Unexpected CLCT pattern id = " << pattern << "+++\n";
579  }
580  }
581  }
582  }
583  }
584  return quality;
585 }
586 
588  // Make sure that the parameter values are within the allowed range.
589 
590  // Max expected values.
591  static const unsigned int max_mpc_block_me1a = 1 << 1;
592  static const unsigned int max_alct_trig_enable = 1 << 1;
593  static const unsigned int max_clct_trig_enable = 1 << 1;
594  static const unsigned int max_match_trig_enable = 1 << 1;
595  static const unsigned int max_match_trig_window_size = 1 << 4;
596  static const unsigned int max_tmb_l1a_window_size = 1 << 4;
597 
598  // Checks.
599  CSCBaseboard::checkConfigParameters(mpc_block_me1a, max_mpc_block_me1a, def_mpc_block_me1a, "mpc_block_me1a");
600  CSCBaseboard::checkConfigParameters(alct_trig_enable, max_alct_trig_enable, def_alct_trig_enable, "alct_trig_enable");
601  CSCBaseboard::checkConfigParameters(clct_trig_enable, max_clct_trig_enable, def_clct_trig_enable, "clct_trig_enable");
603  match_trig_enable, max_match_trig_enable, def_match_trig_enable, "match_trig_enable");
605  match_trig_window_size, max_match_trig_window_size, def_match_trig_window_size, "match_trig_window_size");
607  tmb_l1a_window_size, max_tmb_l1a_window_size, def_tmb_l1a_window_size, "tmb_l1a_window_size");
608 }
609 
611  std::ostringstream strm;
612  strm << "\n";
613  strm << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
614  strm << "+ TMB configuration parameters: +\n";
615  strm << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
616  strm << " mpc_block_me1a [block/not block triggers which come from ME1/A] = " << mpc_block_me1a << "\n";
617  strm << " alct_trig_enable [allow ALCT-only triggers] = " << alct_trig_enable << "\n";
618  strm << " clct_trig_enable [allow CLCT-only triggers] = " << clct_trig_enable << "\n";
619  strm << " match_trig_enable [allow matched ALCT-CLCT triggers] = " << match_trig_enable << "\n";
620  strm << " match_trig_window_size [ALCT-CLCT match window width, in 25 ns] = " << match_trig_window_size << "\n";
621  strm << " tmb_l1a_window_size [L1Accept window width, in 25 ns bins] = " << tmb_l1a_window_size << "\n";
622  strm << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
623  LogDebug("CSCMotherboard") << strm.str();
624 }
625 
627  CSCALCTDigi aLCT_shifted = aLCT;
628  aLCT_shifted.setBX(aLCT_shifted.getBX() - (CSCConstants::LCT_CENTRAL_BX - tmb_l1a_window_size / 2));
629  return aLCT_shifted;
630 }
631 
633  CSCCLCTDigi cLCT_shifted = cLCT;
634  cLCT_shifted.setBX(cLCT_shifted.getBX() - alctClctOffset_);
635  return cLCT_shifted;
636 }
637 
639  // encode the high multiplicity bits in the (O)TMB based on
640  // the high multiplicity bits from the ALCT processor
641  // draft version: simply rellay the ALCT bits.
642  // future versions may involve also bits from the CLCT processor
643  // this depends on memory constraints in the TMB FPGA
644  highMultiplicityBits_ = alctBits;
645 }
646 
648  const unsigned max_strip = csctp::get_csc_max_halfstrip(theStation, theRing);
649  const unsigned max_quartstrip = csctp::get_csc_max_quartstrip(theStation, theRing);
650  const unsigned max_eightstrip = csctp::get_csc_max_eightstrip(theStation, theRing);
651  const unsigned max_wire = csctp::get_csc_max_wire(theStation, theRing);
652  const auto& [min_pattern, max_pattern] = csctp::get_csc_min_max_pattern(use_run3_patterns_);
653  const unsigned max_quality = csctp::get_csc_lct_max_quality();
654 
655  unsigned errors = 0;
656 
657  // LCT must be valid
658  if (!lct.isValid()) {
659  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid bit set: " << lct.isValid();
660  errors++;
661  }
662 
663  // LCT number is 1 or 2
664  if (lct.getTrknmb() < 1 or lct.getTrknmb() > 2) {
665  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid track number: " << lct.getTrknmb()
666  << "; allowed [1,2]";
667  errors++;
668  }
669 
670  // LCT quality must be valid
671  if (lct.getQuality() > max_quality) {
672  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid quality: " << lct.getQuality()
673  << "; allowed [0,15]";
674  errors++;
675  }
676 
677  // LCT key half-strip must be within bounds
678  if (lct.getStrip() > max_strip) {
679  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid half-strip: " << lct.getStrip()
680  << "; allowed [0, " << max_strip << "]";
681  errors++;
682  }
683 
684  // LCT key half-strip must be within bounds
685  if (lct.getStrip(4) >= max_quartstrip) {
686  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid key quart-strip: " << lct.getStrip(4)
687  << "; allowed [0, " << max_quartstrip - 1 << "]";
688  errors++;
689  }
690 
691  // LCT key half-strip must be within bounds
692  if (lct.getStrip(8) >= max_eightstrip) {
693  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid key eight-strip: " << lct.getStrip(8)
694  << "; allowed [0, " << max_eightstrip - 1 << "]";
695  errors++;
696  }
697 
698  // LCT key wire-group must be within bounds
699  if (lct.getKeyWG() > max_wire) {
700  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid wire-group: " << lct.getKeyWG()
701  << "; allowed [0, " << max_wire << "]";
702  errors++;
703  }
704 
705  // LCT with out-of-time BX
706  if (lct.getBX() > CSCConstants::MAX_LCT_TBINS - 1) {
707  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid BX: " << lct.getBX() << "; allowed [0, "
708  << CSCConstants::MAX_LCT_TBINS - 1 << "]";
709  errors++;
710  }
711 
712  // LCT with neither left nor right bending
713  if (lct.getBend() > 1) {
714  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid bending: " << lct.getBend()
715  << "; allowed [0,1";
716  errors++;
717  }
718 
719  // LCT with invalid CSCID
722  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid CSCID: " << lct.getBend() << "; allowed ["
725  errors++;
726  }
727 
728  // LCT with an invalid pattern ID
729  if (lct.getPattern() < min_pattern or lct.getPattern() > max_pattern) {
730  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid pattern ID: " << lct.getPattern()
731  << "; allowed [" << min_pattern << ", " << max_pattern << "]";
732  errors++;
733  }
734 
735  // simulated LCT type must be valid
738  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid type (SIM): " << lct.getType()
739  << "; allowed [" << CSCCorrelatedLCTDigi::ALCTCLCT << ", "
741  errors++;
742  }
743 
744  // non-GEM-CSC stations ALWAYS send out ALCTCLCT type LCTs
745  if (!(theRing == 1 and (theStation == 1 or theStation == 2))) {
747  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid type (SIM) in this station: "
748  << lct.getType() << "; allowed [" << CSCCorrelatedLCTDigi::ALCTCLCT << "]";
749  errors++;
750  }
751  }
752 
753  // GEM-CSC stations can send out GEM-type LCTs ONLY when the ILT is turned on!
754  if (theRing == 1 and lct.getType() != CSCCorrelatedLCTDigi::ALCTCLCT) {
755  if ((theStation == 1 and !runME11ILT_) or (theStation == 2 and !runME21ILT_)) {
756  edm::LogError("CSCMotherboard") << "CSCCorrelatedLCTDigi with invalid type (SIM) with GEM-CSC trigger not on: "
757  << lct.getType() << "; allowed [" << CSCCorrelatedLCTDigi::ALCTCLCT << "]";
758  errors++;
759  }
760  }
761 
762  if (errors > 0) {
763  edm::LogError("CSCMotherboard") << "Faulty LCT: " << cscId_ << " " << lct << "\n errors " << errors;
764  }
765 }
CSCMotherboard::run
virtual void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc)
Definition: CSCMotherboard.cc:130
CSCALCTDigi::getBX
uint16_t getBX() const
return BX - five low bits of BXN counter tagged by the ALCT
Definition: CSCALCTDigi.h:70
CSCDBL1TPParameters
Definition: CSCDBL1TPParameters.h:14
CSCMotherboard::match_trig_window_size
unsigned int match_trig_window_size
Definition: CSCMotherboard.h:99
CSCBaseboard::clctParams_
edm::ParameterSet clctParams_
Definition: CSCBaseboard.h:77
CSCCathodeLCTProcessor
Definition: CSCCathodeLCTProcessor.h:40
CSCMotherboard::checkValid
void checkValid(const CSCCorrelatedLCTDigi &lct) const
Definition: CSCMotherboard.cc:647
CSCCorrelatedLCTDigi::getTrknmb
uint16_t getTrknmb() const
return track number
Definition: CSCCorrelatedLCTDigi.h:47
CSCMotherboard::def_clct_trig_enable
static const unsigned int def_clct_trig_enable
Definition: CSCMotherboard.h:126
CSCMotherboard::mpc_block_me1a
unsigned int mpc_block_me1a
Definition: CSCMotherboard.h:97
CSCMotherboard::drop_used_alcts
bool drop_used_alcts
Definition: CSCMotherboard.h:102
CSCBaseboard::cscGeometry_
const CSCGeometry * cscGeometry_
Definition: CSCBaseboard.h:64
CSCMotherboard::secondLCT
CSCCorrelatedLCTDigi secondLCT[CSCConstants::MAX_LCT_TBINS]
Definition: CSCMotherboard.h:90
CSCConstants::MAX_ALCT_TBINS
Definition: CSCConstants.h:62
CSCMotherboard::useHighMultiplicityBits_
bool useHighMultiplicityBits_
Definition: CSCMotherboard.h:119
CSCCorrelatedLCTDigi::getType
int getType() const
Definition: CSCCorrelatedLCTDigi.h:169
CSCBaseboard::tmbParams_
edm::ParameterSet tmbParams_
Definition: CSCBaseboard.h:71
relativeConstraints.station
station
Definition: relativeConstraints.py:67
CSCMotherboard::alctProc
std::unique_ptr< CSCAnodeLCTProcessor > alctProc
Definition: CSCMotherboard.h:75
CSCCorrelatedLCTDigi::CLCTALCT
Definition: CSCCorrelatedLCTDigi.h:159
CSCCorrelatedLCTDigi::getStrip
uint16_t getStrip(uint16_t n=2) const
return the key halfstrip from 0,159
Definition: CSCCorrelatedLCTDigi.cc:66
CSCMotherboard::correlateLCTs
void correlateLCTs(const CSCALCTDigi &bestALCT, const CSCALCTDigi &secondALCT, const CSCCLCTDigi &bestCLCT, const CSCCLCTDigi &secondCLCT, int type)
Definition: CSCMotherboard.cc:429
CSCBaseboard::theStation
const unsigned theStation
Definition: CSCBaseboard.h:43
CSCMotherboard::findQuality
unsigned int findQuality(const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT) const
Definition: CSCMotherboard.cc:532
csctp::get_csc_min_max_pattern
std::pair< unsigned, unsigned > get_csc_min_max_pattern(bool isRun3)
Definition: CSCLCTTools.cc:76
CSCCorrelatedLCTDigi::getKeyWG
uint16_t getKeyWG() const
return the key wire group. counts from 0.
Definition: CSCCorrelatedLCTDigi.h:56
CSCDBL1TPParameters::tmbClctTrigEnable
unsigned int tmbClctTrigEnable() const
Definition: CSCDBL1TPParameters.h:80
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
CSCConstants::LCT_CENTRAL_BX
Definition: CSCConstants.h:77
MessageLogger_cfi.errors
errors
Definition: MessageLogger_cfi.py:18
CSCLCTTools.h
CSCMotherboard::def_alct_trig_enable
static const unsigned int def_alct_trig_enable
Definition: CSCMotherboard.h:126
CSCMotherboard::clear
void clear()
Definition: CSCMotherboard.cc:88
CSCMotherboard::clct_trig_enable
unsigned int clct_trig_enable
Definition: CSCMotherboard.h:98
CSCBaseboard::checkConfigParameters
void checkConfigParameters(unsigned int &var, const unsigned int var_max, const unsigned int var_def, const std::string &var_str)
Definition: CSCBaseboard.cc:89
makeMuonMisalignmentScenario.endcap
endcap
Definition: makeMuonMisalignmentScenario.py:320
CSCDBL1TPParameters::tmbMpcBlockMe1a
unsigned int tmbMpcBlockMe1a() const
Definition: CSCDBL1TPParameters.h:74
csctp::get_csc_max_wire
unsigned get_csc_max_wire(int station, int ring)
Definition: CSCLCTTools.cc:19
CSCCLCTDigi
Definition: CSCCLCTDigi.h:17
CSCCorrelatedLCTDigi::ALCTCLCT
Definition: CSCCorrelatedLCTDigi.h:160
CSCBaseboard::runME11ILT_
bool runME11ILT_
Definition: CSCBaseboard.h:99
CSCMotherboard::checkConfigParameters
void checkConfigParameters()
Definition: CSCMotherboard.cc:587
CSCCorrelatedLCTDigi::CLCT2GEM
Definition: CSCCorrelatedLCTDigi.h:164
CSCMotherboard::CSCMotherboard
CSCMotherboard()
Definition: CSCMotherboard.cc:63
CSCMotherboard::clctV
std::vector< CSCCLCTDigi > clctV
Definition: CSCMotherboard.h:84
CSCMotherboard::clctProc
std::unique_ptr< CSCCathodeLCTProcessor > clctProc
Definition: CSCMotherboard.h:78
CSCALCTDigi::getKeyWG
uint16_t getKeyWG() const
return key wire group
Definition: CSCALCTDigi.h:64
CSCCLCTDigi::getQuality
uint16_t getQuality() const
return quality of a pattern (number of layers hit!)
Definition: CSCCLCTDigi.h:51
CSCCLCTDigi::getBend
uint16_t getBend() const
return bend
Definition: CSCCLCTDigi.h:69
csctp::get_csc_max_quartstrip
unsigned get_csc_max_quartstrip(int station, int ring)
Definition: CSCLCTTools.cc:61
CSCMotherboard::alctV
std::vector< CSCALCTDigi > alctV
Definition: CSCMotherboard.h:83
errors
Definition: errors.py:1
CSCMotherboard::constructLCTs
CSCCorrelatedLCTDigi constructLCTs(const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT, int type, int trknmb) const
Definition: CSCMotherboard.cc:484
CSCDBL1TPParameters::tmbMatchTrigWindowSize
unsigned int tmbMatchTrigWindowSize() const
Definition: CSCDBL1TPParameters.h:86
CSCCorrelatedLCTDigi::CLCTONLY
Definition: CSCCorrelatedLCTDigi.h:165
CSCCLCTDigi::getKeyStrip
uint16_t getKeyStrip(uint16_t n=2) const
Definition: CSCCLCTDigi.cc:87
CSCBaseboard::alctClctOffset_
unsigned int alctClctOffset_
Definition: CSCBaseboard.h:96
CSCMotherboard::dumpConfigParams
void dumpConfigParams() const
Definition: CSCMotherboard.cc:610
csctp::get_csc_lct_max_quality
unsigned get_csc_lct_max_quality()
Definition: CSCLCTTools.cc:104
CSCMotherboard::def_tmb_l1a_window_size
static const unsigned int def_tmb_l1a_window_size
Definition: CSCMotherboard.h:128
CSCConstants::MAX_LCT_TBINS
Definition: CSCConstants.h:63
CSCCorrelatedLCTDigi::getBend
uint16_t getBend() const
return left/right bending
Definition: CSCCorrelatedLCTDigi.h:81
CSCMotherboard.h
CSCALCTDigi::setBX
void setBX(const uint16_t BX)
set BX
Definition: CSCALCTDigi.h:73
CSCALCTDigi::getQuality
uint16_t getQuality() const
return quality of a pattern
Definition: CSCALCTDigi.h:43
edm::LogWarning
Definition: MessageLogger.h:141
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
a
double a
Definition: hdecay.h:119
CSCDBL1TPParameters::tmbMatchTrigEnable
unsigned int tmbMatchTrigEnable() const
Definition: CSCDBL1TPParameters.h:83
CSCTriggerNumbering::minTriggerCscId
static int minTriggerCscId()
Definition: CSCTriggerNumbering.h:111
csctp::get_csc_max_halfstrip
unsigned get_csc_max_halfstrip(int station, int ring)
Definition: CSCLCTTools.cc:39
CSCBaseboard
Definition: CSCBaseboard.h:15
CSCMotherboard::getLCTs
std::vector< CSCCorrelatedLCTDigi > getLCTs() const
Definition: CSCMotherboard.cc:414
CSCConstants::MAX_HALF_STRIP_ME1B
Definition: CSCConstants.h:39
CSCMotherboard::use_run3_patterns_
bool use_run3_patterns_
Definition: CSCMotherboard.h:122
CSCMotherboard::early_tbins
int early_tbins
Definition: CSCMotherboard.h:108
CSCCorrelatedLCTDigi::getCSCID
uint16_t getCSCID() const
Definition: CSCCorrelatedLCTDigi.h:96
CSCCLCTDigi::isValid
bool isValid() const
check CLCT validity (1 - valid CLCT)
Definition: CSCCLCTDigi.h:45
CSCDBL1TPParameters::tmbTmbL1aWindowSize
unsigned int tmbTmbL1aWindowSize() const
Definition: CSCDBL1TPParameters.h:89
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
CSCComparatorDigiCollection
CSCCorrelatedLCTDigi::clear
void clear()
clear this LCT
Definition: CSCCorrelatedLCTDigi.cc:50
CSCMotherboard::readout_earliest_2
bool readout_earliest_2
Definition: CSCMotherboard.h:111
CSCDBL1TPParameters::tmbAlctTrigEnable
unsigned int tmbAlctTrigEnable() const
Definition: CSCDBL1TPParameters.h:77
CSCMotherboard::drop_used_clcts
bool drop_used_clcts
Definition: CSCMotherboard.h:105
CSCCLCTDigi::getBX
uint16_t getBX() const
return BX
Definition: CSCCLCTDigi.h:99
CSCMotherboard::encodeHighMultiplicityBits
void encodeHighMultiplicityBits(unsigned alctBits)
Definition: CSCMotherboard.cc:638
CSCMotherboard::readoutLCTs
virtual std::vector< CSCCorrelatedLCTDigi > readoutLCTs() const
Definition: CSCMotherboard.cc:331
CSCMotherboard::getBXShiftedCLCT
CSCCLCTDigi getBXShiftedCLCT(const CSCCLCTDigi &) const
Definition: CSCMotherboard.cc:632
CSCBaseboard::runME21ILT_
bool runME21ILT_
Definition: CSCBaseboard.h:102
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
CSCMotherboard::tmb_l1a_window_size
unsigned int tmb_l1a_window_size
Definition: CSCMotherboard.h:99
type
type
Definition: HCALResponse.h:21
CSCWireDigiCollection
csctp::get_csc_max_eightstrip
unsigned get_csc_max_eightstrip(int station, int ring)
Definition: CSCLCTTools.cc:63
qcdUeDQM_cfi.quality
quality
Definition: qcdUeDQM_cfi.py:31
CSCALCTDigi::getAccelerator
uint16_t getAccelerator() const
Definition: CSCALCTDigi.h:50
CSCMotherboard::setConfigParameters
void setConfigParameters(const CSCDBL1TPParameters *conf)
Definition: CSCMotherboard.cc:107
CSCCorrelatedLCTDigi::getPattern
uint16_t getPattern() const
Definition: CSCCorrelatedLCTDigi.h:78
CSCMotherboard::highMultiplicityBits_
unsigned int highMultiplicityBits_
Definition: CSCMotherboard.h:118
CSCALCTDigi
Definition: CSCALCTDigi.h:16
CSCMotherboard::alct_trig_enable
unsigned int alct_trig_enable
Definition: CSCMotherboard.h:98
CSCConstants::MAX_CLCT_TBINS
Definition: CSCConstants.h:61
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
CSCBaseboard::theTrigChamber
const unsigned theTrigChamber
Definition: CSCBaseboard.h:46
CSCCLCTDigi::setBX
void setBX(const uint16_t bx)
set bx
Definition: CSCCLCTDigi.h:102
CSCMotherboard::encodePattern
unsigned int encodePattern(const int clctPattern) const
Definition: CSCMotherboard.cc:522
CSCCorrelatedLCTDigi::ALCTONLY
Definition: CSCCorrelatedLCTDigi.h:166
CSCTriggerNumbering::maxTriggerCscId
static int maxTriggerCscId()
Definition: CSCTriggerNumbering.h:110
CSCMotherboard::def_match_trig_window_size
static const unsigned int def_match_trig_window_size
Definition: CSCMotherboard.h:127
CSCAnodeLCTProcessor
Definition: CSCAnodeLCTProcessor.h:45
CSCBaseboard::cscId_
CSCDetId cscId_
Definition: CSCBaseboard.h:56
CSCALCTDigi::isValid
bool isValid() const
check ALCT validity (1 - valid ALCT)
Definition: CSCALCTDigi.h:37
CSCMotherboard::clct_to_alct
bool clct_to_alct
Definition: CSCMotherboard.h:115
CSCMotherboard::def_mpc_block_me1a
static const unsigned int def_mpc_block_me1a
Definition: CSCMotherboard.h:125
CSCMotherboard::def_match_trig_enable
static const unsigned int def_match_trig_enable
Definition: CSCMotherboard.h:127
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
CSCMotherboard::match_trig_enable
unsigned int match_trig_enable
Definition: CSCMotherboard.h:98
CSCMotherboard::getBXShiftedALCT
CSCALCTDigi getBXShiftedALCT(const CSCALCTDigi &) const
Definition: CSCMotherboard.cc:626
CSCCLCTDigi::getPattern
uint16_t getPattern() const
return pattern
Definition: CSCCLCTDigi.h:57
CSCCorrelatedLCTDigi::getBX
uint16_t getBX() const
return BX
Definition: CSCCorrelatedLCTDigi.h:84
CSCCorrelatedLCTDigi::setType
void setType(int type)
Definition: CSCCorrelatedLCTDigi.h:171
CSCCorrelatedLCTDigi::isValid
bool isValid() const
return valid pattern bit
Definition: CSCCorrelatedLCTDigi.h:50
CSCCorrelatedLCTDigi::getQuality
uint16_t getQuality() const
return the Quality
Definition: CSCCorrelatedLCTDigi.h:53
CSCBaseboard::isME11_
bool isME11_
Definition: CSCBaseboard.h:52
CSCMotherboard::firstLCT
CSCCorrelatedLCTDigi firstLCT[CSCConstants::MAX_LCT_TBINS]
Definition: CSCMotherboard.h:87
CSCCorrelatedLCTDigi
Definition: CSCCorrelatedLCTDigi.h:19
CSCBaseboard::infoV
int infoV
Definition: CSCBaseboard.h:62
CSCBaseboard::theRing
unsigned theRing
Definition: CSCBaseboard.h:48