ATLAS Offline Software
Loading...
Searching...
No Matches
TGCHitPattern.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include <iostream>
7#include <cstdlib>
8#include <cstring>
9
10namespace LVL1TGCTrigger {
11
16
18{
19 if(m_pattern!=0) delete [] m_pattern;
20 m_pattern = 0;
21 m_length =-1;
22}
23
25 :m_pattern(0), m_length(len)
26{
27 if ( m_length > 0 ) {
28 m_pattern = new bool [len];
29 for(int i=0; i<m_length; i+=1) m_pattern[i] = false;
30 } else {
31 m_length = -1;
32 }
33}
34
36 :m_pattern(0),m_length(-1)
37{
38 m_length = right.m_length;
39 if ( m_length > 0 ) {
40 m_pattern = new bool [m_length];
41 for(int i=0; i<m_length; i+=1 ) {
42 m_pattern[i] = right.m_pattern[i];
43 }
44 }
45}
46
48{
49 if (this != &right) {
50 if ( m_pattern != 0 ) delete [] m_pattern;
51 m_pattern = 0;
52
53 m_length = right.m_length;
54 if ( m_length > 0 ) {
55 m_pattern = new bool [m_length];
56 for(int i=0; i<m_length; i+=1 ) {
57 m_pattern[i] = right.m_pattern[i];
58 }
59 }
60 }
61 return *this;
62}
63
64bool TGCHitPattern::getChannel(int iChannel) const
65{
66 if(iChannel < m_length){
67 return m_pattern[iChannel];
68 }else{
69 std::cerr << "internal error TGCHitPattern::getChannel()" << std::endl;
70 return 0;
71 }
72}
73
74void TGCHitPattern::setLength(int lengthIn)
75{
76 m_length = lengthIn;
77
78 if ( m_length > 0 ) {
79 if ( m_pattern != 0) delete [] m_pattern;
80 m_pattern = new bool [m_length];
81 }
82}
83
84
85void TGCHitPattern::setChannel(int iChannel, bool hit)
86{
87 m_pattern[iChannel] = hit;
88}
89
91 int size = strlen(pat);
92 if(size == m_length){
93 for(int i = 0; i < size; i++){
94 if(pat[i]-'0'){
95 setChannel(i, true);
96 }
97 }
98 } else {
99#ifdef TGCCOUT
100 std::cout << "TGCHitPattern::setChannel() error : size is different" << std::endl;
101#endif
102 }
103}
104
106{
107 int i;
108 for( i=0; i<m_length; i+=1) m_pattern[i] = false;
109}
110
112{
113 int i;
114 for( i=0; i<m_length; i+=1){
115 if(i%unit==0) std::cout<<"\n_";
116 if(m_pattern[i])
117 std::cout << 1;
118 else
119 std::cout << 0;
120 }
121 std::cout << std::endl;
122}
123
125{
126
127#ifdef BITPATTERN
128 std::cout << " [" << m_length << "bit] ";
129#endif
130#ifdef BITPATTERN
131 for( int i=0; i<m_length; i+=1)
132 std::cout << m_pattern[i] <<std::endl;
133#endif
134#ifdef TGCCOUT
135 for( int i=0; i<m_length; i+=1)
136 if(m_pattern[i]) std::cout<<' '<<i;
137 std::cout << std::endl;
138#endif
139}
140
142{
143#ifdef TGCCOUT
144 for( int i=0; i<m_length; i+=1){
145 std::cout << m_pattern[i];
146 }
147#endif
148}
149
150void TGCHitPattern::printb(std::ofstream* ofs) const
151{
152 int i;
153 for( i=0; i<m_length; i+=1){
154 *ofs << m_pattern[i];
155 }
156}
157
159{
160 bool* ptmp;
161 ptmp = 0;
162 ptmp = new bool [hp->getLength() + m_length];
163 int i;
164 for(i=0; i<m_length ; i++){
165 ptmp[i] = m_pattern[i];
166 }
167 for(i=m_length; i<(hp->getLength() + m_length); i++){
168 ptmp[i] = hp->getChannel(i-m_length);
169 }
170 if(m_pattern)delete [] m_pattern;
171 m_pattern = ptmp;
172 m_length = hp->getLength() + m_length;
173}
174
176{
177 for(int i= m_length -1; i >= 0; i--){
178 if( (dec >> i) & 1 )
179 m_pattern[m_length-1-i] = 1;
180 else
181 m_pattern[m_length-1-i] = 0;
182 }
183}
184
185
186// new method for hit visualization (KH 19/01/01)
187#ifdef TGCCOUT
188void TGCHitPattern::visual(int Cycle, int Width , int Tag ) const
189{
190 int i,j;
191 if (Tag == 1) {
192 std::cout << "| ";
193 for(i=0; i<Cycle; i++) {
194 for (j=0; j<Width; j++) std::cout << "=";
195 }
196 std::cout << " |\n| ";
197 for(i=0; i<Cycle; i++) {
198 for (j=0; j<Width; j++) {
199 if ((j == 0) && (i%10 == 0)) std::cout << i/10;
200 else std::cout << " ";
201 }
202 }
203
204 std::cout << " |\n| ";
205 for(i=0; i<Cycle; i++) {
206 for (j=0; j<Width; j++) {
207 if (j == 0) std::cout << i%10;
208 else std::cout << " ";
209 }
210 }
211
212 std::cout << " |\n| ";
213 for(i=0; i<Cycle; i++) {
214 for (j=0; j<Width; j++) std::cout << "-";
215 }
216
217 std::cout << " |\n";
218 }
219 else {
220 std::cout << "| ";
221 for(i=0; i<m_length; i++) {
222 if ((i>0) && (i%Cycle==0)) std::cout<<" |\n| ";
223 for (j=0; j<Width; j++) {
224 if(m_pattern[i]) std::cout << "*";
225 else std::cout << ".";
226 }
227 }
228 std::cout << " |\n";
229 }
230}
231#else
232void TGCHitPattern::visual(int , int , int ) const
233{
234 // do nothing
235}
236#endif
237
238// new method to set hit patterns (KH 08/05/01)
239void TGCHitPattern::setPattern(bool* newpattern)
240{
241 if(m_pattern)delete [] m_pattern;
242 m_pattern = newpattern;
243}
244
245
246
247} //end of namespace bracket
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
TGCHitPattern & operator=(const TGCHitPattern &right)
bool getChannel(int iChannel) const
void push_back(TGCHitPattern *hp)
void setChannel(int iChannel, bool pattern)
void setPattern(bool *newpattern)
void visual(int Cycle, int Width, int Tag) const