Exemplo n.º 1
0
def runFits(data, options):
    axis = ROOT.TAxis(5, array('d', [600, 700, 800, 900, 1000, 2000]))

    #first pass
    graphs = []
    for i in range(0, 12):
        graphs.append(ROOT.TGraphErrors())

    for i in range(1, axis.GetNbins() + 1):

        center = axis.GetBinCenter(i)
        h = data.drawTH1(
            options.varx,
            options.cut + "&&({vary}>{mini}&&{vary}<{maxi})".format(
                vary=options.vary,
                mini=axis.GetBinLowEdge(i),
                maxi=axis.GetBinUpEdge(i)), str(options.lumi), options.binsx,
            options.minx, options.maxx)

        histo = copy.deepcopy(h)
        fitter = Fitter(['M'])
        fitter.w.var("M").setVal((options.maxx - options.minx) / 2.0)
        fitter.w.var("M").setMax(options.maxx)
        fitter.w.var("M").setMin(options.minx)

        fitter.signalMJJCBBoth('model', 'M')
        fitter.importBinnedData(histo, ['M'], 'data')
        fitter.fit('model', 'data', [ROOT.RooFit.SumW2Error(0)])
        chi = fitter.projection(
            "model", "data", "M",
            "debugfitMJJTop_" + options.output + "_" + str(i) + ".png")

        for j, g in enumerate(graphs):
            c, cerr = fitter.fetch("c_" + str(j))
            g.SetPoint(i - 1, center, c)
            g.SetPointError(i - 1, 0.0, cerr)

    data = {}
    pol4 = ROOT.TF1("pol4", "pol4", options.minx, options.maxx)
    pol3 = ROOT.TF1("pol3", "pol3", options.minx, options.maxx)
    pol2 = ROOT.TF1("pol2", "pol2", options.minx, options.maxx)
    pol1 = ROOT.TF1("pol1", "pol1", options.minx, options.maxx)
    pol0 = ROOT.TF1("pol0", "pol0", options.minx, options.maxx)

    graphs[0].Fit(pol1)
    data['mean'] = returnString(pol1, options)

    graphs[1].Fit(pol1)
    data['sigma'] = returnString(pol1, options)

    graphs[2].Fit(pol0)
    data['alpha1'] = returnString(pol0, options)

    graphs[3].Fit(pol0)
    data['n1'] = returnString(pol0, options)

    graphs[4].Fit(pol1)
    data['alpha2'] = returnString(pol1, options)

    graphs[5].Fit(pol0)
    data['n2'] = returnString(pol0, options)

    #create json
    f = open(options.output + "_W.json", "w")
    json.dump(data, f)
    f.close()

    data = {}

    graphs[6].Fit(pol1)
    data['mean'] = returnString(pol1, options)

    graphs[7].Fit(pol1)
    data['sigma'] = returnString(pol1, options)

    graphs[8].Fit(pol0)
    data['alpha1'] = returnString(pol0, options)

    graphs[9].Fit(pol0)
    data['n1'] = returnString(pol0, options)

    graphs[10].Fit(pol1)
    data['alpha2'] = returnString(pol1, options)

    graphs[11].Fit(pol0)
    data['n2'] = returnString(pol0, options)
    f = open(options.output + "_top.json", "w")
    json.dump(data, f)
    f.close()
    return graphs
Exemplo n.º 2
0

    events=histoYield.Integral()*options.BR*analysisIntegral/fitRangeIntegral

    
    graphs['yield'].SetPoint(N,mass,events)

    fitter.projection("model","data","m","fitjj_"+str(mass)+".root")
    fitter.projection("model","data","M","fitVV_"+str(mass)+".root")

    

    for var,graph in graphs.iteritems():
        if var=='yield':
            continue
        value,error=fitter.fetch(var)
        graph.SetPoint(N,mass,value)
        graph.SetPointError(N,0.0,error)
                
    N=N+1


            
#now the fits
        

