00001 #ifndef TTEMPLATEFITANALYSEDPULSE_H 00002 #define TTEMPLATEFITANALYSEDPULSE_H 00003 00004 #include "TAnalysedPulse.h" 00005 #include "TTemplate.h" 00006 #include <TRef.h> 00007 #include <TObject.h> 00008 00009 class TTemplateFitAnalysedPulse:public TAnalysedPulse{ 00010 public: 00012 TTemplateFitAnalysedPulse():TAnalysedPulse(){}; 00013 00017 TTemplateFitAnalysedPulse(const IDs::source& sourceID, 00018 const TPulseIslandID& parentID, const TPulseIsland* parentTPI); 00019 00020 // defined in .cpp file to force vtable to be built 00021 virtual ~TTemplateFitAnalysedPulse(); 00022 00025 int GetFitStatus()const{return fStatus;} 00026 double GetChi2()const{return fChi2;} 00027 int GetNDoF()const{return fNDoF;} 00028 double GetTimeErr()const{return fTimeErr;} 00029 double GetPedestalErr()const{return fPedestalErr;} 00030 double GetAmplitudeErr()const{return fAmplitudeErr;} 00031 const TTemplate* GetTemplate()const{return (const TTemplate*) fTemplate.GetObject();} 00032 double GetResidualIntegral()const{return fResidualTotal;} 00033 double GetIntegralRatio()const{return fIntegralRatio;} 00034 bool WasFirstOfDouble()const{return fOtherPulse && !fIsPileUpPulse;} 00036 00039 double GetBinContent(int i)const; 00040 const TH1F* GetHisto()const; 00041 const TH1F* GetResidual()const{return fResidual;} 00043 00047 void SetTimeOffset(const double& val){TAnalysedPulse::SetTime(GetTemplate()->GetTime()/GetTemplate()->GetRefineFactor()+val);} 00048 void SetAmplitudeScaleFactor(const double& val){TAnalysedPulse::SetAmplitude(GetTemplate()->GetAmplitude()*val);} 00049 void SetTime(const double& val, const double& err){TAnalysedPulse::SetTime(val); fTimeErr=err;} 00050 void SetAmplitude(const double& val, const double& err){TAnalysedPulse::SetAmplitude(val); fAmplitudeErr=err;} 00051 void SetPedestal(const double& val, const double& err){TAnalysedPulse::SetPedestal(val); fPedestalErr=err;} 00052 void SetChi2(const double& val){fChi2=val;} 00053 void SetNDoF(const double& val){fNDoF=val;} 00054 void SetFitStatus(const double& val){fStatus=val;} 00055 void SetTemplate(TTemplate* val){fTemplate=val;} 00056 void SetResidual(const TH1F* val){fResidual=val;} 00057 void SetResidualIntegral(double val){fResidualTotal=val;} 00058 void SetIntegralRatio(double val){fIntegralRatio=val;} 00060 00061 void SetOtherPulse(TTemplateFitAnalysedPulse* pulse){fOtherPulse=pulse;} 00062 void IsPileUpPulse(bool is=true){fIsPileUpPulse=is;} 00063 00064 using TAnalysedPulse::SetAmplitude; 00065 using TAnalysedPulse::SetPedestal; 00066 using TAnalysedPulse::SetTime; 00067 00069 virtual void Draw(const TH1F* tpi_pulse)const; 00070 00071 private: 00072 int fStatus; 00073 double fChi2, fNDoF; 00074 double fIntegralRatio; 00075 double fTimeErr, fAmplitudeErr, fPedestalErr; 00076 TRef fTemplate; 00077 const TH1F* fResidual; 00078 mutable const TH1F* fHisto; 00079 double fResidualTotal; 00080 00081 bool fIsPileUpPulse; 00082 TTemplateFitAnalysedPulse* fOtherPulse; 00083 00084 ClassDef(TTemplateFitAnalysedPulse,1); 00085 }; 00086 00087 #endif // TTEMPLATEFITANALYSEDPULSE_H