28 LOG(error) <<
"CbmRichAddress::GetAddress: Camera Id " << camera <<
" exceeds maximum "
33 LOG(error) <<
"CbmRichAddress::GetAddress: Strip Id " << strip <<
" exceeds maximum "
38 LOG(error) <<
"CbmRichAddress::GetAddress: Backplane Id " << backplane <<
" exceeds maximum "
43 LOG(error) <<
"CbmRichAddress::GetAddress: Pmt Id " << pmt <<
" exceeds maximum "
48 LOG(error) <<
"CbmRichAddress::GetAddress: Pixel Id " << pixel <<
" exceeds maximum "
66 throw std::out_of_range(std::string(
"CbmRichAddress::GetMotherAddress: Illegal element level ")
67 + std::to_string(level));
72 int32_t motherAdd = (address & ((1 << kShift[version][level + 1]) - 1));
82 throw std::out_of_range(std::string(
"CbmRichAddress::GetElementId: Illegal element level ")
83 + std::to_string(level));
87 return (address & (kMask[version][level] << kShift[version][level])) >> kShift[version][level];
105 throw std::out_of_range(std::string(
"CbmRichAddress::SetElementId: Illegal element level ")
106 + std::to_string(level));
110 uint32_t maxId = (1 << kBits[version][level]) - 1;
112 LOG(fatal) <<
"CbmRichAddress::SetElementId: Id " << newId <<
" for RICH level " << level <<
" exceeds maximum "
116 return (address & (~(kMask[version][level] << kShift[version][level]))) | (newId << kShift[version][level]);
121 std::stringstream ss;
123 ss <<
"RichAddress: address " << address <<
" (version " <<
GetVersion(address) <<
")"
XPU_D constexpr auto ToIntegralType(T enumerator) -> typename std::underlying_type< T >::type
Converts an element of enum class to its underlying integral type.
@ kRich
Ring-Imaging Cherenkov Detector.
int32_t GetMotherAddress(int32_t address, int32_t level)
Construct the address of an element from the address of a descendant element.
int32_t SetElementId(int32_t address, int32_t level, uint32_t newId)
Set the index of an element, leaving the other element levels untouched.
uint32_t GetVersion(int32_t address)
Extract version number.
constexpr int32_t kVersionMask
constexpr uint32_t kCurrentVersion
uint32_t GetSystemId(int32_t address)
Get system Id (should be integer value of ECbmModuleId::kRich)
uint32_t GetElementId(int32_t address, int32_t level)
Get the index of an element.
constexpr int32_t kVersionShift
std::string ToString(int32_t address)
String output.
int32_t GetAddress(uint32_t camera=0, uint32_t strip=0, uint32_t backplane=0, uint32_t pmt=0, uint32_t pixel=0, uint32_t version=kCurrentVersion)
Construct address.