Diana Software
QOptimumFilter.hh
Go to the documentation of this file.
1 #ifndef _Q_OPTIMUMFILTER_HH_
2 #define _Q_OPTIMUMFILTER_HH_
3 
11 #include "QVector.hh"
12 #include "QVectorC.hh"
13 #include <vector>
14 
15 namespace Diana { class QRealComplexFFT; };
16 
18 
19  public:
20  enum JitterMode {
25  };
26 
34  QOptimumFilter(const Diana::QVector& ap1, const Diana::QVector& an, int maxJitter, bool useDiff = false, bool debugOn = false);
35 
36  /* @brief destructor */
37  virtual ~QOptimumFilter();
38 
39 
40  int GetMaxJitter() const { return fMaxJitter; }
41 
42  double GetCutOffFrequency() const { return fCutOffFrequency; }
43 
45  Diana::QVector GetAveragePulse() const { return fAveragePulse1; }
46 
49 
51  Diana::QVector GetNoisePowerSpectrum() const { return fAverageNoise; }
52 
54  Diana::QVectorC GetFilterFD() const { return fFilter1; }
55 
57  Diana::QVector GetFilterTD() const { return fFilterTD; }
58 
60  Diana::QVector GetFilteredNoise() const { return fFilteredAverageNoise; }
61 
63  double GetFilteredNoiseRMS() const { return fFilteredRMS1; }
64 
66  Diana::QVector GetSNRFD() const { return fSNRFreq; }
67 
68  // Event by event
70  QError Filter(const Diana::QVector& p) ;
71 
73  const Diana::QVector& GetFiltered() const ;
74 
76  Diana::QVector GetFilteredShifted() const ;
77 
78 
80  int GetShift() const {return fMaxPos;}
81 
82  QError SetJitter(JitterMode mode, int start = 0);
83 
84  QError Get(double& jitter, double& chi2, double& amplitude,double& integral, double& left, double& right) const;
86  QError GetHighSNRChi2(const double& threshold, double& chi2) const;
88  QError GetInterpolated(double& jitter, double& chi2, double& amplitude,double& integral, double& left, double& right) const;
89 
90  std::vector<double> Get()const;
91 
92  Diana::QVector GetFitFunction(const double jitter, const double a1) const;
93 
94  std::vector<Diana::QVector> fDebugVectors,fDebugSpectra;
95 
96  protected:
97  QOptimumFilter(const Diana::QVector& ap1, const Diana::QVector& an);
98  Diana::QVector NormalizeVector(const Diana::QVector& vec) const;
99  virtual QError ManipulateInputs();
105  Diana::QVector fAveragePulse1;
106  size_t fSize;
107  int fMaxPos;
109  bool fDebugOn;
110  bool fUseDiff;
111  Diana::QVectorC fFilter1;
112 
113 
114  private:
115 
116  QError Parabola(double xa,double xb, double xc, double ya,double yb, double yc,double &min, double& minpos) const;
117  Diana::QRealComplexFFT* fTransformer;
123 
124 
125 
126  Diana::QVector fAverageNoise;
127  Diana::QVector fAverageNoiseForChi2;
130  std::vector<Diana::QVectorC> fAveragePulse1Shifted;
131  Diana::QVector fSNRFreq;
132  Diana::QVector fSNRNorm;
133 
134 
136  Diana::QVector fFilteredAverageNoise;
137  Diana::QVector fFilterTD;
138  std::vector<bool> fValidSample;
139 
140  // event by event;
141  Diana::QVector fFiltered1;
142  Diana::QVectorC fTransformedWaveform;
144 
145 
146 
147 
148  // QRootCintTrigger(QOptimumFilter)
149 
150 };
151 
152 #endif
QVector an(N)
QVector vec(3)
double min(const Diana::QVector &v)
Definition: QVector.cc:878
error class with error type and description
Definition: QError.hh:115
Optimum filter implemented with windowing and zeros.
Diana::QVector fAverageNoiseForChi2
QError GetInterpolated(double &jitter, double &chi2, double &amplitude, double &integral, double &left, double &right) const
get values at interpolated chi^2 minimum. Three points around the minimum are used for a parabolic in...
QError fCheckForFilteredSamples
Diana::QVector NormalizeVector(const Diana::QVector &vec) const
std::vector< Diana::QVector > fDebugSpectra
std::vector< Diana::QVector > fDebugVectors
QError Parabola(double xa, double xb, double xc, double ya, double yb, double yc, double &min, double &minpos) const
Diana::QVector GetFilteredNoise() const
expected filtered noise average power spectrum
QError GetHighSNRChi2(const double &threshold, double &chi2) const
get chi^2 (mean 0, variance 1) restricting the DoF to frequencies with SNR > threshold
virtual ~QOptimumFilter()
Diana::QVector fAveragePulseEnergySpectrum
Diana::QRealComplexFFT * fTransformer
Diana::QVector fFilterTD
Diana::QVector GetFilteredShifted() const
get filtered and shifted samples by fMaxPos
int fFilteredAveragePulseHalfWidth
Diana::QVector GetFitFunction(const double jitter, const double a1) const
Diana::QVector fSNRFreq
Diana::QVector fFiltered1
double fFilteredAveragePulseHalfWidthValueLeft
size_t fEffectiveFilterLength
Diana::QVector fSNRNorm
Diana::QVector GetAveragePulseEnergySpectrum() const
energy spectrum of the average pulse
Diana::QVectorC fFilter1
int GetShift() const
get shift of filter (max pos of avg pulse)
Diana::QVectorC fTransformedWaveform
QError fCheckForBuiltFilter
double fAvgPulseIntegral1
virtual QError ManipulateInputs()
QError SetJitter(JitterMode mode, int start=0)
Diana::QVector fAveragePulse1
double GetFilteredNoiseRMS() const
expected noise rms after the filter
QOptimumFilter(const Diana::QVector &ap1, const Diana::QVector &an, int maxJitter, bool useDiff=false, bool debugOn=false)
constructor
std::vector< Diana::QVectorC > fAveragePulse1Shifted
std::vector< bool > fValidSample
int GetMaxJitter() const
Diana::QVector GetFilterTD() const
kernel of the filter in the time domain
Diana::QVector fAverageNoise
std::vector< double > Get() const
Diana::QVector GetNoisePowerSpectrum() const
power spectrum of the original noise
const Diana::QVector & GetFiltered() const
get filtered samples
Diana::QVectorC GetFilterFD() const
filter in the frequency domain
double fFilteredAveragePulseHalfWidthValueRight
Diana::QVector GetSNRFD() const
Get SNR as a function of frequency
double GetCutOffFrequency() const
QError Filter(const Diana::QVector &p)
filter. In case of failure an error is returned.
Diana::QVector GetAveragePulse() const
get normalized average pulse
Diana::QVector fFilteredAverageNoise
QError BuildFilter()
double fFilteredAutoCorrelation
Wrapper for a specific QRealComplexFFT algorithm class.
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...