00001 #ifndef PulseTemplate_h__ 00002 #define PulseTemplate_h__ 00003 00004 #include "TH1D.h" 00005 #include "TPulseIsland.h" 00006 #include "TFitterMinuit.h" 00007 #include "TFile.h" 00008 00009 #include <vector> 00010 00011 class PulseTemplate { 00012 private: 00013 TH1D* fTemplate; // Template histogram 00014 TFitterMinuit* fFitter; // MINUIT fitter to template 00015 00016 int fNPulses; // Number of pulses used in template 00017 int fNSigma; // Number of sigma around peak (about) to make template 00018 int fRefine; // Precision increase, each bin divided up into this many more bins 00019 int fNBins; // Number of bins in the template 00020 double fClockTick; // Bin width in time 00021 00022 double fSumX; // Sum of bin content for correlations 00023 double fSumX2; // Sum of square of bin content for correlation 00024 double fSum2X; // Square of sum of bin content for correlation 00025 00026 double fConvergence; // Average change of cosine of angle of template with each new pulse added 00027 double fConvergenceLimit; // Value the 00028 00029 00030 public: 00031 PulseTemplate(int nSigma = 3, int refine = 100, double convergence = 0.01); 00032 ~PulseTemplate(); 00033 00034 public: 00035 void AddPulse(TPulseIsland* pulse, double shift); 00036 double Correlation(TPulseIsland* pulse, double& ped, double& amp, double& time); 00037 double Chi2Fit(TPulseIsland* pulse, double& pedestal, double& amplitude, double& time); 00038 bool Converged(); 00039 00040 public: 00041 void Save(TFile* outfile); 00042 void Print(); 00043 00044 public: 00045 int GetNumberOfPulses(); 00046 00047 }; 00048 00049 #endif