BmnRoot
Loading...
Searching...
No Matches
BmnNdetAddress.h
Go to the documentation of this file.
1
19#ifndef BmnNdetAddress_H
20#define BmnNdetAddress_H 1
21
22#include "BmnDetectorList.h" // for kNDET
23
24#include <cassert> // for assert
25#include <sstream> // for std::ostringstream
26
28{
29 public:
30 virtual ~BmnNdetAddress() {}
39 static uint32_t GetAddress(uint32_t ArmId, uint32_t RowId, uint32_t ColumnId, uint32_t LayerId)
40 {
41 assert((uint32_t)kNDET <= fgkSystemIdLength);
42 assert(ArmId <= fgkArmIdLength);
43 assert(RowId <= fgkRowIdLength);
44 assert(ColumnId <= fgkColumnIdLength);
45 assert(LayerId <= fgkLayerIdLength);
46 return ((((uint32_t)kNDET) << fgkSystemIdShift) | (ArmId << fgkArmIdShift) | (RowId << fgkRowIdShift)
47 | (ColumnId << fgkColumnIdShift) | (LayerId << fgkLayerIdShift));
48 }
49
55 static std::string GetInfoString(uint32_t address)
56 {
57 std::ostringstream oss;
58 oss << "Address: " << address << ", SystemId: " << GetSystemId(address) << ", ArmId: " << GetArmId(address)
59 << ", RowId: " << GetRowId(address) << ", ColumnId: " << GetColumnId(address)
60 << ", LayerId: " << GetLayerId(address);
61 return oss.str();
62 }
63
69 static uint32_t GetSystemId(uint32_t address)
70 {
71 return (address & (fgkSystemIdLength << fgkSystemIdShift)) >> fgkSystemIdShift;
72 }
73
79 static uint32_t GetArmId(uint32_t address)
80 {
81 return (address & (fgkArmIdLength << fgkArmIdShift)) >> fgkArmIdShift;
82 }
83
89 static uint32_t GetRowId(uint32_t address)
90 {
91 return (address & (fgkRowIdLength << fgkRowIdShift)) >> fgkRowIdShift;
92 }
93
99 static uint32_t GetColumnId(uint32_t address)
100 {
101 return (address & (fgkColumnIdLength << fgkColumnIdShift)) >> fgkColumnIdShift;
102 }
103
109 static uint32_t GetLayerId(uint32_t address)
110 {
111 return (address & (fgkLayerIdLength << fgkLayerIdShift)) >> fgkLayerIdShift;
112 }
113
114 private:
115 // Length of the index of the corresponding volume
116 static const uint32_t fgkSystemIdLength = 31; // 2^5 - 1
117 static const uint32_t fgkArmIdLength = 3; // 2^2 - 1
118 static const uint32_t fgkRowIdLength = 15; // 2^4 - 1
119 static const uint32_t fgkColumnIdLength = 15; // 2^4 - 1
120 static const uint32_t fgkLayerIdLength = 31; // 2^5 - 1
121
122 // Number of a start bit for each volume
123 static const uint32_t fgkSystemIdShift = 0;
124 static const uint32_t fgkArmIdShift = 5;
125 static const uint32_t fgkRowIdShift = 7;
126 static const uint32_t fgkColumnIdShift = 11;
127 static const uint32_t fgkLayerIdShift = 15;
128
129 ClassDef(BmnNdetAddress, 1)
130};
131
132#endif
@ kNDET
BmnNdet interface class to the unique address.
static std::string GetInfoString(uint32_t address)
Return a formatted string with all address components.
static uint32_t GetRowId(uint32_t address)
Return Row id from address.
virtual ~BmnNdetAddress()
static uint32_t GetSystemId(uint32_t address)
Return System identifier from address.
static uint32_t GetAddress(uint32_t ArmId, uint32_t RowId, uint32_t ColumnId, uint32_t LayerId)
Return address.
static uint32_t GetColumnId(uint32_t address)
Return Column id from address.
static uint32_t GetArmId(uint32_t address)
Return Arm id from address.
static uint32_t GetLayerId(uint32_t address)
Return Layer id from address.