00001 00014 #ifndef ALGO_PMT_XMIT_HH 00015 #define ALGO_PMT_XMIT_HH 00016 00017 #include "algo_base.hh" 00018 #include "algo_fem_decoder_base.hh" 00019 00036 class algo_pmt_xmit : public algo_fem_decoder_base { 00037 00038 public: 00039 00041 algo_pmt_xmit(); 00042 00044 virtual ~algo_pmt_xmit(){}; 00045 00047 virtual inline PMT::PMT_WORD get_word_class(const PMT::word_t word) const { 00048 // One of core functions to identify PMT binary word format 00049 if( (word & 0xffffffff) == 0xffffffff ) 00050 return PMT::EVENT_HEADER; 00051 if( (word & 0xffff) == 0xffff ) 00052 return PMT::FEM_HEADER; 00053 else if( (word & 0xf000) == 0xf000 ) 00054 return PMT::FEM_HEADER; 00055 else if( (word & 0xf000) == 0x4000 ) 00056 return PMT::FEM_FIRST_WORD; 00057 else if( (word & 0xf000) == 0x9000 ) 00058 return PMT::CHANNEL_HEADER; 00059 else if( (word & 0xf000) == 0xa000 ) 00060 return PMT::CHANNEL_WORD; 00061 else if( (word & 0xf000) == 0xb000 ) 00062 return PMT::CHANNEL_LAST_WORD; 00063 else if( (word & 0xf000) == 0xc000 ) 00064 return PMT::FEM_LAST_WORD; 00065 else if( (word & 0xf0000000) == 0xe0000000 ) 00066 return PMT::EVENT_LAST_WORD; 00067 else if( (word & 0xf000) == 0xe000 ) 00068 return PMT::EVENT_LAST_WORD; 00069 else 00070 return PMT::UNDEFINED_WORD; 00071 }; 00072 00073 protected: 00074 00075 virtual bool check_event_quality(); 00076 00078 virtual void clear_event(); 00079 00080 void store_ch_data(); 00081 00082 bool store_event(); 00083 00084 bool decode_ch_word(const PMT::word_t word, PMT::word_t &last_word); 00085 00086 virtual void reset(); 00087 00088 virtual inline bool is_compressed(const PMT::word_t word){ return ( word & 0xf000 ); }; 00089 00093 virtual bool process_event_header(const PMT::word_t word, 00094 PMT::word_t &last_word); 00095 00099 virtual bool process_ch_word(const PMT::word_t word, PMT::word_t &last_word); 00100 00104 virtual bool process_fem_last_word(const PMT::word_t word, 00105 PMT::word_t &last_word); 00106 00110 virtual bool process_event_last_word(const PMT::word_t word, 00111 PMT::word_t &last_word); 00112 00113 protected: 00114 00115 pmt_waveform _ch_data; 00116 00117 pmt_wf_collection* _event_data; 00118 00119 static const size_t CHANNEL_HEADER_COUNT=3; 00120 PMT::DISCRIMINATOR _last_disc_id; 00121 PMT::ch_number_t _last_channel_number; 00122 size_t _channel_header_count; 00123 00124 }; 00125 00126 #endif 00127 // end of doxygen group
1.4.7