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 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 &amp) ;
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; };//fDelay;}
00106   float GetFracDelay(){return data.frac_delay; };//fDelay;}
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 &amp);
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 // real and imaginary part of the average spectrum
00225 //
00226 PulseInfo data; 
00227   QVector AvgPulse;             
00228   int nSigPulses;
00229   
00230   // noise power spectrum
00231   QVector fPS;
00232   bool fMultiPulse ; 
00233   int fLookForTrigger; 
00234 
00235  /*
00236 
00237   PEAK SEARCH OPTION :
00238 0:  Search for maximum using DAQ informations
00239 1:  Search for the absolute maximum in the complete time window 
00240 2:  Search for the first maximum after the trigger 
00241 3:  Search for the absolute maximum near the average pulse maximum position 
00242 
00243 */ 
00244 
00245 
00246   int nNoisePS;
00247   unsigned int avg_nmax,fTriggerPos;
00248   //number of points used for TVL&TVR
00249   int rms_left, rms_right,fMaxRange,fSize, fBaseLineStart,fBaseLineNpt; 
00250 
00251   //conversion factors and delay 
00252   double conv,conv_d,fDelay;
00253 
00254   //shape parameters
00255   float tvl,tvr,RT,DT,fBS;
00256 
00257 
00258 // filter transfer function 
00259 QVectorC H;// real part
00260 // filtered average pulse
00261 QVector AvgPulse_f;
00262 //  Sampler * sam; 
00263 QVector fReconstructedPulse;
00264 
00265 };
00266 
00267 #endif
00268 

Generated on Tue Nov 16 10:49:58 2010 for CUORE Software by  doxygen 1.5.6