Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JEvent.hh
Go to the documentation of this file.
1 #ifndef __JTRIGGER__JEVENT__
2 #define __JTRIGGER__JEVENT__
3 
4 #include <vector>
5 #include <algorithm>
6 
11 
12 
13 /**
14  * \author mdejong
15  */
16 
17 namespace JTRIGGER {}
18 namespace JPP { using namespace JTRIGGER; }
19 
20 namespace JTRIGGER {
21 
26 
27 
28  /**
29  * Triggered event.
30  */
31  class JEvent :
32  public JDAQChronometer,
33  public JDAQTriggerMask,
34  public std::vector<JTriggeredHit>
35  {
36  public:
37  /**
38  * Default constructor.
39  */
40  JEvent() :
43  std::vector<JTriggeredHit>(),
44  overlays(0)
45  {}
46 
47 
48  /**
49  * Constructor.
50  *
51  * The triggered hits will be sorted to ensure proper functioning of method JEvent::merge and class JEventOverlap.
52  *
53  * \param chronometer DAQ chronometer
54  * \param __begin begin of hit list
55  * \param __end end of hit list
56  * \param bit trigger bit
57  */
58  template<class T>
59  JEvent(const JDAQChronometer& chronometer,
60  T __begin,
61  T __end,
62  const unsigned int bit) :
63  JDAQChronometer(chronometer),
64  JDAQTriggerMask(KM3NETDAQ::getTriggerMask(bit)),
65  std::vector<JTriggeredHit>(),
66  overlays(0)
67  {
68  for (T i = __begin; i != __end; ++i) {
69  push_back(JTriggeredHit(*i, this->getTriggerMask()));
70  }
71 
72  std::sort(this->begin(), this->end());
73  }
74 
75 
76  /**
77  * Constructor.
78  *
79  * The triggered hits will be sorted to ensure proper functioning of method JEvent::merge and class JEventOverlap.
80  *
81  * \param chronometer DAQ chronometer
82  * \param root root hit
83  * \param __begin begin of hit list
84  * \param __end end of hit list
85  * \param bit trigger bit
86  */
87  template<class JHit_t, class T>
88  JEvent(const JDAQChronometer& chronometer,
89  const JHit_t& root,
90  T __begin,
91  T __end,
92  const unsigned int bit) :
93  JDAQChronometer(chronometer),
94  JDAQTriggerMask(KM3NETDAQ::getTriggerMask(bit)),
95  std::vector<JTriggeredHit>(),
96  overlays(0)
97  {
98  push_back(JTriggeredHit(root, this->getTriggerMask()));
99 
100  for (T i = __begin; i != __end; ++i) {
101  push_back(JTriggeredHit(*i, this->getTriggerMask()));
102  }
103 
104  std::sort(this->begin(), this->end());
105  }
106 
107 
108  /**
109  * Merge event.
110  *
111  * \param event event
112  */
113  void merge(const JEvent& event)
114  {
115  using namespace std;
116 
118 
119  const_iterator __hit1 = this ->begin();
120  const_iterator __end1 = this ->end();
121 
122  const_iterator __hit2 = event.begin();
123  const_iterator __end2 = event.end();
124 
125  buffer.resize(this->size() + event.size());
126 
127  iterator out = buffer.begin();
128 
129  while (__hit1 != __end1 && __hit2 != __end2) {
130 
131  if (*__hit1 < *__hit2) {
132 
133  *out = *__hit1;
134  ++__hit1;
135 
136  } else if (*__hit2 < *__hit1) {
137 
138  *out = *__hit2;
139  ++__hit2;
140 
141  } else {
142 
143  *out = *__hit1;
144 
145  out->addTriggerMask(*__hit2);
146 
147  ++__hit1;
148  ++__hit2;
149  }
150 
151  ++out;
152  }
153 
154  // append remaining hits from either set
155 
156  out = copy(__hit1, __end1, out);
157  out = copy(__hit2, __end2, out);
158 
159  buffer.resize(distance(buffer.begin(), out));
160 
161  this->swap(buffer);
162 
163  ++overlays;
164  }
165 
166 
167  /**
168  * Get number of overlays.
169  *
170  * \return number of overlays
171  */
172  unsigned int getOverlays() const
173  {
174  return overlays;
175  }
176 
177 
178  protected:
179  unsigned int overlays;
180 
181  private:
183  };
184 
185 
186  /**
187  * Less than operator for events.
188  *
189  * The less than operator is applied to the first hit in the events.
190  *
191  * \param first first event
192  * \param second second event
193  * \return true if first event earliear than second; else false
194  */
195  inline bool operator<(const JEvent& first, const JEvent& second)
196  {
197  if (first.empty() || second.empty()) {
198  throw JTriggerException("Comparison with empty event(s).");
199  }
200 
201  return first.begin()->getT() < second.begin()->getT();
202  }
203 }
204 
205 #endif
JEvent(const JDAQChronometer &chronometer, T __begin, T __end, const unsigned int bit)
Constructor.
Definition: JEvent.hh:59
Data structure for triggered hit.
JTriggerMask_t getTriggerMask(const unsigned int bit)
Convert trigger bit to trigger mask.
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
JTriggerMask_t getTriggerMask() const
Get trigger mask.
Auxiliary class for trigger mask.
bool operator<(const Head &first, const Head &second)
Less than operator.
Definition: JHead.hh:899
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
unsigned int getOverlays() const
Get number of overlays.
Definition: JEvent.hh:172
unsigned int overlays
Definition: JEvent.hh:179
std::vector< JTriggeredHit > buffer
Definition: JEvent.hh:182
JEvent(const JDAQChronometer &chronometer, const JHit_t &root, T __begin, T __end, const unsigned int bit)
Constructor.
Definition: JEvent.hh:88
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:40
void merge(const JEvent &event)
Merge event.
Definition: JEvent.hh:113
JDAQTriggerMask & addTriggerMask(const JDAQTriggerMask &mask)
Add trigger bit pattern.
Triggered event.
Definition: JEvent.hh:31
JEvent()
Default constructor.
Definition: JEvent.hh:40