Jpp
JDAQFrameStatus.hh
Go to the documentation of this file.
1 #ifndef __JDAQFRAMESTATUS__
2 #define __JDAQFRAMESTATUS__
3 
4 #include "JIO/JSerialisable.hh"
5 #include "JDAQ/JDAQ.hh"
6 #include "JDAQ/JDAQException.hh"
7 #include "JDAQ/JDAQRoot.hh"
8 
9 
10 /**
11  * \author mdejong
12  */
13 
14 namespace KM3NETDAQ {
15 
16  using JIO::JReader;
17  using JIO::JWriter;
18 
19 
20  /**
21  * DAQ frame status.
22  */
24  public:
25  /**
26  * Default constructor.
27  */
29  daq (0),
30  status (0),
31  fifo (0),
32  status_3(0),
33  status_4(0)
34  {}
35 
36 
37  /**
38  * Constructor.
39  *
40  * \param __daq DAQ status
41  * \param __status TDC status
42  * \param __fifo FIFO status
43  * \param __status_3 spare
44  * \param __status_4 spare
45  */
46  JDAQFrameStatus(const int __daq,
47  const int __status,
48  const int __fifo,
49  const int __status_3 = 0,
50  const int __status_4 = 0) :
51  daq (__daq),
52  status (__status),
53  fifo (__fifo),
54  status_3(__status_3),
55  status_4(__status_4)
56  {}
57 
58 
59  /**
60  * Get reference to unique instance of this class object.
61  *
62  * This instance has default values which correspond to a valid DAQ frame status.
63  *
64  * \return reference to this class object
65  */
66  static const JDAQFrameStatus& getInstance()
67  {
71 
72  return status;
73  }
74 
75 
76  /**
77  * Get DAQ frame status.
78  *
79  * \return DAQ frame status
80  */
82  {
83  return static_cast<const JDAQFrameStatus&>(*this);
84  }
85 
86 
87  /**
88  * Set DAQ frame status.
89  *
90  * \param status DAQ frame status
91  */
93  {
94  static_cast<JDAQFrameStatus&>(*this) = status;
95  }
96 
97 
98  /**
99  * Get DAQ status.
100  *
101  * \return DAQ status
102  */
103  int getDAQStatus() const
104  {
105  return this->daq;
106  }
107 
108 
109  /**
110  * Get TDC and White Rabbit status.
111  *
112  * \return status
113  */
114  int getStatus() const
115  {
116  return this->status;
117  }
118 
119 
120  /**
121  * Get FIFO status.
122  *
123  * \return FIFO status
124  */
125  int getFIFOStatus() const
126  {
127  return this->fifo;
128  }
129 
130 
131  /**
132  * Test DAQ status of packets.
133  *
134  * \return true if okay; else false
135  */
136  bool testDAQStatus() const
137  {
139  }
140 
141 
142  /**
143  * Test TDC and White Rabbit status.
144  *
145  * \return true if okay; else false
146  */
147  bool testStatus() const
148  {
149  return testWhiteRabbitStatus() && testTDCStatus();
150  }
151 
152 
153  /**
154  * Get number of received UDP packets.
155  *
156  * \return UDP received packets
157  */
159  {
160  return DAQ_UDP_RECEIVED_PACKETS.read(this->daq);
161  }
162 
163 
164  /**
165  * Get maximal sequence number of UDP packet.
166  *
167  * \return UDP sequence number
168  */
170  {
171  return DAQ_UDP_SEQUENCE_NUMBER.read(this->daq);
172  }
173 
174 
175  /**
176  * Test White Rabbit status.
177  *
178  * \return true if okay; else false
179  */
181  {
182  return DAQ_WHITE_RABBIT.has(this->status);
183  }
184 
185 
186  /**
187  * Test TDC status.
188  *
189  * \return true if okay; else false
190  */
191  bool testTDCStatus() const
192  {
193  return !testHighRateVeto();
194  }
195 
196 
197  /**
198  * Test high-rate veto status.
199  *
200  * \return true if one of the TDCs is high-rate vetoed; else false
201  */
202  bool testHighRateVeto() const
203  {
204  return DAQ_TDC.has(this->status);
205  }
206 
207 
208  /**
209  * Test high-rate veto status.
210  *
211  * \param tdc TDC
212  * \return true if TDC is high-rate vetoed; else false
213  */
214  bool testHighRateVeto(const int tdc) const
215  {
216  return JBit(tdc).has(this->status);
217  }
218 
219 
220  /**
221  * Count high-rate veto status.
222  *
223  * \return number of the TDCs with high-rate veto
224  */
225  int countHighRateVeto() const
226  {
227  int n = 0;
228 
229  if (testHighRateVeto()) {
230  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
231  if (JBit(pmt).has(this->status)) {
232  ++n;
233  }
234  }
235  }
236 
237  return n;
238  }
239 
240 
241  /**
242  * Test FIFO status.
243  *
244  * \return true if one of the TDCs has FIFO almost full; else false
245  */
246  bool testFIFOStatus() const
247  {
248  return DAQ_FIFO.has(this->fifo);
249  }
250 
251 
252  /**
253  * Test FIFO status.
254  *
255  * \param tdc TDC
256  * \return true if FIFO is almost full; else false
257  */
258  bool testFIFOStatus(const int tdc) const
259  {
260  return JBit(tdc).has(this->fifo);
261  }
262 
263 
264  /**
265  * Count FIFO status.
266  *
267  * \return number of the TDCs with FIFO almost full
268  */
269  int countFIFOStatus() const
270  {
271  int n = 0;
272 
273  if (testFIFOStatus()) {
274  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
275  if (JBit(pmt).has(this->fifo)) {
276  ++n;
277  }
278  }
279  }
280 
281  return n;
282  }
283 
284  /**
285  * Count active channels.
286  * \return number of TDCs without high rate veto or FIFO almost full
287  */
289  {
290  int n = NUMBER_OF_PMTS;
291 
292  if (testHighRateVeto() || testFIFOStatus()) {
293  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
294  if ( JBit(pmt).has(this->status) || JBit(pmt).has(this->fifo) ) {
295  --n;
296  }
297  }
298  }
299 
300  return n;
301 
302  }
303 
304 
305  /**
306  * Get UDP trailer status.
307  *
308  * \return true if UDP trailer present; else false
309  */
310  bool hasUDPTrailer() const
311  {
312  return DAQ_UDP_TRAILER.has(this->fifo);
313  }
314 
315 
316  /**
317  * Set high-rate veto.
318  *
319  * \param tdc TDC
320  * \param value value
321  */
322  void setHighRateVeto(const int tdc, const bool value)
323  {
324  JBit(tdc).set(this->status, value);
325  }
326 
327 
328  /**
329  * Read DAQ frame status from input.
330  *
331  * \param in JReader
332  * \param status JDAQFrameStatus
333  * \return JReader
334  */
336  {
337  in >> status.daq;
338  in >> status.status;
339  in >> status.fifo;
340  in >> status.status_3;
341  in >> status.status_4;
342 
343  return in;
344  }
345 
346 
347  /**
348  * Write DAQ frame status to output.
349  *
350  * \param out JWriter
351  * \param status JDAQFrameStatus
352  * \return JWriter
353  */
354  friend inline JWriter& operator<<(JWriter& out, const JDAQFrameStatus& status)
355  {
356  out << status.daq;
357  out << status.status;
358  out << status.fifo;
359  out << status.status_3;
360  out << status.status_4;
361 
362  return out;
363  }
364 
365 
366  /**
367  * Get size of object.
368  *
369  * \return number of bytes
370  */
371  static int sizeOf()
372  {
373  return (sizeof(int) +
374  sizeof(int) +
375  sizeof(int) +
376  sizeof(int) +
377  sizeof(int));
378  }
379 
380 
382 
383  protected:
384  int daq; // DAQ status
385  int status; // TDC status
386  int fifo; // FIFO status
387  int status_3; // spare
388  int status_4; // spare
389  };
390 
391 
392  /**
393  * Equal operator for DAQ frame status.
394  *
395  * \param first frame status
396  * \param second frame status
397  * \result true if first frame status equal to second; else false
398  */
399  inline bool operator==(const JDAQFrameStatus& first,
400  const JDAQFrameStatus& second)
401  {
402  return (first.getDAQStatus() == second.getDAQStatus() &&
403  first.getStatus() == second.getStatus() &&
404  first.getFIFOStatus() == second.getFIFOStatus());
405  }
406 
407 
408  /**
409  * Not-equal operator for DAQ frame status.
410  *
411  * \param first frame status
412  * \param second frame status
413  * \result true if first frame status not equal to second; else false
414  */
415  inline bool operator!=(const JDAQFrameStatus& first,
416  const JDAQFrameStatus& second)
417  {
418  return !(first == second);
419  }
420 }
421 
422 #endif
JDAQ.hh
JIO::JReader
Interface for binary input.
Definition: JSerialisable.hh:62
KM3NETDAQ::JDAQFrameStatus::testHighRateVeto
bool testHighRateVeto() const
Test high-rate veto status.
Definition: JDAQFrameStatus.hh:202
KM3NETDAQ::JDAQFrameStatus::testStatus
bool testStatus() const
Test TDC and White Rabbit status.
Definition: JDAQFrameStatus.hh:147
KM3NETDAQ::DAQ_UDP_RECEIVED_PACKETS
static const JBits DAQ_UDP_RECEIVED_PACKETS(0, 15)
Mask of UDP received packets.
KM3NETDAQ::JDAQFrameStatus::countFIFOStatus
int countFIFOStatus() const
Count FIFO status.
Definition: JDAQFrameStatus.hh:269
KM3NETDAQ::JBit::has
bool has(const int mask) const
Test bit.
Definition: JDAQ.hh:139
KM3NETDAQ::JDAQFrameStatus::getFIFOStatus
int getFIFOStatus() const
Get FIFO status.
Definition: JDAQFrameStatus.hh:125
KM3NETDAQ::JBit::set
void set(int &mask) const
Set bit in given bit mask.
Definition: JDAQ.hh:77
KM3NETDAQ::JBit
Auxiliary data structure for single bit.
Definition: JDAQ.hh:36
KM3NETDAQ::JDAQFrameStatus::setHighRateVeto
void setHighRateVeto(const int tdc, const bool value)
Set high-rate veto.
Definition: JDAQFrameStatus.hh:322
KM3NETDAQ::JDAQFrameStatus::countActiveChannels
int countActiveChannels() const
Count active channels.
Definition: JDAQFrameStatus.hh:288
JTOOLS::n
const int n
Definition: JPolint.hh:628
KM3NETDAQ::JDAQFrameStatus
DAQ frame status.
Definition: JDAQFrameStatus.hh:23
KM3NETDAQ::NUMBER_OF_PMTS
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
KM3NETDAQ::JDAQFrameStatus::setDAQFrameStatus
void setDAQFrameStatus(const JDAQFrameStatus &status)
Set DAQ frame status.
Definition: JDAQFrameStatus.hh:92
KM3NETDAQ::JDAQFrameStatus::JDAQFrameStatus
JDAQFrameStatus(const int __daq, const int __status, const int __fifo, const int __status_3=0, const int __status_4=0)
Constructor.
Definition: JDAQFrameStatus.hh:46
KM3NETDAQ::JDAQFrameStatus::operator<<
friend JWriter & operator<<(JWriter &out, const JDAQFrameStatus &status)
Write DAQ frame status to output.
Definition: JDAQFrameStatus.hh:354
KM3NETDAQ::DAQ_UDP_TRAILER
static const JBit DAQ_UDP_TRAILER(31)
UDP trailer.
KM3NETDAQ::JDAQFrameStatus::getUDPMaximalSequenceNumber
int getUDPMaximalSequenceNumber() const
Get maximal sequence number of UDP packet.
Definition: JDAQFrameStatus.hh:169
KM3NETDAQ::JDAQFrameStatus::countHighRateVeto
int countHighRateVeto() const
Count high-rate veto status.
Definition: JDAQFrameStatus.hh:225
KM3NETDAQ::JDAQFrameStatus::JDAQFrameStatus
JDAQFrameStatus()
Default constructor.
Definition: JDAQFrameStatus.hh:28
KM3NETDAQ::JDAQFrameStatus::status_4
int status_4
Definition: JDAQFrameStatus.hh:388
KM3NETDAQ::JDAQFrameStatus::hasUDPTrailer
bool hasUDPTrailer() const
Get UDP trailer status.
Definition: JDAQFrameStatus.hh:310
KM3NETDAQ::JDAQFrameStatus::operator>>
friend JReader & operator>>(JReader &in, JDAQFrameStatus &status)
Read DAQ frame status from input.
Definition: JDAQFrameStatus.hh:335
JSerialisable.hh
KM3NETDAQ::operator!=
bool operator!=(const JDAQChronometer &first, const JDAQChronometer &second)
Not-equal operator for DAQ chronometers.
Definition: JDAQChronometer.hh:303
KM3NETDAQ::JDAQFrameStatus::getUDPNumberOfReceivedPackets
int getUDPNumberOfReceivedPackets() const
Get number of received UDP packets.
Definition: JDAQFrameStatus.hh:158
KM3NETDAQ::JDAQFrameStatus::testHighRateVeto
bool testHighRateVeto(const int tdc) const
Test high-rate veto status.
Definition: JDAQFrameStatus.hh:214
JIO::JWriter
Interface for binary output.
Definition: JSerialisable.hh:130
KM3NETDAQ::JDAQFrameStatus::status_3
int status_3
Definition: JDAQFrameStatus.hh:387
KM3NETDAQ::JDAQFrameStatus::testFIFOStatus
bool testFIFOStatus() const
Test FIFO status.
Definition: JDAQFrameStatus.hh:246
JDAQRoot.hh
KM3NETDAQ::JDAQFrameStatus::getInstance
static const JDAQFrameStatus & getInstance()
Get reference to unique instance of this class object.
Definition: JDAQFrameStatus.hh:66
KM3NETDAQ::JBit::write
int write(const int value) const
Write given value as bit mask.
Definition: JDAQ.hh:115
KM3NETDAQ::operator==
bool operator==(const JDAQChronometer &first, const JDAQChronometer &second)
Equal operator for DAQ chronometers.
Definition: JDAQChronometer.hh:286
KM3NETDAQ::JDAQFrameStatus::testDAQStatus
bool testDAQStatus() const
Test DAQ status of packets.
Definition: JDAQFrameStatus.hh:136
KM3NETDAQ::JDAQFrameStatus::status
int status
Definition: JDAQFrameStatus.hh:385
KM3NETDAQ::JBits::write
int write(const int value) const
Write given value as bit mask.
Definition: JDAQ.hh:238
KM3NETDAQ::JDAQFrameStatus::getDAQStatus
int getDAQStatus() const
Get DAQ status.
Definition: JDAQFrameStatus.hh:103
KM3NETDAQ::DAQ_WHITE_RABBIT
static const JBit DAQ_WHITE_RABBIT(31)
White Rabbit status.
KM3NETDAQ::JDAQFrameStatus::fifo
int fifo
Definition: JDAQFrameStatus.hh:386
KM3NETDAQ::JDAQFrameStatus::testFIFOStatus
bool testFIFOStatus(const int tdc) const
Test FIFO status.
Definition: JDAQFrameStatus.hh:258
KM3NETDAQ::DAQ_UDP_SEQUENCE_NUMBER
static const JBits DAQ_UDP_SEQUENCE_NUMBER(16, 31)
Mask of UDP sequence number.
KM3NETDAQ::JDAQFrameStatus::testTDCStatus
bool testTDCStatus() const
Test TDC status.
Definition: JDAQFrameStatus.hh:191
KM3NETDAQ
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
KM3NETDAQ::JBits::read
int read(const int mask) const
Read given bit mask as value.
Definition: JDAQ.hh:250
KM3NETDAQ::JDAQFrameStatus::sizeOf
static int sizeOf()
Get size of object.
Definition: JDAQFrameStatus.hh:371
KM3NETDAQ::JBits::has
bool has(const int mask) const
Test bit mask.
Definition: JDAQ.hh:262
KM3NETDAQ::DAQ_FIFO
static const JBits DAQ_FIFO(0, 30)
FIFO almost full bits.
KM3NETDAQ::JDAQFrameStatus::testWhiteRabbitStatus
bool testWhiteRabbitStatus() const
Test White Rabbit status.
Definition: JDAQFrameStatus.hh:180
KM3NETDAQ::JDAQFrameStatus::getDAQFrameStatus
const JDAQFrameStatus & getDAQFrameStatus() const
Get DAQ frame status.
Definition: JDAQFrameStatus.hh:81
JDAQException.hh
KM3NETDAQ::DAQ_TDC
static const JBits DAQ_TDC(0, 30)
TDC high-rate veto status.
KM3NETDAQ::JDAQFrameStatus::getStatus
int getStatus() const
Get TDC and White Rabbit status.
Definition: JDAQFrameStatus.hh:114
KM3NETDAQ::JDAQFrameStatus::ClassDefNV
ClassDefNV(JDAQFrameStatus, 1)
KM3NETDAQ::JDAQFrameStatus::daq
int daq
Definition: JDAQFrameStatus.hh:384