A class for fitting histograms with functions. More...
#include <BCHistogramFitter.h>
Public Member Functions | |
Constructors and destructors | |
BCHistogramFitter () | |
BCHistogramFitter (TH1D *hist, TF1 *func) | |
~BCHistogramFitter () | |
Member functions (get) | |
TH1D * | GetHistogram () |
TH1D * | GetHistogramExpected () |
TF1 * | GetFitFunction () |
TGraph * | GetErrorBand () |
TGraph * | GetGraphFitFunction () |
Member functions (set) | |
int | SetHistogram (TH1D *hist) |
int | SetHistogramExpected (const std::vector< double > ¶meters) |
int | SetFitFunction (TF1 *func) |
void | SetFlagIntegration (bool flag) |
Member functions (miscellaneous methods) | |
virtual double | LogAPrioriProbability (std::vector< double > parameters) |
virtual double | LogLikelihood (std::vector< double > parameters) |
double | FitFunction (std::vector< double > x, std::vector< double > parameters) |
int | Fit () |
int | Fit (TH1D *hist, TF1 *func) |
void | DrawFit (const char *options="", bool flaglegend=false) |
int | CalculatePValueFast (std::vector< double > par, double &pvalue, int nIterations=100000) |
int | CalculatePValueLikelihood (std::vector< double > par, double &pvalue) |
int | CalculatePValueLeastSquares (std::vector< double > par, double &pvalue, bool weightExpect=true) |
int | CalculatePValueKolmogorov (std::vector< double > par, double &pvalue) |
double | CDF (const std::vector< double > ¶meters, int index, bool lower=false) |
Private Attributes | |
TGraph * | fErrorBand |
TF1 * | fFitFunction |
bool | fFlagIntegration |
TGraph * | fGraphFitFunction |
TH1D * | fHistogram |
TH1D * | fHistogramExpected |
A class for fitting histograms with functions.
Definition at line 34 of file BCHistogramFitter.h.
BCHistogramFitter::BCHistogramFitter | ( | ) |
The default constructor.
Definition at line 30 of file BCHistogramFitter.cxx.
: BCModel("HistogramFitter") { fHistogram = 0; fFitFunction = 0; // set default options and values this -> MCMCSetNIterationsRun(2000); this -> SetFillErrorBand(); fFlagIntegration = true; flag_discrete = true; }
BCHistogramFitter::BCHistogramFitter | ( | TH1D * | hist, | |
TF1 * | func | |||
) |
A constructor.
hist | The histogram (TH1D). | |
func | The fit function. |
Definition at line 45 of file BCHistogramFitter.cxx.
: BCModel("HistogramFitter") { fHistogram = 0; fFitFunction = 0; this -> SetHistogram(hist); this -> SetFitFunction(func); this -> MCMCSetNIterationsRun(2000); this -> SetFillErrorBand(); fFlagIntegration = true; flag_discrete = true; fHistogramExpected = 0; }
BCHistogramFitter::~BCHistogramFitter | ( | ) |
The default destructor.
Definition at line 218 of file BCHistogramFitter.cxx.
{ delete fHistogramExpected; }
int BCHistogramFitter::CalculatePValueFast | ( | std::vector< double > | par, | |
double & | pvalue, | |||
int | nIterations = 100000 | |||
) |
Calculate the p-value using fast-MCMC.
par | A set of parameter values | |
pvalue | The pvalue | |
nIterations | number of pseudo experiments generated by the Markov chain |
Definition at line 415 of file BCHistogramFitter.cxx.
{ // check size of parameter vector if (par.size() != this -> GetNParameters()) { BCLog::Out( BCLog::warning, BCLog::warning, "BCHistogramFitter::CalculatePValueFast() : Number of parameters is inconsistent."); return 0; } // check if histogram exists if (!fHistogram) { BCLog::Out(BCLog::warning, BCLog::warning, "BCHistogramFitter::CalculatePValueFast() : Histogram not defined."); return 0; } // define temporary variables int nbins = fHistogram -> GetNbinsX(); std::vector<int> histogram; std::vector<double> expectation; histogram.assign(nbins, 0); expectation.assign(nbins, 0); double logp = 0; double logp_start = 0; int counter_pvalue = 0; //update the expected number of events for all bins this -> SetHistogramExpected(par); // define starting distribution as histogram with most likely entries for (int ibin = 0; ibin < nbins; ++ibin) { // get the number of expected events double yexp = fHistogramExpected -> GetBinContent(ibin +1); //most likely observed value = int(expected value) histogram[ibin] = int(yexp); expectation[ibin] = yexp; // calculate test statistic (= likelihood of entire histogram) for starting distr. logp += BCMath::LogPoisson(double(int(yexp)), yexp); //statistic of the observed data set logp_start += BCMath::LogPoisson(fHistogram -> GetBinContent(ibin + 1), yexp); } // loop over iterations for (int iiter = 0; iiter < nIterations; ++iiter) { // loop over bins for (int ibin = 0; ibin < nbins; ++ibin) { // random step up or down in statistics for this bin double ptest = fRandom -> Rndm() - 0.5; // increase statistics by 1 if (ptest > 0) { // calculate factor of probability double r = expectation.at(ibin) / double(histogram.at(ibin) + 1); // walk, or don't (this is the Metropolis part) if (fRandom -> Rndm() < r) { histogram[ibin] = histogram.at(ibin) + 1; logp += log(r); } } // decrease statistics by 1 else if (ptest <= 0 && histogram[ibin] > 0) { // calculate factor of probability double r = double(histogram.at(ibin)) / expectation.at(ibin); // walk, or don't (this is the Metropolis part) if (fRandom -> Rndm() < r) { histogram[ibin] = histogram.at(ibin) - 1; logp += log(r); } } } // end of looping over bins // increase counter if (logp < logp_start) counter_pvalue++; } // end of looping over iterations // calculate p-value pvalue = double(counter_pvalue) / double(nIterations); // no error return 1; }
int BCHistogramFitter::CalculatePValueKolmogorov | ( | std::vector< double > | par, | |
double & | pvalue | |||
) |
Calculate the p-value using Kolmogorov-Smirnov test. Note that the reference distribution is known only asymptotically. Some explanation is given in http://root.cern.ch/root/htmldoc/TMath.html
par | The set of parameter values used in the model, usually the best fit parameters | |
pvalue | The pvalue |
Definition at line 590 of file BCHistogramFitter.cxx.
{ if (!fHistogramExpected || !fHistogram){ BCLog::OutError("BCHistogramFitter::CalculatePValueKolmogorov: " "Please define the reference distribution by calling \n" "BCHistogramFitter::SetHistogramExpected() first!"); return 0; } //update expected counts with current parameters this -> SetHistogramExpected(par); //perform the test pvalue = fHistogramExpected -> KolmogorovTest(fHistogram); fPValue = pvalue; // no error return 1; }
int BCHistogramFitter::CalculatePValueLeastSquares | ( | std::vector< double > | par, | |
double & | pvalue, | |||
bool | weightExpect = true | |||
) |
Calculate the p-value using approximate chi^2 distribution of squared difference for conventional weights. Approximation is valid for bin contents >5 and not as as good for little data as CalculatePValueLikelihood, see eq. (32.13), PDG: Statistics, Monte Carlo, Group Theory. Physics Letters B 667, 316-339(2008).
par | The set of parameter values used in the model, usually the best fit parameters | |
pvalue | The pvalue | |
weight | use the variance from the expected counts (true) or the measured counts (false) |
Definition at line 551 of file BCHistogramFitter.cxx.
{ // initialize test statistic chi^2 double chi2 = 0.0; //Calculate expected counts to compare with this -> SetHistogramExpected(par); for (int ibin = 1; ibin <= fHistogram->GetNbinsX(); ++ibin) { // get the number of observed events double y = fHistogram -> GetBinContent(ibin); // get the number of expected events double yexp = fHistogramExpected -> GetBinContent(ibin); //convert 1/0.0 into 1 for weighted sum double weight; if (weightExpect) weight = (yexp > 0) ? yexp : 1.0; else weight = (y > 0) ? y : 1.0; // get the contribution from this datapoint chi2 += (y - yexp) * (y - yexp) / weight; } // compute degrees of freedom for Poisson case int nDoF = this->GetNDataPoints() - this->GetNParameters(); // p value from chi^2 distribution, returns zero if logLambda < 0 fPValueNDoF = TMath::Prob(chi2, nDoF); pvalue = fPValueNDoF; // no error return 1; }
int BCHistogramFitter::CalculatePValueLikelihood | ( | std::vector< double > | par, | |
double & | pvalue | |||
) |
Calculate the p-value using approximate chi^2 distribution of scaled likelihood. Approximation is valid for bin contents >5, see eq. (32.12), PDG: Statistics, Monte Carlo, Group Theory. Physics Letters B 667, 316-339(2008).
par | The set of parameter values used in the model, usually the best fit parameters | |
pvalue | The pvalue |
Definition at line 513 of file BCHistogramFitter.cxx.
{ // initialize test statistic -2*lambda double logLambda = 0.0; //Calculate expected counts to compare with this -> SetHistogramExpected(par); for (int ibin = 1; ibin <= fHistogram->GetNbinsX(); ++ibin) { // get the number of observed events double y = fHistogram -> GetBinContent(ibin); // get the number of expected events double yexp = fHistogramExpected -> GetBinContent(ibin); // get the contribution from this datapoint if (y == 0) logLambda += yexp; else logLambda += yexp - y + y * log(y / yexp); } // rescale logLambda *= 2.0; // compute degrees of freedom for Poisson case int nDoF = this->GetNDataPoints() - this->GetNParameters(); //p value from chi^2 distribution, returns zero if logLambda < 0 fPValueNDoF = TMath::Prob(logLambda, nDoF); pvalue = fPValueNDoF; // no error return 1; }
double BCHistogramFitter::CDF | ( | const std::vector< double > & | , | |
int | , | |||
bool | = false | |||
) | [virtual] |
1dim cumulative distribution function of the probability to get the data f(x_i|param) for a single measurement, assumed to be of identical functional form for all measurements
parameters | The parameter values at which point to compute the cdf | |
index | The data point index starting at 0,1...N-1 | |
lower | only needed for discrete distributions! Return the CDF for the count one less than actually observed, e.g. in Poisson process, if 3 actually observed, then CDF(2) is returned |
Reimplemented from BCModel.
Definition at line 611 of file BCHistogramFitter.cxx.
{ if (parameters.empty()) BCLog::OutWarning("BCHistogramFitter::CDF: parameter vector empty!"); //histogram stores underflow in bin 0, so datapoint 0 is in bin 1 index++; // get the number of observed events (should be integer) double yObs = fHistogram -> GetBinContent(index); // if(double( (unsigned int)yObs)==yObs) // BCLog::OutWarning(Form( // "BCHistogramFitter::CDF: using bin count %f that is not an integer!",yObs)); // get function value of lower bin edge double edgeLow = fHistogram -> GetBinLowEdge(index); double edgeHigh = edgeLow + fHistogram -> GetBinWidth(index); // expectation value of this bin double yExp = 0.0; // use ROOT's TH1D::Integral method if (fFlagIntegration) yExp = fFitFunction -> Integral(edgeLow, edgeHigh, ¶meters[0]); // use linear interpolation else { double dx = fHistogram -> GetBinWidth(index); double fEdgeLow = fFitFunction -> Eval(edgeLow); double fEdgeHigh = fFitFunction -> Eval(edgeHigh); yExp = fEdgeLow * dx + (fEdgeHigh - fEdgeLow) * dx / 2.; } // usually Poisson bins do not agree with fixed probability bins // so choose where it should belong if (lower) { if ((int) yObs >= 1) return ROOT::Math::poisson_cdf((unsigned int) (yObs - 1), yExp); else return 0.0; } // what if yObs as double doesn't reprepsent a whole number? exceptioN? if ((double) (unsigned int) yObs != yObs){ BCLog::OutWarning(Form( "BCHistogramFitter::CDF: Histogram values should be integer!\n" " Bin %d = %f", index, yObs)); //convert randomly to integer // ex. yObs = 9.785 => // yObs --> 10 with P = 78.5% // yObs --> 9 with P = 21.5% double U = fRandom -> Rndm() ; double yObsLower = (unsigned int)yObs; if( U > (yObs - yObsLower) ) yObs = yObsLower; else yObs = yObsLower + 1; } // BCLog::OutDebug(Form("yExp= %f yObs= %f par2=%",yExp, yObs,parameters.at(2))); // BCLog::Out(TString::Format("yExp= %f yObs= %f par2=%",yExp, yObs,parameters.at(2))); return ROOT::Math::poisson_cdf((unsigned int)yObs, yExp); }
void BCHistogramFitter::DrawFit | ( | const char * | options = "" , |
|
bool | flaglegend = false | |||
) |
Draw the fit in the current pad.
Definition at line 357 of file BCHistogramFitter.cxx.
{ if (!fHistogram) { BCLog::Out(BCLog::warning, BCLog::warning, "BCHistogramFitter::DrawFit() : Histogram not defined."); return; } if (!fFitFunction) { BCLog::Out(BCLog::warning, BCLog::warning, "BCHistogramFitter::DrawFit() : Fit function not defined."); return; } if (!fErrorBandXY || fBestFitParameters.empty() ) { BCLog::Out(BCLog::warning, BCLog::warning, "BCHistogramFitter::DrawFit() : Fit not performed yet."); return; } // check wheather options contain "same" TString opt = options; opt.ToLower(); // if not same, draw the histogram first to get the axes if (!opt.Contains("same")) fHistogram -> Draw(opt.Data()); // draw the error band as central 68% probability interval fErrorBand = this -> GetErrorBandGraph(0.16, 0.84); fErrorBand -> Draw("f same"); // now draw the histogram again since it was covered by the band fHistogram -> Draw(TString::Format("%ssame", opt.Data())); // draw the fit function on top fGraphFitFunction = this -> GetFitFunctionGraph(this->GetBestFitParameters()); fGraphFitFunction -> SetLineColor(kRed); fGraphFitFunction -> SetLineWidth(2); fGraphFitFunction -> Draw("l same"); // draw legend if (flaglegend) { TLegend * legend = new TLegend(0.25, 0.75, 0.55, 0.95); legend -> SetBorderSize(0); legend -> SetFillColor(kWhite); legend -> AddEntry(fHistogram, "Data", "L"); legend -> AddEntry(fGraphFitFunction, "Best fit", "L"); legend -> AddEntry(fErrorBand, "Error band", "F"); legend -> Draw(); } gPad -> RedrawAxis(); }
int BCHistogramFitter::Fit | ( | ) | [inline] |
Performs the fit.
Definition at line 150 of file BCHistogramFitter.h.
{ return this -> Fit(fHistogram, fFitFunction); };
int BCHistogramFitter::Fit | ( | TH1D * | hist, | |
TF1 * | func | |||
) |
Performs the fit.
hist | The histogram (TH1D). | |
func | The fit function. |
Definition at line 313 of file BCHistogramFitter.cxx.
{ // set histogram if (hist) this -> SetHistogram(hist); else { BCLog::Out(BCLog::warning, BCLog::warning, "BCHistogramFitter::Fit() : Histogram not defined."); return 0; } // set function if (func) this -> SetFitFunction(func); else { BCLog::Out(BCLog::warning, BCLog::warning, "BCHistogramFitter::Fit() : Fit function not defined."); return 0; } // perform marginalization this -> MarginalizeAll(); // maximize posterior probability, using the best-fit values close // to the global maximum from the MCMC this -> FindModeMinuit(this -> GetBestFitParameters(), -1); // calculate the p-value using the fast MCMC algorithm double pvalue; if (this -> CalculatePValueFast(this -> GetBestFitParameters(), pvalue)) fPValue = pvalue; else BCLog::Out(BCLog::warning, BCLog::warning, "BCHistogramFitter::Fit() : Could not use the fast p-value evaluation."); // print summary to screen this -> PrintShortFitSummary(); // no error return 1; }
double BCHistogramFitter::FitFunction | ( | std::vector< double > | x, | |
std::vector< double > | parameters | |||
) | [virtual] |
Plots the histogram
options | Options for plotting. | |
filename | Name of the file which the histogram is printed into. The following options are available: F : plots the fit function on top of the data E0 : plots the fit function and the 68% prob. uncertainty band of the fit function on top of the data E1 : plots the expectation from the fit function and the uncertainty bin-by-bin as error bars. Returns the y-value of the 1-dimensional fit function at an x and for a set of parameters. | |
x | A vector with the x-value. | |
parameters | A set of parameters. |
Reimplemented from BCIntegrate.
Definition at line 301 of file BCHistogramFitter.cxx.
{ // set the parameters of the function fFitFunction -> SetParameters(¶ms[0]); return fFitFunction -> Eval(x[0]) * fHistogram -> GetBinWidth( fHistogram -> FindBin(x[0])); }
TGraph* BCHistogramFitter::GetErrorBand | ( | ) | [inline] |
Definition at line 78 of file BCHistogramFitter.h.
{ return fErrorBand; };
TF1* BCHistogramFitter::GetFitFunction | ( | ) | [inline] |
Definition at line 73 of file BCHistogramFitter.h.
{ return fFitFunction; };
TGraph* BCHistogramFitter::GetGraphFitFunction | ( | ) | [inline] |
Definition at line 83 of file BCHistogramFitter.h.
{ return fGraphFitFunction; };
TH1D* BCHistogramFitter::GetHistogram | ( | ) | [inline] |
Definition at line 62 of file BCHistogramFitter.h.
{ return fHistogram; };
TH1D* BCHistogramFitter::GetHistogramExpected | ( | ) | [inline] |
Definition at line 67 of file BCHistogramFitter.h.
{ return fHistogramExpected; };
double BCHistogramFitter::LogAPrioriProbability | ( | std::vector< double > | parameters | ) | [virtual] |
The log of the prior probability. Overloaded from BCModel.
parameters | A vector of doubles containing the parameter values. |
Reimplemented from BCModel.
Definition at line 225 of file BCHistogramFitter.cxx.
{ // using flat probability in all parameters double logprob = 0.; for (unsigned int i = 0; i < this -> GetNParameters(); i++) logprob -= log(this -> GetParameter(i) -> GetRangeWidth()); return logprob; }
double BCHistogramFitter::LogLikelihood | ( | std::vector< double > | parameters | ) | [virtual] |
The log of the conditional probability. Overloaded from BCModel.
parameters | A vector of doubles containing the parameter values. |
Reimplemented from BCModel.
Definition at line 237 of file BCHistogramFitter.cxx.
{ // initialize probability double loglikelihood = 0; // set the parameters of the function fFitFunction -> SetParameters(¶ms[0]); // get the number of bins int nbins = fHistogram -> GetNbinsX(); // get bin width double dx = fHistogram -> GetBinWidth(1); // get function value of lower bin edge double fedgelow = fFitFunction -> Eval(fHistogram -> GetBinLowEdge(1)); // loop over all bins for (int ibin = 1; ibin <= nbins; ++ibin) { // get upper bin edge double xedgehi = fHistogram -> GetBinLowEdge(ibin) + dx; // get function value at upper bin edge double fedgehi = fFitFunction -> Eval(xedgehi); // get the number of observed events double y = fHistogram -> GetBinContent(ibin); double yexp = 0.; // use ROOT's TH1D::Integral method if (fFlagIntegration) yexp = fFitFunction -> Integral(xedgehi - dx, xedgehi); // use linear interpolation else { yexp = fedgelow * dx + (fedgehi - fedgelow) * dx / 2.; // make the upper edge the lower edge for the next iteration fedgelow = fedgehi; } // get the value of the Poisson distribution loglikelihood += BCMath::LogPoisson(y, yexp); } // // get bin boundaries // double xmin = fHistogram -> GetBinLowEdge(ibin); // double xmax = fHistogram -> GetBinLowEdge(ibin+1); // // get the number of observed events // double y = fHistogram -> GetBinContent(ibin); // // get the number of expected events // double yexp = fFitFunction -> Integral(xmin, xmax); // // get the value of the Poisson distribution // loglikelihood += BCMath::LogPoisson(y, yexp); return loglikelihood; }
int BCHistogramFitter::SetFitFunction | ( | TF1 * | func | ) |
func | The fit function @ return An error code (1:pass, 0:fail). |
Definition at line 180 of file BCHistogramFitter.cxx.
{ // check if function exists if (!func) { BCLog::Out(BCLog::error, BCLog::error, "BCHistogramFitter::SetFitFunction() : TF1 not created."); return 0; } // set the function fFitFunction = func; // update the model name to contain the function name this -> SetName(TString::Format("HistogramFitter with %s", fFitFunction->GetName())); // reset parameters fParameterSet -> clear(); // get the new number of parameters int n = func -> GetNpar(); // add parameters for (int i = 0; i < n; ++i) { double xmin; double xmax; func -> GetParLimits(i, xmin, xmax); this -> AddParameter(func->GetParName(i), xmin, xmax); } // no error return 1; }
void BCHistogramFitter::SetFlagIntegration | ( | bool | flag | ) | [inline] |
Sets the flag for integration.
true: use ROOT's TH1D::Integrate()
false: use linear interpolation
Definition at line 113 of file BCHistogramFitter.h.
{ fFlagIntegration = flag; };
int BCHistogramFitter::SetHistogram | ( | TH1D * | hist | ) |
hist | The histogram containing the data @ return An error code (1:pass, 0:fail). |
Definition at line 64 of file BCHistogramFitter.cxx.
{ // check if histogram exists if (!hist) { BCLog::Out(BCLog::error, BCLog::error, "BCHistogramFitter::SetHistogram() : TH1D not created."); return 0; } // set pointer to histogram fHistogram = hist; // create a data set. this is necessary in order to calculate the // error band. the data set contains as many data points as there // are bins. BCDataSet * ds = new BCDataSet(); // create data points and add them to the data set. // the x value is the lower edge of the bin, and // the y value is the bin count int nbins = fHistogram -> GetNbinsX(); for (int i = 0; i < nbins; ++i) { BCDataPoint* dp = new BCDataPoint(2); dp ->SetValue(0, fHistogram -> GetBinLowEdge(i+1)); dp ->SetValue(1, fHistogram -> GetBinContent(i+1)); ds -> AddDataPoint(dp); } // set the new data set. this -> SetDataSet(ds); // calculate the lower and upper edge in x. double xmin = hist -> GetBinLowEdge(1); double xmax = hist -> GetBinLowEdge(nbins + 1); // calculate the minimum and maximum range in y. double histymin = hist -> GetMinimum(); double histymax = hist -> GetMaximum(); // calculate the minimum and maximum of the function value based on // the minimum and maximum value in y. double ymin = TMath::Max(0., histymin - 5. * sqrt(histymin)); double ymax = histymax + 5. * sqrt(histymax); // set the data boundaries for x and y values. this -> SetDataBoundaries(0, xmin, xmax); this -> SetDataBoundaries(1, ymin, ymax); // set the indeces for fitting. this -> SetFitFunctionIndices(0, 1); // no error return 1; }
int BCHistogramFitter::SetHistogramExpected | ( | const std::vector< double > & | parameters | ) |
hist | The histogram with the expected counts (typically non-integer values!) @ return An error code (1:pass, 0:fail). |
Definition at line 121 of file BCHistogramFitter.cxx.
{ //clear up previous memory if(fHistogramExpected){ delete fHistogramExpected; } //copy all properties from the data histogram fHistogramExpected = new TH1D(*fHistogram); // get the number of bins int nBins = fHistogramExpected -> GetNbinsX(); // get bin width double dx = fHistogramExpected -> GetBinWidth(1); //set the parameters of fit function fFitFunction -> SetParameters(¶meters[0]); // get function value of lower bin edge double fedgelow = fFitFunction -> Eval(fHistogramExpected -> GetBinLowEdge(1)); // loop over all bins, skip underflow for (int ibin = 1; ibin <= nBins; ++ibin) { // get upper bin edge double xedgehi = fHistogramExpected -> GetBinLowEdge(ibin) + dx; //expected count double yexp = 0.; // use ROOT's TH1D::Integral method if (fFlagIntegration) yexp = fFitFunction -> Integral(xedgehi - dx, xedgehi); // use linear interpolation else { // get function value at upper bin edge double fedgehi = fFitFunction -> Eval(xedgehi); yexp = fedgelow * dx + (fedgehi - fedgelow) * dx / 2.; // make the upper edge the lower edge for the next iteration fedgelow = fedgehi; } //write the expectation for the bin fHistogramExpected -> SetBinContent(ibin, yexp); //avoid automatic error as sqrt(yexp), used e.g. in Kolmogorov correction factor fHistogramExpected -> SetBinError(ibin, 0.0); // but the data under this model have that sqrt(yexp) uncertainty fHistogram -> SetBinError(ibin, sqrt(yexp)); } return 1; }
TGraph* BCHistogramFitter::fErrorBand [private] |
Pointer to the error band (for legend)
Definition at line 225 of file BCHistogramFitter.h.
TF1* BCHistogramFitter::fFitFunction [private] |
The fit function
Definition at line 216 of file BCHistogramFitter.h.
bool BCHistogramFitter::fFlagIntegration [private] |
Flag for using the ROOT TH1D::Integral method (true), or linear interpolation (false)
Definition at line 221 of file BCHistogramFitter.h.
TGraph* BCHistogramFitter::fGraphFitFunction [private] |
Pointer to a graph for displaying the fit function
Definition at line 229 of file BCHistogramFitter.h.
TH1D* BCHistogramFitter::fHistogram [private] |
The histogram containing the data.
Definition at line 212 of file BCHistogramFitter.h.
TH1D* BCHistogramFitter::fHistogramExpected [private] |
The histogram containing the expected data.
Definition at line 234 of file BCHistogramFitter.h.