Jpp  16.0.2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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  */
20 template<class T>
21 class ARS_Hit : public T {
22 public:
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  */
33  ARS_Hit() :
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 
56  ClassDef(ARS_Hit, 2);
57 };
58 
61 
62 
63 /**
64  * SPE hit
65  */
66 class SPE_Hit : public ARS_Hit<SPE_Item> {
67 public:
68  /**
69  * Default constructor.
70  */
71  SPE_Hit() :
72  ARS_Hit<SPE_Item>()
73  {}
74 
75  ClassDef(SPE_Hit, 2);
76 };
77 
78 
79 /**
80  * AWF hit
81  */
82 class AWF_Hit : public ARS_Hit<AWF_Item> {
83 public:
84  /**
85  * Default constructor.
86  */
87  AWF_Hit() :
88  ARS_Hit<AWF_Item>()
89  {}
90 
91  ClassDef(AWF_Hit, 2);
92 };
93 
94 
95 /**
96  * DWF hit
97  */
98 class DWF_Hit : public ARS_Hit<DWF_Item> {
99 public:
100  /**
101  * Default constructor.
102  */
104  ARS_Hit<DWF_Item>()
105  {}
106 
107  ClassDef(DWF_Hit, 2);
108 };
109 
110 
111 /**
112  * Triggered SPE hit
113  */
114 class TriggeredSPE_Hit : public SPE_Hit {
115 public:
116  /**
117  * Default constructor.
118  */
120  SPE_Hit()
121  {}
122 
124 };
125 
126 
127 /**
128  * Physics event
129  */
131  public EventPreamble
132 {
133 protected:
134  unsigned int EventType_;
135  unsigned int TriggerCounter_;
136  double MinT_;
137  double MaxT_;
138  float MaxA_;
139  float TotA_;
140 
145 
146 public:
147  /**
148  * Default constructor.
149  */
151  EventPreamble(),
152  EventType_(0),
153  TriggerCounter_(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  */
163  virtual ~PhysicsEvent()
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 */
191  const std::vector<TriggeredSPE_Hit>& TriggeredSPEHits() const { return TriggeredSPEHits_; }
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:
205  std::vector<T>::const_iterator()
206  {}
207 
209  std::vector<T>::const_iterator(i)
210  {}
211 
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 */
271 template<> inline size_t
272 PhysicsEvent::size<TriggeredSPE_Hit>() const
273 {
274  return TriggeredSPEHits_.size();
275 }
276 
277 /** specialisation for SPE_Hit size */
278 template<> inline size_t
279 PhysicsEvent::size<SPE_Hit>() const
280 {
281  return SPEHits_.size();
282 }
283 
284 /** specialisation for AWF_Hit size */
285 template<> inline size_t
286 PhysicsEvent::size<AWF_Hit>() const
287 {
288  return AWFHits_.size();
289 }
290 
291 /** specialisation for DWF_Hit size */
292 template<> inline size_t
293 PhysicsEvent::size<DWF_Hit>() const
294 {
295  return DWFHits_.size();
296 }
297 
298 /** specialisation for TriggeredSPE_Hit iterator begin */
300 PhysicsEvent::begin<TriggeredSPE_Hit>() const
301 {
302  return TriggeredSPEHits_.begin();
303 }
304 
305 /** specialisation for TriggeredSPE_Hit iterator end */
307 PhysicsEvent::end<TriggeredSPE_Hit>() const
308 {
309  return TriggeredSPEHits_.end();
310 }
311 
312 /** specialisation for SPE_Hit iterator begin */
313 template<> inline std::vector<SPE_Hit>::const_iterator
314 PhysicsEvent::begin<SPE_Hit>() const
315 {
316  return SPEHits_.begin();
317 }
318 
319 /** specialisation for SPE_Hit iterator end */
320 template<> inline std::vector<SPE_Hit>::const_iterator
321 PhysicsEvent::end<SPE_Hit>() const
322 {
323  return SPEHits_.end();
324 }
325 
326 /** specialisation for AWF_Hit iterator begin */
327 template<> inline std::vector<AWF_Hit>::const_iterator
328 PhysicsEvent::begin<AWF_Hit>() const
329 {
330  return AWFHits_.begin();
331 }
332 
333 /** specialisation for AWF_Hit iterator end */
334 template<> inline std::vector<AWF_Hit>::const_iterator
335 PhysicsEvent::end<AWF_Hit>() const
336 {
337  return AWFHits_.end();
338 }
339 
340 /** specialisation for DWF_Hit iterator begin */
341 template<> inline std::vector<DWF_Hit>::const_iterator
342 PhysicsEvent::begin<DWF_Hit>() const
343 {
344  return DWFHits_.begin();
345 }
346 
347 /** specialisation for DWF_Hit iterator end */
348 template<> inline std::vector<DWF_Hit>::const_iterator
349 PhysicsEvent::end<DWF_Hit>() const
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  */
362 inline 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  */
378 inline 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  */
395 inline 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  */
408 inline 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  */
421 inline 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  */
433 template<class T>
435  typename PhysicsEvent::const_iterator<T> second)
436 {
437  return std::distance(first, (typename std::vector<T>::const_iterator&) second);
438 }
439 
440 #endif
ARS_Hit()
Default constructor.
Definition: PhysicsEvent.hh:33
unsigned int EventType_
Interface for event classes.
virtual ~PhysicsEvent()
Virtual destructor.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
std::vector< DWF_Hit > DWFHits_
bool operator<(const Head &first, const Head &second)
Less than operator.
Definition: JHead.hh:1678
const unsigned int FrameIndex() const
frame index
const std::vector< SPE_Hit > & SPE_Hits() const
SPE hits.
ARS SPE.
Definition: Ars.hh:137
AWF hit.
Definition: PhysicsEvent.hh:82
const float TotA() const
sum of all amplitudes
PhysicsEvent()
Default constructor.
const float MaxA() const
amplitude of largest hit in event
std::vector< TriggeredSPE_Hit > TriggeredSPEHits_
unsigned char tvc
ARS Time to Voltage Convertor.
Definition: Ars.hh:145
std::vector< AWF_Hit > AWFHits_
#define ClassDefT2(name, template)
Definition: JRoot.hh:35
const_iterator(const typename std::vector< T >::const_iterator &i)
const std::vector< AWF_Hit > & AWF_Hits() const
Waveform hits.
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
DWF_Hit()
Default constructor.
ClassDef(ARS_Hit, 2)
const unsigned int TriggerCounter() const
Trigger nr.
bool operator==(Packet const &p, ID const &id)
unsigned char avc
ARS Analogue to Voltage Convertor.
Definition: Ars.hh:142
DWF hit.
Definition: PhysicsEvent.hh:98
SPE hit.
Definition: PhysicsEvent.hh:66
unsigned int TriggerCounter_
friend std::ostream & operator<<(std::ostream &out, const ARS_Hit &object)
print ASCII
Definition: PhysicsEvent.hh:45
do set_variable OUTPUT_DIRECTORY $WORKDIR T
std::vector< SPE_Hit > SPEHits_
Template hit.
Definition: PhysicsEvent.hh:21
unsigned int timestamp
ARS timestamp (24 bits)
Definition: Ars.hh:44
Triggered SPE hit.
const_iterator & operator=(const typename std::vector< T >::const_iterator &i)
const double MinT() const
time of first hit in event
AWF_Hit()
Default constructor.
Definition: PhysicsEvent.hh:87
#define ClassImpT(name, template)
Definition: JRoot.hh:38
Physics event.
friend std::ostream & operator<<(std::ostream &out, const PhysicsEvent &object)
Print ASCII.
const unsigned int EventType() const
Type of PhysicsEvent.
const unsigned int RunNumber() const
Run number.
const unsigned int FrameTime2() const
least significant word of frametime
TriggeredSPE_Hit()
Default constructor.
const std::vector< TriggeredSPE_Hit > & TriggeredSPEHits() const
Triggered hits.
unsigned short lcm_id
LCM identifier.
Definition: PhysicsEvent.hh:26
const unsigned int FrameTime1() const
most significant word of frametime
JNullType operator!=(JAnyType, JAnyType)
ARS Dynode waveform.
Definition: Ars.hh:325
Template vector&lt;T&gt;::iterator.
const unsigned short FrameTarget() const
Identifier of processor that created this event.
ARS Anode waveform.
Definition: Ars.hh:308
unsigned char ars_id
ARS identifier.
Definition: PhysicsEvent.hh:28
const std::vector< DWF_Hit > & DWF_Hits() const
Dynode hits.
const double MaxT() const
time of last hit in event
SPE_Hit()
Default constructor.
Definition: PhysicsEvent.hh:71