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
00078
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
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