00001 #ifndef TEMPLATECONVOLVEAPGENERATOR_H__ 00002 #define TEMPLATECONVOLVEAPGENERATOR_H__ 00003 00004 #include "TSetupData.h" 00005 #include "TVAnalysedPulseGenerator.h" 00006 #include "definitions.h" 00007 #include "TTemplate.h" 00008 #include "TemplateArchive.h" 00009 #include "TTemplateConvolveAnalysedPulse.h" 00010 #include "TAPAlgorithms.h" 00011 #include <vector> 00012 00013 class TemplateConvolver; 00014 00015 class TemplateConvolveAPGenerator:public TVAnalysedPulseGenerator { 00016 00017 public: 00018 TemplateConvolveAPGenerator(TAPGeneratorOptions* opts); 00019 virtual ~TemplateConvolveAPGenerator(){}; 00020 00021 public: 00022 virtual int ProcessPulses( const PulseIslandList&,AnalysedPulseList&); 00023 00024 virtual bool MayDivideTPIs(){return true;}; 00025 00026 static const char* TapType() { 00027 return TTemplateConvolveAnalysedPulse::Class()->GetName(); 00028 } 00029 00030 private: 00031 bool PassesIntegralRatio(const TPulseIsland* pulse,double& integral, double& ratio)const; 00033 double CalibrateTime(double clockTime, const TPulseIsland* tpi)const; 00034 00035 private: 00036 static TemplateArchive* fTemplateArchive; 00037 TTemplate* fTemplate; 00038 TemplateConvolver* fConvolver; 00039 00040 double fIntegralMax, fIntegralMin; 00041 double fIntegralRatioMax, fIntegralRatioMin; 00042 double fTemplateAmp, fTemplatePed, fTemplateTime; 00043 double fPedestal; 00044 double fTicksPerNs, fMuScTimeOffset; 00045 bool fExpectPileUp; // Do we expect this generator to have to deal with pile-up waveforms? 00046 00047 Algorithm::IntegralRatio* fIntegralRatio; 00048 00049 }; 00050 00051 #endif //TEMPLATECONVOLVEAPGENERATOR_H__