Jpp 19.3.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
JTRIGGER::JTriggerMXShower Class Reference

Shower trigger. More...

#include <JTriggerMXShower.hh>

Inheritance diagram for JTRIGGER::JTriggerMXShower:
JTRIGGER::JTriggerMXShower_t JTRIGGER::JTriggerInterface std::vector< JVector3D >

Public Types

typedef JModuleMapper< JAttributesJModuleMapper_t
 Type definition of module mapper.
 
typedef JTriggerInput::value_type value_type
 
typedef JMatch< value_typematch_type
 

Public Member Functions

 JTriggerMXShower (const JParameters &input, const JDetector &detector)
 Constructor.
 
template<class JElement_t >
void operator() (const JTriggerInput &inputL1, const JTimeslice< JElement_t > inputL0, std::back_insert_iterator< JTriggerOutput > out) const
 Process trigger.
 
template<class T >
bool check (const JHitR1 &root, T __begin, T __end) const
 Check event.
 
JTriggerbit_t getTriggerBit () const
 Get the trigger bit.
 

Static Public Member Functions

static const char * getTriggerName (JTriggerbit_t bit)
 Get trigger name.
 

Protected Member Functions

template<JTriggerbit_t N>
bool checkTriggerBit () const
 Test whether specific trigger bit correponds to derived trigger class.
 
template<JTriggerbit_t N>
JTriggerbit_t find_trigger_bit (JBit< N > bit) const
 Recursive method to find the trigger bit of the given trigger data.
 
JTriggerbit_t find_trigger_bit (JBit< NUMBER_OF_TRIGGER_BITS > bit) const
 Termination method of recursive method to find the trigger bit of the given trigger data.
 

Static Protected Member Functions

template<JTriggerbit_t N>
static const char * getTriggerName ()
 Get trigger name.
 
template<JTriggerbit_t N>
static const char * get_trigger_name (JBit< N > bit, JTriggerbit_t value)
 Recursive method to get trigger name for given trigger bit.
 
static const char * get_trigger_name (JBit< NUMBER_OF_TRIGGER_BITS > bit, JTriggerbit_t value)
 Termination method of recursive method to get trigger name.
 

Private Attributes

JParametersHelper< JParametersparameters
 
JModuleMapper_t mapper
 
std::vector< JHitR1buffer
 
JMatch3G< JHitR1match
 
double TMaxEvent_ns
 

Detailed Description

Shower trigger.

Definition at line 83 of file JTriggerMXShower.hh.

Member Typedef Documentation

◆ JModuleMapper_t

Type definition of module mapper.

Definition at line 93 of file JTriggerMXShower.hh.

◆ value_type

JTriggerInput::value_type JTRIGGER::JTriggerInterface::value_type
inherited

Definition at line 161 of file JTriggerInterface.hh.

◆ match_type

Constructor & Destructor Documentation

◆ JTriggerMXShower()

JTRIGGER::JTriggerMXShower::JTriggerMXShower ( const JParameters & input,
const JDetector & detector )
inline

Constructor.

Parameters
inputtrigger parameters
detectordetector;

Definition at line 102 of file JTriggerMXShower.hh.

