File indexing completed on 2024-04-06 12:03:58
0001 #ifndef DataFormats_CSCDigi_CSCCLCTDigi_h
0002 #define DataFormats_CSCDigi_CSCCLCTDigi_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <cstdint>
0013 #include <iosfwd>
0014 #include <vector>
0015 #include <limits>
0016
0017 class CSCCLCTDigi {
0018 public:
0019 typedef std::vector<std::vector<uint16_t>> ComparatorContainer;
0020
0021 enum class Version { Legacy = 0, Run3 };
0022
0023 enum CLCTBXMask { kBXDataMask = 0x3 };
0024
0025
0026 CSCCLCTDigi(const uint16_t valid,
0027 const uint16_t quality,
0028 const uint16_t pattern,
0029 const uint16_t striptype,
0030 const uint16_t bend,
0031 const uint16_t strip,
0032 const uint16_t cfeb,
0033 const uint16_t bx,
0034 const uint16_t trknmb = 0,
0035 const uint16_t fullbx = 0,
0036 const int16_t compCode = -1,
0037 const Version version = Version::Legacy,
0038 const bool run3_quart_strip_bit = false,
0039 const bool run3_eighth_strip_bit = false,
0040 const uint16_t run3_pattern = 0,
0041 const uint16_t run3_slope = 0);
0042
0043
0044 CSCCLCTDigi();
0045
0046
0047 void clear();
0048
0049
0050 bool isValid() const { return valid_; }
0051
0052
0053 void setValid(const uint16_t valid) { valid_ = valid; }
0054
0055
0056 uint16_t getQuality() const { return quality_; }
0057
0058
0059 void setQuality(const uint16_t quality) { quality_ = quality; }
0060
0061
0062 uint16_t getPattern() const { return pattern_; }
0063
0064
0065 void setPattern(const uint16_t pattern) { pattern_ = pattern; }
0066
0067
0068 uint16_t getRun3Pattern() const { return run3_pattern_; }
0069
0070
0071 void setRun3Pattern(const uint16_t pattern) { run3_pattern_ = pattern; }
0072
0073
0074 uint16_t getSlope() const { return run3_slope_; }
0075
0076
0077 void setSlope(const uint16_t slope) { run3_slope_ = slope; }
0078
0079
0080
0081
0082 float getFractionalSlope() const;
0083
0084
0085 uint16_t getStripType() const { return striptype_; }
0086
0087
0088 void setStripType(const uint16_t stripType) { striptype_ = stripType; }
0089
0090
0091
0092
0093 uint16_t getBend() const { return bend_; }
0094
0095
0096 void setBend(const uint16_t bend) { bend_ = bend; }
0097
0098
0099 uint16_t getStrip() const { return strip_; }
0100
0101
0102 void setStrip(const uint16_t strip) { strip_ = strip; }
0103
0104
0105 void setQuartStripBit(const bool quartStripBit) { run3_quart_strip_bit_ = quartStripBit; }
0106
0107
0108 bool getQuartStripBit() const { return run3_quart_strip_bit_; }
0109
0110
0111 void setEighthStripBit(const bool eighthStripBit) { run3_eighth_strip_bit_ = eighthStripBit; }
0112
0113
0114 bool getEighthStripBit() const { return run3_eighth_strip_bit_; }
0115
0116
0117 uint16_t getCFEB() const { return cfeb_; }
0118
0119
0120 void setCFEB(const uint16_t cfeb) { cfeb_ = cfeb; }
0121
0122
0123 uint16_t getBX() const { return bx_; }
0124
0125
0126 uint16_t getBXData() const { return bx_ & kBXDataMask; }
0127
0128
0129 void setBX(const uint16_t bx) { bx_ = bx; }
0130
0131
0132 uint16_t getTrknmb() const { return trknmb_; }
0133
0134
0135
0136
0137
0138
0139
0140 uint16_t getKeyStrip(const uint16_t n = 2) const;
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159 float getFractionalStrip(const uint16_t n = 2) const;
0160
0161
0162 void setTrknmb(const uint16_t number) { trknmb_ = number; }
0163
0164
0165 uint16_t getFullBX() const { return fullbx_; }
0166
0167
0168 void setFullBX(const uint16_t fullbx) { fullbx_ = fullbx; }
0169
0170
0171 int16_t getCompCode() const { return (isRun3() ? compCode_ : -1); }
0172
0173 void setCompCode(const int16_t code) { compCode_ = code; }
0174
0175
0176 const ComparatorContainer& getHits() const { return hits_.empty() ? emptyContainer() : hits_; }
0177
0178 void setHits(const ComparatorContainer& hits) { hits_ = hits; }
0179
0180
0181
0182
0183 bool operator>(const CSCCLCTDigi&) const;
0184
0185
0186 bool operator==(const CSCCLCTDigi&) const;
0187
0188
0189 bool operator!=(const CSCCLCTDigi&) const;
0190
0191
0192 void print() const;
0193
0194
0195 bool isRun3() const { return version_ == Version::Run3; }
0196
0197 void setRun3(bool isRun3);
0198
0199 private:
0200 static const ComparatorContainer& emptyContainer();
0201 uint16_t valid_;
0202 uint16_t quality_;
0203
0204
0205
0206
0207 uint16_t pattern_;
0208 uint16_t striptype_;
0209
0210
0211 uint16_t bend_;
0212
0213 uint16_t strip_;
0214
0215 uint16_t cfeb_;
0216 uint16_t bx_;
0217 uint16_t trknmb_;
0218 uint16_t fullbx_;
0219
0220
0221
0222
0223
0224 int16_t compCode_;
0225
0226 bool run3_quart_strip_bit_;
0227
0228 bool run3_eighth_strip_bit_;
0229
0230 uint16_t run3_pattern_;
0231
0232 uint16_t run3_slope_;
0233
0234
0235 ComparatorContainer hits_;
0236 Version version_;
0237 };
0238
0239 std::ostream& operator<<(std::ostream& o, const CSCCLCTDigi& digi);
0240
0241 #endif