ATLAS Offline Software
bitPATTERN.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 using namespace std;
8 
9 bitPATTERN::bitPATTERN(const std::string& name,const PATTERNidentity& id,int size) :
11  m_id(id),
12  m_size(size)
13 {
14  m_digits = new const RPCdigit* [m_size];
15  reset();
16 }
17 
20  m_id(pattern.id()),
21  m_size(pattern.size())
22 {
23  m_digits = new const RPCdigit* [m_size];
24  reset();
25  for(int i=0;i<m_size;++i) m_digits[i] = pattern[i];
26 }
27 
29 {
30  delete [] m_digits;
31 }
32 
34 // cppcheck-suppress operatorEqVarError; m_size not assigned
36 {
37  if(pattern.size() != m_size) return *this;
38 
39  reset();
40 
41  m_id = pattern.id();
42  for(int i=0;i<m_size;++i) m_digits[i] = pattern[i];
43  return *this;
44 }
45 
46 bool
48 {
49  if(m_id < pattern.id()) return true;
50  else return false;
51 }
52 
53 void
54 bitPATTERN::set(const RPCdigit* digit, int bit)
55 {
56  if(bit >= m_size || bit < 0) return;
57  m_digits[bit] = digit;
58 }
59 
60 void
62 {
63  if(bit >= m_size || bit < 0) return;
64  m_digits[bit] = 0;
65 }
66 
67 
68 void
70 {
71  for(int i=0;i<m_size;++i)
72  {
73  m_digits[i] = 0;
74  }
75 }
76 
77 bool
79 {
80  for(int i=0;i<m_size;++i)
81  {
82  if (m_digits[i]) return true;
83  }
84  return false;
85 }
86 
87 bool
88 bitPATTERN::test(int bit) const
89 {
90  if(bit >= m_size || bit < 0) return false;
91  if (m_digits[bit]) return true;
92  else return false;
93 }
94 
95 const RPCdigit*
96 bitPATTERN::operator[](int bit) const
97 {
98  if(bit >= m_size || bit < 0) return 0;
99  else return m_digits[bit];
100 }
101 
104 {
105  if(pattern.size() != m_size) return *this;
106  bitPATTERN result(name(),id(),m_size);
107 
108  for(int i=0;i<m_size;++i)
109  {
110  if ( m_digits[i] && pattern.test(i) ) result.set(m_digits[i],i);
111  }
112 
113  return result;
114 }
115 
116 bitPATTERN&
118 {
119  if(pattern.size() != m_size) return *this;
120  for(int i=0;i<m_size;++i)
121  {
122  if ( !(m_digits[i] && pattern.test(i)) ) m_digits[i] = 0;
123  }
124  return *this;
125 }
126 
129 {
130  if(pattern.size() != m_size) return *this;
131  bitPATTERN result(name(),id(),m_size);
132 
133  for(int i=0;i<m_size;++i)
134  {
135  if ( m_digits[i] || pattern.test(i) )
136  {
137  if(m_digits[i]) result.set(m_digits[i],i);
138  else result.set(pattern[i],i);
139  }
140  }
141 
142  return result;
143 }
144 
145 bitPATTERN&
147 {
148  if(pattern.size() != m_size) return *this;
149  for(int i=0;i<m_size;++i)
150  {
151  if ( !(m_digits[i] || pattern.test(i)) ) m_digits[i] = 0;
152  else if(!m_digits[i]) m_digits[i] = pattern[i];
153  }
154  return *this;
155 }
156 
157 
160 {
161  if(pattern.size() != m_size) return *this;
162  bitPATTERN result(name(),id(),m_size);
163 
164  for(int i=0;i<m_size;++i)
165  {
166  if ( (m_digits[i] || pattern.test(i)) &&
167  !(m_digits[i] && pattern.test(i)) )
168  {
169  if(m_digits[i]) result.set(m_digits[i],i);
170  else result.set(pattern[i],i);
171  }
172  }
173 
174  return result;
175 }
176 
177 bitPATTERN&
179 {
180  if(pattern.size() != m_size) return *this;
181  for(int i=0;i<m_size;++i)
182  {
183  if ( !((m_digits[i] || pattern.test(i)) &&
184  !(m_digits[i] && pattern.test(i)) ) ) m_digits[i] = 0;
185  else if(!m_digits[i]) m_digits[i] = pattern[i];
186  }
187  return *this;
188 }
189 
192 {
193  if(num <= 0) return *this;
194  for(int i=0;i<num;++i) shift_left();
195  return *this;
196 }
197 
198 bitPATTERN&
200 {
201  if(num <= 0) return *this;
202  for(int i=0;i<num;++i) shift_right();
203  return *this;
204 }
205 
206 void
208 {
209  for(int i=1;i<m_size;++i) m_digits[i-1] = m_digits[i];
210  m_digits[m_size-1] = 0;
211 }
212 
213 void
215 {
216  for(int i=m_size-2;i>=0;--i) m_digits[i+1] = m_digits[i];
217  m_digits[0] = 0;
218 }
219 
220 void bitPATTERN::dump (uint32_t& first_32_pattern ,
221  uint32_t& second_32_pattern ) const
222 {
223  first_32_pattern = 0x0;
224  second_32_pattern = 0x0;
225 
226  if (m_size!=32 && m_size!=64) return;
227 
228  for (int i=0; i<32; ++i)
229  {
230  if (m_digits[i]) first_32_pattern |= (0x1<<i);
231  }
232 
233  if (m_size == 64)
234  {
235  for (int i=32; i<64; ++i)
236  {
237  if (m_digits[i]) second_32_pattern |= (0x1<<(i-32));
238  }
239  }
240 }
241 
242 
243 void bitPATTERN::Print(ostream& stream,bool detail) const
244 {
245  stream << name() << " (" << size() << ") ";
246 
247  if(any()) stream << "*> ";
248  else stream << " > ";
249 
250  for(int i=0;i<size();++i)
251  {
252  if(test(i)) stream << "1";
253  else stream << "0";
254  }
255 
256 
257  stream << endl;
258 
259  if(detail )
260  {
261  stream << "gives input to " << id() << endl;
262  for(int i=0;i<size();++i)
263  {
264  if(test(i))
265  {
266  stream << "bit " << i << " raised by:" << endl;
267  (*this)[i]->Print(stream,false);
268  }
269  }
270  }
271 }
mergePhysValFiles.pattern
pattern
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:26
bitPATTERN::operator[]
const RPCdigit * operator[](int) const
Definition: bitPATTERN.cxx:96
bitPATTERN::test
bool test(int) const
Definition: bitPATTERN.cxx:88
get_generator_info.result
result
Definition: get_generator_info.py:21
bitPATTERN.h
bitPATTERN::reset
void reset(void)
Definition: bitPATTERN.cxx:69
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
bitPATTERN
Definition: bitPATTERN.h:13
bitPATTERN::unset
void unset(int)
Definition: bitPATTERN.cxx:61
bitPATTERN::set
void set(const RPCdigit *, int)
Definition: bitPATTERN.cxx:54
bitPATTERN::Print
void Print(std::ostream &, bool detail) const
Definition: bitPATTERN.cxx:243
bitPATTERN::id
const PATTERNidentity & id(void) const
Definition: bitPATTERN.h:39
detail
Definition: extract_histogram_tag.cxx:14
checkRpcDigits.digit
digit
Definition: checkRpcDigits.py:186
bitPATTERN::operator|=
bitPATTERN & operator|=(const bitPATTERN &)
Definition: bitPATTERN.cxx:146
bitPATTERN::operator<
bool operator<(const bitPATTERN &)
Definition: bitPATTERN.cxx:47
bitPATTERN::bitPATTERN
bitPATTERN(const std::string &, const PATTERNidentity &, int)
Definition: bitPATTERN.cxx:9
bitPATTERN::m_digits
const RPCdigit ** m_digits
Definition: bitPATTERN.h:17
AthenaPoolTestWrite.stream
string stream
Definition: AthenaPoolTestWrite.py:12
bitPATTERN::shift_right
void shift_right(void)
Definition: bitPATTERN.cxx:214
bitPATTERN::shift_left
void shift_left(void)
Definition: bitPATTERN.cxx:207
PATTERNidentity
Definition: PATTERNidentity.h:13
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
bitPATTERN::operator&
bitPATTERN operator&(const bitPATTERN &) const
Definition: bitPATTERN.cxx:103
bitPATTERN::operator^=
bitPATTERN & operator^=(const bitPATTERN &)
Definition: bitPATTERN.cxx:178
lumiFormat.i
int i
Definition: lumiFormat.py:92
bitPATTERN::m_size
int m_size
Definition: bitPATTERN.h:16
bitPATTERN::dump
void dump(uint32_t &, uint32_t &) const
Definition: bitPATTERN.cxx:220
BaseObject::name
std::string name() const
Definition: BaseObject.h:23
bitPATTERN::operator<<
bitPATTERN & operator<<(int)
Definition: bitPATTERN.cxx:191
bitPATTERN::operator^
bitPATTERN operator^(const bitPATTERN &) const
Definition: bitPATTERN.cxx:159
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
bitPATTERN::operator>>
bitPATTERN & operator>>(int)
Definition: bitPATTERN.cxx:199
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
RPCtrigDataObject
Definition: RPCtrigDataObject.h:15
bitPATTERN::any
bool any(void) const
Definition: bitPATTERN.cxx:78
RPCdigit
Definition: RPCdigit.h:16
bitPATTERN::operator&=
bitPATTERN & operator&=(const bitPATTERN &)
Definition: bitPATTERN.cxx:117
bitPATTERN::~bitPATTERN
~bitPATTERN()
Definition: bitPATTERN.cxx:28
bitPATTERN::operator|
bitPATTERN operator|(const bitPATTERN &) const
Definition: bitPATTERN.cxx:128
bitPATTERN::m_id
PATTERNidentity m_id
Definition: bitPATTERN.h:15
bitPATTERN::size
int size(void) const
Definition: bitPATTERN.h:41
bitPATTERN::operator=
bitPATTERN & operator=(const bitPATTERN &)
Definition: bitPATTERN.cxx:35