algo_tpc_huffman.hh

Go to the documentation of this file.
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

Generated on Mon Apr 7 15:35:12 2014 for MyProject by  doxygen 1.4.7