decoder_manager Class Reference
[DecoderDecoder]

A handler class for decoding task. More...

#include <decoder_manager.hh>

Inheritance diagram for decoder_manager:

decoder_base List of all members.

Public Member Functions

 decoder_manager ()
 Default constructor.
virtual ~decoder_manager ()
 Default destructor.
void add_input_filename (std::string name)
 Setter for the input filename.
void set_output_filename (std::string name)
 Setter for the output filename.
void set_data_to_write (DATA_STRUCT::DATA_TYPE type, bool write=true)
void set_format (FORMAT::INPUT_FILE fmt)
 Setter for the input file format.
void set_decoder (algo_base *algo)
 Setter for the decoding algorithm.
void debug_mode (bool debug)
 Setter for the debug mode.
bool run ()
 A method to start a batch decoding process.
void reset ()
 A method to initialize members for new decoding process.
void set_read_by_block (bool doit=true)
 A method to enable block-read for an input binary/ascii file.
void set_read_block_size (size_t n)
 A method to set the size of block-read (in terms of number of 32-bit words.
void set_verbosity (MSG::Level level)
 Setter for the verbosity level.
MSG::Level get_verbosity () const
 Getter for the verbosity level.
const std::string class_name () const
 Getter for the class name.

Protected Attributes

char _buf [200]
 char buffer for message manipulation
bool _verbosity [MSG::MSG_TYPE_MAX]
 holder for enabled message levels
MSG::Level _verbosity_level
 holder for specified verbosity level
std::string _name
 class name holder

Private Member Functions

bool initialize ()
 A method to be called before run() to initialize variables.
bool decode ()
 A method.
bool finalize ()
 A method to finalize decoding process, to be called after all is done.
bool open_file ()
 A method to open input/output files.

Private Attributes

bool _debug_mode
 Debug mode boolean.
std::vector< ana_base * > _analyzers
 A collection of analyzers to be run.
std::string _input_file
 Input file name.
std::vector< std::string > _bin_files
std::vector< std::string
>::iterator 
_bin_file_iter
bin_io_handler _fin
 Input file I/O handler.
bool _read_by_block
 Read a chunk of data sample from the input file if set to true.
size_t _read_block_size
 Number of words to be read as a chunk. See _read_by_block comment for details.
storage_manager_storage
 Output file I/O handler.
algo_base_decoder
 Decoding algorithm.

Detailed Description

A handler class for decoding task.

It operates (1) binary/ascii file I/O, (2) decoding of data word, (3) creation & maintaining of data storage manager.

Definition at line 34 of file decoder_manager.hh.


Constructor & Destructor Documentation

decoder_manager::decoder_manager (  ) 

Default constructor.

Definition at line 6 of file decoder_manager.cc.

References _debug_mode, _decoder, _fin, _input_file, _read_block_size, _read_by_block, _storage, storage_manager::get(), MSG::NORMAL, storage_manager::set_io_mode(), decoder_base::set_verbosity(), and storage_manager::WRITE.

00007   : decoder_base(),
00008     _fin(FORMAT::ASCII)
00009 {
00010   _input_file="";
00011   _debug_mode=false;
00012   _fin=bin_io_handler();
00013 
00014   _read_block_size = 0;
00015   _read_by_block   = false;
00016 
00017   _storage=storage_manager::get();
00018   _storage->set_io_mode(storage_manager::WRITE);
00019 
00020   //if((_storage->input_filename()).size()==0)
00021   //  _storage->set_in_filename("out.root");
00022 
00023   _decoder=0;
00024 
00025   set_verbosity(MSG::NORMAL);
00026 }

virtual decoder_manager::~decoder_manager (  )  [inline, virtual]

Default destructor.

Definition at line 42 of file decoder_manager.hh.

00042 {};


Member Function Documentation

void decoder_manager::add_input_filename ( std::string  name  )  [inline]

Setter for the input filename.

Definition at line 45 of file decoder_manager.hh.

References _bin_files.

Referenced by main().

00045 { _bin_files.push_back(name);};

const std::string decoder_base::class_name (  )  const [inline, inherited]

Getter for the class name.

Definition at line 46 of file decoder_base.hh.

References decoder_base::_name.

00046 {return _name;};

void decoder_manager::debug_mode ( bool  debug  )  [inline]

Setter for the debug mode.

Definition at line 60 of file decoder_manager.hh.

References _debug_mode.

Referenced by main().

00060 {_debug_mode=debug;};

bool decoder_manager::decode (  )  [private]

A method.

Definition at line 95 of file decoder_manager.cc.

References _bin_file_iter, _bin_files, decoder_base::_buf, _debug_mode, _decoder, _fin, _read_block_size, _read_by_block, _storage, decoder_base::_verbosity, algo_base::check_event_quality(), bin_io_handler::close(), MSG::DEBUG, bin_io_handler::eof(), MSG::ERROR, storage_manager::get_entries(), storage_manager::get_index(), algo_base::is_event_empty(), storage_manager::next_event(), MSG::NORMAL, bin_io_handler::open(), algo_base::process_word(), bin_io_handler::read_multi_word(), bin_io_handler::read_word(), Message::send(), bin_io_handler::set_filename(), and MSG::WARNING.

Referenced by run().

00095                              {
00096 
00097   if(_verbosity[MSG::DEBUG])
00098     Message::send(MSG::DEBUG,__FUNCTION__," begins...");
00099 
00100   bool status=true;
00101   PMT::word_t word = (_read_by_block) ? _fin.read_multi_word(_read_block_size) : _fin.read_word();
00102   UInt_t ctr=0;
00103   time_t watch;
00104   while(status) {
00105 
00106     if(_fin.eof()){
00107 
00108       _bin_file_iter++;
00109       if(_bin_file_iter == _bin_files.end()) break;
00110       _fin.close();
00111       _fin.set_filename((*_bin_file_iter).c_str());
00112 
00113       if(!_fin.open()) {
00114     Message::send(MSG::ERROR,__FUNCTION__,"Failed file I/O...");
00115     status = false;
00116     break;
00117       }
00118       word = (_read_by_block) ? _fin.read_multi_word(_read_block_size) : _fin.read_word();
00119     }
00120 
00121     status=_decoder->process_word(word);
00122 
00123     /*
00124     if(status) {
00125       for(std::vector<ana_base*>::iterator iter(_analyzers.begin());
00126       iter!=_analyzers.end();
00127         ++iter)
00128     (*iter)->analyze(_storage);
00129     }
00130     */
00131 
00132     if(!status){
00133       //if(_decoder->backtrace_mode())
00134       //_decoder->backtrace();
00135       if(_debug_mode){
00136     Message::send(MSG::ERROR,__FUNCTION__,"Process status failure ... but continue since DEBUG mode!");
00137     status=true;
00138       }
00139     }
00140 
00141     word = (_read_by_block) ? _fin.read_multi_word(_read_block_size) : _fin.read_word();
00142     if(_storage->get_index()==(ctr*2000)){
00143       time(&watch);
00144       sprintf(_buf,"  ... processed %-6d events : %s",ctr*2000,ctime(&watch));
00145       Message::send(MSG::NORMAL,__FUNCTION__,_buf);
00146       ctr+=1;
00147     }
00148   }
00149   
00150   if(!status && !_debug_mode){
00151 
00152     Message::send(MSG::ERROR,__FUNCTION__,Form("Event loop terminated. Stored: %d events",_storage->get_entries()));
00153 
00154   }else if(!(_decoder->is_event_empty())){
00155 
00156     Message::send(MSG::WARNING,__FUNCTION__,"Last event not stored by algorithm. Missing end-of-event word??");
00157 
00158     if(_decoder->check_event_quality()){
00159 
00160       Message::send(MSG::WARNING,__FUNCTION__,"Last event checksum agreed. Saving on file...");
00161 
00162       _storage->next_event();
00163 
00164     }else{
00165 
00166       Message::send(MSG::WARNING,__FUNCTION__,"Skip saving the last event...");
00167 
00168       status=false;
00169 
00170     }    
00171   }
00172     
00173   return status;
00174   
00175 }

bool decoder_manager::finalize (  )  [private]

A method to finalize decoding process, to be called after all is done.

Definition at line 177 of file decoder_manager.cc.

References _analyzers, _decoder, _fin, _storage, decoder_base::_verbosity, bin_io_handler::close(), storage_manager::close(), MSG::DEBUG, algo_base::reset(), and Message::send().

Referenced by run().

00177                                {
00178 
00179   if(_verbosity[MSG::DEBUG])
00180     Message::send(MSG::DEBUG,__FUNCTION__," begins...");  
00181 
00182   for(std::vector<ana_base*>::iterator iter(_analyzers.begin());
00183       iter!=_analyzers.end();
00184       ++iter)
00185     (*iter)->finalize();
00186 
00187   _storage->close();
00188   _fin.close();
00189 
00190   _decoder->reset();
00191   
00192   return true;
00193 }

MSG::Level decoder_base::get_verbosity (  )  const [inline, inherited]

Getter for the verbosity level.

Definition at line 43 of file decoder_base.hh.

References decoder_base::_verbosity_level.

00043 {return _verbosity_level;};

bool decoder_manager::initialize (  )  [private]

A method to be called before run() to initialize variables.

Definition at line 44 of file decoder_manager.cc.

References _analyzers, _bin_file_iter, _bin_files, _debug_mode, _decoder, _fin, _storage, decoder_base::_verbosity, decoder_base::_verbosity_level, MSG::DEBUG, MSG::ERROR, storage_manager::is_open(), bin_io_handler::is_open(), storage_manager::is_ready_io(), storage_manager::open(), bin_io_handler::open(), Message::send(), algo_base::set_debug_mode(), bin_io_handler::set_filename(), algo_base::set_storage_ptr(), decoder_base::set_verbosity(), and MSG::WARNING.

Referenced by run().

00045 {
00046   if(_verbosity[MSG::DEBUG])
00047     Message::send(MSG::DEBUG,__FUNCTION__," begins...");
00048   if(!_decoder){
00049     Message::send(MSG::ERROR,__FUNCTION__,"Algorithm not attached. Aborting.");
00050     return false;
00051   }
00052   if(!_storage){
00053     Message::send(MSG::ERROR,__FUNCTION__,"Stoarge I/O pointer is empty.");
00054     return false;
00055   }
00056 
00057   _decoder->set_debug_mode(_debug_mode);
00058   _decoder->set_verbosity(_verbosity_level);
00059   _storage->set_verbosity(_verbosity_level);
00060   _fin.set_verbosity(_verbosity_level);
00061 
00062   if(_bin_files.size())
00063     _bin_file_iter = _bin_files.begin();
00064 
00065   _fin.set_filename((*_bin_file_iter).c_str());
00066 
00067   bool status=true;
00068   // Check if a file can be opened
00069   if(_fin.is_open())
00070     Message::send(MSG::WARNING,"Reading alrady-opened file contents!");
00071   else if(!_fin.open()) {
00072     Message::send(MSG::ERROR,__FUNCTION__,"Failed file I/O...");
00073     status=false;
00074   }
00075 
00076   if(!_storage->is_open())
00077     _storage->open();
00078 
00079   if(!_storage->is_ready_io()) {
00080     Message::send(MSG::ERROR,__FUNCTION__,
00081           "Error in data output stream preparation.");
00082     status=false;
00083   }
00084 
00085  _decoder->set_storage_ptr(_storage);
00086 
00087   for(std::vector<ana_base*>::iterator iter(_analyzers.begin());
00088       iter!=_analyzers.end();
00089       ++iter)
00090     status = (status && (*iter)->initialize());
00091 
00092   return status;
00093 }

bool decoder_manager::open_file (  )  [private]

A method to open input/output files.

Definition at line 38 of file decoder_manager.cc.

References _fin, and bin_io_handler::open().

00039 {
00040   return _fin.open();
00041 }

void decoder_manager::reset (  ) 

A method to initialize members for new decoding process.

Definition at line 29 of file decoder_manager.cc.

References _bin_files, _fin, _storage, storage_manager::close(), storage_manager::is_open(), bin_io_handler::reset(), and storage_manager::reset().

Referenced by main().

00029                             {
00030   if(_storage->is_open()) {
00031     _storage->close();
00032     _storage->reset();
00033   }
00034   _fin.reset();
00035   _bin_files.clear();
00036 }

bool decoder_manager::run (  ) 

A method to start a batch decoding process.

Definition at line 195 of file decoder_manager.cc.

References decoder_base::_verbosity, MSG::DEBUG, decode(), finalize(), initialize(), and Message::send().

Referenced by main().

00195                           {
00196 
00197   if(_verbosity[MSG::DEBUG])
00198     Message::send(MSG::DEBUG,__FUNCTION__," begins...");
00199 
00200   bool status=true;
00201   if(initialize())
00202     status=decode();
00203   return (finalize() && status);
00204   
00205 }

void decoder_manager::set_data_to_write ( DATA_STRUCT::DATA_TYPE  type,
bool  write = true 
) [inline]

Definition at line 50 of file decoder_manager.hh.

References _storage, and storage_manager::set_data_to_write().

Referenced by main().

00051   {_storage->set_data_to_write(type,write);};

void decoder_manager::set_decoder ( algo_base algo  )  [inline]

Setter for the decoding algorithm.

Definition at line 57 of file decoder_manager.hh.

References _decoder.

Referenced by main().

00057 {_decoder=algo;};

void decoder_manager::set_format ( FORMAT::INPUT_FILE  fmt  )  [inline]

Setter for the input file format.

Definition at line 54 of file decoder_manager.hh.

References _fin, and bin_io_handler::set_format().

Referenced by main().

00054 {_fin.set_format(fmt);};

void decoder_manager::set_output_filename ( std::string  name  )  [inline]

Setter for the output filename.

Definition at line 48 of file decoder_manager.hh.

References _storage, and storage_manager::set_out_filename().

Referenced by main().

00048 { _storage->set_out_filename(name);};

void decoder_manager::set_read_block_size ( size_t  n  )  [inline]

A method to set the size of block-read (in terms of number of 32-bit words.

Note that one does not have to set this variable. If unset (=default value of 0), then it assumes the input file holds a 32-bit word at the beginning of each block that should represent # of 32-bit words to be read in that particular block.

Definition at line 77 of file decoder_manager.hh.

References _read_block_size.

00077 {_read_block_size=n;};

void decoder_manager::set_read_by_block ( bool  doit = true  )  [inline]

A method to enable block-read for an input binary/ascii file.

Definition at line 69 of file decoder_manager.hh.

References _read_by_block.

00069 {_read_by_block=doit;};

void decoder_base::set_verbosity ( MSG::Level  level  )  [inherited]

Setter for the verbosity level.

Reimplemented in ana_processor.

Definition at line 11 of file decoder_base.cc.

References decoder_base::_verbosity, decoder_base::_verbosity_level, MSG::DEBUG, MSG::ERROR, MSG::INFO, MSG::MSG_TYPE_MAX, MSG::NORMAL, and MSG::WARNING.

Referenced by algo_slow_readout_decoder::algo_slow_readout_decoder(), compare_content(), decoder_base::decoder_base(), decoder_manager(), initialize(), main(), xmit_event_search::run(), bin_word_search::run(), and ana_processor::set_verbosity().

00011                                               {
00012 
00013   _verbosity_level=level;
00014 
00015   for(size_t i=(size_t)(MSG::DEBUG); i<(size_t)(MSG::MSG_TYPE_MAX); ++i)
00016     _verbosity[i]=false;
00017 
00018   switch(level){
00019   case MSG::DEBUG:
00020     _verbosity[MSG::DEBUG]=true;
00021   case MSG::INFO:
00022     _verbosity[MSG::INFO]=true;
00023   case MSG::NORMAL:
00024     _verbosity[MSG::NORMAL]=true;
00025   case MSG::WARNING:
00026     _verbosity[MSG::WARNING]=true;
00027   case MSG::ERROR:
00028     _verbosity[MSG::ERROR]=true;
00029   case MSG::MSG_TYPE_MAX:
00030     break;
00031   }
00032 
00033 }


Member Data Documentation

std::vector<ana_base*> decoder_manager::_analyzers [private]

A collection of analyzers to be run.

Definition at line 98 of file decoder_manager.hh.

Referenced by finalize(), and initialize().

std::vector<std::string>::iterator decoder_manager::_bin_file_iter [private]

Definition at line 105 of file decoder_manager.hh.

Referenced by decode(), and initialize().

std::vector<std::string> decoder_manager::_bin_files [private]

Definition at line 104 of file decoder_manager.hh.

Referenced by add_input_filename(), decode(), initialize(), and reset().

char decoder_base::_buf[200] [protected, inherited]

char buffer for message manipulation

Definition at line 46 of file decoder_base.hh.

Referenced by reco_wf::analyze(), pulse_viewer::analyze(), algo_slow_readout_decoder::check_event_quality(), storage_manager::close(), bin_io_handler::close(), decode(), algo_slow_readout_decoder::decode_ch_word(), algo_pmt_xmit::decode_ch_word(), algo_slow_readout_decoder::decode_event_header(), pulse_viewer::get_waveform(), ana_processor::initialize(), pulse_viewer::next_pulse(), storage_manager::open(), bin_io_handler::open(), storage_manager::prepare_tree(), pulse_viewer::previous_pulse(), algo_slow_readout_decoder::print_adc_values(), algo_tpc_xmit::process_ch_word(), algo_slow_readout_decoder::process_ch_word(), algo_pmt_xmit::process_ch_word(), algo_fem_decoder_base::process_fem_header(), algo_xmit_decoder::process_header(), algo_slow_readout_decoder::process_header(), algo_slow_readout_decoder::process_word(), bin_io_handler::read_multi_word(), bin_io_handler::read_word(), and ana_processor::run().

bool decoder_manager::_debug_mode [private]

Debug mode boolean.

Definition at line 96 of file decoder_manager.hh.

Referenced by debug_mode(), decode(), decoder_manager(), and initialize().

algo_base* decoder_manager::_decoder [private]

Decoding algorithm.

Definition at line 120 of file decoder_manager.hh.

Referenced by decode(), decoder_manager(), finalize(), initialize(), and set_decoder().

bin_io_handler decoder_manager::_fin [private]

Input file I/O handler.

Definition at line 106 of file decoder_manager.hh.

Referenced by decode(), decoder_manager(), finalize(), initialize(), open_file(), reset(), and set_format().

std::string decoder_manager::_input_file [private]

Input file name.

Definition at line 103 of file decoder_manager.hh.

Referenced by decoder_manager().

std::string decoder_base::_name [protected, inherited]

class name holder

Definition at line 53 of file decoder_base.hh.

Referenced by algo_base::algo_base(), algo_fem_decoder_base::algo_fem_decoder_base(), algo_fixed_window::algo_fixed_window(), algo_slow_readout_decoder::algo_slow_readout_decoder(), algo_threshold::algo_threshold(), algo_tpc_huffman::algo_tpc_huffman(), algo_trig_decoder::algo_trig_decoder(), ana_base::ana_base(), ana_processor::ana_processor(), beamgate_debugger::beamgate_debugger(), bin_io_handler::bin_io_handler(), decoder_base::class_name(), led_pulse_analyzer::led_pulse_analyzer(), led_pulse_selector::led_pulse_selector(), pmt_slow_encoder::pmt_slow_encoder(), pmtbaseline::pmtbaseline(), pmtbaseline_ana::pmtbaseline_ana(), preco_algo_base::preco_algo_base(), pulse_analyzer::pulse_analyzer(), pulse_reco::pulse_reco(), pulse_selector_base::pulse_selector_base(), pulse_selector_simple::pulse_selector_simple(), pulse_viewer::pulse_viewer(), reco_wf::reco_wf(), storage_manager::storage_manager(), and waveform_sampler::waveform_sampler().

size_t decoder_manager::_read_block_size [private]

Number of words to be read as a chunk. See _read_by_block comment for details.

Definition at line 116 of file decoder_manager.hh.

Referenced by decode(), decoder_manager(), and set_read_block_size().

bool decoder_manager::_read_by_block [private]

Read a chunk of data sample from the input file if set to true.

A chunk can be specified as number of 32-bit words through a parameter _read_block_size. If _read_block_size is 0, then it assumes the input file holds a block size at the beginning of each I/O block.

Definition at line 113 of file decoder_manager.hh.

Referenced by decode(), decoder_manager(), and set_read_by_block().

storage_manager* decoder_manager::_storage [private]

Output file I/O handler.

Definition at line 119 of file decoder_manager.hh.

Referenced by decode(), decoder_manager(), finalize(), initialize(), reset(), set_data_to_write(), and set_output_filename().

bool decoder_base::_verbosity[MSG::MSG_TYPE_MAX] [protected, inherited]

holder for enabled message levels

Definition at line 51 of file decoder_base.hh.

Referenced by reco_wf::analyze(), algo_slow_readout_decoder::check_event_quality(), storage_manager::close(), decode(), algo_slow_readout_decoder::decode_ch_word(), algo_pmt_xmit::decode_ch_word(), algo_slow_readout_decoder::decode_event_header(), algo_fem_decoder_base::decode_fem_header(), algo_trig_decoder::decode_trigger_words(), finalize(), beamgate_debugger::finalize(), ana_processor::finalize(), initialize(), beamgate_debugger::initialize(), ana_processor::initialize(), storage_manager::open(), beamgate_debugger::prepare_histo(), storage_manager::prepare_tree(), algo_tpc_xmit::process_ch_word(), algo_tpc_huffman::process_ch_word(), algo_slow_readout_decoder::process_ch_word(), algo_pmt_xmit::process_ch_word(), algo_tpc_xmit::process_event_last_word(), algo_pmt_xmit::process_event_last_word(), algo_fem_decoder_base::process_fem_header(), algo_pmt_xmit::process_fem_last_word(), algo_xmit_decoder::process_header(), algo_slow_readout_decoder::process_header(), algo_fem_decoder_base::process_word(), bin_io_handler::read_multi_word(), storage_manager::reset(), beamgate_debugger::reset(), ana_processor::reset(), run(), ana_processor::run(), decoder_base::set_verbosity(), algo_tpc_xmit::store_event(), and algo_pmt_xmit::store_event().

MSG::Level decoder_base::_verbosity_level [protected, inherited]

holder for specified verbosity level

Definition at line 52 of file decoder_base.hh.

Referenced by pulse_viewer::analyze(), decoder_base::get_verbosity(), pulse_viewer::initialize(), initialize(), ana_processor::initialize(), bin_io_handler::read_multi_word(), bin_io_handler::read_word(), and decoder_base::set_verbosity().


The documentation for this class was generated from the following files:
Generated on Mon Apr 7 15:35:13 2014 for MyProject by  doxygen 1.4.7