// Author : Gero Flucke // created : 2002-2004 // last change: $Date: 2005/11/26 20:04:56 $ // by : $author$ #ifndef DstarDmFitterSpecial_I_h #define DstarDmFitterSpecial_I_h #include #include class TH1; class TF1; class DstarDmFitterSpecial_I : public TObject { protected: static Double_t fgSigmaDefault; // default sigma of signal static Double_t fgMeanDefault; // default mean of signal static Double_t fgBackgrExpDefault; // default backgr. exponent static Double_t fgBackgrSqrDefault; // default backgr. sqr fact. static Double_t fgUpperBackgrSqrDefault; // default upper limit for backgr. sqr fact. static Double_t fgLowerBackgrSqrDefault; // default lower limit for backgr. sqr fact. static Double_t fgUpperBackgrExpDefault; // default upper limit for backgr. exponent static Double_t fgLowerBackgrExpDefault; // default lower limit for backgr. exponent static const Double_t fgUpFitLimitDefault; // default upper fit limit static const Double_t fgMassPion; // pion mass public: // con- and destructor: // ======================================= DstarDmFitterSpecial_I(); virtual ~DstarDmFitterSpecial_I(){} // setters: // ======== virtual void SetHist(TH1* h) {SetHist(h, NULL, kFALSE);} virtual void SetHist(TH1* h, TH1* hWc) {SetHist(h, hWc, kFALSE);} virtual void SetHist(TH1* h, Bool_t defaultSigmaMeanBackgrExp); // for backward comp. virtual void SetHist(TH1* h, TH1* hWc, Bool_t defaultSigMeanBgrExp); virtual void SetSigma() = 0; virtual void SetSigma(Double_t s) = 0; virtual void SetMean() = 0; virtual void SetMean(Double_t m) = 0; virtual void SetBackgrExp() = 0; virtual void SetBackgrExp(Double_t e) = 0; virtual void SetBackgrSqr() = 0; virtual void SetBackgrSqr(Double_t s) = 0; virtual void SetUpFitLimit() {SetUpFitLimit(fgUpFitLimitDefault);} virtual void SetUpFitLimit(Double_t lim) {fUpFitLimit = fgUpFitLimit = 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: // ========= // all abstract!!!!! virtual Double_t GetNDstar() const = 0; virtual Double_t GetNDstarErr() const = 0; virtual Double_t GetBackgrNorm() const = 0; virtual Double_t GetBackgrNormErr() const = 0; virtual Double_t GetSigma() const = 0; virtual Double_t GetMean() const = 0; virtual Double_t GetBackgrExp() const = 0; virtual Double_t GetBackgrSqr() const = 0; virtual Double_t GetWcBackgrNormScale() const;// for simplicity not (yet) abstract virtual Double_t GetSignalBack() const = 0; // not abstract: virtual Double_t GetHistBinSize() const; virtual TH1* CreateMergedHist(const TH1* h, const TH1* hWc, Double_t& shiftWc) const; virtual const char* GetHistName() const; virtual Double_t GetUpFitLimit() const {return fUpFitLimit;} const char* GetFitOption () const {return fFitOption.Data();} virtual TF1* GetFittedFunc() const = 0; virtual TF1* GetFittedBackgrFunc() const = 0; // fit: // ========= virtual Bool_t Fit(Int_t mode) = 0; static const Double_t GetSigmaDefault() {return fgSigmaDefault;} static const Double_t GetMeanDefault() {return fgMeanDefault;} static const Double_t GetBackgrExpDefault() {return fgBackgrExpDefault;} static const Double_t GetBackgrSqrDefault() {return fgBackgrSqrDefault;} static const Double_t GetUpperBackgrSqrDefault() {return fgUpperBackgrSqrDefault;} static const Double_t GetLowerBackgrSqrDefault() {return fgLowerBackgrSqrDefault;} static const Double_t GetUpperBackgrExpDefault() {return fgUpperBackgrExpDefault;} static const Double_t GetLowerBackgrExpDefault() {return fgLowerBackgrExpDefault;} static const Double_t GetUpFitLimitDefault() {return fgUpFitLimitDefault;} static void SetSigmaDefault(Double_t s) {fgSigmaDefault = s;} static void SetMeanDefault(Double_t m) {fgMeanDefault = m;} static void SetBackgrExpDefault(Double_t e) {fgBackgrExpDefault = e;} static void SetBackgrSqrDefault(Double_t e) {fgBackgrSqrDefault = e;} // these three for the assignment operator: TH1* GetHistPtr() const {return fHist;} TH1* GetHistWcPtr() const {return fHistWc;} Bool_t HistIsMC() const {return fIsMC;} Bool_t IsDetectIsMC() const {return fDetectIsMC;} void SetDetectIsMC(Bool_t set = kTRUE) {fDetectIsMC = set;} static const Double_t kSqrtOf2Pi; //sqrt(2*pi) static Bool_t fgDebug; // more output? static void SetDebug(Bool_t d) {fgDebug = d;} protected: virtual void SetHistReal(TH1* hist, TH1* hWc, Bool_t defaultFitValues) = 0; virtual Double_t DetermBackgrStartParam(); virtual Double_t DetermNDstarStart(Double_t backgrNormStart) = 0; virtual void AddBackgrToHist() = 0; Int_t UseLikelihoodOption(TH1* hist) const; Bool_t TreatZeroErrorBins(TH1* hist) const; TString GetSimpleFitOption(const char* opt) const; Bool_t IsEquivalentOpt(const TString& optOrig, const TString& opt2) const; Int_t RealFit(TH1* histToFit, TF1* func) const; Int_t RealFit(TH1* histToFit, TF1* func, const char* fitOpt) const; Int_t MultiplyFreeParams(TF1* func, Double_t factor) const; TH1* fHist; TH1* fHistWc; Double_t fUpFitLimit; Bool_t fIsMC; Bool_t fDetectIsMC; // if true: fIsMC never set to true TString fFitOption; // stores root's fitoption static Double_t fgBinSize; static Double_t fgUpFitLimit;// for normalisation of background func static Double_t fgShiftWcHist; // for fit with WC background as help static Double_t fgEndRightCharge; // dito ClassDef(DstarDmFitterSpecial_I,0) // ABC of 'helper' classes of DstarDmFitter }; #endif