21 uint32_t side, uint32_t version)
28 uint32_t maxUnit = (1 << kBits[version][
kStsUnit]) - 1;
30 LOG(error) <<
"Unit Id " << unit <<
" exceeds maximum " << maxUnit;
33 uint32_t maxLadder = (1 << kBits[version][
kStsLadder]) - 1;
34 if (ladder > maxLadder) {
35 LOG(error) <<
"Ladder Id " << ladder <<
" exceeds maximum " << maxLadder;
38 uint32_t maxHalfLadder = (1 << kBits[version][
kStsHalfLadder]) - 1;
39 if (halfladder > maxHalfLadder) {
40 LOG(error) <<
"HalfLadder Id " << halfladder <<
" exceeds maximum " << maxHalfLadder;
43 uint32_t maxModule = (1 << kBits[version][
kStsModule]) - 1;
44 if (module > maxModule) {
45 LOG(error) <<
"Module Id " <<
module << " exceeds maximum " << maxModule;
48 uint32_t maxSensor = (1 << kBits[version][
kStsSensor]) - 1;
49 if (sensor > maxSensor) {
50 LOG(error) <<
"Sensor Id " << sensor <<
" exceeds maximum " << maxSensor;
53 uint32_t maxSide = (1 << kBits[version][
kStsSide]) - 1;
55 LOG(error) <<
"Side Id " << side <<
" exceeds maximum " << maxSide;
61 |
module << kShift[version][kStsModule] | sensor << kShift[version][kStsSensor]
62 | side << kShift[version][kStsSide] | version << kVersionShift;
76 uint32_t maxId = (1 << kBits[version][level]) - 1;
77 if (elementId[level] > maxId) {
78 LOG(error) <<
"Id " << elementId[level] <<
" for STS level " << level <<
" exceeds maximum " << maxId;
81 address = address | (elementId[level] << kShift[version][level]);
97 int32_t motherAdd = (address & ((1 << kShift[version][level + 1]) - 1));
110 return (address & (kMask[version][level] << kShift[version][level])) >> kShift[version][level];
138 uint32_t maxId = (1 << kBits[version][level]) - 1;
140 LOG(fatal) <<
"Id " << newId <<
" for STS level " << level <<
" exceeds maximum " << maxId;
143 return (address & (~(kMask[version][level] << kShift[version][level]))) | (newId << kShift[version][level]);
150 std::stringstream ss;
152 ss <<
"StsAddress: 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.
ECbmModuleId
Enumerator for module Identifiers.
@ kSts
Silicon Tracking System.
constexpr int32_t kVersionMask
uint32_t GetVersion(int32_t address)
Extract version number.
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.
int32_t GetAddress(uint32_t unit=0, uint32_t ladder=0, uint32_t halfladder=0, uint32_t module=0, uint32_t sensor=0, uint32_t side=0, uint32_t version=kCurrentVersion)
Construct address.
ECbmModuleId GetSystemId(int32_t address)
Get system Id (should be ECbmModuleId::kSts)
constexpr uint32_t kCurrentVersion
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.