FairRoot/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 {
25  arbitrary = 0,
26  symmetric = 1,
28  };
29 
31  virtual ~PndEmcFadcFilter();
32 
33  virtual void Filter(const std::vector<Double_t>& in, std::vector<Double_t>& out) const;
34  void SetData(Double_t data[], Int_t i_size, Int_t i_offset);
35  Int_t MinIndex() const;
36  Int_t MaxIndex() const;
37  Int_t Size() const;
38  void Convolute(const PndEmcFadcFilter& filt);
39  void Convolute(const PndEmcFadcFilter& lhs, const PndEmcFadcFilter& rhs);
40  void Clear();
41 
42  // Different filters
43  //void SetupIntegrator(Int_t i_width);
44  void SetupMA(Int_t i_width); // Moving average
45  void SetupMWD(Int_t i_width, Double_t tau); // Moving window deconvolution
46  void SetupMatchedFilter(Int_t i_width, PndEmcAbsPulseshape *pulseshape, Double_t sampleRate); // Matched digital filter
47  void SetupBipolarTrapez(Int_t i_rise, Int_t i_flat, Int_t i_width);
48  //void SetupTriangle(Int_t i_rise);
49  void SetupTrapez(Int_t i_rise, Int_t i_flat);
50  void SetupBipolarTriangle(Int_t i_rise);
51  void SetupDifferentiator(Int_t i_lag=0, Int_t i_width=1);
52  void SetupDoubleDifferentiator(Int_t i_npos=1, Int_t i_nneg=1,
53  Int_t i_nzero=0);
54  void SetupPZDifferentiator(Int_t i_lag=0, Double_t d_fac=1.);
55  void SetNormalizeFloating(Double_t d_norm=1.);
56  void SetNormalizeInteger(Int_t i_shift=0);
57 
58  std::vector<Double_t> GetWeights() const {return fCoeff;}
59 
60 private:
61  std::vector<Double_t> fCoeff;
62  Int_t fOffset;
63  Int_t fType; // arbitrary, symmetric, antisymmetric
66  Int_t fShiftCount;
67 
68  ClassDef(PndEmcFadcFilter,1)
69 };
70 
71 #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)
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)
void SetupMatchedFilter(Int_t i_width, PndEmcAbsPulseshape *pulseshape, Double_t sampleRate)
Double_t
Int_t MinIndex() const
void SetupDifferentiator(Int_t i_lag=0, Int_t i_width=1)
TFile * out
Definition: reco_muo.C:20
virtual ~PndEmcFadcFilter()
Int_t Size() const
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
std::vector< Double_t > fCoeff
std::vector< Double_t > GetWeights() const
Int_t MaxIndex() const
void SetupTrapez(Int_t i_rise, Int_t i_flat)
void SetNormalizeInteger(Int_t i_shift=0)