Psyllid  v1.12.4
Project 8 Data Acquisisition Software
frequency_transform.hh
Go to the documentation of this file.
1 /*
2  * frequency_transform.hh
3  *
4  * Created on: March 28, 2018
5  * Author: laroque
6  */
7 
8 #ifndef PSYLLID_FREQUENCY_TRANSFORM_HH_
9 #define PSYLLID_FREQUENCY_TRANSFORM_HH_
10 
11 #include "freq_data.hh"
12 #include "node_builder.hh"
13 #include "time_data.hh"
14 
15 #include "transformer.hh"
16 #include "shared_cancel.hh"
17 
18 #include <fftw3.h>
19 
20 namespace scarab
21 {
22  class param_node;
23 }
24 
25 namespace psyllid
26 {
58  class frequency_transform : public midge::_transformer< midge::type_list< time_data >, midge::type_list< time_data, freq_data > >
59  {
60  private:
61  typedef std::map< std::string, unsigned > TransformFlagMap;
62 
63  public:
65  virtual ~frequency_transform();
66 
67  public:
68  mv_accessible( uint64_t, time_length );
69  mv_accessible( uint64_t, freq_length );
70  mv_accessible( unsigned, fft_size ); // I really wish I could get this from the egg header
71  mv_accessible( std::string, transform_flag );
72  mv_accessible( bool, use_wisdom );
73  mv_accessible( std::string, wisdom_filename );
74 
75  private:
77 
78  public:
79  void switch_to_freq_only();
80  void switch_to_time_and_freq();
81 
82  virtual void initialize();
83  virtual void execute( midge::diptera* a_midge = nullptr );
84  virtual void finalize();
85 
86  private:
87  TransformFlagMap f_transform_flag_map;
88  fftw_complex* f_fftw_input;
89  fftw_complex* f_fftw_output;
90  fftw_plan f_fftw_plan;
91 
93 
94  //uint64_t f_time_session_pkt_counter;
95  //uint64_t f_freq_session_pkt_counter;
96  private:
97  void setup_internal_maps();
98 
99  };
100 
101  class frequency_transform_binding : public _node_binding< frequency_transform, frequency_transform_binding >
102  {
103  public:
105  virtual ~frequency_transform_binding();
106 
107  private:
108  virtual void do_apply_config( frequency_transform* a_node, const scarab::param_node& a_config ) const;
109  virtual void do_dump_config( const frequency_transform* a_node, scarab::param_node& a_config ) const;
110  virtual bool do_run_command( frequency_transform* a_node, const std::string& a_cmd, const scarab::param_node& ) const;
111  };
112 
113 } /* namespace psyllid */
114 
115 #endif /* PSYLLID_FREQUENCY_TRANSFORM_HH_ */
A transformer to receive time data, compute an FFT, and distribute as time and frequency ROACH packet...
std::map< std::string, unsigned > TransformFlagMap