File indexing completed on 2024-04-06 12:10:31
0001 #ifndef DTRawToDigi_DTROChainCoding_h
0002 #define DTRawToDigi_DTROChainCoding_h
0003
0004
0005
0006
0007
0008
0009
0010 #include <DataFormats/DTDigi/interface/DTDDUWords.h>
0011
0012 #include <vector>
0013 #include <cstdint>
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 class DTROChainCoding {
0029 public:
0030
0031
0032 DTROChainCoding() : code(0) {}
0033
0034 DTROChainCoding(const int& ddu, const int& ros, const int& rob, const int& tdc, const int& channel) {
0035 code = ddu << DDU_SHIFT | ros << ROS_SHIFT | rob << ROB_SHIFT | tdc << TDC_SHIFT | channel << CHANNEL_SHIFT;
0036 }
0037
0038 DTROChainCoding(uint32_t code_) : code(code_) {}
0039
0040
0041 virtual ~DTROChainCoding() {}
0042
0043
0044 inline void setCode(const uint32_t& code_) { code = code_; }
0045 inline void setChain(const int& ddu, const int& ros, const int& rob, const int& tdc, const int& channel) {
0046 code = ddu << DDU_SHIFT | ros << ROS_SHIFT | rob << ROB_SHIFT | tdc << TDC_SHIFT | channel << CHANNEL_SHIFT;
0047 }
0048
0049
0050 inline void setDDU(const int& ID) { code = (code & (~(DDU_MASK << DDU_SHIFT))) | (ID << DDU_SHIFT); }
0051 inline void setROS(const int& ID) { code = (code & (~(ROS_MASK << ROS_SHIFT))) | (ID << ROS_SHIFT); }
0052 inline void setROB(const int& ID) { code = (code & (~(ROB_MASK << ROB_SHIFT))) | (ID << ROB_SHIFT); }
0053 inline void setTDC(const int& ID) { code = (code & (~(TDC_MASK << TDC_SHIFT))) | (ID << TDC_SHIFT); }
0054 inline void setChannel(const int& ID) { code = (code & (~(CHANNEL_MASK << CHANNEL_SHIFT))) | (ID << CHANNEL_SHIFT); }
0055
0056
0057 inline uint32_t getCode() const { return code; }
0058 inline int getDDU() const { return (code >> DDU_SHIFT) & DDU_MASK; }
0059 inline int getDDUID() const { return (code >> DDU_SHIFT); }
0060 inline int getROS() const { return (code >> ROS_SHIFT) & ROS_MASK; }
0061 inline int getROSID() const { return (code >> ROS_SHIFT); }
0062 inline int getROB() const { return (code >> ROB_SHIFT) & ROB_MASK; }
0063 inline int getROBID() const { return (code >> ROB_SHIFT); }
0064 inline int getTDC() const { return (code >> TDC_SHIFT) & TDC_MASK; }
0065 inline int getTDCID() const { return (code >> TDC_SHIFT); }
0066 inline int getChannel() const { return (code >> CHANNEL_SHIFT) & CHANNEL_MASK; }
0067 inline int getChannelID() const { return (code >> CHANNEL_SHIFT); }
0068
0069
0070 inline int getSC() const { return (code >> ROS_SHIFT) & ROS_MASK; }
0071 inline int getSCID() const { return (code >> ROS_SHIFT); }
0072
0073 private:
0074 uint32_t code;
0075
0076
0077
0078
0079 static const int DDU_SHIFT = 16;
0080 static const int DDU_MASK = 0x3FF;
0081
0082 static const int ROS_SHIFT = 12;
0083 static const int ROS_MASK = 0xF;
0084
0085 static const int ROB_SHIFT = 7;
0086 static const int ROB_MASK = 0x1F;
0087
0088 static const int TDC_SHIFT = 5;
0089 static const int TDC_MASK = 0x3;
0090
0091 static const int CHANNEL_SHIFT = 0;
0092 static const int CHANNEL_MASK = 0x1F;
0093 };
0094
0095 #endif