103 :
104 parameters(input),
106 match(parameters.DMax_m, parameters.TMaxExtra_ns)
107 {
108 using namespace JPP;
109
111
112 if (parameters.numberOfHits == 0) {
113 parameters.numberOfHits = 1;
114 }
115
116 if (parameters.numberOfHits == 1) {
117 parameters.factoryLimit = 1;
118 }
119
120 if (parameters.numberOfModules < 1) {
121 parameters.numberOfModules = 1;
122 }
123
124 // vertices
125
126 if (parameters.RMax_m > 0.0 &&
127 parameters.Xv_m > 0.0) {
128
129 this->push_back(JVector3D(0.0,0.0,0.0));
130
131 for (double x = 0.5*parameters.Xv_m; x < parameters.RMax_m + 0.5*parameters.Xv_m; x += parameters.Xv_m) {
132 for (double y = 0.5*parameters.Xv_m; y < parameters.RMax_m + 0.5*parameters.Xv_m; y += parameters.Xv_m) {
133 for (double z = 0.5*parameters.Xv_m; z < parameters.RMax_m + 0.5*parameters.Xv_m; z += parameters.Xv_m) {
134 if (x*x + y*y + z*z <= parameters.RMax_m*parameters.RMax_m) {
135 this->push_back(JVector3D(-x,-y,-z));
136 this->push_back(JVector3D(-x,-y,+z));
137 this->push_back(JVector3D(-x,+y,-z));
138 this->push_back(JVector3D(-x,+y,+z));
139 this->push_back(JVector3D(+x,-y,-z));
140 this->push_back(JVector3D(+x,-y,+z));
141 this->push_back(JVector3D(+x,+y,-z));
142 this->push_back(JVector3D(+x,+y,+z));
143 }
144 }
145 }
146 }
147 }
148 }
Data structure for vector in three dimensions.
Definition JVector3D.hh:36
JParametersHelper< JParameters > parameters
double getIndexOfRefraction()
Get average index of refraction of water corresponding to group velocity.
const double getInverseSpeedOfLight()
Get inverse speed of light.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Detector file.
Definition JHead.hh:227
Auxiliary class to match modules according maximal distance.

Member Function Documentation

◆ operator()()

template<class JElement_t >
void JTRIGGER::JTriggerMXShower::operator() ( const JTriggerInput & inputL1,
const JTimeslice< JElement_t > inputL0,
std::back_insert_iterator< JTriggerOutput > out ) const
inline

Process trigger.

Parameters
inputL1input L1 data
inputL0input L0 data
outoutput data

Definition at line 159 of file JTriggerMXShower.hh.

162 {
163 typedef JTimesliceClone<JElement_t> JTimeslice_t;
164 typedef typename JTimeslice_t::value_type JFrame_t;
165 typedef typename JModuleMapper_t::container_type container_type;
166
167 if (parameters.enabled) {
168
169 JTimeslice_t clone(inputL0, mapper);
170
171 for (JTriggerInput::const_iterator root = inputL1.begin(); root != inputL1.end(); ++root) {
172
173 buffer.clear();
174
175 const container_type& zip = mapper.getList(root->getModuleID());
176
177 for (typename container_type::const_iterator mod = zip.begin(); mod != zip.end(); ++mod) {
178
179 const double Tmin = root->getT() + mod->Tmin_ns;
180 const double Tmax = root->getT() + mod->Tmax_ns;
181
182 JFrame_t& frame = clone[mod->first];
183
184 if (!frame.empty()) {
185
186 frame.fast_forward(root->getT() - TMaxEvent_ns);
187
188 for (typename JFrame_t::const_iterator i = frame.get(); *i <= Tmax; ++i) {
189
190 if (*i >= Tmin) {
191 buffer.push_back(JHitR1(frame.getModuleID(),
192 frame.getPosition(),
193 frame.getJHit(*i)));
194 }
195 }
196 }
197 }
198
199 if (distance (buffer.begin(), buffer.end()) >= parameters.numberOfHits - 1 &&
200 getNumberOfModules(buffer.begin(), buffer.end()) >= parameters.numberOfModules - 1) {
201
202 if (distance(buffer.begin(), buffer.end()) < parameters.factoryLimit) {
203
204 JTriggerInput::iterator q = clusterize(buffer.begin(), buffer.end(), match, parameters.numberOfHits - 1);
205
206 if (distance (buffer.begin(), q) >= parameters.numberOfHits - 1 &&
207 getNumberOfModules(buffer.begin(), q) >= parameters.numberOfModules - 1) {
208
209 if (check(*root, buffer.begin(), q)) {
210 *out = JEvent(inputL1.getDAQChronometer(), *root, buffer.begin(), q, this->getTriggerBit());
211 ++out;
212 }
213 }
214
215 } else {
216
217 // Anomalous large event
218
219 JEvent event(inputL1.getDAQChronometer(), *root, buffer.begin(), buffer.end(), this->getTriggerBit());
220
221 event.addTriggerBit(FACTORY_LIMIT);
222
223 *out = event;
224 ++out;
225 }
226 }
227 }
228 }
229 }
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
const container_type & getList(const JObjectID &id) const
Get list with module data matching given module.
std::vector< moduleattributes_type > container_type
Data frame with end marker.
Definition JFrame_t.hh:30
Reduced data structure for L1 hit.
Definition JHitR1.hh:35
Clone of JTimeslice.
std::vector< JHitR1 > buffer
bool check(const JHitR1 &root, T __begin, T __end) const
Check event.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
JFIT::JEvent JEvent
Definition JHistory.hh:404
JHitIterator_t clusterize(JHitIterator_t __begin, JHitIterator_t __end, const JMatch_t &match, const int Nmin=1)
Partition data according given binary match operator.
Definition JAlgorithm.hh:38
static const JModuleCounter getNumberOfModules
Function object to count unique modules.
Definition root.py:1
static const int FACTORY_LIMIT
Bit indicating max nhits reached in trigger.
Definition trigger.hh:16

