Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JDAQSuperFrame.hh
Go to the documentation of this file.
1 #ifndef __JDAQSUPERFRAME__
2 #define __JDAQSUPERFRAME__
3 
4 #include "JIO/JSerialisable.hh"
5 #include "JDAQ/JDAQ.hh"
6 #include "JDAQ/JDAQPreamble.hh"
8 #include "JDAQ/JDAQFrame.hh"
9 #include "JDAQ/JDAQHit.hh"
10 #include "JDAQ/JDAQRoot.hh"
11 #include "JDAQ/JDAQException.hh"
12 
13 
14 /**
15  * \author mdejong
16  */
17 
18 namespace KM3NETDAQ {
19 
20  using JIO::JReader;
21  using JIO::JWriter;
22 
23 
24  /**
25  * Data frame of one optical module.
26  */
28  public JDAQPreamble,
29  public JDAQSuperFrameHeader,
30  public JDAQFrame
31  {
32  public:
33 
38 
39 
40  /**
41  * Default constructor.
42  */
46  JDAQFrame()
47  {}
48 
49 
50  /**
51  * Constructor.
52  *
53  * \param header JDAQ super frame header
54  */
57  JDAQSuperFrameHeader(header),
58  JDAQFrame()
59  {}
60 
61 
62  /**
63  * Copy constructor.
64  *
65  * \param super_frame JDAQ super frame
66  */
67  JDAQSuperFrame(const JDAQSuperFrame& super_frame) :
70  JDAQFrame(super_frame)
71  {}
72 
73 
74  /**
75  * Add data from same optical module.
76  *
77  * \param super_frame JDAQ super frame
78  * \return this JDAQ super frame
79  */
80  JDAQSuperFrame& add(const JDAQSuperFrame& super_frame)
81  {
82  if (this->getModuleID() != super_frame.getModuleID())
83  throw JDAQException("JDAQSuperFrame::add(): Different module identifiers.");
84 
85  return add(static_cast<const JDAQFrame&>(super_frame));
86  }
87 
88 
89  /**
90  * Add hit.
91  *
92  * \param hit JDAQ hit
93  * \return this JDAQ frame
94  */
95  JDAQSuperFrame& add(const JDAQHit& hit)
96  {
97  return add(1, &hit);
98  }
99 
100 
101  /**
102  * Add data.
103  *
104  * \param frame JDAQ frame
105  * \return this JDAQ frame
106  */
107  JDAQSuperFrame& add(const JDAQFrame& frame)
108  {
109  return add(frame.numberOfHits, frame.buffer);
110  }
111 
112 
113  /**
114  * Add data.
115  *
116  * \param number_of_hits number of hits
117  * \param data pointer to data
118  * \return this data frame
119  */
120  JDAQSuperFrame& add(const int number_of_hits, const JDAQHit* data)
121  {
122  JDAQFrame::add(number_of_hits, data);
123 
124  return *this;
125  }
126 
127 
128  /**
129  * Read JDAQSuperFrame from input.
130  *
131  * \param in JReader
132  * \param frame JDAQSuperFrame
133  * \return JReader
134  */
135  friend inline JReader& operator>>(JReader& in, JDAQSuperFrame& frame)
136  {
137  in >> static_cast<JDAQPreamble&> (frame);
138  in >> static_cast<JDAQSuperFrameHeader&>(frame);
139  in >> static_cast<JDAQFrame&> (frame);
140 
141  return in;
142  }
143 
144 
145  /**
146  * Write JDAQSuperFrame to output.
147  *
148  * \param out JWriter
149  * \param frame JDAQSuperFrame
150  * \return JWriter
151  */
152  friend inline JWriter& operator<<(JWriter& out, const JDAQSuperFrame& frame)
153  {
154  out << static_cast<const JDAQPreamble&> (frame);
155  out << static_cast<const JDAQSuperFrameHeader&>(frame);
156  out << static_cast<const JDAQFrame&> (frame);
157 
158  return out;
159  }
160 
161 
162  /**
163  * Get size of object.
164  *
165  * \return number of bytes
166  */
167  virtual int getSize() const
168  {
169  return (JDAQPreamble ::sizeOf() +
171  sizeof(int) + numberOfHits * JDAQHit::sizeOf());
172  }
173 
174 
176  };
177 
178 
179  /**
180  * Equal operator for DAQ super frames.
181  *
182  * \param first super frame
183  * \param second super frame
184  * \result true if first super frame equal to second; else false
185  */
186  inline bool operator==(const JDAQSuperFrame& first,
187  const JDAQSuperFrame& second)
188  {
189  if (first.getDAQSuperFrameHeader() == second.getDAQSuperFrameHeader() &&
190  first.size() == second.size()) {
191 
192  for (JDAQSuperFrame::const_iterator p = first.begin(), q = second.begin(); p != first.end(); ++p, ++q) {
193  if (*p != *q) {
194  return false;
195  }
196  }
197 
198  return true;
199 
200  } else {
201 
202  return false;
203  }
204  }
205 
206 
207  /**
208  * Not-equal operator for DAQ super frames.
209  *
210  * \param first super frame
211  * \param second super frame
212  * \result true if first super frame not equal to second; else false
213  */
214  inline bool operator!=(const JDAQSuperFrame& first,
215  const JDAQSuperFrame& second)
216  {
217  return !(first == second);
218  }
219 }
220 
221 #endif
bool operator==(const JDAQChronometer &first, const JDAQChronometer &second)
Equal operator for DAQ chronometers.
ClassDef(JDAQSuperFrame, 3)
Interface for binary output.
int getModuleID() const
Get module identifier.
Auxiliary class for a DAQ type holder.
friend JWriter & operator<<(JWriter &out, const JDAQSuperFrame &frame)
Write JDAQSuperFrame to output.
std::reverse_iterator< iterator > reverse_iterator
Definition: JDAQFrame.hh:77
static int sizeOf()
Get size of object.
const JDAQHit * data() const
Definition: JDAQFrame.hh:159
JDAQSuperFrame & add(const int number_of_hits, const JDAQHit *data)
Add data.
JDAQSuperFrame()
Default constructor.
JDAQFrame::const_iterator const_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: JDAQFrame.hh:76
Hit data structure.
Definition: JDAQHit.hh:36
const_iterator begin() const
Definition: JDAQFrame.hh:139
Data frame.
Definition: JDAQFrame.hh:70
JDAQSuperFrame & add(const JDAQHit &hit)
Add hit.
virtual int getSize() const
Get size of object.
Interface for binary input.
JDAQSuperFrame(const JDAQSuperFrame &super_frame)
Copy constructor.
JDAQSuperFrame(const JDAQSuperFrameHeader &header)
Constructor.
static int sizeOf()
Get size of object.
Definition: JDAQHit.hh:152
JDAQFrame & add(const JDAQFrame &frame)
Add data.
Definition: JDAQFrame.hh:193
JDAQFrame::const_reverse_iterator const_reverse_iterator
JDAQFrame::iterator iterator
General exception.
const JDAQSuperFrameHeader & getDAQSuperFrameHeader() const
Get DAQ super frame header.
JDAQSuperFrame & add(const JDAQFrame &frame)
Add data.
JDAQFrame::reverse_iterator reverse_iterator
friend JReader & operator>>(JReader &in, JDAQSuperFrame &frame)
Read JDAQSuperFrame from input.
KM3NeT DAQ constants, bit handling, etc.
bool operator!=(const JDAQChronometer &first, const JDAQChronometer &second)
Not-equal operator for DAQ chronometers.
int size() const
Definition: JDAQFrame.hh:157
Data frame of one optical module.
JDAQSuperFrame & add(const JDAQSuperFrame &super_frame)
Add data from same optical module.
const_iterator end() const
Definition: JDAQFrame.hh:140
static int sizeOf()
Get size of object.