Jpp
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  overlays(0)
44  {}
45 
46 
47  /**
48  * Constructor.
49  *
50  * The triggered hits will be sorted to ensure proper functioning of method JEvent::merge and class JEventOverlap.
51  *
52  * \param chronometer DAQ chronometer
53  * \param __begin begin of hit list
54  * \param __end end of hit list
55  * \param bit trigger bit
56  */
57  template<class T>
58  JEvent(const JDAQChronometer& chronometer,
59  T __begin,
60  T __end,
61  const unsigned int bit) :
62  JDAQChronometer(chronometer),
64  overlays(0)
65  {
66  for (T i = __begin; i != __end; ++i) {
67  push_back(JTriggeredHit(*i, this->getTriggerMask()));
68  }
69 
70  std::sort(this->begin(), this->end());
71  }
72 
73 
74  /**
75  * Constructor.
76  *
77  * The triggered hits will be sorted to ensure proper functioning of method JEvent::merge and class JEventOverlap.
78  *
79  * \param chronometer DAQ chronometer
80  * \param root root hit
81  * \param __begin begin of hit list
82  * \param __end end of hit list
83  * \param bit trigger bit
84  */
85  template<class JHit_t, class T>
86  JEvent(const JDAQChronometer& chronometer,
87  const JHit_t& root,
88  T __begin,
89  T __end,
90  const unsigned int bit) :
91  JDAQChronometer(chronometer),
93  overlays(0)
94  {
95  push_back(JTriggeredHit(root, this->getTriggerMask()));
96 
97  for (T i = __begin; i != __end; ++i) {
98  push_back(JTriggeredHit(*i, this->getTriggerMask()));
99  }
100 
101  std::sort(this->begin(), this->end());
102  }
103 
104 
105  /**
106  * Constructor.
107  *
108  * The triggered hits will be sorted to ensure proper functioning of method JEvent::merge and class JEventOverlap.
109  *
110  * \param chronometer DAQ chronometer
111  * \param root root hit
112  * \param bit trigger bit
113  */
114  template<class JHit_t>
115  JEvent(const JDAQChronometer& chronometer,
116  const JHit_t& root,
117  const unsigned int bit) :
118  JDAQChronometer(chronometer),
120  std::vector<JTriggeredHit>(),
121  overlays(0)
122  {
123  push_back(JTriggeredHit(root, this->getTriggerMask()));
124  }
125 
126 
127  /**
128  * Merge event.
129  *
130  * \param event event
131  */
132  void merge(const JEvent& event)
133  {
134  using namespace std;
135 
137 
138  const_iterator __hit1 = this ->begin();
139  const_iterator __end1 = this ->end();
140 
141  const_iterator __hit2 = event.begin();
142  const_iterator __end2 = event.end();
143 
144  buffer.resize(this->size() + event.size());
145 
146  iterator out = buffer.begin();
147 
148  while (__hit1 != __end1 && __hit2 != __end2) {
149 
150  if (*__hit1 < *__hit2) {
151 
152  *out = *__hit1;
153  ++__hit1;
154 
155  } else if (*__hit2 < *__hit1) {
156 
157  *out = *__hit2;
158  ++__hit2;
159 
160  } else {
161 
162  *out = *__hit1;
163 
164  out->addTriggerMask(*__hit2);
165 
166  ++__hit1;
167  ++__hit2;
168  }
169 
170  ++out;
171  }
172 
173  // append remaining hits from either set
174 
175  out = copy(__hit1, __end1, out);
176  out = copy(__hit2, __end2, out);
177 
178  buffer.resize(distance(buffer.begin(), out));
179 
180  this->swap(buffer);
181 
182  ++overlays;
183  }
184 
185 
186  /**
187  * Get number of overlays.
188  *
189  * \return number of overlays
190  */
191  unsigned int getOverlays() const
192  {
193  return overlays;
194  }
195 
196 
197  protected:
198  unsigned int overlays;
199 
200  private:
202  };
203 
204 
205  /**
206  * Less than operator for events.
207  *
208  * The less than operator is applied to the first hit in the events.
209  *
210  * \param first first event
211  * \param second second event
212  * \return true if first event earliear than second; else false
213  */
214  inline bool operator<(const JEvent& first, const JEvent& second)
215  {
216  if (first.empty() || second.empty()) {
217  throw JTriggerException("Comparison with empty event(s).");
218  }
219 
220  return first.begin()->getT() < second.begin()->getT();
221  }
222 }
223 
224 #endif
std::iterator
Definition: JSTDTypes.hh:18
JTRIGGER::JEvent::merge
void merge(const JEvent &event)
Merge event.
Definition: JEvent.hh:132
JTRIGGER::JTriggeredHit
Data structure for triggered hit.
Definition: JTriggeredHit.hh:27
JTriggerException.hh
JTRIGGER::JEvent::buffer
std::vector< JTriggeredHit > buffer
Definition: JEvent.hh:201
JTRIGGER::JEvent::JEvent
JEvent(const JDAQChronometer &chronometer, T __begin, T __end, const unsigned int bit)
Constructor.
Definition: JEvent.hh:58
JTRIGGER::JEvent
Triggered event.
Definition: JEvent.hh:31
std::vector
Definition: JSTDTypes.hh:12
JTRIGGER::JEvent::getOverlays
unsigned int getOverlays() const
Get number of overlays.
Definition: JEvent.hh:191
distance
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Definition: PhysicsEvent.hh:434
KM3NETDAQ::JDAQTriggerMask::getTriggerMask
JTriggerMask_t getTriggerMask() const
Get trigger mask.
Definition: JDAQTriggerMask.hh:105
KM3NETDAQ::NUMBER_OF_TRIGGER_BITS
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
Definition: JDAQTriggerMask.hh:31
JAANET::copy
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:152
JDAQChronometer.hh
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
KM3NETDAQ::JDAQTriggerMask::addTriggerMask
JDAQTriggerMask & addTriggerMask(const JDAQTriggerMask &mask)
Add trigger bit pattern.
Definition: JDAQTriggerMask.hh:139
JTRIGGER::JTriggerException
General exception.
Definition: JTriggerException.hh:23
JTriggeredHit.hh
JTRIGGER::JEvent::JEvent
JEvent(const JDAQChronometer &chronometer, const JHit_t &root, T __begin, T __end, const unsigned int bit)
Constructor.
Definition: JEvent.hh:86
JTRIGGER::JEvent::overlays
unsigned int overlays
Definition: JEvent.hh:198
KM3NETDAQ::getTriggerMask
JTriggerMask_t getTriggerMask(const unsigned int bit)
Convert trigger bit to trigger mask.
Definition: JDAQTriggerMask.hh:40
JTRIGGER::JEvent::JEvent
JEvent()
Default constructor.
Definition: JEvent.hh:40
JDAQTriggerMask.hh
KM3NETDAQ::JDAQTriggerMask
Auxiliary class for trigger mask.
Definition: JDAQTriggerMask.hh:52
std
Definition: jaanetDictionary.h:36
KM3NETDAQ
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
JTRIGGER::JEvent::JEvent
JEvent(const JDAQChronometer &chronometer, const JHit_t &root, const unsigned int bit)
Constructor.
Definition: JEvent.hh:115
JTRIGGER
Checksum.
Definition: JSupport/JSupport.hh:35
JTRIGGER::operator<
bool operator<(const JEvent &first, const JEvent &second)
Less than operator for events.
Definition: JEvent.hh:214
KM3NETDAQ::JDAQChronometer
DAQ chronometer.
Definition: JDAQChronometer.hh:26