OptimumFilter.hh

Go to the documentation of this file.
00001 
00008 #ifndef __QOPTIMUMFILTER_HH__
00009 #define __QOPTIMUMFILTER_HH__
00010 #include <vector>
00011 //#include "Sampler.hh"
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 
00029 class OptimumFilter {
00030   
00031 public:
00032 
00036   OptimumFilter();
00037 
00038 
00039   virtual ~OptimumFilter();
00040   
00044   QError Compute();
00045 
00050   QError Compute_d();
00055   QError SetFilters(const QVector &avg, const QVector &noise);
00059   QError SetFilters_d(const QVector &avg, const QVector &noise);
00063   float Amplitude(QVector &pSamples, float &amp) ;
00067   float PulseAmplitude(QVector &pSamples) ;
00071   float GetTVR();
00075   float GetTVL();
00079   float GetRT(){return RT;};
00080 
00085   float GetDT(){return DT;}
00086  
00090   float GetAdc2mV(){return pow(2.,-16.)*pow(10.,4);}; 
00094   float GetDelay(){return data.delay; };//fDelay;}
00098   float GetFracDelay(){return data.frac_delay; };//fDelay;}
00099 
00103   void SetTriggerPos(int trigger) { fTriggerPos = trigger; }; 
00104 
00105 
00106 
00107 
00111   void  ShapeParameters(QVector &SamplesFiltered);
00115   QVector PolFit(QVector &x,QVector& y);
00119   QError PowerSpectrum(const QVector &pSamples, QVector &samplesFiltered);
00123   QError Filter(const QVector &pSamples, QVector &samplesFiltered);
00127   QError Filter_d(const QVector &pSamples, QVector &samplesFiltered);
00131   QError FAmplitude(const QVector &pSamples, double &amp);
00132 
00137   float MultiplePulseCorrection(QVector &, QVector & , QVector &,bool);
00138   float GetAmplitude(){return data.amplitude;};
00139   float GetSecondAmplitude(){return data.second_amp;}; 
00140   float GetSecondDelay(){return data.second_delay;}; 
00141   void CallPileUp(){ fMultiPulse = true; } ; 
00145   void BiPol(QVector &, QVector &, QVector &); 
00149   const QVector& averagePulse(){return AvgPulse;}
00153   const QVector& averagePulse_f(){return AvgPulse_f;}
00157   const QVector& noiseSpectrum(){return fPS;}
00158 
00163   QVector ReconstructionFit(QVector & , QVector &, QVector &);
00164 
00168   QVector GetReconstructedFit(){return fReconstructedPulse;}; 
00169 
00170 
00175   void Decay_and_Rise(const QVector &);
00176 
00177 
00182   QVector fShift(QVector &, float &); 
00187   float GetBLS(){return fBS;};
00194 void SetPulseInfo(const QVector &); 
00195 //float Correlate(QVector & pSamples);
00196 private:
00197 // real and imaginary part of the average spectrum
00198 //
00199 PulseInfo data; 
00200   QVector AvgPulse;             
00201   int nSigPulses;
00202   
00203   // noise power spectrum
00204   QVector fPS;
00205   bool fMultiPulse; 
00206   int nNoisePS;
00207   unsigned int avg_nmax,fTriggerPos;
00208   //number of points used for TVL&TVR
00209   int rms_left, rms_right,fMaxRange,fSize, fBaseLineStart,fBaseLineNpt; 
00210 
00211   //conversion factors and delay 
00212   double conv,conv_d,fDelay;
00213 
00214   //shape parameters
00215   float tvl,tvr,RT,DT,fBS;
00216 
00217   // filter transfer function 
00218   QVectorC H;// real part
00219   // filtered average pulse
00220   QVector AvgPulse_f;
00221   //  Sampler * sam; 
00222   QVector fReconstructedPulse;
00223 
00224   };
00225 
00226 #endif
00227 

Generated on Fri Mar 6 13:40:40 2009 for CUORE Software by  doxygen 1.5.1