pol5 = ROOT.TF1("pol5","pol5",0,13000)
pol3 = ROOT.TF1("pol3","pol3",0,13000)
pol0 = ROOT.TF1("pol0","pol0",0,13000)
pol1 = ROOT.TF1("pol1","pol1",0,13000)
Exemplo n.º 3
0
    fitter=Fitter(['MVV'])
    fitter.signalResonance('model','MVV')
    #fitter.w.var("MH").setVal(mass)
    fitter.importBinnedData(histo,['MVV'],'data')

    ## fit 
    fitter.fit('model','data',[ROOT.RooFit.SumW2Error(0)])
    #fitter.fit('model','data',[ROOT.RooFit.SumW2Error(1)])
    fitter.fit('model','data',[ROOT.RooFit.SumW2Error(0)])

    ## control plot
    fitter.projection("model","data","MVV",options.debugFile+"_"+str(int(mass)).zfill(4)+".root",options.varx,[],[ROOT.RooFit.LineColor(color)])
    fitter.projection("model","data","MVV",options.debugFile+"_"+str(int(mass)).zfill(4)+".png",options.varx,[],[ROOT.RooFit.LineColor(color)])

    ## Save parameters vs MX
    for var,graph in graphs.iteritems():
        value,error=fitter.fetch(var)
        graph.SetPoint(N,mass,value)
        graph.SetPointError(N,0.0,error)
                
    N=N+1


## Store all graphs
F=ROOT.TFile(options.output,"RECREATE")
F.cd()
for name,graph in graphs.iteritems():
    graph.Write(name)
F.Close()
            
Exemplo n.º 4
0
#dataset = data.makeDataSet(options.genvar,options.genCut,-1)

for i in range(1, axis.GetNbins() + 1):
    cBinLo = axis.GetBinLowEdge(i)
    cBinHi = axis.GetBinUpEdge(i)
    cBinCenter = axis.GetBinCenter(i)
    dataset = data.makeDataSet(
        options.genvar, options.genCut + '*({cvar}>{lo}&&{cvar}<={hi})'.format(
            cvar=options.condVar, lo=cBinLo - 100, hi=cBinHi + 100), -1)
    histo = data.drawTH1(
        options.var, options.cut + '*({cvar}>{lo}&&{cvar}<={hi})'.format(
            cvar=options.condVar, lo=cBinLo, hi=cBinHi), "1", options.bins,
        options.mini, options.maxi)
    fitter = Fitter([options.var])
    fitter.importBinnedData(histo, [options.var], 'data')
    fitter.gaussianSum('model', options.var, dataset, options.genvar)
    fitter.fit('model', 'data', [ROOT.RooFit.SumW2Error(1)])
    chi = fitter.projection("model", "data", options.var,
                            "debugPlot_" + str(i) + "_" + options.output, 'x')
    print i, 'Chi2', chi
    for nuis in ['scale', 'sigma']:
        v, vErr = fitter.fetch(nuis)
        graph[nuis].SetPoint(i, cBinCenter, v)
        graph[nuis].SetPointError(i, 0, vErr)

f2 = ROOT.TFile(options.output, "RECREATE")
f2.cd()
for g in graph.keys():
    graph[g].Write(g)
