QStabChannel.hh

00001 
00010 #ifndef __Q_STAB_CHANNEL_HH_
00011 #define __Q_STAB_CHANNEL_HH_
00012 
00013 
00014 #include "QVector.hh"
00015 #include "SignalProcessor.hh"
00016 #include <vector>
00017 #define MAXDEGREE 20
00018 
00019 using namespace Cuore;
00020 
00021 class TH1F;
00022 class TH2F;
00023 class TF1;
00024 class TCanvas;
00025 class QStabFitter;
00026 
00027 class QStabChannel {
00028         public:
00029 
00030                 QStabChannel(int ch, std::string&, int, int, double, unsigned int, int);
00031 
00032                 QStabChannel();
00033 
00034                 virtual ~QStabChannel();
00035 
00036                 void Dump();
00037 
00038                 inline int GetChannel(){return fChannel;};
00039 
00044                 void FillVectors(double ampl, double time, double baseline);
00045 
00046                 void FindPeaks(bool, bool, bool);
00052                 void AddInterval(double time);
00053                 
00054                 void MakeTimeHistograms();
00055 
00056                 void MakeBaselineHistograms();
00065   bool FitTimeHistograms(unsigned int degree, bool gr, FILE* outF, std::string method = "profile" );
00074                 bool FitBaselineHistograms(unsigned int degree, bool gr, std::string grF , FILE* outF, std::string method = "profile" );
00075 
00076                 /*
00077                  * Remove spurious pulses from the heater pulses.
00078                  * The pulses removed are those outside the main distribution 
00079                  */
00080                 void RemoveSpurious(double nStdDev, double nSkewness);
00081 
00082 
00083                 void LastFit(bool gr, FILE* outF, std::string method = "profile" );
00084 
00085                 inline void RemoveSpurious(){
00086                         RemoveSpuriousTimeDom();
00087 
00088                 }
00089 
00094                 void SaveDiscontinuities();
00095                 /*
00096                  * @brief Return the number of discontinuities found for this channel
00097                  * 
00098                  */
00099                 int GetNumberOfDiscontinuities();
00100 
00101                 QVector GetDiscontinuitiesAmplitudes();
00102 
00103                 const double* GetAmplitudes(int interval){return fAmplitudes[interval].GetArray();}
00104                 const double* GetTimes(int interval){return fTimes[interval].GetArray();}
00105                 const double* GetBaselines(int interval){return fBaselines[interval].GetArray();}
00106 
00107                 int GetEntries(int interval){return fAmplitudes[interval].Size();}
00108 
00109                 void SetFitVsBaseline(bool);
00110                 void RemoveSpuriousTimeDom();
00111                 void RemoveSpuriousBaselDom();
00112                 void CutInAmplitude(double min = 2000, double max = 10000);
00113 
00114                 void DumpDistributions(std::string);
00115 
00116                 void ReadInitialParametersFile();
00117 
00118                 void SetInitialParametersFile(FILE*);
00119 
00120 
00121         private:
00122                 void Clear();
00123                 void AddOneEntry();
00124                 void RemoveOneEntry();
00125                 bool HasProblems(int);
00126                 void Smooth(QVector&, QVector&, int);
00127                 void Derivate(QVector&, QVector&, int);
00128                 int CheckFit(TF1&, int);
00129                 void SetInitialParameters(int interval, int n);
00130 
00131                 int fChannel;
00132                 std::string fOutFileName;
00133                 int fNSamples;
00134                 int fDebounce;
00135                 double fNSigma;
00136                 unsigned int fDerivDistance;
00141                 int fMinPoints;
00142                 int fNTimeIntervals;
00143                 bool fIsActive;
00144                 int fNDiscontinuities;
00145                 bool fFitVsBaseline;
00146                 double *fParameters;
00147                 double *fInitialParameters;
00148                 FILE* fInitialParametersFile;
00149 
00150                 std::vector<QVector> fAmplitudes;
00151                 std::vector<QVector> fTimes;
00152                 std::vector<QVector> fBaselines;
00153                 std::vector<QVector> fAmplAverages;
00154                 std::vector<QVector> fBaselAverages;
00155                 std::vector<QVector> fDerivatives;
00156                 std::vector<QVector> fSmtDerivatives;
00157                 std::vector<QVector> fSecDerivatives;
00158                 std::vector<QVector> fSmtSecDerivatives;
00159                 std::vector<QVector> fErrDerivatives;
00160                 std::vector<QVector> fSecErrDerivatives;
00161                 std::vector<QVector> fDiscontinuitiesPoints;
00162                 std::vector<QVector> fDiscontinuitiesAmplitudes;
00163                 std::vector<QVector> fDiscontinuitiesTimes;
00164                 std::vector<int> fProblematicIntervals;
00165                 std::vector<double> fChisqOverNDFs;
00166                 std::vector<int> fBestDegreeForFits;
00167                 std::vector<bool> fFirstFitSatisfactory;
00168 
00169                 QVector fTDiscontinuities;
00170                 QStabFitter* fFitter;
00171 
00172 
00173 };
00174 
00175 #endif

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