reco_wf Class Reference
[AnalysisAnalysis]

Analysis class to run waveform reconstruction. More...

#include <reco_wf.hh>

Inheritance diagram for reco_wf:

ana_base decoder_base List of all members.

Public Member Functions

 reco_wf ()
 Default constructor.
 ~reco_wf ()
 Default destructor.
virtual bool initialize ()
 Implementation of ana_base::initialize.
virtual bool analyze (storage_manager *data)
 Implementation of ana_base::analyze.
virtual bool finalize ()
 Implementation of ana_base::finalize.
const PMT::ch_waveform_tget_ch_waveform (UInt_t ch)
 Getter for a reconstructed PMT-waveform.
const std::set< UInt_t > * get_ch_set () const
 Getter for a set of read-out channels from data.
void set_frame_width (PMT::word_t w)
 Setter for readout frame size.
PMT::word_t get_start_frame () const
 Getter for the very first frame number among all in the event.
PMT::word_t get_start_slice () const
 Getter for the very first sample number among all in the event.
TH2D * get_histo ()
 A 2D histogram generator which contains reco-ed waveform for all PMTs.
void set_output_file (TFile *fout)
 A setter for analysis output file poitner.
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

TFile * _fout
 Analysis output file pointer.
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

void reset ()
 Initialize members.
void clear_event ()
 Clear event-wise members.

Private Attributes

std::map< UInt_t, PMT::ch_waveform_t_wf_map
 A collection of reco-ed waveforms.
std::set< UInt_t > _channels
 A set of channel numbers.
PMT::word_t _frame_width
 The readout frame width.
PMT::word_t _event_id
 Event ID number.
PMT::word_t _ref_slice
 First time slice number in the event.
PMT::word_t _ref_frame
 First frame number in the event.
TH2D * _wf_histo
 Histogram of reco-ed waveforms.

Detailed Description

Analysis class to run waveform reconstruction.

It combines multiple waveforms (if there are) into one big waveform based on sample number, frame id, and discriminator id.

Definition at line 28 of file reco_wf.hh.


Constructor & Destructor Documentation

reco_wf::reco_wf (  ) 

Default constructor.

Definition at line 6 of file reco_wf.cc.

References _frame_width, decoder_base::_name, and reset().

00006                  : _wf_histo(0) {
00007   _frame_width=4096;
00008   _name="reco_wf";
00009   reset();
00010 
00011 }

reco_wf::~reco_wf (  )  [inline]

Default destructor.

Definition at line 36 of file reco_wf.hh.

00036 {};


Member Function Documentation

bool reco_wf::analyze ( storage_manager data  )  [virtual]

Implementation of ana_base::analyze.

Implements ana_base.

Definition at line 41 of file reco_wf.cc.

References decoder_base::_buf, _channels, _event_id, _frame_width, _ref_frame, _ref_slice, decoder_base::_verbosity, _wf_map, pmt_waveform::channel_frame_id(), pmt_waveform::channel_number(), clear_event(), MSG::ERROR, pmt_wf_collection::event_id(), storage_manager::get_data(), MSG::INFO, DATA_STRUCT::PMT_WF_COLLECTION, Message::send(), and pmt_waveform::timeslice().

