#ifndef D0Fitter_h #define D0Fitter_h #include "TString.h" #include "TObject.h" class TH1; class TF1; class D0Fitter : public TObject { static const Double_t kSqrtOf2Pi; //sqrt(2*pi) protected: static const Double_t fgBackgrSlopeDefault; //default slope of background static const Double_t fgSigmaDefault; //default sigma of signal static const Double_t fgMeanDefault; //default mean of signal static const Double_t fgUpFitLimitDefault;//default upper fit limit static const Double_t fgLowFitLimitDefault;//default lower fit limit public: // con- and destructor: // ======================================= explicit D0Fitter(TH1* hist = NULL); virtual ~D0Fitter(); // setters: // ======== virtual void SetHist(TH1* h) {SetHist(h, kFALSE);} virtual void SetHist(TH1* h, Bool_t defaultSigmaMeanBackgrExp); virtual void SetSigma() {SetSigma(fgSigmaDefault);} virtual void SetSigma(Double_t s); virtual void SetMean() {SetMean(fgMeanDefault);} virtual void SetMean(Double_t m); virtual void SetBackgrSlope() {SetBackgrSlope(fgBackgrSlopeDefault);} virtual void SetBackgrSlope(Double_t s); virtual void SetUpFitLimit() {SetUpFitLimit(fgUpFitLimitDefault);} virtual void SetUpFitLimit(Double_t lim) {fUpFitLimit = lim;} virtual void SetLowFitLimit() {SetLowFitLimit(fgLowFitLimitDefault);} virtual void SetLowFitLimit(Double_t lim) {fLowFitLimit = lim;} virtual void SetFitOption(const char* option) {fFitOption = option;} virtual void AddFitOption(const char* option) {fFitOption += option;} virtual void AddFitOption(char option) {fFitOption += option;} // getters: // ========= virtual Double_t GetND0() const; virtual Double_t GetND0Err() const; virtual Double_t GetBackgrSlope() const; virtual Double_t GetBackgrNorm() const; // virtual Double_t GetBackgrNormErr() const = 0; virtual Double_t GetSigma() const; virtual Double_t GetMean() const; // virtual Double_t GetSignalBack() const = 0; virtual Double_t GetHistBinSize() const; virtual const char* GetHistName() const; virtual Double_t GetUpFitLimit() const {return fUpFitLimit;} virtual Double_t GetLowFitLimit() const {return fLowFitLimit;} const char* GetFitOption () const {return fFitOption.Data();} // fit: // ========= virtual void Fit(Int_t mode = 0); virtual void Fit(Int_t mode, TH1* hist, Bool_t defSigMeanExp = kFALSE) { this->SetHist(hist, defSigMeanExp); Fit(mode);} static const Double_t GetBackgrSlopeDefault() {return fgBackgrSlopeDefault;} static const Double_t GetSigmaDefault() {return fgSigmaDefault;} static const Double_t GetMeanDefault() {return fgMeanDefault;} static const Double_t GetUpFitLimitDefault() {return fgUpFitLimitDefault;} static const Double_t GetLowFitLimitDefault() {return fgLowFitLimitDefault;} // this for the assignment operator: // TH1* GetHistPtr() const {return fHist;} protected: virtual void DetermFitMode(Int_t mode); virtual Double_t DetermBackgrStartParam(); virtual Double_t DetermNDstarStart(Double_t backgrNormStart); virtual void AddBackgrToHist(); virtual void DoTheFit(Double_t backgrNormStart,Double_t nD0Start); Bool_t UseLikelihoodOption(TH1* hist); TH1* fHist; Double_t fUpFitLimit; Double_t fLowFitLimit; TString fFitOption; // stores root's fitoption Bool_t fFixMean; Bool_t fFixSigma; Bool_t fFixBackgrSlope; TF1* fD0FitFormu; // pointer to full fitting fct. object static Double_t D0LinearBackgr(Double_t *x, Double_t *par); //fncts... static Double_t D0ExpBackgr(Double_t *x, Double_t *par); // ...used... static Double_t D0FitFct(Double_t* x, Double_t* par); // ... for fits static Double_t fgBinSize; // variables... static Double_t fgUpFitLimit; // ...needed... static Double_t fgLowFitLimit; // ...in fit functions ClassDef(D0Fitter,0) // fitting D0 plots }; #endif