00001 #ifndef TEMPLATEFITAPGENERATOR_H__
00002 #define TEMPLATEFITAPGENERATOR_H__
00003
00004 #include "TSetupData.h"
00005 #include "TVAnalysedPulseGenerator.h"
00006 #include "definitions.h"
00007 #include "TemplateArchive.h"
00008 #include "TemplateFitter.h"
00009 #include "TemplateMultiFitter.h"
00010 #include "TTemplate.h"
00011 #include "TTemplateFitAnalysedPulse.h"
00012 #include "TAPAlgorithms.h"
00013
00014 class TemplateFitAPGenerator:public TVAnalysedPulseGenerator {
00015
00016 public:
00017 TemplateFitAPGenerator(TAPGeneratorOptions* opts);
00018 virtual ~TemplateFitAPGenerator();
00019
00020 public:
00021 virtual int ProcessPulses( const PulseIslandList&,AnalysedPulseList&);
00022
00023
00024
00025 virtual bool MayDivideTPIs(){return true;};
00026
00027
00028 static const char* TapType() {
00029 return TTemplateFitAnalysedPulse::Class()->GetName();
00030 }
00031
00032 private:
00033 bool PassesIntegralRatio(const TPulseIsland* pulse,double& integral, double& ratio)const;
00034 bool RefitWithTwo( TH1D* tpi, TTemplateFitAnalysedPulse*& tap_one, TTemplateFitAnalysedPulse*& tap_two)const;
00035 void InitializeSecondPulse( TH1D* tpi, const TTemplateFitAnalysedPulse* tap_one,
00036 int& second_time, double& second_scale)const;
00037
00038 private:
00039 static TemplateArchive* fTemplateArchive;
00040 static TemplateArchive* fTemplateArchive2;
00041 double fIntegralMax, fIntegralMin;
00042 double fIntegralRatioMax, fIntegralRatioMin;
00043 double fTemplateAmp, fTemplatePed, fTemplateTime;
00044 double fTemplate2Amp, fTemplate2Ped, fTemplate2Time;
00045 double fInitPedestal;
00046 double fChi2MinToRefit;
00047 TTemplate* fTemplate;
00048 TTemplate* fTemplate2;
00049 TemplateMultiFitter* fFitter;
00050 TemplateMultiFitter* fDoubleFitter;
00051 Algorithm::IntegralRatio* fIntegralRatio;
00052 Algorithm::MaxBinAmplitude fMaxBin;
00053
00054 };
00055
00056 #endif //TEMPLATEFITAPGENERATOR_H__