File indexing completed on 2024-04-06 12:03:58
0001 #ifndef DataFormats_CSCDigi_CSCCorrelatedLCTDigi_h
0002 #define DataFormats_CSCDigi_CSCCorrelatedLCTDigi_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <cstdint>
0013 #include <iosfwd>
0014 #include <limits>
0015 #include "DataFormats/CSCDigi/interface/CSCALCTDigi.h"
0016 #include "DataFormats/CSCDigi/interface/CSCCLCTDigi.h"
0017 #include "DataFormats/GEMDigi/interface/GEMPadDigi.h"
0018
0019 class CSCCorrelatedLCTDigi {
0020 public:
0021 enum class Version { Legacy = 0, Run3 };
0022
0023 enum LCTBXMask { kBXDataMask = 0x1 };
0024
0025
0026 enum Type {
0027 CLCTALCT,
0028 ALCTCLCT,
0029 ALCTCLCTGEM,
0030 ALCTCLCT2GEM,
0031 ALCT2GEM,
0032 CLCT2GEM,
0033 CLCTONLY,
0034 ALCTONLY
0035 };
0036
0037
0038 CSCCorrelatedLCTDigi(const uint16_t trknmb,
0039 const uint16_t valid,
0040 const uint16_t quality,
0041 const uint16_t keywire,
0042 const uint16_t strip,
0043 const uint16_t pattern,
0044 const uint16_t bend,
0045 const uint16_t bx,
0046 const uint16_t mpclink = 0,
0047 const uint16_t bx0 = 0,
0048 const uint16_t syncErr = 0,
0049 const uint16_t cscID = 0,
0050 const Version version = Version::Legacy,
0051 const bool run3_quart_strip_bit = false,
0052 const bool run3_eighth_strip_bit = false,
0053 const uint16_t run3_pattern = 0,
0054 const uint16_t run3_slope = 0,
0055 const int type = ALCTCLCT);
0056
0057
0058 CSCCorrelatedLCTDigi();
0059
0060
0061 void clear();
0062
0063
0064 uint16_t getTrknmb() const { return trknmb; }
0065
0066
0067 bool isValid() const { return valid; }
0068
0069
0070 uint16_t getQuality() const { return quality; }
0071
0072
0073 uint16_t getKeyWG() const { return keywire; }
0074
0075
0076 uint16_t getStrip(uint16_t n = 2) const;
0077
0078
0079 void setQuartStripBit(const bool quartStripBit) { run3_quart_strip_bit_ = quartStripBit; }
0080
0081
0082 bool getQuartStripBit() const { return run3_quart_strip_bit_; }
0083
0084
0085 void setEighthStripBit(const bool eighthStripBit) { run3_eighth_strip_bit_ = eighthStripBit; }
0086
0087
0088 bool getEighthStripBit() const { return run3_eighth_strip_bit_; }
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107 float getFractionalStrip(uint16_t n = 2) const;
0108
0109
0110 uint16_t getPattern() const { return pattern; }
0111
0112
0113 uint16_t getRun3Pattern() const { return run3_pattern_; }
0114
0115
0116 uint16_t getSlope() const { return run3_slope_; }
0117
0118
0119
0120
0121 float getFractionalSlope() const;
0122
0123
0124
0125
0126 uint16_t getBend() const { return bend; }
0127
0128
0129 uint16_t getBX() const { return bx; }
0130
0131
0132 uint16_t getBXData() const { return bx & kBXDataMask; }
0133
0134
0135
0136 uint16_t getCLCTPattern() const;
0137
0138
0139 uint16_t getStripType() const { return ((pattern & 0x8) >> 3); }
0140
0141
0142 uint16_t getMPCLink() const { return mpclink; }
0143
0144 uint16_t getCSCID() const { return cscID; }
0145 uint16_t getBX0() const { return bx0; }
0146 uint16_t getSyncErr() const { return syncErr; }
0147
0148
0149
0150
0151
0152 uint16_t getHMT() const;
0153
0154
0155 void setTrknmb(const uint16_t number) { trknmb = number; }
0156
0157
0158 void setMPCLink(const uint16_t& link) { mpclink = link; }
0159
0160
0161 void print() const;
0162
0163
0164 bool operator==(const CSCCorrelatedLCTDigi&) const;
0165 bool operator!=(const CSCCorrelatedLCTDigi& rhs) const { return !(this->operator==(rhs)); }
0166
0167
0168 void setWireGroup(const uint16_t wiregroup) { keywire = wiregroup; }
0169
0170
0171 void setQuality(const uint16_t q) { quality = q; }
0172
0173
0174 void setValid(const uint16_t v) { valid = v; }
0175
0176
0177 void setStrip(const uint16_t s) { strip = s; }
0178
0179
0180 void setPattern(const uint16_t p) { pattern = p; }
0181
0182
0183 void setRun3Pattern(const uint16_t pattern) { run3_pattern_ = pattern; }
0184
0185
0186 void setSlope(const uint16_t slope) { run3_slope_ = slope; }
0187
0188
0189 void setBend(const uint16_t b) { bend = b; }
0190
0191
0192 void setBX(const uint16_t b) { bx = b; }
0193
0194
0195 void setBX0(const uint16_t b) { bx0 = b; }
0196
0197
0198 void setSyncErr(const uint16_t s) { syncErr = s; }
0199
0200
0201 void setCSCID(const uint16_t c) { cscID = c; }
0202
0203
0204 void setHMT(const uint16_t h);
0205
0206
0207 bool isRun3() const { return version_ == Version::Run3; }
0208
0209 void setRun3(const bool isRun3);
0210
0211 int getType() const { return type_; }
0212
0213 void setType(int type) { type_ = type; }
0214
0215 void setALCT(const CSCALCTDigi& alct) { alct_ = alct; }
0216 void setCLCT(const CSCCLCTDigi& clct) { clct_ = clct; }
0217 void setGEM1(const GEMPadDigi& gem) { gem1_ = gem; }
0218 void setGEM2(const GEMPadDigi& gem) { gem2_ = gem; }
0219 const CSCALCTDigi& getALCT() const { return alct_; }
0220 const CSCCLCTDigi& getCLCT() const { return clct_; }
0221 const GEMPadDigi& getGEM1() const { return gem1_; }
0222 const GEMPadDigi& getGEM2() const { return gem2_; }
0223
0224 private:
0225
0226
0227
0228
0229
0230 uint16_t trknmb;
0231
0232
0233 uint16_t valid;
0234
0235
0236
0237 uint16_t quality;
0238
0239 uint16_t keywire;
0240
0241 uint16_t strip;
0242
0243
0244
0245
0246 uint16_t pattern;
0247
0248
0249 uint16_t bend;
0250 uint16_t bx;
0251 uint16_t mpclink;
0252 uint16_t bx0;
0253
0254 uint16_t syncErr;
0255
0256 uint16_t cscID;
0257
0258
0259
0260
0261
0262
0263
0264 uint16_t hmt;
0265
0266 bool run3_quart_strip_bit_;
0267
0268 bool run3_eighth_strip_bit_;
0269
0270 uint16_t run3_pattern_;
0271
0272 uint16_t run3_slope_;
0273
0274
0275 int type_;
0276
0277 CSCALCTDigi alct_;
0278 CSCCLCTDigi clct_;
0279 GEMPadDigi gem1_;
0280 GEMPadDigi gem2_;
0281
0282 Version version_;
0283 };
0284
0285 std::ostream& operator<<(std::ostream& o, const CSCCorrelatedLCTDigi& digi);
0286
0287 #endif