00041                                              {
00042 
00043   pmt_wf_collection *data = (pmt_wf_collection*)(storage->get_data(DATA_STRUCT::PMT_WF_COLLECTION));
00044   clear_event();
00045 
00046   if(!(data->size()))
00047     return true;
00048 
00049   _event_id=data->event_id();
00050 
00051   PMT::word_t rel_frame=0;
00052   PMT::word_t rel_slice=0;
00053   PMT::word_t wf_length=0;
00054 
00055   // 
00056   // Loop over event (collection of channel waveforms) to first
00057   // identify the maximum length of waveform vector to be stored.
00058   //
00059   std::set<size_t> skip_index; // a set of index in pmt_wf_collection array to be skipped
00060   for(size_t i=0; i<data->size(); ++i){
00061 
00062     const pmt_waveform* pmt_data = &(data->at(i));
00063 
00064     if(pmt_data->size()<1) {
00065       skip_index.insert(i);
00066       Message::send(MSG::ERROR,__FUNCTION__,
00067             Form("Detected 0-length waveform (Event=%d ... Ch.=%d)! Skipping.",data->event_id(),pmt_data->channel_number()));
00068       continue;
00069     }
00070 
00071     if(!(_ref_frame) || _ref_frame>pmt_data->channel_frame_id())
00072       _ref_frame = pmt_data->channel_frame_id();
00073     
00074     rel_frame = pmt_data->channel_frame_id() - _ref_frame;
00075     rel_slice = rel_frame * _frame_width + pmt_data->timeslice();
00076 
00077     if(!(_ref_slice) || _ref_slice>rel_slice)
00078       _ref_slice=rel_slice;
00079     
00080     if(!(wf_length) || wf_length<(rel_slice+pmt_data->size()))
00081       wf_length=rel_slice+pmt_data->size();
00082 
00083     if(_channels.find(pmt_data->channel_number())==_channels.end())
00084       _channels.insert(pmt_data->channel_number());
00085 
00086   }
00087 
00088   //
00089   // Loop over again. This time create a channel waveform container
00090   // and store waveform data inside. By default set all waveform
00091   // vector contents to be 0. We write out all elements, whether data
00092   // exists or not, for the time span of the first and last received
00093   // adc count among all channels.
00094   //
00095   for(size_t i=0; i<data->size(); ++i){
00096 
00097     if(skip_index.find(i)!=skip_index.end()) continue;
00098 
00099     const pmt_waveform* pmt_data = &(data->at(i));
00100     UInt_t ch=pmt_data->channel_number();    
00101 
00102     if(_wf_map.find(ch)==_wf_map.end())
00103       _wf_map[ch]=PMT::ch_waveform_t(wf_length-_ref_slice+1,0);
00104 
00105     for(size_t j=0; j<pmt_data->size(); ++j){
00106 
00107       rel_frame = pmt_data->channel_frame_id() - _ref_frame;
00108       rel_slice = rel_frame * _frame_width + pmt_data->timeslice() + j;
00109       
00110       _wf_map[ch][rel_slice - _ref_slice] = pmt_data->at(j);
00111     }
00112   }
00113   
00114   // 
00115   // Summary report if verbosity is set
00116   //
00117   if(_verbosity[MSG::INFO]){
00118     sprintf(_buf,"Event = %-4d ... %-2zd channels read out",data->event_id(),_channels.size());
00119     Message::send(MSG::INFO,__FUNCTION__,_buf);
00120   }
00121 
00122   return true;
00123 }

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 reco_wf::clear_event (  )  [private]

Clear event-wise members.

Definition at line 18 of file reco_wf.cc.

References _channels, _event_id, _ref_frame, _ref_slice, _wf_histo, and _wf_map.

Referenced by analyze(), and reset().

00018                          {
00019 
00020   if(_wf_histo)
00021     delete _wf_histo;
00022   _wf_histo=0;
00023   _channels.clear();
00024   _wf_map.clear();
00025   _ref_frame=0;
00026   _ref_slice=0;
00027   _event_id=0;
00028 }

bool reco_wf::finalize (  )  [virtual]

Implementation of ana_base::finalize.

Implements ana_base.

Definition at line 134 of file reco_wf.cc.

00134                       {
00135 
00136   return true;
00137 
00138 }

const std::set<UInt_t>* reco_wf::get_ch_set (  )  const [inline]

Getter for a set of read-out channels from data.

Definition at line 51 of file reco_wf.hh.

References _channels.

00051 {return &_channels;};

const PMT::ch_waveform_t * reco_wf::get_ch_waveform ( UInt_t  ch  ) 

Getter for a reconstructed PMT-waveform.

Definition at line 125 of file reco_wf.cc.

References _wf_map.

00125                                                           {
00126   
00127   if(_wf_map.find(ch)==_wf_map.end())
00128     return 0;
00129   else
00130     return &(_wf_map[ch]);
00131 }

TH2D * reco_wf::get_histo (  ) 

A 2D histogram generator which contains reco-ed waveform for all PMTs.

Definition at line 140 of file reco_wf.cc.

References _channels, _event_id, _ref_slice, _wf_histo, and _wf_map.

00140                         {
00141 
00142   if(_wf_histo)
00143     return _wf_histo;
00144   
00145   if(_wf_map.size()==0) return 0;
00146 
00147   // Create a histogram
00148   int ctr=0;
00149   for(std::set<UInt_t>::const_iterator iter(_channels.begin());
00150       iter!=_channels.end();
00151       ++iter){
00152 
00153     PMT::ch_waveform_t* wf=&(_wf_map[(*iter)]);
00154     
00155     if(!(_wf_histo)){
00156       // If histogram does not yet exist, create one.
00157       // This hsould be called in the 1st loop.
00158 
00159       _wf_histo=new TH2D(Form("hWF_Event%05d", _event_id),
00160              Form("All waveform combined for event %-5d; ; Time-slice; ADC",_event_id),
00161              _channels.size(), 0, _channels.size(),                  // X-axis = channels
00162              wf->size(), _ref_slice, (_ref_slice+wf->size()) // Y-axis = time slice
00163              );
00164     }
00165     
00166     ctr++;
00167     
00168     for(unsigned int index=0; index<wf->size(); index++)
00169       
00170       _wf_histo->SetBinContent(ctr,index+1,(double)(wf->at(index)));
00171 
00172     _wf_histo->GetXaxis()->SetBinLabel(ctr,Form("Ch. %d",(*iter)));
00173   }
00174 
00175   if(_wf_histo){
00176     _wf_histo->GetXaxis()->SetTicks("-");
00177     _wf_histo->GetXaxis()->LabelsOption("h");
00178   }
00179 
00180   return _wf_histo;
00181 
00182 }

