00001 #ifndef DATAFORMATS_HCALDETID_HCALELECTRONICSID_H 00002 #define DATAFORMATS_HCALDETID_HCALELECTRONICSID_H 1 00003 00004 #include <string> 00005 #include <ostream> 00006 00018 class HcalElectronicsId { 00019 public: 00021 HcalElectronicsId(); 00023 HcalElectronicsId(uint32_t); 00025 HcalElectronicsId(int fiberChan, int fiberIndex, int spigot, int dccid); 00027 HcalElectronicsId(int slbChan, int slbSite, int spigot, int dccid, int crate, int slot, int tb); 00028 uint32_t operator()() { return hcalElectronicsId_; } 00029 00030 uint32_t rawId() const { return hcalElectronicsId_; } 00031 00032 bool isTriggerChainId() const { return (hcalElectronicsId_&0x02000000)!=0; } 00033 00035 void setHTR(int crate, int slot, int tb); 00036 00038 int fiberChanId() const { return hcalElectronicsId_&0x3; } 00040 int fiberIndex() const { return ((hcalElectronicsId_>>2)&0x7)+1; } 00042 int slbChannelIndex() const { return hcalElectronicsId_&0x3; } 00044 int slbSiteNumber() const { return ((hcalElectronicsId_>>2)&0x7); } 00045 00047 std::string slbChannelCode() const; 00048 00050 int htrChanId() const { return (fiberChanId()+1)+((fiberIndex()-1)*3); } 00052 int spigot() const { return (hcalElectronicsId_>>5)&0xF; } 00054 int dccid() const { return (hcalElectronicsId_>>9)&0x1F; } 00056 int htrSlot() const { return (hcalElectronicsId_>>14)&0x1F; } 00058 int htrTopBottom() const { return (hcalElectronicsId_>>19)&0x1; } 00060 int readoutVMECrateId() const { return (hcalElectronicsId_>>20)&0x1F; } 00062 int linearIndex() const { return (hcalElectronicsId_)&0x3FFF; } 00063 00064 static const int maxLinearIndex = 0x3FFF; 00065 static const int maxDCCId = 31; 00066 00068 int operator==(const HcalElectronicsId& id) const { return id.hcalElectronicsId_==hcalElectronicsId_; } 00070 int operator!=(const HcalElectronicsId& id) const { return id.hcalElectronicsId_!=hcalElectronicsId_; } 00072 int operator<(const HcalElectronicsId& id) const { return hcalElectronicsId_<id.hcalElectronicsId_; } 00073 00074 private: 00075 uint32_t hcalElectronicsId_; 00076 }; 00077 00078 std::ostream& operator<<(std::ostream&,const HcalElectronicsId&); 00079 00080 00081 #endif