Diana Software
QOptimumShapeFilter.cc
Go to the documentation of this file.
1 #include "QOptimumShapeFilter.hh"
2 #include "QVector.hh"
3 
4 using namespace Diana;
5 
6 QOptimumShapeFilter::QOptimumShapeFilter(const QVector& ap1, const QVector& an, int maxJitter, bool useDiff, bool debugOn, size_t step) : QOptimumFilter(ap1,an), fStep(step)
7 {
8  fMaxJitter = maxJitter;
9  fDebugOn = debugOn;
10  fUseDiff = useDiff;
11 
12 
13  // Save AP before it gets modified by ManipulateInputs()
15 
16  // Build OF with new AP
19  // note that BuildFilter calls ManipulateInputs()
20  err = BuildFilter();
21  if(err != QERR_SUCCESS) {DianaThrow(err);}
23  }
24 
25 
26  // filter original AP with OF built with modified shape to study the shape
29 
36  double max = fOriginalAveragePulseFilteredShifted.GetMax();
37 
41  for(int i = fOriginalAveragePulseFilteredMaxPos; i > 0; i--) {
44  }
47  }
50  }
51 
52  }
53  fFilter1 /= gain;
54  fOffset = -base/gain;
55 }
56 
57 
58 
60 {
61  // substitute the average pulse with a fast one
64  fMaxPos = fAveragePulse1.GetMaxIndex();
65  fStep = 2;
66 
67  QVector fastAp(fSize);
68  fastAp.Initialize(0);
69  for(int i = fMaxPos; i > 0; i--) {
70  // sample the rising edge at step rate
71  int j = fStep*(i-fMaxPos)+fMaxPos;
72  if(j > 0) {
73  fastAp[i] = fAveragePulse1[j];
74  // mirror to the right
75  fastAp[2*fMaxPos-i] = fAveragePulse1[j];
76  }
77  }
78  fAveragePulse1 = fastAp;
80  return err;
81 }
82 
83 
85 {
88  return err;
89 }
90 
91 
93 {
96  return err;
97 }
98 
100 {
103  return err;
104 }
106 {
109  return err;
110 }
111 
112 
double max
Definition: CheckOF.C:53
err
Definition: CheckOF.C:114
QVector an(N)
#define DianaThrow(obj)
Definition: QDianaDebug.hh:26
@ QERR_SUCCESS
Definition: QError.hh:27
error class with error type and description
Definition: QError.hh:115
Optimum filter implemented with windowing and zeros.
QError fCheckForFilteredSamples
Diana::QVector NormalizeVector(const Diana::QVector &vec) const
Diana::QVector GetFilteredShifted() const
get filtered and shifted samples by fMaxPos
Diana::QVectorC fFilter1
QError fCheckForBuiltFilter
virtual QError ManipulateInputs()
Diana::QVector fAveragePulse1
QError Filter(const Diana::QVector &p)
filter. In case of failure an error is returned.
QError BuildFilter()
QError GetDecayTime(double &decayTime) const
QError GetChiLeft(double &chiLeft) const
Diana::QVector fOriginalAveragePulseFilteredShifted
size_t fOriginalAveragePulseFilteredMaxPos
QError GetRiseTime(double &riseTime) const
Diana::QVector fOriginalAveragePulse
QError GetChiRight(double &chiRight) const
QOptimumShapeFilter(const Diana::QVector &ap1, const Diana::QVector &an, int maxJitter, bool useDiff, bool debugOn=false, size_t step=2)
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...