00001 #ifndef __BCMODELHISTOGRAMFITTER__H 00002 #define __BCMODELHISTOGRAMFITTER__H 00003 00004 /*! 00005 * \class BCHistogramFitter 00006 * \brief A class for fitting histograms with functions 00007 * \author Daniel Kollar 00008 * \author Kevin Kröninger 00009 * \version 1.0 00010 * \date 11.2008 00011 * \detail This class allows fitting of a TH1D histogram using 00012 * a TF1 function. 00013 */ 00014 00015 /* 00016 * Copyright (C) 2008, Daniel Kollar and Kevin Kroeninger. 00017 * All rights reserved. 00018 * 00019 * For the licensing terms see doc/COPYING. 00020 */ 00021 00022 // --------------------------------------------------------- 00023 00024 #include <vector> 00025 00026 #include "BAT/BCModel.h" 00027 00028 // ROOT classes 00029 class TH1D; 00030 class TF1; 00031 00032 // --------------------------------------------------------- 00033 00034 class BCHistogramFitter : public BCModel 00035 { 00036 public: 00037 00038 /** \name Constructors and destructors */ 00039 /* @{ */ 00040 00041 /** 00042 * The default constructor. */ 00043 BCHistogramFitter(); 00044 00045 /** 00046 * A constructor. 00047 * @param hist The histogram (TH1D). 00048 * @param func The fit function. */ 00049 BCHistogramFitter(TH1D * hist, TF1 * func); 00050 00051 /** 00052 * The default destructor. */ 00053 ~BCHistogramFitter(); 00054 00055 /* @} */ 00056 00057 /** \name Member functions (get) */ 00058 /* @{ */ 00059 00060 /** 00061 * @return The histogram */ 00062 TH1D * GetHistogram() 00063 { return fHistogram; }; 00064 00065 /** 00066 * @return The fit function */ 00067 TF1 * GetFitFunction() 00068 { return fFitFunction; }; 00069 00070 /** 00071 * @return pointer to the error band */ 00072 TGraph * GetErrorBand() 00073 { return fErrorBand; }; 00074 00075 /** 00076 * @return pointer to a graph for the fit function */ 00077 TGraph * GetGraphFitFunction() 00078 { return fGraphFitFunction; }; 00079 00080 /* @} */ 00081 00082 /** \name Member functions (set) */ 00083 /* @{ */ 00084 00085 /** 00086 * @param hist The histogram 00087 * @ return An error code (1:pass, 0:fail). 00088 */ 00089 int SetHistogram(TH1D * hist); 00090 00091 /** 00092 * @param func The fit function 00093 * @ return An error code (1:pass, 0:fail). 00094 */ 00095 int SetFitFunction(TF1 * func); 00096 00097 /** 00098 * Sets the flag for integration. \n 00099 * true: use ROOT's TH1D::Integrate() \n 00100 * false: use linear interpolation */ 00101 void SetFlagIntegration(bool flag) 00102 { fFlagIntegration = flag; }; 00103 00104 /* @} */ 00105 /** \name Member functions (miscellaneous methods) */ 00106 /* @{ */ 00107 00108 /** 00109 * The log of the prior probability. Overloaded from BCModel. 00110 * @param parameters A vector of doubles containing the parameter values. */ 00111 virtual double LogAPrioriProbability(std::vector <double> parameters); 00112 00113 /** 00114 * The log of the conditional probability. Overloaded from BCModel. 00115 * @param parameters A vector of doubles containing the parameter values. */ 00116 virtual double LogLikelihood(std::vector <double> parameters); 00117 00118 /** 00119 * Plots the histogram 00120 * @param options Options for plotting. 00121 * @param filename Name of the file which the histogram is printed into. 00122 * The following options are available:\n 00123 * F : plots the fit function on top of the data 00124 * E0 : plots the fit function and the 68% prob. uncertainty band of the fit function on top of the data 00125 * E1 : plots the expectation from the fit function and the uncertainty bin-by-bin as error bars. */ 00126 // void PrintHistogram(const char * options = "", const char * filename = ""); 00127 00128 /** 00129 * Returns the y-value of the 1-dimensional fit function at an x and 00130 * for a set of parameters. 00131 * @param x A vector with the x-value. 00132 * @param parameters A set of parameters. */ 00133 double FitFunction(std::vector <double> x, std::vector <double> parameters); 00134 00135 /** 00136 * Performs the fit. 00137 * @return An error code. */ 00138 int Fit() 00139 { return this -> Fit(fHistogram, fFitFunction); }; 00140 00141 /** 00142 * Performs the fit. 00143 * @param hist The histogram (TH1D). 00144 * @param func The fit function. 00145 * @return An error code. */ 00146 int Fit(TH1D * hist, TF1 * func); 00147 00148 /** 00149 * Draw the fit in the current pad. */ 00150 void DrawFit(const char * options = "", bool flaglegend = false); 00151 00152 /** 00153 * Calculate the p-value using fast-MCMC. 00154 * @param par A set of parameter values 00155 * @param pvalue The pvalue 00156 * @return An error code */ 00157 int CalculatePValueFast(std::vector<double> par, double &pvalue); 00158 00159 /* @} */ 00160 00161 private: 00162 00163 /** 00164 * The histogram containing the data. 00165 */ 00166 TH1D * fHistogram; 00167 00168 /** 00169 * The fit function */ 00170 TF1 * fFitFunction; 00171 00172 /** 00173 * Flag for using the ROOT TH1D::Integral method (true), or linear 00174 * interpolation (false) */ 00175 bool fFlagIntegration; 00176 00177 /** 00178 * Pointer to the error band (for legend) */ 00179 TGraph * fErrorBand; 00180 00181 /** 00182 * Pointer to a graph for displaying the fit function */ 00183 TGraph * fGraphFitFunction; 00184 }; 00185 00186 // --------------------------------------------------------- 00187 00188 #endif