Real time 0:00:00, CP time 0.270
****************************************
Minimizer is Minuit2 / Migrad
Chi2 = 1018.73
NDf = 993
Edm = 9.65559e-06
NCalls = 233
NSignal = 50082 +/- 1231.21
NBackground = 998899 +/- 1569.86
Mean = 2.99896 +/- 0.0022426
Sigma = 0.297871 +/- 0.00230279
Alpha = 2.12493 +/- 0.1368
N = 1.1562 +/- 0.468136
Slope = -0.300341 +/- 0.000644187
Real time 0:00:00, CP time 0.270
Time to generate 1050000 events:
Time to fit using ROOT TF1Normsum:
import ROOT
nsig = 50000
nbkg = 1000000
nEvents = nsig + nbkg
nBins = 1000
signal_mean = 3.0
f_cb = ROOT.TF1("MyCrystalBall", "crystalball", -5.0, 5.0)
f_exp = ROOT.TF1("MyExponential", "expo", -5.0, 5.0)
f_exp.SetParameters(1.0, -0.3)
f_cb.SetParameters(1, signal_mean, 0.3, 2, 1.5)
fnorm_exp_cb = ROOT.TF1NormSum(f_cb, f_exp, nsig, nbkg)
f_sum = ROOT.TF1("fsum", fnorm_exp_cb, -5.0, 5.0, fnorm_exp_cb.GetNpar())
parameter_values = fnorm_exp_cb.GetParameters()
f_sum.SetParameters(parameter_values.data())
f_sum.SetParName(1, "NBackground")
f_sum.SetParName(0, "NSignal")
for i in range(2, f_sum.GetNpar()):
f_sum.SetParName(i, fnorm_exp_cb.GetParName(i))
w = ROOT.TStopwatch()
w.Start()
h_sum = ROOT.TH1D("h_ExpCB", "Exponential Bkg + CrystalBall function", nBins, -5.0, 5.0)
h_sum.FillRandom("fsum", nEvents)
print(
"Time to generate {0} events: ".
format(nEvents))
w.Print()
h_sum.Sumw2()
h_sum.Scale(1.0, "width")
c1 = ROOT.TCanvas("Fit", "Fit", 800, 1000)
result = h_sum.Fit("fsum", "SQ")
result.Print()
h_sum.Draw()
print("Time to fit using ROOT TF1Normsum: ")
w.Print()
for i, pref in enumerate([nsig, nbkg, signal_mean]):
if not ROOT.TMath.AreEqualAbs(pref, f_sum.GetParameter(i), f_sum.GetParError(i) * 10.0):
ROOT.Error(
"testFitNormSum",
"Difference found in fitted {0} - difference is {1:.2f} sigma".
format(
f_sum.GetParName(i), (f_sum.GetParameter(i) - pref) / f_sum.GetParError(i)
),
)
ROOT.gStyle.SetOptStat(0)
t1 = ROOT.TLatex(-2.5, 300000,
"NSignal = {0:g} #pm {1:g}".
format(f_sum.GetParameter(0), f_sum.GetParError(0)))
t2 = ROOT.TLatex(-2.5, 270000,
"Nbackgr = {0:g} #pm {1:g}".
format(f_sum.GetParameter(1), f_sum.GetParError(1)))
t1.Draw()
t2.Draw()
c1.SaveAs("fitNormSum.png")
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t format
static void SetDefaultMinimizer(const char *type, const char *algo=nullptr)
Set the default Minimizer type and corresponding algorithms.