PMT::word_t reco_wf::get_start_frame (  )  const [inline]

Getter for the very first frame number among all in the event.

Definition at line 57 of file reco_wf.hh.

References _ref_frame.

00057 {return _ref_frame;};

PMT::word_t reco_wf::get_start_slice (  )  const [inline]

Getter for the very first sample number among all in the event.

Definition at line 60 of file reco_wf.hh.

References _ref_slice.

00060 {return _ref_slice;};

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 reco_wf::initialize (  )  [virtual]

Implementation of ana_base::initialize.

Implements ana_base.

Definition at line 30 of file reco_wf.cc.

References _frame_width, MSG::ERROR, and Message::send().

00030                          {
00031 
00032   if(!_frame_width){
00033     Message::send(MSG::ERROR,__FUNCTION__,"Frame width unspecified! ");
00034     return false;
00035   }
00036 
00037   return true;
00038 
00039 };

void reco_wf::reset (  )  [private]

Initialize members.

Definition at line 13 of file reco_wf.cc.

References clear_event().

Referenced by reco_wf().

00013                    {
00014 
00015   clear_event();
00016 }

void reco_wf::set_frame_width ( PMT::word_t  w  )  [inline]

Setter for readout frame size.

Definition at line 54 of file reco_wf.hh.

References _frame_width.

00054 {_frame_width=w;};

void ana_base::set_output_file ( TFile *  fout  )  [inline, inherited]

A setter for analysis output file poitner.

Definition at line 46 of file ana_base.hh.

References ana_base::_fout.

00046 {_fout=fout;};

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 }


Member Data Documentation

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

char buffer for message manipulation

Definition at line 46 of file decoder_base.hh.

Referenced by 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(), 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().

std::set<UInt_t> reco_wf::_channels [private]

A set of channel numbers.

Definition at line 75 of file reco_wf.hh.

Referenced by analyze(), clear_event(), get_ch_set(), and get_histo().

PMT::word_t reco_wf::_event_id [private]

Event ID number.

Definition at line 78 of file reco_wf.hh.

Referenced by analyze(), clear_event(), and get_histo().

TFile* ana_base::_fout [protected, inherited]

Analysis output file pointer.

Definition at line 46 of file ana_base.hh.

Referenced by ana_base::ana_base(), waveform_sampler::finalize(), pulse_reco::finalize(), pulse_analyzer::finalize(), pmtbaseline_ana::finalize(), pmtbaseline::finalize(), led_pulse_analyzer::finalize(), beamgate_debugger::finalize(), pulse_analyzer::initialize(), pmt_slow_encoder::pmt_slow_encoder(), pmtbaseline::pmtbaseline(), pmtbaseline_ana::pmtbaseline_ana(), pulse_selector_base::pulse_selector_base(), pulse_selector_simple::pulse_selector_simple(), waveform_sampler::sample_waveform(), ana_base::set_output_file(), and waveform_sampler::waveform_sampler().

PMT::word_t reco_wf::_frame_width [private]

The readout frame width.

Definition at line 76 of file reco_wf.hh.

Referenced by analyze(), initialize(), reco_wf(), and set_frame_width().

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(), storage_manager::storage_manager(), and waveform_sampler::waveform_sampler().

PMT::word_t reco_wf::_ref_frame [private]

First frame number in the event.

Definition at line 80 of file reco_wf.hh.

Referenced by analyze(), clear_event(), and get_start_frame().

PMT::word_t reco_wf::_ref_slice [private]

First time slice number in the event.

Definition at line 79 of file reco_wf.hh.

Referenced by analyze(), clear_event(), get_histo(), and get_start_slice().

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 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(), 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(), decoder_manager::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(), decoder_manager::initialize(), ana_processor::initialize(), bin_io_handler::read_multi_word(), bin_io_handler::read_word(), and decoder_base::set_verbosity().

TH2D* reco_wf::_wf_histo [private]

Histogram of reco-ed waveforms.

Definition at line 82 of file reco_wf.hh.

Referenced by clear_event(), and get_histo().

std::map<UInt_t,PMT::ch_waveform_t> reco_wf::_wf_map [private]

A collection of reco-ed waveforms.

Definition at line 74 of file reco_wf.hh.

Referenced by analyze(), clear_event(), get_ch_waveform(), and get_histo().


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