00001 #ifndef ALGO_TPC_HUFFMAN_HH 00002 #define ALGO_TPC_HUFFMAN_HH 00003 00004 #include "algo_tpc_xmit.hh" 00005 #include <deque> 00006 00007 class algo_tpc_huffman : public algo_tpc_xmit { 00008 00009 public: 00010 00011 algo_tpc_huffman(); 00012 00013 ~algo_tpc_huffman(){}; 00014 00016 virtual inline PMT::PMT_WORD get_word_class(const PMT::word_t word) const { 00017 // One of core functions to identify PMT binary word format 00018 if( word == 0x0 ) return PMT::UNDEFINED_WORD; 00019 else if( (word & 0xffffffff) == 0xffffffff ) // Unique marker 00020 return PMT::EVENT_HEADER; 00021 else if( (word & 0xffffffff) == 0xe0000000 ) // Unique marker 00022 return PMT::EVENT_LAST_WORD; 00023 if( (word & 0xffff) == 0xffff ) // Unique marker 00024 return PMT::FEM_HEADER; 00025 else if( (word & 0xf000) == 0xf000 ) // Could be ADC word 00026 return PMT::FEM_HEADER; 00027 else if( !((word>>15) & 0x1) ) { 00028 00029 if( (word & 0xf000) == 0x0000 ) // Uncompressed ADC word 00030 return PMT::CHANNEL_WORD; 00031 else if( (word & 0xf000) == 0x4000 ) // Channel first word 00032 return PMT::CHANNEL_HEADER; 00033 else if( (word & 0xf000) == 0x5000 ) // Channel last word 00034 return PMT::CHANNEL_LAST_WORD; 00035 else 00036 return PMT::UNDEFINED_WORD; // Undefined 00037 } 00038 else if( ((word>>15) & 0x1) ){ 00039 if( (word & 0xffff) == 0xc000 ) // end of FEM word 00040 return PMT::FEM_LAST_WORD; 00041 else 00042 return PMT::CHANNEL_WORD; // compressed ADC word 00043 }else 00044 return PMT::UNDEFINED_WORD; 00045 }; 00046 00047 00053 virtual bool process_word(const PMT::word_t word); 00054 00055 virtual void reset(); 00056 00057 protected: 00058 00059 virtual void clear_event(); 00060 00061 virtual bool process_event_header 00062 (const PMT::word_t word, PMT::word_t &last_word); 00063 00064 virtual bool process_fem_header 00065 (const PMT::word_t word,PMT::word_t &last_word); 00066 00067 virtual bool process_ch_word 00068 (const PMT::word_t word,PMT::word_t &last_word); 00069 00070 virtual bool process_fem_last_word 00071 (const PMT::word_t word,PMT::word_t &last_word); 00072 00073 virtual bool process_event_last_word 00074 (const PMT::word_t word,PMT::word_t &last_word); 00075 00076 protected: 00077 00078 bool _search_header; 00079 00080 }; 00081 00082 #endif
1.4.7