Jpp
JDAQTimeslice.hh
Go to the documentation of this file.
1 #ifndef __JDAQTIMESLICE__
2 #define __JDAQTIMESLICE__
3 
4 #include <ostream>
5 #include <iomanip>
6 #include <vector>
7 #include <map>
8 
9 #include "JDAQ/JDAQRoot.hh"
10 #include "JDAQ/JDAQPreamble.hh"
12 #include "JDAQ/JDAQSuperFrame.hh"
13 #include "JDAQ/JDAQException.hh"
14 #include "JDAQ/JDAQPrint.hh"
15 #include "JIO/JSerialisable.hh"
16 #include "JIO/JSTDIO.hh"
17 
18 
19 /**
20  * \author mdejong
21  */
22 
23 namespace KM3NETDAQ {
24 
25  using JIO::JReader;
26  using JIO::JWriter;
27 
28 
29  class JDAQEvent;
30  class JDAQSummaryslice;
31 
32 
33  /**
34  * Data time slice.
35  */
36  class JDAQTimeslice :
37  public JDAQPreamble,
38  public JDAQTimesliceHeader,
39  public std::vector<JDAQSuperFrame>
40  {
41  public:
42  /**
43  * Default constructor.
44  */
49  {}
50 
51 
52  /**
53  * Constructor.
54  *
55  * \param chronometer DAQ chronometer
56  */
57  JDAQTimeslice(const JDAQChronometer& chronometer) :
59  JDAQTimesliceHeader(chronometer),
61  {}
62 
63 
64  /**
65  * Constructor.
66  *
67  * \param event DAQ event
68  * \param snapshot use shapshot hits (else use triggered hits)
69  */
71  const bool snapshot = true);
72 
73 
74  /**
75  * Constructor.
76  *
77  * \param event DAQ event
78  * \param summary summary
79  * \param snapshot use shapshot hits (else use triggered hits)
80  */
82  const JDAQSummaryslice& summary,
83  const bool snapshot = true);
84 
85 
86  /**
87  * Virtual destructor.
88  */
89  virtual ~JDAQTimeslice()
90  {
91  clear();
92  }
93 
94 
95  /**
96  * Clear data.
97  */
98  void clear()
99  {
100  for (iterator i = this->begin(); i != this->end(); ++i) {
101  i->clear();
102  }
103 
105  }
106 
107 
108  /**
109  * Assignment operator.
110  *
111  * \param timeslice timeslice
112  * \return this timeslice
113  */
115  {
116  clear();
117 
119 
120  for (const_iterator i = timeslice.begin(); i != timeslice.end(); ++i) {
121  push_back(*i);
122  }
123 
124  return *this;
125  }
126 
127 
128  /**
129  * Add another timeslice.
130  *
131  * \param timeslice timeslice
132  * \return this timeslice
133  */
134  JDAQTimeslice& add(const JDAQTimeslice& timeslice)
135  {
136  using namespace std;
137 
139 
140  for (const_iterator i = this->begin(); i != this->end(); ++i) {
141  buffer[i->getModuleIdentifier()] = distance(static_cast<const JDAQTimeslice&>(*this).begin(),i);
142  }
143 
144  for (JDAQTimeslice::const_iterator i = timeslice.begin(); i != timeslice.end(); ++i) {
145 
146  map<JDAQModuleIdentifier, int>::const_iterator p = buffer.find(i->getModuleIdentifier());
147 
148  if (p != buffer.end()) {
149 
150  JDAQSuperFrame& frame = this->at(p->second);
151 
152  frame.add(*i);
153 
154  sort(frame.begin(), frame.end());
155 
156  } else {
157 
158  this->push_back(*i);
159  }
160  }
161 
162  return *this;
163  }
164 
165 
166  /**
167  * Read DAQ timeslice from input.
168  *
169  * \param in JReader
170  * \param timeslice JDAQTimeslice
171  * \return JReader
172  */
173  friend inline JReader& operator>>(JReader& in, JDAQTimeslice& timeslice)
174  {
175  timeslice.clear();
176 
177  in >> static_cast<JDAQPreamble&> (timeslice);
178  in >> static_cast<JDAQTimesliceHeader&> (timeslice);
179  in >> static_cast<std::vector<JDAQSuperFrame>&>(timeslice);
180 
181  return in;
182  }
183 
184 
185  /**
186  * Write DAQ timeslice to output.
187  *
188  * \param out JWriter
189  * \param timeslice JDAQTimeslice
190  * \return JWriter
191  */
192  friend inline JWriter& operator<<(JWriter& out, const JDAQTimeslice& timeslice)
193  {
194  out << static_cast<const JDAQPreamble&> (timeslice);
195  out << static_cast<const JDAQTimesliceHeader&> (timeslice);
196  out << static_cast<const std::vector<JDAQSuperFrame>&>(timeslice);
197 
198  return out;
199  }
200 
201 
202  /**
203  * Print DAQ Timeslice.
204  *
205  * \param out output stream
206  * \param lpr long print
207  * \return output stream
208  */
209  std::ostream& print(std::ostream& out, const bool lpr = false) const
210  {
211  using namespace std;
212 
213  out << this->ClassName() << endl;
214  out << dynamic_cast<const JDAQPreamble&> (*this) << endl;
215  out << dynamic_cast<const JDAQChronometer&>(*this) << endl;
216 
217  for (JDAQTimeslice::const_iterator frame = this->begin(); frame != this->end(); ++frame) {
218 
219  out << ' ' << setw(10) << frame->getModuleID();
220  out << ' ' << setw(6) << frame->getLength();
221  out << ' ' << setw(6) << frame->getDataType();
222  out << ' ' << setw(6) << frame->getTimesliceStart();
223  out << ' ' << setw(8) << setfill('0') << hex << frame->getStatus() << dec << setfill(' ');
224  out << '|' << setw(8) << setfill('0') << hex << frame->getFIFOStatus() << dec << setfill(' ');
225  out << ' ' << setw(6) << frame->size();
226 
227  if (!lpr) {
228 
229  if (!frame->empty()) {
230 
231  out << ' ' << setw(10) << frame-> begin()->getT();
232  out << " ... ";
233  out << ' ' << setw(10) << frame->rbegin()->getT();
234  }
235 
236  out << endl;
237 
238  } else {
239 
240  out << endl;
241 
242  int n = 1;
243 
244  for (JDAQFrame::const_iterator hit = frame->begin(); hit != frame->end(); ++hit, ++n) {
245  out << setw(2) << (int) hit->getPMT() << ' ' << setw(8) << hit->getT() << (n%10 == 0 ? '\n' : ' ');
246  }
247 
248  out << endl;
249  }
250  }
251 
252  return out;
253  }
254 
255  /**
256  * Get size of object.
257  *
258  * \return number of bytes
259  */
260  virtual int getSize() const
261  {
262  int len = 0;
263 
264  len += JDAQPreamble ::sizeOf();
266 
267  len += sizeof(int);
268 
269  for (const_iterator frame = begin(); frame != end(); ++frame) {
270  len += frame->getSize();
271  }
272 
273  return len;
274  }
275 
276 
278  };
279 
280 
281  /**
282  * Equal operator for DAQ time slices.
283  *
284  * \param first time slice
285  * \param second time slice
286  * \result true if first time slice equal to second; else false
287  */
288  inline bool operator==(const JDAQTimeslice& first,
289  const JDAQTimeslice& second)
290  {
291  return (first.getDAQTimesliceHeader() == second.getDAQTimesliceHeader() &&
292  static_cast<const std::vector<JDAQSuperFrame>&>(first) == static_cast<const std::vector<JDAQSuperFrame>&>(second));
293  }
294 
295 
296  /**
297  * Not-equal operator for DAQ time slices.
298  *
299  * \param first time slice
300  * \param second time slice
301  * \result true if first time slice not equal to second; else false
302  */
303  inline bool operator!=(const JDAQTimeslice& first,
304  const JDAQTimeslice& second)
305  {
306  return !(first == second);
307  }
308 
309 
310  /**
311  * Timeslice data structure for L0 data.
312  */
314 
315 
316  /**
317  * Timeslice data structure for L1 data.
318  */
320 
321 
322  /**
323  * Timeslice data structure for L2 data.
324  */
326 
327 
328  /**
329  * Timeslice data structure for SN data.
330  */
332 
333 
334  /**
335  * Print DAQ Timeslice.
336  *
337  * \param out output stream
338  * \param timeslice timeslice
339  * \return output stream
340  */
341  inline std::ostream& operator<<(std::ostream& out, const JDAQTimeslice& timeslice)
342  {
343  return timeslice.print(out, getDAQLongprint());
344  }
345 }
346 
347 #endif
KM3NETDAQ::JDAQChronometer::setDAQChronometer
void setDAQChronometer(const JDAQChronometer &chronometer)
Set DAQ chronometer.
Definition: JDAQChronometer.hh:99
KM3NETDAQ::JDAQTimeslice::operator>>
friend JReader & operator>>(JReader &in, JDAQTimeslice &timeslice)
Read DAQ timeslice from input.
Definition: JDAQTimeslice.hh:173
std::iterator
Definition: JSTDTypes.hh:18
JIO::JReader
Interface for binary input.
Definition: JSerialisable.hh:62
KM3NETDAQ::JDAQEvent
DAQ Event.
Definition: JDAQEvent.hh:34
KM3NETDAQ::JDAQTimesliceL2
Timeslice data structure for L2 data.
Definition: JDAQTimeslice.hh:325
KM3NETDAQ::JDAQTimeslice::operator=
JDAQTimeslice & operator=(const JDAQTimeslice &timeslice)
Assignment operator.
Definition: JDAQTimeslice.hh:114
KM3NETDAQ::JDAQTimesliceSN
Timeslice data structure for SN data.
Definition: JDAQTimeslice.hh:331
JTOOLS::n
const int n
Definition: JPolint.hh:628
std::vector
Definition: JSTDTypes.hh:12
event
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
Definition: JVoltageOptimizer_utils.hh:26
KM3NETDAQ::JDAQTimesliceHeader::getDAQTimesliceHeader
const JDAQTimesliceHeader & getDAQTimesliceHeader() const
Get DAQ time slice header.
Definition: JDAQTimesliceHeader.hh:49
KM3NETDAQ::JDAQTimeslice
Data time slice.
Definition: JDAQTimeslice.hh:36
distance
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Definition: PhysicsEvent.hh:434
KM3NETDAQ::JDAQPreamble::sizeOf
static int sizeOf()
Get size of object.
Definition: JDAQPreamble.hh:110
KM3NETDAQ::JDAQTimeslice::getSize
virtual int getSize() const
Get size of object.
Definition: JDAQTimeslice.hh:260
JSerialisable.hh
KM3NETDAQ::JDAQTimeslice::clear
void clear()
Clear data.
Definition: JDAQTimeslice.hh:98
JSTDIO.hh
KM3NETDAQ::operator!=
bool operator!=(const JDAQChronometer &first, const JDAQChronometer &second)
Not-equal operator for DAQ chronometers.
Definition: JDAQChronometer.hh:303
KM3NETDAQ::JDAQTimesliceHeader
JDAQ timeslice header.
Definition: JDAQTimesliceHeader.hh:22
KM3NETDAQ::JDAQTimeslice::JDAQTimeslice
JDAQTimeslice()
Default constructor.
Definition: JDAQTimeslice.hh:45
JIO::JWriter
Interface for binary output.
Definition: JSerialisable.hh:130
KM3NETDAQ::JDAQTimesliceL0
Timeslice data structure for L0 data.
Definition: JDAQTimeslice.hh:313
KM3NETDAQ::JDAQSummaryslice
Data summary slice.
Definition: JDAQSummaryslice.hh:31
KM3NETDAQ::JDAQTimeslice::~JDAQTimeslice
virtual ~JDAQTimeslice()
Virtual destructor.
Definition: JDAQTimeslice.hh:89
std::map
Definition: JSTDTypes.hh:16
JDAQRoot.hh
KM3NETDAQ::JDAQTimeslice::ClassDef
ClassDef(JDAQTimeslice, 4)
KM3NETDAQ::operator==
bool operator==(const JDAQChronometer &first, const JDAQChronometer &second)
Equal operator for DAQ chronometers.
Definition: JDAQChronometer.hh:286
KM3NETDAQ::JDAQHeader::sizeOf
static int sizeOf()
Get size of object.
Definition: JDAQHeader.hh:103
KM3NETDAQ::getDAQLongprint
bool & getDAQLongprint()
Get DAQ print option.
Definition: JDAQPrint.hh:15
KM3NETDAQ::JDAQTimeslice::add
JDAQTimeslice & add(const JDAQTimeslice &timeslice)
Add another timeslice.
Definition: JDAQTimeslice.hh:134
JDAQTimesliceHeader.hh
KM3NETDAQ::JDAQSuperFrame::add
JDAQSuperFrame & add(const JDAQSuperFrame &super_frame)
Add data from same optical module.
Definition: JDAQSuperFrame.hh:80
KM3NETDAQ::JDAQType
Auxiliary class for a DAQ type holder.
Definition: JDAQDataTypes.hh:15
KM3NETDAQ::JDAQTimeslice::print
std::ostream & print(std::ostream &out, const bool lpr=false) const
Print DAQ Timeslice.
Definition: JDAQTimeslice.hh:209
KM3NETDAQ::JDAQChronometer::getDAQChronometer
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
Definition: JDAQChronometer.hh:88
std
Definition: jaanetDictionary.h:36
JDAQSuperFrame.hh
KM3NETDAQ
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
JDAQPrint.hh
KM3NETDAQ::JDAQSuperFrame
Data frame of one optical module.
Definition: JDAQSuperFrame.hh:27
KM3NETDAQ::JDAQTimeslice::operator<<
friend JWriter & operator<<(JWriter &out, const JDAQTimeslice &timeslice)
Write DAQ timeslice to output.
Definition: JDAQTimeslice.hh:192
KM3NETDAQ::JDAQTimeslice::JDAQTimeslice
JDAQTimeslice(const JDAQChronometer &chronometer)
Constructor.
Definition: JDAQTimeslice.hh:57
KM3NETDAQ::JDAQFrame::const_iterator
const typedef JDAQHit * const_iterator
Definition: JDAQFrame.hh:74
KM3NETDAQ::JDAQFrame::begin
const_iterator begin() const
Definition: JDAQFrame.hh:139
KM3NETDAQ::JDAQTimesliceL1
Timeslice data structure for L1 data.
Definition: JDAQTimeslice.hh:319
JDAQException.hh
KM3NETDAQ::JDAQFrame::end
const_iterator end() const
Definition: JDAQFrame.hh:140
JDAQPreamble.hh
KM3NETDAQ::JDAQPreamble
DAQ preamble.
Definition: JDAQPreamble.hh:39
KM3NETDAQ::JDAQChronometer
DAQ chronometer.
Definition: JDAQChronometer.hh:26