Beispiel #1
0
def optimizeMetBinning(bkgSet, signalSet, name, minHt, maxHt):
    style.defaultStyle()
    bkgHist = bkgSet.getHist("tr/met_vs_emht")
    sigHist = signalSet.getHist("tr/met_vs_emht")

    lumiScale = 40.00 / 27.22
    bkgHist.Scale(lumiScale)
    sigHist.Scale(lumiScale)

    minHtBin = bkgHist.GetYaxis().FindFixBin(minHt)
    maxHtBin = bkgHist.GetYaxis().FindFixBin(maxHt - 1e6)
    bkg1d = bkgHist.ProjectionX(aux.randomName(), minHtBin, maxHt)
    sig1d = sigHist.ProjectionX(aux.randomName(), minHtBin, maxHt)

    signifHist = sig1d.Clone(aux.randomName())
    binning = [sig1d.GetNbinsX() + 2]
    while binning[-1] > 1:
        maxSig = 0
        maxSigBin = 0
        for bin in range(binning[-1], -1, -1):
            b = bkg1d.Integral(bin, binning[-1])
            s = sig1d.Integral(bin, binning[-1])
            signif = asimovSig(s, b)
            if signif > maxSig:
                maxSig = signif
                maxSigBin = bin
        if maxSigBin == binning[-1]: break
        binning.append(maxSigBin)
    binning = binning[-1:1:-1]
    print[sig1d.GetBinLowEdge(b) for b in binning]
Beispiel #2
0
    def __init__( self, title, numerator, denominator, sysHisto=None ):

        # convcert TProfiles to histograms
        if isinstance( numerator, ROOT.TProfile ): numerator = convertToTH1( numerator )
        if isinstance( denominator, ROOT.TProfile ): denominator = convertToTH1( denominator )

        self.title = title
        self.numerator = numerator
        self.denominator = denominator
        self.sysHisto = sysHisto
        self.ratio = numerator.Clone( aux.randomName() )
        self.ratioStat = denominator.Clone( aux.randomName() )
        self.ratioSys = denominator.Clone( aux.randomName() )
        self.totalUncert = denominator.Clone( aux.randomName() )
        self.allowUnsymmetricYaxis = False
Beispiel #3
0
    def __init__(self, title, numerator, denominator, sysHisto=None):

        # convcert TProfiles to histograms
        if isinstance(numerator, ROOT.TProfile):
            numerator = convertToTH1(numerator)
        if isinstance(denominator, ROOT.TProfile):
            denominator = convertToTH1(denominator)

        self.title = title
        self.numerator = numerator
        self.denominator = denominator.Clone(aux.randomName())
        self.sysHisto = sysHisto
        self.ratio = numerator.Clone(aux.randomName())
        self.ratioStat = denominator.Clone(aux.randomName())
        self.ratioSys = sysHisto.Clone(
            aux.randomName()) if sysHisto else denominator.Clone(
                aux.randomName())
        self.totalUncert = denominator.Clone(aux.randomName())
        self.allowUnsymmetricYaxis = False

        self.ratio.drawOption_ = "e0"

        # Set ratio properties
        for hist in [
                self.ratio, self.ratioSys, self.ratioStat, self.totalUncert
        ]:
            hist.GetYaxis().SetNdivisions(2, 5, 2)
            hist.SetTitleOffset(1.2, "Y")
            hist.SetYTitle(self.title)

        aux.drawOpt(self.totalUncert, "totUnc")
        aux.drawOpt(self.ratioSys, "sysUnc")
        aux.drawOpt(self.ratioStat, "statUnc")
Beispiel #4
0
def optimizeBinnigs2d(bkgSet, name, signalSet):
    style.style2d()
    bkgHist = bkgSet.getHist("tr/met_vs_emht")
    sigHist = signalSet.getHist("tr/met_vs_emht")

    lumiScale = 40.00 / 27.22
    bkgHist.Scale(lumiScale)
    sigHist.Scale(lumiScale)

    xmax = 800
    ymax = 4000
    xmaxBin = bkgHist.GetXaxis().FindBin(xmax)
    ymaxBin = bkgHist.GetYaxis().FindBin(ymax)

    signifHist = sigHist.Clone(aux.randomName())
    for xbin, ybin in aux.loopH(sigHist):
        if xbin > xmaxBin or ybin > ymaxBin: continue
        b = bkgHist.Integral(xbin, -1, ybin, -1)
        s = sigHist.Integral(xbin, -1, ybin, -1)
        signif = asimovSig(s, b)
        signifHist.SetBinContent(xbin, ybin, signif)

    signifHist.GetXaxis().SetRange(0, xmaxBin)
    signifHist.GetYaxis().SetRange(0, ymaxBin)
    signifHist.SetXTitle("minimum " + signifHist.GetXaxis().GetTitle())
    signifHist.SetYTitle("minimum " + signifHist.GetYaxis().GetTitle())
    signifHist.SetZTitle("Asimov significance")
    signifHist.Draw("colz")
    l = aux.Label(info=signalSet.label, drawAll=False)
    l.lum = ROOT.TLatex(
        .63, .95,
        "%.2f fb^{-1} (%s TeV)" % (aux.intLumi / 1000. * lumiScale, 13))
    l.draw()

    aux.save("optimizeBinning2d_{}_{}".format(name, signalSet.names[0]),
             log=False)
Beispiel #5
0
def convertToTH1(profile):
    h = profile.ProjectionX(aux.randomName())
    h.SetLineColor(profile.GetLineColor())
    return h