File indexing completed on 2024-04-06 12:02:40
0001 #include "CondFormats/SiStripObjects/interface/FedChannelConnection.h"
0002 #include "DataFormats/SiStripCommon/interface/SiStripFedKey.h"
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004 #include <iomanip>
0005 #include <string>
0006
0007 using namespace sistrip;
0008
0009
0010
0011 FedChannelConnection::FedChannelConnection(const uint16_t& fec_crate,
0012 const uint16_t& fec_slot,
0013 const uint16_t& fec_ring,
0014 const uint16_t& ccu_addr,
0015 const uint16_t& ccu_chan,
0016 const uint16_t& apv0,
0017 const uint16_t& apv1,
0018 const uint32_t& dcu_id,
0019 const uint32_t& det_id,
0020 const uint16_t& pairs,
0021 const uint16_t& fed_id,
0022 const uint16_t& fed_ch,
0023 const uint16_t& length,
0024 const bool& dcu,
0025 const bool& pll,
0026 const bool& mux,
0027 const bool& lld)
0028 : fecCrate_(fec_crate),
0029 fecSlot_(fec_slot),
0030 fecRing_(fec_ring),
0031 ccuAddr_(ccu_addr),
0032 ccuChan_(ccu_chan),
0033 apv0_(apv0),
0034 apv1_(apv1),
0035 dcuId_(dcu_id),
0036 detId_(det_id),
0037 nApvPairs_(pairs),
0038 fedCrate_(sistrip::invalid_),
0039 fedSlot_(sistrip::invalid_),
0040 fedId_(fed_id),
0041 fedCh_(fed_ch),
0042 length_(length),
0043 dcu0x00_(dcu),
0044 mux0x43_(mux),
0045 pll0x44_(pll),
0046 lld0x60_(lld) {
0047 ;
0048 }
0049
0050
0051
0052 FedChannelConnection::FedChannelConnection()
0053 : fecCrate_(sistrip::invalid_),
0054 fecSlot_(sistrip::invalid_),
0055 fecRing_(sistrip::invalid_),
0056 ccuAddr_(sistrip::invalid_),
0057 ccuChan_(sistrip::invalid_),
0058 apv0_(sistrip::invalid_),
0059 apv1_(sistrip::invalid_),
0060 dcuId_(sistrip::invalid32_),
0061 detId_(sistrip::invalid32_),
0062 nApvPairs_(sistrip::invalid_),
0063 fedCrate_(sistrip::invalid_),
0064 fedSlot_(sistrip::invalid_),
0065 fedId_(sistrip::invalid_),
0066 fedCh_(sistrip::invalid_),
0067 length_(sistrip::invalid_),
0068 dcu0x00_(false),
0069 mux0x43_(false),
0070 pll0x44_(false),
0071 lld0x60_(false) {
0072 ;
0073 }
0074
0075
0076
0077 bool operator<(const FedChannelConnection& conn1, const FedChannelConnection& conn2) {
0078 if (conn1.fedId() < conn2.fedId()) {
0079 return true;
0080 } else if (conn1.fedId() == conn2.fedId()) {
0081 return (conn1.fedCh() < conn2.fedCh() ? true : false);
0082 } else {
0083 return false;
0084 }
0085 }
0086
0087
0088
0089 const uint16_t& FedChannelConnection::i2cAddr(const uint16_t& apv) const {
0090 if (apv == 0) {
0091 return apv0_;
0092 } else if (apv == 1) {
0093 return apv1_;
0094 } else {
0095 if (edm::isDebugEnabled()) {
0096 edm::LogWarning(mlCabling_) << "[FedChannelConnection::" << __func__ << "]"
0097 << " Unexpected APV I2C address!" << apv;
0098 }
0099 static const uint16_t i2c_addr = 0;
0100 return i2c_addr;
0101 }
0102 }
0103
0104
0105
0106 uint16_t FedChannelConnection::lldChannel() const {
0107 if (apv0_ == 32 || apv1_ == 33) {
0108 return 1;
0109 } else if (apv0_ == 34 || apv1_ == 35) {
0110 return 2;
0111 } else if (apv0_ == 36 || apv1_ == 37) {
0112 return 3;
0113 } else if (apv0_ != sistrip::invalid_ || apv1_ != sistrip::invalid_) {
0114 if (edm::isDebugEnabled()) {
0115 edm::LogWarning(mlCabling_) << "[FedChannelConnection::" << __func__ << "]"
0116 << " Unexpected APV I2C addresses!"
0117 << " Apv0: " << apv0_ << " Apv1: " << apv1_;
0118 }
0119 }
0120 return sistrip::invalid_;
0121 }
0122
0123
0124
0125 uint16_t FedChannelConnection::apvPairNumberDebug() const {
0126 if (nApvPairs_ == 2) {
0127 if (apv0_ == 32 || apv1_ == 33) {
0128 return 0;
0129 } else if (apv0_ == 36 || apv1_ == 37) {
0130 return 1;
0131 } else {
0132 if (edm::isDebugEnabled()) {
0133 edm::LogWarning(mlCabling_) << "[FedChannelConnection::" << __func__ << "]"
0134 << " APV I2C addresses (" << apv0_ << "/" << apv1_ << ") are incompatible with"
0135 << " number of APV pairs (" << nApvPairs_ << ") found for this module!";
0136 }
0137 }
0138 } else if (nApvPairs_ == 3) {
0139 if (apv0_ == 32 || apv1_ == 33) {
0140 return 0;
0141 } else if (apv0_ == 34 || apv1_ == 35) {
0142 return 1;
0143 } else if (apv0_ == 36 || apv1_ == 37) {
0144 return 2;
0145 } else {
0146 if (edm::isDebugEnabled()) {
0147 edm::LogWarning(mlCabling_) << "[FedChannelConnection::" << __func__ << "]"
0148 << " APV I2C addresses (" << apv0_ << "/" << apv1_ << ") are incompatible with"
0149 << " number of APV pairs (" << nApvPairs_ << ") found for this module!";
0150 }
0151 }
0152 } else {
0153 if (edm::isDebugEnabled()) {
0154 edm::LogWarning(mlCabling_) << "[FedChannelConnection::" << __func__ << "]"
0155 << " Unexpected number of APV pairs: " << nApvPairs_;
0156 }
0157 }
0158 return sistrip::invalid_;
0159 }
0160
0161
0162
0163 void FedChannelConnection::print(std::stringstream& ss) const {
0164 ss << " [FedChannelConnection::" << __func__ << "]" << std::endl
0165 << " FedCrate/FedSlot/FedId/FeUnit/FeChan/FedCh : " << fedCrate() << "/" << fedSlot() << "/" << fedId() << "/"
0166 << SiStripFedKey::feUnit(fedCh()) << "/" << SiStripFedKey::feChan(fedCh()) << "/" << fedCh() << std::endl
0167 << " FecCrate/FecSlot/FecRing/CcuAddr/CcuChan : " << fecCrate() << "/" << fecSlot() << "/" << fecRing() << "/"
0168 << ccuAddr() << "/" << ccuChan() << std::endl
0169 << " DcuId/DetId : " << std::hex << "0x" << std::setfill('0') << std::setw(8)
0170 << dcuId() << "/"
0171 << "0x" << std::setfill('0') << std::setw(8) << detId() << std::endl
0172 << std::dec << " LldChan/APV0/APV1 : " << lldChannel() << "/" << i2cAddr(0) << "/"
0173 << i2cAddr(1) << std::endl
0174 << " pairNumber/nPairs/nStrips : " << apvPairNumber() << "/" << nApvPairs() << "/"
0175 << 256 * nApvPairs() << std::endl
0176 << " DCU/MUX/PLL/LLD found : " << std::boolalpha << dcu() << "/" << mux() << "/" << pll()
0177 << "/" << lld() << std::noboolalpha;
0178 }
0179
0180
0181
0182 void FedChannelConnection::terse(std::stringstream& ss) const {
0183 ss << " FED:cr/sl/id/fe/ch/chan=" << fedCrate() << "/" << fedSlot() << "/" << fedId() << "/"
0184 << SiStripFedKey::feUnit(fedCh()) << "/" << SiStripFedKey::feChan(fedCh()) << "/" << fedCh() << ","
0185 << " FEC:cr/sl/ring/ccu/mod=" << fecCrate() << "/" << fecSlot() << "/" << fecRing() << "/" << ccuAddr() << "/"
0186 << ccuChan() << ","
0187 << " apvs=" << i2cAddr(0) << "/" << i2cAddr(1) << ","
0188 << " pair=" << apvPairNumber() + 1 << " (from " << nApvPairs() << "),"
0189 << " dcu/detid=" << std::hex << "0x" << std::setfill('0') << std::setw(8) << dcuId() << "/"
0190 << "0x" << std::setfill('0') << std::setw(8) << detId() << std::dec;
0191 }
0192
0193
0194
0195 std::ostream& operator<<(std::ostream& os, const FedChannelConnection& conn) {
0196 std::stringstream ss;
0197 conn.print(ss);
0198 os << ss.str();
0199 return os;
0200 }