PandaRoot
PndEmcFadcFilter.h
Go to the documentation of this file.
1 //-----------------------------------------------------------
2 //
3 // Description:
4 // FADC FIR (finite impulse response) filter
5 // Author Dima Melnychuk
6 // (based on original code by A.Mykulyak)
7 //-----------------------------------------------------------
8 
9 #ifndef PNDEMCFadcFilter_HXX
10 #define PNDEMCFadcFilter_HXX
11 
12 #include <vector>
13 #include "TObject.h"
14 
16 
21 class PndEmcFadcFilter : public TObject {
22 
23  public:
24  enum type { arbitrary = 0, symmetric = 1, antisymmetric = -1 };
25 
27  virtual ~PndEmcFadcFilter();
28 
29  virtual void Filter(const std::vector<Double_t> &in, std::vector<Double_t> &out) const;
30  void SetData(Double_t data[], Int_t i_size, Int_t i_offset);
31  Int_t MinIndex() const;
32  Int_t MaxIndex() const;
33  Int_t Size() const;
34  void Convolute(const PndEmcFadcFilter &filt);
35  void Convolute(const PndEmcFadcFilter &lhs, const PndEmcFadcFilter &rhs);
36  void Clear();
37 
38  // Different filters
39  // void SetupIntegrator(Int_t i_width);
40  void SetupMA(Int_t i_width); // Moving average
41  void SetupMWD(Int_t i_width, Double_t tau); // Moving window deconvolution
42  void SetupMatchedFilter(Int_t i_width, PndEmcAbsPulseshape *pulseshape, Double_t sampleRate); // Matched digital filter
43  void SetupBipolarTrapez(Int_t i_rise, Int_t i_flat, Int_t i_width);
44  // void SetupTriangle(Int_t i_rise);
45  void SetupTrapez(Int_t i_rise, Int_t i_flat);
46  void SetupBipolarTriangle(Int_t i_rise);
47  void SetupDifferentiator(Int_t i_lag = 0, Int_t i_width = 1);
48  void SetupDoubleDifferentiator(Int_t i_npos = 1, Int_t i_nneg = 1, Int_t i_nzero = 0);
49  void SetupPZDifferentiator(Int_t i_lag = 0, Double_t d_fac = 1.);
50  void SetNormalizeFloating(Double_t d_norm = 1.);
51  void SetNormalizeInteger(Int_t i_shift = 0);
52 
53  std::vector<Double_t> GetWeights() const { return fCoeff; }
54 
55  private:
56  std::vector<Double_t> fCoeff;
57  Int_t fOffset;
58  Int_t fType; // arbitrary, symmetric, antisymmetric
59  Bool_t fIntegerize;
60  Double_t fNormFactor;
61  Int_t fShiftCount;
62 
63  ClassDef(PndEmcFadcFilter, 1)
64 };
65 
66 #endif
void SetupPZDifferentiator(Int_t i_lag=0, Double_t d_fac=1.)
void SetupMA(Int_t i_width)
virtual void Filter(const std::vector< Double_t > &in, std::vector< Double_t > &out) const
void SetNormalizeFloating(Double_t d_norm=1.)
void SetupBipolarTriangle(Int_t i_rise)
std::vector< Double_t > GetWeights() const
void SetupBipolarTrapez(Int_t i_rise, Int_t i_flat, Int_t i_width)
FADC FIR (finite impulse response) filter.
void SetupMWD(Int_t i_width, Double_t tau)
void Convolute(const PndEmcFadcFilter &filt)
Int_t Size() const
void SetupMatchedFilter(Int_t i_width, PndEmcAbsPulseshape *pulseshape, Double_t sampleRate)
void SetupDifferentiator(Int_t i_lag=0, Int_t i_width=1)
virtual ~PndEmcFadcFilter()
void SetData(Double_t data[], Int_t i_size, Int_t i_offset)
void SetupDoubleDifferentiator(Int_t i_npos=1, Int_t i_nneg=1, Int_t i_nzero=0)
pulseshape interface
Int_t MinIndex() const
Int_t MaxIndex() const
void SetupTrapez(Int_t i_rise, Int_t i_flat)
void SetNormalizeInteger(Int_t i_shift=0)