Jpp  18.3.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JTrigger/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 
12 
13 
14 /**
15  * \author mdejong
16  */
17 
18 namespace JTRIGGER {}
19 namespace JPP { using namespace JTRIGGER; }
20 
21 namespace JTRIGGER {
22 
27 
28 
29  /**
30  * Triggered event.
31  */
32  class JEvent :
33  public JDAQChronometer,
34  public JDAQTriggerMask,
35  public std::vector<JTriggeredHit>
36  {
37  public:
38  /**
39  * Default constructor.
40  */
41  JEvent() :
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  overlays(0)
66  {
67  for (T i = __begin; i != __end; ++i) {
68  push_back(JTriggeredHit(*i, this->getTriggerMask()));
69  }
70 
71  std::sort(this->begin(), this->end());
72  }
73 
74 
75  /**
76  * Constructor.
77  *
78  * The triggered hits will be sorted to ensure proper functioning of method JEvent::merge and class JEventOverlap.
79  *
80  * \param chronometer DAQ chronometer
81  * \param root root hit
82  * \param __begin begin of hit list
83  * \param __end end of hit list
84  * \param bit trigger bit
85  */
86  template<class JHit_t, class T>
87  JEvent(const JDAQChronometer& chronometer,
88  const JHit_t& root,
89  T __begin,
90  T __end,
91  const unsigned int bit) :
92  JDAQChronometer(chronometer),
93  JDAQTriggerMask(KM3NETDAQ::getTriggerMask(bit)),
94  overlays(0)
95  {
96  push_back(JTriggeredHit(root, this->getTriggerMask()));
97 
98  for (T i = __begin; i != __end; ++i) {
99  push_back(JTriggeredHit(*i, this->getTriggerMask()));
100  }
101 
102  std::sort(this->begin(), this->end());
103  }
104 
105 
106  /**
107  * Constructor.
108  *
109  * The triggered hits will be sorted to ensure proper functioning of method JEvent::merge and class JEventOverlap.
110  *
111  * \param chronometer DAQ chronometer
112  * \param root root hit
113  * \param bit trigger bit
114  */
115  template<class JHit_t>
116  JEvent(const JDAQChronometer& chronometer,
117  const JHit_t& root,
118  const unsigned int bit) :
119  JDAQChronometer(chronometer),
120  JDAQTriggerMask(KM3NETDAQ::getTriggerMask(bit)),
121  std::vector<JTriggeredHit>(),
122  overlays(0)
123  {
124  push_back(JTriggeredHit(root, this->getTriggerMask()));
125  }
126 
127 
128  /**
129  * Merge event.
130  *
131  * \param event event
132  */
133  void merge(const JEvent& event)
134  {
135  using namespace std;
136 
138 
139  const_iterator __hit1 = this ->begin();
140  const_iterator __end1 = this ->end();
141 
142  const_iterator __hit2 = event.begin();
143  const_iterator __end2 = event.end();
144 
145  buffer.resize(this->size() + event.size());
146 
147  iterator out = buffer.begin();
148 
149  while (__hit1 != __end1 && __hit2 != __end2) {
150 
151  if (*__hit1 < *__hit2) {
152 
153  *out = *__hit1;
154  ++__hit1;
155 
156  } else if (*__hit2 < *__hit1) {
157 
158  *out = *__hit2;
159  ++__hit2;
160 
161  } else {
162 
163  *out = *__hit1;
164 
165  out->addTriggerMask(*__hit2);
166 
167  ++__hit1;
168  ++__hit2;
169  }
170 
171  ++out;
172  }
173 
174  // append remaining hits from either set
175 
176  out = copy(__hit1, __end1, out);
177  out = copy(__hit2, __end2, out);
178 
179  buffer.resize(distance(buffer.begin(), out));
180 
181  this->swap(buffer);
182 
183  ++overlays;
184  }
185 
186 
187  /**
188  * Get number of overlays.
189  *
190  * \return number of overlays
191  */
192  unsigned int getOverlays() const
193  {
194  return overlays;
195  }
196 
197 
198  protected:
199  unsigned int overlays;
200 
201  private:
203  };
204 
205 
206  /**
207  * Less than operator for events.
208  *
209  * The less than operator is applied to the first hit in the events.
210  *
211  * \param first first event
212  * \param second second event
213  * \return true if first event earliear than second; else false
214  */
215  inline bool operator<(const JEvent& first, const JEvent& second)
216  {
217  if (first.empty() || second.empty()) {
218  throw JTriggerException("Comparison with empty event(s).");
219  }
220 
221  return first.begin()->getT() < second.begin()->getT();
222  }
223 }
224 
225 #endif
JEvent(const JDAQChronometer &chronometer, T __begin, T __end, const unsigned int bit)
Constructor.
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.
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 Head &first, const Head &second)
Less than operator.
Definition: JHead.hh:1814
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
unsigned int getOverlays() const
Get number of overlays.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
unsigned int overlays
JEvent(const JDAQChronometer &chronometer, const JHit_t &root, const unsigned int bit)
Constructor.
std::vector< JTriggeredHit > buffer
JEvent(const JDAQChronometer &chronometer, const JHit_t &root, T __begin, T __end, const unsigned int bit)
Constructor.
Auxiliary class to set-up Hit.
Definition: JSirene.hh:57
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:162
void merge(const JEvent &event)
Merge event.
JDAQTriggerMask & addTriggerMask(const JDAQTriggerMask &mask)
Add trigger bit pattern.
do JPlot2D f $WORKDIR canberra[${EMITTER}] root
Definition: JCanberra.sh:136
Triggered event.
JEvent()
Default constructor.