beamgate_debugger.cc

Go to the documentation of this file.
00001 #ifndef BEAMGATE_DEBUGGER_CC
00002 #define BEAMGATE_DEBUGGER_CC
00003 
00004 #include "beamgate_debugger.hh"
00005 
00006 beamgate_debugger::beamgate_debugger() 
00007   : ana_base(), _pre_sample(), _post_sample()
00008 {
00009 
00010   _name="beamgate_debugger";
00011   _hPrePedMean=0;
00012   _hPrePedRMS=0;
00013   
00014   _hPostPedMean=0;
00015   _hPostPedRMS=0;
00016 
00017   _hMaxADC=0;
00018   _hMaxTime=0;
00019 
00020   _hSampleSize=0;
00021 
00022   _pre_nsample=6;
00023   _post_nsample=6;
00024 
00025 }
00026 
00027 bool beamgate_debugger::initialize(){
00028   if(_verbosity[MSG::DEBUG])
00029     Message::send(MSG::DEBUG,__FUNCTION__,"called...");
00030 
00031   reset();
00032   prepare_histo();
00033   _pre_sample.reserve(_pre_nsample);
00034   _post_sample.reserve(_post_nsample);
00035 
00036   _ch_cnt=PMT::NUM_PMT_CHANNEL;
00037   _beam_window_width=PMT::BEAMGATE_NSAMPLE;
00038   _adc_max=PMT::MAX_ADC;  
00039 
00040   if(_verbosity[MSG::DEBUG])
00041     Message::send(MSG::DEBUG,__FUNCTION__,"ends...");
00042 
00043   return true;
00044 }
00045 
00046 void beamgate_debugger::reset(){
00047   
00048   if(_verbosity[MSG::DEBUG])
00049     Message::send(MSG::DEBUG,__FUNCTION__,"called...");
00050   
00051   if(_hSampleSize)   delete  _hSampleSize;
00052   if(_hPrePedMean)   delete  _hPrePedMean;
00053   if(_hPrePedRMS)    delete  _hPrePedRMS;
00054   if(_hPostPedMean)  delete  _hPostPedMean;
00055   if(_hPostPedRMS)   delete  _hPostPedRMS;
00056   if(_hMaxADC)       delete  _hMaxADC;
00057   if(_hMaxTime)      delete  _hMaxTime;
00058 
00059   _hSampleSize=0;
00060   _hPrePedMean=0;
00061   _hPostPedMean=0;
00062   _hPrePedRMS=0;
00063   _hPostPedRMS=0;
00064   _hMaxADC=0;
00065   _hMaxTime=0;
00066   _pre_sample.clear();
00067   _post_sample.clear();
00068 
00069   if(_verbosity[MSG::DEBUG])
00070     Message::send(MSG::DEBUG,__FUNCTION__,"ends...");  
00071 }
00072 
00073 void beamgate_debugger::prepare_histo(){
00074 
00075   if(_verbosity[MSG::DEBUG])
00076     Message::send(MSG::DEBUG,__FUNCTION__,"called...");
00077 
00078   if(!_hSampleSize)
00079     _hSampleSize = new TH2D("hSampleSize",
00080                 "Number of ADC words; Channel Number; Number of words",
00081                 _ch_cnt,  -0.5, _ch_cnt-0.5,
00082                 int(_beam_window_width*1.5), -0.5, (double)(int(_beam_window_width*1.5)-0.5));
00083   else _hSampleSize->Reset();
00084 
00085   if(!_hPrePedMean)
00086     _hPrePedMean = new TH2D("hPrePedMean",
00087                   Form("Pedestal mean from first %d samples; Channel Number; Ped. Mean",
00088                    _pre_nsample),
00089                   _ch_cnt, -0.5, _ch_cnt-0.5,
00090                   80,2030,2070);
00091   else _hPrePedMean->Reset();
00092 
00093   if(!_hPostPedMean)
00094     _hPostPedMean = new TH2D("hPostPedMean",
00095                   Form("Pedestal mean from last %d samples; Channel Number; Ped. Mean",
00096                    _post_nsample),
00097                   _ch_cnt, -0.5, _ch_cnt-0.5,
00098                   80,2030,2070);
00099   else _hPostPedMean->Reset();
00100 
00101   if(!_hPrePedRMS)
00102     _hPrePedRMS = new TH2D("hPrePedRMS",
00103                Form("Pedestal RMS from first %d samples; Channel Number; Ped. RMS",
00104                 _pre_nsample),
00105                _ch_cnt, -0.5, _ch_cnt-0.5,
00106                40,0,20);
00107   else _hPrePedRMS->Reset();
00108 
00109   if(!_hPostPedRMS)
00110     _hPostPedRMS = new TH2D("hPostPedRMS",
00111                Form("Pedestal RMS from first %d samples; Channel Number; Ped. RMS",
00112                 _post_nsample),
00113                _ch_cnt, -0.5, _ch_cnt-0.5,
00114                40,0,20);
00115   else _hPostPedRMS->Reset();
00116 
00117   if(!_hMaxADC)
00118     _hMaxADC = new TH2D("hMaxADC",
00119             "Maximum ADC Counts; Channel Number; Max ADC",
00120             _ch_cnt, -0.5, _ch_cnt-0.5,
00121             _adc_max,-0.5,_adc_max-0.5);
00122   else _hMaxADC->Reset();
00123 
00124   if(!_hMaxTime)
00125     _hMaxTime = new TH2D("hMaxTime",
00126             "Maximum Time Counts; Channel Number; Max Time",
00127             _ch_cnt, -0.5, _ch_cnt-0.5,
00128              100,0,_beam_window_width*1.5);
00129   else _hMaxTime->Reset();
00130 
00131   if(_verbosity[MSG::DEBUG])
00132     Message::send(MSG::DEBUG,__FUNCTION__,"ends...");
00133 }
00134 
00135 bool beamgate_debugger::analyze(storage_manager* data){
00136 
00137   bool beam_wf=false;
00138 
00139   double ped_mean=0;
00140   double ped_rms=0;
00141 
00142   PMT::ch_adc_t max_adc=0;
00143   UShort_t max_time=0;
00144   UShort_t index=0;
00145 
00146   pmt_wf_collection *ewf = (pmt_wf_collection*)(data->get_data(DATA_STRUCT::PMT_WF_COLLECTION));
00147 
00148   for(std::vector<pmt_waveform>::const_iterator wf_iter(ewf->begin());
00149       wf_iter!=ewf->end();
00150       ++wf_iter){
00151 
00152     beam_wf=false;
00153     switch((*wf_iter).disc_id()) {
00154     case PMT::BEAM_DISC:
00155     case PMT::BEAM_WIN:
00156       beam_wf=true;
00157       break;
00158     case PMT::BASE_DISC:
00159     case PMT::COSMIC_DISC:
00160     case PMT::MICHEL_DISC:
00161       beam_wf=( (*wf_iter).size()>_beam_window_width );
00162       break;
00163     case PMT::DISC_MAX:
00164       break;
00165     }
00166     if(!beam_wf) continue;
00167 
00168     _hSampleSize->Fill((*wf_iter).channel_number()+1,((*wf_iter).size()));
00169 
00170     ped_mean=0;
00171     ped_rms=0;
00172     max_adc=0;
00173     max_time=0;
00174     index=0;
00175 
00176     _pre_sample.clear();
00177     _post_sample.clear();
00178 
00179     for(pmt_waveform::const_iterator adc_iter((*wf_iter).begin());
00180     adc_iter!=(*wf_iter).end();
00181     ++adc_iter) {
00182       
00183       if( index < _pre_nsample )
00184 
00185     _pre_sample.push_back((double)((*adc_iter)));
00186 
00187       if( index >= ((*wf_iter).size() - _post_nsample) )
00188 
00189     _post_sample.push_back((double)((*adc_iter)));
00190 
00191       if( (*adc_iter) > max_adc ) {
00192     max_adc  = (*adc_iter);
00193     max_time = index;
00194       }
00195       
00196       index++;
00197     }
00198 
00199     get_ped_info(ped_mean,ped_rms,&_pre_sample);
00200     _hPrePedMean->Fill((*wf_iter).channel_number(), ped_mean);
00201     _hPrePedRMS->Fill((*wf_iter).channel_number(), ped_rms);
00202 
00203     get_ped_info(ped_mean,ped_rms,&_post_sample);
00204     _hPostPedMean->Fill((*wf_iter).channel_number(), ped_mean);
00205     _hPostPedRMS->Fill((*wf_iter).channel_number(), ped_rms);
00206 
00207     _hMaxADC->Fill((*wf_iter).channel_number(), max_adc);
00208     _hMaxTime->Fill((*wf_iter).channel_number(), max_time);
00209   }
00210 
00211 
00212   return true;
00213   
00214 }
00215 
00216 bool beamgate_debugger::finalize(){
00217 
00218   if(_verbosity[MSG::DEBUG])
00219     Message::send(MSG::DEBUG,__FUNCTION__,"called...");
00220 
00221   _fout->cd();
00222   _hPrePedMean->Write();
00223   _hPrePedRMS->Write();
00224   _hPostPedMean->Write();
00225   _hPostPedRMS->Write();
00226   _hMaxADC->Write();
00227   _hMaxTime->Write();
00228 
00229   if(_verbosity[MSG::DEBUG])
00230     Message::send(MSG::DEBUG,__FUNCTION__,"ends...");
00231 
00232   return true;
00233 
00234 }
00235 
00236 #endif

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