source: trunk/MagicSoft/Mars/mextralgo/MExtralgoDigitalFilter.h@ 8049

Last change on this file since 8049 was 7942, checked in by tbretz, 18 years ago
*** empty log message ***
File size: 2.1 KB
Line 
1#ifndef MARS_MExtralgoDigitalFilter
2#define MARS_MExtralgoDigitalFilter
3
4#ifndef ROOT_TROOT
5#include <TROOT.h>
6#endif
7
8class MExtralgoDigitalFilter
9{
10private:
11 // Input
12 Float_t *fVal;
13 Int_t fNum;
14
15 Float_t *fWeightsAmp;
16 Float_t *fWeightsTime;
17
18 Int_t fWeightsPerBin; // Number of weights per data bin
19
20 // Result
21 Float_t fTime;
22 Float_t fTimeDev;
23 Float_t fSignal;
24 Float_t fSignalDev;
25
26 inline void Eval(Double_t &sumamp, Double_t &sumtime, const Int_t windowsize, const Int_t startv, const Int_t startw=0) const
27 {
28 //
29 // Slide with a window of size windowsize over the sample
30 // and multiply the entries with the corresponding weights
31 //
32 sumamp = 0;
33 sumtime = 0;
34
35 // Shift the start of the weight to the center of sample 0
36 Float_t const *wa = fWeightsAmp + fWeightsPerBin/2 + startw;
37 Float_t const *wt = fWeightsTime + fWeightsPerBin/2 + startw;
38 Float_t *const beg = fVal+startv;
39
40 for (Float_t const *pex=beg; pex<beg+windowsize; pex++)
41 {
42 sumamp += *wa * *pex;
43 sumtime += *wt * *pex;
44
45 // Step forward by one bin
46 wa += fWeightsPerBin;
47 wt += fWeightsPerBin;
48 }
49 }
50
51public:
52 MExtralgoDigitalFilter(Float_t *val, Int_t n, Float_t *wa, Float_t *wt)
53 : fVal(val), fNum(n),
54 fWeightsAmp(wa), fWeightsTime(wt), fTime(0), fTimeDev(-1), fSignal(0), fSignalDev(-1)
55 {
56 }
57
58 void SetWeightsPerBin(Int_t res) { fWeightsPerBin=res; }
59
60 Float_t GetTime() const { return fTime; }
61 Float_t GetSignal() const { return fSignal; }
62
63 Float_t GetTimeDev() const { return fTimeDev; }
64 Float_t GetSignalDev() const { return fSignalDev; }
65
66 void GetSignal(Float_t &sig, Float_t &dsig) const { sig=fSignal; dsig=fSignalDev; }
67 void GetTime(Float_t &sig, Float_t &dsig) const { sig=fTime; dsig=fTimeDev; }
68
69 Float_t ExtractNoise(Int_t iter, Int_t windowsize) const;
70 void Extract(Int_t windowsize, Float_t timeshift);
71};
72
73
74#endif
Note: See TracBrowser for help on using the repository browser.