Draw two stat boxes for the same TGraph or TH

I am using pyROOT. I want to fit the same graph with two functions, and draw the two functions (with their respective fit results boxes). The codes below seems not working, am i missing something ?

c2 = TCanvas('c', 'c', 800, 600)

f1.SetParameters(0.01, 100)
f2.SetParameters(0.01, 0.1, 100)
g1_slim.Fit(f1, 'RQMS')
g1_slim.Draw('ap')
gPad.Update()
stats1 = g1_slim.FindObject("stats")
stats1.SetName("fit_1")
stats1.SetX1NDC(0.6)
stats1.SetX2NDC(0.8);
stats1.SetY1NDC(0.7);
stats1.SetY2NDC(0.9);
# g1_slim.SetStats(0)


g1_slim.Fit(f2, 'RQMS+')
# r.gPad.Update()
# stats1 = g1_slim.FindObject("stats")
# stats1.SetName("fit_2")
# stats1.SetX1NDC(0.0)
# stats1.SetX2NDC(0.2);
# stats1.SetY1NDC(0.4);
# stats1.SetY2NDC(0.6);
g1_slim.Draw('ap')
    
c2.Draw()

update:
the following worked, but it turned out that the two stat boxes were the same name (not by me, by ROOT)
notice that I have to do stats2 = g1_slim.FindObject("fit_1") in the second one.

c2 = TCanvas('c', 'c', 800, 600)

f1.SetParameters(0.01, 100)
f2.SetParameters(0.01, 0.1, 100)
g1_slim.Fit(f1, 'RQMS')
g1_slim.Draw('ap')
gPad.Update()
stats1 = g1_slim.FindObject("stats")
print(stats1,stats1.GetName())
stats1.SetName("fit_1")
stats1.SetX1NDC(0.6)
stats1.SetX2NDC(0.8);
stats1.SetY1NDC(0.7);
stats1.SetY2NDC(0.9);
g1_slim.GetListOfFunctions().Add(stats1)
# g1_slim.SetStats(0)


g1_slim.Fit(f2, 'RQMS+')
g1_slim.Draw('ap')
gPad.Update()
stats2 = g1_slim.FindObject("fit_1")
print(stats2,stats2.GetName())
stats2.SetName("fit_2")
stats2.SetX1NDC(0.0)
stats2.SetX2NDC(0.2);
stats2.SetY1NDC(0.4);
stats2.SetY2NDC(0.6);
g1_slim.GetListOfFunctions().Add(stats2)
g1_slim.Draw('ap')
    
c2.Draw()

I found a (rather silly, need extra line of code just to help ROOT to manage its objects) workaround

c2 = TCanvas('c', 'c', 800, 600)

f1.SetParameters(0.01, 100)
f2.SetParameters(0.01, 0.1, 100)
g1_slim.Fit(f1, 'RQMS')
g1_slim.Draw('ap')
r.gPad.Update()
stats = g1_slim.FindObject("stats")
print(stats,stats.GetName())
stats1 = stats.Clone()
stats1.SetName("fit_res_1")
print(stats1,stats1.GetName())
stats1.SetX1NDC(0.6)
stats1.SetX2NDC(0.8);
stats1.SetY1NDC(0.7);
stats1.SetY2NDC(0.9);
g1_slim.GetListOfFunctions().Remove(stats)
g1_slim.GetListOfFunctions().Remove(g1_slim.GetListOfFunctions().FindObject("f1"))
# g1_slim.GetListOfFunctions().Add(stats1)
# print("aftetre adding",stats1.GetName())
# g1_slim.SetStats(0)


g1_slim.Fit(f2, 'RQMS')
g1_slim.Draw('ap')
gPad.Update()
stats = g1_slim.FindObject("stats")
stats2 = stats.Clone()
stats2.SetName("fit_res_2")
print(stats2,stats2.GetName())
stats2.SetX1NDC(0.0)
stats2.SetX2NDC(0.2);
stats2.SetY1NDC(0.4);
stats2.SetY2NDC(0.6);
# g1_slim.GetListOfFunctions().Add(stats2)
g1_slim.GetListOfFunctions().Remove(stats)
g1_slim.GetListOfFunctions().Remove(g1_slim.GetListOfFunctions().FindObject("f_2"))
# g1_slim.SetStats(0)
g1_slim.Draw('ap')
f1.Draw("same")
f2.Draw("same")
stats1.DrawClone()
stats2.DrawClone()
    
c2.Draw()

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.