#include <algo_tpc_xmit.hh>
Inheritance diagram for algo_tpc_xmit:

Public Member Functions | |
| algo_tpc_xmit () | |
| Default constructor. | |
| virtual | ~algo_tpc_xmit () |
| Default destructor. | |
| virtual PMT::PMT_WORD | get_word_class (const PMT::word_t word) const |
| Override of algo_base::get_word_class method. | |
| virtual bool | process_word (const PMT::word_t word) |
| Implementation of algo_base::process_word. | |
| PMT::word_t | round_diff (PMT::word_t ref_id, PMT::word_t subject_id, PMT::word_t diff) const |
| A simple round-diff algorithm for binary words. | |
| virtual bool | is_event_empty () |
| A simple method to inquire if the data storage buffer is currently empty or not. | |
| virtual void | finalize () |
| Function called just after processing word. | |
| void | set_debug_mode (bool doit) |
| Run utility: set debug mode. Children class defines what-to-do in debug mode. | |
| void | set_storage_ptr (storage_manager *storage) |
| Expects a storage pointer to be provided from a parent class. | |
| virtual void | set_backtrace_mode (size_t nwords=0) |
| Run utility: set back-trace mode. One should provide number of words to be stored. | |
| size_t | backtrace_mode () const |
| Getter for backtrace mode (returns # words specified to store. 0=no backtrace). | |
| void | backtrace () const |
| Function to print out stored words in buffer for back-trace purpose. | |
| 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 Member Functions | |
| virtual bool | check_event_quality () |
| Implementation of algo_base::check_event_quality. | |
| virtual void | clear_event () |
| A method to clear event-wise data. | |
| bool | store_event () |
| A method to store event-wise data. | |
| bool | decode_ch_word (const PMT::word_t word, PMT::word_t &last_word) |
| virtual void | reset () |
| Override function to reset the instance. | |
| virtual bool | is_compressed (const PMT::word_t word) |
| virtual bool | process_event_header (const PMT::word_t word, PMT::word_t &last_word) |
| A method to process 32-bit event header word. | |
| virtual bool | process_ch_word (const PMT::word_t word, PMT::word_t &last_word) |
| A method to process 16-bit channel word. | |
| virtual bool | process_fem_last_word (const PMT::word_t word, PMT::word_t &last_word) |
| A method to process 32-bit end-of-fem word. | |
| virtual bool | process_event_last_word (const PMT::word_t word, PMT::word_t &last_word) |
| A method to process 32-bit end-of-event word. | |
| virtual bool | process_fem_header (const PMT::word_t word, PMT::word_t &last_word) |
| A method to process FEM header word passed from process_word method. | |
| virtual bool | decode_fem_header (const PMT::word_t *event_header) |
| A method to decode fem header word passed from process_header. | |
| virtual bool | add_huffman_adc (std::vector< UShort_t > &wf, size_t zero_count) |
| virtual void | init_checker_info () |
| Function to initialize checker information. | |
Protected Attributes | |
| tpc_waveform | _ch_data |
| tpc_wf_collection * | _event_data |
| PMT::word_t | _event_header_words [FEM_HEADER_COUNT] |
| Event header word holder. | |
| PMT::word_t | _last_word |
| Last word processed. | |
| size_t | _event_header_count |
| A counter for event header words. | |
| bool | _search_for_next_event |
| A run control boolean: skips any action till it finds the new event header. | |
| InfoFEM_t | _header_info |
| bool | _debug_mode |
| Debug mode boolean holder. | |
| bool | _bt_mode |
| Back-trace mode boolean holder. | |
| storage_manager * | _storage |
| Data storage pointer to be provided by a parent process. | |
| PMT::word_t | _checksum |
| data checksum | |
| PMT::word_t | _nwords |
| number of data word counts processed | |
| std::deque< PMT::word_t > | _bt_words |
| processed words to be stored event-wise for back-trace purpose | |
| size_t | _bt_nwords |
| user defined # of words to be temporarily stored in the buffer | |
| bool | _bt_nwords_filled |
| run utility boolean to keep a recored of filled buffer | |
| 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 | |
Static Protected Attributes | |
| static const size_t | FEM_HEADER_COUNT = 6 |
| Number of event header words. | |
| static const size_t | BEAM_REF_CHANNEL = 39 |
| Defines a reference channel for beamgate. | |
| static const size_t | BEAM_NWORDS = 21 |
| Defines # of minimum words to identify beamgate event. | |
| static const size_t | FRAME_WIDTH = 8192 |
| Defines # of ADC samples per readout frame. | |
There're lots of common things among PMT/TPC XMIT decoder, and ideally this class inherits from that of PMT. This is purely historical reason that I decided to develop this as a separate class w/o making such inheritance. It turned out PMT has a lot more information (not data volume) than TPC. It does not make sense to let TPC decoder class inherit from PMT decoder class (as TPC decoder is simpler). This calls for a design review. For now, I omit this design issue and go ahead to implement a working version of tpc decoder.
It expects a stream of 32-bit words (ordered) to be fed into process_word method. This class takes care of decoding & grouping channel/event wise data & storing them.
Definition at line 36 of file algo_tpc_xmit.hh.
| algo_tpc_xmit::algo_tpc_xmit | ( | ) |
Default constructor.
Definition at line 7 of file algo_tpc_xmit.cc.
References reset().
00008 : algo_fem_decoder_base() 00009 { 00010 //######################################### 00011 00012 reset(); 00013 00014 }
| virtual algo_tpc_xmit::~algo_tpc_xmit | ( | ) | [inline, virtual] |
| bool algo_fem_decoder_base::add_huffman_adc | ( | std::vector< UShort_t > & | wf, | |
| size_t | zero_count | |||
| ) | [protected, virtual, inherited] |
Definition at line 396 of file algo_fem_decoder_base.cc.
Referenced by decode_ch_word().
00397 { 00398 //################################################# 00399 00400 bool status = true; 00401 00402 switch(zero_count){ 00403 00404 case 0: 00405 wf.push_back( (*(wf.rbegin())) ); break; 00406 00407 case 1: 00408 wf.push_back( (*(wf.rbegin())) -1 ); break; 00409 00410 case 2: 00411 wf.push_back( (*(wf.rbegin())) +1 ); break; 00412 00413 case 3: 00414 wf.push_back( (*(wf.rbegin())) -2 ); break; 00415 00416 case 4: 00417 wf.push_back( (*(wf.rbegin())) +2 ); break; 00418 00419 case 5: 00420 wf.push_back( (*(wf.rbegin())) -3 ); break; 00421 00422 case 6: 00423 wf.push_back( (*(wf.rbegin())) +3 ); break; 00424 00425 default: 00426 00427 std::cout<<zero_count<<std::endl; 00428 00429 status = false; 00430 } 00431 00432 return status; 00433 00434 }
| void algo_base::backtrace | ( | ) | const [inline, inherited] |
Function to print out stored words in buffer for back-trace purpose.
Definition at line 82 of file algo_base.hh.
References algo_base::_bt_words, Message::send(), and MSG::WARNING.
Referenced by algo_tpc_huffman::process_word(), and algo_fem_decoder_base::process_word().
00083 { 00084 Message::send(MSG::WARNING,__FUNCTION__,"Dumping a backtrace..."); 00085 int ctr=1; 00086 for(std::deque<PMT::word_t>::const_iterator iter(_bt_words.begin()); 00087 iter!=_bt_words.end(); 00088 ++iter) { 00089 printf("%08x ",(*iter)); 00090 if(ctr%8==0 && ctr) std::cout<<std::endl; 00091 ctr++; 00092 } 00093 std::cout<<std::endl<<std::endl; 00094 };
| size_t algo_base::backtrace_mode | ( | ) | const [inline, inherited] |
Getter for backtrace mode (returns # words specified to store. 0=no backtrace).
Definition at line 71 of file algo_base.hh.
References algo_base::_bt_nwords.
00071 {return _bt_nwords;};
| bool algo_tpc_xmit::check_event_quality | ( | ) | [protected, virtual] |
Implementation of algo_base::check_event_quality.
Reimplemented from algo_fem_decoder_base.
Definition at line 179 of file algo_tpc_xmit.cc.
References algo_base::_checksum, algo_fem_decoder_base::_header_info, algo_base::_nwords, MSG::ERROR, and Message::send().
Referenced by store_event().
00179 { 00180 //######################################################### 00181 00182 bool status = true; 00183 00184 // Check if _checksum and _nwords agrees with that of event header. 00185 //if(_nwords != _header_info.nwords) { 00186 _nwords-=1; 00187 if(_nwords!=_header_info.nwords){ 00188 00189 Message::send(MSG::ERROR,__FUNCTION__, 00190 Form("Disagreement on nwords: counted=%u, expected=%u",_nwords,_header_info.nwords)); 00191 00192 status = false; 00193 00194 } 00195 00196 //if(_checksum != _header_info.checksum) { 00197 if((_checksum & 0xffffff) !=_header_info.checksum){ 00198 00199 Message::send(MSG::ERROR,__FUNCTION__, 00200 Form("Disagreement on checksum: summed=%x, expected=%x",_checksum,_header_info.checksum)); 00201 00202 status = false; 00203 00204 } 00205 00206 return status; 00207 00208 }
| 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 algo_tpc_xmit::clear_event | ( | ) | [protected, virtual] |
A method to clear event-wise data.
Reimplemented from algo_fem_decoder_base.
Reimplemented in algo_tpc_huffman.
Definition at line 279 of file algo_tpc_xmit.cc.
References _ch_data, _event_data, tpc_wf_collection::clear_data(), and algo_fem_decoder_base::clear_event().
Referenced by algo_tpc_huffman::clear_event(), process_ch_word(), and store_event().
00279 { 00280 //######################################################### 00281 00282 algo_fem_decoder_base::clear_event(); 00283 00284 _event_data->clear_data(); 00285 00286 _ch_data.clear(); 00287 00288 }
| bool algo_tpc_xmit::decode_ch_word | ( | const PMT::word_t | word, | |
| PMT::word_t & | last_word | |||
| ) | [protected] |
Definition at line 333 of file algo_tpc_xmit.cc.
References _ch_data, algo_fem_decoder_base::add_huffman_adc(), MSG::ERROR, is_compressed(), and Message::send().
Referenced by process_ch_word(), and algo_tpc_huffman::process_ch_word().
00335 { 00336 //######################################################### 00337 00338 bool status = true; 00339 // Simply append if it is not compressed 00340 if( !(is_compressed(word)) ) _ch_data.push_back( (word & 0xfff) ); 00341 00342 else if(!(_ch_data.size())){ 00343 00344 // This is a problem: if huffman coded, then we must have a previous ADC sample 00345 // as a reference. Raise an error. 00346 00347 Message::send(MSG::ERROR,__FUNCTION__, 00348 Form("Huffman coded word %x found while the previous was non-ADC word (%x)!", 00349 word,last_word)); 00350 00351 status = false; 00352 00353 } 00354 else{ 00355 00356 // Compresed data is in last 15 bit of this word. 00357 PMT::word_t data = (word & 0x7fff); 00358 00359 // The compression is based on an extremely simple Huffman encoding. 00360 // The Huffman tree used here assigns the following values: 00361 // 00362 // Value Code 00363 // +3 0000001 00364 // +2 00001 00365 // +1 001 00366 // +0 1 00367 // -1 01 00368 // -2 0001 00369 // -3 000001 00370 00371 /* 00372 size_t zero_count = 0; 00373 for(size_t index=0; index<15 && status; ++index){ 00374 00375 if( !((data >> index) & 0x1) ) zero_count++; 00376 else{ 00377 00378 switch(zero_count){ 00379 00380 case 0: 00381 _ch_data.push_back( (*(_ch_data.rbegin())) ); break; 00382 00383 case 1: 00384 _ch_data.push_back( (*(_ch_data.rbegin())) -1 ); break; 00385 00386 case 2: 00387 _ch_data.push_back( (*(_ch_data.rbegin())) +1 ); break; 00388 00389 case 3: 00390 _ch_data.push_back( (*(_ch_data.rbegin())) -2 ); break; 00391 00392 case 4: 00393 _ch_data.push_back( (*(_ch_data.rbegin())) +2 ); break; 00394 00395 case 5: 00396 _ch_data.push_back( (*(_ch_data.rbegin())) -3 ); break; 00397 00398 case 6: 00399 _ch_data.push_back( (*(_ch_data.rbegin())) +3 ); break; 00400 00401 default: 00402 Message::send(MSG::ERROR,__FUNCTION__, 00403 Form("Encountered unexpected number of zeros (=%zu) in the compressed word %x!", 00404 zero_count,word)); 00405 status = false; 00406 }; 00407 00408 zero_count=0; 00409 } 00410 } 00411 */ 00412 00413 size_t zero_count = 0; 00414 bool non_zero_found = false; 00415 for(size_t index=0; index<15 && status; ++index){ 00416 00417 if( !((data >> index) & 0x1) ) 00418 00419 zero_count += ( non_zero_found ? 1 : 0 ); 00420 00421 else{ 00422 00423 if(!non_zero_found) non_zero_found=true; 00424 00425 else status = add_huffman_adc(_ch_data,zero_count); 00426 00427 if(status) zero_count=0; 00428 } 00429 } 00430 00431 if(zero_count && status){ 00432 00433 status = add_huffman_adc(_ch_data,zero_count); 00434 00435 } 00436 00437 if(!status) 00438 00439 Message::send(MSG::ERROR,__FUNCTION__, 00440 Form("Encountered unexpected number of zeros (=%zu) in the compressed word %x!", 00441 zero_count,word)); 00442 00443 } 00444 00445 return status; 00446 00447 }
| bool algo_fem_decoder_base::decode_fem_header | ( | const PMT::word_t * | event_header | ) | [protected, virtual, inherited] |
A method to decode fem header word passed from process_header.
Definition at line 295 of file algo_fem_decoder_base.cc.
References algo_base::_checksum, algo_fem_decoder_base::_header_info, algo_base::_nwords, decoder_base::_verbosity, algo_fem_decoder_base::InfoFEM_t::checksum, algo_fem_decoder_base::InfoFEM_t::clear_event(), MSG::ERROR, algo_fem_decoder_base::InfoFEM_t::event_frame_id, algo_fem_decoder_base::InfoFEM_t::event_id, MSG::INFO, algo_fem_decoder_base::InfoFEM_t::module_address, algo_fem_decoder_base::InfoFEM_t::module_id, algo_fem_decoder_base::InfoFEM_t::nwords, algo_fem_decoder_base::round_diff(), Message::send(), algo_fem_decoder_base::InfoFEM_t::trigger_frame_id, and algo_fem_decoder_base::InfoFEM_t::trigger_timeslice.
Referenced by algo_tpc_huffman::process_fem_header(), and algo_fem_decoder_base::process_fem_header().
00295 { 00296 //################################################# 00297 00298 bool status=true; 00299 // 00300 // Get event information 00301 // 00302 00303 // (1) check if the very first 16-bit word is as expected 00304 if(!( event_header[0] & 0xffff)) 00305 Message::send(MSG::ERROR,"Unexpected first word in event headers!"); 00306 00307 if(!status) return status; 00308 00309 // Initialize data holder 00310 _header_info.clear_event(); 00311 00312 // (2) get module address ... lowest 5 of 12 bits 00313 _header_info.module_address = ( (event_header[0]>>16 & 0xfff) & 0x1f); 00314 00315 // (3) get module ID number ... upper 7 bit of 12 bits 00316 _header_info.module_id = ( (event_header[0]>>16 & 0xfff)>>5 & 0x7f); 00317 00318 // (4) get number of 16-bit words to be read in this event. 00319 // Lower 12 bits of two 16-bit words. 00320 // The very last "last word for channel info" is not included in this. 00321 // For later checking purpose, increment by 1. 00322 _header_info.nwords = ( (((event_header[1]>>16) & 0xfff) + ((event_header[1] & 0xfff)<<12))); 00323 00324 // (5) get event ID 00325 // Lower 12 bits of two 16-bit words. 00326 _header_info.event_id = ( (((event_header[2]>>16) & 0xfff) + ((event_header[2] & 0xfff)<<12))); 00327 00328 // (6) get frame ID 00329 // Lower 12 bits of two 16-bit words. 00330 _header_info.event_frame_id = ( (((event_header[3]>>16) & 0xfff) + ((event_header[3] & 0xfff)<<12))); 00331 00332 // (7) get checksum 00333 _header_info.checksum = ( (((event_header[4]>>16) & 0xfff) + ((event_header[4] & 0xfff)<<12))); 00334 00335 00336 #ifdef INCLUDE_EXTRA_HEADER 00337 _header_info.trigger_frame_id = ( ((event_header[5] & 0xfff)>>4 & 0xf) + 00338 (((_header_info.event_frame_id)>>4)<<4)); 00339 00340 // Correct for a roll over 00341 _header_info.trigger_frame_id = round_diff(_header_info.event_frame_id, _header_info.trigger_frame_id, 0x7); 00342 00343 _header_info.trigger_timeslice = ((((event_header[5]>>16) & 0xf)<<8) + (event_header[5] & 0xff)); 00344 00345 #endif 00346 00347 // Report if verbosity is set. 00348 if(_verbosity[MSG::INFO]) 00349 { 00350 Message::send(MSG::INFO,Form("Module %d (ID=%d)", _header_info.module_address, _header_info.module_id)); 00351 Message::send(MSG::INFO,Form("Event ID %d",_header_info.event_id)); 00352 Message::send(MSG::INFO,Form("Frame ID %d",_header_info.event_frame_id)); 00353 Message::send(MSG::INFO,Form("Number of Words = %d",_header_info.nwords)); 00354 Message::send(MSG::INFO,Form("Checksum = %x", _header_info.checksum)); 00355 Message::send(MSG::INFO,Form("Trigger Frame %d",_header_info.trigger_frame_id)); 00356 Message::send(MSG::INFO,Form("Trigger Sample %d",_header_info.trigger_timeslice)); 00357 } 00358 00359 _checksum=0; 00360 00361 _nwords=0; 00362 00363 return status; 00364 }
| virtual void algo_base::finalize | ( | ) | [inline, virtual, inherited] |
| 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;};
| virtual PMT::PMT_WORD algo_tpc_xmit::get_word_class | ( | const PMT::word_t | word | ) | const [inline, virtual] |
Override of algo_base::get_word_class method.
Reimplemented from algo_fem_decoder_base.
Reimplemented in algo_tpc_huffman.
Definition at line 48 of file algo_tpc_xmit.hh.
References PMT::CHANNEL_HEADER, PMT::CHANNEL_LAST_WORD, PMT::CHANNEL_WORD, PMT::EVENT_HEADER, PMT::EVENT_LAST_WORD, PMT::FEM_HEADER, and PMT::UNDEFINED_WORD.
Referenced by process_ch_word(), and process_event_header().
00048 { 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 };
| void algo_base::init_checker_info | ( | ) | [protected, virtual, inherited] |
Function to initialize checker information.
Definition at line 6 of file algo_base.cc.
References algo_base::_checksum, and algo_base::_nwords.
Referenced by algo_slow_readout_decoder::init_event_info(), algo_trig_decoder::reset(), and algo_base::reset().
| virtual bool algo_tpc_xmit::is_compressed | ( | const PMT::word_t | word | ) | [inline, protected, virtual] |
| virtual bool algo_fem_decoder_base::is_event_empty | ( | ) | [inline, virtual, inherited] |
A simple method to inquire if the data storage buffer is currently empty or not.
Implements algo_base.
Definition at line 107 of file algo_fem_decoder_base.hh.
References algo_fem_decoder_base::_header_info, algo_fem_decoder_base::InfoFEM_t::event_id, and PMT::INVALID_WORD.
00107 { return (_header_info.event_id == PMT::INVALID_WORD);};
| bool algo_tpc_xmit::process_ch_word | ( | const PMT::word_t | word, | |
| PMT::word_t & | last_word | |||
| ) | [protected, virtual] |
A method to process 16-bit channel word.
Implements algo_fem_decoder_base.
Reimplemented in algo_tpc_huffman.
Definition at line 29 of file algo_tpc_xmit.cc.
References decoder_base::_buf, _ch_data, algo_base::_checksum, _event_data, algo_base::_nwords, decoder_base::_verbosity, PMT::CHANNEL_HEADER, PMT::CHANNEL_LAST_WORD, tpc_waveform::channel_number(), PMT::CHANNEL_WORD, tpc_waveform::clear_data(), clear_event(), MSG::DEBUG, decode_ch_word(), MSG::ERROR, PMT::EVENT_HEADER, PMT::EVENT_LAST_WORD, PMT::FEM_FIRST_WORD, PMT::FEM_HEADER, PMT::FEM_LAST_WORD, get_word_class(), Message::send(), tpc_waveform::set_channel_number(), and PMT::UNDEFINED_WORD.
00031 { 00032 //######################################### 00033 00034 bool status=true; 00035 00036 if(_verbosity[MSG::DEBUG]){ 00037 sprintf(_buf,"Processing ch-word: %x",word); 00038 Message::send(MSG::DEBUG,__FUNCTION__,_buf); 00039 } 00040 00041 PMT::PMT_WORD word_class=get_word_class(word); 00042 PMT::PMT_WORD last_word_class=get_word_class(last_word); 00043 00044 switch(word_class){ 00045 00046 case PMT::CHANNEL_HEADER: 00047 00048 // 00049 // Check if the last word was event header or channel last word 00050 // 00051 if(last_word_class == PMT::FEM_HEADER || 00052 last_word_class == PMT::CHANNEL_LAST_WORD ) { 00053 00054 // New data starts here. 00055 // Clear data content & assign channel number. 00056 _ch_data.clear_data(); 00057 00058 _ch_data.set_channel_number( (word & 0xfff) ); 00059 00060 if(_verbosity[MSG::DEBUG]) 00061 00062 Message::send(MSG::DEBUG,__FUNCTION__, 00063 Form("New channel header: %d",_ch_data.channel_number())); 00064 00065 }else{ 00066 00067 Message::send(MSG::ERROR,__FUNCTION__, 00068 Form("Unexpected channel header (%x)! Last word = %x",word,last_word)); 00069 00070 status = false; 00071 00072 } 00073 00074 break; 00075 00076 case PMT::CHANNEL_LAST_WORD: 00077 00078 // 00079 // Check if the last word was channel word 00080 // 00081 if(last_word_class == PMT::CHANNEL_WORD) { 00082 00083 // Check if the channel number in this ch-last-word agrees with that in the header 00084 PMT::ch_number_t ch( (word & 0xfff) ); 00085 00086 if(ch == _ch_data.channel_number()) { 00087 00088 if(_verbosity[MSG::DEBUG]) 00089 00090 Message::send(MSG::DEBUG,__FUNCTION__, 00091 Form("Finished reading %zu samples for Ch %d", 00092 _ch_data.size(),_ch_data.channel_number())); 00093 00094 // Store 00095 _event_data->push_back(_ch_data); 00096 00097 _ch_data.clear_data(); 00098 00099 }else{ 00100 00101 Message::send(MSG::ERROR,__FUNCTION__, 00102 Form("Ch. number disagreement! Header: %u ... Last: %u!", 00103 _ch_data.channel_number(),ch) ); 00104 00105 status = false; 00106 00107 } 00108 00109 } 00110 else{ 00111 00112 Message::send(MSG::ERROR,__FUNCTION__, 00113 Form("Unexpected channel ending (%x)! Last word = %x",word,last_word)); 00114 00115 status = false; 00116 00117 } 00118 00119 break; 00120 00121 case PMT::CHANNEL_WORD: 00122 00123 // 00124 // Check if the last word was channel header or channel adc word 00125 // 00126 if(last_word_class == PMT::CHANNEL_HEADER || 00127 last_word_class == PMT::CHANNEL_WORD){ 00128 00129 status = decode_ch_word(word,last_word); 00130 00131 }else{ 00132 00133 Message::send(MSG::ERROR,__FUNCTION__, 00134 Form("Unexpected channel word (%x)! Last word = %x",word,last_word)); 00135 00136 status = false; 00137 00138 } 00139 00140 break; 00141 00142 case PMT::EVENT_LAST_WORD: 00143 case PMT::FEM_LAST_WORD: 00144 case PMT::UNDEFINED_WORD: 00145 case PMT::EVENT_HEADER: 00146 case PMT::FEM_HEADER: 00147 case PMT::FEM_FIRST_WORD: 00148 00149 Message::send(MSG::ERROR,__FUNCTION__, 00150 Form("Unexpected word found while channel word processing: %x",word)); 00151 00152 status = false; 00153 00154 break; 00155 } 00156 00157 // If processing of this word is successful, add it to the checksum 00158 if(status) { 00159 00160 _nwords++; 00161 _checksum += word; 00162 //std::cout<<_nwords<<" ... "<<_checksum<<std::endl; 00163 }else{ 00164 00165 Message::send(MSG::ERROR,__FUNCTION__, 00166 Form("Failed processing channel word %x (previous=%x)",word,last_word)); 00167 00168 clear_event(); 00169 } 00170 00171 if(word_class != PMT::UNDEFINED_WORD) 00172 00173 last_word = word; 00174 00175 return status; 00176 }
| bool algo_tpc_xmit::process_event_header | ( | const PMT::word_t | word, | |
| PMT::word_t & | last_word | |||
| ) | [protected, virtual] |
A method to process 32-bit event header word.
Implements algo_fem_decoder_base.
Reimplemented in algo_tpc_huffman.
Definition at line 213 of file algo_tpc_xmit.cc.
References _event_data, algo_base::_storage, MSG::ERROR, PMT::EVENT_LAST_WORD, storage_manager::get_data(), get_word_class(), PMT::INVALID_WORD, Message::send(), store_event(), and DATA_STRUCT::TPC_WF_COLLECTION.
00215 { 00216 //################################################# 00217 00218 bool status = true; 00219 00220 if(!_event_data) 00221 00222 _event_data = (tpc_wf_collection*)(_storage->get_data(DATA_STRUCT::TPC_WF_COLLECTION)); 00223 00224 if(get_word_class(last_word)==PMT::EVENT_LAST_WORD) { 00225 00226 // Attempt to store data 00227 00228 status = store_event(); 00229 }else if(last_word != PMT::INVALID_WORD){ 00230 00231 Message::send(MSG::ERROR,__FUNCTION__, 00232 Form("Unexpected word (%x, previous=%x) while processing event header!",word,last_word)); 00233 00234 status = false; 00235 00236 } 00237 00238 last_word = word; 00239 00240 return status; 00241 00242 }
| bool algo_tpc_xmit::process_event_last_word | ( | const PMT::word_t | word, | |
| PMT::word_t & | last_word | |||
| ) | [protected, virtual] |
A method to process 32-bit end-of-event word.
Store event @ this point.
Implements algo_fem_decoder_base.
Reimplemented in algo_tpc_huffman.
Definition at line 260 of file algo_tpc_xmit.cc.
References decoder_base::_verbosity, MSG::INFO, and Message::send().
00262 { 00263 //######################################################### 00264 00265 if(_verbosity[MSG::INFO]){ 00266 00267 Message::send(MSG::INFO,__FUNCTION__, 00268 Form("End of event word: %x...",word)); 00269 00270 } 00271 00272 last_word = word; 00273 00274 return true; 00275 }
| bool algo_fem_decoder_base::process_fem_header | ( | const PMT::word_t | word, | |
| PMT::word_t & | last_word | |||
| ) | [protected, virtual, inherited] |
A method to process FEM header word passed from process_word method.
Reimplemented in algo_tpc_huffman.
Definition at line 185 of file algo_fem_decoder_base.cc.
References decoder_base::_buf, algo_base::_debug_mode, algo_fem_decoder_base::_event_header_count, algo_fem_decoder_base::_event_header_words, decoder_base::_verbosity, PMT::CHANNEL_HEADER, PMT::CHANNEL_LAST_WORD, PMT::CHANNEL_WORD, algo_fem_decoder_base::clear_event(), MSG::DEBUG, algo_fem_decoder_base::decode_fem_header(), MSG::ERROR, PMT::EVENT_HEADER, PMT::EVENT_LAST_WORD, PMT::FEM_FIRST_WORD, PMT::FEM_HEADER, algo_fem_decoder_base::FEM_HEADER_COUNT, PMT::FEM_LAST_WORD, algo_fem_decoder_base::get_word_class(), Message::send(), algo_fem_decoder_base::store_event(), PMT::UNDEFINED_WORD, and MSG::WARNING.
Referenced by algo_fem_decoder_base::process_word().
00185 { 00186 //################################################# 00187 00188 bool status=true; 00189 // 00190 // Check if this is an event header word or not 00191 // 00192 PMT::PMT_WORD word_class=get_word_class(word); 00193 if(_verbosity[MSG::DEBUG]){ 00194 sprintf(_buf,"Processing Header: %x",word); 00195 Message::send(MSG::DEBUG,__FUNCTION__,_buf); 00196 } 00197 00198 00199 if( word_class != PMT::FEM_HEADER) { 00200 00201 Message::send(MSG::ERROR,__FUNCTION__, 00202 Form("Encountered unexpected word while an event header search: %x (word type=%d)", 00203 word,word_class) ); 00204 status = false; 00205 00206 }else if(get_word_class(word>>16)!=PMT::FEM_HEADER) { 00207 00208 // Event header should come as a 32-bit word which is a pair of two 16-bit header words. 00209 // The first 16-bit is already checked by this point. Check the second part. 00210 00211 Message::send(MSG::ERROR,__FUNCTION__,Form("Found an odd event header word: %x",word)); 00212 00213 status = false; 00214 00215 } 00216 00217 if(status) { 00218 00219 // 00220 // Check the last word type 00221 // 00222 switch(get_word_class(last_word)){ 00223 case PMT::EVENT_HEADER: 00224 case PMT::FEM_HEADER: 00225 case PMT::FEM_LAST_WORD: 00226 // Expected. Nothing to do 00227 break; 00228 case PMT::FEM_FIRST_WORD: 00229 case PMT::CHANNEL_HEADER: 00230 case PMT::CHANNEL_WORD: 00231 case PMT::UNDEFINED_WORD: 00232 case PMT::EVENT_LAST_WORD: 00233 // ERROR 00234 Message::send(MSG::ERROR,__FUNCTION__, 00235 Form("Unexpected word while FEM_HEADER processing: %x (previous word=%x)",word,last_word)); 00236 status = false; 00237 break; 00238 case PMT::CHANNEL_LAST_WORD: 00239 // Store data 00240 status = store_event(); 00241 if(_debug_mode) { 00242 // We have to handle this case separately from a uniifed handling @ process_word 00243 // Because "this" header word is still good. Make a warning to a user. 00244 00245 Message::send(MSG::WARNING,__FUNCTION__,"DEBUG MODE => Continue to the next event...\n"); 00246 00247 clear_event(); 00248 00249 status = true; 00250 } 00251 break; 00252 } 00253 00254 if(status){ 00255 00256 // Process the subject word as an event header 00257 if (_event_header_count<FEM_HEADER_COUNT) { 00258 00259 // Store header words 00260 _event_header_words[_event_header_count]=word; 00261 _event_header_count++; 00262 00263 // If stored number of header words reached to the expected number, decode. 00264 if(_event_header_count==FEM_HEADER_COUNT) { 00265 00266 // Decode header words 00267 status = decode_fem_header(_event_header_words); 00268 00269 } 00270 }else{ 00271 00272 // Raise error if a header word count > set constant (should not happen) 00273 Message::send(MSG::ERROR,__FUNCTION__, 00274 Form("Logic error: event header word counter not working! (%zu/%zu)", 00275 _event_header_count,FEM_HEADER_COUNT)); 00276 status=false; 00277 } 00278 } 00279 } 00280 00281 if(!status){ 00282 00283 Message::send(MSG::ERROR,__FUNCTION__, 00284 Form("Failed processing the word %x (last word %x) as an event header!",word,last_word)); 00285 00286 } 00287 00288 last_word = word; 00289 return status; 00290 00291 }
| bool algo_tpc_xmit::process_fem_last_word | ( | const PMT::word_t | word, | |
| PMT::word_t & | last_word | |||
| ) | [protected, virtual] |
A method to process 32-bit end-of-fem word.
Nothing to be done really.
Implements algo_fem_decoder_base.
Reimplemented in algo_tpc_huffman.
Definition at line 245 of file algo_tpc_xmit.cc.
References MSG::ERROR, and Message::send().
00247 { 00248 //######################################################### 00249 00250 // This should not exist in TPC-XMIT 00251 Message::send(MSG::ERROR,__FUNCTION__, 00252 Form("FEM-LAST-WORD (%x, previous=%x) ... NOT expected for TPC!",word,last_word)); 00253 00254 last_word = word; 00255 00256 return false; 00257 }
| bool algo_fem_decoder_base::process_word | ( | const PMT::word_t | word | ) | [virtual, inherited] |
Implementation of algo_base::process_word.
Implements algo_base.
Reimplemented in algo_tpc_huffman.
Definition at line 36 of file algo_fem_decoder_base.cc.
References algo_base::_bt_mode, algo_base::_bt_nwords, algo_base::_bt_nwords_filled, algo_base::_bt_words, algo_base::_debug_mode, algo_fem_decoder_base::_header_info, algo_fem_decoder_base::_last_word, algo_fem_decoder_base::_search_for_next_event, decoder_base::_verbosity, algo_base::backtrace(), PMT::CHANNEL_HEADER, PMT::CHANNEL_LAST_WORD, PMT::CHANNEL_WORD, algo_fem_decoder_base::clear_event(), MSG::ERROR, PMT::EVENT_HEADER, algo_fem_decoder_base::InfoFEM_t::event_id, PMT::EVENT_LAST_WORD, PMT::FEM_FIRST_WORD, PMT::FEM_HEADER, PMT::FEM_LAST_WORD, algo_fem_decoder_base::get_word_class(), MSG::INFO, PMT::INVALID_WORD, algo_fem_decoder_base::process_ch_word(), algo_fem_decoder_base::process_event_header(), algo_fem_decoder_base::process_event_last_word(), algo_fem_decoder_base::process_fem_header(), algo_fem_decoder_base::process_fem_last_word(), Message::send(), PMT::UNDEFINED_WORD, and MSG::WARNING.
00038 { 00039 //std::cout<<Form("%x",word)<<std::endl; 00040 // 00041 // A simple function to call other members depending on the status. 00042 // Let other members to deal with expected/unexpected case 00043 // 00044 00045 // If in back_trace mode, add this word in record 00046 if(_bt_mode){ 00047 00048 // Check if buffer is filled 00049 if(!_bt_nwords_filled) 00050 _bt_nwords_filled = (_bt_nwords == _bt_words.size()); 00051 00052 // If filled, remove the oldest element 00053 if(_bt_nwords_filled) 00054 _bt_words.pop_front(); 00055 00056 // Add new word 00057 _bt_words.push_back(word); 00058 00059 } 00060 00061 bool status=true; 00062 PMT::word_t word_class=get_word_class(word); 00063 PMT::word_t last_word_class=get_word_class(_last_word); 00064 // 00065 // Skip this word if a boolean is set to skip to the next event header 00066 // 00067 if( _search_for_next_event && 00068 word_class == PMT::FEM_HEADER && 00069 last_word_class != PMT::FEM_HEADER ) 00070 00071 _search_for_next_event = false; 00072 00073 00074 if( _search_for_next_event ) { 00075 00076 if(_verbosity[MSG::INFO]) 00077 00078 Message::send(MSG::INFO,__FUNCTION__, 00079 Form("Skipping a word (%x, previous=%x) to the next event..",word,_last_word)); 00080 00081 _last_word = PMT::INVALID_WORD; 00082 00083 return true; 00084 } 00085 00086 switch(word_class){ 00087 00088 case PMT::EVENT_HEADER: 00089 00090 // (1) Call process_event_header() 00091 status = process_event_header(word,_last_word); 00092 break; 00093 00094 case PMT::FEM_HEADER: 00095 00096 // (1) Check if the last word was EVENT_HEADER, FEM_HEADER, or EVENT_LAST_WORD 00097 // - If EVENT_HEADER, continue to (2) 00098 // - If FEM_HEADER, continue to (2) 00099 // - If EVENT_LAST_WORD, attempt to store & continue to (2) 00100 // (2) Call process_fem_header() 00101 status = process_fem_header(word,_last_word); 00102 break; 00103 00104 case PMT::FEM_FIRST_WORD: 00105 case PMT::CHANNEL_HEADER: 00106 case PMT::CHANNEL_WORD: 00107 case PMT::CHANNEL_LAST_WORD: 00108 case PMT::FEM_LAST_WORD: 00109 { 00110 // (1) Call process_ch_word() 00111 // - Children class should implement what should be checked in correlation to the last word. 00112 00113 // Split two 16 bit words 00114 PMT::word_t first_word = (word & 0xffff); 00115 PMT::word_t second_word = (word >> 16); 00116 00117 if(status) status = process_ch_word(first_word,_last_word); 00118 00119 // Check if the left 16-bit word is also the relevant type or not 00120 if(status){ 00121 00122 switch(get_word_class(second_word)){ 00123 case PMT::FEM_FIRST_WORD: 00124 case PMT::CHANNEL_HEADER: 00125 case PMT::CHANNEL_WORD: 00126 case PMT::CHANNEL_LAST_WORD: 00127 status = process_ch_word(second_word,_last_word); 00128 break; 00129 case PMT::FEM_LAST_WORD: 00130 status = process_fem_last_word(second_word,_last_word); 00131 break; 00132 default: 00133 status = false; 00134 Message::send(MSG::ERROR,__FUNCTION__, 00135 Form("Unexpected word (%x) while processing channel data (previous=%x)",second_word,first_word)); 00136 } 00137 00138 } 00139 break; 00140 } 00141 case PMT::EVENT_LAST_WORD: 00142 // (1) Call process_event_last_word() 00143 status = process_event_last_word(word,_last_word); 00144 break; 00145 00146 case PMT::UNDEFINED_WORD: 00147 00148 00149 if(word != 0x0 || (last_word_class != PMT::EVENT_LAST_WORD && last_word_class != PMT::FEM_LAST_WORD) ) { 00150 00151 Message::send(MSG::ERROR,__FUNCTION__, 00152 Form("Undefined word: %x (previous = %x)",word,_last_word)); 00153 00154 status = false; 00155 }else if(_verbosity[MSG::INFO]){ 00156 00157 // This happens sometimes according to Chi 10/01/13 00158 Message::send(MSG::INFO,__FUNCTION__, 00159 Form("Padding of undefined word (tolerated): %x (previous=%x)",word,_last_word)); 00160 } 00161 break; 00162 } 00163 00164 if(!status){ 00165 00166 backtrace(); 00167 00168 if(_debug_mode) { 00169 00170 if(_header_info.event_id>0) 00171 00172 Message::send(MSG::WARNING,__FUNCTION__,Form("Failed decoding event %d ...",_header_info.event_id)); 00173 00174 Message::send(MSG::WARNING,__FUNCTION__,"DEBUG MODE => Continue to the next event...\n"); 00175 00176 _search_for_next_event = true; 00177 clear_event(); 00178 } 00179 } 00180 00181 return status; 00182 }
| void algo_tpc_xmit::reset | ( | ) | [protected, virtual] |
Override function to reset the instance.
Reimplemented from algo_fem_decoder_base.
Reimplemented in algo_tpc_huffman.
Definition at line 17 of file algo_tpc_xmit.cc.
References _ch_data, _event_data, tpc_waveform::clear_data(), and algo_fem_decoder_base::reset().
Referenced by algo_tpc_xmit(), and algo_tpc_huffman::reset().
00017 { 00018 //######################################### 00019 00020 _event_data = 0; 00021 00022 _ch_data.clear_data(); 00023 00024 algo_fem_decoder_base::reset(); 00025 00026 }
| PMT::word_t algo_fem_decoder_base::round_diff | ( | PMT::word_t | ref_id, | |
| PMT::word_t | subject_id, | |||
| PMT::word_t | diff | |||
| ) | const [inherited] |
A simple round-diff algorithm for binary words.
Definition at line 368 of file algo_fem_decoder_base.cc.
Referenced by algo_pmt_xmit::decode_ch_word(), and algo_fem_decoder_base::decode_fem_header().
00372 { 00373 // Used to recover pmt/trigger frame id from roll over effect. 00374 // One can test this by simply calling this function. 00375 // For instance, to test the behavior for a roll-over of 0x7 ... 00376 // 00377 // > root 00378 // root[0] gSystem->Load("libDecoder") 00379 // root[1] algo_slow_readout_decoder k 00380 // root [6] k.get_pmt_frame(583,584,0x7) 00381 // (const unsigned int)584 00382 // root [7] k.get_pmt_frame(584,583,0x7) 00383 // (const unsigned int)583 00384 // 00385 // I think this implementation works. ... Aug. 12 2013 00386 if( (subject_id > ref_id) && ((subject_id-ref_id) >= diff) ) 00387 return subject_id - (diff+1); 00388 else if( (ref_id > subject_id) && ((ref_id-subject_id) >= diff) ) 00389 return subject_id + (diff+1); 00390 else 00391 return subject_id; 00392 00393 }
| virtual void algo_base::set_backtrace_mode | ( | size_t | nwords = 0 |
) | [inline, virtual, inherited] |
Run utility: set back-trace mode. One should provide number of words to be stored.
Definition at line 65 of file algo_base.hh.
References algo_base::_bt_mode, and algo_base::_bt_nwords.
Referenced by main().
00065 { 00066 _bt_nwords=nwords; 00067 _bt_mode=(bool)(nwords); 00068 };
| void algo_base::set_debug_mode | ( | bool | doit | ) | [inline, inherited] |
Run utility: set debug mode. Children class defines what-to-do in debug mode.
Definition at line 59 of file algo_base.hh.
References algo_base::_debug_mode.
Referenced by decoder_manager::initialize().
00059 {_debug_mode=doit;};
| void algo_base::set_storage_ptr | ( | storage_manager * | storage | ) | [inline, inherited] |
Expects a storage pointer to be provided from a parent class.
Definition at line 62 of file algo_base.hh.
References algo_base::_storage.
Referenced by decoder_manager::initialize().
00062 {_storage=storage;};
| 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::decoder_manager(), 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 }
| bool algo_tpc_xmit::store_event | ( | ) | [protected, virtual] |
A method to store event-wise data.
Implements algo_fem_decoder_base.
Definition at line 291 of file algo_tpc_xmit.cc.
References _event_data, algo_fem_decoder_base::_header_info, algo_base::_storage, decoder_base::_verbosity, check_event_quality(), clear_event(), MSG::ERROR, tpc_wf_collection::event_id(), MSG::INFO, storage_manager::next_event(), Message::send(), tpc_wf_collection::set_checksum(), tpc_wf_collection::set_event_frame_id(), tpc_wf_collection::set_event_id(), tpc_wf_collection::set_module_address(), tpc_wf_collection::set_module_id(), tpc_wf_collection::set_nwords(), tpc_wf_collection::set_trigger_frame_id(), and tpc_wf_collection::set_trigger_timeslice().
Referenced by algo_tpc_huffman::process_ch_word(), process_event_header(), and algo_tpc_huffman::process_word().
00291 { 00292 //######################################################### 00293 00294 bool status = check_event_quality(); 00295 00296 // Store if condition is satisfied 00297 if(status) { 00298 00299 if(_verbosity[MSG::INFO]){ 00300 00301 Message::send(MSG::INFO,__FUNCTION__, 00302 Form("Storing event %u with %zu channel entries...", 00303 _event_data->event_id(), _event_data->size())); 00304 00305 } 00306 00307 _event_data->set_module_address ( _header_info.module_address ); 00308 _event_data->set_module_id ( _header_info.module_id ); 00309 _event_data->set_event_id ( _header_info.event_id ); 00310 _event_data->set_event_frame_id ( _header_info.event_frame_id ); 00311 _event_data->set_trigger_frame_id ( _header_info.trigger_frame_id ); 00312 _event_data->set_trigger_timeslice ( _header_info.trigger_timeslice ); 00313 _event_data->set_nwords ( _header_info.nwords ); 00314 _event_data->set_checksum ( _header_info.checksum ); 00315 00316 status = _storage->next_event(); 00317 00318 }else{ 00319 00320 Message::send(MSG::ERROR,__FUNCTION__, 00321 Form("Skipping to store event %d...",_header_info.event_id)); 00322 00323 status = false; 00324 00325 } 00326 00327 clear_event(); 00328 00329 return status; 00330 }
bool algo_base::_bt_mode [protected, inherited] |
Back-trace mode boolean holder.
Definition at line 109 of file algo_base.hh.
Referenced by algo_base::algo_base(), algo_trig_decoder::process_word(), algo_tpc_huffman::process_word(), algo_slow_readout_decoder::process_word(), algo_fem_decoder_base::process_word(), and algo_base::set_backtrace_mode().
size_t algo_base::_bt_nwords [protected, inherited] |
user defined # of words to be temporarily stored in the buffer
Definition at line 133 of file algo_base.hh.
Referenced by algo_base::algo_base(), algo_base::backtrace_mode(), algo_trig_decoder::process_word(), algo_tpc_huffman::process_word(), algo_slow_readout_decoder::process_word(), algo_fem_decoder_base::process_word(), and algo_base::set_backtrace_mode().
bool algo_base::_bt_nwords_filled [protected, inherited] |
run utility boolean to keep a recored of filled buffer
Definition at line 134 of file algo_base.hh.
Referenced by algo_base::algo_base(), algo_trig_decoder::process_word(), algo_tpc_huffman::process_word(), algo_slow_readout_decoder::process_word(), and algo_fem_decoder_base::process_word().
std::deque<PMT::word_t> algo_base::_bt_words [protected, inherited] |
processed words to be stored event-wise for back-trace purpose
Definition at line 132 of file algo_base.hh.
Referenced by algo_base::backtrace(), algo_trig_decoder::process_word(), algo_tpc_huffman::process_word(), algo_slow_readout_decoder::process_word(), and algo_fem_decoder_base::process_word().
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(), decoder_manager::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(), 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().
tpc_waveform algo_tpc_xmit::_ch_data [protected] |
Definition at line 108 of file algo_tpc_xmit.hh.
Referenced by clear_event(), decode_ch_word(), process_ch_word(), algo_tpc_huffman::process_ch_word(), and reset().
PMT::word_t algo_base::_checksum [protected, inherited] |
data checksum
Definition at line 126 of file algo_base.hh.
Referenced by check_event_quality(), algo_slow_readout_decoder::check_event_quality(), algo_pmt_xmit::check_event_quality(), algo_slow_readout_decoder::decode_event_header(), algo_fem_decoder_base::decode_fem_header(), algo_base::init_checker_info(), process_ch_word(), algo_tpc_huffman::process_ch_word(), algo_slow_readout_decoder::process_ch_word(), algo_pmt_xmit::process_ch_word(), and algo_trig_decoder::process_word().
bool algo_base::_debug_mode [protected, inherited] |
Debug mode boolean holder.
Definition at line 108 of file algo_base.hh.
Referenced by algo_base::algo_base(), algo_slow_readout_decoder::process_ch_word(), algo_fem_decoder_base::process_fem_header(), algo_slow_readout_decoder::process_header(), algo_trig_decoder::process_word(), algo_tpc_huffman::process_word(), algo_slow_readout_decoder::process_word(), algo_fem_decoder_base::process_word(), and algo_base::set_debug_mode().
tpc_wf_collection* algo_tpc_xmit::_event_data [protected] |
Definition at line 110 of file algo_tpc_xmit.hh.
Referenced by clear_event(), process_ch_word(), algo_tpc_huffman::process_ch_word(), process_event_header(), algo_tpc_huffman::process_event_header(), algo_tpc_huffman::process_word(), reset(), and store_event().
size_t algo_fem_decoder_base::_event_header_count [protected, inherited] |
A counter for event header words.
Definition at line 171 of file algo_fem_decoder_base.hh.
Referenced by algo_fem_decoder_base::clear_event(), algo_tpc_huffman::process_fem_header(), algo_fem_decoder_base::process_fem_header(), and algo_fem_decoder_base::reset().
PMT::word_t algo_fem_decoder_base::_event_header_words[FEM_HEADER_COUNT] [protected, inherited] |
Event header word holder.
Definition at line 165 of file algo_fem_decoder_base.hh.
Referenced by algo_tpc_huffman::process_fem_header(), algo_fem_decoder_base::process_fem_header(), and algo_fem_decoder_base::reset().
InfoFEM_t algo_fem_decoder_base::_header_info [protected, inherited] |
Definition at line 174 of file algo_fem_decoder_base.hh.
Referenced by check_event_quality(), algo_pmt_xmit::check_event_quality(), algo_fem_decoder_base::clear_event(), algo_fem_decoder_base::decode_fem_header(), algo_fem_decoder_base::is_event_empty(), algo_tpc_huffman::process_ch_word(), algo_tpc_huffman::process_event_last_word(), algo_tpc_huffman::process_word(), algo_fem_decoder_base::process_word(), store_event(), and algo_pmt_xmit::store_event().
PMT::word_t algo_fem_decoder_base::_last_word [protected, inherited] |
Last word processed.
Definition at line 170 of file algo_fem_decoder_base.hh.
Referenced by algo_tpc_huffman::process_word(), algo_fem_decoder_base::process_word(), and algo_fem_decoder_base::reset().
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().
PMT::word_t algo_base::_nwords [protected, inherited] |
number of data word counts processed
Definition at line 127 of file algo_base.hh.
Referenced by check_event_quality(), algo_slow_readout_decoder::check_event_quality(), algo_pmt_xmit::check_event_quality(), algo_slow_readout_decoder::decode_event_header(), algo_fem_decoder_base::decode_fem_header(), algo_base::init_checker_info(), process_ch_word(), algo_tpc_huffman::process_ch_word(), algo_slow_readout_decoder::process_ch_word(), algo_pmt_xmit::process_ch_word(), algo_pmt_xmit::process_fem_last_word(), algo_trig_decoder::process_word(), and algo_tpc_huffman::process_word().
bool algo_fem_decoder_base::_search_for_next_event [protected, inherited] |
A run control boolean: skips any action till it finds the new event header.
Definition at line 173 of file algo_fem_decoder_base.hh.
Referenced by algo_tpc_huffman::process_word(), algo_fem_decoder_base::process_word(), and algo_fem_decoder_base::reset().
storage_manager* algo_base::_storage [protected, inherited] |
Data storage pointer to be provided by a parent process.
Definition at line 121 of file algo_base.hh.
Referenced by algo_base::algo_base(), algo_slow_readout_decoder::process_ch_word(), process_event_header(), algo_tpc_huffman::process_event_header(), algo_pmt_xmit::process_event_header(), algo_trig_decoder::process_word(), algo_slow_readout_decoder::process_word(), algo_base::reset(), algo_base::set_storage_ptr(), store_event(), and algo_pmt_xmit::store_event().
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(), decoder_manager::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(), decoder_manager::finalize(), beamgate_debugger::finalize(), ana_processor::finalize(), decoder_manager::initialize(), beamgate_debugger::initialize(), ana_processor::initialize(), storage_manager::open(), beamgate_debugger::prepare_histo(), storage_manager::prepare_tree(), process_ch_word(), algo_tpc_huffman::process_ch_word(), algo_slow_readout_decoder::process_ch_word(), algo_pmt_xmit::process_ch_word(), 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(), decoder_manager::run(), ana_processor::run(), decoder_base::set_verbosity(), 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(), decoder_manager::initialize(), ana_processor::initialize(), bin_io_handler::read_multi_word(), bin_io_handler::read_word(), and decoder_base::set_verbosity().
const size_t algo_base::BEAM_NWORDS = 21 [static, protected, inherited] |
Defines # of minimum words to identify beamgate event.
Definition at line 115 of file algo_base.hh.
Referenced by algo_slow_readout_decoder::apply_beamgate_correction(), and algo_slow_readout_decoder::store_ch_data().
const size_t algo_base::BEAM_REF_CHANNEL = 39 [static, protected, inherited] |
Defines a reference channel for beamgate.
Definition at line 114 of file algo_base.hh.
Referenced by algo_slow_readout_decoder::store_ch_data().
const size_t algo_fem_decoder_base::FEM_HEADER_COUNT = 6 [static, protected, inherited] |
Number of event header words.
Definition at line 159 of file algo_fem_decoder_base.hh.
Referenced by algo_tpc_huffman::process_fem_header(), algo_fem_decoder_base::process_fem_header(), and algo_fem_decoder_base::reset().
const size_t algo_base::FRAME_WIDTH = 8192 [static, protected, inherited] |
Defines # of ADC samples per readout frame.
Definition at line 116 of file algo_base.hh.
Referenced by algo_slow_readout_decoder::apply_beamgate_correction().
1.4.7