diff --git a/algo/detectors/tof/ReadoutConfig.cxx b/algo/detectors/tof/ReadoutConfig.cxx index c5b8a599887e94176e315dee1a5ffac897c457c3..6843df6b1664f79263e3065672b52d2662e24430 100644 --- a/algo/detectors/tof/ReadoutConfig.cxx +++ b/algo/detectors/tof/ReadoutConfig.cxx @@ -150,6 +150,9 @@ namespace cbm::algo::tof nbRobPerComp = 1; } + L_(debug) << "============================================================"; + L_(debug) << "================== TOF Mapping ============================="; + uint32_t uCh = 0; for (uint32_t uGbtx = 0; uGbtx < pars.NCROBs(); ++uGbtx) { uint32_t uCh0 = uCh; @@ -200,6 +203,11 @@ namespace cbm::algo::tof } break; } + case 66: // Buc box 2024 + { + BuildChannelsUidMapBuc(uCh, crob); + break; + } case 69: { /// 2022 case: 69 is followed by 4 and 9 BuildChannelsUidMapBuc(uCh, crob); @@ -218,10 +226,68 @@ namespace cbm::algo::tof L_(error) << "Invalid Tof Type specifier for GBTx " << std::setw(2) << uGbtx << ": " << crob.rpcType; } } // switch (crob.rpcType) - if (int32_t(uCh - uCh0) != pars.nFebsPerComponent * pars.nAsicsPerFeb * pars.nChannelsPerAsic / nbRobPerComp) { + if (uCh - uCh0 != pars.nFebsPerComponent * pars.nAsicsPerFeb * pars.nChannelsPerAsic / nbRobPerComp) { throw FatalError("Tof mapping error for Gbtx {}, diff = {}, type {}", uGbtx, uCh - uCh0, crob.rpcType); } + + L_(debug) << " Map for CROB " << uGbtx; + std::vector<int32_t> vAddrBunch(8, -1); + for (uint32_t uChPrint = uCh0; uChPrint < uCh; ++uChPrint) { + vAddrBunch[uChPrint % 8] = fviRpcChUId[uChPrint]; + if (7 == uChPrint % 8) { + L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8) + << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3] + << " 0x" << std::setw(8) << vAddrBunch[4] << " 0x" << std::setw(8) << vAddrBunch[5] << " 0x" + << std::setw(8) << vAddrBunch[6] << " 0x" << std::setw(8) << vAddrBunch[7] << std::dec; + } + } + switch (uCh % 8) { + case 0: { + break; + } + case 1: { + L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << std::dec; + break; + } + case 2: { + L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8) + << vAddrBunch[1] << std::dec; + break; + } + case 3: { + L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8) + << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << std::dec; + break; + } + case 4: { + L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8) + << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3] + << std::dec; + break; + } + case 5: { + L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8) + << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3] + << " 0x" << std::setw(8) << vAddrBunch[4] << std::dec; + break; + } + case 6: { + L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8) + << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3] + << " 0x" << std::setw(8) << vAddrBunch[4] << " 0x" << std::setw(8) << vAddrBunch[5] << std::dec; + break; + } + case 7: { + L_(debug) << std::hex << std::setfill('0') << "0x" << std::setw(8) << vAddrBunch[0] << " 0x" << std::setw(8) + << vAddrBunch[1] << " 0x" << std::setw(8) << vAddrBunch[2] << " 0x" << std::setw(8) << vAddrBunch[3] + << " 0x" << std::setw(8) << vAddrBunch[4] << " 0x" << std::setw(8) << vAddrBunch[5] << " 0x" + << std::setw(8) << vAddrBunch[6] << std::dec; + break; + } + } } // for (UInt_t uGbtx = 0; uGbtx < numCrob; ++uGbtx) + + L_(debug) << "============================================================"; } // ------------------------------------------------------------------------- @@ -393,14 +459,6 @@ namespace cbm::algo::tof else iSideMap = 1; } - else { - if (crob.rpcSide == 3) { - if (iFeet == 0) - iSideMap = 1; - else - iSideMap = 0; - } - } if (crob.rpcType != 6) if (iSideMap == 0) iStrMap = 31 - iStr; @@ -459,6 +517,45 @@ namespace cbm::algo::tof } } } + else if (crob.rpcSide == 4) { + int iSideMap = -1; + int iStrMap = -1; + int iRpcMap = -1; + const int ConOff[8] = {0, 2, 4, 6, 7, 1, 3, 5}; // Get4 after Gbtx + for (int32_t iFeet = 0; iFeet < 5; iFeet++) { + for (int32_t iStr = 0; iStr < 32; iStr++) { + switch (iFeet) { + case 0: iSideMap = -1; break; + case 1: + iRpcMap = 0; + iStrMap = 3 - iStr % 4 + 4 * ConOff[iStr / 4]; + iSideMap = 0; + break; + case 2: + iRpcMap = 0; + iStrMap = 3 - iStr % 4 + 4 * ConOff[iStr / 4]; + iSideMap = 1; + break; + case 3: + iRpcMap = 1; + iStrMap = 3 - iStr % 4 + 4 * ConOff[iStr / 4]; + iSideMap = 1; + break; + case 4: + iRpcMap = 1; + iStrMap = 3 - iStr % 4 + 4 * ConOff[iStr / 4]; + iSideMap = 0; + break; + } + if (iSideMap > -1) + fviRpcChUId[uCh] = + CbmTofAddress::GetUniqueAddress(crob.moduleId, iRpcMap, iStrMap, iSideMap, crob.rpcType); + else + fviRpcChUId[uCh] = 0; + uCh++; + } + } + } } } @@ -483,11 +580,32 @@ namespace cbm::algo::tof // iStrMap=31-iStr; iSideMap = 1 - iSideMap; break; - case 3: - iStrMap = 31 - iStr; - iRpcMap = 1 - iRpcMap; - iSideMap = 1 - iSideMap; - break; + case 3: { + const int ConOff[8] = {0, 2, 4, 6, 7, 1, 3, 5}; // Get4 after Gbtx + switch (iFeet) { + case 0: iSideMap = -1; break; + case 1: + iRpcMap = 0; + iStrMap = 3 - iStr % 4 + 4 * ConOff[iStr / 4]; + iSideMap = 0; + break; + case 2: + iRpcMap = 0; + iStrMap = 3 - iStr % 4 + 4 * ConOff[iStr / 4]; + iSideMap = 1; + break; + case 3: + iRpcMap = 1; + iStrMap = 3 - iStr % 4 + 4 * ConOff[iStr / 4]; + iSideMap = 1; + break; + case 4: + iRpcMap = 1; + iStrMap = 3 - iStr % 4 + 4 * ConOff[iStr / 4]; + iSideMap = 0; + break; + } + } break; case 4: // HD cosmic 2019, Buc2018, v18o iRpcMap = 1 - iRpcMap; break; @@ -571,7 +689,8 @@ namespace cbm::algo::tof default:; } // switch (crob.rpcSide) if (iSideMap > -1) - fviRpcChUId[uCh] = CbmTofAddress::GetUniqueAddress(iModuleIdMap, iRpcMap, iStrMap, iSideMap, crob.rpcType); + fviRpcChUId[uCh] = + CbmTofAddress::GetUniqueAddress(iModuleIdMap, iRpcMap, iStrMap, iSideMap, crob.rpcType % 10); else fviRpcChUId[uCh] = 0; diff --git a/algo/detectors/tof/config/ReadoutPars_mCBM2024.cxx b/algo/detectors/tof/config/ReadoutPars_mCBM2024.cxx index ac3774c8b372200f89f230b119d960a527a65d82..44ec54cbbc820e1b6f9accc44b797edcb14fdd7a 100644 --- a/algo/detectors/tof/config/ReadoutPars_mCBM2024.cxx +++ b/algo/detectors/tof/config/ReadoutPars_mCBM2024.cxx @@ -30,7 +30,7 @@ ReadoutPars ReadoutPars::MakeMCBM2024() const int32_t rpcType[NumCrob] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 9, 9, 6}; // side of Rpcs connected to Gbtx link, i.e. 0 or 1 - const int32_t rpcSide[NumCrob] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 3}; + const int32_t rpcSide[NumCrob] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 4}; // number of Rpcs connected to Gbtx link, i.e. 3 or 5 const int32_t numRpc[NumCrob] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 5};