ATLAS Offline Software
Loading...
Searching...
No Matches
TGCStripTripletSB.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
7#include <iostream>
8#include <cstdlib>
9
10namespace LVL1TGCTrigger {
11
15
17{
18 if ( m_slaveBoardOut!=0 ) {
19 delete m_slaveBoardOut;
21 }
22
23 if(m_coincidenceOut!=0){
25 m_slaveBoardOut->clear();
27
28 // fill SlaveBoardOut.
29 // select largest R hit in each sections.
31 int i,j;
32#ifdef TGCDEBUG
33 std::cout <<" lengthOfCoincidenceOut= "<< m_lengthOfCoincidenceOut<<std::endl
34 <<" lengthOfSection= "<<lengthOfSection<<std::endl;
35#endif
36 for( i=0; i<s_NumberOfStripTripletSBData; i+=1){// i=3:d 2:c 1:b 0:a, 7:d 6:c 5:b 4:a
37 m_slaveBoardOut->setHit(i,false);
38 for( j=0; j<lengthOfSection; j+=1) {
39 if(m_coincidenceOut->getChannel(j+i*lengthOfSection)){
40 m_slaveBoardOut->setPos(i,j);
41 m_slaveBoardOut->setHit(i,true);
42 break;
43 }
44 }
45 if(m_slaveBoardOut->getHit(i)){
46 m_slaveBoardOut->setbPos(i, m_slaveBoardOut->getPos(i));
47 }
48 }
49 }
50}
51
53{
54 const TGCHitPattern* pattern[2];
55 pattern[0] = m_patchPanelOut->getHitPattern(0);
56 pattern[1] = m_patchPanelOut->getHitPattern(1);
57
58 int length;
59 if(pattern[0]!=0){
60 length = pattern[0]->getLength();
61 }else if(pattern[1]!=0){
62 length = pattern[1]->getLength();
63 }else{
64 length = -1;
65 }
68
69 if(length>0){
72
73 // rearrange bit pattern for coincidence.
74 bool* b = new bool [m_lengthOfCoincidenceOut];
75
76 int j;
77 for( j=0; j<m_lengthOfCoincidenceOut; j+=1){
78 b[j]=false;
79 }
80
81 for( int i=0; i<length/2; i+=1){
82 if(pattern[0]!=0){
83 b[2*i+1] = pattern[0]->getChannel(i+length/2);// smaller in phi
84 b[2*i] = pattern[0]->getChannel(i);
85 }
86 if(pattern[1]!=0){
87 b[length+2*i+1] = pattern[1]->getChannel(i+length/2);// smaller in phi
88 b[length+2*i] = pattern[1]->getChannel(i);
89 }
90 }
91
92 // perform 1/2 coincidence
93 int block;
94 for( block=0; block<2; block+=1){
95 int base=block*length;
96/*
97 b & c
98 +b & !a & !c
99 +a & c & !b
100 +c & !b & !d
101 +b & d & !c
102*/
103
104 int i=base;
105 m_coincidenceOut->setChannel(i,( b[i] & !b[i+1] ));
106
107 i=base+1;
108 m_coincidenceOut->setChannel(i,(( b[i-1] & b[i] )|
109 ( b[i-1] & !b[i] )|
110 ( b[i] & !b[i-1] & !b[i+1] )|
111 ( b[i-1] & b[i+1] & !b[i] )));
112
113 for( i=base+2; i<base+length-1; i+=1){
114 m_coincidenceOut->setChannel(i,(( b[i-1] & b[i] )|
115 ( b[i-1] & !b[i-2] & !b[i] )|
116 ( b[i-2] & b[i] & !b[i-1] )|
117 ( b[i] & !b[i-1] & !b[i+1] )|
118 ( b[i-1] & b[i+1] & !b[i] )));
119 }
120 i=base+length-1;
121 m_coincidenceOut->setChannel(i,(( b[i-1] & b[i] )|
122 ( b[i-1] & !b[i-2] & !b[i] )|
123 ( b[i-2] & b[i] & !b[i-1] )|
124 ( b[i] & !b[i-1] )));
125
126#ifdef TGCCOUT
127 std::cout << "StripTripletCoincidence OUT ";
128 m_coincidenceOut->printb();
129 std::cout << std::endl;
130#endif
131
132 }
133
134 delete [] b;
135 }
136}
137
138} //end of namespace bracket
double length(const pvec &v)
TGCSlaveBoardOut * m_slaveBoardOut
TGCPatchPanelOut * m_patchPanelOut
static constexpr int s_NumberOfStripTripletSBData
std::string base
Definition hcg.cxx:81