◆ check()

template<class T >
bool JTRIGGER::JTriggerMXShower::check ( const JHitR1 & root,
T __begin,
T __end ) const
inline

Check event.

Parameters
rootroot hit
__beginbegin of data
__endend of data
Returns
true if accepted; else false

Definition at line 241 of file JTriggerMXShower.hh.

242 {
243 using namespace std;
244 using namespace JPP;
245
246 if (!this->empty()) {
247
248 const double U = getIndexOfRefraction() * getInverseSpeedOfLight();
249
250 for (const_iterator u = this->begin(); u != this->end(); ++u) {
251
252 const JVector3D p0 = root.getPosition() + *u; // vertex position
253 const double t0 = root.getT() - u->getLength() * U; // vertex time
254
255 size_t n = 1; // number of hits
256 set<int> m({root.getModuleID()}); // number of modules
257
258 for (T p = __begin; p != __end; ++p) {
259
260 const double t1 = p->getT() - p0.getDistance(*p) * U; // vertex time
261
262 if (fabs(t1 - t0) <= parameters.TMaxExtra_ns) {
263 n += 1;
264 m.insert(p->getModuleID());
265 }
266 }
267
268 if (n >= (size_t) parameters.numberOfHits &&
269 m.size() >= (size_t) parameters.numberOfModules) {
270 return true;
271 }
272 }
273
274 return false;
275
276 } else {
277
278 return true;
279 }
280 }
double getDistance(const JVector3D &pos) const
Get distance to point.
Definition JVector3D.hh:270
const int n
Definition JPolint.hh:791

◆ checkTriggerBit()

template<JTriggerbit_t N>
bool JTRIGGER::JTriggerInterface::checkTriggerBit ( ) const
inlineprotectedinherited

Test whether specific trigger bit correponds to derived trigger class.

This method will be specialised using the marco setTriggerBit() so that it will return true if this triggered event corresponds to bit N.

This method will be repeatedly called by method find_trigger_bit() which in turn is called by the member method JTriggerInterface::getTriggerBit() so that it returns the correct trigger bit.

Returns
false

Definition at line 76 of file JTriggerInterface.hh.

77 {
78 return false;
79 }

◆ find_trigger_bit() [1/2]

template<JTriggerbit_t N>
JTriggerbit_t JTRIGGER::JTriggerInterface::find_trigger_bit ( JBit< N > bit) const
inlineprotectedinherited

Recursive method to find the trigger bit of the given trigger data.

Parameters
bittrigger bit
Returns
trigger bit

Definition at line 89 of file JTriggerInterface.hh.

90 {
92 return N;
93 else
95 }
JTriggerbit_t find_trigger_bit(JBit< N > bit) const
Recursive method to find the trigger bit of the given trigger data.
bool checkTriggerBit() const
Test whether specific trigger bit correponds to derived trigger class.
Auxiliary data structure for single bit.
Definition JDAQ.hh:36

