#include #include #include using namespace std; using namespace TMath; using namespace RooFit; void Fit(){ TFile *f = new TFile("Example.root"); TTree *t = (TTree*)f->Get("data"); RooRealVar En("x","x",0,100); RooDataSet data("data","data",RooArgSet(En),Import(*t)); //signal gaussian at 50keV with sigma of 5 RooRealVar mean("mean","mean",50); RooRealVar sig("sig","sig",5); RooGaussian gss("gss","gss",En,mean,sig); //uniform background RooPolynomial p0("px","px",En); //sigy and bkgy are yields for each component, only variables allowed to vary RooRealVar sigy("sigy","sigy",1,-1000000,10); RooRealVar bkgy("bkgy","bkgy",1,0,9000); RooAddPdf model("model","model", RooArgList(gss,p0), RooArgList(sigy,bkgy)); //create likelihood, minimize RooAbsReal *nll = model.createNLL(data,Extended(true)); RooMinimizer min(*nll); //run migrad, hesse int result_migrad = min.migrad(); int result_hesse = min.hesse(); //Plot result TCanvas *c1 = new TCanvas("c1","c1",700,500); RooPlot *P = En.frame(); data.plotOn(P,MarkerColor(kBlue)); model.plotOn(P,LineColor(kRed)); P->SetTitle("Spectra 228"); P->SetName("p228"); P->Draw(); c1->Print("Example.pdf","pdf"); //check migrad and hesse if(result_migrad == 0 && result_hesse == 0){ cout << "fit succeeded" << endl; } else{ cout << "problem" << endl; } }