CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes
CSCMotherboard Class Reference

#include <CSCMotherboard.h>

Inheritance diagram for CSCMotherboard:
CSCBaseboard CSCUpgradeMotherboard CSCGEMMotherboard CSCMotherboardME11 CSCGEMMotherboardME11 CSCGEMMotherboardME21

Public Member Functions

void clear ()
 
 CSCMotherboard ()
 
 CSCMotherboard (unsigned endcap, unsigned station, unsigned sector, unsigned subsector, unsigned chamber, const edm::ParameterSet &conf)
 
std::vector< CSCCorrelatedLCTDigigetLCTs () const
 
virtual std::vector< CSCCorrelatedLCTDigireadoutLCTs () const
 
virtual void run (const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc)
 
void setConfigParameters (const CSCDBL1TPParameters *conf)
 
 ~CSCMotherboard () override=default
 
- Public Member Functions inherited from CSCBaseboard
 CSCBaseboard ()
 
 CSCBaseboard (unsigned endcap, unsigned station, unsigned sector, unsigned subsector, unsigned chamber, const edm::ParameterSet &conf)
 
std::string getCSCName () const
 
void setCSCGeometry (const CSCGeometry *g)
 
virtual ~CSCBaseboard ()=default
 

Public Attributes

std::unique_ptr< CSCAnodeLCTProcessoralctProc
 
std::unique_ptr< CSCCathodeLCTProcessorclctProc
 

Protected Types

enum  LCT_Quality : unsigned int {
  LCT_Quality::INVALID = 0, LCT_Quality::NO_CLCT = 1, LCT_Quality::NO_ALCT = 2, LCT_Quality::CLCT_LAYER_TRIGGER = 3,
  LCT_Quality::LOW_QUALITY = 4, LCT_Quality::MARGINAL_ANODE_CATHODE = 5, LCT_Quality::HQ_ANODE_MARGINAL_CATHODE = 6, LCT_Quality::HQ_CATHODE_MARGINAL_ANODE = 7,
  LCT_Quality::HQ_ACCEL_ALCT = 8, LCT_Quality::HQ_RESERVED_1 = 9, LCT_Quality::HQ_RESERVED_2 = 10, LCT_Quality::HQ_PATTERN_2_3 = 11,
  LCT_Quality::HQ_PATTERN_4_5 = 12, LCT_Quality::HQ_PATTERN_6_7 = 13, LCT_Quality::HQ_PATTERN_8_9 = 14, LCT_Quality::HQ_PATTERN_10 = 15
}
 
enum  LCT_QualityRun3 : unsigned int { LCT_QualityRun3::INVALID = 0, LCT_QualityRun3::LowQ = 1, LCT_QualityRun3::MedQ = 2, LCT_QualityRun3::HighQ = 3 }
 

Protected Member Functions

void checkConfigParameters ()
 
CSCCorrelatedLCTDigi constructLCTs (const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT, int type, int trknmb) const
 
void correlateLCTs (const CSCALCTDigi &bestALCT, const CSCALCTDigi &secondALCT, const CSCCLCTDigi &bestCLCT, const CSCCLCTDigi &secondCLCT, int type)
 
void dumpConfigParams () const
 
void encodeHighMultiplicityBits (unsigned alctBits)
 
unsigned int encodePattern (const int clctPattern) const
 
LCT_Quality findQuality (const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT) const
 
LCT_QualityRun3 findQualityRun3 (const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT) const
 
CSCALCTDigi getBXShiftedALCT (const CSCALCTDigi &) const
 
CSCCLCTDigi getBXShiftedCLCT (const CSCCLCTDigi &) const
 
- Protected Member Functions inherited from CSCBaseboard
void checkConfigParameters (unsigned int &var, const unsigned int var_max, const unsigned int var_def, const std::string &var_str)
 

Protected Attributes

unsigned int alct_trig_enable
 
std::vector< CSCALCTDigialctV
 
bool clct_to_alct
 
unsigned int clct_trig_enable
 
std::vector< CSCCLCTDigiclctV
 
bool drop_used_alcts
 
bool drop_used_clcts
 
int early_tbins
 
CSCCorrelatedLCTDigi firstLCT [CSCConstants::MAX_LCT_TBINS]
 
unsigned int highMultiplicityBits_
 
unsigned int match_trig_enable
 
unsigned int match_trig_window_size
 
unsigned int mpc_block_me1a
 
std::unique_ptr< LCTQualityControlqualityControl_
 
bool readout_earliest_2
 
CSCCorrelatedLCTDigi secondLCT [CSCConstants::MAX_LCT_TBINS]
 
unsigned int tmb_l1a_window_size
 
bool useHighMultiplicityBits_
 
- Protected Attributes inherited from CSCBaseboard
edm::ParameterSet alctParams_
 
edm::ParameterSet clctParams_
 
edm::ParameterSet commonParams_
 
const CSCChambercscChamber_
 
const CSCGeometrycscGeometry_
 
CSCDetId cscId_
 
bool disableME1a_
 
bool enableAlctPhase2_
 
bool gangedME1a_
 
int infoV
 
bool isME11_
 
bool isME21_
 
bool isME31_
 
bool isME41_
 
bool runCCLUT_
 
bool runME11ILT_
 
bool runME11Up_
 
bool runME21ILT_
 
bool runME21Up_
 
bool runME31Up_
 
bool runME41Up_
 
bool runPhase2_
 
unsigned theChamber
 
std::string theCSCName_
 
const unsigned theEndcap
 
unsigned theRegion
 
unsigned theRing
 
const unsigned theSector
 
const unsigned theStation
 
const unsigned theSubsector
 
const unsigned theTrigChamber
 
edm::ParameterSet tmbParams_
 

Static Protected Attributes

static const unsigned int def_alct_trig_enable = 0
 
static const unsigned int def_clct_trig_enable = 0
 
static const unsigned int def_match_trig_enable = 1
 
static const unsigned int def_match_trig_window_size = 7
 
static const unsigned int def_mpc_block_me1a = 1
 
static const unsigned int def_tmb_l1a_window_size = 7
 

Detailed Description

Correlates anode and cathode LCTs from the same chamber.

When the Trigger MotherBoard (TMB) is instantiated it instantiates an ALCT and CLCT board. The MotherBoard takes up to two LCTs from each anode and cathode LCT card and combines them into a single Correlated LCT. The output is up to two Correlated LCTs.

It can be run in either a test mode, where the arguments are a collection of wire times and arrays of halfstrip times, or for general use, with wire digi and comparator digi collections as arguments. In the latter mode, the wire & strip info is passed on the LCTProcessors, where it is decoded and converted into a convenient form. After running the anode and cathode LCTProcessors, TMB correlates the anode and cathode LCTs. At present, it simply matches the best CLCT with the best ALCT; perhaps a better algorithm will be determined in the future. The MotherBoard then determines a few more numbers (such as quality and pattern) from the ALCT and CLCT information, and constructs two correlated LCT "digis".

Author
Benn Tannenbaum 28 August 1999 benn@.nosp@m.phys.nosp@m.ics.u.nosp@m.cla..nosp@m.edu

Based on code by Nick Wisniewski (nw@it.nosp@m.s.ca.nosp@m.ltech.nosp@m..edu) and a framework by Darin Acosta (acost.nosp@m.a@ph.nosp@m.ys.uf.nosp@m.l.ed.nosp@m.u).

Numerous later improvements by Jason Mumford and Slava Valuev (see cvs in ORCA). Porting from ORCA by S. Valuev (Slava.nosp@m..Val.nosp@m.uev@c.nosp@m.ern..nosp@m.ch), May 2006.

Definition at line 41 of file CSCMotherboard.h.

Member Enumeration Documentation

◆ LCT_Quality

enum CSCMotherboard::LCT_Quality : unsigned int
strongprotected
Enumerator
INVALID 
NO_CLCT 
NO_ALCT 
CLCT_LAYER_TRIGGER 
LOW_QUALITY 
MARGINAL_ANODE_CATHODE 
HQ_ANODE_MARGINAL_CATHODE 
HQ_CATHODE_MARGINAL_ANODE 
HQ_ACCEL_ALCT 
HQ_RESERVED_1 
HQ_RESERVED_2 
HQ_PATTERN_2_3 
HQ_PATTERN_4_5 
HQ_PATTERN_6_7 
HQ_PATTERN_8_9 
HQ_PATTERN_10 