◆ find_trigger_bit() [2/2]

JTriggerbit_t JTRIGGER::JTriggerInterface::find_trigger_bit ( JBit< NUMBER_OF_TRIGGER_BITS > bit) const
inlineprotectedinherited

Termination method of recursive method to find the trigger bit of the given trigger data.

This method throws an error.

Parameters
bittrigger bit
Returns
trigger bit

Definition at line 105 of file JTriggerInterface.hh.

106 {
107 throw JTriggerException("Method find_trigger_bit<>(): no corresponding trigger bit found.");
108 }

◆ getTriggerName() [1/2]

template<JTriggerbit_t N>
static const char * JTRIGGER::JTriggerInterface::getTriggerName ( )
inlinestaticprotectedinherited

Get trigger name.

This method will be specialised using the marco setTriggerBit() so that it will return name of trigger for bit N.

This method will be repeatedly called by method get_trigger_name() which in turn is called by the method JTriggerInterface::getTriggerName() so that it returns the correct trigger name.

Returns
NULL

Definition at line 124 of file JTriggerInterface.hh.

125 {
126 return NULL;
127 }

◆ getTriggerName() [2/2]

static const char * JTRIGGER::JTriggerInterface::getTriggerName ( JTriggerbit_t bit)
inlinestaticinherited

Get trigger name.

param bit trigger bit

Returns
trigger name

Definition at line 182 of file JTriggerInterface.hh.

183 {
184 return get_trigger_name(JBit<0>(), bit);
185 }
static const char * get_trigger_name(JBit< N > bit, JTriggerbit_t value)
Recursive method to get trigger name for given trigger bit.

◆ get_trigger_name() [1/2]

template<JTriggerbit_t N>
static const char * JTRIGGER::JTriggerInterface::get_trigger_name ( JBit< N > bit,
JTriggerbit_t value )
inlinestaticprotectedinherited

Recursive method to get trigger name for given trigger bit.

Parameters
bittrigger bit
valuetrigger bit
Returns
trigger name

Definition at line 138 of file JTriggerInterface.hh.

139 {
140 if (bit.value == value)
141 return getTriggerName<N>();
142 else
143 return get_trigger_name(JBit<N+1>(), value);
144 }
static const char * getTriggerName()
Get trigger name.

◆ get_trigger_name() [2/2]

static const char * JTRIGGER::JTriggerInterface::get_trigger_name ( JBit< NUMBER_OF_TRIGGER_BITS > bit,
JTriggerbit_t value )
inlinestaticprotectedinherited

Termination method of recursive method to get trigger name.

Parameters
bittrigger bit
valuetrigger bit
Returns
NULL

Definition at line 154 of file JTriggerInterface.hh.

155 {
156 return NULL;
157 }

◆ getTriggerBit()

JTriggerbit_t JTRIGGER::JTriggerInterface::getTriggerBit ( ) const
inlineinherited

Get the trigger bit.

Returns
trigger bit

Definition at line 170 of file JTriggerInterface.hh.

171 {
172 return find_trigger_bit(JBit<0>());
173 }

Member Data Documentation

◆ parameters

JParametersHelper<JParameters> JTRIGGER::JTriggerMXShower::parameters
private

Definition at line 283 of file JTriggerMXShower.hh.

◆ mapper

JModuleMapper_t JTRIGGER::JTriggerMXShower::mapper
private

Definition at line 284 of file JTriggerMXShower.hh.

◆ buffer

std::vector<JHitR1> JTRIGGER::JTriggerMXShower::buffer
mutableprivate

Definition at line 285 of file JTriggerMXShower.hh.

◆ match

JMatch3G<JHitR1> JTRIGGER::JTriggerMXShower::match
private

Definition at line 286 of file JTriggerMXShower.hh.

◆ TMaxEvent_ns

double JTRIGGER::JTriggerMXShower::TMaxEvent_ns
private

Definition at line 287 of file JTriggerMXShower.hh.


The documentation for this class was generated from the following file: