Skip to content
Snippets Groups Projects
Commit 00fe9a0b authored by Pierre-Alain Loizeau's avatar Pierre-Alain Loizeau
Browse files

Port TOF mapping changes to the algo version

- Fix support for TOF bucarest boxes
- Change the type of the last RPC in `ReadoutPars_mCBM2024.cxx`
- Add log printout of the TOF mapping at debug level
parent 5a891384
No related branches found
No related tags found
1 merge request!1791Unpack parameter update for Tof Bucharest counter and new BMon detector in 2024 data
......@@ -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: {
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:
iStrMap = 31 - iStr;
iRpcMap = 1 - iRpcMap;
iSideMap = 1 - iSideMap;
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;
......
......@@ -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};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment