Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JDAQChronometer.hh
Go to the documentation of this file.
1 #ifndef __JDAQCHRONOMETER__
2 #define __JDAQCHRONOMETER__
3 
4 #include <ostream>
5 #include <iomanip>
6 
7 #include "JIO/JSerialisable.hh"
8 #include "JDAQ/JDAQRoot.hh"
10 #include "JDAQ/JDAQClock.hh"
11 
12 
13 /**
14  * \author mdejong
15  */
16 
17 namespace KM3NETDAQ {
18 
19  using JIO::JReader;
20  using JIO::JWriter;
21 
22 
23  /**
24  * DAQ chronometer.
25  */
27  {
28  public:
29  /**
30  * Default constructor.
31  */
33  detector_id(0),
34  run (0),
35  frame_index(0),
37  {}
38 
39 
40  /**
41  * Constructor.
42  *
43  * \param __detector_id detector identifier
44  * \param __run run number
45  * \param __frame_index frame index
46  */
47  JDAQChronometer(const int __detector_id,
48  const int __run,
49  const int __frame_index) :
50  detector_id(__detector_id),
51  run (__run),
52  frame_index(__frame_index),
53  timeslice_start(getTimeOfFrame(__frame_index))
54  {}
55 
56 
57  /**
58  * Constructor.
59  *
60  * \param __detector_id detector identifier
61  * \param __run run number
62  * \param __frame_index frame index
63  * \param __timeslice_start start of time slice
64  */
65  JDAQChronometer(const int __detector_id,
66  const int __run,
67  const int __frame_index,
68  const JDAQUTCExtended& __timeslice_start) :
69  detector_id(__detector_id),
70  run (__run),
71  frame_index(__frame_index),
72  timeslice_start(__timeslice_start)
73  {}
74 
75 
76  /**
77  * Virtual destructor.
78  */
79  virtual ~JDAQChronometer()
80  {}
81 
82 
83  /**
84  * Get DAQ chronometer.
85  *
86  * \return DAQ chronometer
87  */
89  {
90  return static_cast<const JDAQChronometer&>(*this);
91  }
92 
93 
94  /**
95  * Set DAQ chronometer.
96  *
97  * \param chronometer DAQ chronometer
98  */
99  void setDAQChronometer(const JDAQChronometer& chronometer)
100  {
101  static_cast<JDAQChronometer&>(*this) = chronometer;
102  }
103 
104 
105  /**
106  * Get detector identifier.
107  *
108  * \return detector identifier
109  */
110  int getDetectorID() const
111  {
112  return detector_id;
113  }
114 
115 
116  /**
117  * Get run number.
118  *
119  * \return run number
120  */
121  int getRunNumber() const
122  {
123  return run;
124  }
125 
126 
127  /**
128  * Get frame index.
129  *
130  * \return frame index
131  */
132  int getFrameIndex() const
133  {
134  return frame_index;
135  }
136 
137 
138  /**
139  * Get start of timeslice
140  *
141  * \return timeslice start
142  */
143 
145  {
146  return timeslice_start;
147  }
148 
149 
150  /**
151  * Set run number.
152  *
153  * \param run run number
154  */
155  void setRunNumber(const int run)
156  {
157  this->run = run;
158  }
159 
160 
161  /**
162  * Set frame index.
163  *
164  * \param frame_index frame index
165  */
166  void setFrameIndex(const int frame_index)
167  {
168  this->frame_index = frame_index;
169  }
170 
171 
172  /**
173  * Set timeslice start time
174  *
175  * \param timeslice_start timeslice start time
176  */
178  {
179  this->timeslice_start = timeslice_start;
180  }
181 
182 
183  /**
184  * Read DAQ chronometer from input.
185  *
186  * \param in JReader
187  * \param chronometer JDAQChronometer
188  * \return JReader
189  */
190  friend inline JReader& operator>>(JReader& in, JDAQChronometer& chronometer)
191  {
192  in >> chronometer.detector_id;
193  in >> chronometer.run;
194  in >> chronometer.frame_index;
195  in >> chronometer.timeslice_start;
196 
197  return in;
198  }
199 
200 
201  /**
202  * Write DAQ chronometer to output.
203  *
204  * \param out JWriter
205  * \param chronometer JDAQChronometer
206  * \return JWriter
207  */
208  friend inline JWriter& operator<<(JWriter& out, const JDAQChronometer& chronometer)
209  {
210  out << chronometer.detector_id;
211  out << chronometer.run;
212  out << chronometer.frame_index;
213  out << chronometer.timeslice_start;
214 
215  return out;
216  }
217 
218 
219  /**
220  * Get size of object.
221  *
222  * \return number of bytes
223  */
224  static int sizeOf()
225  {
226  return (sizeof(int) +
227  sizeof(int) +
228  sizeof(int) +
230  }
231 
232 
234 
235 
236  protected:
238  int run;
241  };
242 
243 
244  /**
245  * Print DAQ chronometer.
246  *
247  * \param out output stream
248  * \param chronometer JDAQChronometer
249  * \return output stream
250  */
251  inline std::ostream& operator<<(std::ostream& out, const JDAQChronometer& chronometer)
252  {
253  using namespace std;
254 
255  out << setw(8) << chronometer.getDetectorID();
256  out << ' ';
257  out << setw(8) << chronometer.getRunNumber();
258  out << ' ';
259  out << setw(8) << chronometer.getFrameIndex();
260  out << ' ';
261  out << chronometer.getTimesliceStart();
262 
263  return out;
264  }
265 
266 
267  /**
268  * Get time of last RTS in ns since start of run for a given chronometer.
269  *
270  * \param chronometer chronometer
271  * \return time [ns]
272  */
273  inline double getTimeOfRTS(const JDAQChronometer& chronometer)
274  {
275  return getTimeOfRTS(chronometer.getFrameIndex());
276  }
277 
278 
279  /**
280  * Equal operator for DAQ chronometers.
281  *
282  * \param first chronometer
283  * \param second chronometer
284  * \result true if first chronometer equal to second; else false
285  */
286  inline bool operator==(const JDAQChronometer& first,
287  const JDAQChronometer& second)
288  {
289  return (first.getDetectorID() == second.getDetectorID() &&
290  first.getRunNumber() == second.getRunNumber() &&
291  first.getFrameIndex() == second.getFrameIndex() &&
292  first.getTimesliceStart() == second.getTimesliceStart());
293  }
294 
295 
296  /**
297  * Not-equal operator for DAQ chronometers.
298  *
299  * \param first chronometer
300  * \param second chronometer
301  * \result true if first chronometer not equal to second; else false
302  */
303  inline bool operator!=(const JDAQChronometer& first,
304  const JDAQChronometer& second)
305  {
306  return !(first == second);
307  }
308 }
309 
310 #endif
const JDAQUTCExtended & getTimesliceStart() const
Get start of timeslice.
bool operator==(const JDAQChronometer &first, const JDAQChronometer &second)
Equal operator for DAQ chronometers.
Interface for binary output.
friend JWriter & operator<<(JWriter &out, const JDAQChronometer &chronometer)
Write DAQ chronometer to output.
int getDetectorID() const
Get detector identifier.
JDAQChronometer(const int __detector_id, const int __run, const int __frame_index)
Constructor.
JDAQChronometer(const int __detector_id, const int __run, const int __frame_index, const JDAQUTCExtended &__timeslice_start)
Constructor.
virtual ~JDAQChronometer()
Virtual destructor.
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer.
Data structure for UTC time.
int getRunNumber() const
Get run number.
int getFrameIndex() const
Get frame index.
double getTimeOfFrame(const int frame_index)
Get start time of frame in ns since start of run for a given frame index.
Definition: JDAQClock.hh:185
static int sizeOf()
Get size of object.
JDAQChronometer()
Default constructor.
friend JReader & operator>>(JReader &in, JDAQChronometer &chronometer)
Read DAQ chronometer from input.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
void setDAQChronometer(const JDAQChronometer &chronometer)
Set DAQ chronometer.
Interface for binary input.
void setTimesliceStart(const JDAQUTCExtended &timeslice_start)
Set timeslice start time.
ClassDef(JDAQChronometer, 3)
void setRunNumber(const int run)
Set run number.
bool operator!=(const JDAQChronometer &first, const JDAQChronometer &second)
Not-equal operator for DAQ chronometers.
void setFrameIndex(const int frame_index)
Set frame index.
static int sizeOf()
Get size of object.
std::ostream & operator<<(std::ostream &out, const JDAQChronometer &chronometer)
Print DAQ chronometer.