BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
CbmStsAddress.cxx
Go to the documentation of this file.
1
/** @file CbmStsAddress.h
2
** @author Volker Friese <v.friese@gsi.de>
3
** @date 17.05.2013
4
**/
5
6
#include "
setup/CbmStsAddress.h
"
7
8
#include "CbmDetectorList.h"
9
10
// ----- Definition of the address field -------------------------------
11
const
Int_t
CbmStsAddress::fgkBits
[] = {fgkSystemBits,
// system = kSTS
12
4,
// station
13
4,
// ladder
14
1,
// halfladder
15
3,
// module
16
2,
// sensor
17
1,
// side
18
13};
// channel
19
// -------------------------------------------------------------------------
20
21
// ----- Initialisation of bit shifts -----------------------------------
22
const
Int_t
CbmStsAddress::fgkShift
[] = {0,
23
CbmStsAddress::fgkShift
[0] +
CbmStsAddress::fgkBits
[0],
24
CbmStsAddress::fgkShift
[1] +
CbmStsAddress::fgkBits
[1],
25
CbmStsAddress::fgkShift
[2] +
CbmStsAddress::fgkBits
[2],
26
CbmStsAddress::fgkShift
[3] +
CbmStsAddress::fgkBits
[3],
27
CbmStsAddress::fgkShift
[4] +
CbmStsAddress::fgkBits
[4],
28
CbmStsAddress::fgkShift
[5] +
CbmStsAddress::fgkBits
[5],
29
CbmStsAddress::fgkShift
[6] +
CbmStsAddress::fgkBits
[6]};
30
// -------------------------------------------------------------------------
31
32
// ----- Initialisation of bit masks -----------------------------------
33
const
Int_t
CbmStsAddress::fgkMask
[] = {(1 << fgkBits[0]) - 1, (1 << fgkBits[1]) - 1, (1 << fgkBits[2]) - 1,
34
(1 << fgkBits[3]) - 1, (1 << fgkBits[4]) - 1, (1 << fgkBits[5]) - 1,
35
(1 << fgkBits[6]) - 1, (1 << fgkBits[7]) - 1};
36
// -------------------------------------------------------------------------
37
38
// ----- Unique element address -----------------------------------------
39
UInt_t
CbmStsAddress::GetAddress
(
Int_t
station,
40
Int_t
ladder,
41
Int_t
halfladder,
42
Int_t
module,
43
Int_t
sensor,
44
Int_t
side,
45
Int_t
channel)
46
{
47
48
// Catch overrunning of allowed ranges
49
if
(station >= (1 <<
fgkBits
[
kStsStation
])) {
50
LOG(error) <<
"Station Id "
<< station <<
" exceeds maximum ("
<< (1 <<
fgkBits
[
kStsStation
]) - 1 <<
")"
;
51
return
0;
52
}
53
if
(ladder >= (1 <<
fgkBits
[
kStsLadder
])) {
54
LOG(error) <<
"Ladder Id "
<< ladder <<
" exceeds maximum ("
<< (1 <<
fgkBits
[
kStsLadder
]) - 1 <<
")"
;
55
return
0;
56
}
57
if
(halfladder >= (1 <<
fgkBits
[
kStsHalfLadder
])) {
58
LOG(error) <<
"HalfLadder Id "
<< halfladder <<
" exceeds maximum ("
<< (1 <<
fgkBits
[
kStsHalfLadder
]) - 1
59
<<
")"
;
60
return
0;
61
}
62
if
(module >= (1 <<
fgkBits
[
kStsModule
])) {
63
LOG(error) <<
"Module Id "
<<
module
<< " exceeds maximum (" << (1 << fgkBits[kStsModule]) - 1 << ")";
64
return
0;
65
}
66
if
(sensor >= (1 <<
fgkBits
[
kStsSensor
])) {
67
LOG(error) <<
"Sensor Id "
<< sensor <<
" exceeds maximum ("
<< (1 <<
fgkBits
[
kStsSensor
]) - 1 <<
")"
;
68
return
0;
69
}
70
if
(side >= (1 <<
fgkBits
[
kStsSide
])) {
71
LOG(error) <<
"Side Id "
<< side <<
" exceeds maximum ("
<< (1 <<
fgkBits
[
kStsSide
]) - 1 <<
")"
;
72
return
0;
73
}
74
if
(channel >= (1 <<
fgkBits
[
kStsChannel
])) {
75
LOG(error) <<
"Channel Id "
<< channel <<
" exceeds maximum ("
<< (1 <<
fgkBits
[
kStsChannel
]) - 1 <<
")"
;
76
return
0;
77
}
78
79
return
kSts <<
fgkShift
[
kStsSystem
] | station <<
fgkShift
[
kStsStation
] | ladder <<
fgkShift
[
kStsLadder
]
80
| halfladder <<
fgkShift
[
kStsHalfLadder
] |
module
<< fgkShift[kStsModule] | sensor << fgkShift[kStsSensor]
81
| side << fgkShift[kStsSide] | channel << fgkShift[kStsChannel];
82
}
83
// -------------------------------------------------------------------------
84
85
// ----- Unique element address -----------------------------------------
86
UInt_t
CbmStsAddress::GetAddress
(
Int_t
* elementId)
87
{
88
89
UInt_t
address = kSts <<
fgkShift
[
kStsSystem
];
90
for
(
Int_t
level = 1; level <
kStsNofLevels
; level++) {
91
if
(elementId[level] >= (1 <<
fgkBits
[level])) {
92
LOG(error) <<
"Id "
<< elementId[level] <<
" for STS level "
<< level <<
" exceeds maximum ("
93
<< (1 <<
fgkBits
[level]) - 1 <<
")"
;
94
return
0;
95
}
96
address = address | (elementId[level] <<
fgkShift
[level]);
97
}
98
99
return
address;
100
}
101
// -------------------------------------------------------------------------
102
103
// ----- Print info ----------------------------------------------------
104
void
CbmStsAddress::Print
()
105
{
106
LOG(info) <<
"Number of STS levels is "
<<
kStsNofLevels
;
107
for
(
Int_t
level = 0; level <
kStsNofLevels
; level++)
108
LOG(info) <<
"Level "
<< std::setw(2) << std::right << level <<
": bits "
<< std::setw(2) <<
fgkBits
[level]
109
<<
", max. range "
<< std::setw(6) <<
fgkMask
[level];
110
}
111
// -------------------------------------------------------------------------
CbmStsAddress.h
kStsModule
@ kStsModule
Module.
Definition
CbmStsAddress.h:25
kStsStation
@ kStsStation
Station.
Definition
CbmStsAddress.h:22
kStsLadder
@ kStsLadder
Ladder.
Definition
CbmStsAddress.h:23
kStsSystem
@ kStsSystem
System = STS.
Definition
CbmStsAddress.h:21
kStsSide
@ kStsSide
Side.
Definition
CbmStsAddress.h:27
kStsNofLevels
@ kStsNofLevels
Number of STS levels.
Definition
CbmStsAddress.h:29
kStsHalfLadder
@ kStsHalfLadder
Halfladder.
Definition
CbmStsAddress.h:24
kStsSensor
@ kStsSensor
Sensor.
Definition
CbmStsAddress.h:26
kStsChannel
@ kStsChannel
Channel.
Definition
CbmStsAddress.h:28
Int_t
int Int_t
UInt_t
unsigned int UInt_t
CbmStsAddress::GetAddress
static UInt_t GetAddress(Int_t station=0, Int_t ladder=0, Int_t halfladder=0, Int_t module=0, Int_t sensor=0, Int_t side=0, Int_t channel=0)
Construct address.
Definition
CbmStsAddress.cxx:39
CbmStsAddress::fgkMask
static const Int_t fgkMask[kStsNofLevels]
Bit masks for the different levels.
Definition
CbmStsAddress.h:33
CbmStsAddress::Print
static void Print()
Print information on the bit field.
Definition
CbmStsAddress.cxx:104
CbmStsAddress::fgkShift
static const Int_t fgkShift[kStsNofLevels]
Bit shifts for the different levels.
Definition
CbmStsAddress.h:22
CbmStsAddress::fgkBits
static const Int_t fgkBits[kStsNofLevels]
Number of bits for the different levels.
Definition
CbmStsAddress.h:11
detectors
sts
setup
CbmStsAddress.cxx
Generated on
for BmnRoot by
1.17.0