Jpp  test_elongated_shower_pde
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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"
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),
48  combine(combine)
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  */
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  */
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();
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  */
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  */
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  if (i->getT() < hit.getT()) {
340  hit.setPosition(i->getPosition());
341  }
342  }
343 
344  *out = hit;
345  ++out;
346  }
347  }
348 
349 
350  /**
351  * Build hits from uncalibrated DAQ data.
352  *
353  * The time calibration is applied.
354  * The output data are time sorted.
355  *
356  * \param input DAQ super frame
357  * \param module module
358  * \param out output L1 data
359  */
360  template<class JOutput_t>
361  void operator()(const JDAQSuperFrame& input,
362  const JModule& module,
363  JOutput_t out) const
364  {
365  if (!input.empty()) {
366  (*this)(this->demultiplex(input, module), out);
367  }
368  }
369 
370  private:
372  };
373 }
374 
375 #endif
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from uncalibrated DAQ data.
Definition: JBuildL1.hh:266
Data structure for all trigger parameters.
JFrame< JElement_t, JAllocator_t >::const_iterator const_iterator
Definition: JClone.hh:45
bool empty() const
Definition: JDAQFrame.hh:180
std::vector< value_type >::const_iterator const_iterator
Data structure for L1 hit.
Definition: JHitL1.hh:34
Data structure for a composite optical module.
Definition: JModule.hh:68
JBuildL1Parameters(const JTriggerParameters &parameters)
Constructor.
Definition: JBuildL1.hh:57
static JSuperFrame1D< JElement_t, JAllocator_t > multiplex
Multiplexer.
Auxiliary base class for hit building.
Definition: JBuild.hh:36
JBuildL1Parameters(const double Tmax_ns, const bool combine)
Constructor.
Definition: JBuildL1.hh:45
void operator()(const JSuperFrame1D< JHit_t > &input, JOutput_t out) const
Build hits from calibrated data.
Definition: JBuildL1.hh:150
void operator()(const JSuperFrame2D< JHit > &input, JOutput_t out) const
Build hits from calibrated data.
Definition: JBuildL1.hh:314
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
Hit data structure.
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition: JBuildL1.hh:213
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from DAQ data.
Definition: JBuildL1.hh:182
Clone of JSuperFrame2D.
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition: JBuildL1.hh:103
Basic data structure for time and time over threshold information of hit.
Tools for handling different hit types.
1-dimensional frame with time calibrated data from one optical module.
Basic data structure for L0 hit.
const int n
Definition: JPolint.hh:676
void operator()(const JSuperFrame2D< JHit > &input, JOutput_t out) const
Build hits from calibrated data.
Definition: JBuildL1.hh:227
double getTimeDifference(const JDAQChronometer &first, const JDAQChronometer &second)
Get time difference between two chronometers.
JSuperFrame2D< JHit_t > & demultiplex(const JDAQSuperFrame &input, const JModule &module) const
Demultiplex and pre-process DAQ super frame.
Definition: JBuild.hh:103
std::vector< JHit > buffer
Definition: JBuildL1.hh:276
Template L1 hit builder.
Definition: JBuildL1.hh:85
Data structure for L2 parameters.
Reduced data structure for L1 hit.
JBuildL1Parameters(const JL2Parameters &parameters)
Constructor.
Definition: JBuildL1.hh:68
std::vector< JHit > buffer
Definition: JBuildL1.hh:371
Data structure for L0 hit.
Definition: JHitL0.hh:27
Auxiliary class to set-up Hit.
Definition: JSirene.hh:55
Auxiliary data structure for L1 build parameters.
Definition: JBuildL1.hh:37
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from uncalibrated DAQ data.
Definition: JBuildL1.hh:361
void fast_forward(argument_type hit) const
Increment the internal iterators until the lower bounds corresponding to the time of the given hit...
const JHitL1 & sort()
Sort L0 hits.
Definition: JHitL1.hh:97
Reduced data structure for L1 hit.
Definition: JHitR1.hh:31
2-dimensional frame with time calibrated data from one optical module.
Template definition of hit toolkit.
Definition: JHitToolkit.hh:60
std::vector< value_type >::const_iterator const_iterator
Auxiliary class to extend hit building functionality to all DAQ data types.
Definition: JBuildHelper.hh:44
Data frame of one optical module.
void operator()(const JSuperFrame2D< JHit_t > &input, JOutput_t out) const
Build hits from calibrated data.
Definition: JBuildL1.hh:117
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
Basic data structure for L1 hit.
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition: JBuildL1.hh:300
Data structure for optical module.