ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonCnv
MuonCSC_CnvTools
src
CscRODReadOutV0.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef MUONCSC_CNVTOOL_CSCRODREADOUTV0_H
6
#define MUONCSC_CNVTOOL_CSCRODREADOUTV0_H
7
8
9
10
#include "
MuonIdHelpers/CscIdHelper.h
"
11
#include <stdint.h>
12
#include <cmath>
13
#include <vector>
14
15
// CSC ROD encoder/decoder for CscRDO
16
// Author Ketevi A. Assamagan
17
// BNL December 27 2003
18
19
class
CscRODReadOutV0
{
20
public
:
21
CscRODReadOutV0
();
22
~CscRODReadOutV0
() =
default
;
23
24
// get static head/footer information
25
uint32_t
getHeaderMarker
() {
return
ROD_HEADER
; }
26
uint32_t
getHeaderSize
() {
return
ROD_HEADER_SIZE
; }
27
uint32_t
getFooterSize
() {
return
ROD_FOOTER_SIZE
; }
28
uint32_t
getFormatVersion
() {
return
ROD_VERSION
; }
29
double
getSamplingTime
() {
return
m_SAMPLING_TIME
; }
30
double
getStartTime
() {
return
m_TIME_OFFSET
; }
31
double
getConversion
() {
return
m_CHARGE_TO_ADC_COUNT
; }
32
double
getMaxTimeBin
() {
return
m_Z0
; }
33
34
// encoding
35
uint32_t
getSourceID
(uint16_t side, uint16_t
rodId
);
36
void
encodeFragments
(
const
uint16_t* amplitude,
const
uint32_t&
address
, std::vector<uint32_t>& v)
const
;
37
38
// initialize helper
39
void
set
(
const
CscIdHelper
* cscHelper) {
m_cscHelper
= cscHelper; }
40
41
// testing
42
bool
isBody
(
const
uint32_t fragment)
const
;
43
bool
isAmplitude
(
const
uint16_t fragment)
const
;
44
bool
isAddress
(
const
uint32_t fragment)
const
;
45
46
// Decoding
47
void
decodeSourceID
(uint32_t sourceId);
48
void
decodeAmplitude
(
const
uint32_t fragment,
int
index
);
49
void
decodeAddress
(
const
uint32_t fragment);
50
Identifier
decodeAddress
();
51
Identifier
decodeAddress
(
const
Identifier
& moduleId);
52
double
findCharge
();
53
double
signal_amplitude
(
double
samplingTime)
const
;
54
uint32_t
address
(
const
Identifier
& channelId,
int
&
eta
,
int
&
phi
)
const
;
55
56
// Retrieve decoded results
57
uint16_t
sourceID
()
const
{
return
m_sourceID
; }
58
uint16_t
moduleType
()
const
{
return
m_moduleType
; }
59
uint16_t
subDetectorId
()
const
{
return
m_subDetectorId
; }
60
uint16_t
rodId
()
const
{
return
m_rodId
; }
61
uint16_t
getAmp1
()
const
{
return
m_amp1
; }
62
uint16_t
getAmp2
()
const
{
return
m_amp2
; }
63
uint16_t
getAmp3
()
const
{
return
m_amp3
; }
64
uint16_t
getAmp4
()
const
{
return
m_amp4
; }
65
uint32_t
address
()
const
{
return
m_address
; }
66
67
private
:
68
const
CscIdHelper
*
m_cscHelper
;
69
uint16_t
m_sourceID
;
70
uint16_t
m_moduleType
;
71
uint16_t
m_rodId
;
72
uint16_t
m_subDetectorId
;
73
uint16_t
m_amp1
;
74
uint16_t
m_amp2
;
75
uint16_t
m_amp3
;
76
uint16_t
m_amp4
;
77
uint32_t
m_address
;
78
double
m_norm
;
79
80
double
m_TIME_OFFSET
;
81
double
m_SIGNAL_WIDTH
;
82
double
m_SAMPLING_TIME
;
83
int
m_NUMBER_OF_INTEGRATION
;
84
double
m_CHARGE_TO_ADC_COUNT
;
85
double
m_Z0
;
86
87
static
const
uint32_t
ROD_HEADER
= 0xEE1234EE;
88
static
const
uint32_t
ROD_HEADER_SIZE
= 0x8;
89
static
const
uint32_t
ROD_VERSION
= 0x00000000;
90
static
const
uint32_t
ROD_FOOTER_SIZE
= 0x3;
91
92
static
const
uint16_t
SOURCE_ID
= 0x00;
93
static
const
uint16_t
MODULE_TYPE
= 0x00;
94
95
static
const
uint16_t
BODY_AMPLITUDE
= 0x000A;
96
static
const
uint32_t
BODY_ADDRESS
= 0x0000000C;
97
98
void
set32bits
(
const
uint16_t* v16, uint32_t& v32)
const
;
99
double
signal
(
double
z
)
const
;
100
};
101
102
inline
uint32_t
CscRODReadOutV0::getSourceID
(uint16_t side, uint16_t
rodId
) {
103
uint32_t sourceIdentifier = 0;
104
sourceIdentifier =
SOURCE_ID
<< 24 |
MODULE_TYPE
<< 16 | side << 8 |
rodId
;
105
return
sourceIdentifier;
106
}
107
108
inline
void
CscRODReadOutV0::decodeSourceID
(uint32_t
sourceID
) {
109
m_sourceID
= (
sourceID
& 0xff000000) >> 24;
110
m_moduleType
= (
sourceID
& 0x00ff0000) >> 16;
111
m_subDetectorId
= (
sourceID
& 0x0000ff00) >> 8;
112
m_rodId
= (
sourceID
& 0x000000ff);
113
}
114
115
inline
void
CscRODReadOutV0::set32bits
(
const
uint16_t* v16, uint32_t& v32)
const
{
116
uint32_t p = 0, v = 0;
117
uint16_t n = 2;
118
uint16_t pos[] = {0, 16};
119
for
(uint16_t i = 0; i < n; i++) {
120
v = (uint32_t)(*(v16 + i));
121
p = (uint32_t)(*(pos + i));
122
v32 = v32 | (v << p);
123
}
124
}
125
126
inline
bool
CscRODReadOutV0::isBody
(
const
uint32_t fragment)
const
{
return
(0x80000000 & fragment); }
127
128
inline
bool
CscRODReadOutV0::isAmplitude
(
const
uint16_t fragment)
const
{
return
(0xA000 & fragment); }
129
130
inline
bool
CscRODReadOutV0::isAddress
(
const
uint32_t fragment)
const
{
return
(0xC0000000 & fragment); }
131
132
inline
void
CscRODReadOutV0::decodeAmplitude
(
const
uint32_t fragment,
int
index
) {
133
uint32_t amp1 = 0;
134
uint32_t amp2 = 0;
135
amp1 = 0x0000FFFF & fragment;
136
amp2 = (0xFFFF0000 & fragment) >> 16;
137
if
(
index
== 1) {
138
m_amp1
= 0x0FFF & amp1;
139
m_amp2
= 0x0FFF & amp2;
140
}
else
{
141
m_amp3
= 0x0FFF & amp1;
142
m_amp4
= 0x0FFF & amp2;
143
}
144
}
145
146
inline
void
CscRODReadOutV0::decodeAddress
(
const
uint32_t fragment) {
m_address
= 0x0003FFFF & fragment; }
147
148
inline
Identifier
CscRODReadOutV0::decodeAddress
() {
149
int
stationName = ((
m_address
& 0x00020000) >> 17) + 50;
150
int
stationEta = (((
m_address
& 0x00010000) >> 16) == 0x0) ? -1 : 1;
151
int
stationPhi = ((
m_address
& 0x0000E000) >> 13) + 1;
152
153
return
m_cscHelper
->elementID(stationName, stationEta, stationPhi);
154
}
155
156
inline
Identifier
CscRODReadOutV0::decodeAddress
(
const
Identifier
& moduleId) {
157
int
chamberLayer = ((
m_address
& 0x00001000) >> 12) + 1;
158
int
wireLayer = ((
m_address
& 0x00000E00) >> 9) + 1;
159
int
measuresPhi = ((
m_address
& 0x00000100) >> 8);
160
int
strip
= (
m_address
& 0x000000FF);
161
return
m_cscHelper
->channelID(moduleId, chamberLayer, wireLayer, measuresPhi,
strip
);
162
}
163
164
// get the signal amplitude for a given sampling time (ns)
165
inline
double
CscRODReadOutV0::signal_amplitude
(
double
samplingTime)
const
{
166
if
(samplingTime <=
m_TIME_OFFSET
)
return
0.0;
167
double
z
= (samplingTime -
m_TIME_OFFSET
) /
m_SIGNAL_WIDTH
;
168
return
signal
(
z
) /
m_norm
;
169
}
170
171
// signal amplitude as a function of the time bin z
172
inline
double
CscRODReadOutV0::signal
(
double
z
)
const
{
173
double
amplitude = (1.0 -
z
/ (1 +
m_NUMBER_OF_INTEGRATION
)) * std::pow(
z
,
m_NUMBER_OF_INTEGRATION
) * std::exp(-
z
);
174
return
amplitude;
175
}
176
177
// find the address of this strip
178
inline
uint32_t
CscRODReadOutV0::address
(
const
Identifier
& channelId,
int
&
eta
,
int
&
phi
)
const
{
179
// unpack the strip identifier
180
int
name =
m_cscHelper
->stationName(channelId);
181
eta
=
m_cscHelper
->stationEta(channelId);
182
phi
=
m_cscHelper
->stationPhi(channelId);
183
int
chamberLayer =
m_cscHelper
->chamberLayer(channelId);
184
int
wireLayer =
m_cscHelper
->wireLayer(channelId);
185
int
orientation =
m_cscHelper
->measuresPhi(channelId);
186
int
strip
=
m_cscHelper
->strip(channelId);
187
188
// redefine the ranges
189
uint32_t nameIndex = uint32_t(name - 50);
190
uint32_t etaIndex = (
eta
== -1) ? 0 : 1;
191
uint32_t phiIndex = uint32_t(
phi
- 1);
192
uint32_t chamberIndex = uint32_t(chamberLayer - 1);
193
uint32_t layerIndex = uint32_t(wireLayer - 1);
194
uint32_t stripType = uint32_t(orientation);
195
uint32_t stripNumber = uint32_t(
strip
);
196
197
// build the address
198
uint32_t
address
=
199
nameIndex << 17 | etaIndex << 16 | phiIndex << 13 | chamberIndex << 12 | layerIndex << 9 | stripType << 8 | stripNumber;
200
201
return
address
;
202
}
203
204
#endif
// MUONCSC_CNVTOOL_CSCRODREADOUTV0_H
eta
Scalar eta() const
pseudorapidity method
Definition
AmgMatrixBasePlugin.h:83
phi
Scalar phi() const
phi method
Definition
AmgMatrixBasePlugin.h:67
CscIdHelper.h
SiliconTech::strip
@ strip
Definition
FPGATrackSimTypes.h:25
z
#define z
CscIdHelper
Definition
CscIdHelper.h:52
CscRODReadOutV0::decodeAmplitude
void decodeAmplitude(const uint32_t fragment, int index)
Definition
CscRODReadOutV0.h:132
CscRODReadOutV0::m_Z0
double m_Z0
Definition
CscRODReadOutV0.h:85
CscRODReadOutV0::sourceID
uint16_t sourceID() const
Definition
CscRODReadOutV0.h:57
CscRODReadOutV0::ROD_VERSION
static const uint32_t ROD_VERSION
Definition
CscRODReadOutV0.h:89
CscRODReadOutV0::subDetectorId
uint16_t subDetectorId() const
Definition
CscRODReadOutV0.h:59
CscRODReadOutV0::BODY_AMPLITUDE
static const uint16_t BODY_AMPLITUDE
Definition
CscRODReadOutV0.h:95
CscRODReadOutV0::m_moduleType
uint16_t m_moduleType
Definition
CscRODReadOutV0.h:70
CscRODReadOutV0::rodId
uint16_t rodId() const
Definition
CscRODReadOutV0.h:60
CscRODReadOutV0::getAmp1
uint16_t getAmp1() const
Definition
CscRODReadOutV0.h:61
CscRODReadOutV0::getAmp2
uint16_t getAmp2() const
Definition
CscRODReadOutV0.h:62
CscRODReadOutV0::encodeFragments
void encodeFragments(const uint16_t *amplitude, const uint32_t &address, std::vector< uint32_t > &v) const
Definition
CscRODReadOutV0.cxx:54
CscRODReadOutV0::m_address
uint32_t m_address
Definition
CscRODReadOutV0.h:77
CscRODReadOutV0::ROD_FOOTER_SIZE
static const uint32_t ROD_FOOTER_SIZE
Definition
CscRODReadOutV0.h:90
CscRODReadOutV0::getHeaderMarker
uint32_t getHeaderMarker()
Definition
CscRODReadOutV0.h:25
CscRODReadOutV0::m_norm
double m_norm
Definition
CscRODReadOutV0.h:78
CscRODReadOutV0::m_SAMPLING_TIME
double m_SAMPLING_TIME
Definition
CscRODReadOutV0.h:82
CscRODReadOutV0::BODY_ADDRESS
static const uint32_t BODY_ADDRESS
Definition
CscRODReadOutV0.h:96
CscRODReadOutV0::m_amp2
uint16_t m_amp2
Definition
CscRODReadOutV0.h:74
CscRODReadOutV0::signal
double signal(double z) const
Definition
CscRODReadOutV0.h:172
CscRODReadOutV0::CscRODReadOutV0
CscRODReadOutV0()
Definition
CscRODReadOutV0.cxx:9
CscRODReadOutV0::ROD_HEADER_SIZE
static const uint32_t ROD_HEADER_SIZE
Definition
CscRODReadOutV0.h:88
CscRODReadOutV0::m_TIME_OFFSET
double m_TIME_OFFSET
Definition
CscRODReadOutV0.h:80
CscRODReadOutV0::m_sourceID
uint16_t m_sourceID
Definition
CscRODReadOutV0.h:69
CscRODReadOutV0::signal_amplitude
double signal_amplitude(double samplingTime) const
Definition
CscRODReadOutV0.h:165
CscRODReadOutV0::getHeaderSize
uint32_t getHeaderSize()
Definition
CscRODReadOutV0.h:26
CscRODReadOutV0::isBody
bool isBody(const uint32_t fragment) const
Definition
CscRODReadOutV0.h:126
CscRODReadOutV0::m_rodId
uint16_t m_rodId
Definition
CscRODReadOutV0.h:71
CscRODReadOutV0::SOURCE_ID
static const uint16_t SOURCE_ID
Definition
CscRODReadOutV0.h:92
CscRODReadOutV0::m_subDetectorId
uint16_t m_subDetectorId
Definition
CscRODReadOutV0.h:72
CscRODReadOutV0::decodeAddress
Identifier decodeAddress()
Definition
CscRODReadOutV0.h:148
CscRODReadOutV0::getFormatVersion
uint32_t getFormatVersion()
Definition
CscRODReadOutV0.h:28
CscRODReadOutV0::findCharge
double findCharge()
Definition
CscRODReadOutV0.cxx:69
CscRODReadOutV0::m_amp3
uint16_t m_amp3
Definition
CscRODReadOutV0.h:75
CscRODReadOutV0::getConversion
double getConversion()
Definition
CscRODReadOutV0.h:31
CscRODReadOutV0::isAddress
bool isAddress(const uint32_t fragment) const
Definition
CscRODReadOutV0.h:130
CscRODReadOutV0::getAmp4
uint16_t getAmp4() const
Definition
CscRODReadOutV0.h:64
CscRODReadOutV0::moduleType
uint16_t moduleType() const
Definition
CscRODReadOutV0.h:58
CscRODReadOutV0::address
uint32_t address(const Identifier &channelId, int &eta, int &phi) const
Definition
CscRODReadOutV0.h:178
CscRODReadOutV0::m_amp4
uint16_t m_amp4
Definition
CscRODReadOutV0.h:76
CscRODReadOutV0::set
void set(const CscIdHelper *cscHelper)
Definition
CscRODReadOutV0.h:39
CscRODReadOutV0::getFooterSize
uint32_t getFooterSize()
Definition
CscRODReadOutV0.h:27
CscRODReadOutV0::decodeSourceID
void decodeSourceID(uint32_t sourceId)
Definition
CscRODReadOutV0.h:108
CscRODReadOutV0::m_cscHelper
const CscIdHelper * m_cscHelper
Definition
CscRODReadOutV0.h:68
CscRODReadOutV0::ROD_HEADER
static const uint32_t ROD_HEADER
Definition
CscRODReadOutV0.h:87
CscRODReadOutV0::m_SIGNAL_WIDTH
double m_SIGNAL_WIDTH
Definition
CscRODReadOutV0.h:81
CscRODReadOutV0::~CscRODReadOutV0
~CscRODReadOutV0()=default
CscRODReadOutV0::getAmp3
uint16_t getAmp3() const
Definition
CscRODReadOutV0.h:63
CscRODReadOutV0::getStartTime
double getStartTime()
Definition
CscRODReadOutV0.h:30
CscRODReadOutV0::m_amp1
uint16_t m_amp1
Definition
CscRODReadOutV0.h:73
CscRODReadOutV0::MODULE_TYPE
static const uint16_t MODULE_TYPE
Definition
CscRODReadOutV0.h:93
CscRODReadOutV0::set32bits
void set32bits(const uint16_t *v16, uint32_t &v32) const
Definition
CscRODReadOutV0.h:115
CscRODReadOutV0::getMaxTimeBin
double getMaxTimeBin()
Definition
CscRODReadOutV0.h:32
CscRODReadOutV0::m_NUMBER_OF_INTEGRATION
int m_NUMBER_OF_INTEGRATION
Definition
CscRODReadOutV0.h:83
CscRODReadOutV0::getSourceID
uint32_t getSourceID(uint16_t side, uint16_t rodId)
Definition
CscRODReadOutV0.h:102
CscRODReadOutV0::isAmplitude
bool isAmplitude(const uint16_t fragment) const
Definition
CscRODReadOutV0.h:128
CscRODReadOutV0::address
uint32_t address() const
Definition
CscRODReadOutV0.h:65
CscRODReadOutV0::getSamplingTime
double getSamplingTime()
Definition
CscRODReadOutV0.h:29
CscRODReadOutV0::m_CHARGE_TO_ADC_COUNT
double m_CHARGE_TO_ADC_COUNT
Definition
CscRODReadOutV0.h:84
Identifier
Definition
IdentifierFieldParser.cxx:14
index
Definition
index.py:1
Generated on
for ATLAS Offline Software by
1.17.0