71 { ( 1 <<
kBits[0][0] ) -1,
72 ( 1 <<
kBits[0][1] ) -1,
73 ( 1 <<
kBits[0][2] ) -1,
74 ( 1 <<
kBits[0][3] ) -1,
75 ( 1 <<
kBits[0][4] ) -1,
76 ( 1 <<
kBits[0][5] ) -1,
77 ( 1 <<
kBits[0][6] ) -1
80 { ( 1 <<
kBits[1][0] ) -1,
81 ( 1 <<
kBits[1][1] ) -1,
82 ( 1 <<
kBits[1][2] ) -1,
83 ( 1 <<
kBits[1][3] ) -1,
84 ( 1 <<
kBits[1][4] ) -1,
85 ( 1 <<
kBits[1][5] ) -1,
86 ( 1 <<
kBits[1][6] ) -1
108 LOG(error) <<
"Unit Id " << unit <<
" exceeds maximum ("
113 LOG(error) <<
"Ladder Id " << ladder <<
" exceeds maximum ("
118 LOG(error) <<
"HalfLadder Id " << halfladder <<
" exceeds maximum ("
123 LOG(error) <<
"Module Id " <<
module << " exceeds maximum ("
124 << ( 1 << kBits[version][kSsdModule] ) - 1 << ")";
128 LOG(error) <<
"Sensor Id " << sensor <<
" exceeds maximum ("
133 LOG(error) <<
"Side Id " << side <<
" exceeds maximum ("
142 module << kShift[version][kSsdModule] |
143 sensor << kShift[version][kSsdSensor] |
144 side << kShift[version][kSsdSide] |
145 version << kVersionShift;
159 if ( elementId[level] >= ( 1 <<
kBits[version][level] ) ) {
160 LOG(error) <<
"Id " << elementId[level] <<
" for SSD level " << level
161 <<
" exceeds maximum (" << (1 <<
kBits[version][level]) - 1
165 address = address | ( elementId[level] <<
kShift[version][level] );
180 Int_t motherAdd = ( address & ( ( 1 <<
kShift[version][level+1] ) - 1 ) ) ;
192 return ( address & (
kMask[version][level] <<
kShift[version][level] ) )
193 >>
kShift[version][level];
221 if ( newId >= ( 1 <<
kBits[version][level]) ) {
222 LOG(fatal) <<
"Id " << newId <<
" for SSD level " << level
223 <<
" exceeds maximum (" << (1 <<
kBits[version][level]) - 1
227 return ( address & (~ (
kMask[version][level] <<
kShift[version][level]) ) )
228 | ( newId <<
kShift[version][level]);
236 std::stringstream ss;
238 ss <<
"SsdAddress: address " << address
Functions to encode or decode the address field of SSD data.
const Int_t kVersionShift
UInt_t GetVersion(Int_t address)
Extract version number.
UInt_t GetSystemId(Int_t address)
Get system Id (should be kSSD)
const Int_t kMask[kCurrentVersion+1][kSsdNofLevels]
UInt_t GetElementId(Int_t address, Int_t level)
Get the index of an element.
Int_t SetElementId(Int_t address, Int_t level, UInt_t newId)
Set the index of an element, leaving the other element levels untouched.
const Int_t kBits[kCurrentVersion+1][kSsdNofLevels]
Int_t GetAddress(UInt_t unit=0, UInt_t ladder=0, UInt_t halfladder=0, UInt_t module=0, UInt_t sensor=0, UInt_t side=0, UInt_t version=kCurrentVersion)
Construct address.
const UInt_t kCurrentVersion
std::string ToString(Int_t address)
String output.
Int_t GetMotherAddress(Int_t address, Int_t level)
Construct the address of an element from the address of a descendant element.
const Int_t kShift[kCurrentVersion+1][kSsdNofLevels]