OptimumFilter.hh
Go to the documentation of this file.00001
00008 #ifndef __QOPTIMUMFILTER_HH__
00009 #define __QOPTIMUMFILTER_HH__
00010 #include <vector>
00011
00012
00013 #include "QVector.hh"
00014 #include "QVectorC.hh"
00015 #include "QError.hh"
00016 #include "cmath"
00017 using namespace std;
00018 using namespace Cuore;
00019
00020
00021 struct PulseInfo
00022 {
00023 int max_index;
00024 float amplitude,frac_delay,delay,second_amp,second_delay;
00025 };
00026
00027
00028 class OptimumFilter {
00029
00030 public:
00031
00032 enum PeakSearchOption
00033 {
00034 Standard = 1,
00035 Simple = 2 ,
00036 Safe = 3 ,
00037 };
00038
00039
00040
00044 OptimumFilter();
00045
00046
00047 virtual ~OptimumFilter();
00048
00052 QError Compute();
00053
00058 QError Compute_d();
00063 QError SetFilters(const QVector &avg, const QVector &noise);
00067 QError SetFilters_d(const QVector &avg, const QVector &noise);
00071 float Amplitude(QVector &pSamples, float &) ;
00075 float PulseAmplitude(QVector &pSamples) ;
00079 float GetTVR();
00083 float GetTVL();
00087 float GetRT(){return RT;};
00088
00093 float GetDT(){return DT;}
00094
00098 float GetAdc2mV(){return pow(2.,-16.)*pow(10.,4);};
00102 float GetDelay(){return data.delay; };
00106 float GetFracDelay(){return data.frac_delay; };
00107
00111 void SetTriggerPos(int trigger) { fTriggerPos = trigger; };
00112
00113
00114
00115
00119 void ShapeParameters(QVector &SamplesFiltered);
00123 QVector PolFit(QVector &x,QVector& y);
00127 QError PowerSpectrum(const QVector &pSamples, QVector &samplesFiltered);
00131 QError Filter(const QVector &pSamples, QVector &samplesFiltered);
00135 QError Filter_d(const QVector &pSamples, QVector &samplesFiltered);
00139 QError FAmplitude(const QVector &pSamples, double &);
00140
00145 float MultiplePulseCorrection(QVector &, QVector & , QVector &,bool);
00146 float GetAmplitude(){return data.amplitude;};
00147 float GetSecondAmplitude(){return data.second_amp;};
00148 float GetSecondDelay(){return data.second_delay;};
00149 void CallPileUp(){ fMultiPulse = true; } ;
00153 void BiPol(QVector &, QVector &, QVector &);
00157 const QVector& averagePulse(){return AvgPulse;}
00161 const QVector& averagePulse_f(){return AvgPulse_f;}
00165 const QVector& noiseSpectrum(){return fPS;}
00166
00171 QVector ReconstructionFit(QVector & , QVector &, QVector &);
00172
00176 QVector GetReconstructedFit(){return fReconstructedPulse;};
00177
00178
00183 void Decay_and_Rise(const QVector &);
00184
00185
00190 QVector fShift(QVector &, float &);
00191
00196 float GetBLS(){return fBS;};
00197
00204 void SetPulseInfo(const QVector &);
00205
00212 void SetPulseInfo(const QVector &, QVector &);
00216 void LookForTrigger(int opt) { fLookForTrigger = opt; };
00217
00218
00219
00220
00221
00222
00223 private:
00224
00225
00226 PulseInfo data;
00227 QVector AvgPulse;
00228 int nSigPulses;
00229
00230
00231 QVector fPS;
00232 bool fMultiPulse ;
00233 int fLookForTrigger;
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246 int nNoisePS;
00247 unsigned int avg_nmax,fTriggerPos;
00248
00249 int rms_left, rms_right,fMaxRange,fSize, fBaseLineStart,fBaseLineNpt;
00250
00251
00252 double conv,conv_d,fDelay;
00253
00254
00255 float tvl,tvr,RT,DT,fBS;
00256
00257
00258
00259 QVectorC H;
00260
00261 QVector AvgPulse_f;
00262
00263 QVector fReconstructedPulse;
00264
00265 };
00266
00267 #endif
00268