Jpp
JBuildL1.hh
Go to the documentation of this file.
1 #ifndef __JTRIGGER__JBUILDL1__
2 #define __JTRIGGER__JBUILDL1__
3 
4 #include <vector>
5 #include <iterator>
6 
11 #include "JTrigger/JHit.hh"
12 #include "JTrigger/JHitL0.hh"
13 #include "JTrigger/JHitL1.hh"
14 #include "JTrigger/JHitR1.hh"
15 #include "JTrigger/JBuildHelper.hh"
16 #include "JTrigger/JBuild.hh"
18 #include "JDAQ/JDAQSuperFrame.hh"
19 #include "JDetector/JModule.hh"
20 
21 
22 /**
23  * \author mdejong
24  */
25 
26 namespace JTRIGGER {}
27 namespace JPP { using namespace JTRIGGER; }
28 
29 namespace JTRIGGER {
30 
32  using JDETECTOR::JModule;
33 
34  /**
35  * Auxiliary data structure for L1 build parameters.
36  */
38  {
39  /**
40  * Constructor.
41  *
42  * \param Tmax_ns maximal time difference between consecutive hits [ns]
43  * \param combine combine multiple L1 hits within given time window
44  */
45  JBuildL1Parameters(const double Tmax_ns,
46  const bool combine) :
47  TMax_ns(Tmax_ns),
49  {}
50 
51 
52  /**
53  * Constructor.
54  *
55  * \param parameters trigger parameters
56  */
58  TMax_ns(parameters.TMaxLocal_ns),
59  combine(parameters.combineL1)
60  {}
61 
62 
63  /**
64  * Constructor.
65  *
66  * \param parameters L2 parameters
67  */
68  JBuildL1Parameters(const JL2Parameters& parameters) :
69  TMax_ns(parameters.TMaxLocal_ns),
70  combine(true)
71  {}
72 
73 
74  double TMax_ns;
75  bool combine;
76  };
77 
78 
79  /**
80  * Template L1 hit builder.
81  *
82  * An L1 hit is a local coincidence between two hits within the same optical module.
83  */
84  template<class JHit_t>
85  class JBuildL1 :
86  public JBuildL1Parameters,
87  public JBuildHelper< JBuildL1<JHit_t> >,
88  public JBuild<JHit_t>,
89  public JHitToolkit<JHit_t>
90  {
91  public:
92 
93  using JBuildHelper< JBuildL1<JHit_t> >::operator();
94 
95  typedef JHit_t value_type;
96 
97 
98  /**
99  * Constructor.
100  *
101  * \param parameters build L1 parameters
102  */
103  JBuildL1(const JBuildL1Parameters& parameters) :
104  JBuildL1Parameters(parameters)
105  {}
106 
107 
108  /**
109  * Build hits from calibrated data.
110  *
111  * The output data are time sorted.
112  *
113  * \param input input L0 data
114  * \param out output L1 data
115  */
116  template<class JOutput_t>
117  void operator()(const JSuperFrame2D<JHit_t>& input, JOutput_t out) const
118  {
119  (*this)(input.begin(), input.end(), out);
120  }
121 
122 
123  /**
124  * Build hits from set of frames with calibrated data.
125  *
126  * The output data are time sorted.
127  *
128  * \param __begin begin of input L0 data
129  * \param __end end of input L0 data
130  * \param out output L1 data
131  */
132  template<class JOutput_t>
135  JOutput_t out) const
136  {
137  (*this)(JSuperFrame1D<JHit_t>::multiplex(__begin, __end), out);
138  }
139 
140 
141  /**
142  * Build hits from calibrated data.
143  *
144  * The output data are time sorted.
145  *
146  * \param input input L0 data
147  * \param out output L1 data
148  */
149  template<class JOutput_t>
150  void operator()(const JSuperFrame1D<JHit_t>& input, JOutput_t out) const
151  {
152  int n = input.size() - 1; // remove end marker
153 
154  for (typename JSuperFrame1D<JHit_t>::const_iterator q = input.begin(), p = q++; n != 0; ++q, --n) {
155 
156  if (this->getTimeDifference(*p,*q) <= TMax_ns) {
157 
158  *out = *p;
159  ++out;
160 
161  if (combine) {
162  for (++q, --n; this->getTimeDifference(*p,*q) <= TMax_ns; ++q, --n) {}
163  }
164  }
165 
166  p = q;
167  }
168  }
169 
170 
171  /**
172  * Build hits from DAQ data.
173  *
174  * The time calibration is applied.
175  * The output data are time sorted.
176  *
177  * \param input DAQ super frame
178  * \param module module
179  * \param out output L1 data
180  */
181  template<class JOutput_t>
182  void operator()(const JDAQSuperFrame& input,
183  const JModule& module,
184  JOutput_t out) const
185  {
186  if (!input.empty()) {
187  (*this)(this->demultiplex(input, module), out);
188  }
189  }
190  };
191 
192 
193  /**
194  * Template specialisation of L1 builder for JHitL1 data type.
195  */
196  template<>
197  class JBuildL1<JHitL1> :
198  public JBuildL1<JHit>,
199  public JBuildHelper< JBuildL1<JHitL1> >
200  {
201  public:
202 
203  using JBuildHelper< JBuildL1<JHitL1> >::operator();
204 
206 
207 
208  /**
209  * Constructor.
210  *
211  * \param parameters build L1 parameters
212  */
213  JBuildL1(const JBuildL1Parameters& parameters) :
214  JBuildL1<JHit>(parameters)
215  {}
216 
217 
218  /**
219  * Build hits from calibrated data.
220  *
221  * The output data are time sorted.
222  *
223  * \param input input L0 data
224  * \param out output L1 data
225  */
226  template<class JOutput_t>
227  void operator()(const JSuperFrame2D<JHit>& input, JOutput_t out) const
228  {
229  const JSuperFrameClone2D<JHit> clone(input);
230 
231  buffer.clear();
232 
233  static_cast<const JBuildL1<JHit>&>(*this)(input, std::back_inserter(buffer));
234 
235  for (typename std::vector<JHit>::const_iterator p = buffer.begin(); p != buffer.end(); ++p) {
236 
237  JHitL1 hit(input.getModuleID());
238 
239  for (typename JSuperFrameClone2D<JHit>::const_iterator i = clone.begin(); i != clone.end(); ++i) {
240 
241  for (typename JSuperFrameClone2D<JHit>::value_type::const_iterator q = i->fast_forward(*p); this->getTimeDifference(*p,*q) <= TMax_ns; ++q) {
242 
243  hit.push_back(JHitL0(i->getPMTIdentifier(),
244  i->getAxis(),
245  *q));
246  }
247  }
248 
249  *out = hit.sort();
250  ++out;
251  }
252  }
253 
254 
255  /**
256  * Build hits from uncalibrated DAQ data.
257  *
258  * The time calibration is applied.
259  * The output data are time sorted.
260  *
261  * \param input DAQ super frame
262  * \param module module
263  * \param out output L1 data
264  */
265  template<class JOutput_t>
266  void operator()(const JDAQSuperFrame& input,
267  const JModule& module,
268  JOutput_t out) const
269  {
270  if (!input.empty()) {
271  (*this)(this->demultiplex(input, module), out);
272  }
273  }
274 
275  private:
277  };
278 
279 
280  /**
281  * Template specialisation of L1 builder for JHitR1 data type.
282  */
283  template<>
284  class JBuildL1<JHitR1> :
285  public JBuildL1<JHit>,
286  public JBuildHelper< JBuildL1<JHitR1> >
287  {
288  public:
289 
290  using JBuildHelper< JBuildL1<JHitR1> >::operator();
291 
293 
294 
295  /**
296  * Constructor.
297  *
298  * \param parameters build L1 parameters
299  */
300  JBuildL1(const JBuildL1Parameters& parameters) :
301  JBuildL1<JHit>(parameters)
302  {}
303 
304 
305  /**
306  * Build hits from calibrated data.
307  *
308  * The output data are time sorted.
309  *
310  * \param input input L0 data
311  * \param out output L1 data
312  */
313  template<class JOutput_t>
314  void operator()(const JSuperFrame2D<JHit>& input, JOutput_t out) const
315  {
316  const JSuperFrameClone2D<JHit> clone(input);
317 
318  buffer.clear();
319 
320  static_cast<const JBuildL1<JHit>&>(*this)(input, std::back_inserter(buffer));
321 
322  for (typename std::vector<JHit>::const_iterator p = buffer.begin(); p != buffer.end(); ++p) {
323 
324  JHitR1 hit(input.getModuleID(),
325  input.getPosition());
326 
327  clone.fast_forward(*p);
328 
329  for (typename JSuperFrameClone2D<JHit>::const_iterator i = clone.begin(); i != clone.end(); ++i) {
330 
331  if (i->getTimeDifference(*p) <= TMax_ns) {
332 
333  if (hit.getN() == 0)
334  hit.set(i->getJHit());
335  else
336  hit.add(i->getJHit());
337  }
338  }
339 
340  *out = hit;
341  ++out;
342  }
343  }
344 
345 
346  /**
347  * Build hits from uncalibrated DAQ data.
348  *
349  * The time calibration is applied.
350  * The output data are time sorted.
351  *
352  * \param input DAQ super frame
353  * \param module module
354  * \param out output L1 data
355  */
356  template<class JOutput_t>
357  void operator()(const JDAQSuperFrame& input,
358  const JModule& module,
359  JOutput_t out) const
360  {
361  if (!input.empty()) {
362  (*this)(this->demultiplex(input, module), out);
363  }
364  }
365 
366  private:
368  };
369 }
370 
371 #endif
JTRIGGER::JSuperFrame1D::multiplex
static JSuperFrame1D< JElement_t, JAllocator_t > multiplex
Multiplexer.
Definition: JSuperFrame1D.hh:136
JModule.hh
JTRIGGER::JHitToolkit
Template definition of hit toolkit.
Definition: JHitToolkit.hh:60
JTRIGGER::JBuildL1< JHitL1 >::value_type
JHitL1 value_type
Definition: JBuildL1.hh:205
JTRIGGER::JSuperFrameClone2D::fast_forward
void fast_forward(argument_type hit) const
Increment the internal iterators until the lower bounds corresponding to the time of the given hit.
Definition: JSuperFrameClone2D.hh:94
JTriggerParameters.hh
JTRIGGER::JBuildL1< JHitL1 >::operator()
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from uncalibrated DAQ data.
Definition: JBuildL1.hh:266
JSuperFrame2D.hh
JTRIGGER::JL2Parameters
Data structure for L2 parameters.
Definition: JTriggerParameters.hh:33
JTRIGGER::JBuildL1< JHitR1 >::value_type
JHitR1 value_type
Definition: JBuildL1.hh:292
JTRIGGER::JBuildL1::JBuildL1
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition: JBuildL1.hh:103
JTRIGGER::JBuildL1< JHitL1 >::buffer
std::vector< JHit > buffer
Definition: JBuildL1.hh:276
JTRIGGER::JTriggerParameters
Data structure for all trigger parameters.
Definition: JTriggerParameters.hh:116
JTRIGGER::JBuildL1Parameters::JBuildL1Parameters
JBuildL1Parameters(const JTriggerParameters &parameters)
Constructor.
Definition: JBuildL1.hh:57
JTRIGGER::JBuildL1::operator()
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from DAQ data.
Definition: JBuildL1.hh:182
JTRIGGER::JBuildL1
Template L1 hit builder.
Definition: JBuildL1.hh:85
JTRIGGER::JBuildL1< JHitR1 >::buffer
std::vector< JHit > buffer
Definition: JBuildL1.hh:367
JTRIGGER::JSuperFrame1D
1-dimensional frame with time calibrated data from one optical module.
Definition: JSuperFrame1D.hh:35
JTOOLS::n
const int n
Definition: JPolint.hh:628
JSuperFrameClone2D.hh
std::vector
Definition: JSTDTypes.hh:12
JTRIGGER::JBuildL1Parameters::JBuildL1Parameters
JBuildL1Parameters(const double Tmax_ns, const bool combine)
Constructor.
Definition: JBuildL1.hh:45
KM3NETDAQ::JDAQFrame::empty
bool empty() const
Definition: JDAQFrame.hh:155
JTRIGGER::JBuild::demultiplex
JSuperFrame2D< JHit_t > & demultiplex(const JDAQSuperFrame &input, const JModule &module) const
Demultiplex and pre-process DAQ super frame.
Definition: JBuild.hh:66
JTRIGGER::JClone< JFrame< JElement_t, JAllocator_t > >::const_iterator
JFrame< JElement_t, JAllocator_t > ::const_iterator const_iterator
Definition: JClone.hh:45
JTRIGGER::JSuperFrameClone2D
Clone of JSuperFrame2D.
Definition: JSuperFrameClone2D.hh:26
JTRIGGER::JSuperFrame2D::const_iterator
std::vector< value_type >::const_iterator const_iterator
Definition: JSuperFrame2D.hh:51
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JTRIGGER::JHitL1::sort
const JHitL1 & sort()
Sort L0 hits.
Definition: JHitL1.hh:97
JTRIGGER::JBuildL1Parameters
Auxiliary data structure for L1 build parameters.
Definition: JBuildL1.hh:37
JTRIGGER::JBuildL1::operator()
void operator()(const JSuperFrame2D< JHit_t > &input, JOutput_t out) const
Build hits from calibrated data.
Definition: JBuildL1.hh:117
JTRIGGER::JBuildL1< JHitR1 >::JBuildL1
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition: JBuildL1.hh:300
JHitToolkit.hh
JTRIGGER::JBuildL1::operator()
void operator()(const JSuperFrame1D< JHit_t > &input, JOutput_t out) const
Build hits from calibrated data.
Definition: JBuildL1.hh:150
JTRIGGER::JBuildL1< JHitL1 >::JBuildL1
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition: JBuildL1.hh:213
JHit.hh
JDETECTOR::JModule
Data structure for a composite optical module.
Definition: JModule.hh:49
JTRIGGER::JBuildL1Parameters::combine
bool combine
Definition: JBuildL1.hh:75
JHitR1.hh
JTRIGGER::JBuildHelper
Auxiliary class to extend hit building functionality to all DAQ data types.
Definition: JBuildHelper.hh:44
JBuild.hh
JHitL1.hh
JTRIGGER::JHitR1
Reduced data structure for L1 hit.
Definition: JHitR1.hh:31
JTRIGGER::JBuild
Auxiliary base class for hit building.
Definition: JBuild.hh:31
JTRIGGER::JBuildL1< JHitR1 >::operator()
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from uncalibrated DAQ data.
Definition: JBuildL1.hh:357
JTRIGGER::JHitL0
Data structure for L0 hit.
Definition: JHitL0.hh:27
JSuperFrame1D.hh
JTRIGGER::JBuildL1::value_type
JHit_t value_type
Definition: JBuildL1.hh:95
JTRIGGER::JSuperFrameClone2D::const_iterator
std::vector< value_type >::const_iterator const_iterator
Definition: JSuperFrameClone2D.hh:36
JDAQSuperFrame.hh
JTRIGGER::JHit
Hit data structure.
Definition: JHit.hh:22
KM3NETDAQ::JDAQSuperFrame
Data frame of one optical module.
Definition: JDAQSuperFrame.hh:27
JTRIGGER::JBuildL1Parameters::JBuildL1Parameters
JBuildL1Parameters(const JL2Parameters &parameters)
Constructor.
Definition: JBuildL1.hh:68
JTRIGGER::JBuildL1::operator()
void operator()(typename JSuperFrame2D< JHit_t >::const_iterator __begin, typename JSuperFrame2D< JHit_t >::const_iterator __end, JOutput_t out) const
Build hits from set of frames with calibrated data.
Definition: JBuildL1.hh:133
JTRIGGER
Checksum.
Definition: JSupport/JSupport.hh:35
JHitL0.hh
JTRIGGER::JSuperFrame2D
2-dimensional frame with time calibrated data from one optical module.
Definition: JSuperFrame2D.hh:41
JTRIGGER::JBuildL1Parameters::TMax_ns
double TMax_ns
Definition: JBuildL1.hh:74
JTRIGGER::JHitL1
Data structure for L1 hit.
Definition: JHitL1.hh:34
JTRIGGER::JBuildL1< JHitR1 >::operator()
void operator()(const JSuperFrame2D< JHit > &input, JOutput_t out) const
Build hits from calibrated data.
Definition: JBuildL1.hh:314
JBuildHelper.hh
JTRIGGER::JBuildL1< JHitL1 >::operator()
void operator()(const JSuperFrame2D< JHit > &input, JOutput_t out) const
Build hits from calibrated data.
Definition: JBuildL1.hh:227