/home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/daq/include/RAT/WaveformAnalysisSinc.hh Source File

Ratpac-two: /home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/daq/include/RAT/WaveformAnalysisSinc.hh Source File
Ratpac-two
WaveformAnalysisSinc.hh
1 #ifndef __RAT_WaveformAnalysisSinc__
34 #define __RAT_WaveformAnalysisSinc__
35 
36 #include <TObject.h>
37 
38 #include <RAT/DB.hh>
39 #include <RAT/DS/DigitPMT.hh>
40 #include <RAT/Digitizer.hh>
41 #include <RAT/Processor.hh>
42 #include <RAT/WaveformAnalyzerBase.hh>
43 #include <cmath>
44 #include <vector>
45 
46 namespace RAT {
47 
49  public:
50  WaveformAnalysisSinc() : WaveformAnalysisSinc("TSincInterpolation"){};
51  WaveformAnalysisSinc(std::string config_name) : WaveformAnalyzerBase("WaveformAnalysisSinc", config_name) {
52  Configure(config_name);
53  };
54  virtual ~WaveformAnalysisSinc(){};
55  void Configure(const std::string &config_name) override;
56  virtual void SetI(std::string param, int value) override;
57  virtual void SetD(std::string param, double value) override;
58 
59  // Interpolate the digitized waveform by convolution using a tapered sinc kernel
60  std::vector<double> ConvolveWaveform(const std::vector<double> &wfm);
61  void InterpolateWaveform(const std::vector<double> &voltWfm);
62 
63  protected:
64  // Digitizer settings
65  DBLinkPtr fDigit;
66 
67  // Analysis constants
68  double fFitWindowLow;
69  double fFitWindowHigh;
70  int fNumInterpPoints; // number of interpolated points per data point (or the number of points in each lobe of
71  // the tsinc kernel)
72  double fTaperingConst; // tapering constant (determines how fast the kernel decays)
73  int fNumSincLobes; // number of sinc lobes to be included in the kernel (determines the length of the kernel)
74 
75  // Coming from WaveformPrep
76  double fDigitTimeInWindow;
77 
78  // Fit variables
79  double fFitTime;
80  double fFitCharge;
81  double fFitPeak;
82 
83  std::vector<double> tsinc_kernel; // Stores the tsinc kernel
84  void calculateTSincKernel() { // Calculates the tsinc kernel
85  for (int k = 0; k < fNumInterpPoints * fNumSincLobes + 1;
86  k++) { // Storing only the positive k values since sinc is an even function
87  double val = k * M_PI / static_cast<float>(fNumInterpPoints);
88  double sinc = sin(val);
89  if (k == 0)
90  sinc = 1.0;
91  else
92  sinc /= val;
93  tsinc_kernel.push_back(sinc * exp(-pow(k / fTaperingConst, 2)));
94  }
95  }
96 
97  void DoAnalysis(DS::DigitPMT *pmt, const std::vector<UShort_t> &digitWfm) override;
98 };
99 
100 } // namespace RAT
101 
102 #endif
Definition: DigitPMT.hh:23
Interpolate waveforms by convolution using sinc kernel.
Definition: WaveformAnalysisSinc.hh:48
virtual void SetI(std::string param, int value) override
Definition: WaveformAnalysisSinc.cc:28
void DoAnalysis(DS::DigitPMT *pmt, const std::vector< UShort_t > &digitWfm) override
Definition: WaveformAnalysisSinc.cc:50
virtual void SetD(std::string param, double value) override
Definition: WaveformAnalysisSinc.cc:38
void Configure(const std::string &config_name) override
Definition: WaveformAnalysisSinc.cc:14
Definition: WaveformAnalyzerBase.hh:23
Definition: CCCrossSecMessenger.hh:29