ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
TrigT1TGC
src
TGCSlaveBoard.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
TrigT1TGC/TGCSlaveBoard.h
"
6
#include "
TrigT1TGC/TGCPatchPanel.h
"
7
#include "
TrigT1TGC/TGCPatchPanelOut.h
"
8
9
#include <iostream>
10
#include <iomanip>
11
#include <cstdlib>
12
#include <string>
13
14
namespace
LVL1TGCTrigger
{
15
16
TGCSlaveBoard::TGCSlaveBoard
()
17
:
m_lengthOfCoincidenceOut
(0),
m_coincidenceOut
(0),
18
m_slaveBoardOut
(0),
19
m_id
(0),
m_bid
(-1),
m_idHighPtBoard
(0),
20
m_type
(0),
m_region
(
TGCRegionType
::
FORWARD
),
21
m_patchPanel
(0),
m_patchPanelOut
(0)
22
{
23
}
24
25
TGCSlaveBoard::~TGCSlaveBoard
()
26
{
27
if
(
m_coincidenceOut
!=0)
delete
m_coincidenceOut
;
28
if
(
m_slaveBoardOut
!=0)
delete
m_slaveBoardOut
;
29
30
m_coincidenceOut
=0;
31
m_slaveBoardOut
=0;
32
m_patchPanel
=0;
33
34
deletePatchPanelOut
();
35
}
36
37
void
TGCSlaveBoard::clockIn
(
int
bidIn)
38
{
39
m_bid
= bidIn;
40
collectInput
();
41
42
m_slbin
.reset();
43
44
#ifdef TGCDEBUG
45
int
i;
46
std::cout <<
"#SB: BID= "
<<
m_bid
;
47
std::cout <<
" Rgn= "
<<
m_region
;
48
std::cout <<
" Typ= "
<<
getTypeName
(
m_type
);
49
std::cout <<
" ID= "
<<
m_id
<< std::endl;
50
if
(
m_patchPanelOut
!=0){
51
for
( i=0; i<
NumberOfConnectorPerPPOut
; i+=1)
52
if
(
m_patchPanelOut
->getHitPattern(i)!=0){
53
std::cout<<
"#SB I: BID= "
<<
m_bid
;
54
if
(
m_patchPanelOut
->getOrigin()!=0){
55
std::cout <<
" Typ= "
<<
m_patchPanelOut
->getOrigin()->getType();
56
std::cout <<
" Rgn= "
<<
m_patchPanelOut
->getOrigin()->getRegion();
57
std::cout <<
" PPID= "
<<
m_patchPanelOut
->getOrigin()->getId()<<
" "
;
58
std::cout <<
" port= "
<<i;
59
std::cout <<
""
<<
m_id
;
60
}
61
std::cout <<
":"
;
62
m_patchPanelOut
->getHitPattern(i)->print();
63
}
64
}
else
{
65
std::cout <<
"NO PP IN"
<< std::endl;
66
}
67
#endif
68
69
// delete m_slaveBoardOut and m_coincidenceOut
70
if
(
m_coincidenceOut
!=0)
delete
m_coincidenceOut
;
71
if
(
m_slaveBoardOut
!=0)
delete
m_slaveBoardOut
;
72
m_coincidenceOut
= 0;
73
m_slaveBoardOut
= 0;
74
75
if
(
m_patchPanelOut
!=0){
76
doMaskOperation
();
77
78
storeSlbIn
();
79
80
doCoincidence
();
81
if
(
m_coincidenceOut
!=0) {
82
#ifdef TGCDEBUG_VISUAL
83
std::cout <<
"TGCSlaveBoard::clockIn: after doCoincidence()\n"
;
84
m_coincidenceOut
->visual(
m_coincidenceOut
->getLength(), 1, 0);
85
#endif
86
#ifdef TGCDEBUG
87
std::cout <<
"#SB C: BID= "
<<
m_bid
<<
":"
;
88
m_coincidenceOut
->print();
89
#endif
90
}
91
doDecluster
();
92
#ifdef TGCDEBUG_VISUAL
93
if
(
m_coincidenceOut
!=0) {
94
std::cout <<
"TGCSlaveBoard::clockIn: after doDecluster()\n"
;
95
m_coincidenceOut
->visual(
m_coincidenceOut
->getLength(), 1, 0);
96
}
97
#endif
98
createSlaveBoardOut
();
99
100
#ifdef TGCDEBUG
101
showResult
();
102
#endif
103
104
deletePatchPanelOut
();
105
if
(
m_coincidenceOut
!=0){
106
delete
m_coincidenceOut
;
107
m_coincidenceOut
=0;
108
}
109
}
110
}
111
112
void
TGCSlaveBoard::storeSlbIn
()
113
{
114
// store SlaveBoard input for readout
115
const
TGCHitPattern
* inner =
m_patchPanelOut
->getHitPattern(0);
116
const
TGCHitPattern
* pivot =
m_patchPanelOut
->getHitPattern(1);
117
int
i;
118
if
(pivot!=0){
119
for
(i=0; i<
s_pLength
[
m_type
]; i++){
120
m_slbin
.set(40+i+
s_pOffset
[
m_type
], pivot->
getChannel
(i+
s_pLength
[
m_type
]));
121
m_slbin
.set(40+36+i+
s_pOffset
[
m_type
], pivot->
getChannel
(i));
122
}
123
}
124
if
(inner!=0){
125
for
(i=0; i<
s_iLength
[
m_type
]; i++){
126
if
(inner->
getLength
()>
s_iLength
[
m_type
])
//WTSB
127
m_slbin
.set(40+36+36+i+
s_iOffset
[
m_type
], inner->
getChannel
(i+
s_iLength
[
m_type
]));
128
m_slbin
.set(40+36+36+44+i+
s_iOffset
[
m_type
], inner->
getChannel
(i));
129
}
130
}
131
}
132
133
void
TGCSlaveBoard::showResult
()
const
134
{
135
136
int
i;
137
if
(
m_patchPanelOut
!=0){
138
for
( i=0; i<
NumberOfConnectorPerPPOut
; i+=1)
139
if
(std::as_const(
m_patchPanelOut
)->getHitPattern(i)!=0){
140
std::cout<<
"#SB I: BID= "
<<
m_bid
;
141
if
(
m_patchPanelOut
->getOrigin()!=0){
142
std::cout <<
" Typ= "
<<
m_patchPanelOut
->getOrigin()->getType();
143
std::cout <<
" Rgn= "
<< (
m_patchPanelOut
->getOrigin()->
getRegion
() ==
TGCRegionType::FORWARD
?
"FORWARD"
:
"ENDCAP"
);
144
std::cout <<
" PPID= "
<<
m_patchPanelOut
->getOrigin()->getId()<<
" "
;
145
std::cout <<
" port= "
<< i;
146
std::cout <<
""
<<
m_id
;
147
}
148
std::cout <<
":"
;
149
std::as_const(
m_patchPanelOut
)->getHitPattern(i)->print();
150
}
151
}
152
153
if
(
m_slaveBoardOut
!=0){
154
if
(
m_coincidenceOut
!=0){
155
std::cout <<
"#SB O: BID= "
<<
m_bid
;
156
std::cout <<
" Rgn= "
<< (
m_region
==
TGCRegionType::FORWARD
?
"FORWARD"
:
"ENDCAP"
);
157
std::cout <<
" Typ= "
<<
getTypeName
(
m_type
);
158
std::cout <<
" ID= "
<<
m_id
<<
":"
;
159
for
( i=0; i<
m_slaveBoardOut
->getNumberOfData(); i++){
160
if
(
m_slaveBoardOut
->getHit(i)){
161
std::cout <<
" i= "
<< i;
162
std::cout <<
" x= "
<<
m_slaveBoardOut
->getPos(i);
163
if
((
m_type
==1)||(
m_type
==3))
// doublet
164
std::cout <<
" d= "
<<
m_slaveBoardOut
->getDev(i);
165
}
166
}
167
std::cout<<std::endl;
168
std::cout<<
"Destination HPBID= "
<<
m_idHighPtBoard
<<std::endl;
169
}
170
}
171
}
172
173
std::string
TGCSlaveBoard::getTypeName
(
int
/*typeIn*/
)
const
174
{
175
if
(
m_type
==
WTSB
)
return
"WT"
;
//0
176
if
(
m_type
==
WDSB
)
return
"WD"
;
//1
177
if
(
m_type
==
STSB
)
return
"ST"
;
//2
178
if
(
m_type
==
SDSB
)
return
"SD"
;
//3
179
if
(
m_type
==
WISB
)
return
"WI"
;
//4
180
if
(
m_type
==
SISB
)
return
"SI"
;
//5
181
return
""
;
182
}
183
184
void
TGCSlaveBoard::deletePatchPanelOut
()
185
{
186
if
(
m_patchPanelOut
!=0 )
delete
m_patchPanelOut
;
187
m_patchPanelOut
=0;
188
}
189
190
void
TGCSlaveBoard::doDecluster
()
191
{
192
int
i;
193
bool
A
, B,
C
, D;
194
195
if
(
m_coincidenceOut
!=0){
196
TGCHitPattern
* out =
new
TGCHitPattern
(
m_coincidenceOut
->getLength());
197
int
length
= out->getLength();
198
for
( i=2; i<
length
-1; i+=1) {
199
A
=
m_coincidenceOut
->getChannel(i-2);
200
B =
m_coincidenceOut
->getChannel(i-1);
201
C
=
m_coincidenceOut
->getChannel(i);
202
D =
m_coincidenceOut
->getChannel(i+1);
203
out->setChannel(i,( !B &
C
& !D )|( !
A
& B &
C
));
204
}
205
206
A
=
false
;
207
B =
false
;
208
C
=
m_coincidenceOut
->getChannel(0);
209
D =
m_coincidenceOut
->getChannel(1);
210
out->setChannel(0,( !B &
C
& !D )|( !
A
& B &
C
));
211
212
A
=
false
;
213
B =
m_coincidenceOut
->getChannel(0);
214
C
=
m_coincidenceOut
->getChannel(1);
215
D =
m_coincidenceOut
->getChannel(2);
216
out->setChannel(1,( !B &
C
& !D )|( !
A
& B &
C
));
217
218
A
=
m_coincidenceOut
->getChannel(
length
-3);
219
B =
m_coincidenceOut
->getChannel(
length
-2);
220
C
=
m_coincidenceOut
->getChannel(
length
-1);
221
D =
false
;
222
out->setChannel(
length
-1,( !B &
C
& !D )|( !
A
& B &
C
));
223
224
delete
m_coincidenceOut
;
225
m_coincidenceOut
=out;
226
out=0;
227
}
228
}
229
230
void
TGCSlaveBoard::eraseOutput
()
231
{
232
m_slaveBoardOut
=0;
233
}
234
235
void
TGCSlaveBoard::setPatchPanel
(
TGCPatchPanel
* PPIn)
236
{
237
m_patchPanel
= PPIn;
238
}
239
240
void
TGCSlaveBoard::collectInput
()
241
{
242
#ifdef TGCDEBUG
243
std::cout <<
"#SB: BID= "
<<
m_bid
;
244
std::cout <<
" Rgn= "
<<
m_region
;
245
std::cout <<
" Typ= "
<<
getTypeName
(
m_type
);
246
std::cout <<
" ID= "
<<
m_id
<< std::endl;
247
if
(
m_patchPanel
!=0)
m_patchPanel
->showProperty();
248
#endif
249
250
if
(
m_patchPanel
!=0){
251
m_patchPanelOut
=
m_patchPanel
->getOutput(
m_id
);
252
#ifdef TGCDEBUG
253
if
(
m_patchPanelOut
!=0)
m_patchPanelOut
->print();
254
#endif
255
m_patchPanel
->eraseOutput(
m_id
);
256
257
}
258
}
259
260
int
TGCSlaveBoard::getIdHighPtBoard
()
const
261
{
262
return
m_idHighPtBoard
;
263
}
264
265
void
TGCSlaveBoard::setIdHighPtBoard
(
int
idIn)
266
{
267
m_idHighPtBoard
= idIn;
268
}
269
270
}
// namespace LVL1TGCTrigger
FORWARD
#define FORWARD
Definition
ALFA_SvdCalc.h:34
length
double length(const pvec &v)
Definition
FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
TGCPatchPanelOut.h
TGCPatchPanel.h
TGCSlaveBoard.h
LVL1TGCTrigger::TGCHitPattern
Definition
TGCHitPattern.h:11
LVL1TGCTrigger::TGCHitPattern::getLength
int getLength() const
Definition
TGCHitPattern.h:49
LVL1TGCTrigger::TGCHitPattern::getChannel
bool getChannel(int iChannel) const
Definition
TGCHitPattern.cxx:64
LVL1TGCTrigger::TGCPatchPanel
Definition
TGCPatchPanel.h:38
LVL1TGCTrigger::TGCSlaveBoard::collectInput
void collectInput()
Definition
TGCSlaveBoard.cxx:240
LVL1TGCTrigger::TGCSlaveBoard::m_id
int m_id
Definition
TGCSlaveBoard.h:76
LVL1TGCTrigger::TGCSlaveBoard::getTypeName
std::string getTypeName(int typeIn) const
Definition
TGCSlaveBoard.cxx:173
LVL1TGCTrigger::TGCSlaveBoard::m_slaveBoardOut
TGCSlaveBoardOut * m_slaveBoardOut
Definition
TGCSlaveBoard.h:74
LVL1TGCTrigger::TGCSlaveBoard::doCoincidence
virtual void doCoincidence()=0
LVL1TGCTrigger::TGCSlaveBoard::getIdHighPtBoard
int getIdHighPtBoard() const
Definition
TGCSlaveBoard.cxx:260
LVL1TGCTrigger::TGCSlaveBoard::m_idHighPtBoard
int m_idHighPtBoard
Definition
TGCSlaveBoard.h:78
LVL1TGCTrigger::TGCSlaveBoard::doMaskOperation
void doMaskOperation()
Definition
TGCSlaveBoard.h:65
LVL1TGCTrigger::TGCSlaveBoard::clockIn
void clockIn(int bidIn)
Definition
TGCSlaveBoard.cxx:37
LVL1TGCTrigger::TGCSlaveBoard::deletePatchPanelOut
void deletePatchPanelOut()
Definition
TGCSlaveBoard.cxx:184
LVL1TGCTrigger::TGCSlaveBoard::s_pOffset
static constexpr int s_pOffset[6]
Definition
TGCSlaveBoard.h:25
LVL1TGCTrigger::TGCSlaveBoard::setIdHighPtBoard
void setIdHighPtBoard(int m_id)
Definition
TGCSlaveBoard.cxx:265
LVL1TGCTrigger::TGCSlaveBoard::m_patchPanelOut
TGCPatchPanelOut * m_patchPanelOut
Definition
TGCSlaveBoard.h:83
LVL1TGCTrigger::TGCSlaveBoard::createSlaveBoardOut
virtual void createSlaveBoardOut()=0
LVL1TGCTrigger::TGCSlaveBoard::s_pLength
static constexpr int s_pLength[6]
Definition
TGCSlaveBoard.h:27
LVL1TGCTrigger::TGCSlaveBoard::m_region
TGCRegionType m_region
Definition
TGCSlaveBoard.h:80
LVL1TGCTrigger::TGCSlaveBoard::m_slbin
std::bitset< 200 > m_slbin
Definition
TGCSlaveBoard.h:84
LVL1TGCTrigger::TGCSlaveBoard::setPatchPanel
void setPatchPanel(TGCPatchPanel *PPIn)
Definition
TGCSlaveBoard.cxx:235
LVL1TGCTrigger::TGCSlaveBoard::m_patchPanel
TGCPatchPanel * m_patchPanel
Definition
TGCSlaveBoard.h:82
LVL1TGCTrigger::TGCSlaveBoard::m_lengthOfCoincidenceOut
int m_lengthOfCoincidenceOut
Definition
TGCSlaveBoard.h:72
LVL1TGCTrigger::TGCSlaveBoard::getRegion
TGCRegionType getRegion() const
Definition
TGCSlaveBoard.h:52
LVL1TGCTrigger::TGCSlaveBoard::showResult
void showResult() const
Definition
TGCSlaveBoard.cxx:133
LVL1TGCTrigger::TGCSlaveBoard::TGCSlaveBoard
TGCSlaveBoard()
Definition
TGCSlaveBoard.cxx:16
LVL1TGCTrigger::TGCSlaveBoard::m_coincidenceOut
TGCHitPattern * m_coincidenceOut
Definition
TGCSlaveBoard.h:73
LVL1TGCTrigger::TGCSlaveBoard::s_iLength
static constexpr int s_iLength[6]
Definition
TGCSlaveBoard.h:28
LVL1TGCTrigger::TGCSlaveBoard::s_iOffset
static constexpr int s_iOffset[6]
Definition
TGCSlaveBoard.h:26
LVL1TGCTrigger::TGCSlaveBoard::eraseOutput
void eraseOutput()
Definition
TGCSlaveBoard.cxx:230
LVL1TGCTrigger::TGCSlaveBoard::storeSlbIn
void storeSlbIn()
Definition
TGCSlaveBoard.cxx:112
LVL1TGCTrigger::TGCSlaveBoard::~TGCSlaveBoard
virtual ~TGCSlaveBoard()
Definition
TGCSlaveBoard.cxx:25
LVL1TGCTrigger::TGCSlaveBoard::m_type
int m_type
Definition
TGCSlaveBoard.h:79
LVL1TGCTrigger::TGCSlaveBoard::doDecluster
void doDecluster()
Definition
TGCSlaveBoard.cxx:190
LVL1TGCTrigger::TGCSlaveBoard::m_bid
int m_bid
Definition
TGCSlaveBoard.h:77
C
struct color C
LVL1TGCTrigger
Definition
LVL1TGCTrigger.cxx:48
LVL1TGCTrigger::TGCRegionType
TGCRegionType
Definition
TGCNumbering.h:49
LVL1TGCTrigger::TGCRegionType::FORWARD
@ FORWARD
Definition
TGCNumbering.h:49
LVL1TGCTrigger::NumberOfConnectorPerPPOut
const int NumberOfConnectorPerPPOut
Definition
TGCPatchPanelOut.h:13
LVL1TGCTrigger::WTSB
@ WTSB
Definition
TGCNumbering.h:57
LVL1TGCTrigger::WISB
@ WISB
Definition
TGCNumbering.h:57
LVL1TGCTrigger::STSB
@ STSB
Definition
TGCNumbering.h:57
LVL1TGCTrigger::SDSB
@ SDSB
Definition
TGCNumbering.h:57
LVL1TGCTrigger::SISB
@ SISB
Definition
TGCNumbering.h:57
LVL1TGCTrigger::WDSB
@ WDSB
Definition
TGCNumbering.h:57
A
hold the test vectors and ease the comparison
Generated on
for ATLAS Offline Software by
1.17.0