25 Double_t background(Double_t *x, Double_t *par) {
26 return par[0] + par[1]*x[0] + par[2]*x[0]*x[0];
31 Double_t lorentzianPeak(Double_t *x, Double_t *par) {
32 return (0.5*par[0]*par[1]/TMath::Pi()) /
33 TMath::Max( 1.e-10,(x[0]-par[2])*(x[0]-par[2])
38 Double_t fitFunction(Double_t *x, Double_t *par) {
39 return background(x,par) + lorentzianPeak(x,&par[3]);
47 Double_t data[nBins] = { 6, 1,10,12, 6,13,23,22,15,21,
48 23,26,36,25,27,35,40,44,66,81,
49 75,57,48,45,46,41,35,36,53,32,
50 40,37,38,31,36,44,42,37,32,32,
51 43,44,35,33,33,39,29,41,32,44,
52 26,39,29,35,32,21,21,15,25,15};
53 TCanvas *c1 =
new TCanvas(
"c1",
"Fitting Demo",10,10,700,500);
55 c1->SetFrameFillColor(41);
58 TH1F *histo =
new TH1F(
"histo",
59 "Lorentzian Peak on Quadratic Background",60,0,3);
60 histo->SetMarkerStyle(21);
61 histo->SetMarkerSize(0.8);
64 for(
int i=0; i < nBins; i++) histo->SetBinContent(i+1,data[i]);
67 TF1 *fitFcn =
new TF1(
"fitFcn",fitFunction,0,3,6);
69 fitFcn->SetLineWidth(4);
70 fitFcn->SetLineColor(kMagenta);
77 fitFcn->SetParameters(1,1,1,1,1,1);
78 histo->Fit(
"fitFcn",
"0");
81 fitFcn->SetParameter(4,0.2);
82 fitFcn->SetParameter(5,1);
84 histo->Fit(
"fitFcn",
"V+",
"ep");
87 TF1 *backFcn =
new TF1(
"backFcn",background,0,3,3);
88 backFcn->SetLineColor(kRed);
89 TF1 *signalFcn =
new TF1(
"signalFcn",lorentzianPeak,0,3,3);
90 signalFcn->SetLineColor(kBlue);
91 signalFcn->SetNpx(500);
95 fitFcn->GetParameters(par);
97 backFcn->SetParameters(par);
98 backFcn->Draw(
"same");
100 signalFcn->SetParameters(&par[3]);
101 signalFcn->Draw(
"same");
104 TLegend *legend=
new TLegend(0.6,0.65,0.88,0.85);
105 legend->SetTextFont(72);
106 legend->SetTextSize(0.04);
107 legend->AddEntry(histo,
"Data",
"lpe");
108 legend->AddEntry(backFcn,
"Background fit",
"l");
109 legend->AddEntry(signalFcn,
"Signal fit",
"l");
110 legend->AddEntry(fitFcn,
"Global Fit",
"l");