f2.Close()
def interpolate(histos, axis, options):
    #create 2D histogram
    histo2D = ROOT.TH2D("histo2D", "histo2D", options.binsx, options.minx,
                        options.maxx, options.binsy, options.miny,
                        options.maxy)

    if options.fitFunc == "bernstein3":
        order = 3
    if options.fitFunc == "bernstein4":
        order = 4
    if options.fitFunc == "bernstein5":
        order = 5
    if options.fitFunc == "bifur":
        order = 3

    graphs = []
    for i in range(0, order):
        graphs.append(ROOT.TGraphErrors())

    #run the fits
    for N, h in enumerate(histos):
        center = axis.GetBinCenter(N + 1)
        fitter = Fitter(['mjj'])
        fitter.w.var("mjj").setVal(40)
        fitter.w.var("mjj").setMax(options.maxy)
        fitter.w.var("mjj").setMin(options.miny)
        if options.fitFunc == "bernstein3":
            fitter.bernstein('model', 'mjj', 3)
        if options.fitFunc == "bernstein4":
            fitter.bernstein('model', 'mjj', 4)
        if options.fitFunc == "bernstein5":
            fitter.bernstein('model', 'mjj', 5)
        if options.fitFunc == "bifur":
            fitter.bifur('model', 'mjj')

        fitter.importBinnedData(h, ['mjj'], 'data')
        fitter.fit('model', 'data')
        fitter.fit('model', 'data')
        fitter.projection("model", "data", "mjj",
                          "debugProjectionFit_" + str(N) + ".png")
        for j, g in enumerate(graphs):
            c, cerr = fitter.fetch("c_" + str(j))
            g.SetPoint(N, center, c)
            g.SetPointError(N, 0.0, cerr)

    ##OK now interpolate and make histograms!
    #first make the function
    fitter = Fitter(['mjj'])
    if options.fitFunc == "bernstein3":
        fitter.bernstein('model', 'mjj', 3)
        order = 3

    if options.fitFunc == "bernstein4":
        fitter.bernstein('model', 'mjj', 4)
        order = 4

    if options.fitFunc == "bernstein5":
        fitter.bernstein('model', 'mjj', 5)
        order = 5

    if options.fitFunc == "bifur":
        fitter.bifur('model', 'mjj')
        order = 3

    fitter.w.var("mjj").setVal(80)
    fitter.w.var("mjj").setMax(options.maxy)
    fitter.w.var("mjj").setMin(options.miny)
    for i in range(1, histo2D.GetNbinsX() + 1):
        x = histo2D.GetXaxis().GetBinCenter(i)
        print 'Bin:', i, 'Evaluating function at x=', x
        for j, g in enumerate(graphs):
            print "c_" + str(j), "=", g.Eval(x)
            fitter.w.var("c_" + str(j)).setVal(g.Eval(x, 0, "S"))

        histogram = fitter.w.pdf("model").createHistogram("mjj", options.binsy)
        for k in range(1, histo2D.GetNbinsY() + 1):
            bin = histo2D.GetBin(i, k)
            histo2D.SetBinContent(bin, histogram.GetBinContent(k))

    return graphs, histo2D
Exemplo n.º 6
0
    fitter.bernstein('model', 'x', order)
    parameterization['type'] = 'bernstein'
    parameterization['order'] = order

fitter.fit('model', 'data', [ROOT.RooFit.SumW2Error(1)])
fitter.fit('model', 'data', [ROOT.RooFit.SumW2Error(1)])

fitter.projection("model", "data", "x", "debug" + options.output + ".root",
                  options.title)
chi = fitter.projection("model", "data", "x",
                        "debug" + options.output + ".png", options.title)

print 'Chi2', chi

if parameterization['type'] == 'expo':
    val, err = fitter.fetch('c_0')
    parameterization['c_0'] = val
    parameterization['c_0Err'] = err

if parameterization['type'] == 'expoTail':
    for i in range(0, 2):
        var = 'c_' + str(i)
        val, err = fitter.fetch(var)
        parameterization[var] = val
        parameterization[var + 'Err'] = err

if parameterization['type'] == 'erfexp':
    for i in range(0, 3):
        var = 'c_' + str(i)
        val, err = fitter.fetch(var)
        parameterization[var] = val
Exemplo n.º 7
0
f = ROOT.TFile(args[0])
histo = f.Get(options.histo)

fitter = Fitter(['x', 'y'])
fitter.importBinnedData(histo, ['x', 'y'], 'data')

if options.function == 'erfexpW2D':
    fitter.mjjParamErfExp('model', options.json)

fitter.fit('model', 'data', [
    ROOT.RooFit.SumW2Error(1),
    ROOT.RooFit.ConditionalObservables(ROOT.RooArgSet(fitter.w.var("x")))
])
fitter.fit('model', 'data', [
    ROOT.RooFit.SumW2Error(1),
    ROOT.RooFit.ConditionalObservables(ROOT.RooArgSet(fitter.w.var("x")))
])
fitter.projectionCond("model", "data", "y", "x",
                      "debug" + options.output + ".png")

for i in range(0, 4):
    var = 'c_' + str(i)
    val, err = fitter.fetch(var)
    parameterization[var] = val
    parameterization[var + 'Err'] = err

f = open(options.output + ".json", "w")
json.dump(parameterization, f)
f.close()