File indexing completed on 2024-04-06 12:03:59
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigi.h"
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011 #include <iostream>
0012
0013
0014 CSCCorrelatedLCTDigi::CSCCorrelatedLCTDigi(const uint16_t itrknmb,
0015 const uint16_t ivalid,
0016 const uint16_t iquality,
0017 const uint16_t ikeywire,
0018 const uint16_t istrip,
0019 const uint16_t ipattern,
0020 const uint16_t ibend,
0021 const uint16_t ibx,
0022 const uint16_t impclink,
0023 const uint16_t ibx0,
0024 const uint16_t isyncErr,
0025 const uint16_t icscID,
0026 const Version version,
0027 const bool run3_quart_strip_bit,
0028 const bool run3_eighth_strip_bit,
0029 const uint16_t run3_pattern,
0030 const uint16_t run3_slope,
0031 const int type)
0032 : trknmb(itrknmb),
0033 valid(ivalid),
0034 quality(iquality),
0035 keywire(ikeywire),
0036 strip(istrip),
0037 pattern(ipattern),
0038 bend(ibend),
0039 bx(ibx),
0040 mpclink(impclink),
0041 bx0(ibx0),
0042 syncErr(isyncErr),
0043 cscID(icscID),
0044 hmt(0),
0045 run3_quart_strip_bit_(run3_quart_strip_bit),
0046 run3_eighth_strip_bit_(run3_eighth_strip_bit),
0047 run3_pattern_(run3_pattern),
0048 run3_slope_(run3_slope),
0049 type_(type),
0050 version_(version) {}
0051
0052
0053 CSCCorrelatedLCTDigi::CSCCorrelatedLCTDigi() {
0054 clear();
0055 }
0056
0057
0058 void CSCCorrelatedLCTDigi::clear() {
0059 trknmb = 0;
0060 valid = 0;
0061 quality = 0;
0062 keywire = 0;
0063 strip = 0;
0064 pattern = 0;
0065 bend = 0;
0066 bx = 0;
0067 mpclink = 0;
0068 bx0 = 0;
0069 syncErr = 0;
0070 cscID = 0;
0071 hmt = 0;
0072 version_ = Version::Legacy;
0073
0074 run3_quart_strip_bit_ = false;
0075 run3_eighth_strip_bit_ = false;
0076 run3_pattern_ = 0;
0077 run3_slope_ = 0;
0078
0079 type_ = 1;
0080 alct_.clear();
0081 clct_.clear();
0082 gem1_ = GEMPadDigi();
0083 gem2_ = GEMPadDigi();
0084 }
0085
0086 uint16_t CSCCorrelatedLCTDigi::getStrip(const uint16_t n) const {
0087
0088 if (n == 8) {
0089 return 2 * getStrip(4) + getEighthStripBit();
0090 }
0091
0092 else if (n == 4) {
0093 return 2 * getStrip(2) + getQuartStripBit();
0094 }
0095
0096 else {
0097 return strip;
0098 }
0099 }
0100
0101
0102 float CSCCorrelatedLCTDigi::getFractionalSlope() const {
0103 if (isRun3()) {
0104
0105 float slope[17] = {
0106 0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0, 1.125, 1.25, 1.375, 1.5, 1.625, 1.75, 2.0, 2.5};
0107 return (2 * getBend() - 1) * slope[getSlope()];
0108 } else {
0109 int slope[11] = {0, 0, -8, 8, -6, 6, -4, 4, -2, 2, 0};
0110 return float(slope[getPattern()] / 5.);
0111 }
0112 }
0113
0114
0115 float CSCCorrelatedLCTDigi::getFractionalStrip(const uint16_t n) const {
0116 if (n == 8) {
0117 return 0.125f * (getStrip(n) + 0.5);
0118 } else if (n == 4) {
0119 return 0.25f * (getStrip(n) + 0.5);
0120 } else {
0121 return 0.5f * (getStrip(n) + 0.5);
0122 }
0123 }
0124
0125 uint16_t CSCCorrelatedLCTDigi::getCLCTPattern() const {
0126 return (isRun3() ? std::numeric_limits<uint16_t>::max() : (pattern & 0xF));
0127 }
0128
0129 uint16_t CSCCorrelatedLCTDigi::getHMT() const { return (isRun3() ? hmt : std::numeric_limits<uint16_t>::max()); }
0130
0131 void CSCCorrelatedLCTDigi::setHMT(const uint16_t h) { hmt = isRun3() ? h : std::numeric_limits<uint16_t>::max(); }
0132
0133 void CSCCorrelatedLCTDigi::setRun3(const bool isRun3) { version_ = isRun3 ? Version::Run3 : Version::Legacy; }
0134
0135
0136 bool CSCCorrelatedLCTDigi::operator==(const CSCCorrelatedLCTDigi& rhs) const {
0137 return ((trknmb == rhs.trknmb) && (quality == rhs.quality) && (keywire == rhs.keywire) && (strip == rhs.strip) &&
0138 (pattern == rhs.pattern) && (bend == rhs.bend) && (bx == rhs.bx) && (valid == rhs.valid) &&
0139 (mpclink == rhs.mpclink));
0140 }
0141
0142
0143 void CSCCorrelatedLCTDigi::print() const {
0144 if (isValid()) {
0145 edm::LogVerbatim("CSCDigi") << "CSC LCT #" << getTrknmb() << ": Valid = " << isValid()
0146 << " Quality = " << getQuality() << " Key Wire = " << getKeyWG()
0147 << " Strip = " << getStrip() << " Pattern = " << getPattern()
0148 << " Bend = " << ((getBend() == 0) ? 'L' : 'R') << " BX = " << getBX()
0149 << " MPC Link = " << getMPCLink() << " Type (SIM) = " << getType();
0150 } else {
0151 edm::LogVerbatim("CSCDigi") << "Not a valid correlated LCT.";
0152 }
0153 }
0154
0155 std::ostream& operator<<(std::ostream& o, const CSCCorrelatedLCTDigi& digi) {
0156
0157 if (digi.isRun3())
0158 return o << "CSC LCT #" << digi.getTrknmb() << ": Valid = " << digi.isValid() << " BX = " << digi.getBX()
0159 << " Run-2 Pattern = " << digi.getPattern() << " Run-3 Pattern = " << digi.getRun3Pattern()
0160 << " Quality = " << digi.getQuality() << " Bend = " << digi.getBend() << " Slope = " << digi.getSlope()
0161 << "\n"
0162 << " KeyHalfStrip = " << digi.getStrip() << " KeyQuartStrip = " << digi.getStrip(4)
0163 << " KeyEighthStrip = " << digi.getStrip(8) << " KeyWireGroup = " << digi.getKeyWG()
0164 << " Type (SIM) = " << digi.getType() << " MPC Link = " << digi.getMPCLink();
0165 else
0166 return o << "CSC LCT #" << digi.getTrknmb() << ": Valid = " << digi.isValid() << " BX = " << digi.getBX()
0167 << " Pattern = " << digi.getPattern() << " Quality = " << digi.getQuality() << " Bend = " << digi.getBend()
0168 << "\n"
0169 << " KeyHalfStrip = " << digi.getStrip() << " KeyWireGroup = " << digi.getKeyWG()
0170 << " Type (SIM) = " << digi.getType() << " MPC Link = " << digi.getMPCLink();
0171 }