CMS 3D CMS Logo

CSCCLCTDigi.cc
Go to the documentation of this file.
1 
11 #include <iomanip>
12 #include <iostream>
13 
15 
18  const uint16_t quality,
19  const uint16_t pattern,
20  const uint16_t striptype,
21  const uint16_t bend,
22  const uint16_t strip,
23  const uint16_t cfeb,
24  const uint16_t bx,
25  const uint16_t trknmb,
26  const uint16_t fullbx,
27  const int16_t compCode,
28  const Version version)
29  : valid_(valid),
30  quality_(quality),
31  pattern_(pattern),
32  striptype_(striptype),
33  bend_(bend),
34  strip_(strip),
35  cfeb_(cfeb),
36  bx_(bx),
37  trknmb_(trknmb),
38  fullbx_(fullbx),
39  compCode_(compCode),
40  version_(version) {
41  hits_.resize(NUM_LAYERS);
42  for (auto& p : hits_) {
43  p.resize(CLCT_PATTERN_WIDTH);
44  }
45 }
46 
49  : valid_(0),
50  quality_(0),
51  pattern_(0),
52  striptype_(0),
53  bend_(0),
54  strip_(0),
55  cfeb_(0),
56  bx_(0),
57  trknmb_(0),
58  fullbx_(0),
59  compCode_(-1),
60  version_(Version::Legacy) {
61  hits_.resize(NUM_LAYERS);
62  for (auto& p : hits_) {
63  p.resize(CLCT_PATTERN_WIDTH);
64  }
65 }
66 
69  valid_ = 0;
70  quality_ = 0;
71  pattern_ = 0;
72  striptype_ = 0;
73  bend_ = 0;
74  strip_ = 0;
75  cfeb_ = 0;
76  bx_ = 0;
77  trknmb_ = 0;
78  fullbx_ = 0;
79  compCode_ = -1;
80  hits_.clear();
81  hits_.resize(NUM_LAYERS);
82  for (auto& p : hits_) {
83  p.resize(CLCT_PATTERN_WIDTH);
84  }
85 }
86 
87 uint16_t CSCCLCTDigi::getKeyStrip(const uint16_t n) const {
88  // 10-bit case for strip data word
89  if (compCode_ != -1 and n == 8) {
90  return getKeyStrip(4) * 2 + getEightStrip();
91  }
92  // 9-bit case for strip data word
93  else if (compCode_ != -1 and n == 4) {
94  return getKeyStrip(2) * 2 + getQuartStrip();
95  }
96  // 8-bit case for strip data word (all other cases)
97  else {
98  return cfeb_ * 32 + getStrip();
99  }
100 }
101 
102 uint16_t CSCCLCTDigi::getStrip() const { return strip_ & kHalfStripMask; }
103 
105 
107 
108 void CSCCLCTDigi::setQuartStrip(const bool quartStrip) {
109  // clear the old value
111 
112  // set the new value
113  strip_ |= quartStrip << kQuartStripShift;
114 }
115 
116 void CSCCLCTDigi::setEightStrip(const bool eightStrip) {
117  // clear the old value
119 
120  // set the new value
121  strip_ |= eightStrip << kEightStripShift;
122 }
123 
125 
126 bool CSCCLCTDigi::operator>(const CSCCLCTDigi& rhs) const {
127  // Several versions of CLCT sorting criteria were used before 2008.
128  // They are available in CMSSW versions prior to 3_1_0; here we only keep
129  // the latest one, used in TMB-07 firmware (w/o distrips).
130  bool returnValue = false;
131 
132  uint16_t quality1 = getQuality();
133  uint16_t quality2 = rhs.getQuality();
134 
135  // Run-3 case
136  if (version_ == Version::Run3) {
137  // Better-quality CLCTs are preferred.
138  // If two qualities are equal, smaller bending is preferred;
139  // left- and right-bend patterns are considered to be of
140  // the same quality. This corresponds to "pattern" being smaller!!!
141  // If both qualities and pattern id's are the same, lower keystrip
142  // is preferred.
143  if ((quality1 > quality2) || (quality1 == quality2 && getPattern() < rhs.getPattern()) ||
144  (quality1 == quality2 && getPattern() == rhs.getPattern() && getKeyStrip() < rhs.getKeyStrip())) {
145  returnValue = true;
146  }
147  }
148  // Legacy case:
149  else {
150  // The bend-direction bit pid[0] is ignored (left and right bends have
151  // equal quality).
152  uint16_t pattern1 = getPattern() & 14;
153  uint16_t pattern2 = rhs.getPattern() & 14;
154 
155  // Better-quality CLCTs are preferred.
156  // If two qualities are equal, larger pattern id (i.e., straighter pattern)
157  // is preferred; left- and right-bend patterns are considered to be of
158  // the same quality.
159  // If both qualities and pattern id's are the same, lower keystrip
160  // is preferred.
161  if ((quality1 > quality2) || (quality1 == quality2 && pattern1 > pattern2) ||
162  (quality1 == quality2 && pattern1 == pattern2 && getKeyStrip() < rhs.getKeyStrip())) {
163  returnValue = true;
164  }
165  }
166  return returnValue;
167 }
168 
169 bool CSCCLCTDigi::operator==(const CSCCLCTDigi& rhs) const {
170  // Exact equality.
171  bool returnValue = false;
172  if (isValid() == rhs.isValid() && getQuality() == rhs.getQuality() && getPattern() == rhs.getPattern() &&
173  getKeyStrip() == rhs.getKeyStrip() && getStripType() == rhs.getStripType() && getBend() == getBend() &&
174  getBX() == rhs.getBX() && getCompCode() == rhs.getCompCode()) {
175  returnValue = true;
176  }
177  return returnValue;
178 }
179 
180 bool CSCCLCTDigi::operator!=(const CSCCLCTDigi& rhs) const {
181  // True if == is false.
182  bool returnValue = true;
183  if ((*this) == rhs)
184  returnValue = false;
185  return returnValue;
186 }
187 
189 void CSCCLCTDigi::print() const {
190  if (isValid()) {
191  char stripType = (getStripType() == 0) ? 'D' : 'H';
192  char bend = (getBend() == 0) ? 'L' : 'R';
193 
194  edm::LogVerbatim("CSCDigi") << " CSC CLCT #" << std::setw(1) << getTrknmb() << ": Valid = " << std::setw(1)
195  << isValid() << " Key Strip = " << std::setw(3) << getKeyStrip()
196  << " Strip = " << std::setw(2) << getStrip() << " Quality = " << std::setw(1)
197  << getQuality() << " Pattern = " << std::setw(1) << getPattern()
198  << " Bend = " << std::setw(1) << bend << " Strip type = " << std::setw(1) << stripType
199  << " CFEB ID = " << std::setw(1) << getCFEB() << " BX = " << std::setw(1) << getBX()
200  << " Full BX= " << std::setw(1) << getFullBX() << " Comp Code= " << std::setw(1)
201  << getCompCode();
202  } else {
203  edm::LogVerbatim("CSCDigi") << "Not a valid Cathode LCT.";
204  }
205 }
206 
207 std::ostream& operator<<(std::ostream& o, const CSCCLCTDigi& digi) {
208  return o << "CSC CLCT #" << digi.getTrknmb() << ": Valid = " << digi.isValid() << " Quality = " << digi.getQuality()
209  << " Pattern = " << digi.getPattern() << " StripType = " << digi.getStripType()
210  << " Bend = " << digi.getBend() << " Strip = " << digi.getStrip() << " KeyStrip = " << digi.getKeyStrip()
211  << " CFEB = " << digi.getCFEB() << " BX = " << digi.getBX() << " Comp Code " << digi.getCompCode();
212 }
CSCCLCTDigi::striptype_
uint16_t striptype_
Definition: CSCCLCTDigi.h:159
CSCCLCTDigi::strip_
uint16_t strip_
Definition: CSCCLCTDigi.h:167
MessageLogger.h
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
CSCCLCTDigi::getTrknmb
uint16_t getTrknmb() const
return track number (1,2)
Definition: CSCCLCTDigi.h:105
CSCCLCTDigi::operator!=
bool operator!=(const CSCCLCTDigi &) const
True if the preceding one is false.
Definition: CSCCLCTDigi.cc:180
CSCCLCTDigi::kEightStripMask
Definition: CSCCLCTDigi.h:21
digitizers_cfi.strip
strip
Definition: digitizers_cfi.py:19
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
CSCCLCTDigi::getCompCode
int16_t getCompCode() const
Definition: CSCCLCTDigi.h:125
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
CSCCLCTDigi::setEightStrip
void setEightStrip(const bool eightStrip)
set single eight strip bit
Definition: CSCCLCTDigi.cc:116
CSCCLCTDigi::valid_
uint16_t valid_
Definition: CSCCLCTDigi.h:154
CSCCLCTDigi::setQuartStrip
void setQuartStrip(const bool quartStrip)
set single quart strip bit
Definition: CSCCLCTDigi.cc:108
CSCCLCTDigi
Definition: CSCCLCTDigi.h:17
validateGeometry_cfg.valid
valid
Definition: validateGeometry_cfg.py:21
EcalTangentSkim_cfg.o
o
Definition: EcalTangentSkim_cfg.py:36
CLCT_PATTERN_WIDTH
Definition: CSCCLCTDigi.cc:14
CSCCLCTDigi::pattern_
uint16_t pattern_
Definition: CSCCLCTDigi.h:158
sistrip::valid_
static const uint16_t valid_
Definition: Constants.h:17
CSCCLCTDigi::hits_
ComparatorContainer hits_
Definition: CSCCLCTDigi.h:178
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
CSCCLCTDigi::isRun3
bool isRun3() const
Distinguish Run-1/2 from Run-3.
Definition: CSCCLCTDigi.h:149
CSCCLCTDigi::bend_
uint16_t bend_
Definition: CSCCLCTDigi.h:162
CSCCLCTDigi::getKeyStrip
uint16_t getKeyStrip(uint16_t n=2) const
Definition: CSCCLCTDigi.cc:87
CSCCLCTDigi::fullbx_
uint16_t fullbx_
Definition: CSCCLCTDigi.h:172
CSCCLCTDigi::setRun3
void setRun3(bool isRun3)
Definition: CSCCLCTDigi.cc:124
CSCCLCTDigi::getFullBX
uint16_t getFullBX() const
return 12-bit full BX.
Definition: CSCCLCTDigi.h:119
CSCCLCTDigi::operator>
bool operator>(const CSCCLCTDigi &) const
Definition: CSCCLCTDigi.cc:126
CSCCLCTDigi::bx_
uint16_t bx_
Definition: CSCCLCTDigi.h:170
CSCCLCTDigi::CSCCLCTDigi
CSCCLCTDigi()
default
Definition: CSCCLCTDigi.cc:48
CSCCLCTDigi::getStrip
uint16_t getStrip() const
return halfstrip that goes from 0 to 31 in a (D)CFEB
Definition: CSCCLCTDigi.cc:102
CSCCLCTDigi::cfeb_
uint16_t cfeb_
Definition: CSCCLCTDigi.h:169
CSCCLCTDigi::Version::Run3
CSCCLCTDigi::getEightStrip
bool getEightStrip() const
get single eight strip bit
Definition: CSCCLCTDigi.cc:106
CSCCLCTDigi::getStripType
uint16_t getStripType() const
return striptype
Definition: CSCCLCTDigi.h:63
CSCCLCTDigi::getQuartStrip
bool getQuartStrip() const
get single quart strip bit
Definition: CSCCLCTDigi.cc:104
CSCCLCTDigi::isValid
bool isValid() const
check CLCT validity (1 - valid CLCT)
Definition: CSCCLCTDigi.h:45
edm::LogVerbatim
Definition: MessageLogger.h:297
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
CSCCLCTDigi::getBX
uint16_t getBX() const
return BX
Definition: CSCCLCTDigi.h:99
CSCCLCTDigi::kEightStripShift
Definition: CSCCLCTDigi.h:22
CSCCLCTDigi::compCode_
int16_t compCode_
Definition: CSCCLCTDigi.h:176
Pattern_Info
Pattern_Info
Definition: CSCCLCTDigi.cc:14
qcdUeDQM_cfi.quality
quality
Definition: qcdUeDQM_cfi.py:31
trklet::bend
double bend(double r, double rinv, double stripPitch)
Definition: Util.h:160
CSCCLCTDigi::clear
void clear()
clear this CLCT
Definition: CSCCLCTDigi.cc:68
CSCCLCTDigi::kQuartStripShift
Definition: CSCCLCTDigi.h:22
CSCCLCTDigi.h
NUM_LAYERS
Definition: CSCCLCTDigi.cc:14
CSCCLCTDigi::quality_
uint16_t quality_
Definition: CSCCLCTDigi.h:155
CSCCLCTDigi::Version::Legacy
CSCCLCTDigi::getCFEB
uint16_t getCFEB() const
return Key CFEB ID
Definition: CSCCLCTDigi.h:93
CSCCLCTDigi::kQuartStripMask
Definition: CSCCLCTDigi.h:21
CSCCLCTDigi::trknmb_
uint16_t trknmb_
Definition: CSCCLCTDigi.h:171
CSCCLCTDigi::print
void print() const
Print content of digi.
Definition: CSCCLCTDigi.cc:189
CSCCLCTDigi::operator==
bool operator==(const CSCCLCTDigi &) const
True if the two LCTs have exactly the same members (except the number).
Definition: CSCCLCTDigi.cc:169
CSCCLCTDigi::getPattern
uint16_t getPattern() const
return pattern
Definition: CSCCLCTDigi.h:57
CSCCLCTDigi::version_
Version version_
Definition: CSCCLCTDigi.h:180
CSCCLCTDigi::kHalfStripMask
Definition: CSCCLCTDigi.h:21
Version
Definition: InitMessage.h:39
BeamSplash_cfg.version
version
Definition: BeamSplash_cfg.py:45
operator<<
std::ostream & operator<<(std::ostream &o, const CSCCLCTDigi &digi)
Definition: CSCCLCTDigi.cc:207