ATLAS Offline Software
Loading...
Searching...
No Matches
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
8
9#include <iostream>
10#include <iomanip>
11#include <cstdlib>
12#include <string>
13
14namespace LVL1TGCTrigger {
15
24
36
38{
39 m_bid = bidIn;
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
71 if( m_slaveBoardOut!=0) delete m_slaveBoardOut;
74
75 if(m_patchPanelOut!=0){
77
78 storeSlbIn();
79
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 }
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
99
100#ifdef TGCDEBUG
101 showResult();
102#endif
103
105 if(m_coincidenceOut!=0){
106 delete m_coincidenceOut;
108 }
109 }
110}
111
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
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
173std::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
189
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;
226 out=0;
227 }
228}
229
234
239
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
261{
262 return m_idHighPtBoard;
263}
264
266{
267 m_idHighPtBoard = idIn;
268}
269
270} // namespace LVL1TGCTrigger
double length(const pvec &v)
bool getChannel(int iChannel) const
std::string getTypeName(int typeIn) const
TGCSlaveBoardOut * m_slaveBoardOut
virtual void doCoincidence()=0
static constexpr int s_pOffset[6]
TGCPatchPanelOut * m_patchPanelOut
virtual void createSlaveBoardOut()=0
static constexpr int s_pLength[6]
void setPatchPanel(TGCPatchPanel *PPIn)
TGCRegionType getRegion() const
static constexpr int s_iLength[6]
static constexpr int s_iOffset[6]
struct color C
const int NumberOfConnectorPerPPOut
hold the test vectors and ease the comparison