Roofit基础教程:直方图数据读取与拟合流程详解(初学者必看)
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "TCanvas.h"
#include "RooPlot.h"
#include "TAxis.h"
//#include <stdlib.h>
using namespace RooFit ;
using namespace std ;
void goodfit()
{
//TFile f1("20190501bgona22.root");
//TH1D* hist =(TH1D*)f1.Get("BGO-Na22");
TFile* inputFile = TFile::Open("20190501bgona22.root");
//TFile* inputFile = TFile::Open("CsI-1cm1cm1cm-new.root");
//TFile* inputFile = TFile::Open("GAGG-6mm6mm6mm-cs137-exp.root");
TH1F *spec[4];
//spec[0]=new TH1F();
spec[0]=(TH1F*)inputFile->Get("BGO-Na22");
//spec[0]=(TH1F*)inputFile->Get("Cs137-TC");
//spec[0]=(TH1F*)inputFile->Get("CsI-Cs137");
//spec[0]=(TH1F*)inputFile->Get("BGO-Cs137");
// S e t u p m o d e l
// ---------------------
//double myscale=1.0/h1->Integral();
//h1->Scale(myscale);//normalize the hist
int meanv=450;
int rangexmin=390;int rangexmax=580;
int xmin=rangexmin;int xmax=rangexmax;
RooRealVar x("x","x",xmin,xmax) ;
RooRealVar mean("mean","mean",meanv,rangexmin,rangexmax) ;
RooRealVar sigma("sigma","sigma",20,5.,500) ;
RooGaussian sig("sig","signal p.d.f.",x,mean,sigma) ;
RooRealVar argpar1("argpar1","argus shape parameter",20,0.,40.) ;
RooRealVar argpar2("argpar2","argus shape parameter",20,0.,40.) ;
RooArgusBG argus("argus","Argus PDF",x,argpar1,argpar2) ;
RooRealVar a0("a0","a0",-0.0001,-1.,0.1);
// RooRealVar a1("a1","", 0.5, -1, 100);
RooExponential bkg("bkg","background p.d.f.", x,a0);
RooRealVar c0("c0","coefficient #0", -1.0,-300.,10.) ;
RooRealVar c1("c1","coefficient #1", 0.1,-100.,1.) ;
RooRealVar c2("c2","coefficient #2",-0.1,-100.,2.) ;
RooChebychev compton("bkg","background p.d.f.",x,RooArgList(c0,c1,c2)) ;
RooRealVar mean_bkg("mean_bkg","mean",rangexmin/2+rangexmax/2,rangexmin,rangexmax);
RooRealVar sigma_bkg("sigma_bkg","sigma",30,10.,60.);
RooGaussian bkg_peak("bkg_peak","peaking bkg p.d.f.",x,mean_bkg,sigma_bkg) ;
RooRealVar fpeakbkg("fpeakbkg","peaking background fraction",0.5,0.4,1.) ;
RooAddPdf totalbkg("totalbkg","compton+bkg_peak",RooArgList(bkg_peak,compton),fpeakbkg);
RooRealVar fsig("fsig","signal fraction",0.9,0.5,1.) ;
//RooAddPdf
model("model","sig+(compton+bkg_peak)",RooArgList(sig,totalbkg),fsig);
RooAddPdf model("model","sig+bkg-e",RooArgList(sig,bkg),fsig) ;
//RooAddPdf
model("model","sig+compton",RooArgList(sig,compton),fsig) ;
//RooAddPdf
model("model","sig+compton",RooArgList(sig),fsig) ;
//RooAddPdfmodel("model","sig+compton",RooArgList(sig,argus),fsig) ;
//RooPlot* frame = x.frame(Title("CsI Cs-137 662keV Photopeak Fitting;Channel"));
//RooPlot* frame = x.frame(Title("BGO Cs-137 662keV Photopeak Fitting;Channel"));
RooPlot* frame = x.frame(Title("BGO Na-22 511keV Photopeak Fitting;Channel"));
//RooPlot* frame = x.frame(Title("GAGG Ba-133 81keV Photopeak Fitting"));
RooAbsData* data = new RooDataHist("data","data",x,spec[0]);
data->plotOn(frame);
//data->plotOn(xframe,Binning(1000));
//model.fitTo(*data,Save(),Extended());
model.fitTo(*data,Save(),Extended(),Range(rangexmin,rangexmax));
//model.fitTo(*data,Save(),Extended(),Range(rangexmin,rangexmax));
model.plotOn(frame,LineColor(kGreen)) ;
//model.plotOn(frame,Components(argus),LineColor(kBlue),LineStyle(kDashed)) ;
model.plotOn(frame, Components(compton),LineColor(kBlue),LineStyle(kDashed)) ;
model.plotOn(frame, Components(sig),LineColor(kRed),LineStyle(kDashed)) ;
//model.plotOn(frame, Components(bkg_peak),LineColor(kViolet),LineStyle(kDashed)) ;
//model.plotOn(frame, Components(totalbkg),LineColor(kBlue),LineStyle(kDashed)) ;
//model.plotOn(frame, Components(bkg),LineColor(kBlue),LineStyle(kDashed)) ;
//model.paramOn(frame, Format("NEU"), Layout(0.15,0.50,0.9));
model.paramOn(frame,Parameters(RooArgSet(sigma,mean)), Format("NEU"), Layout(0.55,0.9,0.9));
//model.paramOn(frame,Parameters(RooArgSet(sigma,mean,c0,c1,c2)), Format("NEU"),Layout(0.55,0.9,0.9));
//model.paramOn(frame,Parameters(RooArgSet(sigma,mean,fsig,a0)), Format("NEU"), Layout(0.55,0.9,0.9));
TCanvas* c = new TCanvas("c2","Fitting test",1200,800);
frame->Draw() ;
//c->Print(Form("Na22-511keVfit0903.png"));
//c->Print(Form("Ba133-81keVfit0903.png"));
}