diff --git a/core/detectors/tof/CbmMcbm2018TofPar.cxx b/core/detectors/tof/CbmMcbm2018TofPar.cxx index 1a1b46ef7ca9347d75231e423971e497e4993ef4..3f5e9e51739b75ae4121fa96fec0ead94e9dafba 100644 --- a/core/detectors/tof/CbmMcbm2018TofPar.cxx +++ b/core/detectors/tof/CbmMcbm2018TofPar.cxx @@ -265,6 +265,7 @@ void CbmMcbm2018TofPar::BuildChannelsUidMap() for (UInt_t uGbtx = 0; uGbtx < uNrOfGbtx; ++uGbtx) { uint32_t uCh0 = uCh; uint32_t uGdpb = uCh0 / (fiNrOfFeesPerGdpb * fiNrOfGet4PerFee * fiNrOfChannelsPerGet4); + LOG(info) << "Map at ch " << uCh << ", Gdpb " << uGdpb << ", Id " << std::hex << fiGdpbIdArray[uGdpb] << std::dec; switch (fiRpcType[uGbtx]) { case 2: // intended fall-through case 0: { @@ -320,6 +321,11 @@ void CbmMcbm2018TofPar::BuildChannelsUidMap() } break; } + case 66: // Buc box + { + BuildChannelsUidMapBuc(uCh, uGbtx); + break; + } case 69: { /// 2022 case: 69 is followed by 4 and 9 BuildChannelsUidMapBuc(uCh, uGbtx); @@ -338,7 +344,7 @@ void CbmMcbm2018TofPar::BuildChannelsUidMap() LOG(error) << "Invalid Tof Type specifier for GBTx " << std::setw(2) << uGbtx << ": " << fiRpcType[uGbtx]; } } // switch (fiRpcType[uGbtx]) - if ((int32_t)(uCh - uCh0) != fiNrOfFeesPerGdpb * fiNrOfGet4PerFee * fiNrOfChannelsPerGet4 / nbRobPerComp) { + if ((uCh - uCh0) != fiNrOfFeesPerGdpb * fiNrOfGet4PerFee * fiNrOfChannelsPerGet4 / nbRobPerComp) { LOG(fatal) << "Tof mapping error for Gbtx " << uGbtx << ", diff = " << uCh - uCh0 << ", expected " << fiNrOfFeesPerGdpb * fiNrOfGet4PerFee * fiNrOfChannelsPerGet4 / nbRobPerComp << " with nbRobPerFlim = " << nbRobPerComp; @@ -554,7 +560,7 @@ void CbmMcbm2018TofPar::BuildChannelsUidMapStar2(UInt_t& uCh, UInt_t uGbtx) void CbmMcbm2018TofPar::BuildChannelsUidMapStar2A(UInt_t& uCh, UInt_t uGbtx) { LOG(info) << " Map Star2A box " << fiModuleId[uGbtx] << " at GBTX " << uGbtx << " - uCh = " << uCh << " for type " - << fiRpcType[uGbtx]; + << fiRpcType[uGbtx] << ", side " << fiRpcSide[uGbtx]; if (fiRpcSide[uGbtx] < 3) { Int_t NrFeet = 2; if (fiRpcSide[uGbtx] < 2) NrFeet = 1; @@ -570,14 +576,7 @@ void CbmMcbm2018TofPar::BuildChannelsUidMapStar2A(UInt_t& uCh, UInt_t uGbtx) else iSideMap = 1; } - else { - if (fiRpcSide[uGbtx] == 3) { - if (iFeet == 0) - iSideMap = 1; - else - iSideMap = 0; - } - } + if (fiRpcType[uGbtx] != 6) if (iSideMap == 0) iStrMap = 31 - iStr; @@ -637,8 +636,48 @@ void CbmMcbm2018TofPar::BuildChannelsUidMapStar2A(UInt_t& uCh, UInt_t uGbtx) } } } + else if (fiRpcSide[uGbtx] == 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 (Int_t iFeet = 0; iFeet < 5; iFeet++) { + for (Int_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(fiModuleId[uGbtx], iRpcMap, iStrMap, iSideMap, fiRpcType[uGbtx]); + else + fviRpcChUId[uCh] = 0; + uCh++; + } + } + } } } + // ------------------------------------------------------------------------- void CbmMcbm2018TofPar::BuildChannelsUidMapBuc(UInt_t& uCh, UInt_t uGbtx) { @@ -662,11 +701,38 @@ void CbmMcbm2018TofPar::BuildChannelsUidMapBuc(UInt_t& uCh, UInt_t uGbtx) // iStrMap=31-iStr; iSideMap = 1 - iSideMap; break; - case 3: + case 3: { + /* iStrMap = 31 - iStr; iRpcMap = 1 - iRpcMap; iSideMap = 1 - iSideMap; - break; + */ + //const int ConOff[8]={0,5,1,6,2,7,3,4}; //Get44 on connector + 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; @@ -773,7 +839,8 @@ void CbmMcbm2018TofPar::BuildChannelsUidMapBuc(UInt_t& uCh, UInt_t uGbtx) } } // switch (fiRpcSide[uGbtx]) if (iSideMap > -1) - fviRpcChUId[uCh] = CbmTofAddress::GetUniqueAddress(iModuleIdMap, iRpcMap, iStrMap, iSideMap, fiRpcType[uGbtx]); + fviRpcChUId[uCh] = + CbmTofAddress::GetUniqueAddress(iModuleIdMap, iRpcMap, iStrMap, iSideMap, fiRpcType[uGbtx] % 10); else fviRpcChUId[uCh] = 0;