Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
JDAQChronometer.hh
Go to the documentation of this file.
1 #ifndef __JDAQCHRONOMETER__
2 #define __JDAQCHRONOMETER__
3 
4 #include <ostream>
5 #include <iomanip>
6 
10 
11 
12 /**
13  * \author mdejong
14  */
15 
16 namespace KM3NETDAQ {
17 
18  /**
19  * DAQ chronometer.
20  */
22  {
23  public:
24 
25  friend size_t getSizeof<JDAQChronometer>();
27  friend JWriter& operator<<(JWriter&, const JDAQChronometer&);
28 
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 
184 
185 
186  protected:
188  int run;
191  };
192 
193 
194  /**
195  * Print DAQ chronometer.
196  *
197  * \param out output stream
198  * \param chronometer JDAQChronometer
199  * \return output stream
200  */
201  inline std::ostream& operator<<(std::ostream& out, const JDAQChronometer& chronometer)
202  {
203  using namespace std;
204 
205  out << setw(8) << chronometer.getDetectorID();
206  out << ' ';
207  out << setw(8) << chronometer.getRunNumber();
208  out << ' ';
209  out << setw(8) << chronometer.getFrameIndex();
210  out << ' ';
211  out << chronometer.getTimesliceStart();
212 
213  return out;
214  }
215 
216 
217  /**
218  * Get time of last RTS in ns since start of run for a given chronometer.
219  *
220  * \param chronometer chronometer
221  * \return time [ns]
222  */
223  inline double getTimeOfRTS(const JDAQChronometer& chronometer)
224  {
225  return getTimeOfRTS(chronometer.getFrameIndex());
226  }
227 
228 
229  /**
230  * Equal operator for DAQ chronometers.
231  *
232  * \param first chronometer
233  * \param second chronometer
234  * \result true if first chronometer equal to second; else false
235  */
236  inline bool operator==(const JDAQChronometer& first,
237  const JDAQChronometer& second)
238  {
239  return (first.getDetectorID() == second.getDetectorID() &&
240  first.getRunNumber() == second.getRunNumber() &&
241  first.getFrameIndex() == second.getFrameIndex() &&
242  first.getTimesliceStart() == second.getTimesliceStart());
243  }
244 
245 
246  /**
247  * Not-equal operator for DAQ chronometers.
248  *
249  * \param first chronometer
250  * \param second chronometer
251  * \result true if first chronometer not equal to second; else false
252  */
253  inline bool operator!=(const JDAQChronometer& first,
254  const JDAQChronometer& second)
255  {
256  return !(first == second);
257  }
258 
259 
260  /**
261  * Get time difference between two chronometers.
262  *
263  * \param first chronometer
264  * \param second chronometer
265  * \result time difference [s]
266  */
267  inline double getTimeDifference(const JDAQChronometer& first, const JDAQChronometer& second)
268  {
269  return getTimeDifference(first.getTimesliceStart(), second.getTimesliceStart());
270  }
271 }
272 
273 #endif
Interface for binary input.
Interface for binary output.
friend JReader & operator>>(JReader &, JDAQChronometer &)
Read DAQ chronometer from input.
ClassDef(JDAQChronometer, 3)
friend JWriter & operator<<(JWriter &, const JDAQChronometer &)
Write DAQ chronometer to output.
JDAQChronometer(const int __detector_id, const int __run, const int __frame_index, const JDAQUTCExtended &__timeslice_start)
Constructor.
int getDetectorID() const
Get detector identifier.
virtual ~JDAQChronometer()
Virtual destructor.
void setFrameIndex(const int frame_index)
Set frame index.
int getRunNumber() const
Get run number.
JDAQUTCExtended getTimesliceStart() const
Get start of timeslice.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
JDAQChronometer(const int __detector_id, const int __run, const int __frame_index)
Constructor.
JDAQChronometer()
Default constructor.
void setDAQChronometer(const JDAQChronometer &chronometer)
Set DAQ chronometer.
void setRunNumber(const int run)
Set run number.
void setTimesliceStart(const JDAQUTCExtended &timeslice_start)
Set timeslice start time.
int getFrameIndex() const
Get frame index.
Data structure for UTC time.
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
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
size_t getSizeof< JDAQChronometer >()
Get size of type.
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer.
double getTimeDifference(const JDAQChronometer &first, const JDAQChronometer &second)
Get time difference between two chronometers.
bool operator!=(const JDAQChronometer &first, const JDAQChronometer &second)
Not-equal operator for DAQ chronometers.
bool operator==(const JDAQChronometer &first, const JDAQChronometer &second)
Equal operator for DAQ chronometers.
JWriter & operator<<(JWriter &out, const JDAQChronometer &chronometer)
Write DAQ chronometer to output.
Definition: JSTDTypes.hh:14