Definition at line 147 of file CSCMotherboard.h.

147  : unsigned int {
148  INVALID = 0,
149  NO_CLCT = 1,
150  NO_ALCT = 2,
151  CLCT_LAYER_TRIGGER = 3,
152  LOW_QUALITY = 4,
153  MARGINAL_ANODE_CATHODE = 5,
154  HQ_ANODE_MARGINAL_CATHODE = 6,
155  HQ_CATHODE_MARGINAL_ANODE = 7,
156  HQ_ACCEL_ALCT = 8,
157  HQ_RESERVED_1 = 9,
158  HQ_RESERVED_2 = 10,
159  HQ_PATTERN_2_3 = 11,
160  HQ_PATTERN_4_5 = 12,
161  HQ_PATTERN_6_7 = 13,
162  HQ_PATTERN_8_9 = 14,
163  HQ_PATTERN_10 = 15
164  };

◆ LCT_QualityRun3

enum CSCMotherboard::LCT_QualityRun3 : unsigned int
strongprotected
Enumerator
INVALID 
LowQ 
MedQ 
HighQ 

Definition at line 166 of file CSCMotherboard.h.

166  : unsigned int {
167  INVALID = 0,
168  LowQ = 1,
169  MedQ = 2,
170  HighQ = 3,
171  };

Constructor & Destructor Documentation

◆ CSCMotherboard() [1/2]

CSCMotherboard::CSCMotherboard ( unsigned  endcap,
unsigned  station,
unsigned  sector,
unsigned  subsector,
unsigned  chamber,
const edm::ParameterSet conf 
)

Normal constructor.

Definition at line 13 of file CSCMotherboard.cc.

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  // special tmb bits
42  useHighMultiplicityBits_ = tmbParams_.getParameter<bool>("useHighMultiplicityBits");
44 
45  // whether to readout only the earliest two LCTs in readout window
46  readout_earliest_2 = tmbParams_.getParameter<bool>("tmbReadoutEarliest2");
47 
48  infoV = tmbParams_.getParameter<int>("verbosity");
49 
50  alctProc = std::make_unique<CSCAnodeLCTProcessor>(endcap, station, sector, subsector, chamber, conf);
51  clctProc = std::make_unique<CSCCathodeLCTProcessor>(endcap, station, sector, subsector, chamber, conf);
52 
53  // Check and print configuration parameters.
55  if (infoV > 0 && !config_dumped) {
57  config_dumped = true;
58  }
59 
60  // quality control of stubs
61  qualityControl_ = std::make_unique<LCTQualityControl>(endcap, station, sector, subsector, chamber, conf);
62 }

References alct_trig_enable, alctProc, relativeConstraints::chamber, checkConfigParameters(), clct_to_alct, clct_trig_enable, clctProc, drop_used_alcts, drop_used_clcts, dumpConfigParams(), early_tbins, makeMuonMisalignmentScenario::endcap, edm::ParameterSet::getParameter(), highMultiplicityBits_, CSCBaseboard::infoV, match_trig_enable, match_trig_window_size, mpc_block_me1a, qualityControl_, readout_earliest_2, relativeConstraints::station, tmb_l1a_window_size, CSCBaseboard::tmbParams_, and useHighMultiplicityBits_.

◆ CSCMotherboard() [2/2]

CSCMotherboard::CSCMotherboard ( )

Constructor for use during testing.

Definition at line 64 of file CSCMotherboard.cc.

64  : CSCBaseboard() {
65  // Constructor used only for testing. -JM
66  static std::atomic<bool> config_dumped{false};
67 
68  early_tbins = 4;
69 
70  alctProc = std::make_unique<CSCAnodeLCTProcessor>();
71  clctProc = std::make_unique<CSCCathodeLCTProcessor>();
78 
79  infoV = 2;
80 
81  // Check and print configuration parameters.
83  if (infoV > 0 && !config_dumped) {
85  config_dumped = true;
86  }
87 }

References alct_trig_enable, alctProc, checkConfigParameters(), clct_trig_enable, clctProc, def_alct_trig_enable, def_clct_trig_enable, def_match_trig_enable, def_match_trig_window_size, def_mpc_block_me1a, def_tmb_l1a_window_size, dumpConfigParams(), early_tbins, CSCBaseboard::infoV, match_trig_enable, match_trig_window_size, mpc_block_me1a, and tmb_l1a_window_size.

◆ ~CSCMotherboard()

CSCMotherboard::~CSCMotherboard ( )
overridedefault

Default destructor.

Member Function Documentation

◆ checkConfigParameters()

void CSCMotherboard::checkConfigParameters ( )
protected

Make sure that the parameter values are within the allowed range.

Definition at line 660 of file CSCMotherboard.cc.

660  {
661  // Make sure that the parameter values are within the allowed range.
662 
663  // Max expected values.
664  static const unsigned int max_mpc_block_me1a = 1 << 1;
665  static const unsigned int max_alct_trig_enable = 1 << 1;
666  static const unsigned int max_clct_trig_enable = 1 << 1;
667  static const unsigned int max_match_trig_enable = 1 << 1;
668  static const unsigned int max_match_trig_window_size = 1 << 4;
669  static const unsigned int max_tmb_l1a_window_size = 1 << 4;
670 
671  // Checks.
672  CSCBaseboard::checkConfigParameters(mpc_block_me1a, max_mpc_block_me1a, def_mpc_block_me1a, "mpc_block_me1a");
673  CSCBaseboard::checkConfigParameters(alct_trig_enable, max_alct_trig_enable, def_alct_trig_enable, "alct_trig_enable");
674  CSCBaseboard::checkConfigParameters(clct_trig_enable, max_clct_trig_enable, def_clct_trig_enable, "clct_trig_enable");
676  match_trig_enable, max_match_trig_enable, def_match_trig_enable, "match_trig_enable");
678  match_trig_window_size, max_match_trig_window_size, def_match_trig_window_size, "match_trig_window_size");
680  tmb_l1a_window_size, max_tmb_l1a_window_size, def_tmb_l1a_window_size, "tmb_l1a_window_size");
681 }

References alct_trig_enable, CSCBaseboard::checkConfigParameters(), clct_trig_enable, def_alct_trig_enable, def_clct_trig_enable, def_match_trig_enable, def_match_trig_window_size, def_mpc_block_me1a, def_tmb_l1a_window_size, match_trig_enable, match_trig_window_size, mpc_block_me1a, and tmb_l1a_window_size.

Referenced by CSCMotherboard(), and setConfigParameters().

◆ clear()

void CSCMotherboard::clear ( void  )

Clears correlated LCT and passes clear signal on to cathode and anode LCT processors.

Definition at line 89 of file CSCMotherboard.cc.

89  {
90  // clear the processors
91  if (alctProc)
92  alctProc->clear();
93  if (clctProc)
94  clctProc->clear();
95 
96  // clear the ALCT and CLCT containers
97  alctV.clear();
98  clctV.clear();
99 
100  // clear the LCT containers
101  for (int bx = 0; bx < CSCConstants::MAX_LCT_TBINS; bx++) {
102  firstLCT[bx].clear();
103  secondLCT[bx].clear();
104  }
105 }

References alctProc, alctV, l1GtPatternGenerator_cfi::bx, clctProc, clctV, CSCCorrelatedLCTDigi::clear(), firstLCT, CSCConstants::MAX_LCT_TBINS, and secondLCT.

Referenced by CSCUpgradeMotherboard::clear(), and run().

◆ constructLCTs()

CSCCorrelatedLCTDigi CSCMotherboard::constructLCTs ( const CSCALCTDigi aLCT,
const CSCCLCTDigi cLCT,
int  type,
int  trknmb 
) const
protected

Definition at line 486 of file CSCMotherboard.cc.

