File indexing completed on 2024-04-06 12:04:26
0001 #ifndef L1GCTINTERNETSUM_H
0002 #define L1GCTINTERNETSUM_H
0003
0004 #include <ostream>
0005 #include <string>
0006 #include <cstdint>
0007
0008
0009
0010
0011
0012
0013
0014 class L1GctInternEtSum {
0015 public:
0016
0017 enum L1GctInternEtSumType {
0018 null,
0019 jet_tot_et,
0020 jet_tot_ht,
0021 jet_miss_et,
0022 total_et_or_ht,
0023 miss_etx_or_ety
0024 };
0025
0026 enum numberOfBits {
0027 kTotEtOrHtNBits = 12,
0028 kJetMissEtNBits = 17,
0029 kMissExOrEyNBits = 20,
0030 kTotEtOrHtOFlowBit = 1 << kTotEtOrHtNBits,
0031 kJetMissEtOFlowBit = 1 << kJetMissEtNBits,
0032 kMissExOrEyOFlowBit = 1 << kMissExOrEyNBits,
0033 kTotEtOrHtMaxValue = kTotEtOrHtOFlowBit - 1,
0034 kJetMissEtMaxValue = kJetMissEtOFlowBit - 1,
0035 kMissExOrEyMaxValue = kMissExOrEyOFlowBit - 1,
0036 kTotEtOrHtRawCtorMask = kTotEtOrHtOFlowBit | kTotEtOrHtMaxValue,
0037 kJetMissEtRawCtorMask = kJetMissEtOFlowBit | kJetMissEtMaxValue,
0038 kMissExOrEyRawCtorMask = kMissExOrEyOFlowBit | kMissExOrEyMaxValue
0039 };
0040
0041
0042 L1GctInternEtSum();
0043
0044
0045 L1GctInternEtSum(uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t et, uint8_t oflow);
0046
0047
0048 ~L1GctInternEtSum();
0049
0050
0051 static L1GctInternEtSum fromJetTotEt(uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);
0052
0053 static L1GctInternEtSum fromJetTotHt(uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);
0054
0055 static L1GctInternEtSum fromJetMissEt(uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);
0056
0057 static L1GctInternEtSum fromTotalEtOrHt(uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);
0058
0059 static L1GctInternEtSum fromMissEtxOrEty(uint16_t capBlock, uint16_t capIndex, int16_t bx, uint32_t data);
0060
0061 static L1GctInternEtSum fromEmulatorJetTotEt(unsigned totEt, bool overFlow, int16_t bx);
0062
0063 static L1GctInternEtSum fromEmulatorJetTotHt(unsigned totHt, bool overFlow, int16_t bx);
0064
0065 static L1GctInternEtSum fromEmulatorJetMissEt(int missEtxOrEty, bool overFlow, int16_t bx);
0066
0067 static L1GctInternEtSum fromEmulatorTotalEtOrHt(unsigned totEtOrHt, bool overFlow, int16_t bx);
0068
0069 static L1GctInternEtSum fromEmulatorMissEtxOrEty(int missEtxOrEty, bool overFlow, int16_t bx);
0070
0071
0072
0073
0074 L1GctInternEtSum::L1GctInternEtSumType type() const { return type_; }
0075
0076
0077 uint16_t capBlock() const { return capBlock_; }
0078
0079
0080 uint16_t capIndex() const { return capIndex_; }
0081
0082
0083 int16_t bx() const { return bx_; }
0084
0085
0086 bool empty() const { return (data_ == 0); }
0087
0088
0089
0090
0091 uint32_t raw() const { return data_; }
0092
0093
0094 uint32_t value() const { return data_ & 0x7fffffff; }
0095
0096
0097 uint32_t et() const { return value(); }
0098
0099
0100 uint32_t count() const { return value(); }
0101
0102
0103 uint8_t oflow() const { return (data_ >> 31) & 0x1; }
0104
0105
0106
0107
0108 void setCapBlock(uint16_t capBlock) { capBlock_ = capBlock; }
0109
0110
0111 void setCapIndex(uint16_t capIndex) { capIndex_ = capIndex; }
0112
0113
0114 void setBx(uint16_t bx) { bx_ = bx; }
0115
0116
0117 void setType(L1GctInternEtSumType type) { type_ = type; }
0118
0119
0120 void setValue(uint32_t val);
0121
0122
0123 void setEt(uint32_t et);
0124
0125
0126 void setCount(uint32_t count);
0127
0128
0129 void setOflow(uint8_t oflow);
0130
0131
0132
0133
0134 bool operator==(const L1GctInternEtSum& c) const;
0135
0136
0137 bool operator!=(const L1GctInternEtSum& c) const { return !(*this == c); }
0138
0139 private:
0140
0141 L1GctInternEtSumType type_;
0142
0143
0144 uint16_t capBlock_;
0145 uint16_t capIndex_;
0146 int16_t bx_;
0147
0148
0149 uint32_t data_;
0150 };
0151
0152 std::ostream& operator<<(std::ostream& s, const L1GctInternEtSum& c);
0153
0154 #endif