26 if (!outStream.good()) {
28 return StatusCode::FAILURE;
31 std::vector<const MuonGMR4::RpcReadoutElement *> reEles{
m_detMgr->getAllRpcReadoutElements()};
34 constexpr int subDetA{0x65}, subDetB{0x66};
37 unsigned int boardSecA{0}, boardSecC{0};
39 nlohmann::json chamberJSON{}, flatCableJSON{};
40 std::vector<std::unique_ptr<RpcFlatCableTranslator>> flatTranslators{};
42 auto connectFlatCable = [&flatCableJSON, &flatTranslators,
this](
const unsigned coveredStrips) ->
unsigned{
43 for (std::unique_ptr<RpcFlatCableTranslator>& translator : flatTranslators){
44 if (
static_cast<unsigned>(translator->connectedChannels()) == coveredStrips){
45 return translator->id();
48 auto& translator = flatTranslators.emplace_back(std::make_unique<RpcFlatCableTranslator>(flatTranslators.size()));
54 nlohmann::json chipJSON{};
55 chipJSON[
"flatCableId"] = translator->id();
56 std::vector<std::pair<unsigned,unsigned>> pins{};
60 chipJSON[
"pinAssignment"] = pins;
62 flatCableJSON.push_back(chipJSON);
63 return translator->id();
69 const unsigned int subDet = reEle->stationEta() > 0 ? subDetA : subDetB;
70 const unsigned int boardSec = reEle->stationEta() > 0 ? (++boardSecA) : (++boardSecC);
71 unsigned int board{1};
72 for (
unsigned int gasGap = 1; gasGap <= reEle->nGasGaps(); ++gasGap) {
73 for (
int doubletPhi = reEle->doubletPhi(); doubletPhi <= reEle->doubletPhiMax(); ++doubletPhi) {
74 for (
bool measPhi : {
false,
true}) {
75 const IdentifierHash layHash = reEle->createHash(1, gasGap, doubletPhi, measPhi);
76 if (!reEle->nStrips(layHash))
78 const unsigned int nStrips = reEle->nStrips(layHash);
79 const unsigned int nBoardChips = (nStrips % nStripsPerBoard > 0) +
80 (nStrips - (nStrips % nStripsPerBoard)) / nStripsPerBoard;
82 for (
bool side : {
false,
true}) {
83 if (side && reEle->nPhiStrips()!= 0) {
87 unsigned int measPhiSide = (side * stripSideBit) | (measPhi * measPhiBit);
88 for (
unsigned int chip = 0; chip < nBoardChips; ++chip) {
91 nlohmann::json cablingChannel{};
92 cablingChannel[
"station"] =
m_idHelperSvc->stationNameString(reEle->identify());
93 cablingChannel[
"eta"] = reEle->stationEta();
94 cablingChannel[
"phi"] = reEle->stationPhi();
95 cablingChannel[
"doubletR"] = reEle->doubletR();
96 cablingChannel[
"doubletZ"] = reEle->doubletZ();
97 cablingChannel[
"doubletPhi"] = doubletPhi;
98 cablingChannel[
"gasGap"] = gasGap;
99 cablingChannel[
"measPhi"] = measPhiSide;
101 cablingChannel[
"subDetector"] = subDet;
102 cablingChannel[
"boardSector"] = boardSec;
103 cablingChannel[
"firstStrip"] = firstStrip;
104 cablingChannel[
"board"] = (++board);
105 cablingChannel[
"flatCableId"] = connectFlatCable(coveredStrips);
107 <<
"nStrips: "<<nStrips<<
", stripsPerBoard "
108 <<nStripsPerBoard<<
", nChips: "<<nBoardChips<<
", covered: "<<coveredStrips);
109 chamberJSON.push_back(cablingChannel);
116 nlohmann::json finalJSON{};
117 finalJSON[
"chamberMap"] = chamberJSON;
118 finalJSON[
"readoutCards"] = flatCableJSON;
119 outStream << finalJSON.dump(2) << std::endl;
120 return StatusCode::SUCCESS;