pulse_viewer.hh

Go to the documentation of this file.
00001 
00015 #ifndef PULSE_VIEWER_HH
00016 #define PULSE_VIEWER_HH
00017 
00018 #include <TH1D.h>
00019 #include <TCanvas.h>
00020 #include <TLine.h>
00021 #include <TPad.h>
00022 #include <TPaveText.h>
00023 #include <TROOT.h>
00024 #include <TStyle.h>
00025 #include <TGaxis.h>
00026 #include <TColor.h>
00027 
00028 #include <set>
00029 #include <algorithm>
00030 
00031 #include "ana_base.hh"
00032 
00042 class pulse_viewer : public ana_base{
00043 
00044 public:
00045 
00047   pulse_viewer();
00048 
00050   virtual ~pulse_viewer(){};
00051 
00053   virtual bool initialize();
00054 
00056   virtual bool analyze(storage_manager* storage);
00057 
00059   virtual bool finalize();
00060 
00068   TH1D* next_pulse(PMT::ch_number_t ch);
00069 
00074   TH1D* previous_pulse(PMT::ch_number_t ch);
00075 
00076 
00078   const TCanvas* get_canvas() const {return _cWF;};
00079 
00081   const std::set<PMT::ch_number_t> get_hit_channels() const {return _channels;};
00082 
00088   PMT::ch_number_t next_channel();
00089 
00091   void display_cut_ranges();
00092 
00093   //
00094   // Setters
00095   //
00096 
00098   short get_npulse(PMT::ch_number_t ch);
00099 
00101   void set_range_pulse_start_time(double v1, double v2)   {_cut_tstart.first=v1;   _cut_tstart.second=v2;   };
00102 
00104   void set_range_pulse_start_time_reco(double v1, double v2)   {_cut_tstart_reco.first=v1;   _cut_tstart_reco.second=v2;   };
00105 
00107   void set_range_pulse_end_time(double v1, double v2)     {_cut_tend.first=v1;     _cut_tend.second=v2;     };
00108 
00110   void set_range_pulse_amp(double v1, double v2)          {_cut_amp.first=v1;      _cut_amp.second=v2;      };
00111 
00113   void set_range_pulse_charge(double v1,double v2)        {_cut_charge.first=v1;   _cut_charge.second=v2;   };
00114 
00116   void set_range_ped_mean(double v1, double v2)           {_cut_pedbase.first=v1;  _cut_pedbase.second=v2;  };
00117 
00119   void set_range_ped_rms(double v1, double v2)            {_cut_pedrms.first=v1;   _cut_pedrms.second=v2;   };
00120 
00122   void set_range_event_id(PMT::word_t v1, PMT::word_t v2) {_cut_event_id.first=v1; _cut_event_id.second=v2; };
00123 
00125   void set_range_channel(PMT::ch_number_t v1, PMT::ch_number_t v2) {_cut_channels.first=v1; _cut_channels.second=v2;};
00126 
00128   void set_range_sum_charge(double v1, double v2)         {_cut_sum_charge.first=v1; _cut_sum_charge.second=v2;};
00129 
00131   void set_range_sum_peak(double v1, double v2)           {_cut_sum_peak.first=v1; _cut_sum_peak.second=v2;};
00132 
00134   void set_range_npulse(double v1, double v2)             {_cut_npulse.first=v1; _cut_npulse.second=v2;};
00135 
00136 
00137   //
00138   // Getters
00139   //
00140 
00142   const std::pair<double,double> range_pulse_start_time() const   {return _cut_tstart;};
00143 
00145   const std::pair<double,double> range_pulse_start_time_reco() const   {return _cut_tstart_reco;};
00146 
00148   const std::pair<double,double> range_pulse_end_time() const     {return _cut_tend;};
00149 
00151   const std::pair<double,double> range_pulse_amp() const          {return _cut_amp;};
00152 
00154   const std::pair<double,double> range_pulse_charge() const       {return _cut_charge;};
00155 
00157   const std::pair<double,double> range_ped_mean() const           {return _cut_pedbase;};
00158 
00160   const std::pair<double,double> range_ped_rms() const            {return _cut_pedrms;};
00161 
00163   const std::pair<PMT::word_t,PMT::word_t> range_event_id() const {return _cut_event_id;};
00164 
00166   const std::pair<PMT::word_t,PMT::word_t> range_channel() const  {return _cut_channels;};
00167 
00169   const std::pair<double,double> range_sum_charge() const         {return _cut_sum_charge;};
00170 
00172   const std::pair<double,double> range_sum_peak() const           {return _cut_sum_peak;};
00173 
00175   const std::pair<UInt_t,UInt_t> range_npulse() const         {return _cut_npulse;};
00176 
00177 protected:
00178 
00180   void set_style();
00181   
00183   void reset_cuts();
00184 
00186   void clear_map();
00187   
00189   void clear_viewer();
00190   
00195   TH1D* get_waveform(PMT::ch_number_t ch, size_t index);
00196 
00198   void add_channel_entry(PMT::ch_number_t ch);
00199 
00200   PMT::word_t _event_id;   
00201   double      _sum_charge; 
00202   double      _sum_peak;   
00203   UInt_t    _npulse;     
00204   std::set<PMT::ch_number_t>                           _channels;             
00205   std::set<PMT::ch_number_t>::iterator                 _ch_iter;              
00206 
00209   std::map<PMT::ch_number_t,std::pair<short,short> >   _pulse_count;          
00210   std::map<PMT::ch_number_t,std::vector<PMT::word_t> > _pulse_frame_id;       
00211   std::map<PMT::ch_number_t,std::vector<PMT::word_t> > _pulse_sample_number;  
00212   std::map<PMT::ch_number_t,std::vector<double> >      _pulse_tstart;         
00213   std::map<PMT::ch_number_t,std::vector<double> >      _pulse_tstart_reco;    
00214   std::map<PMT::ch_number_t,std::vector<double> >      _pulse_tend;           
00215   std::map<PMT::ch_number_t,std::vector<double> >      _pulse_amp;            
00216   std::map<PMT::ch_number_t,std::vector<double> >      _pulse_charge;         
00217   std::map<PMT::ch_number_t,std::vector<double> >      _pulse_pedbase;        
00218   std::map<PMT::ch_number_t,std::vector<double> >      _pulse_pedrms;         
00219   std::map<PMT::ch_number_t,std::map<PMT::word_t,std::map<PMT::word_t,std::vector<PMT::ch_adc_t> > > > _waveforms; 
00220 
00222   TCanvas* _cWF;
00223   
00224   // TPads to be drawn within the main canvas
00225   TPad *_pTitle; 
00226   TPad *_pData;  
00227 
00228   // TPads to be drawn within the _pData pad
00229   TPad *_pNote;  
00230   TPad *_pWF;    
00231 
00232   // Texts to on the pads
00233   TText     *_fTitle; 
00234   TPaveText *_fNote;  
00235 
00237   TH1D* _hWF;
00238 
00240   TLine *_lStart, *_lEnd, *_lBase, *_lRMSTop, *_lRMSBottom, *_lTop;
00241 
00243   std::pair<double,double> _cut_tstart, _cut_tstart_reco, _cut_tend, _cut_amp, _cut_charge, _cut_pedbase, _cut_pedrms;
00244 
00246   std::pair<double,double> _cut_sum_charge, _cut_sum_peak;
00247 
00249   std::pair<UInt_t,UInt_t> _cut_npulse;  
00250 
00252   std::pair<PMT::word_t,PMT::word_t> _cut_event_id;
00253 
00255   std::pair<PMT::ch_number_t,PMT::ch_number_t> _cut_channels;
00256 };
00257 
00258 #endif
00259  // end of doxygen group 

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