6 #ifndef H_POTTU_LOGICALEVENTCOLLECTOR
7 #define H_POTTU_LOGICALEVENTCOLLECTOR
26 template <
class Sort,
class Tr>
34 int64_t _triggerDeadTime{300};
35 int64_t _eventDelay{-100};
36 int64_t _maxEventLength{600};
44 std::deque<event_collection_window_t> _eventWindows;
47 std::deque<pottu::DetectorEvent> _queue;
51 int64_t triggerDeadTime,
52 int64_t eventDelay, int64_t maxEventLength )
55 _triggerDeadTime(triggerDeadTime),
56 _eventDelay(eventDelay),
57 _maxEventLength(maxEventLength)
70 void feed(
const Cont &data ) noexcept {
73 for (
auto &det : data)
78 const int64_t ts = det.time;
82 _eventWindows.clear();
85 _sort.onTimeOrderError();
89 const bool newTrigger = _tr.feed( det );
90 const bool onDeadTime = _eventWindows.size() ? ts < _eventWindows.back().triggerTime + _triggerDeadTime
94 if( newTrigger && !onDeadTime ) {
97 if( _eventWindows.size() && _eventWindows.back().stopTime > ts+_eventDelay ) {
98 _eventWindows.back().stopTime = ts+_eventDelay;
106 _eventWindows.push_back( window );
110 _queue.push_back( det );
114 const int64_t ignoreUntil = _eventWindows.size()
115 ? std::min(_eventWindows.front().startTime, ts+_eventDelay )
117 while( _queue.size() && _queue.front().time < ignoreUntil )
121 if( _eventWindows.size() && _eventWindows.front().stopTime < ts + _eventDelay ) {
122 const auto iterLast = std::lower_bound( _queue.begin(), _queue.end(), _eventWindows.front().stopTime,
124 return e.time < value; } );
126 _sort.constructAndProcessLogicalEvent( _queue.begin(), iterLast,
127 _eventWindows.front().triggerTime,
128 _eventWindows.front().startTime, _eventWindows.front().stopTime );
130 _queue.erase( _queue.begin(), iterLast );
131 _eventWindows.pop_front();
Event containing event information of one daq channel.
Definition: DetectorEvent.hpp:47
Class which creates the logical events from stream of detector events.
Definition: LogicalEventCollector.hpp:27
void feed(const Cont &data) noexcept
Use this to feed detector event to this machine.
Definition: LogicalEventCollector.hpp:70
Definition: mainpage.dox:6
Definition: LogicalEventCollector.hpp:38