Psyllid  v1.12.4
Project 8 Data Acquisisition Software
event_builder.hh
Go to the documentation of this file.
1 /*
2  * event_builder.hh
3  *
4  * Created on: Dec 29, 2015
5  * Author: nsoblath
6  */
7 
8 #ifndef PSYLLID_EVENT_BUILDER_HH_
9 #define PSYLLID_EVENT_BUILDER_HH_
10 
11 #include "transformer.hh"
12 
13 #include "id_range_event.hh"
14 #include "node_builder.hh"
15 #include "trigger_flag.hh"
16 
17 #include "logger.hh"
18 
19 #include <boost/circular_buffer.hpp>
20 
21 namespace psyllid
22 {
23 
24  LOGGER( eblog_hdr, "event_builder_h" );
25 
68  class event_builder :
69  public midge::_transformer< midge::type_list< trigger_flag >, midge::type_list< trigger_flag > >
70  {
71  public:
72  typedef boost::circular_buffer< uint64_t > pretrigger_buffer_t;
73 
74  public:
75  event_builder();
76  virtual ~event_builder();
77 
78  public:
79 
80  mv_accessible( uint64_t, length );
81  mv_accessible( uint64_t, pretrigger );
82  mv_accessible( uint64_t, skip_tolerance );
83  mv_accessible( uint64_t, n_triggers );
84 
85 
86  public:
87  virtual void initialize();
88  virtual void execute( midge::diptera* a_midge = nullptr );
89  virtual void finalize();
90 
91  public:
92  bool is_triggered() const;
93 
94  const pretrigger_buffer_t& pretrigger_buffer() const;
95  const pretrigger_buffer_t& skip_buffer() const;
96 
97  private:
98  bool write_output_from_ptbuff_front( bool a_flag, trigger_flag* a_data );
99  bool write_output_from_skipbuff_front( bool a_flag, trigger_flag* a_data );
100  void advance_output_stream( trigger_flag* a_write_flag, uint64_t a_id, bool a_trig_flag );
101 
104 
105  pretrigger_buffer_t f_pretrigger_buffer;
106  pretrigger_buffer_t f_skip_buffer;
107 
108  };
109 
110 
111  inline bool event_builder::is_triggered() const
112  {
113  return f_state == state_t::triggered;
114  }
115 
117  {
118  return f_pretrigger_buffer;
119  }
121  {
122  return f_skip_buffer;
123  }
124 
126  {
127  a_data->set_id( f_pretrigger_buffer.front() );
128  a_data->set_flag( a_flag );
129  LTRACE( eblog_hdr, "Event builder writing data to the output stream at index " << out_stream< 0 >().get_current_index() );
130  if( ! out_stream< 0 >().set( midge::stream::s_run ) )
131  {
132  LERROR( eblog_hdr, "Exiting due to stream error" );
133  return false;
134  }
135  f_pretrigger_buffer.pop_front();
136  return true;
137  }
138 
140  {
141  a_data->set_id( f_skip_buffer.front() );
142  a_data->set_flag( a_flag );
143  LTRACE( eblog_hdr, "Event builder writing data to the output stream at index " << out_stream< 0 >().get_current_index() );
144  if( ! out_stream< 0 >().set( midge::stream::s_run ) )
145  {
146  LERROR( eblog_hdr, "Exiting due to stream error" );
147  return false;
148  }
149  f_skip_buffer.pop_front();
150  return true;
151  }
152 
153  class event_builder_binding : public _node_binding< event_builder, event_builder_binding >
154  {
155  public:
157  virtual ~event_builder_binding();
158 
159  private:
160  virtual void do_apply_config( event_builder* a_node, const scarab::param_node& a_config ) const;
161  virtual void do_dump_config( const event_builder* a_node, scarab::param_node& a_config ) const;
162  };
163 
164 
165 } /* namespace psyllid */
166 
167 #endif /* PSYLLID_EVENT_BUILDER_HH_ */
virtual void finalize()
pretrigger_buffer_t f_skip_buffer
virtual void execute(midge::diptera *a_midge=nullptr)
bool write_output_from_ptbuff_front(bool a_flag, trigger_flag *a_data)
const pretrigger_buffer_t & skip_buffer() const
static scarab::logger eblog_hdr("event_builder_h")
bool write_output_from_skipbuff_front(bool a_flag, trigger_flag *a_data)
A transformer that considers a sequence of triggered packets and decides what constitutes a contiguou...
boost::circular_buffer< uint64_t > pretrigger_buffer_t
virtual void initialize()
LOGGER(plog, "egg_writer")
const pretrigger_buffer_t & pretrigger_buffer() const
pretrigger_buffer_t f_pretrigger_buffer
void advance_output_stream(trigger_flag *a_write_flag, uint64_t a_id, bool a_trig_flag)
mv_accessible(uint64_t, length)