示例#1
0
 def plot(NObserved, results, NControl, R, bkgPredict):
     r.gROOT.SetStyle("Plain")
     c = r.TCanvas("test")
     c.SetGrid()
     nbins = len(NObserved)
     obs = r.TH1D("obs", "obs", nbins, 0.5, nbins+0.5)
     pred = r.TH1D("pred", "pred", nbins, 0.5, nbins+0.5)
     pred2 = r.TH1D("pred2", "pred2", nbins, 0.5, nbins+0.5)
     for idx, b in enumerate(NObserved):
         obs.SetBinContent(idx+1, b)
         if bkgPredict: pred2.SetBinContent(idx+1, R["nominal"][idx]*bkgPredict[0][idx])
         pred.SetBinContent(idx+1, results[idx].predicted())
         perr = math.sqrt(results[idx].predicted())
         serr = R["MCStats"][idx]*NControl[idx]
         pred.SetBinError(idx+1,
                          math.sqrt(perr**2 + serr**2))
         obs.GetXaxis().SetBinLabel(idx+1, utils.formatBin(idx, False))
     pred.SetLineColor(r.kRed)
     pred2.SetLineColor(r.kGreen);
     obs.GetYaxis().SetRangeUser(0, 1.2*max(obs.GetMaximum(), pred.GetMaximum()))
     obs.SetStats(r.kFALSE)
     obs.Draw("hist")
     if bkgPredict: pred2.Draw("hist e same")
     pred.Draw("hist e same")
     leg = makeLegend()
     leg.AddEntry(pred, "Predicted", "L")
     if bkgPredict: leg.AddEntry(pred2, "Predicted (QCD Fit)", "L")
     leg.AddEntry(obs, "Observed", "L")
     leg.Draw()
     c.SaveAs("limit/%s_pred_obs.pdf" % channel.name)
示例#2
0
    # Load MC pseudo-data in bins
    data = utils.getZeroMC(channel, ctrl_channel)
    # This also calculates statistical uncertainties
    results = utils.makePredictions(data)

    # Get the scaled/smeared systematic variations
    systs = utils.getLiterallyAllSystematicsBkg(channel, ctrl_channel)

    # Loop through systematics and calculate systematic uncertainty
    for name, scaled in systs:
        utils.addSystematic(name, data, results, scaled)
        print name

    # LaTeX table
    l = Table()
    cols = [("value", "Bin", "l")] + [("bin%d" % i, utils.formatBin(i), "c") for i in range(len(bins))]

    l.defineColumns(cols)

    def fields(f):
        return dict([("bin%d" % idx, f(idx)) for idx in range(len(bins))])

    l.addRowFields(value = "Events Predicted", **fields(lambda idx : "%.1f" % results[idx].predicted()))
    l.addRowFields(value = "Events Observed", **fields(lambda idx : "%.1f" % results[idx].observed()))
    l.addRowFields(value = "$N_{\\textrm{signal}}/N_{\\textrm{control}}$", **fields(lambda idx : "%.2f" % data[idx].R()))
    l.addHLine()
    l.addRowFields(value = "Statistical Uncertainty (\%)",
                   **fields(lambda idx : "%.2f" % (results[idx].statErrorValue(0)*100/results[idx].predicted())))
    l.addHLine()
    l.addRowFields(value = "Systematic Uncertainty (\%)", **fields(
        lambda idx : "%.2f" % (math.sqrt(results[idx].totalSystError()**2 +