File indexing completed on 2024-09-10 02:58:37
0001 #ifndef DATAFORMATS_HCALDETID_CASTORELECTRONICSID_H
0002 #define DATAFORMATS_HCALDETID_CASTORELECTRONICSID_H 1
0003
0004 #include <string>
0005 #include <ostream>
0006 #include <cstdint>
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 class CastorElectronicsId {
0021 public:
0022
0023 CastorElectronicsId();
0024 CastorElectronicsId(uint32_t);
0025 CastorElectronicsId(int fiberChan, int fiberIndex, int spigot, int dccid);
0026 CastorElectronicsId(int slbChan, int slbSite, int spigot, int dccid, int crate, int slot, int tb);
0027 uint32_t operator()() { return castorElectronicsId_; }
0028
0029 uint32_t rawId() const { return castorElectronicsId_; }
0030
0031 bool isTriggerChainId() const { return (castorElectronicsId_ & 0x02000000) != 0; }
0032
0033 void setHTR(int crate, int slot, int tb);
0034 int fiberChanId() const { return castorElectronicsId_ & 0x3; }
0035 int fiberIndex() const { return ((castorElectronicsId_ >> 2) & 0xf) + 1; }
0036 int slbChannelIndex() const { return castorElectronicsId_ & 0x3; }
0037 int slbSiteNumber() const { return ((castorElectronicsId_ >> 2) & 0xf) + 1; }
0038
0039 std::string slbChannelCode() const;
0040
0041 int htrChanId() const { return (fiberChanId() + 1) + ((fiberIndex() - 1) * 3); }
0042 int spigot() const { return (castorElectronicsId_ >> 6) & 0xF; }
0043 int dccid() const { return (castorElectronicsId_ >> 10) & 0xF; }
0044 int htrSlot() const { return (castorElectronicsId_ >> 14) & 0x1F; }
0045 int htrTopBottom() const { return (castorElectronicsId_ >> 19) & 0x1; }
0046 int readoutVMECrateId() const { return (castorElectronicsId_ >> 20) & 0x1F; }
0047 int linearIndex() const { return (castorElectronicsId_) & 0x3FFF; }
0048
0049 static const int maxLinearIndex = 0x3FFF;
0050 static const int maxDCCId = 15;
0051
0052
0053 int operator==(const CastorElectronicsId& id) const { return id.castorElectronicsId_ == castorElectronicsId_; }
0054 int operator!=(const CastorElectronicsId& id) const { return id.castorElectronicsId_ != castorElectronicsId_; }
0055
0056 int operator<(const CastorElectronicsId& id) const { return castorElectronicsId_ < id.castorElectronicsId_; }
0057
0058 private:
0059 uint32_t castorElectronicsId_;
0060 };
0061
0062 std::ostream& operator<<(std::ostream&, const CastorElectronicsId&);
0063
0064 #endif