#include #include "TRandom2.h" #include "RooGaussian.h" using namespace std; using namespace RooFit; void rooDataHist_experiments () { //RooMsgService::instance().setSilentMode(true); //load gaussian data TFile *inputfile = new TFile("rooDataHist_experiments_input.root", "READ" ); TH1F* myHisto = (TH1F*)inputfile->Get("myHisto"); //create RooRealVar to choose min and max of RooDataHist; this affects the number of bins. If you set var between 3.0 and 3.12 (two bins), chi2/ndof will be infinite. RooRealVar var("var", "var", 1.0, 5.0); RooDataHist dh("dh", "dh", RooArgList(var), myHisto); cout << "RooDataHist has " << dh.numEntries() << " bins" << endl; //create gaussian PDF RooRealVar mean("mean", "mean", 3,0,6); RooRealVar sigma("sigma", "sigma", 0.5,0,1); //mean.setConstant(kTRUE); //sigma.setConstant(kTRUE); RooGaussian g("g","g",var, mean, sigma); //fit the PDF to the datahist RooFitResult * r = g.fitTo(dh, Save()); //RooFitResult * r = g.fitTo(dh, Range(1,5), Save()); //alternative fit using Range //print number of floating parameters in the PDF cout << "number of floating parameters: " << r->floatParsFinal().getSize() << endl; RooPlot *plot = var.frame(Title("plot")); dh.plotOn(plot); g.plotOn(plot); double chi2_over_ndof = plot->chiSquare(r->floatParsFinal().getSize()); //tell the chiSquare method how many free parameters you have cout << "Chi-square over ndof: " << chi2_over_ndof << endl; TCanvas *can = new TCanvas("can", "can", 900,600); plot->Draw(); }