Diana Software
QBiComponentOptimumFilter.hh
Go to the documentation of this file.
1 #ifndef _Q_BICOMPONENTOPTIMUMFILTER_HH_
2 #define _Q_BICOMPONENTOPTIMUMFILTER_HH_
3 
11 #include "QVector.hh"
12 #include "QVectorC.hh"
13 #include <vector>
14 
15 namespace Diana { class QRealComplexFFT; };
16 
18 
19  public:
20 
29  QBiComponentOptimumFilter(const Diana::QVector& ap1, const Diana::QVector& ap2, const Diana::QVector& an, size_t maxJitter, bool diff=false);
30 
31  /* @brief destructor */
33 
35  double GetFilteredNoiseRMS1() const { return fFilteredRMS1; }
36 
38  double GetFilteredNoiseRMS2() const { return fFilteredRMS2; }
39 
42  const std::vector<int>& GetJitters() const { return fJitters;}
43 
44  // Event by event
46  QError Filter(const Diana::QVector& p) ;
47 
49  void GetFiltered(Diana::QVector& f1, Diana::QVector& f2) const;
50 
52  const std::vector<double>& GetChiSquareWithJitter() const;
53 
55  int GetJitterAtMinimum() const;
56 
58  double GetChiSquareAtMinimium() const;
59 
61  void GetAmplitude(double& a1, double& a2, double& integral) const;
62 
64  QError GetInterpolated(double& jitter, double& a1, double& a2,double& integral) const;
65 
66  Diana::QVector GetFitFunction(const double jitter, const double a1, const double a2) const;
67 
68  private:
69 
71  size_t fSize;
72  bool fIsDiff;
74  Diana::QRealComplexFFT* fTransformer;
75 
76  Diana::QVectorC fFilter1;
77  Diana::QVectorC fFilter2;
78 
79  Diana::QVector fAverageNoise;
80  std::vector<int> fJitters;
81  std::vector<Diana::QVectorC> fAveragePulse1Shifted;
82  std::vector<Diana::QVectorC> fAveragePulse2Shifted;
83  Diana::QVector fAveragePulse1, fAveragePulse2;
84 
85  // event by event;
86  Diana::QVector fFiltered1;
87  Diana::QVector fFiltered2;
88  std::vector<double> fChiSquareWithJitter;
92  double fAmplitude1;
93  double fAmplitude2;
94  double fFilteredRMS1;
95  double fFilteredRMS2;
96 
97 
98  Diana::QVector NormalizeVector(const Diana::QVector& vec) const;
99  void BuildFilter(const Diana::QVector& ap1, const Diana::QVector& ap2);
100  QError ComputeAmplitude(const Diana::QVectorC& transformed);
101  std::vector<double> ChiSquare(const Diana::QVectorC& p, const Diana::QVector& ap1Filtered, const Diana::QVector& ap2Filtered) const ;
102 
103  // QRootCintTrigger(QBiComponentOptimumFilter)
104 
105 };
106 
107 #endif
double diff
Definition: CheckOFShape.C:173
ap2
Definition: CheckOF.C:51
QVector an(N)
QVector vec(3)
Dual component optimum filter.
QError ComputeAmplitude(const Diana::QVectorC &transformed)
std::vector< double > ChiSquare(const Diana::QVectorC &p, const Diana::QVector &ap1Filtered, const Diana::QVector &ap2Filtered) const
Diana::QVector NormalizeVector(const Diana::QVector &vec) const
QError Filter(const Diana::QVector &p)
filter p. In case of failure an error is returned.
Diana::QVector GetFitFunction(const double jitter, const double a1, const double a2) const
std::vector< double > fChiSquareWithJitter
double GetChiSquareAtMinimium() const
get chi square value at its minimum, if Filter()!=QERR_SUCCESS throw the error
void BuildFilter(const Diana::QVector &ap1, const Diana::QVector &ap2)
double GetFilteredNoiseRMS2() const
expected noise rms on filtered comp. 1
QBiComponentOptimumFilter(const Diana::QVector &ap1, const Diana::QVector &ap2, const Diana::QVector &an, size_t maxJitter, bool diff=false)
constructor
const std::vector< int > & GetJitters() const
get array of jitters. They range between (-maxJitter,+maxJitter), 2 extra jitters on both sides are g...
double GetFilteredNoiseRMS1() const
expected noise rms on filtered comp. 1
int GetJitterAtMinimum() const
get jitter at the minimum of the chi square. if Filter()!=QERR_SUCCESS throw the error
const std::vector< double > & GetChiSquareWithJitter() const
get chi square as a function of jitter, same indexing of GetJitters(). if Filter()==QERR_SIZE_NOT_MAT...
QError GetInterpolated(double &jitter, double &a1, double &a2, double &integral) const
get values at interpolated chi^2 minimum. Three points around the minimum are used for a parabolic in...
void GetFiltered(Diana::QVector &f1, Diana::QVector &f2) const
get filtered waveforms. if Filter()==QERR_SIZE_NOT_MATCH throws the error
Diana::QRealComplexFFT * fTransformer
std::vector< Diana::QVectorC > fAveragePulse1Shifted
std::vector< Diana::QVectorC > fAveragePulse2Shifted
void GetAmplitude(double &a1, double &a2, double &integral) const
get amplitudes at chi^2 minimum. if Filter()!=QERR_SUCCESS throws the error
error class with error type and description
Definition: QError.hh:115
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...