Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JTrigger3D.hh
Go to the documentation of this file.
1 #ifndef __JTRIGGER__JTRIGGER3D__
2 #define __JTRIGGER__JTRIGGER3D__
3 
4 #include <vector>
5 #include <iterator>
6 
8 
9 #include "JTrigger/JEvent.hh"
10 #include "JTrigger/JMatch.hh"
11 #include "JTrigger/JBind2nd.hh"
12 #include "JTrigger/JAlgorithm.hh"
16 
17 
18 /**
19  * \author mdejong
20  */
21 
22 namespace JTRIGGER {}
23 namespace JPP { using namespace JTRIGGER; }
24 
25 namespace JTRIGGER {
26 
27  /**
28  * General purpose majority trigger.
29  */
30  class JTrigger3D :
31  public JTriggerInterface
32  {
33  public:
34  /**
35  * Trigger parameters.
36  */
37  struct JParameters
38  {
39  /**
40  * Constructor.
41  *
42  * \param option enable/disable trigger
43  * \param number_of_hits minimal number of hits to trigger event
44  * \param number_of_modules minimal number of modules to trigger event
45  * \param Tmax_ns maximal time between first and last hit [ns]
46  * \param match3d 3D match operator
47  * \param factory_limit maximal number of hits to apply trigger logic (above this limit, always trigger)
48  */
49  JParameters(const bool option,
50  const int number_of_hits,
51  const int number_of_modules,
52  const double Tmax_ns,
53  const match_type& match3d,
54  const int factory_limit) :
55  enabled (option),
56  numberOfHits (number_of_hits),
57  numberOfModules(number_of_modules),
58  TMaxEvent_ns (Tmax_ns),
59  match3D (match3d.clone()),
60  factoryLimit (factory_limit)
61  {}
62 
63 
64  bool enabled;
67  double TMaxEvent_ns;
70  };
71 
72 
73  /**
74  * Constructor.
75  *
76  * \param input trigger parameters
77  */
78  JTrigger3D(const JParameters& input) :
79  parameters(input)
80  {
81  if (parameters.numberOfHits == 0) {
83  }
84 
85  if (parameters.numberOfHits == 1) {
87  }
88 
90  }
91 
92 
93  /**
94  * Process trigger.
95  *
96  * \param input input data
97  * \param out output data
98  */
99  void operator()(const JTriggerInput& input, std::back_insert_iterator<JTriggerOutput> out) const
100  {
101  using std::distance;
102 
103  if (parameters.enabled && input.size() >= parameters.numberOfHits) {
104 
105  match_type& match3D = *parameters.match3D;
106 
107  for (JTriggerInput::const_iterator p = input.begin(), q = p; p != input.end(); ) {
108 
109  for (++q; q->getT() - p->getT() < parameters.TMaxEvent_ns; ++q) {}
110 
111  if (distance (p,q) >= parameters.numberOfHits &&
113 
114  if (distance(p,q) < parameters.factoryLimit) {
115 
116  do {
117 
118  if (distance (p,q) >= parameters.numberOfHits &&
120 
121  // copy
122 
123  JTriggerInput::iterator root = buffer.begin();
124  JTriggerInput::iterator __p = buffer.begin();
125  JTriggerInput::iterator __q = buffer.begin();
126 
127  *root = *p;
128 
129  ++__p;
130  ++__q;
131 
132  for (JTriggerInput::const_iterator i = p; ++i != q; ) {
133  if (match3D(*p,*i)) {
134  *__q = *i;
135  ++__q;
136  }
137  }
138 
139  if (distance (root,__q) >= parameters.numberOfHits &&
141 
142  __q = clusterize(__p, __q, match3D, parameters.numberOfHits - 1);
143 
144  if (distance (root,__q) >= parameters.numberOfHits &&
146  *out = JEvent(input.getDAQChronometer(), root, __q, this->getTriggerBit());
147  ++out;
148  }
149  }
150  }
151 
152  ++p;
153 
154  } while (q->getT() - p->getT() >= parameters.TMaxEvent_ns);
155 
156  } else {
157 
158  // Anomalous large event
159 
160  *out = JEvent(input.getDAQChronometer(), p, q, this->getTriggerBit());
161  ++out;
162 
163  p = q;
164  }
165 
166  } else {
167 
168  for (++p; q->getT() - p->getT() >= parameters.TMaxEvent_ns; ++p) {}
169  }
170  }
171  }
172  }
173 
174 
175 
177 
178  private:
180  };
181 }
182 
183 #endif
General purpose majority trigger.
Definition: JTrigger3D.hh:30
std::vector< value_type > buffer
Definition: JTrigger3D.hh:179
Algorithms for hit clustering and sorting.
Function object interface for hit matching.
Definition: JMatch.hh:27
const_iterator end() const
get iterator to end of data (without end marker)
Base class for match operations inside clusterize methods.
JHitIterator_t clusterize(JHitIterator_t __begin, JHitIterator_t __end, const JMatch< JHit_t > &match, const int Nmin=1)
Partition data according given binary match operator.
Definition: JAlgorithm.hh:45
JLANG::JSharedPointer< match_type > match3D
Definition: JTrigger3D.hh:68
void operator()(const JTriggerInput &input, std::back_insert_iterator< JTriggerOutput > out) const
Process trigger.
Definition: JTrigger3D.hh:99
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
JParameters(const bool option, const int number_of_hits, const int number_of_modules, const double Tmax_ns, const match_type &match3d, const int factory_limit)
Constructor.
Definition: JTrigger3D.hh:49
JParameters parameters
Definition: JTrigger3D.hh:176
JModuleCounter getNumberOfModules
Function object to count unique modules.
JTrigger3D(const JParameters &input)
Constructor.
Definition: JTrigger3D.hh:78
int size() const
get size of data (without end marker)
JTriggerbit_t getTriggerBit() const
Get the trigger bit.
Data structure for input to trigger algorithm.
Triggered event.
Definition: JEvent.hh:31