Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
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"
16#include "JTrigger/JBuild.hh"
19#include "JDetector/JModule.hh"
20
21
22/**
23 * \author mdejong
24 */
25
26namespace JTRIGGER {}
27namespace JPP { using namespace JTRIGGER; }
28
29namespace JTRIGGER {
30
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
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();
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<>
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<>
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 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
Basic data structure for L0 hit.
Basic data structure for L1 hit.
Reduced data structure for L1 hit.
Tools for handling different hit types.
Data structure for optical module.
Basic data structure for time and time over threshold information of hit.
Data structure for a composite optical module.
Definition JModule.hh:75
void setPosition(const JVector3D &pos)
Set position.
const JPosition3D & getPosition() const
Get position.
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from uncalibrated DAQ data.
Definition JBuildL1.hh:266
void operator()(const JSuperFrame2D< JHit > &input, JOutput_t out) const
Build hits from calibrated data.
Definition JBuildL1.hh:227
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition JBuildL1.hh:213
std::vector< JHit > buffer
Definition JBuildL1.hh:276
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition JBuildL1.hh:300
std::vector< JHit > buffer
Definition JBuildL1.hh:371
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from uncalibrated DAQ data.
Definition JBuildL1.hh:361
void operator()(const JSuperFrame2D< JHit > &input, JOutput_t out) const
Build hits from calibrated data.
Definition JBuildL1.hh:314
Template L1 hit builder.
Definition JBuildL1.hh:90
void operator()(const JSuperFrame1D< JHit_t > &input, JOutput_t out) const
Build hits from calibrated data.
Definition JBuildL1.hh:150
void operator()(const JDAQSuperFrame &input, const JModule &module, JOutput_t out) const
Build hits from DAQ data.
Definition JBuildL1.hh:182
JBuildL1(const JBuildL1Parameters &parameters)
Constructor.
Definition JBuildL1.hh:103
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
void operator()(const JSuperFrame2D< JHit_t > &input, JOutput_t out) const
Build hits from calibrated data.
Definition JBuildL1.hh:117
JContainer_t::const_iterator const_iterator
Definition JClone.hh:45
Data structure for L0 hit.
Definition JHitL0.hh:31
Data structure for L1 hit.
Definition JHitL1.hh:37
const JHitL1 & sort()
Sort L0 hits.
Definition JHitL1.hh:97
Reduced data structure for L1 hit.
Definition JHitR1.hh:35
void set(const JHit &hit, const double weight=1.0)
Set hit.
Definition JHitR1.hh:125
JHitR1 & add(const JHit &hit, const double weight=1.0)
Add hit.
Definition JHitR1.hh:148
int getN() const
Get count.
Definition JHitR1.hh:183
Hit data structure.
double getT() const
Get calibrated time of hit.
1-dimensional frame with time calibrated data from one optical module.
static JSuperFrame1D< JElement_t, JAllocator_t > multiplex
Multiplexer.
2-dimensional frame with time calibrated data from one optical module.
std::vector< value_type >::const_iterator const_iterator
std::vector< value_type >::const_iterator const_iterator
void fast_forward(argument_type hit) const
Increment the internal iterators until the lower bounds corresponding to the time of the given hit.
Data structure for all trigger parameters.
bool empty() const
Definition JDAQFrame.hh:181
int getModuleID() const
Get module identifier.
Data frame of one optical module.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const int n
Definition JPolint.hh:791
Auxiliary classes and methods for triggering.
double getTimeDifference(const JDAQChronometer &first, const JDAQChronometer &second)
Get time difference between two chronometers.
Auxiliary class to set-up Hit.
Definition JSirene.hh:58
Auxiliary class to extend hit building functionality to all DAQ data types.
Auxiliary data structure for L1 build parameters.
Definition JBuildL1.hh:38
JBuildL1Parameters(const JTriggerParameters &parameters)
Constructor.
Definition JBuildL1.hh:57
JBuildL1Parameters(const JL2Parameters &parameters)
Constructor.
Definition JBuildL1.hh:68
JBuildL1Parameters(const double Tmax_ns, const bool combine)
Constructor.
Definition JBuildL1.hh:45
Auxiliary base class for hit building.
Definition JBuild.hh:36
JSuperFrame2D< JHit_t > & demultiplex(const JDAQSuperFrame &input, const JModule &module) const
Demultiplex and pre-process DAQ super frame.
Definition JBuild.hh:103
Template definition of hit toolkit.
Data structure for L2 parameters.