00001 00014 #ifndef ALGO_TPC_XMIT_HH 00015 #define ALGO_TPC_XMIT_HH 00016 00017 #include "algo_base.hh" 00018 #include "algo_fem_decoder_base.hh" 00019 00036 class algo_tpc_xmit : public algo_fem_decoder_base { 00037 00038 public: 00039 00041 algo_tpc_xmit(); 00042 00044 virtual ~algo_tpc_xmit(){}; 00045 00046 00048 virtual inline PMT::PMT_WORD get_word_class(const PMT::word_t word) const { 00049 // One of core functions to identify PMT binary word format 00050 if( (word & 0xffffffff) == 0xffffffff ) 00051 return PMT::EVENT_HEADER; 00052 else if( (word & 0xffffffff) == 0xe0000000 ) 00053 return PMT::EVENT_LAST_WORD; 00054 if( (word & 0xffff) == 0xffff ) 00055 return PMT::FEM_HEADER; 00056 else if( (word & 0xf000) == 0xf000 ) 00057 return PMT::FEM_HEADER; 00058 else if( (word & 0xf000) == 0x4000 ) 00059 return PMT::CHANNEL_HEADER; 00060 else if( (word & 0xf000) == 0x0000 || 00061 (word & 0xf000) == 0x8000 ) 00062 return PMT::CHANNEL_WORD; 00063 else if( (word & 0xf000) == 0x5000 ) 00064 return PMT::CHANNEL_LAST_WORD; 00065 else 00066 return PMT::UNDEFINED_WORD; 00067 }; 00068 00069 protected: 00070 00071 virtual bool check_event_quality(); 00072 00073 virtual void clear_event(); 00074 00075 bool store_event(); 00076 00077 bool decode_ch_word (const PMT::word_t word, PMT::word_t &last_word); 00078 00079 virtual void reset(); 00080 00081 virtual inline bool is_compressed(const PMT::word_t word){ return ( word & 0xf000 ); }; 00082 00086 virtual bool process_event_header(const PMT::word_t word, 00087 PMT::word_t &last_word); 00088 00092 virtual bool process_ch_word(const PMT::word_t word, PMT::word_t &last_word); 00093 00097 virtual bool process_fem_last_word(const PMT::word_t word, 00098 PMT::word_t &last_word); 00099 00103 virtual bool process_event_last_word(const PMT::word_t word, 00104 PMT::word_t &last_word); 00105 00106 protected: 00107 00108 tpc_waveform _ch_data; 00109 00110 tpc_wf_collection* _event_data; 00111 00112 }; 00113 00114 #endif 00115 // end of doxygen group
1.4.7