Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JDAQTriggerMask.hh
Go to the documentation of this file.
1 #ifndef __JDAQTRIGGERMASK__
2 #define __JDAQTRIGGERMASK__
3 
4 #include <string>
5 #include <istream>
6 #include <ostream>
7 
8 #include "JIO/JSerialisable.hh"
9 #include "JDAQ/JDAQRoot.hh"
10 
11 
12 /**
13  * \author mdejong
14  */
15 
16 namespace KM3NETDAQ {
17 
18  using JIO::JReader;
19  using JIO::JWriter;
20 
21 
22  /**
23  * Type definition of trigger mask.
24  */
25  typedef unsigned long long int JTriggerMask_t;
26 
27 
28  /**
29  * Number of trigger bits.
30  */
31  static const unsigned int NUMBER_OF_TRIGGER_BITS = sizeof(JTriggerMask_t) * 8;
32 
33 
34  /**
35  * Convert trigger bit to trigger mask.
36  *
37  * \param bit trigger bit
38  * \return trigger mask
39  */
40  inline JTriggerMask_t getTriggerMask(const unsigned int bit)
41  {
42  if (bit < NUMBER_OF_TRIGGER_BITS)
43  return JTriggerMask_t(1) << bit;
44  else
45  return 0;
46  }
47 
48 
49  /**
50  * Auxiliary class for trigger mask.
51  */
53  public:
54  /**
55  * Default constructor.
56  */
58  trigger_mask(0)
59  {}
60 
61 
62  /**
63  * Constructor.
64  *
65  * \param mask trigger mask
66  */
68  trigger_mask(mask)
69  {}
70 
71 
72  /**
73  * Constructor.
74  *
75  * \param buffer trigger bit pattern (i.e. sequence of '0' and '1').
76  */
77  JDAQTriggerMask(const std::string& buffer) :
79  {}
80 
81 
82  /**
83  * Virtual destructor.
84  */
85  virtual ~JDAQTriggerMask()
86  {}
87 
88 
89  /**
90  * Get DAQ trigger mask.
91  *
92  * \return DAQ trigger mask
93  */
95  {
96  return static_cast<const JDAQTriggerMask&>(*this);
97  }
98 
99 
100  /**
101  * Get trigger mask.
102  *
103  * \return trigger mask
104  */
106  {
107  return trigger_mask;
108  }
109 
110 
111  /**
112  * Set trigger mask.
113  *
114  * \param mask trigger mask
115  */
117  {
118  trigger_mask = mask.trigger_mask;
119  }
120 
121 
122  /**
123  * Set trigger mask.
124  *
125  * \param mask trigger mask
126  */
128  {
129  trigger_mask = mask;
130  }
131 
132 
133  /**
134  * Add trigger bit pattern.
135  *
136  * \param mask trigger mask
137  * \return trigger mask
138  */
140  {
141  trigger_mask |= mask.trigger_mask;
142 
143  return *this;
144  }
145 
146 
147  /**
148  * Has trigger bit pattern.
149  *
150  * \param mask trigger mask
151  * \return true if one of the bits is set; else false
152  */
153  inline bool hasTriggerMask(const JDAQTriggerMask& mask) const
154  {
155  return trigger_mask & mask.trigger_mask;
156  }
157 
158 
159  /**
160  * Add trigger bit.
161  *
162  * \param bit trigger bit
163  * \return trigger mask
164  */
165  inline JDAQTriggerMask& addTriggerBit(const unsigned int bit)
166  {
168 
169  return *this;
170  }
171 
172 
173  /**
174  * Check trigger bit.
175  *
176  * \param bit trigger bit
177  * \return true if bit is set; else false
178  */
179  inline bool hasTriggerBit(const unsigned int bit) const
180  {
182  }
183 
184 
185  /**
186  * Extract trigger mask.
187  *
188  * \param buffer trigger bit pattern (i.e. sequence of '0' and '1').
189  * \return trigger mask
190  */
191  static JDAQTriggerMask valueOf(const std::string& buffer)
192  {
194 
195  unsigned int bit = 0;
196 
197  for (std::string::const_reverse_iterator i = buffer.rbegin(); i != buffer.rend() && bit != NUMBER_OF_TRIGGER_BITS; ++i, ++bit) {
198  if (*i == '1') {
199  trigger_mask.addTriggerBit(bit);
200  }
201  }
202 
203  return trigger_mask;
204  }
205 
206 
207  /**
208  * Convert trigger mask.
209  *
210  * \return trigger bit pattern (i.e. sequence of '0' and '1').
211  */
212  std::string toString() const
213  {
214  std::string buffer(NUMBER_OF_TRIGGER_BITS, '0');
215 
216  unsigned int bit = 0;
217 
218  for (std::string::reverse_iterator i = buffer.rbegin(); i != buffer.rend() && bit != NUMBER_OF_TRIGGER_BITS; ++i, ++bit) {
219  if (hasTriggerBit(bit)) {
220  *i = '1';
221  }
222  }
223 
224  return buffer;
225  }
226 
227 
228  /**
229  * Read JDAQTriggerMask from input stream.
230  *
231  * \param in input stream
232  * \param mask JDAQTriggerMask
233  * \return input stream
234  */
235  friend inline std::istream& operator>>(std::istream& in, JDAQTriggerMask& mask)
236  {
237  std::string buffer;
238 
239  if (in >> buffer) {
240  mask= JDAQTriggerMask::valueOf(buffer);
241  }
242 
243  return in;
244  }
245 
246 
247  /**
248  * Write JDAQTriggerMask to output stream.
249  *
250  * \param out output stream
251  * \param mask JDAQTriggerMask
252  * \return output stream
253  */
254  friend inline std::ostream& operator<<(std::ostream& out, const JDAQTriggerMask& mask)
255  {
256  out << mask.toString();
257 
258  return out;
259  }
260 
261 
262  /**
263  * Read JDAQTriggerMask from input.
264  *
265  * \param in JReader
266  * \param mask JDAQTriggerMask
267  * \return JReader
268  */
269  friend inline JReader& operator>>(JReader& in, JDAQTriggerMask& mask)
270  {
271  in >> mask.trigger_mask;
272 
273  return in;
274  }
275 
276 
277  /**
278  * Write JDAQTriggerMask to output.
279  *
280  * \param out JWriter
281  * \param mask JDAQTriggerMask
282  * \return JWriter
283  */
284  friend inline JWriter& operator<<(JWriter& out, const JDAQTriggerMask& mask)
285  {
286  out << mask.trigger_mask;
287 
288  return out;
289  }
290 
291 
292  /**
293  * Get size of object.
294  *
295  * \return number of bytes
296  */
297  static int sizeOf()
298  {
299  return sizeof(JTriggerMask_t);
300  }
301 
302 
304 
305 
306  protected:
308  };
309 
310 
311  static const JDAQTriggerMask TRIGGER_MASK_ON = JDAQTriggerMask(~JTriggerMask_t(0)); //!< Trigger mask on;
312  static const JDAQTriggerMask TRIGGER_MASK_OFF = JDAQTriggerMask( JTriggerMask_t(0)); //!< Trigger mask off;
313 
314 
315  /**
316  * Equal operator for DAQ trigger masks.
317  *
318  * \param first trigger mask
319  * \param second trigger mask
320  * \result true if first trigger mask equal to second; else false
321  */
322  inline bool operator==(const JDAQTriggerMask& first,
323  const JDAQTriggerMask& second)
324  {
325  return (first.getTriggerMask() == second.getTriggerMask());
326  }
327 
328 
329  /**
330  * Not-equal operator for DAQ trigger masks.
331  *
332  * \param first trigger mask
333  * \param second trigger mask
334  * \result true if first trigger mask not equal to second; else false
335  */
336  inline bool operator!=(const JDAQTriggerMask& first,
337  const JDAQTriggerMask& second)
338  {
339  return !(first == second);
340  }
341 }
342 
343 #endif
JDAQTriggerMask()
Default constructor.
void setDAQTriggerMask(const JDAQTriggerMask &mask)
Set trigger mask.
bool operator==(const JDAQChronometer &first, const JDAQChronometer &second)
Equal operator for DAQ chronometers.
bool hasTriggerBit(const unsigned int bit) const
Check trigger bit.
Interface for binary output.
JTriggerMask_t getTriggerMask(const unsigned int bit)
Convert trigger bit to trigger mask.
ClassDef(JDAQTriggerMask, 1)
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
JTriggerMask_t getTriggerMask() const
Get trigger mask.
static int sizeOf()
Get size of object.
Auxiliary class for trigger mask.
friend JReader & operator>>(JReader &in, JDAQTriggerMask &mask)
Read JDAQTriggerMask from input.
static const JDAQTriggerMask TRIGGER_MASK_OFF
Trigger mask off;.
static const JDAQTriggerMask TRIGGER_MASK_ON
Trigger mask on;.
unsigned long long int JTriggerMask_t
Type definition of trigger mask.
bool hasTriggerMask(const JDAQTriggerMask &mask) const
Has trigger bit pattern.
void setTriggerMask(const JTriggerMask_t mask)
Set trigger mask.
JDAQTriggerMask(const JTriggerMask_t mask)
Constructor.
JDAQTriggerMask & addTriggerBit(const unsigned int bit)
Add trigger bit.
Interface for binary input.
friend std::ostream & operator<<(std::ostream &out, const JDAQTriggerMask &mask)
Write JDAQTriggerMask to output stream.
std::string toString() const
Convert trigger mask.
virtual ~JDAQTriggerMask()
Virtual destructor.
JDAQTriggerMask(const std::string &buffer)
Constructor.
bool operator!=(const JDAQChronometer &first, const JDAQChronometer &second)
Not-equal operator for DAQ chronometers.
friend JWriter & operator<<(JWriter &out, const JDAQTriggerMask &mask)
Write JDAQTriggerMask to output.
friend std::istream & operator>>(std::istream &in, JDAQTriggerMask &mask)
Read JDAQTriggerMask from input stream.
JDAQTriggerMask & addTriggerMask(const JDAQTriggerMask &mask)
Add trigger bit pattern.
static JDAQTriggerMask valueOf(const std::string &buffer)
Extract trigger mask.
const JDAQTriggerMask & getDAQTriggerMask() const
Get DAQ trigger mask.