31 (1 << fgkBits[3]) - 1, (1 << fgkBits[4]) - 1};
41 LOG(error) <<
"Station Id " << station <<
" exceeds maximum (" << (1 <<
fgkBits[
kMustStation]) - 1 <<
")";
45 LOG(error) <<
"Layer Id " << layer <<
" exceeds maximum (" << (1 <<
fgkBits[
kMustLayer]) - 1 <<
")";
49 LOG(error) <<
"Module Id " <<
module << " exceeds maximum (" << (1 << fgkBits[kMustModule]) - 1 << ")";
53 LOG(error) <<
"Tube Id " << tube <<
" exceeds maximum (" << (1 <<
fgkBits[
kMustTube]) - 1 <<
")";
58 | layer <<
fgkShift[
kMustLayer] |
module << fgkShift[kMustModule] | tube << fgkShift[kMustTube];
69 if (elementId[level] >= (1 <<
fgkBits[level])) {
70 LOG(error) <<
"Id " << elementId[level] <<
" for MuST level " << level <<
" exceeds maximum ("
71 << (1 <<
fgkBits[level]) - 1 <<
")";
74 address = address | (elementId[level] <<
fgkShift[level]);
87 LOG(info) <<
"Level " << std::setw(2) << std::right << level <<
": bits " << std::setw(2) <<
fgkBits[level]
88 <<
", max. range " << std::setw(6) <<
fgkMask[level];
97 if (newId >= (1 <<
fgkBits[level])) {
98 LOG(error) <<
"Id " << newId <<
" for MuST level " << level <<
" exceeds maximum (" << (1 <<
fgkBits[level]) - 1
ClassImp(CbmConverterManager)
XPU_D constexpr auto ToIntegralType(T enumerator) -> typename std::underlying_type< T >::type
Converts an element of enum class to its underlying integral type.
@ kMust
MuSt detection system.
@ kMustSystem
System = MuST.
@ kMustNofLevels
Number of MuST levels.
Interface class to unique address for the MuST.
static uint32_t SetElementId(uint32_t address, int32_t level, int32_t newId)
static uint32_t GetAddress(int32_t station=0, int32_t layer=0, int32_t module=0, int32_t tube=0)
static const int32_t fgkMask[kMustNofLevels]
static const int32_t fgkBits[kMustNofLevels]
static const int32_t fgkShift[kMustNofLevels]