Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
PhysicsEvent.hh
Go to the documentation of this file.
1#ifndef __ANTARESDAQ_PHYSICSEVENT__
2#define __ANTARESDAQ_PHYSICSEVENT__
3
4#include <ostream>
5#include <iomanip>
6#include <vector>
7#include <limits>
8
9#include <TROOT.h>
10#include <TObject.h>
11
15
16
17/**
18 * Template hit.
19 */
20template<class T>
21class ARS_Hit : public T {
22public:
23 typedef T data_type;
24
25 /** LCM identifier */
26 unsigned short lcm_id;
27 /** ARS identifier */
28 unsigned char ars_id;
29
30 /**
31 * Default constructor.
32 */
34 T(),
35 lcm_id(0),
36 ars_id(0)
37 {}
38
39 /**
40 * print ASCII
41 * \param out output stream
42 * \param object hit
43 * \return output stream
44 */
45 friend std::ostream& operator<<(std::ostream& out, const ARS_Hit& object)
46 {
47 using namespace std;
48
49 out << setw(5) << (int) object. lcm_id << ' '
50 << setw(2) << (int) object. ars_id << ' ';
51 out << static_cast<const T&>(object);
52
53 return out;
54 }
55
57};
58
61
62
63/**
64 * SPE hit
65 */
66class SPE_Hit : public ARS_Hit<SPE_Item> {
67public:
68 /**
69 * Default constructor.
70 */
73 {}
74
76};
77
78
79/**
80 * AWF hit
81 */
82class AWF_Hit : public ARS_Hit<AWF_Item> {
83public:
84 /**
85 * Default constructor.
86 */
89 {}
90
92};
93
94
95/**
96 * DWF hit
97 */
98class DWF_Hit : public ARS_Hit<DWF_Item> {
99public:
100 /**
101 * Default constructor.
102 */
104 ARS_Hit<DWF_Item>()
105 {}
106
108};
109
110
111/**
112 * Triggered SPE hit
113 */
114class TriggeredSPE_Hit : public SPE_Hit {
115public:
116 /**
117 * Default constructor.
118 */
120 SPE_Hit()
121 {}
122
124};
125
126
127/**
128 * Physics event
129 */
131 public EventPreamble
132{
133protected:
134 unsigned int EventType_;
135 unsigned int TriggerCounter_;
136 double MinT_;
137 double MaxT_;
138 float MaxA_;
139 float TotA_;
140
145
146public:
147 /**
148 * Default constructor.
149 */
152 EventType_(0),
154 MinT_(+std::numeric_limits<double>::max()),
155 MaxT_(-std::numeric_limits<double>::max()),
156 MaxA_(0),
157 TotA_(0)
158 {}
159
160 /**
161 * Virtual destructor.
162 */
164 {}
165
166 /** Identifier of processor that created this event */
167 const unsigned short FrameTarget() const { return frameTarget; }
168 /** most significant word of frametime */
169 const unsigned int FrameTime1() const { return frameTime1; }
170 /** least significant word of frametime */
171 const unsigned int FrameTime2() const { return frameTime2; }
172 /** frame index */
173 const unsigned int FrameIndex() const { return frameIndex; }
174 /** Run number */
175 const unsigned int RunNumber() const { return runNumber; }
176
177 /** Type of PhysicsEvent */
178 const unsigned int EventType() const { return EventType_; }
179 /** Trigger nr. since start of run */
180 const unsigned int TriggerCounter() const { return TriggerCounter_; }
181 /** time of first hit in event */
182 const double MinT() const { return MinT_; }
183 /** time of last hit in event */
184 const double MaxT() const { return MaxT_; }
185 /** amplitude of largest hit in event */
186 const float MaxA() const { return MaxA_; }
187 /** sum of all amplitudes */
188 const float TotA() const { return TotA_; }
189
190 /** Triggered hits */
192 /** SPE hits */
193 const std::vector<SPE_Hit>& SPE_Hits() const { return SPEHits_; }
194 /** Waveform hits */
195 const std::vector<AWF_Hit>& AWF_Hits() const { return AWFHits_; }
196 /** Dynode hits */
197 const std::vector<DWF_Hit>& DWF_Hits() const { return DWFHits_; }
198
199 /**
200 * Template vector<T>::iterator
201 */
202 template<class T> class const_iterator : public std::vector<T>::const_iterator {
203 public:
207
208 const_iterator(const typename std::vector<T>::const_iterator& i) :
210 {}
211
212 const_iterator& operator=(const typename std::vector<T>::const_iterator& i)
213 {
214 (typename std::vector<T>::const_iterator&) *this = i;
215 return *this;
216 }
217 };
218
219 /** template size method for nested vector */
220 template<class T> size_t size() const;
221
222 /** template begin const_iterator for nested vector */
223 template<class T> typename std::vector<T>::const_iterator begin() const;
224
225 /** template end const_iterator for nested vector */
226 template<class T> typename std::vector<T>::const_iterator end() const;
227
228 /**
229 * Print ASCII.
230 *
231 * \param out output stream
232 * \param object physics event
233 * \return output stream
234 */
235 friend std::ostream& operator<<(std::ostream& out, const PhysicsEvent& object)
236 {
237 using namespace std;
238
239 out << " +-------------------------------------+ " << endl;
240 out << " | EventType_ " << object.EventType_ << endl;
241 out << " | RunNumber_ " << object.RunNumber() << endl;
242 out << " | TriggerCounter_ " << object.TriggerCounter_ << endl;
243 out << " | FrameTarget_ " << object.FrameTarget() << endl;
244 out << " | FrameTime1_ " << object.FrameTime1() << endl;
245 out << " | FrameTime2_ " << object.FrameTime2() << endl;
246 out << " | FrameIndex_ " << object.FrameIndex() << endl;
247 out << setprecision(11) << setw(14)
248 << " | MinT_ " << object.MinT_ << endl;
249 out << setprecision(11) << setw(14)
250 << " | MaxT_ " << object.MaxT_ << endl;
251 out << setprecision( 6) << setw(10)
252 << " | MaxA_ " << object.MaxA_ << endl;
253 out << setprecision( 6) << setw(10)
254 << " | TotA_ " << object.TotA_ << endl;
255 out << " +-------------------------------------+ " << endl;
256 out << " | Triggered hits " << object.TriggeredSPEHits_.size() << endl;
257 out << " | SPE hits " << object.SPEHits_.size() << endl;
258 out << " | AWF hits " << object.AWFHits_.size() << endl;
259 out << " | DWF hits " << object.DWFHits_.size() << endl;
260 out << " +-------------------------------------+ " << endl;
261 out << endl;
262
263 return out;
264 }
265
267};
268
269
270/** specialisation for TriggeredSPE_Hit size */
271template<> inline size_t
273{
274 return TriggeredSPEHits_.size();
275}
276
277/** specialisation for SPE_Hit size */
278template<> inline size_t
280{
281 return SPEHits_.size();
282}
283
284/** specialisation for AWF_Hit size */
285template<> inline size_t
287{
288 return AWFHits_.size();
289}
290
291/** specialisation for DWF_Hit size */
292template<> inline size_t
294{
295 return DWFHits_.size();
296}
297
298/** specialisation for TriggeredSPE_Hit iterator begin */
299template<> inline std::vector<TriggeredSPE_Hit>::const_iterator
301{
302 return TriggeredSPEHits_.begin();
303}
304
305/** specialisation for TriggeredSPE_Hit iterator end */
306template<> inline std::vector<TriggeredSPE_Hit>::const_iterator
308{
309 return TriggeredSPEHits_.end();
310}
311
312/** specialisation for SPE_Hit iterator begin */
313template<> inline std::vector<SPE_Hit>::const_iterator
315{
316 return SPEHits_.begin();
317}
318
319/** specialisation for SPE_Hit iterator end */
320template<> inline std::vector<SPE_Hit>::const_iterator
322{
323 return SPEHits_.end();
324}
325
326/** specialisation for AWF_Hit iterator begin */
327template<> inline std::vector<AWF_Hit>::const_iterator
329{
330 return AWFHits_.begin();
331}
332
333/** specialisation for AWF_Hit iterator end */
334template<> inline std::vector<AWF_Hit>::const_iterator
336{
337 return AWFHits_.end();
338}
339
340/** specialisation for DWF_Hit iterator begin */
341template<> inline std::vector<DWF_Hit>::const_iterator
343{
344 return DWFHits_.begin();
345}
346
347/** specialisation for DWF_Hit iterator end */
348template<> inline std::vector<DWF_Hit>::const_iterator
350{
351 return DWFHits_.end();
352}
353
354
355/**
356 * equal operator for SPE hit.
357 *
358 * \param first SPE hit
359 * \param second SPE hit
360 * \return true if first equals second; else false
361 */
362inline bool operator==(const SPE_Hit& first, const SPE_Hit& second)
363{
364 return (first.lcm_id == second.lcm_id &&
365 first.ars_id == second.ars_id &&
366 first.timestamp == second.timestamp &&
367 first.tvc == second.tvc &&
368 first.avc == second.avc);
369}
370
371/**
372 * not-equal operator for SPE hit.
373 *
374 * \param first SPE hit
375 * \param second SPE hit
376 * \return true if first not equals second; else false
377 */
378inline bool operator!=(const SPE_Hit& first, const SPE_Hit& second)
379{
380 return (first.lcm_id != second.lcm_id ||
381 first.ars_id != second.ars_id ||
382 first.timestamp != second.timestamp ||
383 first.tvc != second.tvc ||
384 first.avc != second.avc);
385}
386
387
388/**
389 * equal operator for physics event.
390 *
391 * \param first physics event
392 * \param second physics event
393 * \return true if first equals second; else false
394 */
395inline bool operator==(const PhysicsEvent& first, const PhysicsEvent& second)
396{
397 return (first.MinT() < second.MaxT() &&
398 first.MaxT() > second.MinT());
399}
400
401/**
402 * not-equal operator for physics event.
403 *
404 * \param first physics event
405 * \param second physics event
406 * \return true if first not equals second; else false
407 */
408inline bool operator!=(const PhysicsEvent& first, const PhysicsEvent& second)
409{
410 return (first.MinT() > second.MaxT() ||
411 first.MaxT() < second.MinT());
412}
413
414/**
415 * Comparator for physics event; earliest event first.
416 *
417 * \param first physics event
418 * \param second physics event
419 * \return true if first earlier than second; else false
420 */
421inline bool operator<(const PhysicsEvent& first, const PhysicsEvent& second)
422{
423 return first.MinT() < second.MinT();
424}
425
426/**
427 * Specialisation of STL distance.
428 *
429 * \param first first position
430 * \param second last position
431 * \return distance
432 */
433template<class T>
434inline typename std::vector<T>::difference_type distance(typename std::vector<T>::const_iterator first,
435 typename PhysicsEvent::const_iterator<T> second)
436{
437 return std::distance(first, (typename std::vector<T>::const_iterator&) second);
438}
439
440#endif
#define ClassImpT(name, template)
Definition JROOT_t.hh:38
#define ClassDefT2(name, template)
Definition JROOT_t.hh:35
bool operator<(const PhysicsEvent &first, const PhysicsEvent &second)
Comparator for physics event; earliest event first.
bool operator==(const SPE_Hit &first, const SPE_Hit &second)
equal operator for SPE hit.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
bool operator!=(const SPE_Hit &first, const SPE_Hit &second)
not-equal operator for SPE hit.
Template hit.
ClassDef(ARS_Hit, 2)
unsigned short lcm_id
LCM identifier.
unsigned char ars_id
ARS identifier.
ARS_Hit()
Default constructor.
friend std::ostream & operator<<(std::ostream &out, const ARS_Hit &object)
print ASCII
AWF hit.
AWF_Hit()
Default constructor.
ClassDef(AWF_Hit, 2)
ARS Anode waveform.
Definition Ars.hh:310
DWF hit.
ClassDef(DWF_Hit, 2)
DWF_Hit()
Default constructor.
ARS Dynode waveform.
Definition Ars.hh:327
Interface for event classes.
unsigned int frameTime2
Frame 'time stamp' in units of 50ns (LSW)
unsigned int runNumber
Run-number as given by the RunControl.
unsigned int frameIndex
Number of frames since start of the run.
unsigned short frameTarget
Unique code representing the shore station for this frame.
unsigned int frameTime1
Frame 'time stamp' in units of 50ns (MSW)
Template vector<T>::iterator.
const_iterator(const typename std::vector< T >::const_iterator &i)
const_iterator & operator=(const typename std::vector< T >::const_iterator &i)
Physics event.
const unsigned int TriggerCounter() const
Trigger nr.
const unsigned int EventType() const
Type of PhysicsEvent.
friend std::ostream & operator<<(std::ostream &out, const PhysicsEvent &object)
Print ASCII.
unsigned int EventType_
std::vector< SPE_Hit > SPEHits_
ClassDef(PhysicsEvent, 2)
std::vector< T >::const_iterator end() const
template end const_iterator for nested vector
std::vector< DWF_Hit > DWFHits_
std::vector< T >::const_iterator begin() const
template begin const_iterator for nested vector
const unsigned int FrameTime2() const
least significant word of frametime
const float TotA() const
sum of all amplitudes
const std::vector< TriggeredSPE_Hit > & TriggeredSPEHits() const
Triggered hits.
size_t size() const
template size method for nested vector
const unsigned int FrameTime1() const
most significant word of frametime
unsigned int TriggerCounter_
virtual ~PhysicsEvent()
Virtual destructor.
const std::vector< SPE_Hit > & SPE_Hits() const
SPE hits.
const double MinT() const
time of first hit in event
const unsigned int FrameIndex() const
frame index
const float MaxA() const
amplitude of largest hit in event
const unsigned int RunNumber() const
Run number.
const double MaxT() const
time of last hit in event
const unsigned short FrameTarget() const
Identifier of processor that created this event.
PhysicsEvent()
Default constructor.
const std::vector< AWF_Hit > & AWF_Hits() const
Waveform hits.
std::vector< AWF_Hit > AWFHits_
std::vector< TriggeredSPE_Hit > TriggeredSPEHits_
const std::vector< DWF_Hit > & DWF_Hits() const
Dynode hits.
SPE hit.
ClassDef(SPE_Hit, 2)
SPE_Hit()
Default constructor.
ARS SPE.
Definition Ars.hh:139
unsigned char avc
ARS Analogue to Voltage Convertor.
Definition Ars.hh:142
unsigned char tvc
ARS Time to Voltage Convertor.
Definition Ars.hh:145
unsigned int timestamp
ARS timestamp (24 bits)
Definition Ars.hh:44
Triggered SPE hit.
ClassDef(TriggeredSPE_Hit, 2)
TriggeredSPE_Hit()
Default constructor.