algo_pmt_xmit.hh

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

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