64 assert(maxRUHW < 0xffff);
65 mFEEId2RUSW.resize(maxRUHW + 1, 0xff);
69 mChipInfoEntrySB[
IB] = ctrChip;
70 mCablePos[
IB].resize(NChipsPerStaveSB[
IB], 0xff);
71 mCableHW2SW[
IB].resize(NChipsPerStaveSB[
IB], 0xff);
72 mCableHW2Pos[
IB].resize(NChipsPerStaveSB[
IB], 0xff);
73 mCableHWFirstChip[
IB].resize(NChipsPerStaveSB[
IB], 0xff);
74 for (
int i = 0;
i < NChipsPerStaveSB[
IB];
i++) {
75 auto& cInfo = mChipsInfo[ctrChip++];
79 cInfo.chipOnModuleSW =
i;
80 cInfo.chipOnModuleHW =
i;
84 cInfo.chipOnCable = 0;
85 mCableHW2SW[
IB][cInfo.cableHW] = cInfo.cableSW;
86 mCableHW2Pos[
IB][cInfo.cableHW] = cInfo.cableHWPos;
87 mCablesOnStaveSB[
IB] |= 0x1 << cInfo.cableHWPos;
88 mCableHWFirstChip[
IB][
i] = 0;
92 const int LANEID[2][7] = {{0, 1, 2, 3, 4, 5, 6}, {6, 5, 4, 3, 2, 1, 0}};
93 const int maxModulesPerStave = NModulesPerStaveSB[
OB];
94 const int chipsOnCable = 7;
95 for (
int bid =
MB; bid <=
OB; bid++) {
96 mChipInfoEntrySB[bid] = ctrChip;
97 mCablePos[bid].resize(NChipsPerStaveSB[bid], 0xff);
98 mCableHW2SW[bid].resize(NChipsPerStaveSB[bid], 0xff);
99 mCableHW2Pos[bid].resize(NChipsPerStaveSB[bid], 0xff);
100 mCableHWFirstChip[bid].resize(NChipsPerStaveSB[bid], 0xff);
101 for (
int i = 0;
i < NChipsPerStaveSB[bid];
i++) {
102 auto& cInfo = mChipsInfo[ctrChip++];
103 int hstave =
i / (NChipsPerStaveSB[bid] / 2);
105 cInfo.moduleSW =
i / NChipsPerModuleSB[bid];
106 cInfo.moduleHW = 1 + cInfo.moduleSW % (NModulesPerStaveSB[bid] / 2);
108 cInfo.chipOnModuleSW =
i % NChipsPerModuleSB[bid];
109 cInfo.chipOnModuleHW = ChipOBModSW2HW[cInfo.chipOnModuleSW];
111 bool lower7 = cInfo.chipOnModuleSW < (NChipsPerModuleSB[bid] / 2);
113 uint8_t connector = 2 * hstave + lower7, connectorInv = 2 * hstave + (!lower7);
114 cInfo.cableHW = (connector << 3) + LANEID[!lower7][cInfo.moduleHW - 1];
115 cInfo.cableSW =
i / chipsOnCable;
116 cInfo.cableHWPos = LANEID[lower7][cInfo.moduleHW - 1] + connectorInv * maxModulesPerStave / 2;
117 mCablesOnStaveSB[bid] |= 0x1 << cInfo.cableHWPos;
118 cInfo.chipOnCable = cInfo.chipOnModuleSW % (NChipsPerModuleSB[bid] / 2);
119 mCableHW2SW[bid][cInfo.cableHW] = cInfo.cableSW;
120 mCableHW2Pos[bid][cInfo.cableHW] = cInfo.cableHWPos;
121 if (cInfo.chipOnCable == 0) {
122 mCableHWFirstChip[bid][cInfo.cableHW] = cInfo.moduleSW * NChipsPerModuleSB[bid];
126 for (
int bid = 0; bid <
NSubB; bid++) {
128 for (
int ic = 0; ic < 32; ic++) {
129 if (mCablesOnStaveSB[bid] & (0x1 << ic)) {
130 mCablePos[bid][
pos++] = ic;
133 if (
pos != NCablesPerStaveSB[bid]) {
134 throw std::runtime_error(fmt::format(
"counted number of cables {} does not match expected {} on subBarel{}",
pos, NCablesPerStaveSB[bid], bid));
139 uint16_t chipCount = 0;
140 for (
int ilr = 0; ilr <
NLayers; ilr++) {
141 for (
int ist = 0; ist < NStavesOnLr[ilr]; ist++) {
142 auto& sInfo = mStavesInfo[ctrStv];
143 sInfo.idSW = ctrStv++;
147 mFEEId2RUSW[sInfo.idHW] = sInfo.idSW;
148 for (
int lnk = 1; lnk <
NLinks; lnk++) {
152 sInfo.ruType = RUTypeLr[ilr];
153 sInfo.nCables = NCablesPerStaveSB[sInfo.ruType];
154 sInfo.firstChipIDSW = chipCount;
155 chipCount += NChipsPerStaveSB[sInfo.ruType];
160 for (
int ichw = 0; ichw <= MaxHWCableID[
MB]; ichw++) {
161 for (
int ihw = 0; ihw < 15; ihw++) {
162 HWCableHWChip2ChipOnRU_MB[ichw][ihw] = 0xff;
165 for (
int ichip = 0; ichip < NChipsPerStaveSB[
MB]; ichip++) {
166 const auto& chInfo = mChipsInfo[NChipsPerStaveSB[
IB] + ichip];
167 HWCableHWChip2ChipOnRU_MB[chInfo.cableHW][chInfo.chipOnModuleHW] = uint8_t(ichip);
171 for (
int ichw = 0; ichw <= MaxHWCableID[
OB]; ichw++) {
172 for (
int ihw = 0; ihw < 15; ihw++) {
173 HWCableHWChip2ChipOnRU_OB[ichw][ihw] = 0xff;
176 for (
int ichip = 0; ichip < NChipsPerStaveSB[
OB]; ichip++) {
177 const auto& chInfo = mChipsInfo[NChipsPerStaveSB[
IB] + NChipsPerStaveSB[
MB] + ichip];
178 HWCableHWChip2ChipOnRU_OB[chInfo.cableHW][chInfo.chipOnModuleHW] = uint8_t(ichip);