ATLAS Offline Software
Loading...
Searching...
No Matches
TGCWireTripletSB.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5// ref. SOS051V07,S0S052V06
9#include <iostream>
10#include <cstdlib>
11
12namespace LVL1TGCTrigger {
13
17
19{
20 if(m_coincidenceOut!=0){
21 if ( m_slaveBoardOut != 0 ) delete m_slaveBoardOut;
23 m_slaveBoardOut->clear();
25
26 // fill SlaveBoardOut.
27 // select largest R hit in each sections.
28 int lengthOfSection = (m_coincidenceOut->getLength() - 2*s_NChAdjInWTSB)/s_NumberOfWireTripletSBData;
29 int i,j;
30 for( i=0; i<s_NumberOfWireTripletSBData; i+=1){ // i=0:a 1:b 2:c
31 m_slaveBoardOut->setPos(i,-1);
32 m_slaveBoardOut->setPos(i,0);
33 m_slaveBoardOut->setHit(i,false);
34 for( j=0; j<lengthOfSection; j+=1) {
35 if(m_coincidenceOut->getChannel(s_NChAdjInWTSB + j + i*lengthOfSection)){
36 m_slaveBoardOut->setPos(i,j);
37 m_slaveBoardOut->setHit(i,true);
38 break;
39 }
40 }
41 if(m_slaveBoardOut->getHit(i)){
42 m_slaveBoardOut->setbPos(i, m_slaveBoardOut->getPos(i));
43 }
44 }
45 }
46}
47
49{
50 const TGCHitPattern* pattern[2];
51 // pattern[0] has hit pattern of layer0[36-71].
52 // pattern[1] has hit pattern of layer1[0-35] and layer2[36-71] .
53 pattern[0] = m_patchPanelOut->getHitPattern(0);
54 pattern[1] = m_patchPanelOut->getHitPattern(1);
55
56 if(pattern[1] != 0) { // necessary for 2/3 coincidence.
57 const int unitLength = pattern[1]->getLength() / 2;
58 const int totalLength = 3 * unitLength;
59
61 if (m_coincidenceOut != 0) delete m_coincidenceOut;
63
64 // rearrange bit pattern for coincidence.
65 std::vector<bool> b(totalLength);
66 for (int i=0; i < unitLength; i++) {
67 if (pattern[0] != 0) {
68 b[3*i] = pattern[0]->getChannel(i+unitLength); //layer0(smallest in eta)
69 } else {
70 b[3*i] = 0;
71 }
72 if (pattern[1] != 0) {
73 b[3*i+1] = pattern[1]->getChannel(i); // layer1
74 b[3*i+2] = pattern[1]->getChannel(i+unitLength); //layer2
75 } else {
76 b[3*i+1] = 0;
77 b[3*i+2] = 0;
78 }
79 }
80
81 // perform 2/3 coincidence
82 std::vector<bool> output(totalLength);
83 for (int i=0; i < totalLength-8; i++) {
84 output[i] = (b[i+3] && b[i+5] && !b[i+1] && !b[i+7]) ||
85 (b[i+3] && b[i+4] && !b[i+2]) ||
86 (b[i+4] && b[i+5] && !b[i+6]) ||
87 (b[i+6] && b[i+2] && b[i+4] && !b[i+3] && !b[i+5] && !b[i+1] && !b[i+7]);
88 }
89
90 int base = 0;
91 for (int i=0; i<m_lengthOfCoincidenceOut; i++) {
92 m_coincidenceOut->setChannel(i, output[i+base]);
93 }
94 }
95}
96
98{
99 if ( this != &right ) {
100 m_id = right.m_id;
101 m_bid = right.m_bid;
103 m_type = right.m_type;
106 *m_patchPanel = *right.m_patchPanel;
108
109 if ( m_lengthOfCoincidenceOut > 0) {
110 if ( m_coincidenceOut ) delete m_coincidenceOut;
112 }
113 }
114 return *this;
115}
116
117
118
119} //end of namespace bracket
TGCSlaveBoardOut * m_slaveBoardOut
TGCPatchPanelOut * m_patchPanelOut
static constexpr int s_NumberOfWireTripletSBData
TGCWireTripletSB(const TGCWireTripletSB &right)=delete
static constexpr int s_LengthOfWTSBCoincidenceOut
TGCWireTripletSB & operator=(const TGCWireTripletSB &right)
static constexpr int s_NChAdjInWTSB
std::string base
Definition hcg.cxx:81