From 49a1967feb6636471c31214916530a4322b54f63 Mon Sep 17 00:00:00 2001 From: Dominik Smith <d.smith@gsi.de> Date: Fri, 6 Sep 2024 19:06:38 +0200 Subject: [PATCH] Applied patch of P.A.L. to much::ReadoutConfig. --- algo/detectors/much/ReadoutConfig.cxx | 41 ++++++++++++++++----------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/algo/detectors/much/ReadoutConfig.cxx b/algo/detectors/much/ReadoutConfig.cxx index cb1473f861..ccf994cc2f 100644 --- a/algo/detectors/much/ReadoutConfig.cxx +++ b/algo/detectors/much/ReadoutConfig.cxx @@ -141,23 +141,27 @@ namespace cbm::algo::much uint32_t feb = comp * numFebsPerComp + febInCrob; // global FEB index int32_t febId = GetFebId(feb); // FEB Id in MUCH addressing scheme - for (uint16_t chanInAsic = 0; chanInAsic < numChanPerAsic; chanInAsic++) { - uint32_t channel = chanInAsic + numChanPerAsic * (feb % numAsicsPerFeb); //Fix this! - uint32_t address = CreateMuchAddress(comp, febId, channel); - fReadoutMap[equipment][elink][channel] = address; + // Skip unconnected FEB slots + if (-1 < febId) { - // Apply channel mask - if (maskedaddr.count(address)) { - std::vector<bool>& chanMask = fMaskMap[equipment][elink]; - if (chanMask.empty()) { - chanMask.resize(numChanPerAsic, false); + for (uint16_t chanInAsic = 0; chanInAsic < numChanPerAsic; chanInAsic++) { + uint32_t channel = chanInAsic + numChanPerAsic * (feb % numAsicsPerFeb); //Fix this! + uint32_t address = CreateMuchAddress(comp, febId, channel); + fReadoutMap[equipment][elink][channel] = address; + + // Apply channel mask + if (maskedaddr.count(address)) { + std::vector<bool>& chanMask = fMaskMap[equipment][elink]; + if (chanMask.empty()) { + chanMask.resize(numChanPerAsic, false); + } + chanMask[channel] = true; } - chanMask[channel] = true; - } - } //# channel - } //# elink - } //# CROB - } //# component + } //# channel + } + } //# elink + } //# CROB + } //# component } //To do address need to be checked carefully @@ -280,7 +284,9 @@ namespace cbm::algo::much { if (fChannelsToPadXA.size() <= (static_cast<uint32_t>(febid) * numChanPerAsic) + channelid) { LOG(debug) << "ReadoutConfig::GetPadXA => Index out of bounds: " << ((febid * numChanPerAsic) + channelid) - << " VS " << fChannelsToPadXA.size() << " (" << febid << " and " << channelid << ")"; + << " VS " << fChannelsToPadXA.size() << " (" << static_cast<uint16_t>(febid) << ", " << numChanPerAsic + << " and " << static_cast<uint16_t>(channelid) << ")"; + return -2; } return fChannelsToPadXA[(febid * numChanPerAsic) + channelid]; @@ -290,7 +296,8 @@ namespace cbm::algo::much { if (fChannelsToPadYA.size() <= (static_cast<uint32_t>(febid) * numChanPerAsic) + channelid) { LOG(debug) << "ReadoutConfig::GetPadYA => Index out of bounds: " << ((febid * numChanPerAsic) + channelid) - << " VS " << fChannelsToPadYA.size() << " (" << febid << " and " << channelid << ")"; + << " VS " << fChannelsToPadYA.size() << " (" << static_cast<uint16_t>(febid) << ", " << numChanPerAsic + << " and " << static_cast<uint16_t>(channelid) << ")"; return -2; } return fChannelsToPadYA[(febid * numChanPerAsic) + channelid]; -- GitLab