489  {
490  // CLCT pattern number
491  unsigned int pattern = encodePattern(cLCT.getPattern());
492 
493  // LCT quality number
494  unsigned int quality;
495  if (runCCLUT_) {
496  quality = static_cast<unsigned int>(findQualityRun3(aLCT, cLCT));
497  } else {
498  quality = static_cast<unsigned int>(findQuality(aLCT, cLCT));
499  }
500 
501  // Bunch crossing: get it from cathode LCT if anode LCT is not there.
502  int bx = aLCT.isValid() ? aLCT.getBX() : cLCT.getBX();
503 
504  // Not used in Run-2. Will not be assigned in Run-3
505  unsigned int syncErr = 0;
506 
507  // construct correlated LCT
508  CSCCorrelatedLCTDigi thisLCT(trknmb,
509  1,
510  quality,
511  aLCT.getKeyWG(),
512  cLCT.getKeyStrip(),
513  pattern,
514  cLCT.getBend(),
515  bx,
516  0,
517  0,
518  syncErr,
520  thisLCT.setType(type);
521 
522  if (runCCLUT_) {
523  thisLCT.setRun3(true);
524  // 4-bit slope value derived with the CCLUT algorithm
525  thisLCT.setSlope(cLCT.getSlope());
526  thisLCT.setQuartStrip(cLCT.getQuartStrip());
527  thisLCT.setEighthStrip(cLCT.getEighthStrip());
528  thisLCT.setRun3Pattern(cLCT.getRun3Pattern());
529  }
530 
531  // in Run-3 we plan to denote the presence of exotic signatures in the chamber
533  thisLCT.setHMT(highMultiplicityBits_);
534 
535  // make sure to shift the ALCT BX from 8 to 3 and the CLCT BX from 8 to 7!
536  thisLCT.setALCT(getBXShiftedALCT(aLCT));
537  thisLCT.setCLCT(getBXShiftedCLCT(cLCT));
538  return thisLCT;
539 }

References l1GtPatternGenerator_cfi::bx, encodePattern(), findQuality(), findQualityRun3(), CSCCLCTDigi::getBend(), CSCALCTDigi::getBX(), CSCCLCTDigi::getBX(), getBXShiftedALCT(), getBXShiftedCLCT(), CSCCLCTDigi::getEighthStrip(), CSCCLCTDigi::getKeyStrip(), CSCALCTDigi::getKeyWG(), CSCCLCTDigi::getPattern(), CSCCLCTDigi::getQuartStrip(), CSCCLCTDigi::getRun3Pattern(), CSCCLCTDigi::getSlope(), highMultiplicityBits_, CSCALCTDigi::isValid(), topSingleLeptonDQM_PU_cfi::pattern, quality, CSCBaseboard::runCCLUT_, CSCCorrelatedLCTDigi::setType(), CSCBaseboard::theTrigChamber, and useHighMultiplicityBits_.

Referenced by CSCUpgradeMotherboard::correlateLCTs(), correlateLCTs(), CSCGEMMotherboardME21::correlateLCTsGEM(), CSCGEMMotherboardME11::correlateLCTsGEM(), and CSCMotherboardME11::correlateLCTsME11().

◆ correlateLCTs()

void CSCMotherboard::correlateLCTs ( const CSCALCTDigi bestALCT,
const CSCALCTDigi secondALCT,
const CSCCLCTDigi bestCLCT,
const CSCCLCTDigi secondCLCT,
int  type 
)
protected

Definition at line 431 of file CSCMotherboard.cc.

432  {
433  CSCALCTDigi bestALCT = bALCT;
434  CSCALCTDigi secondALCT = sALCT;
435  CSCCLCTDigi bestCLCT = bCLCT;
436  CSCCLCTDigi secondCLCT = sCLCT;
437 
438  bool anodeBestValid = bestALCT.isValid();
439  bool anodeSecondValid = secondALCT.isValid();
440  bool cathodeBestValid = bestCLCT.isValid();
441  bool cathodeSecondValid = secondCLCT.isValid();
442 
443  if (anodeBestValid && !anodeSecondValid)
444  secondALCT = bestALCT;
445  if (!anodeBestValid && anodeSecondValid)
446  bestALCT = secondALCT;
447  if (cathodeBestValid && !cathodeSecondValid)
448  secondCLCT = bestCLCT;
449  if (!cathodeBestValid && cathodeSecondValid)
450  bestCLCT = secondCLCT;
451 
452  // ALCT-CLCT matching conditions are defined by "trig_enable" configuration
453  // parameters.
454  if ((alct_trig_enable && bestALCT.isValid()) || (clct_trig_enable && bestCLCT.isValid()) ||
455  (match_trig_enable && bestALCT.isValid() && bestCLCT.isValid())) {
456  const CSCCorrelatedLCTDigi& lct = constructLCTs(bestALCT, bestCLCT, type, 1);
457  int bx = lct.getBX();
458  if (bx >= 0 && bx < CSCConstants::MAX_LCT_TBINS) {
459  firstLCT[bx] = lct;
460  } else {
461  if (infoV > 0)
462  edm::LogWarning("CSCMotherboard|OutOfTimeLCT")
463  << "+++ Bx of first LCT candidate, " << bx << ", is not within the allowed range, [0-"
464  << CSCConstants::MAX_LCT_TBINS - 1 << "); skipping it... +++\n";
465  }
466  }
467 
468  if (((secondALCT != bestALCT) || (secondCLCT != bestCLCT)) &&
469  ((alct_trig_enable && secondALCT.isValid()) || (clct_trig_enable && secondCLCT.isValid()) ||
470  (match_trig_enable && secondALCT.isValid() && secondCLCT.isValid()))) {
471  const CSCCorrelatedLCTDigi& lct = constructLCTs(secondALCT, secondCLCT, type, 2);
472  int bx = lct.getBX();
473  if (bx >= 0 && bx < CSCConstants::MAX_LCT_TBINS) {
474  secondLCT[bx] = lct;
475  } else {
476  if (infoV > 0)
477  edm::LogWarning("CSCMotherboard|OutOfTimeLCT")
478  << "+++ Bx of second LCT candidate, " << bx << ", is not within the allowed range, [0-"
479  << CSCConstants::MAX_LCT_TBINS - 1 << "); skipping it... +++\n";
480  }
481  }
482 }

References alct_trig_enable, l1GtPatternGenerator_cfi::bx, clct_trig_enable, constructLCTs(), firstLCT, CSCCorrelatedLCTDigi::getBX(), CSCBaseboard::infoV, CSCALCTDigi::isValid(), CSCCLCTDigi::isValid(), match_trig_enable, CSCConstants::MAX_LCT_TBINS, and secondLCT.

Referenced by run().

◆ dumpConfigParams()

void CSCMotherboard::dumpConfigParams ( ) const
protected

Dump TMB/MPC configuration parameters.

Definition at line 683 of file CSCMotherboard.cc.

683  {
684  std::ostringstream strm;
685  strm << "\n";
686  strm << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
687  strm << "+ TMB configuration parameters: +\n";
688  strm << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
689  strm << " mpc_block_me1a [block/not block triggers which come from ME1/A] = " << mpc_block_me1a << "\n";
690  strm << " alct_trig_enable [allow ALCT-only triggers] = " << alct_trig_enable << "\n";
691  strm << " clct_trig_enable [allow CLCT-only triggers] = " << clct_trig_enable << "\n";
692  strm << " match_trig_enable [allow matched ALCT-CLCT triggers] = " << match_trig_enable << "\n";
693  strm << " match_trig_window_size [ALCT-CLCT match window width, in 25 ns] = " << match_trig_window_size << "\n";
694  strm << " tmb_l1a_window_size [L1Accept window width, in 25 ns bins] = " << tmb_l1a_window_size << "\n";
695  strm << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
696  LogDebug("CSCMotherboard") << strm.str();
697 }

References alct_trig_enable, clct_trig_enable, LogDebug, match_trig_enable, match_trig_window_size, mpc_block_me1a, and tmb_l1a_window_size.

Referenced by CSCMotherboard(), and setConfigParameters().

◆ encodeHighMultiplicityBits()

void CSCMotherboard::encodeHighMultiplicityBits ( unsigned  alctBits)
protected

Definition at line 711 of file CSCMotherboard.cc.

711  {
712  // encode the high multiplicity bits in the (O)TMB based on
713  // the high multiplicity bits from the ALCT processor
714  // draft version: simply rellay the ALCT bits.
715  // future versions may involve also bits from the CLCT processor
716  // this depends on memory constraints in the TMB FPGA
717  highMultiplicityBits_ = alctBits;
718 }

References highMultiplicityBits_.

Referenced by CSCGEMMotherboardME11::run(), CSCGEMMotherboardME21::run(), CSCMotherboardME11::run(), run(), and CSCUpgradeMotherboard::run().

◆ encodePattern()

unsigned int CSCMotherboard::encodePattern ( const int  clctPattern) const
protected

Definition at line 542 of file CSCMotherboard.cc.

542  {
543  const int kPatternBitWidth = 4;
544 
545  // In the TMB07 firmware, LCT pattern is just a 4-bit CLCT pattern.
546  unsigned int pattern = (abs(ptn) & ((1 << kPatternBitWidth) - 1));
547 
548  return pattern;
549 }

References funct::abs(), and topSingleLeptonDQM_PU_cfi::pattern.

Referenced by constructLCTs(), and CSCGEMMotherboard::constructLCTsGEM().

◆ findQuality()

CSCMotherboard::LCT_Quality CSCMotherboard::findQuality ( const CSCALCTDigi aLCT,
const CSCCLCTDigi cLCT 
) const
protected

Definition at line 552 of file CSCMotherboard.cc.

552  {
553  // Either ALCT or CLCT is invalid
554  if (!(aLCT.isValid()) || !(cLCT.isValid())) {
555  // No CLCT
556  if (aLCT.isValid() && !(cLCT.isValid()))
557  return LCT_Quality::NO_CLCT;
558 
559  // No ALCT
560  else if (!(aLCT.isValid()) && cLCT.isValid())
561  return LCT_Quality::NO_ALCT;
562 
563  // No ALCT and no CLCT
564  else
565  return LCT_Quality::INVALID;
566  }
567  // Both ALCT and CLCT are valid
568  else {
569  const int pattern(cLCT.getPattern());
570 
571  // Layer-trigger in CLCT
572  if (pattern == 1)
574 
575  // Multi-layer pattern in CLCT
576  else {
577  // ALCT quality is the number of layers hit minus 3.
578  const bool a4(aLCT.getQuality() >= 1);
579 
580  // CLCT quality is the number of layers hit.
581  const bool c4(cLCT.getQuality() >= 4);
582 
583  // quality = 4; "reserved for low-quality muons in future"
584 
585  // marginal anode and cathode
586  if (!a4 && !c4)
588 
589  // HQ anode, but marginal cathode
590  else if (a4 && !c4)
592 
593  // HQ cathode, but marginal anode
594  else if (!a4 && c4)
596 
597  // HQ muon, but accelerator ALCT
598  else if (a4 && c4) {
599  if (aLCT.getAccelerator())
601 
602  else {
603  // quality = 9; "reserved for HQ muons with future patterns
604  // quality = 10; "reserved for HQ muons with future patterns
605 
606  // High quality muons are determined by their CLCT pattern
607  if (pattern == 2 || pattern == 3)
609 
610  else if (pattern == 4 || pattern == 5)
612 
613  else if (pattern == 6 || pattern == 7)
615 
616  else if (pattern == 8 || pattern == 9)
618 
619  else if (pattern == 10)
621 
622  else {
623  edm::LogWarning("CSCMotherboard")
624  << "findQuality: Unexpected CLCT pattern id = " << pattern << " in " << theCSCName_;
625  return LCT_Quality::INVALID;
626  }
627  }
628  }
629  }
630  }
631  return LCT_Quality::INVALID;
632 }

References CLCT_LAYER_TRIGGER, CSCALCTDigi::getAccelerator(), CSCCLCTDigi::getPattern(), CSCALCTDigi::getQuality(), CSCCLCTDigi::getQuality(), HQ_ACCEL_ALCT, HQ_ANODE_MARGINAL_CATHODE, HQ_CATHODE_MARGINAL_ANODE, HQ_PATTERN_10, HQ_PATTERN_2_3, HQ_PATTERN_4_5, HQ_PATTERN_6_7, HQ_PATTERN_8_9, INVALID, CSCALCTDigi::isValid(), CSCCLCTDigi::isValid(), MARGINAL_ANODE_CATHODE, NO_ALCT, NO_CLCT, topSingleLeptonDQM_PU_cfi::pattern, and CSCBaseboard::theCSCName_.

Referenced by constructLCTs().

◆ findQualityRun3()

CSCMotherboard::LCT_QualityRun3 CSCMotherboard::findQualityRun3 ( const CSCALCTDigi aLCT,
const CSCCLCTDigi cLCT 
) const
protected

Definition at line 635 of file CSCMotherboard.cc.

636  {
637  // Run-3 definition
638  if (!(aLCT.isValid()) and !(cLCT.isValid())) {
640  }
641  // use number of layers on each as indicator
642  else {
643  bool a4 = (aLCT.getQuality() >= 1);
644  bool a5 = (aLCT.getQuality() >= 1);
645  bool a6 = (aLCT.getQuality() >= 1);
646 
647  bool c4 = (cLCT.getQuality() >= 4);
648  bool c5 = (cLCT.getQuality() >= 4);
649  bool c6 = (cLCT.getQuality() >= 4);
650  if (a6 or c6)
651  return LCT_QualityRun3::HighQ;
652  else if (a5 or c5)
653  return LCT_QualityRun3::MedQ;
654  else if (a4 or c4)
655  return LCT_QualityRun3::LowQ;
656  }
658 }

References CSCALCTDigi::getQuality(), CSCCLCTDigi::getQuality(), HighQ, INVALID, CSCALCTDigi::isValid(), CSCCLCTDigi::isValid(), LowQ, MedQ, and or.

Referenced by constructLCTs().

◆ getBXShiftedALCT()

CSCALCTDigi CSCMotherboard::getBXShiftedALCT ( const CSCALCTDigi aLCT) const
protected

Definition at line 699 of file CSCMotherboard.cc.

699  {
700  CSCALCTDigi aLCT_shifted = aLCT;
701  aLCT_shifted.setBX(aLCT_shifted.getBX() - (CSCConstants::LCT_CENTRAL_BX - tmb_l1a_window_size / 2));
702  return aLCT_shifted;
703 }

References CSCALCTDigi::getBX(), CSCConstants::LCT_CENTRAL_BX, CSCALCTDigi::setBX(), and tmb_l1a_window_size.

Referenced by constructLCTs(), and CSCGEMMotherboard::constructLCTsGEM().

◆ getBXShiftedCLCT()

CSCCLCTDigi CSCMotherboard::getBXShiftedCLCT ( const CSCCLCTDigi cLCT) const
protected

Definition at line 705 of file CSCMotherboard.cc.

705  {
706  CSCCLCTDigi cLCT_shifted = cLCT;
707  cLCT_shifted.setBX(cLCT_shifted.getBX() - CSCConstants::ALCT_CLCT_OFFSET);
708  return cLCT_shifted;
709 }

References CSCConstants::ALCT_CLCT_OFFSET, CSCCLCTDigi::getBX(), and CSCCLCTDigi::setBX().

Referenced by constructLCTs(), and CSCGEMMotherboard::constructLCTsGEM().

◆ getLCTs()

std::vector< CSCCorrelatedLCTDigi > CSCMotherboard::getLCTs ( ) const

Returns vector of all found correlated LCTs, if any.

Definition at line 416 of file CSCMotherboard.cc.

416  {
417  std::vector<CSCCorrelatedLCTDigi> tmpV;
418 
419  // Do not report LCTs found in ME1/A if mpc_block_me1/a is set.
420  for (int bx = 0; bx < CSCConstants::MAX_LCT_TBINS; bx++) {
421  if (firstLCT[bx].isValid())
423  tmpV.push_back(firstLCT[bx]);
424  if (secondLCT[bx].isValid())
426  tmpV.push_back(secondLCT[bx]);
427  }
428  return tmpV;
429 }

References l1GtPatternGenerator_cfi::bx, firstLCT, CSCBaseboard::isME11_, sistrip::SpyUtilities::isValid(), CSCConstants::MAX_HALF_STRIP_ME1B, CSCConstants::MAX_LCT_TBINS, mpc_block_me1a, and secondLCT.

Referenced by readoutLCTs().

◆ readoutLCTs()

std::vector< CSCCorrelatedLCTDigi > CSCMotherboard::readoutLCTs ( ) const
virtual

Returns vector of correlated LCTs in the read-out time window, if any.

Reimplemented in CSCUpgradeMotherboard, and CSCGEMMotherboardME21.

Definition at line 332 of file CSCMotherboard.cc.

332  {
333  std::vector<CSCCorrelatedLCTDigi> tmpV;
334 
335  // The start time of the L1A*LCT coincidence window should be related
336  // to the fifo_pretrig parameter, but I am not completely sure how.
337  // Just choose it such that the window is centered at bx=7. This may
338  // need further tweaking if the value of tmb_l1a_window_size changes.
339  //static int early_tbins = 4;
340 
341  // Empirical correction to match 2009 collision data (firmware change?)
342  int lct_bins = tmb_l1a_window_size;
343  int late_tbins = early_tbins + lct_bins;
344 
345  int ifois = 0;
346  if (ifois == 0) {
347  if (infoV >= 0 && early_tbins < 0) {
348  edm::LogWarning("CSCMotherboard|SuspiciousParameters")
349  << "+++ early_tbins = " << early_tbins << "; in-time LCTs are not getting read-out!!! +++"
350  << "\n";
351  }
352 
353  if (late_tbins > CSCConstants::MAX_LCT_TBINS - 1) {
354  if (infoV >= 0)
355  edm::LogWarning("CSCMotherboard|SuspiciousParameters")
356  << "+++ Allowed range of time bins, [0-" << late_tbins << "] exceeds max allowed, "
357  << CSCConstants::MAX_LCT_TBINS - 1 << " +++\n"
358  << "+++ Set late_tbins to max allowed +++\n";
359  late_tbins = CSCConstants::MAX_LCT_TBINS - 1;
360  }
361  ifois = 1;
362  }
363 
364  // Start from the vector of all found correlated LCTs and select
365  // those within the LCT*L1A coincidence window.
366  int bx_readout = -1;
367  const std::vector<CSCCorrelatedLCTDigi>& all_lcts = getLCTs();
368  for (auto plct = all_lcts.begin(); plct != all_lcts.end(); plct++) {
369  if (!plct->isValid())
370  continue;
371 
372  int bx = (*plct).getBX();
373  // Skip LCTs found too early relative to L1Accept.
374  if (bx <= early_tbins) {
375  if (infoV > 1)
376  LogDebug("CSCMotherboard") << " Do not report correlated LCT on key halfstrip " << plct->getStrip()
377  << " and key wire " << plct->getKeyWG() << ": found at bx " << bx
378  << ", whereas the earliest allowed bx is " << early_tbins + 1;
379  continue;
380  }
381 
382  // Skip LCTs found too late relative to L1Accept.
383  if (bx > late_tbins) {
384  if (infoV > 1)
385  LogDebug("CSCMotherboard") << " Do not report correlated LCT on key halfstrip " << plct->getStrip()
386  << " and key wire " << plct->getKeyWG() << ": found at bx " << bx
387  << ", whereas the latest allowed bx is " << late_tbins;
388  continue;
389  }
390 
391  // If (readout_earliest_2) take only LCTs in the earliest bx in the read-out window:
392  // in digi->raw step, LCTs have to be packed into the TMB header, and
393  // currently there is room just for two.
394  if (readout_earliest_2) {
395  if (bx_readout == -1 || bx == bx_readout) {
396  tmpV.push_back(*plct);
397  if (bx_readout == -1)
398  bx_readout = bx;
399  }
400  }
401  // if readout_earliest_2 == false, save all LCTs
402  else
403  tmpV.push_back(*plct);
404  }
405 
406  // do a final check on the LCTs in readout
407  qualityControl_->checkMultiplicityBX(tmpV);
408  for (const auto& lct : tmpV) {
409  qualityControl_->checkValid(lct);
410  }
411 
412  return tmpV;
413 }

References l1GtPatternGenerator_cfi::bx, early_tbins, getLCTs(), CSCBaseboard::infoV, LogDebug, CSCConstants::MAX_LCT_TBINS, qualityControl_, readout_earliest_2, and tmb_l1a_window_size.

Referenced by CSCTriggerPrimitivesBuilder::build().

◆ run()

void CSCMotherboard::run ( const CSCWireDigiCollection wiredc,
const CSCComparatorDigiCollection compdc 
)
virtual

Run function for normal usage. Runs cathode and anode LCT processors, takes results and correlates into CorrelatedLCT.

Reimplemented in CSCUpgradeMotherboard, and CSCMotherboardME11.

Definition at line 131 of file CSCMotherboard.cc.

131  {
132  // clear the ALCT/CLCT/LCT containers. Clear the processors
133  clear();
134 
135  // Check for existing processors
136  if (!(alctProc && clctProc)) {
137  edm::LogError("CSCMotherboard|SetupError") << "+++ run() called for non-existing ALCT/CLCT processor! +++ \n";
138  return;
139  }
140 
141  // set geometry
142  alctProc->setCSCGeometry(cscGeometry_);
143  clctProc->setCSCGeometry(cscGeometry_);
144 
145  alctV = alctProc->run(wiredc); // run anodeLCT
146  clctV = clctProc->run(compdc); // run cathodeLCT
147 
148  // if there are no ALCTs and no CLCTs, it does not make sense to run this TMB
149  if (alctV.empty() and clctV.empty())
150  return;
151 
152  // encode high multiplicity bits
153  unsigned alctBits = alctProc->getHighMultiplictyBits();
154  encodeHighMultiplicityBits(alctBits);
155 
156  // CLCT-centric matching
157  if (clct_to_alct) {
158  int used_alct_mask[20];
159  for (int a = 0; a < 20; ++a)
160  used_alct_mask[a] = 0;
161 
162  int bx_alct_matched = 0; // bx of last matched ALCT
163  for (int bx_clct = 0; bx_clct < CSCConstants::MAX_CLCT_TBINS; bx_clct++) {
164  // There should be at least one valid ALCT or CLCT for a
165  // correlated LCT to be formed. Decision on whether to reject
166  // non-complete LCTs (and if yes of which type) is made further
167  // upstream.
168  if (clctProc->getBestCLCT(bx_clct).isValid()) {
169  // Look for ALCTs within the match-time window. The window is
170  // centered at the CLCT bx; therefore, we make an assumption
171  // that anode and cathode hits are perfectly synchronized. This
172  // is always true for MC, but only an approximation when the
173  // data is analyzed (which works fairly good as long as wide
174  // windows are used). To get rid of this assumption, one would
175  // need to access "full BX" words, which are not readily
176  // available.
177  bool is_matched = false;
178  const int bx_alct_start = bx_clct - match_trig_window_size / 2 + CSCConstants::ALCT_CLCT_OFFSET;
179  const int bx_alct_stop = bx_clct + match_trig_window_size / 2 + CSCConstants::ALCT_CLCT_OFFSET;
180 
181  for (int bx_alct = bx_alct_start; bx_alct <= bx_alct_stop; bx_alct++) {
182  if (bx_alct < 0 || bx_alct >= CSCConstants::MAX_ALCT_TBINS)
183  continue;
184  // default: do not reuse ALCTs that were used with previous CLCTs
185  if (drop_used_alcts && used_alct_mask[bx_alct])
186  continue;
187  if (alctProc->getBestALCT(bx_alct).isValid()) {
188  if (infoV > 1)
189  LogTrace("CSCMotherboard") << "Successful CLCT-ALCT match: bx_clct = " << bx_clct << "; match window: ["
190  << bx_alct_start << "; " << bx_alct_stop << "]; bx_alct = " << bx_alct;
191  correlateLCTs(alctProc->getBestALCT(bx_alct),
192  alctProc->getSecondALCT(bx_alct),
193  clctProc->getBestCLCT(bx_clct),
194  clctProc->getSecondCLCT(bx_clct),
196  used_alct_mask[bx_alct] += 1;
197  is_matched = true;
198  bx_alct_matched = bx_alct;
199  break;
200  }
201  }
202  // No ALCT within the match time interval found: report CLCT-only LCT
203  // (use dummy ALCTs).
204  if (!is_matched and clct_trig_enable) {
205  if (infoV > 1)
206  LogTrace("CSCMotherboard") << "Unsuccessful CLCT-ALCT match (CLCT only): bx_clct = " << bx_clct
207  << " first ALCT " << clctProc->getBestCLCT(bx_clct) << "; match window: ["
208  << bx_alct_start << "; " << bx_alct_stop << "]";
209  correlateLCTs(alctProc->getBestALCT(bx_clct),
210  alctProc->getSecondALCT(bx_clct),
211  clctProc->getBestCLCT(bx_clct),
212  clctProc->getSecondCLCT(bx_clct),
214  }
215  }
216  // No valid CLCTs; attempt to make ALCT-only LCT. Use only ALCTs
217  // which have zeroth chance to be matched at later cathode times.
218  // (I am not entirely sure this perfectly matches the firmware logic.)
219  // Use dummy CLCTs.
220  else {
221  int bx_alct = bx_clct - match_trig_window_size / 2;
222  if (bx_alct >= 0 && bx_alct > bx_alct_matched) {
223  if (alctProc->getBestALCT(bx_alct).isValid() and alct_trig_enable) {
224  if (infoV > 1)
225  LogTrace("CSCMotherboard") << "Unsuccessful CLCT-ALCT match (ALCT only): bx_alct = " << bx_alct;
226  correlateLCTs(alctProc->getBestALCT(bx_alct),
227  alctProc->getSecondALCT(bx_alct),
228  clctProc->getBestCLCT(bx_clct),
229  clctProc->getSecondCLCT(bx_clct),
231  }
232  }
233  }
234  }
235  }
236  // ALCT-centric matching
237  else {
238  int used_clct_mask[20];
239  for (int a = 0; a < 20; ++a)
240  used_clct_mask[a] = 0;
241 
242  int bx_clct_matched = 0; // bx of last matched CLCT
243  for (int bx_alct = 0; bx_alct < CSCConstants::MAX_ALCT_TBINS; bx_alct++) {
244  // There should be at least one valid CLCT or ALCT for a
245  // correlated LCT to be formed. Decision on whether to reject
246  // non-complete LCTs (and if yes of which type) is made further
247  // upstream.
248  if (alctProc->getBestALCT(bx_alct).isValid()) {
249  // Look for CLCTs within the match-time window. The window is
250  // centered at the ALCT bx; therefore, we make an assumption
251  // that anode and cathode hits are perfectly synchronized. This
252  // is always true for MC, but only an approximation when the
253  // data is analyzed (which works fairly good as long as wide
254  // windows are used). To get rid of this assumption, one would
255  // need to access "full BX" words, which are not readily
256  // available.
257  bool is_matched = false;
258  const int bx_clct_start = bx_alct - match_trig_window_size / 2 - CSCConstants::ALCT_CLCT_OFFSET;
259  const int bx_clct_stop = bx_alct + match_trig_window_size / 2 - CSCConstants::ALCT_CLCT_OFFSET;
260 
261  for (int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++) {
262  if (bx_clct < 0 || bx_clct >= CSCConstants::MAX_CLCT_TBINS)
263  continue;
264  // default: do not reuse CLCTs that were used with previous ALCTs
265  if (drop_used_clcts && used_clct_mask[bx_clct])
266  continue;
267  if (clctProc->getBestCLCT(bx_clct).isValid()) {
268  if (infoV > 1)
269  LogTrace("CSCMotherboard") << "Successful ALCT-CLCT match: bx_alct = " << bx_alct << "; match window: ["
270  << bx_clct_start << "; " << bx_clct_stop << "]; bx_clct = " << bx_clct;
271  correlateLCTs(alctProc->getBestALCT(bx_alct),
272  alctProc->getSecondALCT(bx_alct),
273  clctProc->getBestCLCT(bx_clct),
274  clctProc->getSecondCLCT(bx_clct),
276  used_clct_mask[bx_clct] += 1;
277  is_matched = true;
278  bx_clct_matched = bx_clct;
279  break;
280  }
281  }
282  // No CLCT within the match time interval found: report ALCT-only LCT
283  // (use dummy CLCTs).
284  if (!is_matched) {
285  if (infoV > 1)
286  LogTrace("CSCMotherboard") << "Unsuccessful ALCT-CLCT match (ALCT only): bx_alct = " << bx_alct
287  << " first ALCT " << alctProc->getBestALCT(bx_alct) << "; match window: ["
288  << bx_clct_start << "; " << bx_clct_stop << "]";
289  if (alct_trig_enable)
290  correlateLCTs(alctProc->getBestALCT(bx_alct),
291  alctProc->getSecondALCT(bx_alct),
292  clctProc->getBestCLCT(bx_alct),
293  clctProc->getSecondCLCT(bx_alct),
295  }
296  }
297  // No valid ALCTs; attempt to make CLCT-only LCT. Use only CLCTs
298  // which have zeroth chance to be matched at later cathode times.
299  // (I am not entirely sure this perfectly matches the firmware logic.)
300  // Use dummy ALCTs.
301  else {
302  int bx_clct = bx_alct - match_trig_window_size / 2;
303  if (bx_clct >= 0 && bx_clct > bx_clct_matched) {
304  if (clctProc->getBestCLCT(bx_clct).isValid() and clct_trig_enable) {
305  if (infoV > 1)
306  LogTrace("CSCMotherboard") << "Unsuccessful ALCT-CLCT match (CLCT only): bx_clct = " << bx_clct;
307  correlateLCTs(alctProc->getBestALCT(bx_alct),
308  alctProc->getSecondALCT(bx_alct),
309  clctProc->getBestCLCT(bx_clct),
310  clctProc->getSecondCLCT(bx_clct),
312  }
313  }
314  }
315  }
316  }
317 
318  // Debug first and second LCTs
319  if (infoV > 0) {
320  for (int bx = 0; bx < CSCConstants::MAX_LCT_TBINS; bx++) {
321  if (firstLCT[bx].isValid())
322  LogDebug("CSCMotherboard") << firstLCT[bx];
323  if (secondLCT[bx].isValid())
324  LogDebug("CSCMotherboard") << secondLCT[bx];
325  }
326  }
327 }

References a, CSCConstants::ALCT_CLCT_OFFSET, alct_trig_enable, CSCCorrelatedLCTDigi::ALCTCLCT, CSCCorrelatedLCTDigi::ALCTONLY, alctProc, alctV, l1GtPatternGenerator_cfi::bx, clct_to_alct, clct_trig_enable, CSCCorrelatedLCTDigi::CLCTALCT, CSCCorrelatedLCTDigi::CLCTONLY, clctProc, clctV, clear(), correlateLCTs(), CSCBaseboard::cscGeometry_, drop_used_alcts, drop_used_clcts, encodeHighMultiplicityBits(), firstLCT, CSCBaseboard::infoV, sistrip::SpyUtilities::isValid(), LogDebug, LogTrace, match_trig_window_size, CSCConstants::MAX_ALCT_TBINS, CSCConstants::MAX_CLCT_TBINS, CSCConstants::MAX_LCT_TBINS, and secondLCT.

Referenced by CSCTriggerPrimitivesBuilder::build().

◆ setConfigParameters()

void CSCMotherboard::setConfigParameters ( const CSCDBL1TPParameters conf)

Set configuration parameters obtained via EventSetup mechanism.

Definition at line 108 of file CSCMotherboard.cc.

108  {
109  static std::atomic<bool> config_dumped{false};
110 
111  // Config. parameters for the TMB itself.
118 
119  // Config. paramteres for ALCT and CLCT processors.
120  alctProc->setConfigParameters(conf);
121  clctProc->setConfigParameters(conf);
122 
123  // Check and print configuration parameters.
125  if (!config_dumped) {
127  config_dumped = true;
128  }
129 }

References alct_trig_enable, alctProc, checkConfigParameters(), clct_trig_enable, clctProc, dumpConfigParams(), match_trig_enable, match_trig_window_size, mpc_block_me1a, tmb_l1a_window_size, CSCDBL1TPParameters::tmbAlctTrigEnable(), CSCDBL1TPParameters::tmbClctTrigEnable(), CSCDBL1TPParameters::tmbMatchTrigEnable(), CSCDBL1TPParameters::tmbMatchTrigWindowSize(), CSCDBL1TPParameters::tmbMpcBlockMe1a(), and CSCDBL1TPParameters::tmbTmbL1aWindowSize().

Member Data Documentation

◆ alct_trig_enable

unsigned int CSCMotherboard::alct_trig_enable
protected

◆ alctProc

std::unique_ptr<CSCAnodeLCTProcessor> CSCMotherboard::alctProc

◆ alctV

std::vector<CSCALCTDigi> CSCMotherboard::alctV
protected

◆ clct_to_alct

bool CSCMotherboard::clct_to_alct
protected

if true: use regular CLCT-to-ALCT matching in TMB if false: do ALCT-to-CLCT matching

Definition at line 115 of file CSCMotherboard.h.

Referenced by CSCMotherboard(), CSCUpgradeMotherboard::CSCUpgradeMotherboard(), CSCMotherboardME11::run(), and run().

◆ clct_trig_enable

unsigned int CSCMotherboard::clct_trig_enable
protected

◆ clctProc

std::unique_ptr<CSCCathodeLCTProcessor> CSCMotherboard::clctProc

◆ clctV

std::vector<CSCCLCTDigi> CSCMotherboard::clctV
protected

◆ def_alct_trig_enable

const unsigned int CSCMotherboard::def_alct_trig_enable = 0
staticprotected

Definition at line 123 of file CSCMotherboard.h.

Referenced by checkConfigParameters(), and CSCMotherboard().

◆ def_clct_trig_enable

const unsigned int CSCMotherboard::def_clct_trig_enable = 0
staticprotected

Definition at line 123 of file CSCMotherboard.h.

Referenced by checkConfigParameters(), and CSCMotherboard().

◆ def_match_trig_enable

const unsigned int CSCMotherboard::def_match_trig_enable = 1
staticprotected

Definition at line 124 of file CSCMotherboard.h.

Referenced by checkConfigParameters(), and CSCMotherboard().

◆ def_match_trig_window_size

const unsigned int CSCMotherboard::def_match_trig_window_size = 7
staticprotected

Definition at line 124 of file CSCMotherboard.h.

Referenced by checkConfigParameters(), and CSCMotherboard().

◆ def_mpc_block_me1a

const unsigned int CSCMotherboard::def_mpc_block_me1a = 1
staticprotected

Default values of configuration parameters.

Definition at line 122 of file CSCMotherboard.h.

Referenced by checkConfigParameters(), and CSCMotherboard().

◆ def_tmb_l1a_window_size

const unsigned int CSCMotherboard::def_tmb_l1a_window_size = 7
staticprotected

Definition at line 125 of file CSCMotherboard.h.

Referenced by checkConfigParameters(), and CSCMotherboard().

◆ drop_used_alcts

bool CSCMotherboard::drop_used_alcts
protected

Phase2: whether to not reuse ALCTs that were used by previous matching CLCTs

Definition at line 102 of file CSCMotherboard.h.

Referenced by CSCMotherboard(), CSCMotherboardME11::run(), and run().

◆ drop_used_clcts

bool CSCMotherboard::drop_used_clcts
protected

Phase2: whether to not reuse CLCTs that were used by previous matching ALCTs

Definition at line 105 of file CSCMotherboard.h.

Referenced by CSCMotherboard(), CSCUpgradeMotherboard::CSCUpgradeMotherboard(), CSCGEMMotherboardME21::run(), CSCGEMMotherboardME11::run(), CSCMotherboardME11::run(), run(), and CSCUpgradeMotherboard::run().

◆ early_tbins

int CSCMotherboard::early_tbins
protected

Phase2: separate handle for early time bins

Definition at line 108 of file CSCMotherboard.h.

Referenced by CSCMotherboard(), CSCMotherboardME11::readoutLCTs(), readoutLCTs(), and CSCGEMMotherboardME11::readoutLCTsME11().

◆ firstLCT

CSCCorrelatedLCTDigi CSCMotherboard::firstLCT[CSCConstants::MAX_LCT_TBINS]
protected

Container for first correlated LCT.

Definition at line 87 of file CSCMotherboard.h.

Referenced by clear(), correlateLCTs(), getLCTs(), and run().

◆ highMultiplicityBits_

unsigned int CSCMotherboard::highMultiplicityBits_
protected

◆ match_trig_enable

unsigned int CSCMotherboard::match_trig_enable
protected

◆ match_trig_window_size

unsigned int CSCMotherboard::match_trig_window_size
protected

◆ mpc_block_me1a

unsigned int CSCMotherboard::mpc_block_me1a
protected

◆ qualityControl_

std::unique_ptr<LCTQualityControl> CSCMotherboard::qualityControl_
protected

◆ readout_earliest_2

bool CSCMotherboard::readout_earliest_2
protected

Phase2: whether to readout only the earliest two LCTs in readout window

Definition at line 111 of file CSCMotherboard.h.

Referenced by CSCMotherboard(), CSCMotherboardME11::readoutLCTs(), readoutLCTs(), and CSCGEMMotherboardME11::readoutLCTsME11().

◆ secondLCT

CSCCorrelatedLCTDigi CSCMotherboard::secondLCT[CSCConstants::MAX_LCT_TBINS]
protected

Container for second correlated LCT.

Definition at line 90 of file CSCMotherboard.h.

Referenced by clear(), correlateLCTs(), CSCGEMMotherboard::correlateLCTsGEM(), getLCTs(), and run().

◆ tmb_l1a_window_size

unsigned int CSCMotherboard::tmb_l1a_window_size
protected

◆ useHighMultiplicityBits_

bool CSCMotherboard::useHighMultiplicityBits_
protected
CSCMotherboard::LCT_Quality::NO_CLCT
CSCALCTDigi::getBX
uint16_t getBX() const
return BX - five low bits of BXN counter tagged by the ALCT
Definition: CSCALCTDigi.h:73
CSCMotherboard::qualityControl_
std::unique_ptr< LCTQualityControl > qualityControl_
Definition: CSCMotherboard.h:128
CSCMotherboard::match_trig_window_size
unsigned int match_trig_window_size
Definition: CSCMotherboard.h:99
CSCMotherboard::def_clct_trig_enable
static const unsigned int def_clct_trig_enable
Definition: CSCMotherboard.h:123
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:65
CSCMotherboard::secondLCT
CSCCorrelatedLCTDigi secondLCT[CSCConstants::MAX_LCT_TBINS]
Definition: CSCMotherboard.h:90
CSCConstants::MAX_ALCT_TBINS
Definition: CSCConstants.h:64
CSCMotherboard::useHighMultiplicityBits_
bool useHighMultiplicityBits_
Definition: CSCMotherboard.h:119
CSCMotherboard::LCT_Quality::HQ_CATHODE_MARGINAL_ANODE
CSCBaseboard::tmbParams_
edm::ParameterSet tmbParams_
Definition: CSCBaseboard.h:72
CSCMotherboard::LCT_Quality::NO_ALCT
relativeConstraints.station
station
Definition: relativeConstraints.py:67
CSCMotherboard::alctProc
std::unique_ptr< CSCAnodeLCTProcessor > alctProc
Definition: CSCMotherboard.h:75
CSCCorrelatedLCTDigi::CLCTALCT
Definition: CSCCorrelatedLCTDigi.h:202
CSCMotherboard::correlateLCTs
void correlateLCTs(const CSCALCTDigi &bestALCT, const CSCALCTDigi &secondALCT, const CSCCLCTDigi &bestCLCT, const CSCCLCTDigi &secondCLCT, int type)
Definition: CSCMotherboard.cc:431
CSCMotherboard::LCT_Quality::CLCT_LAYER_TRIGGER
CSCDBL1TPParameters::tmbClctTrigEnable
unsigned int tmbClctTrigEnable() const
Definition: CSCDBL1TPParameters.h:80
CSCMotherboard::findQuality
LCT_Quality findQuality(const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT) const
Definition: CSCMotherboard.cc:552
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
CSCBaseboard::theCSCName_
std::string theCSCName_
Definition: CSCBaseboard.h:81
CSCConstants::LCT_CENTRAL_BX
Definition: CSCConstants.h:79
CSCMotherboard::def_alct_trig_enable
static const unsigned int def_alct_trig_enable
Definition: CSCMotherboard.h:123
CSCMotherboard::clear
void clear()
Definition: CSCMotherboard.cc:89
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:92
CSCConstants::ALCT_CLCT_OFFSET
Definition: CSCConstants.h:81
makeMuonMisalignmentScenario.endcap
endcap
Definition: makeMuonMisalignmentScenario.py:320
CSCDBL1TPParameters::tmbMpcBlockMe1a
unsigned int tmbMpcBlockMe1a() const
Definition: CSCDBL1TPParameters.h:74
CSCCLCTDigi::getKeyStrip
uint16_t getKeyStrip(const uint16_t n=2) const
Definition: CSCCLCTDigi.cc:131
CSCMotherboard::LCT_QualityRun3::LowQ
CSCCLCTDigi::getEighthStrip
bool getEighthStrip() const
get single eighth strip bit
Definition: CSCCLCTDigi.cc:165
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
CSCCLCTDigi
Definition: CSCCLCTDigi.h:17
CSCCorrelatedLCTDigi::ALCTCLCT
Definition: CSCCorrelatedLCTDigi.h:203
CSCMotherboard::checkConfigParameters
void checkConfigParameters()
Definition: CSCMotherboard.cc:660
quality
const uint32_t *__restrict__ Quality * quality
Definition: CAHitNtupletGeneratorKernelsImpl.h:109
CSCMotherboard::clctV
std::vector< CSCCLCTDigi > clctV
Definition: CSCMotherboard.h:84
CSCMotherboard::clctProc
std::unique_ptr< CSCCathodeLCTProcessor > clctProc
Definition: CSCMotherboard.h:78
CSCMotherboard::LCT_Quality::HQ_PATTERN_10
CSCALCTDigi::getKeyWG
uint16_t getKeyWG() const
return key wire group
Definition: CSCALCTDigi.h:67
CSCCLCTDigi::getQuality
uint16_t getQuality() const
return quality of a pattern (number of layers hit!)
Definition: CSCCLCTDigi.h:56
CSCCLCTDigi::getBend
uint16_t getBend() const
Definition: CSCCLCTDigi.h:93
CSCMotherboard::alctV
std::vector< CSCALCTDigi > alctV
Definition: CSCMotherboard.h:83
CSCMotherboard::constructLCTs
CSCCorrelatedLCTDigi constructLCTs(const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT, int type, int trknmb) const
Definition: CSCMotherboard.cc:486
CSCDBL1TPParameters::tmbMatchTrigWindowSize
unsigned int tmbMatchTrigWindowSize() const
Definition: CSCDBL1TPParameters.h:86
CSCCorrelatedLCTDigi::CLCTONLY
Definition: CSCCorrelatedLCTDigi.h:208
CSCMotherboard::LCT_Quality::INVALID
CSCMotherboard::dumpConfigParams
void dumpConfigParams() const
Definition: CSCMotherboard.cc:683
CSCMotherboard::def_tmb_l1a_window_size
static const unsigned int def_tmb_l1a_window_size
Definition: CSCMotherboard.h:125
CSCConstants::MAX_LCT_TBINS
Definition: CSCConstants.h:65
CSCMotherboard::LCT_Quality::HQ_PATTERN_4_5
sistrip::SpyUtilities::isValid
const bool isValid(const Frame &aFrame, const FrameQuality &aQuality, const uint16_t aExpectedPos)
Definition: SiStripSpyUtilities.cc:124
CSCALCTDigi::setBX
void setBX(const uint16_t BX)
set BX
Definition: CSCALCTDigi.h:76
CSCALCTDigi::getQuality
uint16_t getQuality() const
return quality of a pattern
Definition: CSCALCTDigi.h:46
CSCMotherboard::findQualityRun3
LCT_QualityRun3 findQualityRun3(const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT) const
Definition: CSCMotherboard.cc:635
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
a
double a
Definition: hdecay.h:119
CSCDBL1TPParameters::tmbMatchTrigEnable
unsigned int tmbMatchTrigEnable() const
Definition: CSCDBL1TPParameters.h:83
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
CSCMotherboard::LCT_Quality::HQ_PATTERN_8_9
CSCMotherboard::LCT_Quality::MARGINAL_ANODE_CATHODE
CSCMotherboard::getLCTs
std::vector< CSCCorrelatedLCTDigi > getLCTs() const
Definition: CSCMotherboard.cc:416
CSCConstants::MAX_HALF_STRIP_ME1B
Definition: CSCConstants.h:39
CSCBaseboard::CSCBaseboard
CSCBaseboard()
Definition: CSCBaseboard.cc:79
CSCCLCTDigi::getQuartStrip
bool getQuartStrip() const
get single quart strip bit
Definition: CSCCLCTDigi.cc:159
CSCMotherboard::early_tbins
int early_tbins
Definition: CSCMotherboard.h:108
CSCCLCTDigi::isValid
bool isValid() const
check CLCT validity (1 - valid CLCT)
Definition: CSCCLCTDigi.h:50
CSCDBL1TPParameters::tmbTmbL1aWindowSize
unsigned int tmbTmbL1aWindowSize() const
Definition: CSCDBL1TPParameters.h:89
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
CSCCorrelatedLCTDigi::clear
void clear()
clear this LCT
Definition: CSCCorrelatedLCTDigi.cc:49
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
CSCCLCTDigi::getSlope
uint16_t getSlope() const
return the slope
Definition: CSCCLCTDigi.cc:106
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:123
CSCMotherboard::encodeHighMultiplicityBits
void encodeHighMultiplicityBits(unsigned alctBits)
Definition: CSCMotherboard.cc:711
CSCMotherboard::getBXShiftedCLCT
CSCCLCTDigi getBXShiftedCLCT(const CSCCLCTDigi &) const
Definition: CSCMotherboard.cc:705
CSCMotherboard::tmb_l1a_window_size
unsigned int tmb_l1a_window_size
Definition: CSCMotherboard.h:99
CSCALCTDigi::getAccelerator
uint16_t getAccelerator() const
Definition: CSCALCTDigi.h:53
CSCMotherboard::LCT_Quality::HQ_PATTERN_2_3
CSCMotherboard::LCT_Quality::HQ_ACCEL_ALCT
CSCMotherboard::highMultiplicityBits_
unsigned int highMultiplicityBits_
Definition: CSCMotherboard.h:118
CSCMotherboard::LCT_QualityRun3::HighQ
CSCALCTDigi
Definition: CSCALCTDigi.h:17
CSCMotherboard::alct_trig_enable
unsigned int alct_trig_enable
Definition: CSCMotherboard.h:98
CSCConstants::MAX_CLCT_TBINS
Definition: CSCConstants.h:63
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:45
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
CSCCLCTDigi::setBX
void setBX(const uint16_t bx)
set bx
Definition: CSCCLCTDigi.h:129
CSCMotherboard::encodePattern
unsigned int encodePattern(const int clctPattern) const
Definition: CSCMotherboard.cc:542
CSCCorrelatedLCTDigi::ALCTONLY
Definition: CSCCorrelatedLCTDigi.h:209
CSCMotherboard::def_match_trig_window_size
static const unsigned int def_match_trig_window_size
Definition: CSCMotherboard.h:124
CSCALCTDigi::isValid
bool isValid() const
check ALCT validity (1 - valid ALCT)
Definition: CSCALCTDigi.h:40
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:122
CSCMotherboard::LCT_Quality::HQ_ANODE_MARGINAL_CATHODE
CSCMotherboard::def_match_trig_enable
static const unsigned int def_match_trig_enable
Definition: CSCMotherboard.h:124
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
CSCMotherboard::match_trig_enable
unsigned int match_trig_enable
Definition: CSCMotherboard.h:98
CSCMotherboard::getBXShiftedALCT
CSCALCTDigi getBXShiftedALCT(const CSCALCTDigi &) const
Definition: CSCMotherboard.cc:699
CSCCLCTDigi::getPattern
uint16_t getPattern() const
return pattern
Definition: CSCCLCTDigi.cc:88
CSCCorrelatedLCTDigi::getBX
uint16_t getBX() const
return BX
Definition: CSCCorrelatedLCTDigi.h:118
CSCMotherboard::LCT_QualityRun3::INVALID
CSCCorrelatedLCTDigi::setType
void setType(int type)
Definition: CSCCorrelatedLCTDigi.h:214
CSCMotherboard::LCT_QualityRun3::MedQ
CSCBaseboard::isME11_
bool isME11_
Definition: CSCBaseboard.h:51
CSCMotherboard::firstLCT
CSCCorrelatedLCTDigi firstLCT[CSCConstants::MAX_LCT_TBINS]
Definition: CSCMotherboard.h:87
CSCCorrelatedLCTDigi
Definition: CSCCorrelatedLCTDigi.h:19
CSCBaseboard::runCCLUT_
bool runCCLUT_
Definition: CSCBaseboard.h:102
CSCMotherboard::LCT_Quality::HQ_PATTERN_6_7
CSCBaseboard::infoV
int infoV
Definition: CSCBaseboard.h:63
CSCCLCTDigi::getRun3Pattern
uint16_t getRun3Pattern() const
return pattern
Definition: CSCCLCTDigi.cc:94