ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
TrigT1RPChardware
src
SectorLogicRXReadOutStructure.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
TrigT1RPChardware/SectorLogicRXReadOutStructure.h
"
6
7
#include <fstream>
8
#include <iostream>
9
#include <string>
10
11
//----------------------------------------------------------------------------//
12
SectorLogicRXReadOutStructure::SectorLogicRXReadOutStructure
() {
13
//
14
// Constructor used by the simulation program
15
//
16
setInit
();
17
}
18
//----------------------------------------------------------------------------//
19
SectorLogicRXReadOutStructure::SectorLogicRXReadOutStructure
(
ubit16
inputData) {
20
//
21
// Constructor used by the simulation program
22
//
23
decodeFragment
(inputData,
m_field
);
24
}
25
//----------------------------------------------------------------------------//
26
void
SectorLogicRXReadOutStructure::setInit
() {
m_field
=
'U'
; }
27
//----------------------------------------------------------------------------//
28
29
ubit16
SectorLogicRXReadOutStructure::makeHeader
(
ubit16
*inputData) {
30
m_word
=
set16Bits
(
s_headerNum
,
s_headerPos
.data(), inputData);
// theHeader);
31
return
m_word
;
32
}
33
//----------------------------------------------------------------------------//
34
ubit16
SectorLogicRXReadOutStructure::makeFooter
(
ubit16
*inputData) {
35
m_word
=
set16Bits
(
s_footerNum
,
s_footerPos
.data(), inputData);
36
return
m_word
;
37
}
38
//----------------------------------------------------------------------------//
39
ubit16
SectorLogicRXReadOutStructure::decodeFragment
(
ubit16
inputWord,
char
&
field
) {
40
// bool last=false;
41
// Remove errorCode because it is not used
42
// ubit16 errorCode=0;
43
setInit
();
44
m_word
= inputWord;
45
// errorCode=0;
46
if
(
isHeader
()) {
47
m_field
=
'H'
;
48
m_fel1id
=
get16Bits
(inputWord,
s_headerPos
[2],
s_headerLen
[2]);
49
m_slid
=
get16Bits
(inputWord,
s_headerPos
[1],
s_headerLen
[1]);
50
}
else
if
(
isFooter
()) {
51
m_field
=
'F'
;
52
m_status
=
get16Bits
(inputWord,
s_footerPos
[1],
s_footerLen
[1]);
53
m_crc
=
get16Bits
(inputWord,
s_footerPos
[2],
s_footerLen
[2]);
54
}
else
if
(
isSubHeader
()) {
55
m_field
=
'S'
;
56
m_slbcid
=
get16Bits
(inputWord,
s_subHeaderPos
[1],
s_subHeaderLen
[1]);
57
}
else
if
(
isInputHeader
()) {
58
m_field
=
'I'
;
59
m_inputPadId
=
get16Bits
(inputWord,
s_inputHeaderPos
[2],
s_inputHeaderLen
[2]);
60
m_inputRowinBcid
=
get16Bits
(inputWord,
s_inputHeaderPos
[1],
s_inputHeaderLen
[1]);
61
}
else
if
(
isInputBody
()) {
62
m_field
=
'B'
;
63
m_inputRoi
=
get16Bits
(inputWord,
s_inputBodyPos
[6],
s_inputBodyLen
[6]);
64
m_inputThreshold
=
get16Bits
(inputWord,
s_inputBodyPos
[5],
s_inputBodyLen
[5]);
65
m_inputOuterPlane
=
get16Bits
(inputWord,
s_inputBodyPos
[4],
s_inputBodyLen
[4]);
66
m_inputOverlapPhi
=
get16Bits
(inputWord,
s_inputBodyPos
[3],
s_inputBodyLen
[3]);
67
m_inputOverlapEta
=
get16Bits
(inputWord,
s_inputBodyPos
[2],
s_inputBodyLen
[2]);
68
m_inputTriggerBcid
=
get16Bits
(inputWord,
s_inputBodyPos
[1],
s_inputBodyLen
[1]);
69
70
}
else
if
(
isOutputHeader
()) {
71
m_field
=
'O'
;
72
m_outputRowinBcid
=
get16Bits
(inputWord,
s_outputHeaderPos
[1],
s_outputHeaderLen
[1]);
73
ubit16
outTrigger =
get16Bits
(inputWord,
s_outputHeaderPos
[2],
s_outputHeaderLen
[2]);
74
m_outTriggerWord
.clear();
75
m_outTriggerWord
.push_back(outTrigger);
76
}
else
if
(
isOutputBody
()) {
77
m_field
=
'M'
;
78
ubit16
outTrigger =
get16Bits
(inputWord,
s_outputBodyPos
[1],
s_outputBodyLen
[1]);
79
m_outTriggerWord
.push_back(outTrigger);
80
if
(
m_outTriggerWord
.size() == 3) {
81
uint32_t muctpiWord =
82
((
m_outTriggerWord
[0] & 0x00ff) << 24) | ((
m_outTriggerWord
[1] & 0x0fff) << 12) | ((
m_outTriggerWord
[2] & 0x0fff));
83
84
m_moreThan2TriggerCand
= (muctpiWord & 0x1);
85
m_outputTriggerBcid
= (muctpiWord >> 27) & 0x7;
86
m_nTriggerCand
= 0;
87
int
iTriggerCand = 0;
88
if
(((muctpiWord >> 19) & 0x7) != 0x7) {
89
m_nTriggerCand
++;
90
iTriggerCand =
m_nTriggerCand
- 1;
91
m_outputThreshold
[iTriggerCand] = (muctpiWord >> 19) & 0x7;
92
m_outputRoi
[iTriggerCand] = (muctpiWord >> 1) & 0x1f;
93
m_outputOverlap
[iTriggerCand] = (muctpiWord >> 8) & 0x3;
94
}
95
if
(((muctpiWord >> 22) & 0x7) != 0x7) {
96
m_nTriggerCand
++;
97
iTriggerCand =
m_nTriggerCand
- 1;
98
m_outputThreshold
[iTriggerCand] = (muctpiWord >> 22) & 0x7;
99
m_outputRoi
[iTriggerCand] = (muctpiWord >> 10) & 0x1f;
100
m_outputOverlap
[iTriggerCand] = (muctpiWord >> 17) & 0x3;
101
}
102
}
103
}
104
105
field
=
m_field
;
106
return
0;
// temporary: force return to 0
107
}
108
109
//----------------------------------------------------------------------------//
110
bool
SectorLogicRXReadOutStructure::isHeader
() {
111
bool
status
=
false
;
112
ubit16
theHeader[
s_headerNum
] = {
s_headerVal
};
113
if
((
m_word
&
s_last4bitsON
) ==
set16Bits
(1,
s_headerPos
.data(), theHeader))
status
=
true
;
114
return
status
;
115
}
116
//----------------------------------------------------------------------------//
117
bool
SectorLogicRXReadOutStructure::isSubHeader
() {
118
bool
status
=
false
;
119
ubit16
theSubHeader[
s_subHeaderNum
] = {
s_subHeaderVal
};
120
if
((
m_word
&
s_last4bitsON
) ==
set16Bits
(1,
s_subHeaderPos
.data(), theSubHeader))
status
=
true
;
121
return
status
;
122
}
123
//----------------------------------------------------------------------------//
124
bool
SectorLogicRXReadOutStructure::isInputHeader
() {
125
bool
status
=
false
;
126
ubit16
theInputHeader[
s_inputHeaderNum
] = {
s_inputHeaderVal
};
127
if
((
m_word
&
s_last4bitsON
) ==
set16Bits
(1,
s_inputHeaderPos
.data(), theInputHeader))
status
=
true
;
128
return
status
;
129
}
130
//----------------------------------------------------------------------------//
131
bool
SectorLogicRXReadOutStructure::isOutputHeader
() {
132
bool
status
=
false
;
133
ubit16
theOutputHeader[
s_outputHeaderNum
] = {
s_outputHeaderVal
};
134
if
((
m_word
&
s_last4bitsON
) ==
set16Bits
(1,
s_outputHeaderPos
.data(), theOutputHeader))
status
=
true
;
135
return
status
;
136
}
137
//----------------------------------------------------------------------------//
138
bool
SectorLogicRXReadOutStructure::isInputBody
() {
139
bool
status
=
false
;
140
ubit16
theInputBody[
s_inputBodyNum
] = {
s_inputBodyVal
};
141
if
((
m_word
&
s_last4bitsON
) ==
set16Bits
(1,
s_inputBodyPos
.data(), theInputBody))
status
=
true
;
142
return
status
;
143
}
144
145
//----------------------------------------------------------------------------//
146
bool
SectorLogicRXReadOutStructure::isOutputBody
() {
147
bool
status
=
false
;
148
ubit16
theOutputBody[
s_outputBodyNum
] = {
s_outputBodyVal
};
149
if
((
m_word
&
s_last4bitsON
) ==
set16Bits
(1,
s_outputBodyPos
.data(), theOutputBody))
status
=
true
;
150
return
status
;
151
}
152
153
//-----------------------------------------------------------------------//
154
bool
SectorLogicRXReadOutStructure::isFooter
() {
155
bool
status
=
false
;
156
ubit16
theFooter[
s_footerNum
] = {
s_footerVal
};
157
if
((
m_word
&
s_last4bitsON
) ==
set16Bits
(1,
s_footerPos
.data(), theFooter))
status
=
true
;
158
return
status
;
159
}
ubit16
unsigned short int ubit16
Definition
RpcByteStreamEncoder.h:20
SectorLogicRXReadOutStructure.h
RPCReadOut::s_last4bitsON
static constexpr ubit16 s_last4bitsON
Definition
RPCReadOut.h:56
RPCReadOut::field
char field() const
Definition
RPCReadOut.h:19
RPCReadOut::get16Bits
ubit16 get16Bits(const ubit16 input, const ubit16 position, const ubit16 length) const
Definition
RPCReadOut.h:47
RPCReadOut::set16Bits
ubit16 set16Bits(const ubit16 n, const ubit16 *pos, const ubit16 *val) const
Definition
RPCReadOut.h:30
RPCReadOut::m_word
ubit16 m_word
Definition
RPCReadOut.h:27
RPCReadOut::m_field
char m_field
Definition
RPCReadOut.h:28
SectorLogicRXReadOutStructure::isHeader
bool isHeader()
Definition
SectorLogicRXReadOutStructure.cxx:110
SectorLogicRXReadOutStructure::isInputBody
bool isInputBody()
Definition
SectorLogicRXReadOutStructure.cxx:138
SectorLogicRXReadOutStructure::s_subHeaderPos
static constexpr std::array< ubit16, s_subHeaderNum > s_subHeaderPos
Definition
SectorLogicRXReadOutStructure.h:118
SectorLogicRXReadOutStructure::m_inputOverlapEta
ubit16 m_inputOverlapEta
Definition
SectorLogicRXReadOutStructure.h:92
SectorLogicRXReadOutStructure::decodeFragment
ubit16 decodeFragment(ubit16 inputWord, char &field)
Definition
SectorLogicRXReadOutStructure.cxx:39
SectorLogicRXReadOutStructure::s_inputHeaderPos
static constexpr std::array< ubit16, s_inputHeaderNum > s_inputHeaderPos
Definition
SectorLogicRXReadOutStructure.h:123
SectorLogicRXReadOutStructure::m_outTriggerWord
std::vector< ubit16 > m_outTriggerWord
Definition
SectorLogicRXReadOutStructure.h:87
SectorLogicRXReadOutStructure::s_headerNum
static constexpr ubit16 s_headerNum
Definition
SectorLogicRXReadOutStructure.h:112
SectorLogicRXReadOutStructure::m_outputRoi
std::array< ubit16, 2 > m_outputRoi
Definition
SectorLogicRXReadOutStructure.h:99
SectorLogicRXReadOutStructure::s_headerLen
static constexpr std::array< ubit16, s_headerNum > s_headerLen
Definition
SectorLogicRXReadOutStructure.h:114
SectorLogicRXReadOutStructure::s_footerPos
static constexpr std::array< ubit16, s_footerNum > s_footerPos
Definition
SectorLogicRXReadOutStructure.h:143
SectorLogicRXReadOutStructure::m_outputRowinBcid
ubit16 m_outputRowinBcid
Definition
SectorLogicRXReadOutStructure.h:85
SectorLogicRXReadOutStructure::s_footerLen
static constexpr std::array< ubit16, s_footerNum > s_footerLen
Definition
SectorLogicRXReadOutStructure.h:144
SectorLogicRXReadOutStructure::s_inputBodyPos
static constexpr std::array< ubit16, s_inputBodyNum > s_inputBodyPos
Definition
SectorLogicRXReadOutStructure.h:133
SectorLogicRXReadOutStructure::s_outputHeaderVal
static constexpr ubit16 s_outputHeaderVal
Definition
SectorLogicRXReadOutStructure.h:130
SectorLogicRXReadOutStructure::makeFooter
ubit16 makeFooter(ubit16 errorCode)
Definition
SectorLogicRXReadOutStructure.h:24
SectorLogicRXReadOutStructure::s_outputBodyPos
static constexpr std::array< ubit16, s_outputBodyNum > s_outputBodyPos
Definition
SectorLogicRXReadOutStructure.h:138
SectorLogicRXReadOutStructure::m_status
ubit16 m_status
Definition
SectorLogicRXReadOutStructure.h:103
SectorLogicRXReadOutStructure::SectorLogicRXReadOutStructure
SectorLogicRXReadOutStructure()
Definition
SectorLogicRXReadOutStructure.cxx:12
SectorLogicRXReadOutStructure::m_inputThreshold
ubit16 m_inputThreshold
Definition
SectorLogicRXReadOutStructure.h:90
SectorLogicRXReadOutStructure::m_outputOverlap
std::array< ubit16, 2 > m_outputOverlap
Definition
SectorLogicRXReadOutStructure.h:98
SectorLogicRXReadOutStructure::s_inputHeaderLen
static constexpr std::array< ubit16, s_inputHeaderNum > s_inputHeaderLen
Definition
SectorLogicRXReadOutStructure.h:124
SectorLogicRXReadOutStructure::m_inputOuterPlane
ubit16 m_inputOuterPlane
Definition
SectorLogicRXReadOutStructure.h:94
SectorLogicRXReadOutStructure::isFooter
bool isFooter()
Definition
SectorLogicRXReadOutStructure.cxx:154
SectorLogicRXReadOutStructure::s_outputHeaderNum
static constexpr ubit16 s_outputHeaderNum
Definition
SectorLogicRXReadOutStructure.h:127
SectorLogicRXReadOutStructure::isSubHeader
bool isSubHeader()
Definition
SectorLogicRXReadOutStructure.cxx:117
SectorLogicRXReadOutStructure::s_headerVal
static constexpr ubit16 s_headerVal
Definition
SectorLogicRXReadOutStructure.h:115
SectorLogicRXReadOutStructure::s_footerVal
static constexpr ubit16 s_footerVal
Definition
SectorLogicRXReadOutStructure.h:145
SectorLogicRXReadOutStructure::s_outputBodyLen
static constexpr std::array< ubit16, s_outputBodyNum > s_outputBodyLen
Definition
SectorLogicRXReadOutStructure.h:139
SectorLogicRXReadOutStructure::s_footerNum
static constexpr ubit16 s_footerNum
Definition
SectorLogicRXReadOutStructure.h:142
SectorLogicRXReadOutStructure::isOutputHeader
bool isOutputHeader()
Definition
SectorLogicRXReadOutStructure.cxx:131
SectorLogicRXReadOutStructure::s_inputHeaderNum
static constexpr ubit16 s_inputHeaderNum
Definition
SectorLogicRXReadOutStructure.h:122
SectorLogicRXReadOutStructure::m_outputThreshold
std::array< ubit16, 2 > m_outputThreshold
Definition
SectorLogicRXReadOutStructure.h:97
SectorLogicRXReadOutStructure::isOutputBody
bool isOutputBody()
Definition
SectorLogicRXReadOutStructure.cxx:146
SectorLogicRXReadOutStructure::s_outputBodyNum
static constexpr ubit16 s_outputBodyNum
Definition
SectorLogicRXReadOutStructure.h:137
SectorLogicRXReadOutStructure::m_nTriggerCand
ubit16 m_nTriggerCand
Definition
SectorLogicRXReadOutStructure.h:100
SectorLogicRXReadOutStructure::m_crc
ubit16 m_crc
Definition
SectorLogicRXReadOutStructure.h:104
SectorLogicRXReadOutStructure::s_subHeaderNum
static constexpr ubit16 s_subHeaderNum
Definition
SectorLogicRXReadOutStructure.h:117
SectorLogicRXReadOutStructure::m_inputOverlapPhi
ubit16 m_inputOverlapPhi
Definition
SectorLogicRXReadOutStructure.h:93
SectorLogicRXReadOutStructure::m_inputTriggerBcid
ubit16 m_inputTriggerBcid
Definition
SectorLogicRXReadOutStructure.h:89
SectorLogicRXReadOutStructure::s_inputBodyVal
static constexpr ubit16 s_inputBodyVal
Definition
SectorLogicRXReadOutStructure.h:135
SectorLogicRXReadOutStructure::s_inputBodyNum
static constexpr ubit16 s_inputBodyNum
Definition
SectorLogicRXReadOutStructure.h:132
SectorLogicRXReadOutStructure::s_inputHeaderVal
static constexpr ubit16 s_inputHeaderVal
Definition
SectorLogicRXReadOutStructure.h:125
SectorLogicRXReadOutStructure::makeHeader
ubit16 makeHeader(ubit16 *inputData)
Definition
SectorLogicRXReadOutStructure.cxx:29
SectorLogicRXReadOutStructure::m_outputTriggerBcid
ubit16 m_outputTriggerBcid
Definition
SectorLogicRXReadOutStructure.h:96
SectorLogicRXReadOutStructure::s_headerPos
static constexpr std::array< ubit16, s_headerNum > s_headerPos
Definition
SectorLogicRXReadOutStructure.h:113
SectorLogicRXReadOutStructure::m_slbcid
ubit16 m_slbcid
Definition
SectorLogicRXReadOutStructure.h:80
SectorLogicRXReadOutStructure::s_outputHeaderPos
static constexpr std::array< ubit16, s_outputHeaderNum > s_outputHeaderPos
Definition
SectorLogicRXReadOutStructure.h:128
SectorLogicRXReadOutStructure::m_moreThan2TriggerCand
bool m_moreThan2TriggerCand
Definition
SectorLogicRXReadOutStructure.h:101
SectorLogicRXReadOutStructure::s_subHeaderVal
static constexpr ubit16 s_subHeaderVal
Definition
SectorLogicRXReadOutStructure.h:120
SectorLogicRXReadOutStructure::s_outputHeaderLen
static constexpr std::array< ubit16, s_outputHeaderNum > s_outputHeaderLen
Definition
SectorLogicRXReadOutStructure.h:129
SectorLogicRXReadOutStructure::m_inputRowinBcid
ubit16 m_inputRowinBcid
Definition
SectorLogicRXReadOutStructure.h:82
SectorLogicRXReadOutStructure::m_fel1id
ubit16 m_fel1id
Definition
SectorLogicRXReadOutStructure.h:78
SectorLogicRXReadOutStructure::status
ubit16 status() const
Definition
SectorLogicRXReadOutStructure.h:68
SectorLogicRXReadOutStructure::isInputHeader
bool isInputHeader()
Definition
SectorLogicRXReadOutStructure.cxx:124
SectorLogicRXReadOutStructure::s_outputBodyVal
static constexpr ubit16 s_outputBodyVal
Definition
SectorLogicRXReadOutStructure.h:140
SectorLogicRXReadOutStructure::m_inputPadId
ubit16 m_inputPadId
Definition
SectorLogicRXReadOutStructure.h:83
SectorLogicRXReadOutStructure::m_slid
ubit16 m_slid
Definition
SectorLogicRXReadOutStructure.h:77
SectorLogicRXReadOutStructure::m_inputRoi
ubit16 m_inputRoi
Definition
SectorLogicRXReadOutStructure.h:91
SectorLogicRXReadOutStructure::setInit
void setInit()
Definition
SectorLogicRXReadOutStructure.cxx:26
SectorLogicRXReadOutStructure::s_subHeaderLen
static constexpr std::array< ubit16, s_subHeaderNum > s_subHeaderLen
Definition
SectorLogicRXReadOutStructure.h:119
SectorLogicRXReadOutStructure::s_inputBodyLen
static constexpr std::array< ubit16, s_inputBodyNum > s_inputBodyLen
Definition
SectorLogicRXReadOutStructure.h:134
Generated on
for ATLAS Offline Software by
1.17.0