16 fgkShift[0] + fgkBits[0],
17 fgkShift[1] + fgkBits[1],
18 fgkShift[2] + fgkBits[2],
19 fgkShift[3] + fgkBits[3],
20 fgkShift[4] + fgkBits[4],
21 fgkShift[5] + fgkBits[5],
22 fgkShift[6] + fgkBits[6],
23 fgkShift[7] + fgkBits[7],
29 (1 << fgkBits[0]) - 1,
30 (1 << fgkBits[1]) - 1,
31 (1 << fgkBits[2]) - 1,
32 (1 << fgkBits[3]) - 1,
33 (1 << fgkBits[4]) - 1,
34 (1 << fgkBits[5]) - 1,
35 (1 << fgkBits[6]) - 1,
36 (1 << fgkBits[7]) - 1,
37 (1 << fgkBits[8]) - 1,
45 int32_t sensor, int32_t sensorY, int32_t sensorX)
48 LOG(error) <<
"Station Id " << station <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdStation]) - 1 <<
")";
52 LOG(error) <<
"SideUD Id " << sideUD <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdSideUD]) - 1 <<
")";
56 LOG(error) <<
"SideLR Id " << sideLR <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdSideLR]) - 1 <<
")";
60 LOG(error) <<
"SideTB Id " << sideTB <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdSideTB]) - 1 <<
")";
64 LOG(error) <<
"Ladder Id " << ladder <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdLadder]) - 1 <<
")";
68 LOG(error) <<
"Sensor Id " << sensor <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdSensor]) - 1 <<
")";
72 LOG(error) <<
"SensorY " << sensorY <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdSensorY]) - 1 <<
")";
76 LOG(error) <<
"SensorX " << sensorX <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdSensorX]) - 1 <<
")";
90 if (elementId[level] >= (1 <<
fgkBits[level])) {
91 LOG(error) <<
"Id " << elementId[level] <<
" for MVD level " << level <<
" exceeds maximum ("
92 << (1 <<
fgkBits[level]) - 1 <<
")";
95 address |= elementId[level] <<
fgkShift[level];
103 LOG(fatal) <<
"Sensor Nr " << sensorNr <<
" exceeds maximum (" << (1 <<
fgkBits[
fgkBitsSensorNr]) - 1 <<
")";
107 LOG(fatal) <<
"SensorY " << sensorY <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdSensorY]) - 1 <<
")";
111 LOG(fatal) <<
"SensorX " << sensorX <<
" exceeds maximum (" << (1 <<
fgkBits[
kMvdSensorX]) - 1 <<
")";
123 LOG(info) <<
"Level " << std::setw(2) << std::right << level <<
": bits " << std::setw(2) <<
fgkBits[level]
124 <<
", max. range " << std::setw(6) <<
fgkMask[level];
131 if (newId >= (1 <<
fgkBits[level])) {
132 LOG(error) <<
"Id " << newId <<
" for MVD level " << level <<
" exceeds maximum (" << (1 <<
fgkBits[level]) - 1
XPU_D constexpr auto ToIntegralType(T enumerator) -> typename std::underlying_type< T >::type
Converts an element of enum class to its underlying integral type.
@ kMvd
Micro-Vertex Detector.
@ kMvdSensorX
Sensor X (row)
@ kMvdSideUD
Upstream/Downstream.
@ kMvdSensorY
Sensor Y (column)
@ kMvdSystem
System = MVD.
@ kMvdNofLevels
Number of MVD levels.
static uint32_t GetAddressFromSensorNrAndPixelXY(int32_t sensorNr, int32_t sensorY, int32_t sensorX)
static const int32_t fgkMask[kMvdNofLevels]
static constexpr int32_t fgkBits[kMvdNofLevels]
static uint32_t SetElementId(uint32_t address, int32_t level, int32_t newId)
static const int32_t fgkShiftSensorNr
static const int32_t fgkShift[kMvdNofLevels]
static const int32_t fgkMaskSensorNr
static constexpr int32_t fgkBitsSensorNr
static uint32_t GetAddress(int32_t station=0, int32_t sideUD=0, int32_t sideLR=0, int32_t sideTB=0, int32_t ladder=0, int32_t sensor=0, int32_t sensorY=0, int32_t sensorX=0)