Skip to content

[RF] Problem running weighted binned fit in batch mode #9118

@lmoneta

Description

@lmoneta

Running a weighted batch fit in Batch mode on an unweighted data set results in wrong errors du to a wrong Hessian computed the second time.
Here is the code reproducing the problem:

import ROOT as r

c1  = r.TCanvas()

def fit(sumw2 = False, batchmode = False, binned = False, minimizer = "Minuit2", printLevel = 0 ):
    if (batchmode) :
        print("running in batchmode")
    if (sumw2) :
        print("using weight correction")
    r.RooRandom.randomGenerator().SetSeed(4357)
    ws = r.RooWorkspace("workspace")
    x = ws.factory("x[-10, 10]")
    sig = ws.factory("Gaussian::sig(x, mu[-1, 1], s[0.1, 5])")
    bkg = ws.factory("Chebychev::bkg(x, {c1[0.1, -1, 1]})")
    shp = ws.factory("SUM::shp(Nsig[0, 20000] * sig, Nbkg[0, 20000] * bkg)")
    if (binned) :
        data = shp.generateBinned(r.RooArgSet(x))
    else :
        data = shp.generate(r.RooArgSet(x))
    data.Print()
    ws.Import(data)
    res1 = shp.fitTo(
        data,
        r.RooFit.Extended(),
        r.RooFit.Save(),
        r.RooFit.SumW2Error(sumw2),
        r.RooFit.Strategy(1),
        r.RooFit.BatchMode(batchmode),
        r.RooFit.Minimizer(minimizer),
        r.RooFit.PrintLevel(printLevel)
    )
    res1.Print()
    pl = x.frame()
    data.plotOn(pl)
    shp.plotOn(pl)
    pl.Draw()
    c1.SaveAs("fit.png")

    
fit(1,1,1,"Minuit",2)  # you can see second covariance matrix is completely wrong 

This was reported in https://root-forum.cern.ch/t/sumw2error-gives-unexpected-results-with-unweighted-datasets-batchmode/47206

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions