28 SigScale, SigSigma, SigMean,
31const std::map<ParIndex_t,std::string> parNames{
32 {Bkg0,
"Bkg0"}, {Bkg1,
"Bkg1"}, {Bkg2,
"Bkg2"},
33 {SigScale,
"Gauss scale"}, {SigSigma,
"Gauss #sigma"}, {SigMean,
"Gauss #mu"}
39 return par[Bkg0] + par[Bkg1]*
x[0] + par[Bkg2]*
x[0]*
x[0];
44 return par[SigScale]*
TMath::Gaus(
x[0], par[SigMean], par[SigSigma],
true);
50 return background(
x, par) + signal(
x, par);
57 TF1 fitFcn(
"fitFcn",fitFunction,fitxmin,fitxmax,N_PAR);
59 fitFcn.SetLineWidth(2);
60 fitFcn.SetLineColor(
kBlue);
63 for (
auto& idx_name : parNames) {
64 fitFcn.SetParName(idx_name.first, idx_name.second.c_str());
68 fitFcn.SetParameters(30,0,0,50.,0.1,1.);
70 histo->
Fit(
"fitFcn",
"VR+",
"ep");
74 TF1 backFcn(
"backFcn",background,fitxmin,fitxmax,N_PAR);
75 backFcn.SetLineColor(
kRed);
76 TF1 signalFcn(
"signalFcn",signal,fitxmin,fitxmax,N_PAR);
77 signalFcn.SetLineColor(
kBlue);
78 signalFcn.SetNpx(500);
82 fitFcn.GetParameters(par);
84 backFcn.SetParameters(par);
85 backFcn.DrawCopy(
"same");
87 signalFcn.SetParameters(par);
88 signalFcn.SetLineColor(
kGreen);
89 signalFcn.DrawCopy(
"same");
92 const double integral = signalFcn.Integral(0.,3.);
93 cout <<
"number of signal events = " << integral/binwidth <<
" " << binwidth<< endl;
96 TLegend legend(0.15,0.7,0.28,0.85);
97 legend.SetTextFont(72);
98 legend.SetTextSize(0.03);
99 legend.AddEntry(histo,
"Data",
"lpe");
100 legend.AddEntry(&backFcn,
"Bgd",
"l");
101 legend.AddEntry(&signalFcn,
"Sig",
"l");
102 legend.AddEntry(&fitFcn,
"Sig+Bgd",
"l");
104 histo->
Draw(
"esame");
105 c1->SaveAs(filename);
109void CreateRootFile(){
111 const int nBins = 60;
112 Double_t data[nBins] = { 6, 1,10,12, 6,13,23,22,15,21,
113 23,26,36,25,27,35,40,44,66,81,
114 75,57,43,37,36,31,35,36,43,32,
115 40,37,38,33,36,44,42,37,32,32,
116 43,44,35,33,33,39,29,41,32,44,
117 26,39,29,35,32,21,21,15,25,15};
119 TFile*
f =
new TFile(
"exampleRootFile.root",
"RECREATE");
120 TH1D *histo =
new TH1D(
"histo",
"Gauss Peak on Quadratic Background;x;Events/0.05",60,0,3);
121 for(
int i=0; i < nBins; i++) histo->
SetBinContent(i+1,data[i]);
127void FitHistoInFile() {
135 TCanvas *
c1 =
new TCanvas(
"c1",
"Fitting Demo of Histogram in File",10,10,700,500);
138 TH1D* histo=
nullptr;
139 f->GetObject(
"histo",histo);
141 cout <<
"histo not found"<<endl;
147 FitRoutine(
c1,histo, fitxmin, fitxmax,
"FitHistoInFile.pdf");
R__EXTERN TStyle * gStyle
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
virtual void SetRange(Int_t first=0, Int_t last=0)
Set the viewing range for the axis using bin numbers.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
1-D histogram with a double per channel (see TH1 documentation)}
TH1 is the base class of all histogram classes in ROOT.
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
Fit histogram with function fname.
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual void Draw(Option_t *option="")
Draw this histogram with options.
This class displays a legend box (TPaveText) containing several legend entries.
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
void SetOptFit(Int_t fit=1)
The type of information about fit parameters printed in the histogram statistics box can be selected ...
Double_t Gaus(Double_t x, Double_t mean=0, Double_t sigma=1, Bool_t norm=kFALSE)
Calculate a gaussian function with mean and sigma.